gina 0.4.6 → 0.4.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 +10 -0
- package/README.md +6 -8
- package/ROADMAP.md +2 -2
- package/framework/v0.4.7/VERSION +1 -0
- package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/csp/README.md +57 -2
- package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/csp/src/main.js +192 -27
- package/framework/{v0.4.6 → v0.4.7}/core/server.isaac.js +153 -5
- package/framework/{v0.4.6 → v0.4.7}/core/server.js +14 -0
- package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/config/settings.server.json +3 -1
- package/framework/{v0.4.6 → v0.4.7}/core/template/conf/settings.json +15 -2
- package/framework/{v0.4.6 → v0.4.7}/lib/index.js +14 -0
- package/framework/v0.4.7/lib/ws-framing/package.json +10 -0
- package/framework/v0.4.7/lib/ws-framing/src/main.js +664 -0
- package/framework/v0.4.7/lib/ws-session/package.json +10 -0
- package/framework/v0.4.7/lib/ws-session/src/main.js +422 -0
- package/framework/{v0.4.6 → v0.4.7}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +9 -3
- package/package.json +2 -2
- package/playwright.config.js +4 -2
- package/framework/v0.4.6/VERSION +0 -1
- /package/framework/{v0.4.6 → v0.4.7}/AUTHORS +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/LICENSE +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/html/static.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/config.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/content.encoding +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/dev/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/gna.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/locales/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/locales/currency.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/locales/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/mime.types +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/model/entity.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/model/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/model/template/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/router.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/server.express.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/status.codes +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/_gitignore +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/conf/env.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/conf/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/console.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/context.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/data/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/data/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/json/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/json/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/path.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/prototypes.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/task.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/helpers/text.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/archiver/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/archiver/build.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/archiver/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/async/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/async/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cache/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cache/build.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cache/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/collection/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/collection/build.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/collection/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/config.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cron/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cron/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/domain/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/domain/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/generator/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/i18n/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/inherits/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/inherits/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/instrument/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/job/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/job/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/math/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/merge/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/merge/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/metrics/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/model.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/proc.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/routing/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/routing/build.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/routing/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/secrets/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/session-store.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/shell.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/state.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/url/README.md +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/url/index.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/url/routing.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/uuid/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/validator.js +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/watcher/package.json +0 -0
- /package/framework/{v0.4.6 → v0.4.7}/lib/watcher/src/main.js +0 -0
|
@@ -0,0 +1,664 @@
|
|
|
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
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @module gina/lib/ws-framing
|
|
11
|
+
*
|
|
12
|
+
* RFC 6455 WebSocket framing codec — frame encoder + incremental parser.
|
|
13
|
+
*
|
|
14
|
+
* Responsibilities:
|
|
15
|
+
* - Build frames (§5.2 base framing): minimal length encoding across the
|
|
16
|
+
* 7-bit / 16-bit / 64-bit forms, control-frame constraints, optional
|
|
17
|
+
* masking (client direction / tests).
|
|
18
|
+
* - Parse an inbound byte stream incrementally: fragmentation reassembly
|
|
19
|
+
* (§5.4), control frames (§5.5), close-code validation (§7.4), UTF-8
|
|
20
|
+
* validation of text payloads and close reasons (§8.1), client-masking
|
|
21
|
+
* enforcement (§5.1).
|
|
22
|
+
* - Enforce implementation-specific limits (§10.4): `maxPayload` across a
|
|
23
|
+
* reassembled message — rejected at header time from the DECLARED length,
|
|
24
|
+
* before any payload is buffered — and `maxFragments` per message.
|
|
25
|
+
*
|
|
26
|
+
* Out of scope (by design):
|
|
27
|
+
* - Transport I/O — consumers feed received bytes to a parser instance and
|
|
28
|
+
* write encoded buffers to their own stream. Per RFC 8441 §5 an HTTP/2
|
|
29
|
+
* extended-CONNECT stream is used "as if it were the TCP connection"
|
|
30
|
+
* of RFC 6455, so the codec is transport-agnostic.
|
|
31
|
+
* - permessage-deflate / extension negotiation — an inbound non-zero RSV
|
|
32
|
+
* bit is a 1002 protocol error.
|
|
33
|
+
* - The opening handshake (HTTP/1.1 Upgrade or RFC 8441 extended CONNECT)
|
|
34
|
+
* and masking-key unpredictability (a client obligation, §10.3).
|
|
35
|
+
*
|
|
36
|
+
* This module is pure — node builtins only (`buffer`, `crypto`), no lib
|
|
37
|
+
* registry requires, no framework globals — so it is unit-testable by a
|
|
38
|
+
* direct require. Same contract as {@link module:gina/lib/routing-introspect}.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* var wsf = require('lib/ws-framing'); // or lib.wsFraming from the registry
|
|
42
|
+
* var parser = wsf.createParser({
|
|
43
|
+
* onMessage : function(data, isBinary) { ... },
|
|
44
|
+
* onPing : function(payload) { stream.write(wsf.encodePong(payload)); },
|
|
45
|
+
* onClose : function(code, reason) { ... },
|
|
46
|
+
* onError : function(err) { stream.write(wsf.encodeClose(err.closeCode)); }
|
|
47
|
+
* });
|
|
48
|
+
* stream.on('data', function(chunk) { parser.feed(chunk); });
|
|
49
|
+
* stream.write(wsf.encodeText('hello'));
|
|
50
|
+
*/
|
|
51
|
+
|
|
52
|
+
var crypto = require('crypto');
|
|
53
|
+
// Core UTF-8 validator — ships with node >= 18.14 (gina's engines floor is higher).
|
|
54
|
+
var isUtf8 = require('buffer').isUtf8;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* RFC 6455 §5.2 opcodes (0x3-0x7 and 0xB-0xF are reserved and rejected).
|
|
58
|
+
*
|
|
59
|
+
* @constant
|
|
60
|
+
* @type {object}
|
|
61
|
+
*/
|
|
62
|
+
var OPCODES = {
|
|
63
|
+
CONTINUATION : 0x0,
|
|
64
|
+
TEXT : 0x1,
|
|
65
|
+
BINARY : 0x2,
|
|
66
|
+
CLOSE : 0x8,
|
|
67
|
+
PING : 0x9,
|
|
68
|
+
PONG : 0xA
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Default cap on a reassembled message payload, in bytes (§10.4).
|
|
73
|
+
*
|
|
74
|
+
* @constant
|
|
75
|
+
* @type {number}
|
|
76
|
+
*/
|
|
77
|
+
var DEFAULT_MAX_PAYLOAD = 1048576; // 1 MiB
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Default cap on the number of fragments a single message may span (§10.4).
|
|
81
|
+
*
|
|
82
|
+
* @constant
|
|
83
|
+
* @type {number}
|
|
84
|
+
*/
|
|
85
|
+
var DEFAULT_MAX_FRAGMENTS = 100;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* §7.4 — is `code` a status code an endpoint may legitimately put on the
|
|
89
|
+
* wire in a Close frame body? 1000-1003 and 1007-1014 are defined or
|
|
90
|
+
* IANA-registered; 1004 is reserved; 1005, 1006 and 1015 are reserved for
|
|
91
|
+
* code-absent / abnormal-closure / TLS-failure reporting and MUST NOT be
|
|
92
|
+
* sent; 3000-4999 are the registered-use and private-use ranges.
|
|
93
|
+
*
|
|
94
|
+
* @function isValidCloseCode
|
|
95
|
+
* @param {number} code - candidate Close status code
|
|
96
|
+
* @returns {boolean} true when the code is valid on the wire
|
|
97
|
+
* @example
|
|
98
|
+
* isValidCloseCode(1000); // true
|
|
99
|
+
* isValidCloseCode(1005); // false — reserved, never on the wire
|
|
100
|
+
* isValidCloseCode(4000); // true — private use
|
|
101
|
+
*/
|
|
102
|
+
function isValidCloseCode(code) {
|
|
103
|
+
return (
|
|
104
|
+
(code >= 1000 && code <= 1014 && code !== 1004 && code !== 1005 && code !== 1006)
|
|
105
|
+
|| (code >= 3000 && code <= 4999)
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Builds a single RFC 6455 frame (§5.2) with minimal length encoding.
|
|
111
|
+
*
|
|
112
|
+
* Encode-side constraint violations throw (they are consumer bugs, not wire
|
|
113
|
+
* data): unknown opcode, control frame above 125 bytes, fragmented control
|
|
114
|
+
* frame.
|
|
115
|
+
*
|
|
116
|
+
* @function encodeFrame
|
|
117
|
+
* @param {object} options
|
|
118
|
+
* @param {number} options.opcode - one of the {@link module:gina/lib/ws-framing~OPCODES} values
|
|
119
|
+
* @param {Buffer|string} [options.payload] - frame payload (strings are encoded as UTF-8)
|
|
120
|
+
* @param {boolean} [options.fin=true] - FIN bit
|
|
121
|
+
* @param {boolean} [options.mask=false] - mask the payload (client direction / tests)
|
|
122
|
+
* @param {Buffer} [options.maskKey] - 4-byte masking key; random when omitted
|
|
123
|
+
* @returns {Buffer} the encoded frame
|
|
124
|
+
* @throws {TypeError|RangeError} on encode-side constraint violations
|
|
125
|
+
* @example
|
|
126
|
+
* encodeFrame({ opcode: OPCODES.TEXT, payload: 'abc' });
|
|
127
|
+
* // → <Buffer 81 03 61 62 63>
|
|
128
|
+
*/
|
|
129
|
+
function encodeFrame(options) {
|
|
130
|
+
if (!options || typeof options !== 'object') {
|
|
131
|
+
throw new TypeError('encodeFrame(options) requires an options object');
|
|
132
|
+
}
|
|
133
|
+
var opcode = options.opcode;
|
|
134
|
+
if (
|
|
135
|
+
opcode !== OPCODES.CONTINUATION && opcode !== OPCODES.TEXT
|
|
136
|
+
&& opcode !== OPCODES.BINARY && opcode !== OPCODES.CLOSE
|
|
137
|
+
&& opcode !== OPCODES.PING && opcode !== OPCODES.PONG
|
|
138
|
+
) {
|
|
139
|
+
throw new TypeError('unknown or reserved opcode: ' + opcode);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
var payload = options.payload;
|
|
143
|
+
if (payload == null) {
|
|
144
|
+
payload = Buffer.alloc(0);
|
|
145
|
+
} else if (typeof payload === 'string') {
|
|
146
|
+
payload = Buffer.from(payload, 'utf8');
|
|
147
|
+
} else if (!Buffer.isBuffer(payload)) {
|
|
148
|
+
throw new TypeError('payload must be a Buffer or a string');
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
var fin = options.fin !== false;
|
|
152
|
+
var mask = options.mask === true;
|
|
153
|
+
var isControl = (opcode & 0x8) === 0x8;
|
|
154
|
+
if (isControl) {
|
|
155
|
+
if (payload.length > 125) {
|
|
156
|
+
throw new RangeError('control frame payload must be <= 125 bytes (RFC 6455 §5.5)');
|
|
157
|
+
}
|
|
158
|
+
if (!fin) {
|
|
159
|
+
throw new RangeError('control frames must not be fragmented (RFC 6455 §5.5)');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
var len = payload.length;
|
|
164
|
+
var extLen = (len >= 65536) ? 8 : ((len >= 126) ? 2 : 0);
|
|
165
|
+
var header = Buffer.allocUnsafe(2 + extLen + (mask ? 4 : 0));
|
|
166
|
+
header[0] = (fin ? 0x80 : 0x00) | opcode;
|
|
167
|
+
var offset = 2;
|
|
168
|
+
if (extLen === 0) {
|
|
169
|
+
header[1] = len;
|
|
170
|
+
} else if (extLen === 2) {
|
|
171
|
+
header[1] = 126;
|
|
172
|
+
header.writeUInt16BE(len, 2);
|
|
173
|
+
offset = 4;
|
|
174
|
+
} else {
|
|
175
|
+
header[1] = 127;
|
|
176
|
+
header.writeBigUInt64BE(BigInt(len), 2);
|
|
177
|
+
offset = 10;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (!mask) {
|
|
181
|
+
return Buffer.concat([header, payload]);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
header[1] |= 0x80;
|
|
185
|
+
var key = (Buffer.isBuffer(options.maskKey) && options.maskKey.length === 4)
|
|
186
|
+
? options.maskKey
|
|
187
|
+
: crypto.randomBytes(4);
|
|
188
|
+
key.copy(header, offset);
|
|
189
|
+
var masked = Buffer.allocUnsafe(len);
|
|
190
|
+
for (var i = 0; i < len; i++) {
|
|
191
|
+
masked[i] = payload[i] ^ key[i & 3];
|
|
192
|
+
}
|
|
193
|
+
return Buffer.concat([header, masked]);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Builds a TEXT frame (UTF-8).
|
|
198
|
+
*
|
|
199
|
+
* @function encodeText
|
|
200
|
+
* @param {string|Buffer} text
|
|
201
|
+
* @param {object} [options] - forwarded to {@link module:gina/lib/ws-framing~encodeFrame} (fin/mask/maskKey)
|
|
202
|
+
* @returns {Buffer}
|
|
203
|
+
* @example
|
|
204
|
+
* stream.write(encodeText('hello'));
|
|
205
|
+
*/
|
|
206
|
+
function encodeText(text, options) {
|
|
207
|
+
options = options || {};
|
|
208
|
+
return encodeFrame({
|
|
209
|
+
opcode : OPCODES.TEXT,
|
|
210
|
+
payload : text,
|
|
211
|
+
fin : options.fin,
|
|
212
|
+
mask : options.mask,
|
|
213
|
+
maskKey : options.maskKey
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Builds a BINARY frame.
|
|
219
|
+
*
|
|
220
|
+
* @function encodeBinary
|
|
221
|
+
* @param {Buffer} data
|
|
222
|
+
* @param {object} [options] - forwarded to {@link module:gina/lib/ws-framing~encodeFrame} (fin/mask/maskKey)
|
|
223
|
+
* @returns {Buffer}
|
|
224
|
+
* @example
|
|
225
|
+
* stream.write(encodeBinary(Buffer.from([1, 2, 3])));
|
|
226
|
+
*/
|
|
227
|
+
function encodeBinary(data, options) {
|
|
228
|
+
options = options || {};
|
|
229
|
+
return encodeFrame({
|
|
230
|
+
opcode : OPCODES.BINARY,
|
|
231
|
+
payload : data,
|
|
232
|
+
fin : options.fin,
|
|
233
|
+
mask : options.mask,
|
|
234
|
+
maskKey : options.maskKey
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Builds a PING frame (§5.5.2). Payload must be <= 125 bytes.
|
|
240
|
+
*
|
|
241
|
+
* @function encodePing
|
|
242
|
+
* @param {Buffer|string} [payload]
|
|
243
|
+
* @param {object} [options] - forwarded to {@link module:gina/lib/ws-framing~encodeFrame} (mask/maskKey)
|
|
244
|
+
* @returns {Buffer}
|
|
245
|
+
* @example
|
|
246
|
+
* stream.write(encodePing());
|
|
247
|
+
*/
|
|
248
|
+
function encodePing(payload, options) {
|
|
249
|
+
options = options || {};
|
|
250
|
+
return encodeFrame({
|
|
251
|
+
opcode : OPCODES.PING,
|
|
252
|
+
payload : payload,
|
|
253
|
+
mask : options.mask,
|
|
254
|
+
maskKey : options.maskKey
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Builds a PONG frame (§5.5.3) — echo the ping's application data verbatim.
|
|
260
|
+
*
|
|
261
|
+
* @function encodePong
|
|
262
|
+
* @param {Buffer|string} [payload]
|
|
263
|
+
* @param {object} [options] - forwarded to {@link module:gina/lib/ws-framing~encodeFrame} (mask/maskKey)
|
|
264
|
+
* @returns {Buffer}
|
|
265
|
+
* @example
|
|
266
|
+
* parser = createParser({ onPing: function(p) { stream.write(encodePong(p)); } });
|
|
267
|
+
*/
|
|
268
|
+
function encodePong(payload, options) {
|
|
269
|
+
options = options || {};
|
|
270
|
+
return encodeFrame({
|
|
271
|
+
opcode : OPCODES.PONG,
|
|
272
|
+
payload : payload,
|
|
273
|
+
mask : options.mask,
|
|
274
|
+
maskKey : options.maskKey
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Builds a CLOSE frame (§5.5.1): empty body, or a 2-byte status code
|
|
280
|
+
* followed by an optional UTF-8 reason (reason capped at 123 bytes so the
|
|
281
|
+
* control-frame limit holds).
|
|
282
|
+
*
|
|
283
|
+
* @function encodeClose
|
|
284
|
+
* @param {number} [code] - Close status code; omit for an empty body
|
|
285
|
+
* @param {string} [reason] - UTF-8 close reason
|
|
286
|
+
* @param {object} [options] - forwarded to {@link module:gina/lib/ws-framing~encodeFrame} (mask/maskKey)
|
|
287
|
+
* @returns {Buffer}
|
|
288
|
+
* @throws {RangeError} on an invalid/unsendable code (e.g. 1005, 1006, 1015) or an oversized reason
|
|
289
|
+
* @example
|
|
290
|
+
* stream.write(encodeClose(1000, 'bye'));
|
|
291
|
+
*/
|
|
292
|
+
function encodeClose(code, reason, options) {
|
|
293
|
+
options = options || {};
|
|
294
|
+
var payload;
|
|
295
|
+
if (typeof code === 'undefined') {
|
|
296
|
+
payload = Buffer.alloc(0);
|
|
297
|
+
} else {
|
|
298
|
+
if (typeof code !== 'number' || !isValidCloseCode(code)) {
|
|
299
|
+
throw new RangeError('invalid Close frame status code: ' + code + ' (RFC 6455 §7.4)');
|
|
300
|
+
}
|
|
301
|
+
var reasonBuf = (typeof reason === 'string' && reason.length > 0)
|
|
302
|
+
? Buffer.from(reason, 'utf8')
|
|
303
|
+
: Buffer.alloc(0);
|
|
304
|
+
if (reasonBuf.length > 123) {
|
|
305
|
+
throw new RangeError('Close frame reason must be <= 123 bytes (RFC 6455 §5.5)');
|
|
306
|
+
}
|
|
307
|
+
payload = Buffer.allocUnsafe(2 + reasonBuf.length);
|
|
308
|
+
payload.writeUInt16BE(code, 0);
|
|
309
|
+
reasonBuf.copy(payload, 2);
|
|
310
|
+
}
|
|
311
|
+
return encodeFrame({
|
|
312
|
+
opcode : OPCODES.CLOSE,
|
|
313
|
+
payload : payload,
|
|
314
|
+
mask : options.mask,
|
|
315
|
+
maskKey : options.maskKey
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/** @private no-op default handler */
|
|
320
|
+
function noop() {}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Parser options.
|
|
324
|
+
*
|
|
325
|
+
* @typedef {object} WsParserOptions
|
|
326
|
+
* @property {number} [maxPayload=1048576] - cap on a reassembled message payload in bytes (§10.4)
|
|
327
|
+
* @property {number} [maxFragments=100] - cap on fragments per message (§10.4)
|
|
328
|
+
* @property {boolean} [isServer=true] - server mode: inbound frames MUST be masked (§5.1); client mode: inbound frames MUST NOT be masked
|
|
329
|
+
* @property {function} [onMessage] - (data, isBinary): text arrives as a validated UTF-8 string, binary as a Buffer
|
|
330
|
+
* @property {function} [onPing] - (payload Buffer) — the consumer answers with a PONG echoing the payload
|
|
331
|
+
* @property {function} [onPong] - (payload Buffer)
|
|
332
|
+
* @property {function} [onClose] - (code, reason): code is 1005 when the Close body was empty (§7.4.1 "no status code was actually present")
|
|
333
|
+
* @property {function} [onError] - (err): err.closeCode carries the §7.4 status code to send back before tearing down
|
|
334
|
+
*/
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Incremental RFC 6455 frame parser for one connection.
|
|
338
|
+
*
|
|
339
|
+
* Feed inbound bytes with {@link WsParser#feed}; results surface through the
|
|
340
|
+
* option callbacks. On a protocol violation the parser reports `onError`
|
|
341
|
+
* with `err.closeCode` and goes permanently dead ("Fail the WebSocket
|
|
342
|
+
* Connection", §7.1.7 — no further input is processed). After a valid Close
|
|
343
|
+
* frame it reports `onClose` and likewise stops processing.
|
|
344
|
+
*
|
|
345
|
+
* @class
|
|
346
|
+
* @constructor
|
|
347
|
+
* @param {WsParserOptions} [options]
|
|
348
|
+
*/
|
|
349
|
+
function WsParser(options) {
|
|
350
|
+
options = options || {};
|
|
351
|
+
/** @private @type {number} */
|
|
352
|
+
this._maxPayload = (typeof options.maxPayload === 'number' && options.maxPayload > 0)
|
|
353
|
+
? options.maxPayload
|
|
354
|
+
: DEFAULT_MAX_PAYLOAD;
|
|
355
|
+
/** @private @type {number} */
|
|
356
|
+
this._maxFragments = (typeof options.maxFragments === 'number' && options.maxFragments > 0)
|
|
357
|
+
? options.maxFragments
|
|
358
|
+
: DEFAULT_MAX_FRAGMENTS;
|
|
359
|
+
/** @private @type {boolean} */
|
|
360
|
+
this._isServer = options.isServer !== false;
|
|
361
|
+
/** @private */
|
|
362
|
+
this._onMessage = (typeof options.onMessage === 'function') ? options.onMessage : noop;
|
|
363
|
+
/** @private */
|
|
364
|
+
this._onPing = (typeof options.onPing === 'function') ? options.onPing : noop;
|
|
365
|
+
/** @private */
|
|
366
|
+
this._onPong = (typeof options.onPong === 'function') ? options.onPong : noop;
|
|
367
|
+
/** @private */
|
|
368
|
+
this._onClose = (typeof options.onClose === 'function') ? options.onClose : noop;
|
|
369
|
+
/** @private */
|
|
370
|
+
this._onError = (typeof options.onError === 'function') ? options.onError : noop;
|
|
371
|
+
/** @private @type {Buffer|null} buffered inbound bytes (bounded by maxPayload + frame header) */
|
|
372
|
+
this._buf = null;
|
|
373
|
+
/** @private @type {object|null} open fragmented message { opcode, chunks, length, count } */
|
|
374
|
+
this._fragments = null;
|
|
375
|
+
/** @private @type {boolean} failed or close-received — all further input is ignored */
|
|
376
|
+
this._dead = false;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Feeds inbound transport bytes to the parser. Partial frames are buffered;
|
|
381
|
+
* multiple complete frames in one chunk are all processed. Never throws on
|
|
382
|
+
* wire data — protocol violations surface through `onError`.
|
|
383
|
+
*
|
|
384
|
+
* @param {Buffer} chunk
|
|
385
|
+
* @returns {void}
|
|
386
|
+
* @example
|
|
387
|
+
* stream.on('data', function(chunk) { parser.feed(chunk); });
|
|
388
|
+
*/
|
|
389
|
+
WsParser.prototype.feed = function(chunk) {
|
|
390
|
+
if (this._dead) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
if (!Buffer.isBuffer(chunk)) {
|
|
394
|
+
chunk = Buffer.from(chunk);
|
|
395
|
+
}
|
|
396
|
+
this._buf = this._buf ? Buffer.concat([this._buf, chunk]) : chunk;
|
|
397
|
+
var frame;
|
|
398
|
+
while (!this._dead && (frame = this._readFrame()) !== null) {
|
|
399
|
+
this._processFrame(frame);
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* Whether the parser has stopped processing input (protocol failure or a
|
|
405
|
+
* received Close frame).
|
|
406
|
+
*
|
|
407
|
+
* @returns {boolean}
|
|
408
|
+
*/
|
|
409
|
+
WsParser.prototype.isDead = function() {
|
|
410
|
+
return this._dead;
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
/**
|
|
414
|
+
* Attempts to read one complete frame off the buffer. Returns null when more
|
|
415
|
+
* bytes are needed OR when the parser failed (callers must re-check state).
|
|
416
|
+
* Header-time validations run before any payload is buffered: RSV bits,
|
|
417
|
+
* control-frame constraints, minimal length encoding, masking direction, and
|
|
418
|
+
* the §10.4 declared-length cap.
|
|
419
|
+
*
|
|
420
|
+
* @private
|
|
421
|
+
* @returns {object|null} `{ fin, opcode, payload }` with the payload unmasked
|
|
422
|
+
*/
|
|
423
|
+
WsParser.prototype._readFrame = function() {
|
|
424
|
+
var buf = this._buf;
|
|
425
|
+
if (!buf || buf.length < 2) {
|
|
426
|
+
return null;
|
|
427
|
+
}
|
|
428
|
+
var b0 = buf[0];
|
|
429
|
+
var b1 = buf[1];
|
|
430
|
+
var opcode = b0 & 0x0F;
|
|
431
|
+
var fin = (b0 & 0x80) === 0x80;
|
|
432
|
+
var rsv = b0 & 0x70;
|
|
433
|
+
var masked = (b1 & 0x80) === 0x80;
|
|
434
|
+
var len7 = b1 & 0x7F;
|
|
435
|
+
var isControl = (opcode & 0x8) === 0x8;
|
|
436
|
+
|
|
437
|
+
if (rsv !== 0) {
|
|
438
|
+
return this._fail(1002, 'non-zero RSV bits with no negotiated extension (RFC 6455 §5.2)');
|
|
439
|
+
}
|
|
440
|
+
if (isControl && (len7 > 125 || !fin)) {
|
|
441
|
+
return this._fail(1002, 'control frames must be unfragmented with payload <= 125 bytes (RFC 6455 §5.5)');
|
|
442
|
+
}
|
|
443
|
+
if (this._isServer && !masked) {
|
|
444
|
+
return this._fail(1002, 'unmasked client frame (RFC 6455 §5.1)');
|
|
445
|
+
}
|
|
446
|
+
if (!this._isServer && masked) {
|
|
447
|
+
return this._fail(1002, 'masked server frame (RFC 6455 §5.1)');
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
var headerLen = 2;
|
|
451
|
+
var len = len7;
|
|
452
|
+
if (len7 === 126) {
|
|
453
|
+
if (buf.length < 4) {
|
|
454
|
+
return null;
|
|
455
|
+
}
|
|
456
|
+
len = buf.readUInt16BE(2);
|
|
457
|
+
headerLen = 4;
|
|
458
|
+
if (len < 126) {
|
|
459
|
+
return this._fail(1002, 'non-minimal 16-bit length encoding (RFC 6455 §5.2)');
|
|
460
|
+
}
|
|
461
|
+
} else if (len7 === 127) {
|
|
462
|
+
if (buf.length < 10) {
|
|
463
|
+
return null;
|
|
464
|
+
}
|
|
465
|
+
var hi = buf.readUInt32BE(2);
|
|
466
|
+
var lo = buf.readUInt32BE(6);
|
|
467
|
+
if ((hi & 0x80000000) !== 0) {
|
|
468
|
+
return this._fail(1002, '64-bit length with the most significant bit set (RFC 6455 §5.2)');
|
|
469
|
+
}
|
|
470
|
+
len = hi * 4294967296 + lo;
|
|
471
|
+
headerLen = 10;
|
|
472
|
+
if (len < 65536) {
|
|
473
|
+
return this._fail(1002, 'non-minimal 64-bit length encoding (RFC 6455 §5.2)');
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
|
|
477
|
+
// §10.4 — reject an oversized DECLARED length now, before buffering the
|
|
478
|
+
// payload (a 2**60-byte announcement must not cost 2**60 bytes of memory).
|
|
479
|
+
if (!isControl) {
|
|
480
|
+
var already = this._fragments ? this._fragments.length : 0;
|
|
481
|
+
if (len > this._maxPayload - already) {
|
|
482
|
+
return this._fail(1009, 'message exceeds maxPayload (' + this._maxPayload + ' bytes)');
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
var maskLen = masked ? 4 : 0;
|
|
487
|
+
var total = headerLen + maskLen + len;
|
|
488
|
+
if (buf.length < total) {
|
|
489
|
+
return null; // wait for more bytes
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
// Copy the payload out so the retained slice does not pin the whole buffer.
|
|
493
|
+
var payload = Buffer.allocUnsafe(len);
|
|
494
|
+
buf.copy(payload, 0, headerLen + maskLen, total);
|
|
495
|
+
if (masked) {
|
|
496
|
+
for (var i = 0; i < len; i++) {
|
|
497
|
+
payload[i] ^= buf[headerLen + (i & 3)];
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
this._buf = (total === buf.length) ? null : buf.slice(total);
|
|
501
|
+
return { fin: fin, opcode: opcode, payload: payload };
|
|
502
|
+
};
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Routes one complete, unmasked frame through the §5.4/§5.5 rules.
|
|
506
|
+
*
|
|
507
|
+
* @private
|
|
508
|
+
* @param {object} frame - `{ fin, opcode, payload }`
|
|
509
|
+
* @returns {void}
|
|
510
|
+
*/
|
|
511
|
+
WsParser.prototype._processFrame = function(frame) {
|
|
512
|
+
var opcode = frame.opcode;
|
|
513
|
+
|
|
514
|
+
if (opcode === OPCODES.TEXT || opcode === OPCODES.BINARY) {
|
|
515
|
+
if (this._fragments) {
|
|
516
|
+
return this._fail(1002, 'new data frame interleaved within a fragmented message (RFC 6455 §5.4)');
|
|
517
|
+
}
|
|
518
|
+
if (frame.fin) {
|
|
519
|
+
return this._deliver(opcode, frame.payload);
|
|
520
|
+
}
|
|
521
|
+
this._fragments = {
|
|
522
|
+
opcode : opcode,
|
|
523
|
+
chunks : [frame.payload],
|
|
524
|
+
length : frame.payload.length,
|
|
525
|
+
count : 1
|
|
526
|
+
};
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
if (opcode === OPCODES.CONTINUATION) {
|
|
531
|
+
if (!this._fragments) {
|
|
532
|
+
return this._fail(1002, 'continuation frame with no message in progress (RFC 6455 §5.4)');
|
|
533
|
+
}
|
|
534
|
+
this._fragments.count++;
|
|
535
|
+
if (this._fragments.count > this._maxFragments) {
|
|
536
|
+
return this._fail(1008, 'message exceeds maxFragments (' + this._maxFragments + ')');
|
|
537
|
+
}
|
|
538
|
+
this._fragments.chunks.push(frame.payload);
|
|
539
|
+
this._fragments.length += frame.payload.length;
|
|
540
|
+
if (frame.fin) {
|
|
541
|
+
var message = Buffer.concat(this._fragments.chunks, this._fragments.length);
|
|
542
|
+
var dataOpcode = this._fragments.opcode;
|
|
543
|
+
this._fragments = null;
|
|
544
|
+
return this._deliver(dataOpcode, message);
|
|
545
|
+
}
|
|
546
|
+
return;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
// Control frames MAY be injected between fragments (§5.4) — they do not
|
|
550
|
+
// touch this._fragments.
|
|
551
|
+
if (opcode === OPCODES.CLOSE) {
|
|
552
|
+
return this._handleClose(frame.payload);
|
|
553
|
+
}
|
|
554
|
+
if (opcode === OPCODES.PING) {
|
|
555
|
+
this._onPing(frame.payload);
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
if (opcode === OPCODES.PONG) {
|
|
559
|
+
this._onPong(frame.payload);
|
|
560
|
+
return;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
return this._fail(1002, 'reserved opcode 0x' + opcode.toString(16) + ' (RFC 6455 §5.2)');
|
|
564
|
+
};
|
|
565
|
+
|
|
566
|
+
/**
|
|
567
|
+
* Delivers a complete message: text is UTF-8-validated (§8.1, whole-message
|
|
568
|
+
* validation after reassembly) and handed over as a string; binary as a Buffer.
|
|
569
|
+
*
|
|
570
|
+
* @private
|
|
571
|
+
* @param {number} opcode - TEXT or BINARY
|
|
572
|
+
* @param {Buffer} payload
|
|
573
|
+
* @returns {void}
|
|
574
|
+
*/
|
|
575
|
+
WsParser.prototype._deliver = function(opcode, payload) {
|
|
576
|
+
if (opcode === OPCODES.TEXT) {
|
|
577
|
+
if (!isUtf8(payload)) {
|
|
578
|
+
return this._fail(1007, 'text message payload is not valid UTF-8 (RFC 6455 §8.1)');
|
|
579
|
+
}
|
|
580
|
+
this._onMessage(payload.toString('utf8'), false);
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
583
|
+
this._onMessage(payload, true);
|
|
584
|
+
};
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* Handles a Close frame body (§5.5.1): empty → code 1005 ("no status code
|
|
588
|
+
* was actually present"); a 1-byte body is malformed; otherwise a 2-byte
|
|
589
|
+
* code validated against §7.4 plus a UTF-8-validated reason.
|
|
590
|
+
*
|
|
591
|
+
* @private
|
|
592
|
+
* @param {Buffer} payload
|
|
593
|
+
* @returns {void}
|
|
594
|
+
*/
|
|
595
|
+
WsParser.prototype._handleClose = function(payload) {
|
|
596
|
+
var code = 1005;
|
|
597
|
+
var reason = '';
|
|
598
|
+
if (payload.length === 1) {
|
|
599
|
+
return this._fail(1002, '1-byte Close frame body (RFC 6455 §5.5.1)');
|
|
600
|
+
}
|
|
601
|
+
if (payload.length >= 2) {
|
|
602
|
+
code = payload.readUInt16BE(0);
|
|
603
|
+
if (!isValidCloseCode(code)) {
|
|
604
|
+
return this._fail(1002, 'invalid Close frame status code ' + code + ' (RFC 6455 §7.4)');
|
|
605
|
+
}
|
|
606
|
+
var reasonBuf = payload.slice(2);
|
|
607
|
+
if (!isUtf8(reasonBuf)) {
|
|
608
|
+
return this._fail(1007, 'Close frame reason is not valid UTF-8 (RFC 6455 §8.1)');
|
|
609
|
+
}
|
|
610
|
+
reason = reasonBuf.toString('utf8');
|
|
611
|
+
}
|
|
612
|
+
this._dead = true;
|
|
613
|
+
this._buf = null;
|
|
614
|
+
this._fragments = null;
|
|
615
|
+
this._onClose(code, reason);
|
|
616
|
+
};
|
|
617
|
+
|
|
618
|
+
/**
|
|
619
|
+
* "Fail the WebSocket Connection" (§7.1.7): report the violation with the
|
|
620
|
+
* §7.4 status code the consumer should send back, drop all buffered state,
|
|
621
|
+
* and stop processing input permanently.
|
|
622
|
+
*
|
|
623
|
+
* @private
|
|
624
|
+
* @param {number} closeCode - §7.4 status code (1002, 1007, 1008, 1009, ...)
|
|
625
|
+
* @param {string} message
|
|
626
|
+
* @returns {null} so `_readFrame` callers uniformly stop their read loop
|
|
627
|
+
*/
|
|
628
|
+
WsParser.prototype._fail = function(closeCode, message) {
|
|
629
|
+
this._dead = true;
|
|
630
|
+
this._buf = null;
|
|
631
|
+
this._fragments = null;
|
|
632
|
+
var err = new Error(message);
|
|
633
|
+
err.closeCode = closeCode;
|
|
634
|
+
this._onError(err);
|
|
635
|
+
return null;
|
|
636
|
+
};
|
|
637
|
+
|
|
638
|
+
/**
|
|
639
|
+
* Creates an incremental parser for one connection.
|
|
640
|
+
*
|
|
641
|
+
* @function createParser
|
|
642
|
+
* @param {WsParserOptions} [options]
|
|
643
|
+
* @returns {WsParser}
|
|
644
|
+
* @example
|
|
645
|
+
* var parser = createParser({ onMessage: function(data, isBinary) { ... } });
|
|
646
|
+
* parser.feed(chunkFromTheWire);
|
|
647
|
+
*/
|
|
648
|
+
function createParser(options) {
|
|
649
|
+
return new WsParser(options);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
module.exports = {
|
|
653
|
+
OPCODES : OPCODES,
|
|
654
|
+
DEFAULT_MAX_PAYLOAD : DEFAULT_MAX_PAYLOAD,
|
|
655
|
+
DEFAULT_MAX_FRAGMENTS : DEFAULT_MAX_FRAGMENTS,
|
|
656
|
+
isValidCloseCode : isValidCloseCode,
|
|
657
|
+
encodeFrame : encodeFrame,
|
|
658
|
+
encodeText : encodeText,
|
|
659
|
+
encodeBinary : encodeBinary,
|
|
660
|
+
encodePing : encodePing,
|
|
661
|
+
encodePong : encodePong,
|
|
662
|
+
encodeClose : encodeClose,
|
|
663
|
+
createParser : createParser
|
|
664
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gina-lib-ws-session",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "WebSocket-over-HTTP/2 session bridge (RFC 8441): accepts an extended-CONNECT request, marries the raw Http2Stream to the lib/ws-framing RFC 6455 codec, and exposes a send/ping/close API with auto-pong, backpressure passthrough, a timed close handshake, full teardown on stream close/error, and graceful-shutdown drain registration.",
|
|
5
|
+
"authors": [ { "name": "Martin-Luther ETOUMAN", "email": "contact@gina.io" } ],
|
|
6
|
+
"copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
|
|
7
|
+
"engines": { "node": ">=18.14.0" },
|
|
8
|
+
"main": "src/main",
|
|
9
|
+
"license": "MIT"
|
|
10
|
+
}
|