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
|
@@ -0,0 +1,316 @@
|
|
|
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
|
+
* @module gina/core/connectors/sqlite/kv-store
|
|
12
|
+
* @description SQLite backend for the general-purpose KV primitive (#KV1,
|
|
13
|
+
* slice 2) — the zero-dependency durable backend, sitting between the
|
|
14
|
+
* in-memory default (fast, process-local, lost on restart) and redis (shared
|
|
15
|
+
* across hosts, needs a server).
|
|
16
|
+
*
|
|
17
|
+
* Backed by `node:sqlite` through the shared `lib/sqlite-driver` seam (the
|
|
18
|
+
* built-in on Node, a `bun:sqlite` adapter under Bun), the same substrate as
|
|
19
|
+
* `lib/state`, the SQLite session/job stores and the storage metadata store.
|
|
20
|
+
*
|
|
21
|
+
* **What it buys over memory:** namespace contents survive a bundle restart,
|
|
22
|
+
* and any process opening the same file sees them — so a single-host
|
|
23
|
+
* multi-bundle deployment can share a namespace without running redis. **What
|
|
24
|
+
* it does not buy:** cross-HOST sharing; that is what the redis backend is
|
|
25
|
+
* for.
|
|
26
|
+
*
|
|
27
|
+
* **Namespaces share a file by a composite key**, not a key prefix: the table
|
|
28
|
+
* is keyed `(ns, key)`, so two namespaces pointing at one `connectors.json`
|
|
29
|
+
* entry never collide and `clear()` is a single `DELETE ... WHERE ns = ?`.
|
|
30
|
+
* (The redis backend prefixes instead, because redis has no composite key.)
|
|
31
|
+
*
|
|
32
|
+
* **Atomicity comes from IMMEDIATE transactions, not from the driver being
|
|
33
|
+
* synchronous.** Being synchronous makes each verb indivisible *within this
|
|
34
|
+
* process*, which is exactly the guarantee that does NOT hold once a second
|
|
35
|
+
* process opens the same file — and multi-process sharing is the reason to
|
|
36
|
+
* choose this backend at all. So every read-modify-write verb (`del`,
|
|
37
|
+
* `setnx`, `consume`, `incrby`, `compareDel`) runs inside
|
|
38
|
+
* `BEGIN IMMEDIATE` / `COMMIT`, which takes SQLite's write lock up front and
|
|
39
|
+
* makes the pair atomic against other processes too. Single-statement verbs
|
|
40
|
+
* need no transaction.
|
|
41
|
+
*
|
|
42
|
+
* **Expiry is lazy on read plus a periodic sweep**, mirroring the in-memory
|
|
43
|
+
* backend: every read filters on `exp`, so an unswept expired row is never
|
|
44
|
+
* observable; the sweep only bounds file growth. `clear()` deliberately counts
|
|
45
|
+
* expired-but-unswept rows, because the in-memory backend's `clear()` reports
|
|
46
|
+
* `map.size` on the same basis.
|
|
47
|
+
*
|
|
48
|
+
* `file` is the PATH key by the sqlite DB-connector convention — the model
|
|
49
|
+
* layer scans every `connectors.json` entry at boot and treats `database` as a
|
|
50
|
+
* NAME, so a path in `database` fails the boot before this store is built.
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* // connectors.json: { "kvDb": { "connector": "sqlite", "file": "/data/kv.db" } }
|
|
54
|
+
* // settings.json: { "kv": { "namespaces": { "tokens": { "store": "kvDb" } } } }
|
|
55
|
+
* // (wired automatically at boot by gna.js via lib/kv-store)
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Default expired-row sweep cadence, ms.
|
|
60
|
+
* @constant
|
|
61
|
+
* @inner
|
|
62
|
+
* @type {number}
|
|
63
|
+
*/
|
|
64
|
+
var DEFAULT_SWEEP_MS = 30000;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Build the SQLite KV backend for one namespace.
|
|
68
|
+
*
|
|
69
|
+
* @class SqliteKvStore
|
|
70
|
+
* @constructor
|
|
71
|
+
*
|
|
72
|
+
* @param {object} connConf - Resolved `connectors.json` entry.
|
|
73
|
+
* @param {string} [connConf.file] - SQLite file path, or `':memory:'` (volatile —
|
|
74
|
+
* only useful in tests). Defaults to
|
|
75
|
+
* `~/.gina/{version}/kv-{bundle}.db`.
|
|
76
|
+
* @param {number} [connConf.sweepInterval] - Expired-row sweep cadence in ms (default 30000).
|
|
77
|
+
* @param {string} bundle - Bundle name — used for the default file name.
|
|
78
|
+
* @param {string} namespaceName - KV namespace this store backs (the `ns` column).
|
|
79
|
+
* @returns {object} - A `KvStoreContract` instance (see `lib/kv`).
|
|
80
|
+
* @throws {Error} - When no SQLite driver is available, or the
|
|
81
|
+
* database file cannot be opened.
|
|
82
|
+
*/
|
|
83
|
+
module.exports = function SqliteKvStore(connConf, bundle, namespaceName) {
|
|
84
|
+
connConf = connConf || {};
|
|
85
|
+
|
|
86
|
+
var DatabaseSync;
|
|
87
|
+
try {
|
|
88
|
+
DatabaseSync = require('./../../../../lib/sqlite-driver').getDatabaseSync();
|
|
89
|
+
} catch (e) {
|
|
90
|
+
throw new Error('[SqliteKvStore] ' + e.message);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Resolve the DB path: connectors.json `file` > default per-bundle file.
|
|
94
|
+
// The default branch is the only place the injected `_` / `getPath`
|
|
95
|
+
// globals are read, so a test passing an explicit `file` stays standalone.
|
|
96
|
+
var dbPath = connConf.file
|
|
97
|
+
|| _(getPath('gina').home + '/kv-' + (bundle || 'bundle') + '.db', true);
|
|
98
|
+
|
|
99
|
+
var ns = String(namespaceName || 'default');
|
|
100
|
+
var db = new DatabaseSync(dbPath);
|
|
101
|
+
|
|
102
|
+
// WAL + synchronous=NORMAL — the same trade-off as the sibling SQLite
|
|
103
|
+
// stores: concurrent readers never block the writer; a crash can lose the
|
|
104
|
+
// last committed transaction but never corrupts the file.
|
|
105
|
+
db.exec('PRAGMA journal_mode=WAL');
|
|
106
|
+
db.exec('PRAGMA synchronous=NORMAL');
|
|
107
|
+
|
|
108
|
+
// Schema bootstrap — idempotent. `exp` is epoch MILLISECONDS or NULL for
|
|
109
|
+
// "no expiry"; the composite primary key is what isolates namespaces
|
|
110
|
+
// sharing one file.
|
|
111
|
+
db.exec(
|
|
112
|
+
'CREATE TABLE IF NOT EXISTS kv ('
|
|
113
|
+
+ ' ns TEXT NOT NULL,'
|
|
114
|
+
+ ' key TEXT NOT NULL,'
|
|
115
|
+
+ ' value TEXT NOT NULL,'
|
|
116
|
+
+ ' exp INTEGER,'
|
|
117
|
+
+ ' PRIMARY KEY (ns, key)'
|
|
118
|
+
+ ')'
|
|
119
|
+
);
|
|
120
|
+
db.exec('CREATE INDEX IF NOT EXISTS kv_exp ON kv (exp)');
|
|
121
|
+
|
|
122
|
+
var stmtGet = db.prepare('SELECT value, exp FROM kv WHERE ns = ? AND key = ?');
|
|
123
|
+
var stmtPut = db.prepare('INSERT OR REPLACE INTO kv (ns, key, value, exp) VALUES (?, ?, ?, ?)');
|
|
124
|
+
var stmtDel = db.prepare('DELETE FROM kv WHERE ns = ? AND key = ?');
|
|
125
|
+
var stmtExpire = db.prepare('UPDATE kv SET exp = ? WHERE ns = ? AND key = ?');
|
|
126
|
+
var stmtClear = db.prepare('DELETE FROM kv WHERE ns = ?');
|
|
127
|
+
var stmtSweep = db.prepare('DELETE FROM kv WHERE ns = ? AND exp IS NOT NULL AND exp <= ?');
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The live row for a key, or `null` when absent or expired.
|
|
131
|
+
* @inner
|
|
132
|
+
* @param {string} key - Caller key.
|
|
133
|
+
* @returns {?{value: string, exp: ?number}}
|
|
134
|
+
*/
|
|
135
|
+
function live(key) {
|
|
136
|
+
var row = stmtGet.get(ns, key);
|
|
137
|
+
if (!row) { return null; }
|
|
138
|
+
if (row.exp !== null && typeof row.exp !== 'undefined' && row.exp <= Date.now()) { return null; }
|
|
139
|
+
return row;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Run `fn` inside `BEGIN IMMEDIATE` / `COMMIT`, rolling back on a throw.
|
|
144
|
+
* IMMEDIATE takes the write lock up front, so a read-modify-write pair is
|
|
145
|
+
* atomic against OTHER PROCESSES sharing the file — the guarantee the
|
|
146
|
+
* synchronous driver alone does not provide.
|
|
147
|
+
*
|
|
148
|
+
* @inner
|
|
149
|
+
* @param {function} fn - Body; its return value is returned.
|
|
150
|
+
* @returns {*} Whatever `fn` returns.
|
|
151
|
+
*/
|
|
152
|
+
function tx(fn) {
|
|
153
|
+
db.exec('BEGIN IMMEDIATE');
|
|
154
|
+
var out;
|
|
155
|
+
try {
|
|
156
|
+
out = fn();
|
|
157
|
+
} catch (err) {
|
|
158
|
+
try { db.exec('ROLLBACK'); } catch (rbErr) { /* the throw below is the real error */ }
|
|
159
|
+
throw err;
|
|
160
|
+
}
|
|
161
|
+
db.exec('COMMIT');
|
|
162
|
+
return out;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Lift a synchronous body into the contract's promise shape.
|
|
167
|
+
* @inner
|
|
168
|
+
* @param {function} fn - Body.
|
|
169
|
+
* @returns {Promise<*>}
|
|
170
|
+
*/
|
|
171
|
+
function P(fn) {
|
|
172
|
+
try {
|
|
173
|
+
return Promise.resolve(fn());
|
|
174
|
+
} catch (err) {
|
|
175
|
+
return Promise.reject(err);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
var sweepMs = (Number.isSafeInteger(connConf.sweepInterval) && connConf.sweepInterval > 0)
|
|
180
|
+
? connConf.sweepInterval
|
|
181
|
+
: DEFAULT_SWEEP_MS;
|
|
182
|
+
|
|
183
|
+
// Bounds file growth only — reads already filter on `exp`, so an unswept
|
|
184
|
+
// row is never observable. Never keeps the process alive.
|
|
185
|
+
var timer = setInterval(function sweepExpired() {
|
|
186
|
+
try { stmtSweep.run(ns, Date.now()); } catch (sweepErr) { /* next tick retries */ }
|
|
187
|
+
}, sweepMs);
|
|
188
|
+
if (timer.unref) { timer.unref(); }
|
|
189
|
+
|
|
190
|
+
return {
|
|
191
|
+
get: function (key) {
|
|
192
|
+
return P(function () {
|
|
193
|
+
var row = live(key);
|
|
194
|
+
return row ? row.value : null;
|
|
195
|
+
});
|
|
196
|
+
},
|
|
197
|
+
|
|
198
|
+
set: function (key, s, ttlMs) {
|
|
199
|
+
return P(function () {
|
|
200
|
+
stmtPut.run(ns, key, s, ttlMs ? Date.now() + ttlMs : null);
|
|
201
|
+
return undefined;
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
|
|
205
|
+
del: function (key) {
|
|
206
|
+
return P(function () {
|
|
207
|
+
return tx(function () {
|
|
208
|
+
var existed = !!live(key);
|
|
209
|
+
// Unconditional: an expired row is swept opportunistically
|
|
210
|
+
// here too, while `existed` keeps the contract's
|
|
211
|
+
// live-only semantics.
|
|
212
|
+
stmtDel.run(ns, key);
|
|
213
|
+
return existed;
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
},
|
|
217
|
+
|
|
218
|
+
has: function (key) {
|
|
219
|
+
return P(function () { return !!live(key); });
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
pttl: function (key) {
|
|
223
|
+
return P(function () {
|
|
224
|
+
var row = live(key);
|
|
225
|
+
if (!row) { return null; }
|
|
226
|
+
if (row.exp === null || typeof row.exp === 'undefined') { return -1; }
|
|
227
|
+
return Math.max(0, row.exp - Date.now());
|
|
228
|
+
});
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
pexpire: function (key, ttlMs) {
|
|
232
|
+
return P(function () {
|
|
233
|
+
return tx(function () {
|
|
234
|
+
if (!live(key)) { return false; }
|
|
235
|
+
stmtExpire.run(Date.now() + ttlMs, ns, key);
|
|
236
|
+
return true;
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
setnx: function (key, s, ttlMs) {
|
|
242
|
+
return P(function () {
|
|
243
|
+
return tx(function () {
|
|
244
|
+
// An EXPIRED row must lose, not win: plain INSERT ... ON
|
|
245
|
+
// CONFLICT DO NOTHING would see the dead row as a conflict
|
|
246
|
+
// and refuse a write that should succeed.
|
|
247
|
+
if (live(key)) { return false; }
|
|
248
|
+
stmtPut.run(ns, key, s, ttlMs ? Date.now() + ttlMs : null);
|
|
249
|
+
return true;
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
},
|
|
253
|
+
|
|
254
|
+
consume: function (key) {
|
|
255
|
+
return P(function () {
|
|
256
|
+
return tx(function () {
|
|
257
|
+
var row = live(key);
|
|
258
|
+
stmtDel.run(ns, key);
|
|
259
|
+
return row ? row.value : null;
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
},
|
|
263
|
+
|
|
264
|
+
incrby: function (key, by, ttlMs) {
|
|
265
|
+
return P(function () {
|
|
266
|
+
return tx(function () {
|
|
267
|
+
var row = live(key);
|
|
268
|
+
var cur = 0;
|
|
269
|
+
if (row) {
|
|
270
|
+
cur = Number(row.value);
|
|
271
|
+
if (!Number.isSafeInteger(cur)) {
|
|
272
|
+
throw new Error('[kv] value at key `' + key + '` is not an integer — incr/decr need an integer value');
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
var next = cur + by;
|
|
276
|
+
if (!Number.isSafeInteger(next)) {
|
|
277
|
+
throw new Error('[kv] increment leaves the safe-integer range at key `' + key + '`');
|
|
278
|
+
}
|
|
279
|
+
// TTL applies on CREATE only — an existing counter keeps
|
|
280
|
+
// whatever expiry it already had.
|
|
281
|
+
var exp = row ? ((typeof row.exp === 'undefined') ? null : row.exp)
|
|
282
|
+
: (ttlMs ? Date.now() + ttlMs : null);
|
|
283
|
+
stmtPut.run(ns, key, String(next), exp);
|
|
284
|
+
return next;
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
},
|
|
288
|
+
|
|
289
|
+
compareDel: function (key, s) {
|
|
290
|
+
return P(function () {
|
|
291
|
+
return tx(function () {
|
|
292
|
+
var row = live(key);
|
|
293
|
+
if (row && row.value === s) {
|
|
294
|
+
stmtDel.run(ns, key);
|
|
295
|
+
return true;
|
|
296
|
+
}
|
|
297
|
+
return false;
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
},
|
|
301
|
+
|
|
302
|
+
clear: function () {
|
|
303
|
+
return P(function () {
|
|
304
|
+
// Counts expired-but-unswept rows, matching the in-memory
|
|
305
|
+
// backend's `map.size` basis.
|
|
306
|
+
var res = stmtClear.run(ns);
|
|
307
|
+
return res.changes;
|
|
308
|
+
});
|
|
309
|
+
},
|
|
310
|
+
|
|
311
|
+
close: function () {
|
|
312
|
+
clearInterval(timer);
|
|
313
|
+
try { db.close(); } catch (closeErr) { /* already closed */ }
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
};
|
|
@@ -4514,6 +4514,50 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
4514
4514
|
if ( !/http2/.test(httpLib) && /https/.test(options.scheme) ) {
|
|
4515
4515
|
httpLib += 's';
|
|
4516
4516
|
}
|
|
4517
|
+
|
|
4518
|
+
// #MS5 — per-authority circuit breaker (opt-in: settings.json
|
|
4519
|
+
// `server.query.circuitBreaker`, boot-resolved onto the engine
|
|
4520
|
+
// instance by server.js `start()`). Gating happens HERE, above the
|
|
4521
|
+
// protocol dispatch, so an open circuit rejects before any
|
|
4522
|
+
// connection, retry or pre-flight machinery runs: the #B34/#B52/#B53
|
|
4523
|
+
// invariants inside the handlers are untouched, and retries can
|
|
4524
|
+
// never hammer an open circuit.
|
|
4525
|
+
var _cbConf = self.serverInstance && self.serverInstance._queryCircuitBreaker;
|
|
4526
|
+
if ( _cbConf && _cbConf.enabled ) {
|
|
4527
|
+
var _cbAuthority = options.hostname + ':' + options.port;
|
|
4528
|
+
var _cbEntry = _getCircuitEntry(_cbAuthority);
|
|
4529
|
+
var _cbGate = _circuitAdmit(_cbEntry, _cbConf, isCritical);
|
|
4530
|
+
if ( !_cbGate.admitted ) {
|
|
4531
|
+
var _cbErr = new GinaCircuitOpenError(_cbAuthority, _cbGate.retryAfterMs);
|
|
4532
|
+
if (!isCritical) {
|
|
4533
|
+
// mirror the H3 `_swallowIfNonCritical` contract: log-only, no callback
|
|
4534
|
+
console.warn('[QUERY][circuit-open][non-critical] swallowed '+ (options.method || '') +' '+ (options.path || '') +' to '+ _cbAuthority);
|
|
4535
|
+
return;
|
|
4536
|
+
}
|
|
4537
|
+
if (callback) {
|
|
4538
|
+
return callback(_cbErr);
|
|
4539
|
+
}
|
|
4540
|
+
return self.emit('query#complete', _cbErr);
|
|
4541
|
+
}
|
|
4542
|
+
if ( typeof(callback) == 'function' ) {
|
|
4543
|
+
var _cbOriginalCallback = callback;
|
|
4544
|
+
var _cbSettled = false;
|
|
4545
|
+
callback = function onCircuitObservedOutcome(err) {
|
|
4546
|
+
if (!_cbSettled) { // record once, whatever the terminal
|
|
4547
|
+
_cbSettled = true;
|
|
4548
|
+
_circuitRecord(_cbEntry, _cbConf, _cbGate.probe, err);
|
|
4549
|
+
}
|
|
4550
|
+
return _cbOriginalCallback.apply(this, arguments);
|
|
4551
|
+
};
|
|
4552
|
+
} else if (_cbGate.probe) {
|
|
4553
|
+
// No callback → the outcome is unobservable (the shared
|
|
4554
|
+
// `query#complete` emitter would misattribute concurrent
|
|
4555
|
+
// queries) → release the probe slot immediately rather than
|
|
4556
|
+
// wedge the half-open state.
|
|
4557
|
+
_cbEntry.probeInFlight = false;
|
|
4558
|
+
}
|
|
4559
|
+
}
|
|
4560
|
+
|
|
4517
4561
|
browser = require(''+ httpLib);
|
|
4518
4562
|
// #FI — capture query call start time for Flow timeline
|
|
4519
4563
|
if (_isDev && local._timeline) {
|
|
@@ -4689,6 +4733,164 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
4689
4733
|
// });
|
|
4690
4734
|
// };
|
|
4691
4735
|
|
|
4736
|
+
/**
|
|
4737
|
+
* Error surfaced by `query()` when the target authority's circuit is OPEN (#MS5).
|
|
4738
|
+
*
|
|
4739
|
+
* Minted ABOVE the HTTP/1.x / HTTP/2 dispatch — before any connection attempt,
|
|
4740
|
+
* retry or pre-flight PING runs — so it applies identically to both client
|
|
4741
|
+
* paths. The field shape mirrors `GinaHttp2Error` (`code`, `retryable`,
|
|
4742
|
+
* `status`, `retryCount`) so machine consumers can switch on `code` without
|
|
4743
|
+
* caring which transport would have been used; the name is protocol-neutral
|
|
4744
|
+
* on purpose.
|
|
4745
|
+
*
|
|
4746
|
+
* @constructor
|
|
4747
|
+
* @param {string} authority - `hostname:port` whose circuit is open
|
|
4748
|
+
* @param {number} retryAfterMs - Milliseconds until the next half-open probe may be admitted (0 = a probe slot is free now)
|
|
4749
|
+
*/
|
|
4750
|
+
function GinaCircuitOpenError(authority, retryAfterMs) {
|
|
4751
|
+
Error.call(this);
|
|
4752
|
+
this.name = 'GinaCircuitOpenError';
|
|
4753
|
+
this.message = 'Controller::query() circuit is OPEN for [ '+ authority +' ] — failing fast'+ ( retryAfterMs > 0 ? ' (next probe allowed in '+ retryAfterMs +'ms)' : '' );
|
|
4754
|
+
if (Error.captureStackTrace) {
|
|
4755
|
+
Error.captureStackTrace(this, GinaCircuitOpenError);
|
|
4756
|
+
} else {
|
|
4757
|
+
this.stack = (new Error(this.message)).stack;
|
|
4758
|
+
}
|
|
4759
|
+
this.code = 'CIRCUIT_OPEN';
|
|
4760
|
+
this.retryable = false;
|
|
4761
|
+
this.status = 503;
|
|
4762
|
+
this.retryCount = 0;
|
|
4763
|
+
this.authority = authority;
|
|
4764
|
+
this.retryAfterMs = retryAfterMs;
|
|
4765
|
+
}
|
|
4766
|
+
GinaCircuitOpenError.prototype = Object.create(Error.prototype);
|
|
4767
|
+
GinaCircuitOpenError.prototype.constructor = GinaCircuitOpenError;
|
|
4768
|
+
|
|
4769
|
+
/**
|
|
4770
|
+
* Transport-failure classifier for the #MS5 circuit breaker.
|
|
4771
|
+
*
|
|
4772
|
+
* Counts ONLY errors that indicate the upstream (or the path to it) is
|
|
4773
|
+
* unhealthy: every `GinaHttp2Error` (all of its codes are transport-class —
|
|
4774
|
+
* post-#B34 an application response, whatever its status, flows through the
|
|
4775
|
+
* SUCCESS terminus as data, never as `err`) plus the HTTP/1.x socket-level
|
|
4776
|
+
* codes, checked on `err.code` and `err.cause.code` (the HTTP/1.x error path
|
|
4777
|
+
* annotates both shapes). Anything else — a caller bug surfacing through the
|
|
4778
|
+
* sync dispatch `catch`, a malformed option, an app-level error — is NEUTRAL:
|
|
4779
|
+
* it neither trips nor resets the circuit, because it says nothing about
|
|
4780
|
+
* upstream health.
|
|
4781
|
+
*
|
|
4782
|
+
* @inner
|
|
4783
|
+
* @param {*} err - Whatever the client path surfaced to the query callback
|
|
4784
|
+
* @returns {boolean} `true` when the error counts toward opening the circuit
|
|
4785
|
+
*/
|
|
4786
|
+
var _CB_TRANSPORT_CODES = /^(ECONNREFUSED|ECONNRESET|ETIMEDOUT|EPIPE|ECONNABORTED|EHOSTUNREACH|ENETUNREACH)$/;
|
|
4787
|
+
var _isCircuitTransportFailure = function(err) {
|
|
4788
|
+
if (!err) return false;
|
|
4789
|
+
if (err.name === 'GinaHttp2Error') return true;
|
|
4790
|
+
var code = err.code || (err.cause && err.cause.code);
|
|
4791
|
+
return _CB_TRANSPORT_CODES.test(String(code || ''));
|
|
4792
|
+
};
|
|
4793
|
+
|
|
4794
|
+
/**
|
|
4795
|
+
* Lazily fetch (or mint) the per-authority breaker entry (#MS5).
|
|
4796
|
+
*
|
|
4797
|
+
* State lives on the SERVER instance — the same home as `_http2Sessions` —
|
|
4798
|
+
* because dev mode re-requires this module per request (see the #B52 note):
|
|
4799
|
+
* module- or controller-level state would reset on every hot-reload, while
|
|
4800
|
+
* instance state survives reloads and dies on restart, which is exactly the
|
|
4801
|
+
* lifetime circuit state wants. Entries are keyed per distinct
|
|
4802
|
+
* `hostname:port`; query targets come from bundle config and app code (a
|
|
4803
|
+
* trusted surface), so cardinality is not attacker-controlled.
|
|
4804
|
+
*
|
|
4805
|
+
* @inner
|
|
4806
|
+
* @param {string} authority - `hostname:port`
|
|
4807
|
+
* @returns {object} `{ state, consecutiveFailures, openedAt, probeInFlight }`
|
|
4808
|
+
*/
|
|
4809
|
+
var _getCircuitEntry = function(authority) {
|
|
4810
|
+
if (!self.serverInstance._queryCircuitBreakers) {
|
|
4811
|
+
self.serverInstance._queryCircuitBreakers = {};
|
|
4812
|
+
}
|
|
4813
|
+
var registry = self.serverInstance._queryCircuitBreakers;
|
|
4814
|
+
if (!registry[authority]) {
|
|
4815
|
+
registry[authority] = { state: 'closed', consecutiveFailures: 0, openedAt: 0, probeInFlight: false };
|
|
4816
|
+
}
|
|
4817
|
+
return registry[authority];
|
|
4818
|
+
};
|
|
4819
|
+
|
|
4820
|
+
/**
|
|
4821
|
+
* Admission decision for one outgoing query under the #MS5 breaker.
|
|
4822
|
+
*
|
|
4823
|
+
* Runs the lazy OPEN → HALF-OPEN transition first (the breaker owns NO
|
|
4824
|
+
* timers: elapsed time is computed on access), then answers:
|
|
4825
|
+
*
|
|
4826
|
+
* - CLOSED → admit
|
|
4827
|
+
* - OPEN, cooling → reject, reporting the remaining cooldown
|
|
4828
|
+
* - OPEN, cooled down → become HALF-OPEN and fall through
|
|
4829
|
+
* - HALF-OPEN → admit exactly ONE probe, and only for a CRITICAL
|
|
4830
|
+
* request: a non-critical failure is swallowed by `_swallowIfNonCritical`
|
|
4831
|
+
* (its callback never fires), so a non-critical probe could never report
|
|
4832
|
+
* back and would wedge `probeInFlight` forever. Everything else is
|
|
4833
|
+
* rejected until the probe settles.
|
|
4834
|
+
*
|
|
4835
|
+
* @inner
|
|
4836
|
+
* @param {object} entry - Breaker entry from `_getCircuitEntry()`
|
|
4837
|
+
* @param {object} conf - Resolved policy (`failureThreshold`, `cooldownMs`)
|
|
4838
|
+
* @param {boolean} isCritical - The query's H3 criticality flag
|
|
4839
|
+
* @returns {object} `{ admitted, probe, retryAfterMs }`
|
|
4840
|
+
*/
|
|
4841
|
+
var _circuitAdmit = function(entry, conf, isCritical) {
|
|
4842
|
+
if (entry.state === 'open') {
|
|
4843
|
+
var elapsed = Date.now() - entry.openedAt;
|
|
4844
|
+
if (elapsed < conf.cooldownMs) {
|
|
4845
|
+
return { admitted: false, probe: false, retryAfterMs: conf.cooldownMs - elapsed };
|
|
4846
|
+
}
|
|
4847
|
+
entry.state = 'half-open';
|
|
4848
|
+
entry.probeInFlight = false;
|
|
4849
|
+
}
|
|
4850
|
+
if (entry.state === 'half-open') {
|
|
4851
|
+
if (entry.probeInFlight || !isCritical) {
|
|
4852
|
+
return { admitted: false, probe: false, retryAfterMs: 0 };
|
|
4853
|
+
}
|
|
4854
|
+
entry.probeInFlight = true;
|
|
4855
|
+
return { admitted: true, probe: true, retryAfterMs: 0 };
|
|
4856
|
+
}
|
|
4857
|
+
return { admitted: true, probe: false, retryAfterMs: 0 };
|
|
4858
|
+
};
|
|
4859
|
+
|
|
4860
|
+
/**
|
|
4861
|
+
* Record one settled query outcome against its authority's circuit (#MS5).
|
|
4862
|
+
*
|
|
4863
|
+
* - success → CLOSED, counter reset (a settling probe closes the circuit)
|
|
4864
|
+
* - transport failure → counter + 1; reaching `failureThreshold` — or failing
|
|
4865
|
+
* the half-open probe — re-opens with a fresh cooldown
|
|
4866
|
+
* - neutral (non-transport) error → releases a probe slot but otherwise
|
|
4867
|
+
* changes nothing (see `_isCircuitTransportFailure`)
|
|
4868
|
+
*
|
|
4869
|
+
* @inner
|
|
4870
|
+
* @param {object} entry - Breaker entry
|
|
4871
|
+
* @param {object} conf - Resolved policy
|
|
4872
|
+
* @param {boolean} isProbe - Whether this outcome settles the half-open probe
|
|
4873
|
+
* @param {*} err - The callback's error argument (`false` on success — see §9's sentinel)
|
|
4874
|
+
*/
|
|
4875
|
+
var _circuitRecord = function(entry, conf, isProbe, err) {
|
|
4876
|
+
if (isProbe) {
|
|
4877
|
+
entry.probeInFlight = false;
|
|
4878
|
+
}
|
|
4879
|
+
if (!err) {
|
|
4880
|
+
entry.state = 'closed';
|
|
4881
|
+
entry.consecutiveFailures = 0;
|
|
4882
|
+
return;
|
|
4883
|
+
}
|
|
4884
|
+
if ( !_isCircuitTransportFailure(err) ) {
|
|
4885
|
+
return; // neutral — caller bug or app-level error
|
|
4886
|
+
}
|
|
4887
|
+
entry.consecutiveFailures++;
|
|
4888
|
+
if (isProbe || entry.consecutiveFailures >= conf.failureThreshold) {
|
|
4889
|
+
entry.state = 'open';
|
|
4890
|
+
entry.openedAt = Date.now();
|
|
4891
|
+
}
|
|
4892
|
+
};
|
|
4893
|
+
|
|
4692
4894
|
/**
|
|
4693
4895
|
* #B53 — Idempotency guard for inter-bundle client retries.
|
|
4694
4896
|
*
|
|
@@ -1748,6 +1748,62 @@ isBundleMounted(projects, bundlesPath, getContext('bundle'), function onBundleMo
|
|
|
1748
1748
|
console.warn('[storage] config validation skipped: ' + (stoErr.message || stoErr));
|
|
1749
1749
|
}
|
|
1750
1750
|
|
|
1751
|
+
// #KV1 — general-purpose KV primitive. Validate the starting
|
|
1752
|
+
// bundle's `kv` block, build any connector-backed namespace stores,
|
|
1753
|
+
// then install the namespaces before the first request. FATAL on an
|
|
1754
|
+
// unbuildable config (the #STO1 shape above): a namespace whose
|
|
1755
|
+
// declared store cannot build would leave gina.kv() handing out a
|
|
1756
|
+
// backend the operator did not ask for. Dormant — zero cost — when
|
|
1757
|
+
// the block is absent.
|
|
1758
|
+
try {
|
|
1759
|
+
var _kvAll = config.getInstance();
|
|
1760
|
+
var _kvSettings = null;
|
|
1761
|
+
try {
|
|
1762
|
+
_kvSettings = _kvAll[gna.core.startingApp][env].content.settings.kv;
|
|
1763
|
+
} catch (kvConfErr) { _kvSettings = null; }
|
|
1764
|
+
if ( _kvSettings ) {
|
|
1765
|
+
var _kvCheck = lib.kv.validateConfig(_kvSettings);
|
|
1766
|
+
for (var _kvW = 0; _kvW < _kvCheck.warnings.length; _kvW++) {
|
|
1767
|
+
console.warn('[kv] ' + _kvCheck.warnings[_kvW]);
|
|
1768
|
+
}
|
|
1769
|
+
if (_kvCheck.fatal) {
|
|
1770
|
+
var _kvFatalMsg = '[kv] invalid kv configuration — aborting boot: ' + _kvCheck.fatal;
|
|
1771
|
+
console.emerg(_kvFatalMsg);
|
|
1772
|
+
// boot-exit-flush: process.exit() truncates async stdio on a pipe.
|
|
1773
|
+
try { fs.writeSync(2, _kvFatalMsg + '\n'); } catch (_e) {}
|
|
1774
|
+
process.exit(1);
|
|
1775
|
+
}
|
|
1776
|
+
if (_kvCheck.namespaceCount > 0) {
|
|
1777
|
+
var _kvNamespaces = _kvSettings.namespaces;
|
|
1778
|
+
var _kvStores = {};
|
|
1779
|
+
for (var _kvN in _kvNamespaces) {
|
|
1780
|
+
if ( typeof(_kvNamespaces[_kvN].store) == 'string' && _kvNamespaces[_kvN].store.length > 0 ) {
|
|
1781
|
+
try {
|
|
1782
|
+
// the namespace name is passed so an implementation
|
|
1783
|
+
// prefixes its keys — two namespaces may share one
|
|
1784
|
+
// connectors.json entry without colliding
|
|
1785
|
+
_kvStores[_kvN] = lib.KvStore(_kvNamespaces[_kvN].store, _kvN);
|
|
1786
|
+
} catch (kvStoreErr) {
|
|
1787
|
+
var _kvStoreMsg = '[kv] namespace `' + _kvN + '` names store `' + _kvNamespaces[_kvN].store + '`, which could not be built — aborting boot: ' + (kvStoreErr.message || kvStoreErr);
|
|
1788
|
+
console.emerg(_kvStoreMsg + '\n' + (kvStoreErr.stack || ''));
|
|
1789
|
+
try { fs.writeSync(2, _kvStoreMsg + '\n'); } catch (_e) {}
|
|
1790
|
+
process.exit(1);
|
|
1791
|
+
}
|
|
1792
|
+
}
|
|
1793
|
+
}
|
|
1794
|
+
if ( lib.kv.start(_kvSettings, { stores: _kvStores, warn: function(kvWarnMsg) { console.warn('[kv] ' + kvWarnMsg); } }) ) {
|
|
1795
|
+
// console.info, NOT debug — an operator needs to see
|
|
1796
|
+
// which namespaces went live (the #STO1 precedent).
|
|
1797
|
+
console.info('[kv] ' + _kvCheck.namespaceCount + ' namespace(s) ready' + ( _kvSettings.default ? ' (default: ' + _kvSettings.default + ')' : '' ));
|
|
1798
|
+
} else {
|
|
1799
|
+
console.warn('[kv] namespaces were already installed — this boot wiring was ignored');
|
|
1800
|
+
}
|
|
1801
|
+
}
|
|
1802
|
+
}
|
|
1803
|
+
} catch (kvErr) {
|
|
1804
|
+
console.warn('[kv] setup skipped: ' + (kvErr.message || kvErr));
|
|
1805
|
+
}
|
|
1806
|
+
|
|
1751
1807
|
// #CE1 — `server.transientErrors` boot-time shape check
|
|
1752
1808
|
// (warn-only, NEVER fatal: the opt-in governs how a
|
|
1753
1809
|
// transient datastore error RENDERS — a bad value must
|
|
@@ -2561,6 +2617,35 @@ gna.storage = function(name) {
|
|
|
2561
2617
|
return lib.storage.get(name);
|
|
2562
2618
|
};
|
|
2563
2619
|
|
|
2620
|
+
/**
|
|
2621
|
+
* #KV1 — get a configured KV namespace.
|
|
2622
|
+
*
|
|
2623
|
+
* The general-purpose key-value surface (counters, one-shot tokens,
|
|
2624
|
+
* fetch-or-compute caching, lease primitives) — strict-declared: a namespace
|
|
2625
|
+
* must exist under `settings.json > kv.namespaces` or this throws at the
|
|
2626
|
+
* call site, which is what surfaces a typo (the `gna.storage` stance).
|
|
2627
|
+
*
|
|
2628
|
+
* Assigned UNCONDITIONALLY, so a bundle with no `kv` block gets a named
|
|
2629
|
+
* error naming the fix instead of `gna.kv is not a function` — and so the
|
|
2630
|
+
* declaration is a plain function rather than one the caller must narrow.
|
|
2631
|
+
*
|
|
2632
|
+
* @param {string} [name] - Namespace name; omitted returns the `kv.default` namespace.
|
|
2633
|
+
* @returns {object} The namespace handle (`get` / `set` / `del` / `has` / `ttl` /
|
|
2634
|
+
* `expire` / `setnx` / `consume` / `incr` / `decr` /
|
|
2635
|
+
* `delIfEquals` / `clear` / `getOrSet` — all promise-returning).
|
|
2636
|
+
* @throws {Error} When kv is not configured, when no default is declared and `name`
|
|
2637
|
+
* was omitted, or when `name` is not a declared namespace.
|
|
2638
|
+
* @example
|
|
2639
|
+
* gna.kv('tokens').consume('t:' + hash).then(function (record) {
|
|
2640
|
+
* if (record === null) { return self.throwError(410, 'link already used'); }
|
|
2641
|
+
* });
|
|
2642
|
+
* @example
|
|
2643
|
+
* gina.kv(); // the `kv.default` namespace
|
|
2644
|
+
*/
|
|
2645
|
+
gna.kv = function(name) {
|
|
2646
|
+
return lib.kv.get(name);
|
|
2647
|
+
};
|
|
2648
|
+
|
|
2564
2649
|
/**
|
|
2565
2650
|
* #B366 — push a payload to ONE named session from OUTSIDE a request.
|
|
2566
2651
|
*
|