gina 0.3.13-alpha.2 → 0.3.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.playwright-mcp/console-2026-05-14T02-27-11-347Z.log +64 -0
- package/.playwright-mcp/d9-after-connector.png +0 -0
- package/.playwright-mcp/d9-after-service.png +0 -0
- package/.playwright-mcp/d9-before-connector-full.png +0 -0
- package/.playwright-mcp/d9-before-connector-leak.png +0 -0
- package/.playwright-mcp/d9-before-connector-top.png +0 -0
- package/.playwright-mcp/d9-before-connector-v2.png +0 -0
- package/.playwright-mcp/d9-before-connector.png +0 -0
- package/.playwright-mcp/page-2026-05-14T02-24-51-996Z.yml +1818 -0
- package/.playwright-mcp/page-2026-05-14T02-26-47-905Z.yml +2063 -0
- package/.playwright-mcp/page-2026-05-14T02-27-11-472Z.yml +406 -0
- package/.playwright-mcp/page-2026-05-14T02-28-37-939Z.yml +2061 -0
- package/.playwright-mcp/page-2026-05-14T02-29-01-333Z.yml +404 -0
- package/CHANGELOG.md +29 -0
- package/README.md +11 -1
- package/ROADMAP.md +16 -6
- package/framework/v0.3.13/VERSION +1 -0
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/js/gina.js +21 -6
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +47 -46
- package/framework/v0.3.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.3.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/config.js +13 -0
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/csrf/src/main.js +32 -9
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/validator/src/form-validator.js +11 -1
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/validator/src/main.js +4 -2
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/server.isaac.js +56 -11
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/config/settings.server.json +3 -1
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/index.js +14 -4
- package/framework/v0.3.13/core/template/boilerplate/bundle_public/manifest.webmanifest +17 -0
- package/framework/v0.3.13/core/template/boilerplate/bundle_public/readme.md +20 -0
- package/framework/v0.3.13/core/template/boilerplate/bundle_public/sw.js +122 -0
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_templates/html/layouts/main.html +14 -0
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/conf/settings.json +11 -4
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/json/src/main.js +38 -22
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/mcp-start.js +18 -2
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/index.js +5 -0
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/containers/file/index.js +1 -4
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/containers/mq/index.js +1 -4
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/main.js +1 -4
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/merge/src/main.js +2 -1
- package/framework/v0.3.13/lib/secrets/package.json +17 -0
- package/framework/v0.3.13/lib/secrets/src/backends/env.js +60 -0
- package/framework/v0.3.13/lib/secrets/src/main.js +200 -0
- package/framework/{v0.3.13-alpha.2 → v0.3.13}/package.json +2 -2
- package/gna.js +4 -4
- package/llms.txt +17 -1
- package/package.json +3 -3
- package/framework/v0.3.13-alpha.2/VERSION +0 -1
- package/framework/v0.3.13-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.3.13-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.3.13-alpha.2/core/plugins/lib/file/package.json +0 -25
- package/framework/v0.3.13-alpha.2/core/plugins/lib/intl/package.json +0 -25
- package/framework/v0.3.13-alpha.2/core/plugins/lib/intl/src/main.js +0 -35
- package/framework/v0.3.13-alpha.2/core/template/boilerplate/bundle_public/readme.md +0 -1
- package/framework/v0.3.13-alpha.2/lib/collection/build.json +0 -0
- package/framework/v0.3.13-alpha.2/lib/routing/build.json +0 -0
- package/framework/v0.3.13-alpha.2/lib/swig-filters/README.md +0 -0
- package/framework/v0.3.13-alpha.2/lib/url/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/AUTHORS +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/LICENSE +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/html/static.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/connector.v2.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/content.encoding +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/controller/controller.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/controller/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/dev/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/gna.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/locales/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/locales/currency.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/locales/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/mime.types +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/model/entity.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/model/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/model/template/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2/core/plugins/lib/file → v0.3.13/core/plugins/lib/storage}/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2/core/plugins/lib/file → v0.3.13/core/plugins/lib/storage}/build.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2/core/plugins/lib/intl → v0.3.13/core/plugins/lib/validator}/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2/core/plugins/lib/intl → v0.3.13/core/plugins/lib/validator}/build.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/router.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/server.express.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/server.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/status.codes +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/_gitignore +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/conf/env.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/conf/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/console.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/context.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/data/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/data/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/json/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/json/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/path.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/prototypes.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/task.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/helpers/text.js +0 -0
- /package/framework/{v0.3.13-alpha.2/core/plugins/lib/storage → v0.3.13/lib/archiver}/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2/core/plugins/lib/storage → v0.3.13/lib/archiver}/build.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/archiver/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/async/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/async/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cache/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2/core/plugins/lib/validator → v0.3.13/lib/cache}/build.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cache/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/collection/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2/lib/archiver → v0.3.13/lib/collection}/build.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/collection/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/config.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cron/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cron/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/domain/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/domain/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/generator/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/i18n/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/inherits/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/inherits/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/math/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/merge/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/merge/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/metrics/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/model.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/proc.js +0 -0
- /package/framework/{v0.3.13-alpha.2/core/plugins/lib/validator → v0.3.13/lib/routing}/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2/lib/cache → v0.3.13/lib/routing}/build.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/routing/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/session-store.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/shell.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/state.js +0 -0
- /package/framework/{v0.3.13-alpha.2/lib/archiver → v0.3.13/lib/swig-filters}/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2/lib/routing → v0.3.13/lib/url}/README.md +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/url/index.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/url/routing.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/uuid/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/validator.js +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/watcher/package.json +0 -0
- /package/framework/{v0.3.13-alpha.2 → v0.3.13}/lib/watcher/src/main.js +0 -0
|
@@ -64,15 +64,28 @@ var refreshCore = function() {
|
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
// Update lib & helpers
|
|
68
|
-
|
|
69
|
-
require.cache[
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
//
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
// Update lib & helpers.
|
|
68
|
+
//
|
|
69
|
+
// `require.cache[<path>] = require(<path>)` would overwrite the cache entry
|
|
70
|
+
// — which Node expects to be a `Module` instance with an `.exports` property
|
|
71
|
+
// — with the lib registry's *exports object* directly. Subsequent plain
|
|
72
|
+
// `require('../../lib')` calls then read `require.cache[<path>].exports` and
|
|
73
|
+
// get `undefined` (the registry object has no `.exports` key), surfacing as
|
|
74
|
+
// `Cannot read properties of undefined (reading 'Collection')` / `(reading
|
|
75
|
+
// 'Cache')` etc. in the controller render delegates after a dev-mode hot
|
|
76
|
+
// reload. Fix: delete the entry and let the next require() rebuild a proper
|
|
77
|
+
// Module, then point gna.js's captured `.lib` at the fresh exports — the
|
|
78
|
+
// same `.exports`-preserving shape the loop above already uses.
|
|
79
|
+
var libIndexPath = _(libPath +'/index.js', true);
|
|
80
|
+
delete require.cache[require.resolve(libIndexPath)];
|
|
81
|
+
var freshLib = require( libIndexPath );
|
|
82
|
+
require.cache[_(corePath + '/gna.js', true)].exports.lib = freshLib;
|
|
83
|
+
|
|
84
|
+
// Update plugins — same fix as above.
|
|
85
|
+
var pluginsIndexPath = _(corePath +'/plugins/index.js', true);
|
|
86
|
+
delete require.cache[require.resolve(pluginsIndexPath)];
|
|
87
|
+
var freshPlugins = require( pluginsIndexPath );
|
|
88
|
+
require.cache[_(corePath + '/gna.js', true)].exports.plugins = freshPlugins;
|
|
76
89
|
}
|
|
77
90
|
|
|
78
91
|
// Express compatibility
|
|
@@ -325,6 +338,12 @@ function ServerEngineClass(options) {
|
|
|
325
338
|
// #H3 — CONTINUATION flood defense (CVE-2024-27316, CVE-2024-27983)
|
|
326
339
|
// #H7 — configurable via settings.json http2Options.maxSessionInvalidFrames (default 1000)
|
|
327
340
|
http2Options.maxSessionInvalidFrames = _h2Opts.maxSessionInvalidFrames || 1000;
|
|
341
|
+
// #H9 — rapid-reset rate limit: max new streams accepted per session per
|
|
342
|
+
// rolling 1s window before the session is GOAWAY'd + closed. Defends against
|
|
343
|
+
// CVE-2023-44487-style rapid-reset floods (open then immediately RST streams
|
|
344
|
+
// faster than maxConcurrentStreams alone can throttle). Configurable via
|
|
345
|
+
// settings.json http2Options.maxStreamsPerSecond (default 200).
|
|
346
|
+
var _maxStreamsPerSec = _h2Opts.maxStreamsPerSecond || 200;
|
|
328
347
|
var http2 = require('http2');
|
|
329
348
|
switch (options.scheme) {
|
|
330
349
|
case 'http':
|
|
@@ -345,7 +364,8 @@ function ServerEngineClass(options) {
|
|
|
345
364
|
activeSessions : 0,
|
|
346
365
|
totalStreams : 0,
|
|
347
366
|
goawayCount : 0,
|
|
348
|
-
rstCount : 0
|
|
367
|
+
rstCount : 0,
|
|
368
|
+
rapidResetBlocked : 0
|
|
349
369
|
};
|
|
350
370
|
server._h2Metrics = _h2Metrics;
|
|
351
371
|
|
|
@@ -369,6 +389,30 @@ function ServerEngineClass(options) {
|
|
|
369
389
|
|
|
370
390
|
session.on('stream', (stream) => {
|
|
371
391
|
_h2Metrics.totalStreams++;
|
|
392
|
+
|
|
393
|
+
// #H9 — rapid-reset rate limit. Count new streams in a rolling 1s
|
|
394
|
+
// window per session; on breach send GOAWAY(ENHANCE_YOUR_CALM) and
|
|
395
|
+
// close the session so a flood cannot exhaust the worker.
|
|
396
|
+
var _now = Date.now();
|
|
397
|
+
if (typeof session._streamWindowStart === 'undefined' || (_now - session._streamWindowStart) >= 1000) {
|
|
398
|
+
session._streamWindowStart = _now;
|
|
399
|
+
session._streamWindowCount = 0;
|
|
400
|
+
}
|
|
401
|
+
session._streamWindowCount++;
|
|
402
|
+
if (session._streamWindowCount > _maxStreamsPerSec) {
|
|
403
|
+
_h2Metrics.rapidResetBlocked++;
|
|
404
|
+
console.warn('[ SERVER ] HTTP/2 rapid-reset rate limit exceeded — ' + session._streamWindowCount + ' streams in <1s (limit ' + _maxStreamsPerSec + '); sending GOAWAY + closing session');
|
|
405
|
+
session.goaway(http2.constants.NGHTTP2_ENHANCE_YOUR_CALM);
|
|
406
|
+
session.close();
|
|
407
|
+
// Deliberately return before registering the per-stream
|
|
408
|
+
// `rstCode` listener below: the session is being torn down,
|
|
409
|
+
// so the breaching stream needs no per-stream accounting.
|
|
410
|
+
// Breached streams are counted by `rapidResetBlocked`, not
|
|
411
|
+
// `rstCount` — the two metrics stay cleanly separated
|
|
412
|
+
// (proactive block vs. observed client RST_STREAM).
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
|
|
372
416
|
stream.on('rstCode', (code) => {
|
|
373
417
|
if (code !== 0) _h2Metrics.rstCount++;
|
|
374
418
|
});
|
|
@@ -630,7 +674,8 @@ function ServerEngineClass(options) {
|
|
|
630
674
|
activeSessions : server._h2Metrics.activeSessions,
|
|
631
675
|
totalStreams : server._h2Metrics.totalStreams,
|
|
632
676
|
goawayCount : server._h2Metrics.goawayCount,
|
|
633
|
-
rstCount : server._h2Metrics.rstCount
|
|
677
|
+
rstCount : server._h2Metrics.rstCount,
|
|
678
|
+
rapidResetBlocked : server._h2Metrics.rapidResetBlocked
|
|
634
679
|
};
|
|
635
680
|
}
|
|
636
681
|
const infoStatus = JSON.stringify(infoPayload);
|
|
@@ -21,12 +21,14 @@
|
|
|
21
21
|
* initialWindowSize : flow-control window in bytes (default: 655350 = 10× Node default)
|
|
22
22
|
* maxSessionRejectedStreams : RST flood defense — CVE-2019-9514, CVE-2023-44487 (default: 100)
|
|
23
23
|
* maxSessionInvalidFrames : CONTINUATION flood defense — CVE-2024-27316, CVE-2024-27983 (default: 1000)
|
|
24
|
+
* maxStreamsPerSecond : rapid-reset rate limit — max new streams per session per rolling 1s window before GOAWAY + close — CVE-2023-44487 (default: 200)
|
|
24
25
|
*/
|
|
25
26
|
// "http2Options": {
|
|
26
27
|
// "maxConcurrentStreams": 256,
|
|
27
28
|
// "initialWindowSize": 655350,
|
|
28
29
|
// "maxSessionRejectedStreams": 100,
|
|
29
|
-
// "maxSessionInvalidFrames": 1000
|
|
30
|
+
// "maxSessionInvalidFrames": 1000,
|
|
31
|
+
// "maxStreamsPerSecond": 200
|
|
30
32
|
// },
|
|
31
33
|
|
|
32
34
|
/**
|
|
@@ -40,23 +40,33 @@ var ${bundle} = require('gina');
|
|
|
40
40
|
// // expressSession.name = 'myDb';
|
|
41
41
|
// //
|
|
42
42
|
// // var StoreClass = new SessionStore(expressSession); // returns connector-specific Store class
|
|
43
|
+
// //
|
|
44
|
+
// // Recommended: keep the session secret out of tracked source via the
|
|
45
|
+
// // ${secret:KEY} placeholder pattern. Put it in bundle/config/session.json:
|
|
46
|
+
// // { "secret": "${secret:SESSION_SECRET}" }
|
|
47
|
+
// // then read via self.getConfig('session').secret. lib/secrets fills
|
|
48
|
+
// // the placeholder from process.env.SESSION_SECRET at config-load time.
|
|
49
|
+
// // See https://gina.io/docs/guides/secrets for details.
|
|
50
|
+
// //
|
|
43
51
|
// // app.use(session({
|
|
44
|
-
// // secret :
|
|
52
|
+
// // secret : self.getConfig('session').secret, // ${secret:SESSION_SECRET}
|
|
45
53
|
// // resave : false,
|
|
46
54
|
// // saveUninitialized: false,
|
|
47
55
|
// // store : new StoreClass(),
|
|
48
56
|
// // cookie : { maxAge: 86400000 }
|
|
49
57
|
// // }));
|
|
50
58
|
// //
|
|
51
|
-
// // #CSRF2 — signed double-submit token middleware. Reads
|
|
52
|
-
// //
|
|
59
|
+
// // #CSRF2 — signed double-submit token middleware. Reads its HMAC secret
|
|
60
|
+
// // from settings.json > csrf.secret (recommended; supports ${secret:KEY}
|
|
61
|
+
// // placeholders), or falls back to process.env.GINA_CSRF_SECRET
|
|
62
|
+
// // (back-compat). Generate the secret once with `openssl rand -base64 64`.
|
|
53
63
|
// // MUST be registered AFTER the session middleware. Per-route opt-out
|
|
54
64
|
// // for webhook receivers via `routing.json > "csrfExempt": true`.
|
|
55
65
|
// // var csrf = ${bundle}.plugins.Csrf();
|
|
56
66
|
// // app.use(csrf);
|
|
57
67
|
//
|
|
58
68
|
// // you can also use express middleware components directly (no #CSRF1 hardening)
|
|
59
|
-
// // eg.: app.use( expressSession({secret:
|
|
69
|
+
// // eg.: app.use( expressSession({secret: process.env.SESSION_SECRET}) );
|
|
60
70
|
//
|
|
61
71
|
// //then notify the server that startup sequence can be resumed
|
|
62
72
|
// event.emit('complete', app);// this is important !
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Gina Bundle",
|
|
3
|
+
"short_name": "Gina",
|
|
4
|
+
"description": "A Gina bundle — edit this manifest to describe your app.",
|
|
5
|
+
"start_url": "/",
|
|
6
|
+
"scope": "/",
|
|
7
|
+
"display": "standalone",
|
|
8
|
+
"theme_color": "#2b2b2b",
|
|
9
|
+
"background_color": "#ffffff",
|
|
10
|
+
"icons": [
|
|
11
|
+
{
|
|
12
|
+
"src": "/favicon.ico",
|
|
13
|
+
"sizes": "any",
|
|
14
|
+
"type": "image/x-icon"
|
|
15
|
+
}
|
|
16
|
+
]
|
|
17
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
`public` is the public directory.
|
|
2
|
+
|
|
3
|
+
## Progressive Web App (PWA)
|
|
4
|
+
|
|
5
|
+
This bundle is scaffolded with a starter PWA setup:
|
|
6
|
+
|
|
7
|
+
- `manifest.webmanifest` — the web app manifest (name, theme colour, icons, ...). Edit it to describe your app.
|
|
8
|
+
- `sw.js` — a service worker with a basic cache-first strategy. Edit `CACHE_NAME` and the precache list for your app.
|
|
9
|
+
|
|
10
|
+
The default layout (`templates/html/layouts/main.html`) already links the manifest and registers the service worker.
|
|
11
|
+
|
|
12
|
+
### Icons
|
|
13
|
+
|
|
14
|
+
No icon binaries ship with the scaffold — drop your own PNGs into this directory:
|
|
15
|
+
|
|
16
|
+
- `icon-192.png` — 192x192
|
|
17
|
+
- `icon-512.png` — 512x512
|
|
18
|
+
- `apple-touch-icon.png` — 180x180, used by `main.html` for the iOS home-screen icon
|
|
19
|
+
|
|
20
|
+
`favicon.ico` is the baseline icon already wired into `manifest.webmanifest`. Once you add the PNGs above, extend the `icons` array in `manifest.webmanifest` to point at them.
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Service worker for a Gina bundle — basic cache-first strategy.
|
|
3
|
+
*
|
|
4
|
+
* Starting point only: it pre-caches a small app shell on install and serves
|
|
5
|
+
* cached responses first, falling back to the network. Edit CACHE_NAME and
|
|
6
|
+
* PRECACHE_URLS for your app, and extend the fetch strategy as needed
|
|
7
|
+
* (network-first for APIs, stale-while-revalidate for assets, ...).
|
|
8
|
+
*
|
|
9
|
+
* Registered by the default layout (templates/html/layouts/main.html). Served
|
|
10
|
+
* at /sw.js: a service worker's scope is the directory it is served from, so
|
|
11
|
+
* keeping it at the public root gives it whole-origin scope.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
'use strict';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Cache bucket name. Bump the version suffix whenever the precache list or any
|
|
18
|
+
* cached asset changes — the activate handler purges every other bucket.
|
|
19
|
+
*
|
|
20
|
+
* @constant {string}
|
|
21
|
+
*/
|
|
22
|
+
var CACHE_NAME = 'gina-bundle-cache-v1';
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* App-shell URLs pre-cached at install time. Keep this list short — just the
|
|
26
|
+
* entry points needed to render the first screen offline.
|
|
27
|
+
*
|
|
28
|
+
* @constant {string[]}
|
|
29
|
+
*/
|
|
30
|
+
var PRECACHE_URLS = [
|
|
31
|
+
'/',
|
|
32
|
+
'/manifest.webmanifest'
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Install handler — opens the cache bucket, pre-caches the app shell, then
|
|
37
|
+
* activates this worker immediately instead of waiting for open clients to
|
|
38
|
+
* close.
|
|
39
|
+
*
|
|
40
|
+
* @param {ExtendableEvent} event - The service worker `install` event.
|
|
41
|
+
* @returns {void}
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* // Fired automatically by the browser after registration.
|
|
45
|
+
*/
|
|
46
|
+
self.addEventListener('install', function (event) {
|
|
47
|
+
event.waitUntil(
|
|
48
|
+
caches.open(CACHE_NAME).then(function (cache) {
|
|
49
|
+
return cache.addAll(PRECACHE_URLS);
|
|
50
|
+
})
|
|
51
|
+
);
|
|
52
|
+
self.skipWaiting();
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Activate handler — purges cache buckets left over from previous versions,
|
|
57
|
+
* then takes control of open clients without waiting for a reload.
|
|
58
|
+
*
|
|
59
|
+
* @param {ExtendableEvent} event - The service worker `activate` event.
|
|
60
|
+
* @returns {void}
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* // Fired automatically by the browser once the new worker takes over.
|
|
64
|
+
*/
|
|
65
|
+
self.addEventListener('activate', function (event) {
|
|
66
|
+
event.waitUntil(
|
|
67
|
+
caches.keys().then(function (keys) {
|
|
68
|
+
return Promise.all(keys.map(function (key) {
|
|
69
|
+
return (key === CACHE_NAME) ? null : caches.delete(key);
|
|
70
|
+
}));
|
|
71
|
+
})
|
|
72
|
+
);
|
|
73
|
+
self.clients.claim();
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Fetch handler — cache-first. Returns the cached response when one exists,
|
|
78
|
+
* otherwise fetches from the network and caches a copy of successful
|
|
79
|
+
* same-origin GET responses for next time. When the network is unreachable
|
|
80
|
+
* and nothing is cached, navigations fall back to the precached app shell.
|
|
81
|
+
*
|
|
82
|
+
* @param {FetchEvent} event - The service worker `fetch` event.
|
|
83
|
+
* @returns {void}
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* // Fired automatically by the browser for every same-scope request.
|
|
87
|
+
*/
|
|
88
|
+
self.addEventListener('fetch', function (event) {
|
|
89
|
+
// Only GET requests are cacheable — let the browser handle the rest.
|
|
90
|
+
if (event.request.method !== 'GET') {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
event.respondWith(
|
|
95
|
+
caches.match(event.request).then(function (cached) {
|
|
96
|
+
if (cached) {
|
|
97
|
+
return cached;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return fetch(event.request).then(function (response) {
|
|
101
|
+
// Only cache valid, basic (same-origin) responses.
|
|
102
|
+
if (!response || response.status !== 200 || response.type !== 'basic') {
|
|
103
|
+
return response;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
var copy = response.clone();
|
|
107
|
+
caches.open(CACHE_NAME).then(function (cache) {
|
|
108
|
+
cache.put(event.request, copy);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
return response;
|
|
112
|
+
}).catch(function () {
|
|
113
|
+
// Offline with no cached copy — fall back to the precached app
|
|
114
|
+
// shell for navigations so the page still renders; other
|
|
115
|
+
// requests surface the network error as they normally would.
|
|
116
|
+
if (event.request.mode === 'navigate') {
|
|
117
|
+
return caches.match('/');
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
})
|
|
121
|
+
);
|
|
122
|
+
});
|
|
@@ -9,6 +9,20 @@
|
|
|
9
9
|
<meta name="robots" content="index, follow, noarchive">
|
|
10
10
|
<meta name="distribution" content="global">
|
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
12
|
+
<link rel="manifest" href="/manifest.webmanifest">
|
|
13
|
+
<meta name="theme-color" content="#2b2b2b">
|
|
14
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
|
15
|
+
<script>
|
|
16
|
+
// Progressive Web App — register the service worker (see public/sw.js).
|
|
17
|
+
// Edit or remove this block to change PWA behaviour.
|
|
18
|
+
if ('serviceWorker' in navigator) {
|
|
19
|
+
window.addEventListener('load', function () {
|
|
20
|
+
navigator.serviceWorker.register('/sw.js').catch(function (err) {
|
|
21
|
+
console.warn('Service worker registration failed:', err);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
</script>
|
|
12
26
|
</head>
|
|
13
27
|
<body>
|
|
14
28
|
<div class="outer-wrap">
|
|
@@ -31,11 +31,13 @@
|
|
|
31
31
|
// initialWindowSize : flow-control window in bytes (Node default: 65535, Gina default: 655350 = 10×).
|
|
32
32
|
// maxSessionRejectedStreams : RST flood defense — CVE-2019-9514, CVE-2023-44487 (default: 100).
|
|
33
33
|
// maxSessionInvalidFrames : CONTINUATION flood defense — CVE-2024-27316, CVE-2024-27983 (default: 1000).
|
|
34
|
+
// maxStreamsPerSecond : rapid-reset rate limit — max new streams per session per rolling 1s window before GOAWAY + close — CVE-2023-44487 (default: 200).
|
|
34
35
|
"http2Options": {
|
|
35
36
|
"maxConcurrentStreams": 256,
|
|
36
37
|
"initialWindowSize": 655350,
|
|
37
38
|
"maxSessionRejectedStreams": 100,
|
|
38
|
-
"maxSessionInvalidFrames": 1000
|
|
39
|
+
"maxSessionInvalidFrames": 1000,
|
|
40
|
+
"maxStreamsPerSecond": 200
|
|
39
41
|
},
|
|
40
42
|
// Compare with core/content.encoding
|
|
41
43
|
// This is the prefered order when it comes to respond with compressed content
|
|
@@ -83,9 +85,14 @@
|
|
|
83
85
|
}
|
|
84
86
|
},
|
|
85
87
|
// #CSRF2 / #CSRF3 — signed double-submit token middleware + Origin/Referer
|
|
86
|
-
// pre-filter applied by gina.plugins.Csrf().
|
|
87
|
-
// `
|
|
88
|
-
//
|
|
88
|
+
// pre-filter applied by gina.plugins.Csrf(). Generate the HMAC secret with
|
|
89
|
+
// `openssl rand -base64 64`.
|
|
90
|
+
//
|
|
91
|
+
// secret — HMAC signing key. Supports ${secret:KEY} placeholders
|
|
92
|
+
// (lib/secrets fills them from process.env at config-load
|
|
93
|
+
// time). Falls back to process.env.GINA_CSRF_SECRET when
|
|
94
|
+
// this field is empty or absent (back-compat). Example:
|
|
95
|
+
// "secret": "${secret:MY_CSRF_KEY}".
|
|
89
96
|
// cookieName — cookie name issued on safe methods
|
|
90
97
|
// headerName — request header read on mutating methods
|
|
91
98
|
// fieldName — form field read on mutating methods
|
|
@@ -21,21 +21,35 @@ module.exports = function(){
|
|
|
21
21
|
// `JSON.clone()` is a prototype defined in `GINA_DIR//lib/prototypes.json_clone`
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* Load a
|
|
24
|
+
* Load a JSON file, stripping JS-style block (`/* ... *\/`) and line (`// ...`)
|
|
25
|
+
* comments before parsing. Trailing commas before `}`/`]` are tolerated with
|
|
26
|
+
* a warning. Line-comment stripping is per-line on the leftmost `//`: when
|
|
27
|
+
* that `//` is preceded by `:` (URL protocol), `"` (inside a string value),
|
|
28
|
+
* or `\` (escape), the entire line is treated as data and left alone — so
|
|
29
|
+
* values like `"http://host//:rest"` round-trip unchanged.
|
|
25
30
|
*
|
|
26
|
-
*
|
|
31
|
+
* On a real syntax error the helper logs via `console.emerg` and exits with
|
|
32
|
+
* code 1; on unexpected I/O failure it rethrows.
|
|
27
33
|
*
|
|
28
|
-
* @
|
|
34
|
+
* @param {string} filename - absolute or relative path to the JSON-with-comments file
|
|
35
|
+
*
|
|
36
|
+
* @return {object} parsed JSON object
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* // file: app.json
|
|
40
|
+
* // {
|
|
41
|
+
* // "url": "https://example.com/foo",
|
|
42
|
+
* // // a bare line-comment separator
|
|
43
|
+
* // "value": 1
|
|
44
|
+
* // }
|
|
45
|
+
* var config = requireJSON(__dirname + '/app.json');
|
|
46
|
+
* // → { url: 'https://example.com/foo', value: 1 }
|
|
29
47
|
* */
|
|
30
48
|
requireJSON = function(filename){
|
|
31
49
|
|
|
32
50
|
//console.debug('[ Helpers ][ requireJSON ] ', filename);
|
|
33
51
|
|
|
34
|
-
var
|
|
35
|
-
, len = null
|
|
36
|
-
, commentsWithSlashes = null
|
|
37
|
-
, jsonStr = null
|
|
38
|
-
;
|
|
52
|
+
var jsonStr = null;
|
|
39
53
|
|
|
40
54
|
try {
|
|
41
55
|
if (
|
|
@@ -60,22 +74,24 @@ module.exports = function(){
|
|
|
60
74
|
jsonStr = jsonStr.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)/g, '');
|
|
61
75
|
}
|
|
62
76
|
|
|
63
|
-
// line style comments
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
77
|
+
// line style comments — per-line, leftmost `//` only. When the leftmost
|
|
78
|
+
// `//` on a line is preceded by `:` (URL protocol), `"` (inside a string
|
|
79
|
+
// value), or `\` (escape), the entire line is treated as data and left
|
|
80
|
+
// alone — mirrors the original greedy-from-first-match heuristic so
|
|
81
|
+
// values like "http://host//:rest" round-trip unchanged.
|
|
82
|
+
jsonStr = jsonStr.split('\n').map(function(line) {
|
|
83
|
+
var idx = line.indexOf('//');
|
|
84
|
+
if (idx === -1) {
|
|
85
|
+
return line;
|
|
86
|
+
}
|
|
87
|
+
if (idx > 0) {
|
|
88
|
+
var prev = line.charAt(idx - 1);
|
|
89
|
+
if (prev === ':' || prev === '"' || prev === '\\') {
|
|
90
|
+
return line;
|
|
74
91
|
}
|
|
75
|
-
|
|
76
|
-
jsonStr = jsonStr.replace(commentsWithSlashes[i], '');
|
|
77
92
|
}
|
|
78
|
-
|
|
93
|
+
return line.substring(0, idx);
|
|
94
|
+
}).join('\n');
|
|
79
95
|
|
|
80
96
|
try {
|
|
81
97
|
return JSON.parse(jsonStr)
|
|
@@ -4,6 +4,7 @@ var console = lib.logger;
|
|
|
4
4
|
var mcpServer = lib.mcpServer;
|
|
5
5
|
var mcpDispatch = lib.mcpDispatch;
|
|
6
6
|
var mcpHttp = lib.mcpHttp;
|
|
7
|
+
var secrets = lib.secrets;
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* @module gina/lib/cmd/bundle/mcp-start
|
|
@@ -136,6 +137,19 @@ function MCPStart(opt, cmd) {
|
|
|
136
137
|
return end( new Error(mcpPath +' is not a valid MCP manifest (missing `tools` array)') );
|
|
137
138
|
}
|
|
138
139
|
|
|
140
|
+
// ${secret:KEY} placeholder substitution. The cmd handler loads mcp.json
|
|
141
|
+
// directly (it is not part of the bundle-config tree walked by
|
|
142
|
+
// core/config.js::loadBundleConfig), so the resolver hook on bundle
|
|
143
|
+
// start does NOT see this document. Run resolve() here so that
|
|
144
|
+
// `server.authToken` (and any other future placeholder field in
|
|
145
|
+
// mcp.json) gets filled from process.env before downstream readers
|
|
146
|
+
// pick it up.
|
|
147
|
+
try {
|
|
148
|
+
secrets.resolve(mcpDoc);
|
|
149
|
+
} catch (secretErr) {
|
|
150
|
+
return end( new Error('Failed to resolve secrets in '+ mcpPath +': '+ secretErr.message) );
|
|
151
|
+
}
|
|
152
|
+
|
|
139
153
|
var baseUrl = buildBaseUrl(bundle, mcpDoc);
|
|
140
154
|
|
|
141
155
|
// Loud, one-time notice about the tools that look session-scoped.
|
|
@@ -399,8 +413,10 @@ function MCPStart(opt, cmd) {
|
|
|
399
413
|
/**
|
|
400
414
|
* Resolves the static bearer token. Precedence:
|
|
401
415
|
* 1. `--auth-token=<token>` CLI flag
|
|
402
|
-
* 2. `mcp.json > server > authToken`
|
|
403
|
-
*
|
|
416
|
+
* 2. `mcp.json > server > authToken` — supports `${secret:KEY}` placeholders
|
|
417
|
+
* (resolved at handler entry by `lib/secrets` against `process.env`).
|
|
418
|
+
* 3. `process.env.GINA_MCP_AUTH_TOKEN` — direct fallback when neither the
|
|
419
|
+
* CLI flag nor the mcp.json field is set.
|
|
404
420
|
* 4. `null` (no auth; loopback bind is the security boundary)
|
|
405
421
|
*
|
|
406
422
|
* @private
|
|
@@ -128,6 +128,11 @@ function Lib() {
|
|
|
128
128
|
// instance with an HTTP endpoint (POST, JSON/SSE negotiation, batch,
|
|
129
129
|
// Mcp-Session-Id lifecycle). Auth / Origin checks land in Phase 2b S2.
|
|
130
130
|
mcpHttp : _require('./mcp-http'),
|
|
131
|
+
// ${secret:KEY} placeholder resolver for bundle JSON configs. Walks
|
|
132
|
+
// the merged config object in place at config-load time (per-bundle,
|
|
133
|
+
// inside loadBundleConfig). Default backend reads process.env[KEY];
|
|
134
|
+
// fail-closed on unset/empty values. See lib/secrets/src/main.js.
|
|
135
|
+
secrets : _require('./secrets'),
|
|
131
136
|
};
|
|
132
137
|
|
|
133
138
|
/**
|
|
@@ -10,11 +10,8 @@ const net = require('net');
|
|
|
10
10
|
|
|
11
11
|
var helpers = null;
|
|
12
12
|
|
|
13
|
+
// #M22 — merge-eval fallback removed (sister fix to lib/merge/src/main.js direct json_clone require)
|
|
13
14
|
var merge = require(__dirname + '/../../../../merge');
|
|
14
|
-
if ( typeof(merge) != 'function' ) {
|
|
15
|
-
// if needed for unit tests
|
|
16
|
-
merge = eval(fs.readFileSync(__dirname +'/../../../../merge/src/main.js').toString())
|
|
17
|
-
}
|
|
18
15
|
|
|
19
16
|
function FileContainer(opt, loggers) {
|
|
20
17
|
var self = {
|
|
@@ -4,11 +4,8 @@ const fs = require('fs');
|
|
|
4
4
|
const net = require('net');
|
|
5
5
|
const util = require('util');
|
|
6
6
|
const promisify = util.promisify;
|
|
7
|
+
// #M22 — merge-eval fallback removed (sister fix to lib/merge/src/main.js direct json_clone require)
|
|
7
8
|
var merge = require(__dirname +'/../../../../merge');
|
|
8
|
-
if ( typeof(merge) != 'function' ) {
|
|
9
|
-
// if needed for unit tests
|
|
10
|
-
merge = eval(fs.readFileSync(__dirname +'/../../../../merge/src/main.js').toString())
|
|
11
|
-
}
|
|
12
9
|
function MqContainer(opt, loggers) {
|
|
13
10
|
var self = {
|
|
14
11
|
// flow or container name/id
|
|
@@ -63,11 +63,8 @@ var merge = require('../../merge');
|
|
|
63
63
|
var inherits = require('../../inherits');
|
|
64
64
|
var helpers = require('../../../helpers');
|
|
65
65
|
|
|
66
|
+
// #M22 — merge-eval fallback removed; the circular chain that produced a partial merge was broken at the merge.js side (direct require of utils/prototypes.json_clone instead of helpers/index.js's for-loop loader, which transitively required lib/logger).
|
|
66
67
|
// BO - publishing hack
|
|
67
|
-
if ( typeof(merge) != 'function' ) {
|
|
68
|
-
// if needed for unit tests
|
|
69
|
-
merge = eval(fs.readFileSync(__dirname +'/../../merge/src/main.js').toString())
|
|
70
|
-
}
|
|
71
68
|
if ( typeof(JSON.clone) == 'undefined' ) {
|
|
72
69
|
require(__dirname +'/../../../helpers/prototypes')()
|
|
73
70
|
}
|
|
@@ -583,7 +583,8 @@ function Merge() {
|
|
|
583
583
|
if ( ( typeof(module) !== 'undefined' ) && module.exports ) {
|
|
584
584
|
// for unit tests
|
|
585
585
|
if ( typeof(JSON.clone) == 'undefined' ) {
|
|
586
|
-
require
|
|
586
|
+
// #M22 — direct require of the clone primitive instead of helpers/index.js's for-loop loader (which transitively requires lib/logger and returns a partial merge under circular load)
|
|
587
|
+
JSON.clone = require(__dirname + '/../../../../../utils/prototypes.json_clone');
|
|
587
588
|
}
|
|
588
589
|
// Publish as node.js module
|
|
589
590
|
module.exports = Merge()
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gina-lib-secrets",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Resolver for ${secret:KEY} placeholders in bundle JSON configs. Substituted at config-load time from a pluggable backend (default: process.env).",
|
|
5
|
+
"authors": [
|
|
6
|
+
{
|
|
7
|
+
"name": "Martin-Luther ETOUMAN",
|
|
8
|
+
"email": "contact@gina.io"
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
"copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=0.10.22"
|
|
14
|
+
},
|
|
15
|
+
"main": "src/main",
|
|
16
|
+
"license": "MIT"
|
|
17
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/*
|
|
3
|
+
* This file is part of the gina package.
|
|
4
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
5
|
+
*
|
|
6
|
+
* For the full copyright and license information, please view the LICENSE
|
|
7
|
+
* file that was distributed with this source code.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @module lib/secrets/backends/env
|
|
12
|
+
* @description `process.env`-backed resolver for `${secret:KEY}` placeholders.
|
|
13
|
+
* Reads the raw value from `process.env[key]`. Throws the generic
|
|
14
|
+
* `'Secret resolution failed'` Error when the env var is unset or empty —
|
|
15
|
+
* the user-facing message intentionally omits the key name. The key is
|
|
16
|
+
* attached non-enumerably to the thrown Error as `_ginaSecretKey` so
|
|
17
|
+
* callers can log it at debug level without leaking it through `toString()`.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Resolve a secret key against `process.env`.
|
|
22
|
+
*
|
|
23
|
+
* @memberof module:lib/secrets/backends/env
|
|
24
|
+
* @function resolve
|
|
25
|
+
* @param {string} key - Placeholder key, e.g. `'DB_PASSWORD'`
|
|
26
|
+
* @returns {string} Non-empty env-var value
|
|
27
|
+
* @throws {Error} `'Secret resolution failed'` when `process.env[key]` is unset or empty
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* var env = require('./backends/env');
|
|
31
|
+
* process.env.DB_PASSWORD = 's3cret';
|
|
32
|
+
* env.resolve('DB_PASSWORD'); // → 's3cret'
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* delete process.env.MISSING;
|
|
36
|
+
* try {
|
|
37
|
+
* env.resolve('MISSING');
|
|
38
|
+
* } catch (e) {
|
|
39
|
+
* e.message; // 'Secret resolution failed' ← no key name
|
|
40
|
+
* e._ginaSecretKey; // 'MISSING' ← non-enumerable, for debug logging
|
|
41
|
+
* }
|
|
42
|
+
*/
|
|
43
|
+
function resolve(key) {
|
|
44
|
+
var value = process.env[key];
|
|
45
|
+
if (typeof value !== 'string' || value === '') {
|
|
46
|
+
var err = new Error('Secret resolution failed');
|
|
47
|
+
Object.defineProperty(err, '_ginaSecretKey', {
|
|
48
|
+
value: key,
|
|
49
|
+
enumerable: false,
|
|
50
|
+
configurable: true,
|
|
51
|
+
writable: true
|
|
52
|
+
});
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
return value;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = {
|
|
59
|
+
resolve: resolve
|
|
60
|
+
};
|