gina 0.6.26-alpha.1 → 0.6.27-alpha.1
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 +7 -0
- package/README.md +16 -19
- package/ROADMAP.md +1 -0
- package/framework/v0.6.27-alpha.1/VERSION +1 -0
- package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.js +51 -6
- package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/gna.js +1 -0
- package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/server.js +136 -0
- package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/job/src/main.js +159 -6
- package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +3 -3
- package/package.json +3 -3
- package/schema/app.json +51 -0
- package/schema/settings.json +1 -1
- package/framework/v0.6.26-alpha.1/VERSION +0 -1
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/AUTHORS +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/LICENSE +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/config.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/redis/lib/kv-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/settle-once.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/sqlite/lib/kv-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/content.encoding +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/controller.render-xml.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/inline-script.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/dev/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/locales/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/locales/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/mime.types +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/model/entity.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/model/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/router.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/server.express.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/server.isaac.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/status.codes +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/console.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/context.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/path.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/task.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/helpers/text.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/async/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/config.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/idempotency/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/idempotency/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/job/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/job-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/kv/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/kv/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/kv-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/logger/src/redact.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/maintenance/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/maintenance/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/math/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/message-validator/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/message-validator/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/model.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/money/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/money/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/proc.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/push/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/push/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/rate-limit/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/rate-limit/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/secrets/src/backends/exec.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/secrets/src/declaration.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/secrets/src/sources.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/security-headers-emitter/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/security-headers-emitter/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/session-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/shell.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/sri/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/sri/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/state.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage/src/meta-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage/src/util.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/storage-store.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/url/README.md +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/url/index.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/validator.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.26-alpha.1 → v0.6.27-alpha.1}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,13 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|
|
6
6
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 0.6.26 - 2026-09-04
|
|
10
|
+
### Fixed
|
|
11
|
+
* Error responses no longer crash when the rendered payload carries a non-numeric top-level status (#B466). A page whose own vocabulary includes a field named status - say {status: "draft"} rendered alongside an error - had that value stamped straight into the HTTP response, which threw ERR_HTTP_INVALID_STATUS_CODE and replaced the intended error page with an unhandled 500. The failure was invisible on every successful render and fired only on the error path, i.e. exactly when the error page was needed. Every status the error path resolves is now validated against node's own rule (an integer from 100 to 999) and degrades to a 500 error page when it does not qualify; a numeric status still sets the HTTP status exactly as documented. This also closes the same hole for an explicitly passed three-digit-but-invalid code such as "099", which previously threw as well.
|
|
12
|
+
* Error responses now carry the content-type they are meant to declare (#B467). Two branches of the error path - the Internet Explorer override, and the branch taken when a request arrives with no user-agent header at all, which is the common shape for machine callers - passed the header NAME as node's status-message argument instead of passing a headers object. Node therefore read the MIME string character by character: over HTTP/1.1 the response came back with roughly ten to thirty junk headers named 0, 1, 2 and so on, a status line whose reason phrase read content-type, and no content-type header at all; over HTTP/2 the headers were dropped entirely and a status-message warning was emitted. Nothing threw, so the malformed error response was completely silent. Both branches now pass a headers object, matching the two sibling branches beside them, and the plain-text branch declares the bundle encoding as its charset because the error body is JSON written as UTF-8 - a charset-less text/plain invited clients to guess a single-byte encoding and corrupt any non-ASCII text in the error message.
|
|
13
|
+
* Staged multipart upload parts stranded by a previous process are now reclaimed at boot (#B469). The `upload.autoTmpCleanupTimeout` deletion timer is per-upload and in-process, so a restart stranded every staged part it was holding, and a part that never reached `self.store()` - a request failing after the multipart parse, or an application consuming the staged file some other way - then had no reclaim path at all: on deployments that restart often, server-generated `.part` files accumulated indefinitely in the configured landing directories. When the timer is armed, server init now sweeps each configured landing directory (the global default plus every group `path`, deduplicated) for staged-shaped `.part` files older than the configured timeout, floored at one hour so an in-flight upload from a sibling live process on a shared staging directory is never touched. The sweep is deliberately conservative: exact server-generated name shape only (a client-named orphan predating the opaque staging names is indistinguishable from an application file and is left alone), regular files only, symlinks never followed, non-recursive. A disabled timer - the shipped default - still arms no sweep: removing staged files then remains the operator's own job, exactly as documented. Applications may also remove `req.files[].path` themselves; the publish path has always tolerated a vanished source, and that tolerance is now a documented contract.
|
|
14
|
+
* Job records stranded by a process death are now reclaimed (#B471). The deferred function of an async job lives only in its creating process - a closure cannot be serialised - so a record left `running` (or `pending` past its scheduled retry) by a crash or an unclean restart could never settle: on a durable store its `expiresAt` stayed null forever, the TTL sweep's own guard excluded it, listings reported phantom running work, and the documented polling pattern never terminated. The sweep is now preceded by an orphan-reclaim pass on durable stores: a non-terminal record whose last transition - or whose scheduled retry - is older than `jobs.orphanTimeout` (seconds, default 86400, `0` or `false` disables, floored at 60) is marked `failed` with error name `JobOrphanedError`, after which normal `ttl` retention removes it on schedule. The built-in memory store is exempt, since an in-process store cannot hold another process's orphans; a record reclaimed while its origin was merely slow self-corrects on the origin's next write; and no completion webhook fires for a reclaim - concurrent reclaimers and a self-healing job would otherwise produce contradictory notifications, and the record itself carries the truth.
|
|
15
|
+
|
|
9
16
|
## 0.6.25 - 2026-09-03
|
|
10
17
|
### Added
|
|
11
18
|
* Exact-money primitive (#FIN5): lib.money server-side and gina.money in the browser bundle — ISO 4217 minor-unit integer arithmetic on BigInt, with an in-lib exponent table (JPY 0, BHD 3, CLF 4, default 2). Strict wire-string parse() rejects float inputs and excess fractional precision (rounding stays the application's decision); add/subtract/compare/multiply throw on currency mismatch and integer-factor violations; format() renders the canonical wire string with exactly the currency's fraction digits; toMinor()/fromMinor() round-trip JSON-safe minor-unit counts. Amounts stay exact beyond Number.MAX_SAFE_INTEGER minor units. Display formatting deliberately stays with the i18n layer (Intl.NumberFormat). The module is dependency-free and dual-published; changes to it ride the browser bundle (pickup: restart and re-bake).
|
package/README.md
CHANGED
|
@@ -66,29 +66,26 @@ open https://localhost:3100
|
|
|
66
66
|
|
|
67
67
|
> **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
|
|
68
68
|
|
|
69
|
-
## What's in 0.6.
|
|
69
|
+
## What's in 0.6.26
|
|
70
70
|
|
|
71
|
-
> **Restart
|
|
72
|
-
> the
|
|
73
|
-
>
|
|
74
|
-
>
|
|
71
|
+
> **Restart your bundles — no rebuild needed.** Every fix in this release is
|
|
72
|
+
> server-side; the browser bundle is byte-identical to `0.6.25`
|
|
73
|
+
> (`gina.min.js` and `gina.min.css` both unchanged), so `gina bundle:restart`
|
|
74
|
+
> is the whole pickup.
|
|
75
75
|
|
|
76
|
-
> **No settings reset.** `0.6.
|
|
76
|
+
> **No settings reset.** `0.6.26` is a patch — the `shortVersion` stays `0.6`,
|
|
77
77
|
> so your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
|
|
78
78
|
|
|
79
|
-
**The
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
- **
|
|
86
|
-
- **
|
|
87
|
-
- **
|
|
88
|
-
- **
|
|
89
|
-
- **Security — Inspector inline-script data can no longer be read as template source.** The shared inline-script helper now escapes `{` and `}` inside JSON string literals as well as `<`, so a stored value like `{{ 7*7 }}` renders literally instead of executing with the page's locals in scope. Values parse back identical; only pages emitting the Inspector block were reachable.
|
|
90
|
-
- **Fixed — the `query()` basic-auth option is honoured on HTTP/2 and can no longer leak (#B465).** `options.auth` is minted into `Authorization: Basic` before dispatch on BOTH transports and the option is deleted pre-dispatch. Previously node consumed it on HTTP/1.x only, while the HTTP/2 path forwarded it as a literal `auth:` header with authentication silently unperformed. A caller-supplied authorization header always wins.
|
|
91
|
-
- **Fixed — the client-side routing helper no longer swallows its own diagnostic (#B462).** A route missing from the running table now surfaces as a `console.warn` on the first sighting (the `gina.notFound` registry still dedups repeats), and the alternate-route arm records its registry entry so repeat counts accumulate.
|
|
79
|
+
**The error-path and orphan-reclaim release** — four fixes: two on the error
|
|
80
|
+
response itself, where failures were invisible precisely because they only fire
|
|
81
|
+
when something has already gone wrong, and two reclaiming artifacts that a
|
|
82
|
+
process death used to strand forever. Full detail in
|
|
83
|
+
[CHANGELOG.md](./CHANGELOG.md).
|
|
84
|
+
|
|
85
|
+
- **Fixed — an error response no longer crashes on a non-numeric `status` (#B466).** A page whose own vocabulary includes a field named `status` — say `{status: "draft"}` rendered alongside an error — had that value stamped straight into the HTTP response, which threw `ERR_HTTP_INVALID_STATUS_CODE` and replaced the intended error page with an unhandled 500. Every status the error path resolves is now validated against node's own rule (an integer from 100 to 999) and degrades to a 500 error page when it does not qualify. A numeric status still sets the HTTP status exactly as documented. This also closes the same hole for an explicitly passed three-digit-but-invalid code such as `"099"`.
|
|
86
|
+
- **Fixed — error responses carry the content-type they declare (#B467).** Two branches of the error path — the Internet Explorer override, and the branch taken when a request arrives with no `user-agent` header at all, the common shape for machine callers — passed the header *name* as node's status-message argument instead of a headers object. Node read the MIME string character by character: over HTTP/1.1 the response came back with roughly ten to thirty junk headers named `0`, `1`, `2`…, a reason phrase reading `content-type`, and no content-type at all; over HTTP/2 the headers were dropped entirely. Nothing threw, so the malformed response was completely silent. Both branches now pass a headers object, and the plain-text branch declares the bundle encoding as its charset. That half is user-visible wherever error copy is not plain ASCII: the error body is JSON written as UTF-8, and a charset-less `text/plain` invites the client to guess a single-byte encoding, so accented characters and non-Latin scripts in a message shown to a visitor render as mojibake.
|
|
87
|
+
- **Fixed — staged upload parts stranded by a restart are reclaimed at boot (#B469).** The `upload.autoTmpCleanupTimeout` deletion timer is per-upload and in-process, so a restart stranded every staged part it was holding, and a part that never reached `self.store()` had no reclaim path at all — on deployments that restart often, server-generated `.part` files accumulated indefinitely. When the timer is armed, server init now sweeps each configured landing directory for staged-shaped `.part` files older than the configured timeout, floored at one hour so an in-flight upload from a sibling process on a shared staging directory is never touched. Deliberately conservative: exact server-generated name shape only, regular files only, symlinks never followed, non-recursive. A disabled timer — the shipped default — still arms no sweep.
|
|
88
|
+
- **Fixed — job records stranded by a process death are reclaimed (#B471).** The deferred function of an async job lives only in its creating process, so a record left `running` by a crash or an unclean restart could never settle: on a durable store its `expiresAt` stayed null forever, the TTL sweep's own guard excluded it, listings reported phantom running work, and the documented polling pattern never terminated. The sweep is now preceded by an orphan-reclaim pass on durable stores: a non-terminal record older than `jobs.orphanTimeout` (seconds, default 86400, `0` or `false` disables, floored at 60) is marked `failed` with error name `JobOrphanedError`, after which normal `ttl` retention removes it on schedule. The built-in memory store is exempt, and no completion webhook fires for a reclaim — the record itself carries the truth.
|
|
92
89
|
|
|
93
90
|
## Documentation
|
|
94
91
|
|
package/ROADMAP.md
CHANGED
|
@@ -77,6 +77,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
77
77
|
| **Q4 2026** | `0.6.23` ✅ | **Security**: hardened inline-script escaping — the previous guard matched only the literal `</script>` and `<!--`, but the HTML5 script-data end tag also accepts a tab, newline, form feed, space or `/` after the tag name, so `</script >` closed the block and the remainder of a stored value parsed as HTML; serialised values now neutralise `<` itself at every site, with U+2028/U+2029 escaped too, and escaped output parses back to an identical value. **Added**: the framework itself now emits seven security headers by default on both engines (`server.securityHeaders`; four more opt-in — `xFrameOptions` / `coop` / `corp` / `hsts`), first-writer-wins so mounted plugins, `env.json` headers and proxies keep winning, with `/_gina/*` exempt from the cross-origin-isolating pair; `server.hidePoweredBy` now defaults to `true`. **Added**: `server.maxBodySize` (default 64MB, 413 + stream destroyed) bounds non-multipart request bodies, with warn-only `server.maxBodySizeWarn` (2MB) and a configurable `server.timeout` that stays `0` on purpose (SSE/WebSocket). **Added**: opt-in Subresource Integrity — `templates.json > "sriEnabled": true` adds `integrity` + `crossorigin` to same-origin script and stylesheet tags that resolve on disk; fail-open, hashes stat-validated per render. **Fixed**: a JSON body whose nested object shadows `constructor` with a primitive, null, array or plain object no longer crashes the merge on the PUT path. Restart **and** rebuild your bundles (the browser bundle changed — the merge fix ships in `gina.min.js`). |
|
|
78
78
|
| **Q4 2026** | `0.6.25` ✅ | **Added**: the financial-messaging foundations — verbatim XML request bodies on POST/PUT/PATCH (`req.body` keeps the exact document the client sent; the form-encoded decode path previously destroyed it silently) with `self.renderXML()` as the outbound counterpart (`application/xml` by default per RFC 7303, an optional `+xml`-suffix content type, HEAD suppression with byte-accurate `content-length`, HTTP/2 pseudo-header status, opt-in trailers — gina parses no XML and builds none); a pluggable message-schema validation seam (declare `param.messageValidator: "<name>"` on a route and ship a factory at `message-validators/<name>.js` — boot-compiled, fail-closed refusals: 422 with your `errors` array, 400 unparseable, 503 + `Retry-After` when the checker is down — ordered after auth/rate-limit/idempotency and before DTO field validation); `isIban` / `isBic` FormValidator rules (ISO 13616 shape + official per-country length for 87 countries + ISO 7064 MOD 97-10, and ISO 9362 — tolerant read, the stored value is never mutated; client + server like every built-in rule); an exact-money primitive (`lib.money` server-side and `gina.money` in the browser bundle — ISO 4217 minor-unit integer arithmetic on BigInt with strict wire-string `parse()`, same-currency guards and canonical `format()`; display stays with `Intl.NumberFormat`); and opt-in `Idempotency-Key` request deduplication at the router band per the IETF draft (the recorded first response replays with `Idempotency-Replayed: true`; 409 + `Retry-After` while the original is in flight; 422 on key reuse with a different payload; principal-scoped over a declared kv namespace). **Security**: server data serialised into the Inspector's inline script blocks can no longer be read as template source — the shared inline-script helper now escapes `{` and `}` inside JSON string literals as well as `<`, so a stored `{{ 7*7 }}` renders literally instead of executing with the page's locals in scope (values parse back identical; only pages emitting the Inspector block were reachable). **Fixed**: the query() basic-auth option is honoured on HTTP/2 and can no longer leak — `options.auth` is minted into `Authorization: Basic` before dispatch on BOTH transports and the option is deleted pre-dispatch (previously node consumed it on HTTP/1.x only, while the HTTP/2 path forwarded it as a literal `auth:` header with authentication silently unperformed; a caller-supplied authorization header always wins); and the client-side routing helper no longer swallows its "route not found inside your view" diagnostic — `console.warn` on the first sighting of each missing route, with repeats counted on `gina.notFound`. Restart **and** rebuild your bundles — the browser bundle changed (the money primitive, the IBAN/BIC rules and the routing-helper diagnostic ride `gina.min.js`). |
|
|
79
79
|
| **Q4 2026** | `0.6.24` ✅ | **Fixed**: Couchbase `bulkInsert` no longer returns `undefined` when its own prologue throws — the outer `try` wraps the method body, so a synchronous failure (an unresolvable connection, or either `rec` validation) was caught, logged and swallowed, and the method fell off the end: the `await` form resolved with `undefined`, so a caller treating "did not throw" as success recorded an insert that never happened, and `.onComplete(cb)` threw a `TypeError` at the call site. The promise, its one-shot resolver and the `.onComplete` shim are now built before the `try`, so the outer catch settles the call. A fire-and-forget call now surfaces an `unhandledRejection` where it previously failed silently, and the fix moves what `bulkInsert` RETURNS, not what its promise RESOLVES WITH — a rows-less success still resolves `null`. **Fixed**: a Couchbase entity that fails to register now names itself, its source file, the method being attached and the underlying cause, instead of emitting a bare stack that left a partially-built entity and a missing method surfacing arbitrarily far from the cause; registration stays non-fatal. **Fixed**: the reconnect classifier no longer throws under every supported SDK — `err instanceof couchbase.Error` raised a `TypeError` because no supported couchnode exports a bare `Error` class, and since that operand is evaluated first the message arm was unreachable too, so the classifier could not classify by any route; each `instanceof` is now guarded on the class existing (deliberately a guard, not an activation — on the default `isaac` engine the listener is never dispatched at all). Restart your bundles — the browser bundle is unchanged, so no rebuild is needed. |
|
|
80
|
+
| **Q4 2026** | `0.6.26` ✅ | **Fixed**: the error-path and orphan-reclaim release. An error response no longer crashes when the rendered payload carries a non-numeric top-level `status` — a page whose own vocabulary includes a field named `status` (say `{status: "draft"}` rendered alongside an error) had that value stamped straight into the HTTP response, which threw `ERR_HTTP_INVALID_STATUS_CODE` and replaced the intended error page with an unhandled 500, i.e. it fired only on the error path, exactly when the error page was needed; every status the error path resolves is now validated against node's own rule (an integer from 100 to 999) and degrades to a 500 error page when it does not qualify, while a numeric status still sets the HTTP status exactly as documented. **Fixed**: error responses now carry the content-type they declare — two branches of the error path, the Internet Explorer override and the branch taken when a request arrives with no `user-agent` header at all (the common shape for machine callers), passed the header NAME as node's status-message argument instead of a headers object, so node read the MIME string character by character: over HTTP/1.1 the response came back with roughly ten to thirty junk headers named `0`, `1`, `2`…, a reason phrase reading `content-type`, and no content-type at all, and over HTTP/2 the headers were dropped entirely — nothing threw, so the malformed response was completely silent. Both branches now pass a headers object, and the plain-text branch declares the bundle encoding as its charset, which is user-visible wherever error copy is not plain ASCII: the body is JSON written as UTF-8, and a charset-less `text/plain` invites the client to guess a single-byte encoding, rendering accented characters and non-Latin scripts as mojibake. **Fixed**: staged multipart upload parts stranded by a previous process are now reclaimed at boot — the `upload.autoTmpCleanupTimeout` deletion timer is per-upload and in-process, so a restart stranded every staged part it was holding and a part that never reached `self.store()` had no reclaim path at all; when the timer is armed, server init now sweeps each configured landing directory for staged-shaped `.part` files older than the configured timeout, floored at one hour so an in-flight upload from a sibling live process on a shared staging directory is never touched, and the sweep is deliberately conservative (exact server-generated name shape only, regular files only, symlinks never followed, non-recursive). A disabled timer — the shipped default — still arms no sweep. **Fixed**: job records stranded by a process death are now reclaimed — the deferred function of an async job lives only in its creating process, so a record left `running` by a crash or an unclean restart could never settle: its `expiresAt` stayed null forever, the TTL sweep's own guard excluded it, listings reported phantom running work and the documented polling pattern never terminated; the sweep is now preceded by an orphan-reclaim pass on durable stores marking a non-terminal record older than `jobs.orphanTimeout` (seconds, default 86400, `0` or `false` disables, floored at 60) as `failed` with error name `JobOrphanedError`, after which normal `ttl` retention removes it on schedule — the built-in memory store is exempt and no completion webhook fires for a reclaim. Restart your bundles — the browser bundle is unchanged, so no rebuild is needed. |
|
|
80
81
|
| **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
81
82
|
| **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
|
|
82
83
|
| **2027** | `0.8.0` | Financial-messaging foundations — XML request/response handling · pluggable message-schema validation · IBAN/BIC validation rules · money & ISO 4217 minor-unit utilities · idempotency keys |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.6.27-alpha.1
|
|
@@ -123,6 +123,31 @@ const { type } = require('node:os');
|
|
|
123
123
|
var SwigFilters = lib.SwigFilters;
|
|
124
124
|
var statusCodes = requireJSON( _( getPath('gina').core + '/status.codes') );
|
|
125
125
|
|
|
126
|
+
/**
|
|
127
|
+
* #B466 — is `v` a status code node's `writeHead()` will accept ?
|
|
128
|
+
*
|
|
129
|
+
* Encodes node's own rule (integer 100-999) rather than membership of
|
|
130
|
+
* `statusCodes`: that table carries a `_comment` key, so a bare
|
|
131
|
+
* `typeof(statusCodes[v]) != 'undefined'` test accepts the status
|
|
132
|
+
* `"_comment"`, and it would also coerce a valid-but-unlisted code.
|
|
133
|
+
* `/^\d{3}$/` is not sufficient either — it accepts `"099"`, which node
|
|
134
|
+
* rejects. The `statusCodes` lookup remains in place as the DIAGNOSTIC
|
|
135
|
+
* (the `[ ApiValidator ]` warn); this predicate is the CORRECTNESS gate.
|
|
136
|
+
*
|
|
137
|
+
* @param {*} v - candidate status
|
|
138
|
+
* @returns {boolean} true when node would accept `v` as an HTTP status
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* _isValidHttpStatus(404) // true
|
|
142
|
+
* _isValidHttpStatus('404') // true (node accepts numeric strings)
|
|
143
|
+
* _isValidHttpStatus('draft') // false
|
|
144
|
+
* _isValidHttpStatus('099') // false (node rejects it)
|
|
145
|
+
*/
|
|
146
|
+
var _isValidHttpStatus = function (v) {
|
|
147
|
+
var n = Number(v);
|
|
148
|
+
return Number.isInteger(n) && n >= 100 && n <= 999;
|
|
149
|
+
};
|
|
150
|
+
|
|
126
151
|
// cached at module load — these env vars never change at runtime (#P19)
|
|
127
152
|
var _isDev = process.env.NODE_ENV_IS_DEV && process.env.NODE_ENV_IS_DEV.toLowerCase() === 'true';
|
|
128
153
|
var _isLocalScope = process.env.NODE_SCOPE_IS_LOCAL && process.env.NODE_SCOPE_IS_LOCAL.toLowerCase() === 'true';
|
|
@@ -7906,8 +7931,13 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
7906
7931
|
) {
|
|
7907
7932
|
|
|
7908
7933
|
msg = ( !/^\d+$/.test(code) && typeof(msg) == 'undefined' ) ? code : msg;
|
|
7909
|
-
// Preserve an explicitly passed
|
|
7910
|
-
|
|
7934
|
+
// Preserve an explicitly passed HTTP status code; fall back to res.status or 500.
|
|
7935
|
+
// #B466 — both candidates are validated: an unvalidated res.status
|
|
7936
|
+
// reached writeHead() verbatim and threw ERR_HTTP_INVALID_STATUS_CODE
|
|
7937
|
+
// on any non-numeric value, i.e. the error page failed exactly when
|
|
7938
|
+
// it was needed. Guarding the explicit arm too closes the same hole
|
|
7939
|
+
// for a 3-digit-but-invalid code such as "099".
|
|
7940
|
+
code = _isValidHttpStatus(code) ? code : ( res && _isValidHttpStatus(res.status) ) ? res.status : 500;
|
|
7911
7941
|
// #CE1 — a transient datastore failure resolving to 500 upgrades
|
|
7912
7942
|
// to 503 when the bundle opted in (explicit non-500 preserved above)
|
|
7913
7943
|
code = _maybeUpgradeTransient503(code);
|
|
@@ -7984,7 +8014,14 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
7984
8014
|
|
|
7985
8015
|
} else if (arguments.length < 3) {
|
|
7986
8016
|
msg = code || null;
|
|
7987
|
-
|
|
8017
|
+
// #B466 — `res` holds the code in this shape, and an invalid SCALAR
|
|
8018
|
+
// would reach writeHead() verbatim. An OBJECT is deliberately passed
|
|
8019
|
+
// through untouched: the errorObj shape is unpacked at the site-2
|
|
8020
|
+
// resolution below (which applies the same guard), and collapsing it
|
|
8021
|
+
// here would break the #CE1 transient-503 upgrade that depends on it.
|
|
8022
|
+
code = ( res !== null && typeof(res) == 'object' ) ? res
|
|
8023
|
+
: _isValidHttpStatus(res) ? res
|
|
8024
|
+
: 500;
|
|
7988
8025
|
res = local.res;
|
|
7989
8026
|
}
|
|
7990
8027
|
|
|
@@ -8056,7 +8093,8 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
8056
8093
|
// allowing this.throwError(err)
|
|
8057
8094
|
if ( typeof(code) == 'object' && !msg && typeof(code.status) != 'undefined' && typeof(code.error) != 'undefined' ) {
|
|
8058
8095
|
msg = code.error || code.message;
|
|
8059
|
-
|
|
8096
|
+
// #B466 — same guard as the resolution arms above.
|
|
8097
|
+
code = _isValidHttpStatus(code.status) ? code.status : 500;
|
|
8060
8098
|
// #CE1 — second upgrade site: the 2-arg errorObj shape
|
|
8061
8099
|
// resolves its status only here, after the early header
|
|
8062
8100
|
// point above — so this site sets its own header too
|
|
@@ -8082,7 +8120,12 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
8082
8120
|
// TODO - test with internet explorer then remove this if working
|
|
8083
8121
|
if ( typeof(req.headers['user-agent']) != 'undefined' ) {
|
|
8084
8122
|
if ( /msie/i.test(req.headers['user-agent']) ) {
|
|
8085
|
-
|
|
8123
|
+
// #B467 - Node's signature is writeHead(status[, statusMessage][, headers]):
|
|
8124
|
+
// the 3-arg form used here put the mime STRING in the headers slot, so Node
|
|
8125
|
+
// index-keyed it into junk headers ("0","1",...) and emitted NO content-type.
|
|
8126
|
+
// The charset is declared because the body below is JSON.stringify(...) written
|
|
8127
|
+
// via res.end(), i.e. UTF-8 - same form the text-render path already builds.
|
|
8128
|
+
res.writeHead(code, { 'content-type': 'text/plain; charset='+ bundleConf.encoding } );
|
|
8086
8129
|
} else {
|
|
8087
8130
|
var contentType = ( responseHeaders && responseHeaders['content-type'])
|
|
8088
8131
|
? responseHeaders['content-type']
|
|
@@ -8093,7 +8136,9 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
8093
8136
|
} else if ( typeof(responseHeaders['content-type']) != 'undefined' ) {
|
|
8094
8137
|
res.writeHead(code, { 'content-type': responseHeaders['content-type']} )
|
|
8095
8138
|
} else {
|
|
8096
|
-
|
|
8139
|
+
// #B467 - same 3-arg misuse as the MSIE branch above; the mime expression is
|
|
8140
|
+
// unchanged, only the argument shape is corrected.
|
|
8141
|
+
res.writeHead(code, { 'content-type': bundleConf.server.coreConfiguration.mime['json']+ '; charset='+ bundleConf.encoding } );
|
|
8097
8142
|
}
|
|
8098
8143
|
|
|
8099
8144
|
|
|
@@ -1536,6 +1536,7 @@ isBundleMounted(projects, bundlesPath, getContext('bundle'), function onBundleMo
|
|
|
1536
1536
|
sweepInterval: _jobsConf.sweepInterval,
|
|
1537
1537
|
idSize: _jobsConf.idSize,
|
|
1538
1538
|
retryBackoffMs: _jobsConf.retryBackoffMs,
|
|
1539
|
+
orphanTimeout: _jobsConf.orphanTimeout,
|
|
1539
1540
|
webhookMaxAttempts: _jobsConf.webhookMaxAttempts,
|
|
1540
1541
|
webhookBackoffMs: _jobsConf.webhookBackoffMs,
|
|
1541
1542
|
webhookTimeoutMs: _jobsConf.webhookTimeoutMs,
|
|
@@ -162,6 +162,91 @@ var parseByteSize = function(value) {
|
|
|
162
162
|
}
|
|
163
163
|
};
|
|
164
164
|
|
|
165
|
+
/**
|
|
166
|
+
* #B469 — reclaim staged multipart parts a PREVIOUS process stranded.
|
|
167
|
+
*
|
|
168
|
+
* A staged upload part has exactly two reclaim paths: the `movefiles()` unlink
|
|
169
|
+
* when `self.store()` publishes it, and the per-upload `autoTmpCleanupTimeout`
|
|
170
|
+
* timer — which is in-process, so every part it was holding outlives a restart.
|
|
171
|
+
* This sweep runs the same policy across process lifetimes: at boot, remove
|
|
172
|
+
* from each configured staging directory the parts old enough that an armed
|
|
173
|
+
* timer would already have taken them, had its process survived.
|
|
174
|
+
*
|
|
175
|
+
* Deliberately conservative:
|
|
176
|
+
* - name-gated on the exact staged shape (32 lowercase hex + `.part`, the
|
|
177
|
+
* server-generated name) — a client-named orphan predating that naming is
|
|
178
|
+
* indistinguishable from an application file and is left alone;
|
|
179
|
+
* - regular files only (`lstat`, never follows a symlink), non-recursive;
|
|
180
|
+
* - age-gated on mtime, so a part a SIBLING live process is still streaming
|
|
181
|
+
* into a shared staging dir (fresh mtime while chunks land) is never touched;
|
|
182
|
+
* - every step tolerates a concurrent removal (`ENOENT` is not an error — a
|
|
183
|
+
* sibling bundle sweeping the same dir, or the app unlinking its own part).
|
|
184
|
+
*
|
|
185
|
+
* @private
|
|
186
|
+
* @function sweepStagedUploadOrphans
|
|
187
|
+
* @param {array} dirs - Absolute staging directories (already resolved, deduped by the caller)
|
|
188
|
+
* @param {number} olderThanMs - Only parts whose mtime is older than this many ms are removed; a non-positive/NaN value makes the sweep a no-op
|
|
189
|
+
* @param {function} done - Completion callback
|
|
190
|
+
* @param {object} done.report - `{ scanned, removed, errors }` counters (`scanned` = name-matching entries considered)
|
|
191
|
+
* @returns {void}
|
|
192
|
+
* @example
|
|
193
|
+
* sweepStagedUploadOrphans([ '/var/data/uploads' ], 3600000, function(report) {
|
|
194
|
+
* console.debug('removed ' + report.removed + ' orphaned staged part(s)');
|
|
195
|
+
* });
|
|
196
|
+
*/
|
|
197
|
+
var sweepStagedUploadOrphans = function(dirs, olderThanMs, done) {
|
|
198
|
+
var report = { scanned: 0, removed: 0, errors: 0 };
|
|
199
|
+
if ( !(olderThanMs > 0) ) { // NaN/0/negative — refuse to sweep on a broken threshold
|
|
200
|
+
return done(report);
|
|
201
|
+
}
|
|
202
|
+
var d = 0;
|
|
203
|
+
var nextDir = function() {
|
|
204
|
+
if (d >= dirs.length) {
|
|
205
|
+
return done(report);
|
|
206
|
+
}
|
|
207
|
+
var dir = dirs[d]; d++;
|
|
208
|
+
fs.readdir(dir, function(readdirErr, names) {
|
|
209
|
+
if (readdirErr) {
|
|
210
|
+
// a staging dir that does not exist yet has nothing to reclaim
|
|
211
|
+
if (readdirErr.code != 'ENOENT') report.errors++;
|
|
212
|
+
return nextDir();
|
|
213
|
+
}
|
|
214
|
+
var cutoff = Date.now() - olderThanMs;
|
|
215
|
+
var n = 0;
|
|
216
|
+
var nextName = function() {
|
|
217
|
+
if (n >= names.length) {
|
|
218
|
+
return nextDir();
|
|
219
|
+
}
|
|
220
|
+
var name = names[n]; n++;
|
|
221
|
+
if ( !/^[0-9a-f]{32}\.part$/.test(name) ) {
|
|
222
|
+
return nextName();
|
|
223
|
+
}
|
|
224
|
+
report.scanned++;
|
|
225
|
+
var full = dir + '/' + name;
|
|
226
|
+
fs.lstat(full, function(lstatErr, stats) {
|
|
227
|
+
if (lstatErr) {
|
|
228
|
+
if (lstatErr.code != 'ENOENT') report.errors++;
|
|
229
|
+
return nextName();
|
|
230
|
+
}
|
|
231
|
+
if ( !stats.isFile() || stats.mtimeMs > cutoff ) {
|
|
232
|
+
return nextName();
|
|
233
|
+
}
|
|
234
|
+
fs.unlink(full, function(unlinkErr) {
|
|
235
|
+
if (unlinkErr) {
|
|
236
|
+
if (unlinkErr.code != 'ENOENT') report.errors++;
|
|
237
|
+
} else {
|
|
238
|
+
report.removed++;
|
|
239
|
+
}
|
|
240
|
+
nextName();
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
};
|
|
244
|
+
nextName();
|
|
245
|
+
});
|
|
246
|
+
};
|
|
247
|
+
nextDir();
|
|
248
|
+
};
|
|
249
|
+
|
|
165
250
|
var _isDebugLog = function() {
|
|
166
251
|
return process.env.LOG_LEVEL === 'debug' || process.env.LOG_LEVEL === 'trace';
|
|
167
252
|
};
|
|
@@ -1838,6 +1923,57 @@ function Server(options) {
|
|
|
1838
1923
|
}
|
|
1839
1924
|
}
|
|
1840
1925
|
|
|
1926
|
+
// ── #B469 — staged-upload orphan sweep (boot-time) ──
|
|
1927
|
+
// The `autoTmpCleanupTimeout` deletion timer is per-upload and
|
|
1928
|
+
// in-process: a restart strands every part it was holding, and a
|
|
1929
|
+
// part that never reaches `self.store()` (the request failed after
|
|
1930
|
+
// the multipart parse, or the app consumed the staged file some
|
|
1931
|
+
// other way) has NO other reclaim path. So when the operator HAS
|
|
1932
|
+
// armed the timer, honour that same policy across process
|
|
1933
|
+
// lifetimes: sweep the configured staging dirs at boot for staged
|
|
1934
|
+
// parts old enough that a surviving timer would already have taken
|
|
1935
|
+
// them. The threshold is floored at 1h: an in-flight upload from a
|
|
1936
|
+
// sibling live process on a SHARED staging dir keeps a fresh mtime
|
|
1937
|
+
// while its chunks land, and the floor keeps even a stalled one
|
|
1938
|
+
// safe. A disabled timer (the shipped default) arms NO sweep — the
|
|
1939
|
+
// docs say tmp cleanup is then the operator's own job, and this
|
|
1940
|
+
// keeps that contract intact. Runs in every scope (production is
|
|
1941
|
+
// where restarts strand parts); duplicate sweeps of a dir shared
|
|
1942
|
+
// across merged-process bundles are harmless (idempotent,
|
|
1943
|
+
// ENOENT-tolerant).
|
|
1944
|
+
if ( _uploadSettings && _uploadSettings.groups && typeof(_uploadSettings.groups) == 'object' ) {
|
|
1945
|
+
// mirrors the request path's arming gate for the timer itself
|
|
1946
|
+
var _hasSweepTimeout = (
|
|
1947
|
+
typeof(_uploadSettings.autoTmpCleanupTimeout) != 'undefined'
|
|
1948
|
+
&& _uploadSettings.autoTmpCleanupTimeout != ''
|
|
1949
|
+
&& _uploadSettings.autoTmpCleanupTimeout != 0
|
|
1950
|
+
&& !/false/i.test(_uploadSettings.autoTmpCleanupTimeout)
|
|
1951
|
+
) ? true : false;
|
|
1952
|
+
var _sweepTimeoutMs = (!_hasSweepTimeout) ? null : parseTimeout(_uploadSettings.autoTmpCleanupTimeout);
|
|
1953
|
+
if (_sweepTimeoutMs) {
|
|
1954
|
+
// staging-dir set = the resolved global landing dir + every
|
|
1955
|
+
// group override — the same resolution the write site uses
|
|
1956
|
+
var _sweepDirs = [ ( _uploadSettings.uploadDir || _uploadSettings.tmpPath || os.tmpdir() ) ];
|
|
1957
|
+
var _sweepGroupNames = Object.keys(_uploadSettings.groups);
|
|
1958
|
+
for (var _sg = 0; _sg < _sweepGroupNames.length; _sg++) {
|
|
1959
|
+
var _sgPath = _uploadSettings.groups[_sweepGroupNames[_sg]] && _uploadSettings.groups[_sweepGroupNames[_sg]].path;
|
|
1960
|
+
if ( _sgPath && _sweepDirs.indexOf(_sgPath) < 0 ) {
|
|
1961
|
+
_sweepDirs.push(_sgPath);
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
var _sweepAppName = self.appName;
|
|
1965
|
+
setImmediate(function() {
|
|
1966
|
+
sweepStagedUploadOrphans(_sweepDirs, Math.max(_sweepTimeoutMs, 3600000), function(report) {
|
|
1967
|
+
if (report.removed || report.errors) {
|
|
1968
|
+
console.info('[ BUNDLE ][ '+ _sweepAppName +' ][ server ][ init ] upload orphan sweep: removed '+ report.removed +' staged part(s)'+ ( report.errors ? ' ('+ report.errors +' error(s))' : '' ) +' across '+ _sweepDirs.length +' staging dir(s)');
|
|
1969
|
+
} else {
|
|
1970
|
+
console.debug('[ BUNDLE ][ '+ _sweepAppName +' ][ server ][ init ] upload orphan sweep: no orphaned staged parts ('+ _sweepDirs.length +' staging dir(s))');
|
|
1971
|
+
}
|
|
1972
|
+
});
|
|
1973
|
+
});
|
|
1974
|
+
}
|
|
1975
|
+
}
|
|
1976
|
+
|
|
1841
1977
|
// ── #B152 — opt-in deterministic proxied-request classification ──
|
|
1842
1978
|
// server.proxy.requireForwardedHeaders === true -> a request is
|
|
1843
1979
|
// classified proxied ONLY on an explicit X-Forwarded-Host; the
|
|
@@ -46,7 +46,12 @@
|
|
|
46
46
|
* session-store cleanup pattern) — NOT `lib/cron`, which is dormant (not
|
|
47
47
|
* registered in `lib/index.js`, not instantiated at boot). A bundle may
|
|
48
48
|
* drive an extra sweep from its own cron, but the internal timer
|
|
49
|
-
* guarantees baseline retention regardless.
|
|
49
|
+
* guarantees baseline retention regardless. Since #B471 the sweep is
|
|
50
|
+
* preceded by an orphan-reclaim pass on DURABLE stores: a non-terminal
|
|
51
|
+
* record stranded by a dead process (its deferred fn died with it) is
|
|
52
|
+
* terminalized as `failed`/`JobOrphanedError` once older than
|
|
53
|
+
* `orphanTimeout` (default 24h, `0` disables), so retention and the
|
|
54
|
+
* polling surface stay truthful across process lifetimes.
|
|
50
55
|
*
|
|
51
56
|
* The primitive is always-on. Optional tuning via `app.json` (an absent block
|
|
52
57
|
* means sane defaults):
|
|
@@ -167,6 +172,16 @@ var DEFAULT_WEBHOOK_TIMEOUT_MS = 5000;
|
|
|
167
172
|
*/
|
|
168
173
|
var DEFAULT_RETRY_BACKOFF_MS = 1000;
|
|
169
174
|
|
|
175
|
+
/**
|
|
176
|
+
* Default orphan-reclaim ceiling, SECONDS (24h). A non-terminal record whose
|
|
177
|
+
* last transition is older than this is presumed stranded by a dead process
|
|
178
|
+
* and reclaimed as `failed` (`JobOrphanedError`) by {@link sweep}'s reclaim
|
|
179
|
+
* pass — durable stores only; see {@link reclaimOrphans}. `0` disables.
|
|
180
|
+
* @constant
|
|
181
|
+
* @type {number}
|
|
182
|
+
*/
|
|
183
|
+
var DEFAULT_ORPHAN_TIMEOUT = 86400;
|
|
184
|
+
|
|
170
185
|
/**
|
|
171
186
|
* The active record store (memory store by default). `null` until the first
|
|
172
187
|
* {@link create} or {@link start}.
|
|
@@ -176,6 +191,26 @@ var DEFAULT_RETRY_BACKOFF_MS = 1000;
|
|
|
176
191
|
*/
|
|
177
192
|
var _store = null;
|
|
178
193
|
|
|
194
|
+
/**
|
|
195
|
+
* `true` when {@link _store} is the BUILT-IN memory store (defaulted, not
|
|
196
|
+
* app-supplied). The orphan-reclaim pass skips it: an in-process store cannot
|
|
197
|
+
* hold another process's orphans (process death wipes it), so reclaim there
|
|
198
|
+
* could only ever produce false positives on long-running live jobs.
|
|
199
|
+
*
|
|
200
|
+
* @inner
|
|
201
|
+
* @type {boolean}
|
|
202
|
+
*/
|
|
203
|
+
var _storeIsBuiltinMemory = false;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Orphan-reclaim ceiling, SECONDS. `0` = disabled. Floored at 60 when armed
|
|
207
|
+
* (a smaller value would reclaim jobs still legitimately mid-flight).
|
|
208
|
+
*
|
|
209
|
+
* @inner
|
|
210
|
+
* @type {number}
|
|
211
|
+
*/
|
|
212
|
+
var _orphanTimeout = DEFAULT_ORPHAN_TIMEOUT;
|
|
213
|
+
|
|
179
214
|
/**
|
|
180
215
|
* In-flight worker count. Bounded by {@link _maxConcurrency}.
|
|
181
216
|
*
|
|
@@ -248,7 +283,7 @@ function noop() {}
|
|
|
248
283
|
* @property {number} updatedAt - Epoch ms of the last transition.
|
|
249
284
|
* @property {?number} startedAt - Epoch ms the worker began; `null` while pending.
|
|
250
285
|
* @property {?number} finishedAt - Epoch ms of the terminal transition; `null` until then.
|
|
251
|
-
* @property {?number} expiresAt - Epoch ms after which a terminal record is sweepable; `null` until terminal — deliberately including while a retry is pending, so the sweep can never purge a retryable job.
|
|
286
|
+
* @property {?number} expiresAt - Epoch ms after which a terminal record is sweepable; `null` until terminal — deliberately including while a retry is pending, so the TTL sweep can never purge a retryable job. On a durable store that protection is bounded by the orphan-reclaim pass: a record left non-terminal past `orphanTimeout` is marked `failed` first, which stamps `expiresAt` and hands it to ordinary retention (see {@link reclaimOrphans}). The built-in memory store is exempt, so the guarantee is unbounded there.
|
|
252
287
|
* @property {?number} nextRetryAt - Epoch ms of the next scheduled attempt while a failed attempt awaits its retry; `null` once terminal (absent if the job never settled).
|
|
253
288
|
* @property {?number} webhookDeliveredAt - Epoch ms a completion webhook succeeded; absent until delivered.
|
|
254
289
|
* @property {?boolean} webhookFailed - `true` once webhook delivery exhausts its retries; absent otherwise.
|
|
@@ -354,6 +389,7 @@ function serializeError(err) {
|
|
|
354
389
|
function ensureStarted() {
|
|
355
390
|
if (!_store) {
|
|
356
391
|
_store = createMemoryStore();
|
|
392
|
+
_storeIsBuiltinMemory = true;
|
|
357
393
|
}
|
|
358
394
|
ensureSweepTimer();
|
|
359
395
|
}
|
|
@@ -757,8 +793,106 @@ function remove(id, cb) {
|
|
|
757
793
|
}
|
|
758
794
|
|
|
759
795
|
/**
|
|
760
|
-
*
|
|
761
|
-
*
|
|
796
|
+
* #B471 — reclaim non-terminal records stranded by a DEAD process. The
|
|
797
|
+
* deferred function lives only in its creating process (a closure cannot be
|
|
798
|
+
* serialised), so a record left `running` — or `pending` past its scheduled
|
|
799
|
+
* retry — by a process death can never settle: `expiresAt` stays `null`, the
|
|
800
|
+
* TTL sweep's own `expires_at IS NOT NULL` guard excludes it forever, and a
|
|
801
|
+
* consumer polling it polls forever. This pass terminalizes such records as
|
|
802
|
+
* `failed` with error name `JobOrphanedError`, after which normal retention
|
|
803
|
+
* applies and the ordinary sweep deletes them on schedule.
|
|
804
|
+
*
|
|
805
|
+
* Age gates (both on ceilings, so a LIVE process's work always survives):
|
|
806
|
+
* - `running`: last transition (`updatedAt`) older than the ceiling.
|
|
807
|
+
* - `pending` with a scheduled retry: `now` past `nextRetryAt` + ceiling —
|
|
808
|
+
* a live origin retries at ~`nextRetryAt`, so the ceiling past it is
|
|
809
|
+
* unambiguous, and a record merely WAITING on backoff is never touched.
|
|
810
|
+
* - plain `pending` (never ran): the `updatedAt` gate, like `running`.
|
|
811
|
+
*
|
|
812
|
+
* A record reclaimed while its origin was merely SLOW self-corrects: every
|
|
813
|
+
* origin write (`update()`, the worker's running transition, a retry
|
|
814
|
+
* re-enqueue) is unguarded last-write-wins, so the real outcome overwrites
|
|
815
|
+
* the synthetic failure. The transient `failed` reading is the disclosed
|
|
816
|
+
* cost. Reclaim fires NO completion webhook — under multi-process stores two
|
|
817
|
+
* processes may reclaim concurrently (no cross-process claim verb exists),
|
|
818
|
+
* and a self-healing job would otherwise emit contradictory notifications;
|
|
819
|
+
* the record itself carries the truth.
|
|
820
|
+
*
|
|
821
|
+
* Skipped entirely when disabled (`orphanTimeout: 0`/`false`), when the
|
|
822
|
+
* store is the BUILT-IN memory store (an in-process store cannot hold
|
|
823
|
+
* another process's orphans), or when the store lacks `list` (a minimal
|
|
824
|
+
* third-party store). Never throws; a list/update error is logged and the
|
|
825
|
+
* pass moves on — a reclaim that broke the sweep would be a worse failure
|
|
826
|
+
* than the strand it repairs.
|
|
827
|
+
*
|
|
828
|
+
* @inner
|
|
829
|
+
* @param {number} now - Epoch ms.
|
|
830
|
+
* @param {function} cb - `cb(reclaimedCount)`; never receives an error.
|
|
831
|
+
* @returns {void}
|
|
832
|
+
*/
|
|
833
|
+
function reclaimOrphans(now, cb) {
|
|
834
|
+
if (!_orphanTimeout || _storeIsBuiltinMemory || !_store || typeof _store.list !== 'function') {
|
|
835
|
+
cb(0); return;
|
|
836
|
+
}
|
|
837
|
+
var ceilingMs = _orphanTimeout * 1000;
|
|
838
|
+
var reclaimed = 0;
|
|
839
|
+
var states = [STATES.RUNNING, STATES.PENDING];
|
|
840
|
+
var si = 0;
|
|
841
|
+
|
|
842
|
+
var nextState = function() {
|
|
843
|
+
if (si >= states.length) {
|
|
844
|
+
if (reclaimed > 0) {
|
|
845
|
+
console.info('[lib.job] orphan reclaim: marked ' + reclaimed + ' stranded record(s) `failed` (JobOrphanedError, ceiling ' + _orphanTimeout + 's)');
|
|
846
|
+
}
|
|
847
|
+
cb(reclaimed); return;
|
|
848
|
+
}
|
|
849
|
+
var state = states[si]; si++;
|
|
850
|
+
_store.list({ state: state }, function(listErr, recs) {
|
|
851
|
+
if (listErr || !Array.isArray(recs)) {
|
|
852
|
+
if (listErr) console.warn('[lib.job] orphan reclaim: list(' + state + ') failed — skipping this pass: ' + (listErr.message || listErr));
|
|
853
|
+
return nextState();
|
|
854
|
+
}
|
|
855
|
+
var ri = 0;
|
|
856
|
+
var nextRec = function() {
|
|
857
|
+
if (ri >= recs.length) return nextState();
|
|
858
|
+
var rec = recs[ri]; ri++;
|
|
859
|
+
var stranded = false;
|
|
860
|
+
if (state === STATES.RUNNING) {
|
|
861
|
+
stranded = (now - (rec.updatedAt || rec.startedAt || rec.createdAt || now)) > ceilingMs;
|
|
862
|
+
} else if (rec.nextRetryAt) {
|
|
863
|
+
stranded = now > (rec.nextRetryAt + ceilingMs);
|
|
864
|
+
} else {
|
|
865
|
+
stranded = (now - (rec.updatedAt || rec.createdAt || now)) > ceilingMs;
|
|
866
|
+
}
|
|
867
|
+
if (!stranded) return nextRec();
|
|
868
|
+
update(rec.id, {
|
|
869
|
+
state: STATES.FAILED,
|
|
870
|
+
error: { name: 'JobOrphanedError', message: 'reclaimed: `' + state + '` past jobs.orphanTimeout (' + _orphanTimeout + 's) — the owning process likely exited before settling this job', stack: null },
|
|
871
|
+
nextRetryAt: null,
|
|
872
|
+
finishedAt: now,
|
|
873
|
+
expiresAt: now + _ttl * 1000
|
|
874
|
+
}, function(uErr, updated) {
|
|
875
|
+
if (uErr) {
|
|
876
|
+
console.warn('[lib.job] orphan reclaim: update failed for job `' + rec.id + '`: ' + (uErr.message || uErr));
|
|
877
|
+
} else if (updated) {
|
|
878
|
+
reclaimed++;
|
|
879
|
+
}
|
|
880
|
+
nextRec();
|
|
881
|
+
});
|
|
882
|
+
};
|
|
883
|
+
nextRec();
|
|
884
|
+
});
|
|
885
|
+
};
|
|
886
|
+
nextState();
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
/**
|
|
890
|
+
* Purge terminal records whose TTL has elapsed — preceded by the #B471
|
|
891
|
+
* orphan-reclaim pass (see {@link reclaimOrphans}), so records a dead
|
|
892
|
+
* process stranded become terminal and then age out through this same
|
|
893
|
+
* purge. Invoked automatically by the internal timer; also callable
|
|
894
|
+
* directly (e.g. from a bundle cron, or a test). The callback contract is
|
|
895
|
+
* unchanged: `removedCount` counts DELETIONS only, never reclaims.
|
|
762
896
|
*
|
|
763
897
|
* @memberof module:gina/lib/job
|
|
764
898
|
* @param {function} [cb] - `cb(err, removedCount)`.
|
|
@@ -770,7 +904,10 @@ function remove(id, cb) {
|
|
|
770
904
|
function sweep(cb) {
|
|
771
905
|
if (typeof cb !== 'function') cb = noop;
|
|
772
906
|
if (!_store) { cb(null, 0); return; }
|
|
773
|
-
|
|
907
|
+
var now = Date.now();
|
|
908
|
+
reclaimOrphans(now, function() {
|
|
909
|
+
_store.sweep(now, cb);
|
|
910
|
+
});
|
|
774
911
|
}
|
|
775
912
|
|
|
776
913
|
/**
|
|
@@ -786,6 +923,7 @@ function sweep(cb) {
|
|
|
786
923
|
* @param {number} [opts.sweepInterval=300] - Sweep interval (seconds); `0` disables the internal timer.
|
|
787
924
|
* @param {number} [opts.idSize=21] - jobId length (characters).
|
|
788
925
|
* @param {number} [opts.retryBackoffMs=1000] - Base delay (ms) between attempts of a failed job with retries remaining; doubles each attempt.
|
|
926
|
+
* @param {number|boolean} [opts.orphanTimeout=86400] - Orphan-reclaim ceiling (SECONDS): a non-terminal record whose last transition is older than this is reclaimed as `failed` (`JobOrphanedError`) by the sweep pass — durable stores only, the built-in memory store is exempt. `0`/`false` disables; positive values are floored at 60.
|
|
789
927
|
* @param {number} [opts.webhookMaxAttempts=3] - Completion-webhook retry ceiling.
|
|
790
928
|
* @param {number} [opts.webhookBackoffMs=500] - Webhook backoff base (ms); doubles each retry.
|
|
791
929
|
* @param {number} [opts.webhookTimeoutMs=5000] - Per-attempt webhook request timeout (ms).
|
|
@@ -814,6 +952,13 @@ function start(opts) {
|
|
|
814
952
|
if (typeof opts.retryBackoffMs === 'number' && opts.retryBackoffMs >= 0) {
|
|
815
953
|
_retryBackoffMs = Math.floor(opts.retryBackoffMs);
|
|
816
954
|
}
|
|
955
|
+
// 0 / false disables the orphan-reclaim pass; a positive value is floored
|
|
956
|
+
// at 60s so a mistyped tiny ceiling cannot reclaim jobs mid-flight.
|
|
957
|
+
if (opts.orphanTimeout === 0 || opts.orphanTimeout === false) {
|
|
958
|
+
_orphanTimeout = 0;
|
|
959
|
+
} else if (typeof opts.orphanTimeout === 'number' && opts.orphanTimeout > 0) {
|
|
960
|
+
_orphanTimeout = Math.max(60, Math.floor(opts.orphanTimeout));
|
|
961
|
+
}
|
|
817
962
|
if (typeof opts.webhookMaxAttempts === 'number' && opts.webhookMaxAttempts > 0) {
|
|
818
963
|
_webhookMaxAttempts = Math.floor(opts.webhookMaxAttempts);
|
|
819
964
|
}
|
|
@@ -827,7 +972,13 @@ function start(opts) {
|
|
|
827
972
|
_webhookSecret = opts.webhookSecret;
|
|
828
973
|
}
|
|
829
974
|
if (!_store) {
|
|
830
|
-
|
|
975
|
+
if (opts.store && typeof opts.store === 'object') {
|
|
976
|
+
_store = opts.store;
|
|
977
|
+
_storeIsBuiltinMemory = false;
|
|
978
|
+
} else {
|
|
979
|
+
_store = createMemoryStore();
|
|
980
|
+
_storeIsBuiltinMemory = true;
|
|
981
|
+
}
|
|
831
982
|
} else if (opts.store && typeof opts.store === 'object' && opts.store !== _store) {
|
|
832
983
|
// Store adoption is once-only: a store arriving after one is installed
|
|
833
984
|
// (e.g. a create() already ran ensureStarted() and defaulted to the
|
|
@@ -900,6 +1051,8 @@ function reset() {
|
|
|
900
1051
|
_webhookTimeoutMs = DEFAULT_WEBHOOK_TIMEOUT_MS;
|
|
901
1052
|
_webhookSecret = null;
|
|
902
1053
|
_retryBackoffMs = DEFAULT_RETRY_BACKOFF_MS;
|
|
1054
|
+
_orphanTimeout = DEFAULT_ORPHAN_TIMEOUT;
|
|
1055
|
+
_storeIsBuiltinMemory = false;
|
|
903
1056
|
}
|
|
904
1057
|
|
|
905
1058
|
module.exports = {
|