gina 0.5.6 → 0.5.7
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 +17 -0
- package/README.md +9 -6
- package/ROADMAP.md +1 -0
- package/framework/v0.5.7/VERSION +1 -0
- package/framework/v0.5.7/core/connectors/mongodb/lib/job-store.js +334 -0
- package/framework/v0.5.7/core/connectors/redis/index.js +36 -0
- package/framework/v0.5.7/core/connectors/redis/lib/connector.js +66 -0
- package/framework/v0.5.7/core/connectors/redis/lib/job-store.js +454 -0
- package/framework/v0.5.7/core/connectors/sqlite/lib/job-store.js +263 -0
- package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-json.js +41 -31
- package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-stream.js +10 -5
- package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-swig.js +37 -31
- package/framework/{v0.5.6 → v0.5.7}/core/gna.js +22 -2
- package/framework/{v0.5.6 → v0.5.7}/core/server.js +68 -0
- package/framework/{v0.5.6 → v0.5.7}/lib/index.js +4 -0
- package/framework/{v0.5.6 → v0.5.7}/lib/job/src/main.js +147 -29
- package/framework/v0.5.7/lib/job-store.js +84 -0
- package/framework/{v0.5.6 → v0.5.7}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +7 -4
- package/package.json +4 -4
- package/script/check_no_local_leak.js +22 -2
- package/script/smoke_in_container.js +8 -2
- package/script/smoke_test_tarball.js +8 -1
- package/framework/v0.5.6/VERSION +0 -1
- package/framework/v0.5.6/core/connectors/redis/index.js +0 -30
- /package/framework/{v0.5.6 → v0.5.7}/AUTHORS +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/config.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/content.encoding +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/dev/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/locales/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/mime.types +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/model/entity.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/model/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/router.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/server.express.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/server.isaac.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/status.codes +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/console.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/context.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/path.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/task.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/helpers/text.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/async/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/config.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/job/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/math/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/model.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/proc.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/session-store.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/shell.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/state.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/url/README.md +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/url/index.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/validator.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.6 → v0.5.7}/lib/ws-session/src/main.js +0 -0
|
@@ -1282,6 +1282,40 @@ function Server(options) {
|
|
|
1282
1282
|
}
|
|
1283
1283
|
|
|
1284
1284
|
|
|
1285
|
+
/**
|
|
1286
|
+
* Confines a resolved static-asset filename to its intended base directory,
|
|
1287
|
+
* rejecting path-traversal escapes (`../`, and their `%2e%2e` / `%2F` encoded
|
|
1288
|
+
* variants once decoded) that would otherwise canonicalise to a sibling under
|
|
1289
|
+
* the shared root. Both paths are normalised with `path.resolve`, then a
|
|
1290
|
+
* separator-aware containment check is applied so a base of `/srv/app/lib`
|
|
1291
|
+
* cannot be bypassed by a sibling such as `/srv/app/lib-secrets`. Callers must
|
|
1292
|
+
* settle percent-decoding on `filename` BEFORE calling — both static resolvers
|
|
1293
|
+
* `safeDecodeURIComponent()` first, so `%2e%2e` / `%2F` are already `..` / `/`
|
|
1294
|
+
* here. Purely lexical (no symlink following) — matches the existing
|
|
1295
|
+
* CVE-2023-25345 boundary-check idiom in `controller.render-swig.js`.
|
|
1296
|
+
*
|
|
1297
|
+
* @inner
|
|
1298
|
+
* @private
|
|
1299
|
+
* @param {string} filename - The concatenated candidate filesystem path (decoded)
|
|
1300
|
+
* @param {string} base - The intended base directory (mapping target or publicPath)
|
|
1301
|
+
* @returns {string|null} The canonical in-base path, or `null` when it escapes `base`
|
|
1302
|
+
* @example
|
|
1303
|
+
* confineToBase('/srv/app/js/lib/../../../config/secret.json', '/srv/app/js/lib'); // → null
|
|
1304
|
+
* confineToBase('/srv/app/js/lib/app.js', '/srv/app/js/lib'); // → '/srv/app/js/lib/app.js'
|
|
1305
|
+
*/
|
|
1306
|
+
var confineToBase = function(filename, base) {
|
|
1307
|
+
if ( typeof(filename) != 'string' || typeof(base) != 'string' || base.length === 0 ) {
|
|
1308
|
+
return null;
|
|
1309
|
+
}
|
|
1310
|
+
var _resolvedBase = path.resolve(base);
|
|
1311
|
+
var _resolvedFile = path.resolve(filename);
|
|
1312
|
+
// separator-aware containment: identical to base, or a proper child of it
|
|
1313
|
+
if ( _resolvedFile === _resolvedBase || _resolvedFile.indexOf(_resolvedBase + path.sep) === 0 ) {
|
|
1314
|
+
return _resolvedFile;
|
|
1315
|
+
}
|
|
1316
|
+
return null;
|
|
1317
|
+
}
|
|
1318
|
+
|
|
1285
1319
|
/**
|
|
1286
1320
|
* Resolves a request URL to an absolute asset filename by consulting
|
|
1287
1321
|
* `publicResources`, `staticResources`, reverse-routing aliases, and
|
|
@@ -1311,6 +1345,7 @@ function Server(options) {
|
|
|
1311
1345
|
, path = null
|
|
1312
1346
|
, altConf = ( typeof(staticProps.firstLevel) != 'undefined' && typeof(self.conf.reverseRouting) != 'undefined' ) ? self.conf.reverseRouting[staticProps.firstLevel] : false
|
|
1313
1347
|
, backedupPath = null
|
|
1348
|
+
, _base = null // #B64 — intended base dir to confine `filename` against
|
|
1314
1349
|
;
|
|
1315
1350
|
if (
|
|
1316
1351
|
staticProps.isFile && staticsArr.indexOf(url) > -1
|
|
@@ -1334,11 +1369,26 @@ function Server(options) {
|
|
|
1334
1369
|
} else {
|
|
1335
1370
|
filename = (bundleConf.staticResources.indexOf(path) > -1) ? bundleConf.content.statics[path] + url.replace(path, '/') : bundleConf.content.statics[staticProps.firstLevel] + url.replace(staticProps.firstLevel, '/');
|
|
1336
1371
|
}
|
|
1372
|
+
// #B64 path-traversal guard — the mapped filename above is
|
|
1373
|
+
// `<mapping target> + <url remainder>` by raw concatenation, so a
|
|
1374
|
+
// decoded `../` in the remainder escapes the target dir. Capture the
|
|
1375
|
+
// matched mapping target as the base to confine against (below).
|
|
1376
|
+
_base = (bundleConf.staticResources.indexOf(path) > -1) ? bundleConf.content.statics[path] : bundleConf.content.statics[staticProps.firstLevel];
|
|
1337
1377
|
} else {
|
|
1338
1378
|
filename = ( bundleConf.staticResources.indexOf(url) > -1 ) ? bundleConf.content.statics[url] : bundleConf.publicPath + url;
|
|
1379
|
+
// #B64 path-traversal guard — exact-match mapping target, else the
|
|
1380
|
+
// bundle `publicPath` (for the `publicPath + url` fallback).
|
|
1381
|
+
_base = ( bundleConf.staticResources.indexOf(url) > -1 ) ? bundleConf.content.statics[url] : bundleConf.publicPath;
|
|
1339
1382
|
}
|
|
1340
1383
|
|
|
1341
1384
|
|
|
1385
|
+
// #B64 — reject any path that canonicalises outside its base dir
|
|
1386
|
+
// (traversal). Returns notFound (`404.html`) — identical to a missing
|
|
1387
|
+
// file, no distinct signal. Guards every caller (HTTP/2 push, asset
|
|
1388
|
+
// catalog) at this single resolver chokepoint.
|
|
1389
|
+
if ( confineToBase(filename, _base) === null )
|
|
1390
|
+
return notFound;
|
|
1391
|
+
|
|
1342
1392
|
if ( !fs.existsSync(filename) )
|
|
1343
1393
|
return notFound;
|
|
1344
1394
|
|
|
@@ -2359,6 +2409,10 @@ function Server(options) {
|
|
|
2359
2409
|
var isCacheless = bundleConf.isCacheless;
|
|
2360
2410
|
// by default
|
|
2361
2411
|
var filename = bundleConf.publicPath + pathname;
|
|
2412
|
+
// #B64 path-traversal guard — the intended base dir for `filename`. Starts
|
|
2413
|
+
// at publicPath (the default build above) and is re-pointed to the matched
|
|
2414
|
+
// statics mapping target in each branch below, then confined post-decode.
|
|
2415
|
+
var _staticBase = bundleConf.publicPath;
|
|
2362
2416
|
var isFilenameDir = null
|
|
2363
2417
|
, stat = null
|
|
2364
2418
|
, dirname = null
|
|
@@ -2374,6 +2428,7 @@ function Server(options) {
|
|
|
2374
2428
|
var staticIndex = bundleConf.staticResources.indexOf(pathname);
|
|
2375
2429
|
if ( staticProps.isStaticFilename && staticIndex > -1 ) {
|
|
2376
2430
|
filename = bundleConf.content.statics[ bundleConf.staticResources[staticIndex] ]
|
|
2431
|
+
_staticBase = filename; // #B64 — exact single-file mapping; base = the file itself
|
|
2377
2432
|
} else {
|
|
2378
2433
|
var s = 0, sLen = bundleConf.staticResources.length;
|
|
2379
2434
|
for ( ; s < sLen; ++s ) {
|
|
@@ -2383,6 +2438,8 @@ function Server(options) {
|
|
|
2383
2438
|
// `staticResources` path.
|
|
2384
2439
|
// if ( eval('/^' + bundleConf.staticResources[s].replace(/\//g,'\\/') +'/').test(pathname) ) {
|
|
2385
2440
|
if ( new RegExp('^' + bundleConf.staticResources[s].replace(/\//g,'\\/')).test(pathname) ) {
|
|
2441
|
+
// #B64 — capture the matched mapping target as the confinement base
|
|
2442
|
+
_staticBase = bundleConf.content.statics[ bundleConf.staticResources[s] ];
|
|
2386
2443
|
filename = bundleConf.content.statics[ bundleConf.staticResources[s] ] +'/'+ pathname.replace(bundleConf.staticResources[s], '');
|
|
2387
2444
|
break;
|
|
2388
2445
|
}
|
|
@@ -2393,6 +2450,8 @@ function Server(options) {
|
|
|
2393
2450
|
var key = pathname.replace(pathname.split('/').splice(-1), '');
|
|
2394
2451
|
for ( ; s < sLen; ++s ) {
|
|
2395
2452
|
if ( bundleConf.staticResources[s] == key ) {
|
|
2453
|
+
// #B64 — capture the matched mapping target as the confinement base
|
|
2454
|
+
_staticBase = bundleConf.content.statics[ bundleConf.staticResources[s] ];
|
|
2396
2455
|
filename = bundleConf.content.statics[ bundleConf.staticResources[s] ] +'/'+ pathname.replace(bundleConf.staticResources[s], '');
|
|
2397
2456
|
break;
|
|
2398
2457
|
}
|
|
@@ -2410,6 +2469,15 @@ function Server(options) {
|
|
|
2410
2469
|
// and crash the bundle. Fall back to the raw filename on a bad escape.
|
|
2411
2470
|
// was: filename = decodeURIComponent(filename);
|
|
2412
2471
|
filename = safeDecodeURIComponent(filename);
|
|
2472
|
+
// #B64 path-traversal guard — `filename` above is `<base> + '/' + <url
|
|
2473
|
+
// remainder>` (or `publicPath + pathname`) by raw concatenation, so a
|
|
2474
|
+
// decoded `../` (incl. %2F / %2e%2e, now settled by the line above)
|
|
2475
|
+
// escapes the base dir. Reject anything resolving outside `_staticBase`
|
|
2476
|
+
// with a plain 404 — identical to a missing file, no distinct signal.
|
|
2477
|
+
// Guards BOTH the fs.readFile and fs.createReadStream sinks below.
|
|
2478
|
+
if ( confineToBase(filename, _staticBase) === null ) {
|
|
2479
|
+
return throwError(response, 404, 'Page not found: \n' + pathname, next);
|
|
2480
|
+
}
|
|
2413
2481
|
let filenameObj = new _(filename, true);
|
|
2414
2482
|
filenameObj.exists(function onStaticExists(exists) {
|
|
2415
2483
|
// fs.exists(filename, function onStaticExists(exists) {
|
|
@@ -84,6 +84,10 @@ function Lib() {
|
|
|
84
84
|
archiver : require('./archiver'),
|
|
85
85
|
cmd : _require('./cmd'),
|
|
86
86
|
SessionStore : _require('./session-store'),
|
|
87
|
+
// #AI6 — connector-backed job-store factory (lib/job `start({store})`).
|
|
88
|
+
// Stateless dispatcher invoked ONCE at boot from gna.js; _require like
|
|
89
|
+
// SessionStore (no instance/singleton state to protect from eviction).
|
|
90
|
+
JobStore : _require('./job-store'),
|
|
87
91
|
SwigFilters : _require('./swig-filters'),
|
|
88
92
|
Cache : require('./cache'), // #B32-residual — plain require (leaf class held at gen-0 via server.isaac.js:35; Cache._events is a Collection). See Collection note above.
|
|
89
93
|
uuid : require('./uuid'), // #B32-residual — plain require (pushed as a child of the gen-0 collection module per `new Collection()`). See Collection note above.
|
|
@@ -25,14 +25,22 @@
|
|
|
25
25
|
* deferred functions run at once; the rest queue. This is the whole point
|
|
26
26
|
* of moving the work out-of-band — a burst of requests must not fan out
|
|
27
27
|
* into N unbounded concurrent (and expensive) LLM calls.
|
|
28
|
-
* - **
|
|
28
|
+
* - **Failed-job retry (opt-in).** `create(fn, { maxAttempts: N })` retries
|
|
29
|
+
* a failed attempt with exponential backoff (`retryBackoffMs`, default
|
|
30
|
+
* 1s, doubling); the record returns to `pending` (last error and
|
|
31
|
+
* `nextRetryAt` stay visible) until the final attempt — `failed` is
|
|
32
|
+
* strictly terminal. The deferred fn lives only in the creating process,
|
|
33
|
+
* so only the origin pod retries; other pods just read records.
|
|
34
|
+
* - **Pluggable store, memory by default.** Records persist behind a small
|
|
29
35
|
* callback-shaped store interface (`set / get / remove / list / sweep`).
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
+
* The in-memory store is the default; a connector-backed store is a
|
|
37
|
+
* drop-in via `start({ store })` — SQLite ships first
|
|
38
|
+
* (`core/connectors/sqlite/lib/job-store.js`, wired from `app.json`'s
|
|
39
|
+
* `jobs.store` through `lib/job-store`), making records survive a bundle
|
|
40
|
+
* restart and readable cross-process. The deferred *function* always
|
|
41
|
+
* lives in the creating process's memory (a closure cannot be
|
|
42
|
+
* serialised); only the *record* (state / result / error) goes in the
|
|
43
|
+
* store.
|
|
36
44
|
* - **Self-contained TTL sweep.** Terminal (completed / failed) records past
|
|
37
45
|
* their TTL are purged by an unref'd `setInterval` (the SQLite
|
|
38
46
|
* session-store cleanup pattern) — NOT `lib/cron`, which is dormant (not
|
|
@@ -48,12 +56,18 @@
|
|
|
48
56
|
* "maxConcurrency": 4,
|
|
49
57
|
* "ttl": 3600,
|
|
50
58
|
* "sweepInterval": 300,
|
|
51
|
-
* "idSize": 21
|
|
59
|
+
* "idSize": 21,
|
|
60
|
+
* "retryBackoffMs": 1000,
|
|
61
|
+
* "store": "jobsDb"
|
|
52
62
|
* }
|
|
53
63
|
* }
|
|
54
64
|
*
|
|
55
65
|
* `core/gna.js`'s `server.on('started')` callback calls `lib.job.start(...)`
|
|
56
|
-
* once per bundle with this block.
|
|
66
|
+
* once per bundle with this block. `store` (optional) names a
|
|
67
|
+
* `config/connectors.json` entry; gna.js resolves it through `lib/job-store`
|
|
68
|
+
* into a connector-backed store (records survive restarts / are visible
|
|
69
|
+
* cross-process) and fails the boot if it cannot be built. Absent `store`
|
|
70
|
+
* means the in-memory store, as before.
|
|
57
71
|
*
|
|
58
72
|
* @package gina.framework
|
|
59
73
|
* @namespace lib.job
|
|
@@ -74,8 +88,9 @@ var uuid = require('../../uuid/src/main');
|
|
|
74
88
|
|
|
75
89
|
/**
|
|
76
90
|
* Job lifecycle states. A job moves `PENDING -> RUNNING -> COMPLETED | FAILED`.
|
|
77
|
-
*
|
|
78
|
-
*
|
|
91
|
+
* With retries (`maxAttempts > 1`) a failed attempt moves `RUNNING -> PENDING`
|
|
92
|
+
* (rescheduled with backoff on the creating process) — `FAILED` and
|
|
93
|
+
* `COMPLETED` are strictly terminal.
|
|
79
94
|
*
|
|
80
95
|
* @memberof module:gina/lib/job
|
|
81
96
|
* @constant
|
|
@@ -141,6 +156,17 @@ var DEFAULT_WEBHOOK_BACKOFF_MS = 500;
|
|
|
141
156
|
/** Per-attempt request timeout (ms). @memberof module:gina/lib/job @constant @type {number} */
|
|
142
157
|
var DEFAULT_WEBHOOK_TIMEOUT_MS = 5000;
|
|
143
158
|
|
|
159
|
+
/**
|
|
160
|
+
* Default base delay (ms) between attempts of a failed job with retries
|
|
161
|
+
* remaining (`maxAttempts > 1`) — doubles on each attempt (the webhook-retry
|
|
162
|
+
* backoff shape).
|
|
163
|
+
*
|
|
164
|
+
* @memberof module:gina/lib/job
|
|
165
|
+
* @constant
|
|
166
|
+
* @type {number}
|
|
167
|
+
*/
|
|
168
|
+
var DEFAULT_RETRY_BACKOFF_MS = 1000;
|
|
169
|
+
|
|
144
170
|
/**
|
|
145
171
|
* The active record store (memory store by default). `null` until the first
|
|
146
172
|
* {@link create} or {@link start}.
|
|
@@ -191,6 +217,15 @@ var _webhookTimeoutMs = DEFAULT_WEBHOOK_TIMEOUT_MS;
|
|
|
191
217
|
* @type {?string}
|
|
192
218
|
*/
|
|
193
219
|
var _webhookSecret = null;
|
|
220
|
+
/** @inner @type {number} */
|
|
221
|
+
var _retryBackoffMs = DEFAULT_RETRY_BACKOFF_MS;
|
|
222
|
+
/**
|
|
223
|
+
* Pending retry timers (unref'd). Tracked so {@link reset} can cancel them —
|
|
224
|
+
* a timer firing after a reset would re-enqueue into a torn-down store.
|
|
225
|
+
* @inner
|
|
226
|
+
* @type {Set<*>}
|
|
227
|
+
*/
|
|
228
|
+
var _retryTimers = new Set();
|
|
194
229
|
|
|
195
230
|
/**
|
|
196
231
|
* No-op callback used when a caller omits one.
|
|
@@ -206,14 +241,15 @@ function noop() {}
|
|
|
206
241
|
* @property {*} result - The resolved value once `completed`; `null` otherwise.
|
|
207
242
|
* @property {?{name:string, message:string, stack:?string}} error - Serialised error once `failed`; `null` otherwise.
|
|
208
243
|
* @property {number} attempts - How many times the worker has run the function.
|
|
209
|
-
* @property {number} maxAttempts - Retry ceiling (1
|
|
244
|
+
* @property {number} maxAttempts - Retry ceiling (default 1 — run once). Above 1, a failed attempt is retried with backoff on the creating process.
|
|
210
245
|
* @property {?string} callbackUrl - Webhook URL POSTed `{ id, state, result, error }` on completion when set.
|
|
211
246
|
* @property {?Object} meta - Caller-supplied opaque metadata.
|
|
212
247
|
* @property {number} createdAt - Epoch ms at creation.
|
|
213
248
|
* @property {number} updatedAt - Epoch ms of the last transition.
|
|
214
249
|
* @property {?number} startedAt - Epoch ms the worker began; `null` while pending.
|
|
215
250
|
* @property {?number} finishedAt - Epoch ms of the terminal transition; `null` until then.
|
|
216
|
-
* @property {?number} expiresAt - Epoch ms after which a terminal record is sweepable; `null` until terminal.
|
|
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.
|
|
252
|
+
* @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).
|
|
217
253
|
* @property {?number} webhookDeliveredAt - Epoch ms a completion webhook succeeded; absent until delivered.
|
|
218
254
|
* @property {?boolean} webhookFailed - `true` once webhook delivery exhausts its retries; absent otherwise.
|
|
219
255
|
* @property {?string} webhookError - Last webhook failure reason; absent on success.
|
|
@@ -377,33 +413,61 @@ function runOne(entry) {
|
|
|
377
413
|
rec.startedAt = Date.now();
|
|
378
414
|
rec.updatedAt = rec.startedAt;
|
|
379
415
|
rec.attempts = (rec.attempts || 0) + 1;
|
|
416
|
+
// Carried to settle() so the retry decision needs no extra store read
|
|
417
|
+
// (the fn itself rides on the entry — it exists only in this process).
|
|
418
|
+
entry.attempts = rec.attempts;
|
|
419
|
+
entry.maxAttempts = rec.maxAttempts || 1;
|
|
380
420
|
_store.set(id, rec, function() {
|
|
381
421
|
Promise.resolve().then(function() {
|
|
382
422
|
return entry.fn();
|
|
383
423
|
}).then(function(result) {
|
|
384
|
-
settle(id, result, null);
|
|
424
|
+
settle(id, result, null, entry);
|
|
385
425
|
}, function(rejErr) {
|
|
386
|
-
settle(id, null, rejErr);
|
|
426
|
+
settle(id, null, rejErr, entry);
|
|
387
427
|
});
|
|
388
428
|
});
|
|
389
429
|
});
|
|
390
430
|
}
|
|
391
431
|
|
|
392
432
|
/**
|
|
393
|
-
*
|
|
394
|
-
*
|
|
433
|
+
* Route a finished attempt. A failed attempt with retries remaining
|
|
434
|
+
* (`attempts < maxAttempts`) is rescheduled: the record returns to `pending`
|
|
435
|
+
* with the serialised failure kept visible and an informational
|
|
436
|
+
* `nextRetryAt`, while `expiresAt` stays `null` so the sweep can never purge
|
|
437
|
+
* a retryable job. Otherwise the terminal state is written, the worker slot
|
|
438
|
+
* freed, and the queue pumped again. `failed` / `completed` are strictly
|
|
439
|
+
* terminal, and the completion webhook fires only on that final transition.
|
|
395
440
|
*
|
|
396
441
|
* @inner
|
|
397
442
|
* @param {string} id
|
|
398
443
|
* @param {*} result - Resolved value on success.
|
|
399
444
|
* @param {*} err - Thrown / rejected value on failure (mutually exclusive with `result`).
|
|
445
|
+
* @param {{id:string, fn:function, attempts:number, maxAttempts:number}} entry - In-process queue entry (carries the deferred fn for a reschedule).
|
|
400
446
|
* @returns {void}
|
|
401
447
|
*/
|
|
402
|
-
function settle(id, result, err) {
|
|
403
|
-
var now
|
|
448
|
+
function settle(id, result, err, entry) {
|
|
449
|
+
var now = Date.now();
|
|
450
|
+
|
|
451
|
+
// Retry path — only the process that created the job holds the fn, so a
|
|
452
|
+
// reschedule can only ever originate here: a pod that merely reads the
|
|
453
|
+
// record through a shared store never reaches this code for that id.
|
|
454
|
+
if (err && entry && entry.attempts < entry.maxAttempts) {
|
|
455
|
+
var delay = _retryBackoffMs * Math.pow(2, entry.attempts - 1);
|
|
456
|
+
update(id, {
|
|
457
|
+
state: STATES.PENDING,
|
|
458
|
+
error: serializeError(err),
|
|
459
|
+
nextRetryAt: now + delay
|
|
460
|
+
}, function() {
|
|
461
|
+
_running--;
|
|
462
|
+
drain();
|
|
463
|
+
scheduleRetry(entry, delay);
|
|
464
|
+
});
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
|
|
404
468
|
var patch = err
|
|
405
|
-
? { state: STATES.FAILED, error: serializeError(err), finishedAt: now, expiresAt: now + _ttl * 1000 }
|
|
406
|
-
: { state: STATES.COMPLETED, result: result,
|
|
469
|
+
? { state: STATES.FAILED, error: serializeError(err), nextRetryAt: null, finishedAt: now, expiresAt: now + _ttl * 1000 }
|
|
470
|
+
: { state: STATES.COMPLETED, result: result, error: null, nextRetryAt: null, finishedAt: now, expiresAt: now + _ttl * 1000 };
|
|
407
471
|
|
|
408
472
|
update(id, patch, function(uErr, rec) {
|
|
409
473
|
_running--;
|
|
@@ -417,6 +481,31 @@ function settle(id, result, err) {
|
|
|
417
481
|
});
|
|
418
482
|
}
|
|
419
483
|
|
|
484
|
+
/**
|
|
485
|
+
* Arm the unref'd backoff timer that re-enqueues a failed attempt's entry.
|
|
486
|
+
* The timer closure is what keeps the deferred function alive between
|
|
487
|
+
* attempts (no separate registry). {@link reset} cancels pending timers so
|
|
488
|
+
* none can fire into a torn-down store, and the timer re-checks the store
|
|
489
|
+
* before re-queueing (a reset may race an already-elapsed timer). Re-entry
|
|
490
|
+
* goes through the normal queue, so retries respect `maxConcurrency` like
|
|
491
|
+
* any other job.
|
|
492
|
+
*
|
|
493
|
+
* @inner
|
|
494
|
+
* @param {{id:string, fn:function}} entry
|
|
495
|
+
* @param {number} delay - Backoff delay (ms).
|
|
496
|
+
* @returns {void}
|
|
497
|
+
*/
|
|
498
|
+
function scheduleRetry(entry, delay) {
|
|
499
|
+
var t = setTimeout(function() {
|
|
500
|
+
_retryTimers.delete(t);
|
|
501
|
+
if (!_store) return; // reset() raced the timer
|
|
502
|
+
_queue.push(entry);
|
|
503
|
+
drain();
|
|
504
|
+
}, delay);
|
|
505
|
+
if (t && typeof t.unref === 'function') t.unref();
|
|
506
|
+
_retryTimers.add(t);
|
|
507
|
+
}
|
|
508
|
+
|
|
420
509
|
/**
|
|
421
510
|
* Best-effort completion webhook. POSTs `{ id, state, result, error }` to the
|
|
422
511
|
* record's `callbackUrl` with retry/backoff and an optional HMAC signature.
|
|
@@ -515,7 +604,13 @@ function retryWebhook(record, payload, attempt, reason) {
|
|
|
515
604
|
|
|
516
605
|
/**
|
|
517
606
|
* Get-merge-set a partial patch onto a record. Store-agnostic (works for the
|
|
518
|
-
* sync memory store and
|
|
607
|
+
* sync memory store and an async connector store).
|
|
608
|
+
*
|
|
609
|
+
* NOT atomic across the get/set pair. Safe because every writer for a given id
|
|
610
|
+
* runs sequentially by construction — create, then the worker, then settle,
|
|
611
|
+
* then the webhook outcome, all on the origin pod (other pods only read). Do
|
|
612
|
+
* not add a concurrent same-id update() caller without adding per-id
|
|
613
|
+
* serialisation first.
|
|
519
614
|
*
|
|
520
615
|
* @inner
|
|
521
616
|
* @param {string} id
|
|
@@ -550,7 +645,7 @@ function update(id, patch, cb) {
|
|
|
550
645
|
* @param {Object} [opts]
|
|
551
646
|
* @param {string} [opts.callbackUrl] - Webhook URL notified on completion (consumed by the webhook slice).
|
|
552
647
|
* @param {Object} [opts.meta] - Opaque metadata stored on the record.
|
|
553
|
-
* @param {number} [opts.maxAttempts=1] - Retry ceiling
|
|
648
|
+
* @param {number} [opts.maxAttempts=1] - Retry ceiling. Above 1, a failed attempt is retried on the creating process with exponential backoff (`retryBackoffMs`); `failed` is only ever the state after the last attempt.
|
|
554
649
|
* @returns {string} - The job id.
|
|
555
650
|
* @throws {TypeError} - When `fn` is not a function.
|
|
556
651
|
*
|
|
@@ -587,10 +682,18 @@ function create(fn, opts) {
|
|
|
587
682
|
expiresAt: null
|
|
588
683
|
};
|
|
589
684
|
|
|
590
|
-
_store.set(id, record, noop);
|
|
591
685
|
_queue.push({ id: id, fn: fn });
|
|
592
|
-
// Defer so create() returns the id before the function starts
|
|
593
|
-
|
|
686
|
+
// Defer so create() returns the id before the function starts — and pump
|
|
687
|
+
// only once the store has landed the record: with an async connector store
|
|
688
|
+
// an immediate drain could reach runOne's get() before the set() has
|
|
689
|
+
// persisted, and the vanished-record guard would silently drop the job.
|
|
690
|
+
// (The memory store fires this callback synchronously — identical timing.)
|
|
691
|
+
_store.set(id, record, function(setErr) {
|
|
692
|
+
if (setErr) {
|
|
693
|
+
console.warn('[lib.job] create: store.set failed for job `' + id + '` — the job will be dropped: ' + (setErr.message || setErr));
|
|
694
|
+
}
|
|
695
|
+
setImmediate(drain);
|
|
696
|
+
});
|
|
594
697
|
return id;
|
|
595
698
|
}
|
|
596
699
|
|
|
@@ -682,6 +785,7 @@ function sweep(cb) {
|
|
|
682
785
|
* @param {number} [opts.ttl=3600] - Terminal-record TTL (seconds).
|
|
683
786
|
* @param {number} [opts.sweepInterval=300] - Sweep interval (seconds); `0` disables the internal timer.
|
|
684
787
|
* @param {number} [opts.idSize=21] - jobId length (characters).
|
|
788
|
+
* @param {number} [opts.retryBackoffMs=1000] - Base delay (ms) between attempts of a failed job with retries remaining; doubles each attempt.
|
|
685
789
|
* @param {number} [opts.webhookMaxAttempts=3] - Completion-webhook retry ceiling.
|
|
686
790
|
* @param {number} [opts.webhookBackoffMs=500] - Webhook backoff base (ms); doubles each retry.
|
|
687
791
|
* @param {number} [opts.webhookTimeoutMs=5000] - Per-attempt webhook request timeout (ms).
|
|
@@ -707,6 +811,9 @@ function start(opts) {
|
|
|
707
811
|
if (typeof opts.idSize === 'number' && opts.idSize > 0) {
|
|
708
812
|
_idSize = Math.floor(opts.idSize);
|
|
709
813
|
}
|
|
814
|
+
if (typeof opts.retryBackoffMs === 'number' && opts.retryBackoffMs >= 0) {
|
|
815
|
+
_retryBackoffMs = Math.floor(opts.retryBackoffMs);
|
|
816
|
+
}
|
|
710
817
|
if (typeof opts.webhookMaxAttempts === 'number' && opts.webhookMaxAttempts > 0) {
|
|
711
818
|
_webhookMaxAttempts = Math.floor(opts.webhookMaxAttempts);
|
|
712
819
|
}
|
|
@@ -721,6 +828,12 @@ function start(opts) {
|
|
|
721
828
|
}
|
|
722
829
|
if (!_store) {
|
|
723
830
|
_store = (opts.store && typeof opts.store === 'object') ? opts.store : createMemoryStore();
|
|
831
|
+
} else if (opts.store && typeof opts.store === 'object' && opts.store !== _store) {
|
|
832
|
+
// Store adoption is once-only: a store arriving after one is installed
|
|
833
|
+
// (e.g. a create() already ran ensureStarted() and defaulted to the
|
|
834
|
+
// memory store) would strand the earlier records, so it is refused —
|
|
835
|
+
// loudly, because silently ignoring it loses the configured durability.
|
|
836
|
+
console.warn('[lib.job] start: a job store is already installed — the `store` option was ignored. Wire `jobs.store` before the first create().');
|
|
724
837
|
}
|
|
725
838
|
ensureSweepTimer();
|
|
726
839
|
return true;
|
|
@@ -728,13 +841,14 @@ function start(opts) {
|
|
|
728
841
|
|
|
729
842
|
/**
|
|
730
843
|
* Snapshot of worker state. Useful for tests (asserting the concurrency cap)
|
|
731
|
-
* and a future admin view.
|
|
844
|
+
* and a future admin view. `retryWaiting` counts failed attempts currently
|
|
845
|
+
* awaiting their backoff timer.
|
|
732
846
|
*
|
|
733
847
|
* @memberof module:gina/lib/job
|
|
734
|
-
* @returns {{running:number, queued:number, maxConcurrency:number}}
|
|
848
|
+
* @returns {{running:number, queued:number, maxConcurrency:number, retryWaiting:number}}
|
|
735
849
|
*/
|
|
736
850
|
function stats() {
|
|
737
|
-
return { running: _running, queued: _queue.length, maxConcurrency: _maxConcurrency };
|
|
851
|
+
return { running: _running, queued: _queue.length, maxConcurrency: _maxConcurrency, retryWaiting: _retryTimers.size };
|
|
738
852
|
}
|
|
739
853
|
|
|
740
854
|
/**
|
|
@@ -772,6 +886,8 @@ function reset() {
|
|
|
772
886
|
clearInterval(_sweepTimer);
|
|
773
887
|
_sweepTimer = null;
|
|
774
888
|
}
|
|
889
|
+
_retryTimers.forEach(function(t) { clearTimeout(t); });
|
|
890
|
+
_retryTimers.clear();
|
|
775
891
|
_store = null;
|
|
776
892
|
_queue = [];
|
|
777
893
|
_running = 0;
|
|
@@ -783,6 +899,7 @@ function reset() {
|
|
|
783
899
|
_webhookBackoffMs = DEFAULT_WEBHOOK_BACKOFF_MS;
|
|
784
900
|
_webhookTimeoutMs = DEFAULT_WEBHOOK_TIMEOUT_MS;
|
|
785
901
|
_webhookSecret = null;
|
|
902
|
+
_retryBackoffMs = DEFAULT_RETRY_BACKOFF_MS;
|
|
786
903
|
}
|
|
787
904
|
|
|
788
905
|
module.exports = {
|
|
@@ -800,6 +917,7 @@ module.exports = {
|
|
|
800
917
|
DEFAULT_TTL: DEFAULT_TTL,
|
|
801
918
|
DEFAULT_SWEEP_INTERVAL: DEFAULT_SWEEP_INTERVAL,
|
|
802
919
|
DEFAULT_ID_SIZE: DEFAULT_ID_SIZE,
|
|
920
|
+
DEFAULT_RETRY_BACKOFF_MS: DEFAULT_RETRY_BACKOFF_MS,
|
|
803
921
|
DEFAULT_WEBHOOK_MAX_ATTEMPTS: DEFAULT_WEBHOOK_MAX_ATTEMPTS,
|
|
804
922
|
DEFAULT_WEBHOOK_BACKOFF_MS: DEFAULT_WEBHOOK_BACKOFF_MS,
|
|
805
923
|
DEFAULT_WEBHOOK_TIMEOUT_MS: DEFAULT_WEBHOOK_TIMEOUT_MS
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
var fs = require('fs');
|
|
9
|
+
|
|
10
|
+
var helpers = require('./../helpers');
|
|
11
|
+
var console = require('./logger');
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @module lib/job-store
|
|
15
|
+
* @description Thin factory that loads the connector-specific job-store
|
|
16
|
+
* implementation from `<connectorsPath>/<connector>/lib/job-store.js` and
|
|
17
|
+
* returns a ready `JobStore` instance for `lib/job`'s `start({ store })` —
|
|
18
|
+
* the `lib/session-store` sibling for the async-job primitive (#AI6).
|
|
19
|
+
*
|
|
20
|
+
* Do not call this directly — declare the backend in `config/connectors.json`,
|
|
21
|
+
* point `app.json`'s `jobs.store` at that entry name, and let `gna.js` wire it
|
|
22
|
+
* at boot (before the first `create()`, since store adoption is once-only).
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Resolve `connName` against the bundle's `connectors.json` and build the
|
|
27
|
+
* connector-specific job store.
|
|
28
|
+
*
|
|
29
|
+
* @class JobStore
|
|
30
|
+
* @constructor
|
|
31
|
+
*
|
|
32
|
+
* @param {string} connName - `connectors.json` entry name (referenced by `app.json`'s
|
|
33
|
+
* `jobs.store`). The entry's `.connector` field selects the
|
|
34
|
+
* implementation (`sqlite` ships first; a connector without a
|
|
35
|
+
* `lib/job-store.js` is rejected).
|
|
36
|
+
* @returns {object} - A `JobStore` instance (`set/get/remove/list/sweep`).
|
|
37
|
+
* @throws {Error} - When the entry is missing, has no `connector` field, or the
|
|
38
|
+
* connector has no job-store implementation. `gna.js` treats a
|
|
39
|
+
* throw as fatal — an explicitly configured store must build,
|
|
40
|
+
* never degrade silently to the memory store.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* // app.json: { "jobs": { "store": "jobsDb" } }
|
|
44
|
+
* // connectors.json: { "jobsDb": { "connector": "sqlite", "file": "/data/jobs.db" } }
|
|
45
|
+
* var store = new JobStore('jobsDb'); // done by gna.js at boot
|
|
46
|
+
*/
|
|
47
|
+
function JobStore(connName) {
|
|
48
|
+
|
|
49
|
+
if (typeof connName !== 'string' || connName.length === 0) {
|
|
50
|
+
throw new Error('[JobStore] a connectors.json entry name is required (got: ' + JSON.stringify(connName) + ')');
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
var ctx = getContext()
|
|
54
|
+
, bundle = ctx.bundle
|
|
55
|
+
, env = ctx.env
|
|
56
|
+
, conf = getConfig()[bundle][env]
|
|
57
|
+
// Same resolution as lib/session-store (#B10 fix): conf.connectorsPath is
|
|
58
|
+
// never populated by config.js — use GINA_FRAMEWORK_DIR directly.
|
|
59
|
+
, connectorsPath = GINA_FRAMEWORK_DIR + '/core/connectors'
|
|
60
|
+
, connConf = null
|
|
61
|
+
, connector = null
|
|
62
|
+
;
|
|
63
|
+
try {
|
|
64
|
+
connConf = conf.content.connectors[connName];
|
|
65
|
+
connector = connConf.connector;
|
|
66
|
+
} catch (err) {
|
|
67
|
+
throw new Error('[JobStore] could not resolve `' + connName + '`: check your bundle configuration @config/connectors.json\n' + err.stack);
|
|
68
|
+
}
|
|
69
|
+
if (!connector) {
|
|
70
|
+
throw new Error('[JobStore] connectors.json entry `' + connName + '` has no `connector` field');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
var filename = _(connectorsPath + '/' + connector + '/lib/job-store.js', true);
|
|
74
|
+
|
|
75
|
+
if ( !fs.existsSync(filename) ) {
|
|
76
|
+
throw new Error('[JobStore] connector `' + connector + '` has no job-store implementation (`' + filename + '` is missing)');
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
var store = require(filename)(connConf, bundle);
|
|
80
|
+
console.debug('[job-store] loaded connector=' + connector + ' bundle=' + bundle + ' (entry: ' + connName + ')');
|
|
81
|
+
return store;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
module.exports = JobStore;
|
package/gna.js
CHANGED
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
'use strict';
|
|
16
16
|
|
|
17
17
|
// Framework core — the main gna module (lifecycle hooks, lib, etc.)
|
|
18
|
-
var _gna = require('./framework/v0.5.
|
|
18
|
+
var _gna = require('./framework/v0.5.7/core/gna');
|
|
19
19
|
|
|
20
20
|
// SuperController and EntitySuper — loaded from their source modules
|
|
21
|
-
var SuperController = require('./framework/v0.5.
|
|
22
|
-
var EntitySuper = require('./framework/v0.5.
|
|
21
|
+
var SuperController = require('./framework/v0.5.7/core/controller');
|
|
22
|
+
var EntitySuper = require('./framework/v0.5.7/core/model/entity');
|
|
23
23
|
|
|
24
24
|
// uuid — from the lib registry
|
|
25
|
-
var uuid = require('./framework/v0.5.
|
|
25
|
+
var uuid = require('./framework/v0.5.7/lib/uuid');
|
|
26
26
|
|
|
27
27
|
module.exports = {
|
|
28
28
|
|