gina 0.5.25 → 0.5.26

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.
Files changed (549) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +22 -15
  3. package/ROADMAP.md +4 -3
  4. package/bin/cli +22 -1
  5. package/bin/cmd +11 -1
  6. package/bin/gina-init +1 -0
  7. package/framework/v0.5.26/VERSION +1 -0
  8. package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.js +10 -6
  9. package/framework/{v0.5.25 → v0.5.26}/core/config.js +29 -5
  10. package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/index.js +48 -3
  11. package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-json.js +4 -0
  12. package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-nunjucks.js +4 -0
  13. package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-swig.js +4 -0
  14. package/framework/{v0.5.25 → v0.5.26}/core/server.isaac.js +12 -0
  15. package/framework/{v0.5.25 → v0.5.26}/core/server.js +235 -1
  16. package/framework/{v0.5.25 → v0.5.26}/core/template/conf/settings.json +36 -0
  17. package/framework/{v0.5.25 → v0.5.26}/lib/authz-gate/src/main.js +169 -2
  18. package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/arguments.json +1 -0
  19. package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/help.txt +19 -6
  20. package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/mcp-start.js +47 -5
  21. package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/openapi.js +37 -4
  22. package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/init.js +28 -1
  23. package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/set.js +5 -0
  24. package/framework/{v0.5.25 → v0.5.26}/lib/connector-error/src/main.js +8 -4
  25. package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/mq/listener.js +32 -2
  26. package/framework/{v0.5.25 → v0.5.26}/lib/mcp-http/src/main.js +110 -11
  27. package/framework/{v0.5.25 → v0.5.26}/lib/merge/src/main.js +10 -6
  28. package/framework/{v0.5.25 → v0.5.26}/package.json +1 -1
  29. package/gna.js +4 -4
  30. package/llms.txt +10 -5
  31. package/package.json +3 -3
  32. package/resources/home/settings.json +1 -0
  33. package/schema/routing.json +20 -0
  34. package/schema/settings.json +13 -0
  35. package/utils/helper.js +1 -1
  36. package/framework/v0.5.25/VERSION +0 -1
  37. /package/framework/{v0.5.25 → v0.5.26}/AUTHORS +0 -0
  38. /package/framework/{v0.5.25 → v0.5.26}/LICENSE +0 -0
  39. /package/framework/{v0.5.25 → v0.5.26}/core/asset/html/nolayout.html +0 -0
  40. /package/framework/{v0.5.25 → v0.5.26}/core/asset/html/static.html +0 -0
  41. /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/android-chrome-192x192.png +0 -0
  42. /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/android-chrome-512x512.png +0 -0
  43. /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/apple-touch-icon.png +0 -0
  44. /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/favicon-16x16.png +0 -0
  45. /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/favicon-32x32.png +0 -0
  46. /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/favicon.ico +0 -0
  47. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/README.md +0 -0
  48. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  49. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  50. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  51. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  52. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  53. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  54. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  55. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  56. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  57. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  58. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  59. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  60. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  61. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  62. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  63. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  64. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  65. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  66. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  67. /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  68. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/ai/index.js +0 -0
  69. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/ai/lib/connector.js +0 -0
  70. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/connector.js +0 -0
  71. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  72. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  73. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/n1ql.js +0 -0
  74. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/session-store.js +0 -0
  75. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  76. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  77. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/index.js +0 -0
  78. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/lib/connector.js +0 -0
  79. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/lib/job-store.js +0 -0
  80. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  81. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/lib/session-store.js +0 -0
  82. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mysql/index.js +0 -0
  83. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mysql/lib/connector.js +0 -0
  84. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/postgresql/index.js +0 -0
  85. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/postgresql/lib/connector.js +0 -0
  86. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/index.js +0 -0
  87. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/lib/connector.js +0 -0
  88. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/lib/job-store.js +0 -0
  89. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/lib/render-cache-store.js +0 -0
  90. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/lib/session-store.js +0 -0
  91. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/scylladb/index.js +0 -0
  92. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/scylladb/lib/connector.js +0 -0
  93. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/scylladb/lib/session-store.js +0 -0
  94. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sql-parser.js +0 -0
  95. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sqlite/index.js +0 -0
  96. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sqlite/lib/connector.js +0 -0
  97. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sqlite/lib/job-store.js +0 -0
  98. /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sqlite/lib/session-store.js +0 -0
  99. /package/framework/{v0.5.25 → v0.5.26}/core/content.encoding +0 -0
  100. /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.framework.js +0 -0
  101. /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.js +0 -0
  102. /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-nunjucks-async.js +0 -0
  103. /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-stream.js +0 -0
  104. /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-swig-async.js +0 -0
  105. /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-v1.js +0 -0
  106. /package/framework/{v0.5.25 → v0.5.26}/core/controller/index.js +0 -0
  107. /package/framework/{v0.5.25 → v0.5.26}/core/controller/inspector-window-emit.js +0 -0
  108. /package/framework/{v0.5.25 → v0.5.26}/core/controller/release-banner.js +0 -0
  109. /package/framework/{v0.5.25 → v0.5.26}/core/dev/index.js +0 -0
  110. /package/framework/{v0.5.25 → v0.5.26}/core/dev/lib/class.js +0 -0
  111. /package/framework/{v0.5.25 → v0.5.26}/core/dev/lib/factory.js +0 -0
  112. /package/framework/{v0.5.25 → v0.5.26}/core/dev/lib/tools.js +0 -0
  113. /package/framework/{v0.5.25 → v0.5.26}/core/gna.js +0 -0
  114. /package/framework/{v0.5.25 → v0.5.26}/core/locales/README.md +0 -0
  115. /package/framework/{v0.5.25 → v0.5.26}/core/locales/currency.json +0 -0
  116. /package/framework/{v0.5.25 → v0.5.26}/core/locales/dist/language/en.json +0 -0
  117. /package/framework/{v0.5.25 → v0.5.26}/core/locales/dist/language/fr.json +0 -0
  118. /package/framework/{v0.5.25 → v0.5.26}/core/locales/dist/region/en.json +0 -0
  119. /package/framework/{v0.5.25 → v0.5.26}/core/locales/dist/region/fr.json +0 -0
  120. /package/framework/{v0.5.25 → v0.5.26}/core/locales/index.js +0 -0
  121. /package/framework/{v0.5.25 → v0.5.26}/core/mime.types +0 -0
  122. /package/framework/{v0.5.25 → v0.5.26}/core/model/entity.js +0 -0
  123. /package/framework/{v0.5.25 → v0.5.26}/core/model/index.js +0 -0
  124. /package/framework/{v0.5.25 → v0.5.26}/core/model/template/entityFactory.js +0 -0
  125. /package/framework/{v0.5.25 → v0.5.26}/core/model/template/index.js +0 -0
  126. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/README.md +0 -0
  127. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/index.js +0 -0
  128. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/csrf/README.md +0 -0
  129. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/csrf/package.json +0 -0
  130. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/csrf/src/main.js +0 -0
  131. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/README.md +0 -0
  132. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coep/README.md +0 -0
  133. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coep/package.json +0 -0
  134. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  135. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coop/README.md +0 -0
  136. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coop/package.json +0 -0
  137. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  138. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/corp/README.md +0 -0
  139. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/corp/package.json +0 -0
  140. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  141. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/csp/README.md +0 -0
  142. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/csp/package.json +0 -0
  143. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  144. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  145. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  146. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  147. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  148. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  149. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  150. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  151. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  152. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  153. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/package.json +0 -0
  154. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  155. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  156. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  157. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/src/main.js +0 -0
  158. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  159. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  160. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  161. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  162. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  163. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  164. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  165. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  166. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  167. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  168. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  169. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  170. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  171. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  172. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  173. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  174. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  175. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  176. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/session/README.md +0 -0
  177. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/session/package.json +0 -0
  178. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/session/src/main.js +0 -0
  179. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/storage/README.md +0 -0
  180. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/storage/build.json +0 -0
  181. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/storage/package.json +0 -0
  182. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/storage/src/main.js +0 -0
  183. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/README.md +0 -0
  184. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/build.json +0 -0
  185. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/package.json +0 -0
  186. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/src/form-validator.js +0 -0
  187. /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/src/main.js +0 -0
  188. /package/framework/{v0.5.25 → v0.5.26}/core/router.js +0 -0
  189. /package/framework/{v0.5.25 → v0.5.26}/core/server.express.js +0 -0
  190. /package/framework/{v0.5.25 → v0.5.26}/core/status.codes +0 -0
  191. /package/framework/{v0.5.25 → v0.5.26}/core/template/_gitignore +0 -0
  192. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/app.json +0 -0
  193. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  194. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/routing.json +0 -0
  195. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/settings.json +0 -0
  196. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  197. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/templates.json +0 -0
  198. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  199. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  200. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  201. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  202. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/index.js +0 -0
  203. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/locales/en.json +0 -0
  204. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  205. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  206. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  207. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  208. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  209. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  210. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  211. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  212. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/readme.md +0 -0
  213. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/sw.js +0 -0
  214. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  215. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  216. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  217. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  218. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  219. /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  220. /package/framework/{v0.5.25 → v0.5.26}/core/template/command/gina.bat.tpl +0 -0
  221. /package/framework/{v0.5.25 → v0.5.26}/core/template/command/gina.tpl +0 -0
  222. /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/env.json +0 -0
  223. /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/manifest.json +0 -0
  224. /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/package.json +0 -0
  225. /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/statics.json +0 -0
  226. /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/templates.json +0 -0
  227. /package/framework/{v0.5.25 → v0.5.26}/core/template/error/client/json/401.json +0 -0
  228. /package/framework/{v0.5.25 → v0.5.26}/core/template/error/client/json/403.json +0 -0
  229. /package/framework/{v0.5.25 → v0.5.26}/core/template/error/client/json/404.json +0 -0
  230. /package/framework/{v0.5.25 → v0.5.26}/core/template/error/server/html/50x.html +0 -0
  231. /package/framework/{v0.5.25 → v0.5.26}/core/template/error/server/json/500.json +0 -0
  232. /package/framework/{v0.5.25 → v0.5.26}/core/template/error/server/json/503.json +0 -0
  233. /package/framework/{v0.5.25 → v0.5.26}/core/template/extensions/logger/config.json +0 -0
  234. /package/framework/{v0.5.25 → v0.5.26}/helpers/console.js +0 -0
  235. /package/framework/{v0.5.25 → v0.5.26}/helpers/context.js +0 -0
  236. /package/framework/{v0.5.25 → v0.5.26}/helpers/data/LICENSE +0 -0
  237. /package/framework/{v0.5.25 → v0.5.26}/helpers/data/README.md +0 -0
  238. /package/framework/{v0.5.25 → v0.5.26}/helpers/data/package.json +0 -0
  239. /package/framework/{v0.5.25 → v0.5.26}/helpers/data/src/main.js +0 -0
  240. /package/framework/{v0.5.25 → v0.5.26}/helpers/dateFormat.js +0 -0
  241. /package/framework/{v0.5.25 → v0.5.26}/helpers/index.js +0 -0
  242. /package/framework/{v0.5.25 → v0.5.26}/helpers/json/LICENSE +0 -0
  243. /package/framework/{v0.5.25 → v0.5.26}/helpers/json/README.md +0 -0
  244. /package/framework/{v0.5.25 → v0.5.26}/helpers/json/package.json +0 -0
  245. /package/framework/{v0.5.25 → v0.5.26}/helpers/json/src/main.js +0 -0
  246. /package/framework/{v0.5.25 → v0.5.26}/helpers/path.js +0 -0
  247. /package/framework/{v0.5.25 → v0.5.26}/helpers/plugins/README.md +0 -0
  248. /package/framework/{v0.5.25 → v0.5.26}/helpers/plugins/package.json +0 -0
  249. /package/framework/{v0.5.25 → v0.5.26}/helpers/plugins/src/api-error.js +0 -0
  250. /package/framework/{v0.5.25 → v0.5.26}/helpers/plugins/src/main.js +0 -0
  251. /package/framework/{v0.5.25 → v0.5.26}/helpers/prototypes.js +0 -0
  252. /package/framework/{v0.5.25 → v0.5.26}/helpers/task.js +0 -0
  253. /package/framework/{v0.5.25 → v0.5.26}/helpers/text.js +0 -0
  254. /package/framework/{v0.5.25 → v0.5.26}/lib/admin/package.json +0 -0
  255. /package/framework/{v0.5.25 → v0.5.26}/lib/admin/src/main.js +0 -0
  256. /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/README.md +0 -0
  257. /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/build.json +0 -0
  258. /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/package.json +0 -0
  259. /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/src/dep/jszip.min.js +0 -0
  260. /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/src/main.js +0 -0
  261. /package/framework/{v0.5.25 → v0.5.26}/lib/async/package.json +0 -0
  262. /package/framework/{v0.5.25 → v0.5.26}/lib/async/src/main.js +0 -0
  263. /package/framework/{v0.5.25 → v0.5.26}/lib/audit/package.json +0 -0
  264. /package/framework/{v0.5.25 → v0.5.26}/lib/audit/src/main.js +0 -0
  265. /package/framework/{v0.5.25 → v0.5.26}/lib/audit-store.js +0 -0
  266. /package/framework/{v0.5.25 → v0.5.26}/lib/authz-gate/package.json +0 -0
  267. /package/framework/{v0.5.25 → v0.5.26}/lib/cache/README.md +0 -0
  268. /package/framework/{v0.5.25 → v0.5.26}/lib/cache/build.json +0 -0
  269. /package/framework/{v0.5.25 → v0.5.26}/lib/cache/package.json +0 -0
  270. /package/framework/{v0.5.25 → v0.5.26}/lib/cache/src/main.js +0 -0
  271. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/aliases.json +0 -0
  272. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/add.js +0 -0
  273. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/build.js +0 -0
  274. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/copy.js +0 -0
  275. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/cp.js +0 -0
  276. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/help.js +0 -0
  277. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  278. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/list.js +0 -0
  279. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/man.js +0 -0
  280. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/mcp.js +0 -0
  281. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/oas.js +0 -0
  282. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/remove.js +0 -0
  283. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/rename.js +0 -0
  284. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/restart.js +0 -0
  285. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/rm.js +0 -0
  286. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/start.js +0 -0
  287. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/status.js +0 -0
  288. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/stop.js +0 -0
  289. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/types.js +0 -0
  290. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/cache/arguments.json +0 -0
  291. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/cache/clear.js +0 -0
  292. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/cache/help.txt +0 -0
  293. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/cache/stats.js +0 -0
  294. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/add.js +0 -0
  295. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/arguments.json +0 -0
  296. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/help.js +0 -0
  297. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/help.txt +0 -0
  298. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/infer.js +0 -0
  299. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/list.js +0 -0
  300. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/migrate.js +0 -0
  301. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/models.js +0 -0
  302. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/remove.js +0 -0
  303. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/rm.js +0 -0
  304. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/test.js +0 -0
  305. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/arguments.json +0 -0
  306. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/help.js +0 -0
  307. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/help.txt +0 -0
  308. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/man.js +0 -0
  309. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/ps.js +0 -0
  310. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/stop.js +0 -0
  311. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/add.js +0 -0
  312. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/arguments.json +0 -0
  313. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/help.txt +0 -0
  314. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/args.js +0 -0
  315. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/namespace.js +0 -0
  316. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  317. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/reference-scan.js +0 -0
  318. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/scaffold.js +0 -0
  319. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/remove.js +0 -0
  320. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/rename.js +0 -0
  321. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/rm.js +0 -0
  322. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/add.js +0 -0
  323. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/get.js +0 -0
  324. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/help.js +0 -0
  325. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/help.txt +0 -0
  326. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/link-dev.js +0 -0
  327. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/list.js +0 -0
  328. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/remove.js +0 -0
  329. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/rm.js +0 -0
  330. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/set.js +0 -0
  331. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/unset.js +0 -0
  332. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/use.js +0 -0
  333. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/add.js +0 -0
  334. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/arguments.json +0 -0
  335. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/build.js +0 -0
  336. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/dot.js +0 -0
  337. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/get.js +0 -0
  338. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/help.js +0 -0
  339. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/help.txt +0 -0
  340. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/link-node-modules.js +0 -0
  341. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/link.js +0 -0
  342. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/list.js +0 -0
  343. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/man.js +0 -0
  344. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/msg.json +0 -0
  345. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/open.js +0 -0
  346. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/remove.js +0 -0
  347. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/reset.js +0 -0
  348. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/restart.js +0 -0
  349. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/start.js +0 -0
  350. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/status.js +0 -0
  351. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/stop.js +0 -0
  352. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/tail.js +0 -0
  353. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/update.js +0 -0
  354. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/version.js +0 -0
  355. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/gina-dev.1.md +0 -0
  356. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/gina-framework.1.md +0 -0
  357. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/gina.1.md +0 -0
  358. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/helper.js +0 -0
  359. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/add.js +0 -0
  360. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/arguments.json +0 -0
  361. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/export.js +0 -0
  362. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/help.js +0 -0
  363. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/help.txt +0 -0
  364. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/import.js +0 -0
  365. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/scan.js +0 -0
  366. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/_host.js +0 -0
  367. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/arguments.json +0 -0
  368. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/build.js +0 -0
  369. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/help.js +0 -0
  370. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/help.txt +0 -0
  371. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/list.js +0 -0
  372. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/man.js +0 -0
  373. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/rm.js +0 -0
  374. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/run.js +0 -0
  375. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/index.js +0 -0
  376. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/inspector/help.js +0 -0
  377. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/inspector/help.txt +0 -0
  378. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/inspector/open.js +0 -0
  379. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/man-render.js +0 -0
  380. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/arguments.json +0 -0
  381. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/help.js +0 -0
  382. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/help.txt +0 -0
  383. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/kill.js +0 -0
  384. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/list.js +0 -0
  385. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/msg.json +0 -0
  386. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/help.js +0 -0
  387. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/help.txt +0 -0
  388. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/inc/scan.js +0 -0
  389. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/list.js +0 -0
  390. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/reset.js +0 -0
  391. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/set.js +0 -0
  392. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/add.js +0 -0
  393. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/arguments.json +0 -0
  394. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/backup.js +0 -0
  395. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/build.js +0 -0
  396. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/help.js +0 -0
  397. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/help.txt +0 -0
  398. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/import.js +0 -0
  399. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/list.js +0 -0
  400. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/man.js +0 -0
  401. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/move.js +0 -0
  402. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/remove.js +0 -0
  403. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/rename.js +0 -0
  404. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/restart.js +0 -0
  405. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/restore.js +0 -0
  406. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/rm.js +0 -0
  407. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/start.js +0 -0
  408. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/status.js +0 -0
  409. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/stop.js +0 -0
  410. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/arguments.json +0 -0
  411. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/help.js +0 -0
  412. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/help.txt +0 -0
  413. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/list.js +0 -0
  414. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/remove.js +0 -0
  415. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/set.js +0 -0
  416. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/add.js +0 -0
  417. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/help.js +0 -0
  418. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/help.txt +0 -0
  419. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/link-local.js +0 -0
  420. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/link-production.js +0 -0
  421. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/list.js +0 -0
  422. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/remove.js +0 -0
  423. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/rm.js +0 -0
  424. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/use.js +0 -0
  425. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/arguments.json +0 -0
  426. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/check.js +0 -0
  427. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/help.js +0 -0
  428. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/help.txt +0 -0
  429. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/scan.js +0 -0
  430. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/help.js +0 -0
  431. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/help.txt +0 -0
  432. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/list.js +0 -0
  433. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/man.js +0 -0
  434. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/start.js +0 -0
  435. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/view/add.js +0 -0
  436. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd-status-format/package.json +0 -0
  437. /package/framework/{v0.5.25 → v0.5.26}/lib/cmd-status-format/src/main.js +0 -0
  438. /package/framework/{v0.5.25 → v0.5.26}/lib/collection/README.md +0 -0
  439. /package/framework/{v0.5.25 → v0.5.26}/lib/collection/build.json +0 -0
  440. /package/framework/{v0.5.25 → v0.5.26}/lib/collection/package.json +0 -0
  441. /package/framework/{v0.5.25 → v0.5.26}/lib/collection/src/main.js +0 -0
  442. /package/framework/{v0.5.25 → v0.5.26}/lib/config.js +0 -0
  443. /package/framework/{v0.5.25 → v0.5.26}/lib/connector-config/package.json +0 -0
  444. /package/framework/{v0.5.25 → v0.5.26}/lib/connector-config/src/main.js +0 -0
  445. /package/framework/{v0.5.25 → v0.5.26}/lib/connector-error/package.json +0 -0
  446. /package/framework/{v0.5.25 → v0.5.26}/lib/connector-registry/package.json +0 -0
  447. /package/framework/{v0.5.25 → v0.5.26}/lib/connector-registry/src/main.js +0 -0
  448. /package/framework/{v0.5.25 → v0.5.26}/lib/cron/README.md +0 -0
  449. /package/framework/{v0.5.25 → v0.5.26}/lib/cron/package.json +0 -0
  450. /package/framework/{v0.5.25 → v0.5.26}/lib/cron/src/main.js +0 -0
  451. /package/framework/{v0.5.25 → v0.5.26}/lib/domain/LICENSE +0 -0
  452. /package/framework/{v0.5.25 → v0.5.26}/lib/domain/README.md +0 -0
  453. /package/framework/{v0.5.25 → v0.5.26}/lib/domain/package.json +0 -0
  454. /package/framework/{v0.5.25 → v0.5.26}/lib/domain/src/main.js +0 -0
  455. /package/framework/{v0.5.25 → v0.5.26}/lib/dto/package.json +0 -0
  456. /package/framework/{v0.5.25 → v0.5.26}/lib/dto/src/main.js +0 -0
  457. /package/framework/{v0.5.25 → v0.5.26}/lib/dto-pipe/package.json +0 -0
  458. /package/framework/{v0.5.25 → v0.5.26}/lib/dto-pipe/src/main.js +0 -0
  459. /package/framework/{v0.5.25 → v0.5.26}/lib/dto-types/package.json +0 -0
  460. /package/framework/{v0.5.25 → v0.5.26}/lib/dto-types/src/main.js +0 -0
  461. /package/framework/{v0.5.25 → v0.5.26}/lib/generator/index.js +0 -0
  462. /package/framework/{v0.5.25 → v0.5.26}/lib/i18n/package.json +0 -0
  463. /package/framework/{v0.5.25 → v0.5.26}/lib/i18n/src/main.js +0 -0
  464. /package/framework/{v0.5.25 → v0.5.26}/lib/image-build/package.json +0 -0
  465. /package/framework/{v0.5.25 → v0.5.26}/lib/image-build/src/main.js +0 -0
  466. /package/framework/{v0.5.25 → v0.5.26}/lib/index.js +0 -0
  467. /package/framework/{v0.5.25 → v0.5.26}/lib/inherits/LICENSE +0 -0
  468. /package/framework/{v0.5.25 → v0.5.26}/lib/inherits/README.md +0 -0
  469. /package/framework/{v0.5.25 → v0.5.26}/lib/inherits/package.json +0 -0
  470. /package/framework/{v0.5.25 → v0.5.26}/lib/inherits/src/main.js +0 -0
  471. /package/framework/{v0.5.25 → v0.5.26}/lib/inspector-events/package.json +0 -0
  472. /package/framework/{v0.5.25 → v0.5.26}/lib/inspector-events/src/main.js +0 -0
  473. /package/framework/{v0.5.25 → v0.5.26}/lib/inspector-redact/package.json +0 -0
  474. /package/framework/{v0.5.25 → v0.5.26}/lib/inspector-redact/src/main.js +0 -0
  475. /package/framework/{v0.5.25 → v0.5.26}/lib/instrument/package.json +0 -0
  476. /package/framework/{v0.5.25 → v0.5.26}/lib/instrument/src/main.js +0 -0
  477. /package/framework/{v0.5.25 → v0.5.26}/lib/job/package.json +0 -0
  478. /package/framework/{v0.5.25 → v0.5.26}/lib/job/src/main.js +0 -0
  479. /package/framework/{v0.5.25 → v0.5.26}/lib/job-store.js +0 -0
  480. /package/framework/{v0.5.25 → v0.5.26}/lib/json-config-header/package.json +0 -0
  481. /package/framework/{v0.5.25 → v0.5.26}/lib/json-config-header/src/main.js +0 -0
  482. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/README.md +0 -0
  483. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/package.json +0 -0
  484. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/default/index.js +0 -0
  485. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/file/index.js +0 -0
  486. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  487. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  488. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/mq/index.js +0 -0
  489. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/mq/speaker.js +0 -0
  490. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/helper.js +0 -0
  491. /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/main.js +0 -0
  492. /package/framework/{v0.5.25 → v0.5.26}/lib/math/index.js +0 -0
  493. /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-dispatch/package.json +0 -0
  494. /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-dispatch/src/main.js +0 -0
  495. /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-http/package.json +0 -0
  496. /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-server/package.json +0 -0
  497. /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-server/src/main.js +0 -0
  498. /package/framework/{v0.5.25 → v0.5.26}/lib/merge/README.md +0 -0
  499. /package/framework/{v0.5.25 → v0.5.26}/lib/merge/package.json +0 -0
  500. /package/framework/{v0.5.25 → v0.5.26}/lib/metrics/package.json +0 -0
  501. /package/framework/{v0.5.25 → v0.5.26}/lib/metrics/src/main.js +0 -0
  502. /package/framework/{v0.5.25 → v0.5.26}/lib/model.js +0 -0
  503. /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-filters/README.md +0 -0
  504. /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-filters/package.json +0 -0
  505. /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-filters/src/main.js +0 -0
  506. /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-resolver/package.json +0 -0
  507. /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-resolver/src/main.js +0 -0
  508. /package/framework/{v0.5.25 → v0.5.26}/lib/proc.js +0 -0
  509. /package/framework/{v0.5.25 → v0.5.26}/lib/release-watch/package.json +0 -0
  510. /package/framework/{v0.5.25 → v0.5.26}/lib/release-watch/src/main.js +0 -0
  511. /package/framework/{v0.5.25 → v0.5.26}/lib/render-cache/package.json +0 -0
  512. /package/framework/{v0.5.25 → v0.5.26}/lib/render-cache/src/main.js +0 -0
  513. /package/framework/{v0.5.25 → v0.5.26}/lib/render-cache-store.js +0 -0
  514. /package/framework/{v0.5.25 → v0.5.26}/lib/routing/README.md +0 -0
  515. /package/framework/{v0.5.25 → v0.5.26}/lib/routing/build.json +0 -0
  516. /package/framework/{v0.5.25 → v0.5.26}/lib/routing/package.json +0 -0
  517. /package/framework/{v0.5.25 → v0.5.26}/lib/routing/src/main.js +0 -0
  518. /package/framework/{v0.5.25 → v0.5.26}/lib/routing/src/radix.js +0 -0
  519. /package/framework/{v0.5.25 → v0.5.26}/lib/routing-introspect/package.json +0 -0
  520. /package/framework/{v0.5.25 → v0.5.26}/lib/routing-introspect/src/main.js +0 -0
  521. /package/framework/{v0.5.25 → v0.5.26}/lib/secrets/package.json +0 -0
  522. /package/framework/{v0.5.25 → v0.5.26}/lib/secrets/src/backends/env.js +0 -0
  523. /package/framework/{v0.5.25 → v0.5.26}/lib/secrets/src/main.js +0 -0
  524. /package/framework/{v0.5.25 → v0.5.26}/lib/session-store.js +0 -0
  525. /package/framework/{v0.5.25 → v0.5.26}/lib/shell.js +0 -0
  526. /package/framework/{v0.5.25 → v0.5.26}/lib/state.js +0 -0
  527. /package/framework/{v0.5.25 → v0.5.26}/lib/swig-filters/README.md +0 -0
  528. /package/framework/{v0.5.25 → v0.5.26}/lib/swig-filters/package.json +0 -0
  529. /package/framework/{v0.5.25 → v0.5.26}/lib/swig-filters/src/main.js +0 -0
  530. /package/framework/{v0.5.25 → v0.5.26}/lib/swig-resolver/package.json +0 -0
  531. /package/framework/{v0.5.25 → v0.5.26}/lib/swig-resolver/src/main.js +0 -0
  532. /package/framework/{v0.5.25 → v0.5.26}/lib/template-loaders/package.json +0 -0
  533. /package/framework/{v0.5.25 → v0.5.26}/lib/template-loaders/src/loaders/http.js +0 -0
  534. /package/framework/{v0.5.25 → v0.5.26}/lib/template-loaders/src/loaders/memory.js +0 -0
  535. /package/framework/{v0.5.25 → v0.5.26}/lib/template-loaders/src/main.js +0 -0
  536. /package/framework/{v0.5.25 → v0.5.26}/lib/url/README.md +0 -0
  537. /package/framework/{v0.5.25 → v0.5.26}/lib/url/index.js +0 -0
  538. /package/framework/{v0.5.25 → v0.5.26}/lib/url/routing.json +0 -0
  539. /package/framework/{v0.5.25 → v0.5.26}/lib/uuid/package.json +0 -0
  540. /package/framework/{v0.5.25 → v0.5.26}/lib/uuid/src/main.js +0 -0
  541. /package/framework/{v0.5.25 → v0.5.26}/lib/validator.js +0 -0
  542. /package/framework/{v0.5.25 → v0.5.26}/lib/watcher/package.json +0 -0
  543. /package/framework/{v0.5.25 → v0.5.26}/lib/watcher/src/main.js +0 -0
  544. /package/framework/{v0.5.25 → v0.5.26}/lib/ws-framing/package.json +0 -0
  545. /package/framework/{v0.5.25 → v0.5.26}/lib/ws-framing/src/main.js +0 -0
  546. /package/framework/{v0.5.25 → v0.5.26}/lib/ws-query/package.json +0 -0
  547. /package/framework/{v0.5.25 → v0.5.26}/lib/ws-query/src/main.js +0 -0
  548. /package/framework/{v0.5.25 → v0.5.26}/lib/ws-session/package.json +0 -0
  549. /package/framework/{v0.5.25 → v0.5.26}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,23 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.5.26 - 2026-07-25
10
+ ### Added
11
+ * Bundles can now invert their authorization posture with `settings.json > auth.requireAuthByDefault: true`: every route requires an authenticated session unless its `routing.json` `param` block carries `"public": true`. It composes with the existing `requireAuth` / `roles` / `policy` keys rather than replacing them — an explicitly gated route behaves exactly as before, and `public` can never un-gate one. The mode is strictly opt-in and strictly boolean (a truthy string refuses to boot rather than leaving every route silently ungated), and it is keyed per bundle, so one bundle enabling it never changes the posture of a sibling in a merged-mode process. The injected routes the framework adds for you — the site root, the custom error page, `/_status` and the upload endpoints — ship `"public": true`, so enabling the mode does not take them offline. The boot refuses three configurations the mode would otherwise make dangerous: `"public": true` on a route that also declares an explicit gate key; a login route the mode would gate, which would bounce to itself in an infinite redirect; and a mode-gated route that also declares `cache`, because the render cache is read before authorization runs and its key carries no user identity. `gina bundle:openapi` reflects the mode, so the emitted specification never declares a newly gated route as unauthenticated. Enable it in a non-production environment first and read the boot line, which reports how many routes it just gated.
12
+ * Production transport posture (#COMPLY9): a bundle resolving a cleartext scheme outside the local scope now warns at boot, naming the remediation. `server.requireHttps: true` refuses to boot the cleartext bundle instead — pre-listen, so the port is never reachable — and `server.allowInsecure: true` acknowledges that TLS terminates upstream (mesh, ingress, reverse proxy), turning the warn into one info line. Both strict booleans; a non-boolean or setting both refuses to boot.
13
+ ### Fixed
14
+ * Couchbase N1QL: a client-side SDK timeout now classifies as transient instead of permanent, and keeps its error message. The connector replaced the driver error with one built from the query `cause` envelope whenever that envelope was present — but the SDK attaches it to every query error, so a client-side timeout (which carries no server text) became an empty-message `Error` and lost the typed timeout class name the transient/permanent classifier matches on. The raw driver error is now forwarded whenever the envelope has no message to surface, so `err.isTransient` reports true and `err.message` keeps the SDK text. Server-side only — restart to pick it up.
15
+ * `gina bundle:mcp-start --transport=http` now reads `GINA_MCP_AUTH_TOKEN` through the framework environment reader instead of `process.env` directly. The CLI moves every `GINA_*` variable out of `process.env` into the framework environment during startup, so the resolver's direct read always came back empty and the token was silently never applied — a deployment that supplied the bearer token only through that variable ran with no authentication. The `--auth-token` flag and the `mcp.json > server > authToken` manifest field were not affected. If you set the token through the environment variable, restart the server and confirm the startup line now reports `bearer auth: enabled`.
16
+ * Couchbase N1QL: a `.sql` `@options` annotation that silently did nothing now logs a warning naming the problem. Two shapes were affected: an annotation the parser cannot read (braces are required — write `@options { … }`), and a parsed annotation whose keys are all dropped because no `consistency` key is present (keys such as `adhoc` or `timeout` apply only alongside `consistency`). Query behaviour is unchanged — the warning lists the ignored keys and shows the exact form to write. Server-side only — restart to pick it up.
17
+ * Corrected `lib/merge`'s documentation, which contradicted the shipped behaviour: the two-argument form preserves existing target keys on a conflict (`override` defaults to `false`, not `true` as documented), and the array example now shows the real result — a two-argument array merge combines elements (`merge([1,2],[3,4])` gives `[1,2,3,4]`), while replacing the target array requires `override=true`. Behaviour is unchanged; only the JSDoc (including its copy embedded in the browser bundle) was wrong.
18
+ * The JSON schemas now describe the route-authorization vocabulary. `auth.requireAuthByDefault` was missing from the `settings.json` schema whose `auth` block forbids unknown keys, so an editor flagged a perfectly valid deny-by-default configuration as invalid; and `param.requireAuth`, `param.roles`, `param.policy` and `param.public` were undeclared in the `routing.json` schema, so they were accepted but offered no completion, no type checking and no description on hover. Runtime behaviour is unchanged — the schemas are editor tooling, never enforced at boot.
19
+ ### Security
20
+ * The framework control-plane listeners now bind an explicit host that defaults to loopback. A new `bind_host` setting (env `GINA_BIND_HOST`, flag `gina framework:set --bind-host=`) governs where the command socket and the MQ listener accept connections; it is separate from `host_v4`, which remains the address clients connect to, so a workstation pointing `host_v4` at another machine still starts its own daemon normally. Exposing the control plane beyond the local host is now a deliberate opt-in, the same way a bundle uses `--http-host`. Existing installs inherit the loopback default; set `bind_host` if you relied on reaching these ports from another machine.
21
+ * A command name arriving over the framework socket is now constrained to the shipped command namespace before it is resolved to a handler, so it can only ever resolve inside `lib/cmd/`. Unresolvable names are answered on the connection instead of ending the daemon process, which previously stopped serving every other client; a one-shot offline CLI run still exits non-zero. The MQ listener likewise skips a malformed frame rather than letting the parse failure drop the listener.
22
+ * The MCP Streamable HTTP transport now refuses to start without a bearer token once an ambient protection has been removed — that is, when it is bound to a non-loopback address, or when the `Origin` allowlist has been disabled with `allowedOrigins: ["*"]`. Nothing binds in that case, so the port is never reachable unauthenticated. The default posture is unchanged: on a loopback bind with the built-in `Origin` allowlist a token stays optional, because the bind and the allowlist are the protection. A new `allowInsecure` option (CLI `--allow-insecure`, or `mcp.json > server > allowInsecure`, strict boolean) waives the requirement for deployments that restrict access upstream instead — a service mesh, a NetworkPolicy, or an authenticating reverse proxy such as oauth2-proxy or nginx `auth_request`. Bearer validation now hashes both the presented and the configured token before the constant-time comparison, so neither the comparison nor its timing depends on token length.
23
+ * A route that declares both an authorization key (`param.requireAuth` / `param.roles` / `param.policy`) and `cache` now refuses to boot. The render cache is read before the authorization gate runs and its key carries no user identity, so the first authenticated response was replayed verbatim to every later unauthenticated caller. The boot refusal names the route and the remedy; as a second layer, the render delegates never store a body for a gated route even if the configuration bypassed the lint. `auth.requireAuthByDefault` already refused this pairing for mode-gated routes — it now covers explicitly gated ones too. ACTION REQUIRED: a bundle pairing an authorization key with `cache` will not start until you drop `cache` or open the route.
24
+ * A `method: "ws"` route that declares `param.requireAuth`, `param.roles` or `param.policy` now refuses to boot. A WebSocket handshake is answered by the engine's extended-CONNECT handler and never reaches the authorization gate, so those keys could never be enforced — yet the route linted clean, started, and was counted in the "Registered N authorization-gated route(s)" boot line, actively confirming protection that did not exist. Authenticate inside the `wsHandler` instead: it receives the full request and can inspect headers and cookies before accepting the socket. Relatedly, `auth.requireAuthByDefault` no longer counts WebSocket routes among the routes it gates, and names them at boot instead, since the mode cannot reach them either. ACTION REQUIRED: a bundle declaring an authorization key on a ws route will not start until the key is removed.
25
+
9
26
  ## 0.5.25 - 2026-07-25
10
27
  ### Added
11
28
  * controller:add scaffolds a NAMESPACE controller inside a bundle and prints the paste-ready routing.json rules to wire it. It generates controllers/controller.<name>.js with one JSDoc'd action stub per --controls entry (or a single default action when --controls is omitted), auto-detecting the bundle flavor: a view bundle gets self.render() stubs plus one template per action at templates/html/<name>/<action>.html, while an API-only bundle gets self.renderJSON() stubs and no templates. --api / --views force the flavor. The routing rules are PRINTED for you to paste — routing.json is never edited — so restart the bundle after wiring them. Controller and action names are validated (a lowercase letter followed by letters, digits or underscores; `controller` is reserved), and an existing controller is refused rather than overwritten. Offline CLI command — no bundle rebuild.
package/README.md CHANGED
@@ -59,21 +59,28 @@ open https://localhost:3100
59
59
 
60
60
  > **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
61
61
 
62
- ## What's in 0.5.25
63
-
64
- - **Added machine-caller authentication for app routes.** A request presenting `Authorization: Bearer <key>` matching a caller named in `settings.json > auth.machine.callers` now passes the route authorization gate without a session: it satisfies `param.requireAuth`, its configured roles match route `roles` exactly like a session user's, and route policies receive it as `{ name, roles, machine: true }`. A session still wins when both are present. Strictly opt-in and fail-closed — `auth.machine.enabled` defaults false and the boot lint refuses every malformed shape rather than silently running open. Keys accept `${secret:KEY}` placeholders and are compared in constant time against sha256 hashes computed at boot, so raw keys are not retained; a presented-but-invalid key gets a clean `401` with `WWW-Authenticate: Bearer` and never the login redirect. Audit records carry the caller name as the actor plus `machine: true`, and `self.hasRole()` answers the caller's roles. An optional `auth.machine.authenticator` hook verifies any other sync-checkable credential (a JWT signature, an HMAC header, an `x-api-key` scheme). Server-side — restart your bundles. (MS3)
65
- - **Added — cross-service request-id propagation.** The always-on request id is now forwarded as `x-request-id` on every outbound `self.query()` call — the file-download proxy path and both the HTTP/1 and HTTP/2 inter-bundle client paths — so one logical request stays correlatable as it fans out across bundles. A caller that sets `x-request-id` explicitly is never overwritten, and only the sanitised resolved id is forwarded (never a raw inbound header). The server also echoes `X-Request-Id` back on every response on both engines, so a caller, load balancer or APM can read the id off the wire. Server-side — restart your bundles. (MS1)
66
- - **Added — `GET /_gina/health/check` on the default (express) engine**, mirroring the isaac engine's existing liveness endpoint. It returns `200` with `{"status":"healthy","timestamp":<ISO>}` and is deliberately ungated — no admin allowlist, no dev gate — so container liveness probes reach it off-loopback. Previously only isaac served it, so express bundles had no ungated liveness target and had to switch engines just to satisfy a Docker or Kubernetes healthcheck. Server-side — restart your bundles. (MS2)
67
- - **Added — the authorization contract in `bundle:openapi`.** Gated routes (`param.requireAuth` / `param.roles` / `param.policy`) now emit a `401` response entry, plus a `403` when roles or a policy add authorization beyond authentication, and a bundle with machine-caller auth configured gains `components.securitySchemes.bearerAuth` (`http`/`bearer`) with a per-operation `security` requirement on gated routes. Role and policy names are never emitted into the spec, and an un-gated, un-configured bundle's spec is byte-unchanged. (MS4)
68
- - **Added — the `controller:` CLI group.** `controller:add` scaffolds a namespace controller with one JSDoc'd action stub per `--controls` entry, auto-detecting the bundle flavor (a view bundle gets `self.render()` stubs plus a template per action; an API bundle gets `self.renderJSON()` stubs), and prints the paste-ready `routing.json` rules rather than editing your routing. `controller:remove` (alias `controller:rm`) deletes one only after a reference-aware scan of `routing.json` and every `requireController()` call — because a routing rule naming a namespace with no controller file silently falls back to the default controller instead of erroring, a bare delete is unsafe, so it refuses and lists the blockers. `controller:rename` renames in place and rewrites the references it can do safely, reporting anything a static rewrite cannot resolve rather than guessing. All three support `--dry-run` and `--format=json`; remove and rename confirm interactively and support `--force`. Offline CLI — no bundle rebuild. (#R9)
69
- - **Added transient-vs-permanent classification for datastore connector errors.** When a connector query fails, the error reaching your controller now carries `err.isTransient` (true when a retry after backoff can succeed — a datastore timeout, a dropped connection, a node warming up after a restart, rebalance or failover) and `err.transientReason`, a normalized token naming the condition (`socket:econnrefused`, `postgres:serialization-failure`, `mongo:transient-transaction`, `couchbase:timeout`, …). A controller can branch on it to render an honest "temporarily unavailable, please retry" instead of a generic 500 for a condition that clears itself in seconds — without hand-rolling a vendor-error classifier. It normalizes signals every driver already carries (socket errno, driver codes and class names, ANSI SQLSTATE classes, MongoDB error labels, Couchbase N1QL cause codes) across all six datastore connectors, and is deliberately conservative: an unrecognized error, or a genuinely permanent one such as a DNS misconfiguration or a duplicate key, classifies as permanent. Purely additive — it sets only those two fields and never throws. Server-side — restart your bundles. (#CE1)
70
- - **Added — `settings.swig.autoescape`** (boolean, default false) to opt in to HTML-escaping of Swig `{{ variable }}` output as an XSS defense, mirroring the existing `settings.nunjucks.autoescape`. Swig's escaping default is unchanged in this release — set the flag per bundle to enable it. A non-boolean value now refuses bundle startup, so the security toggle can never be silently mis-typed.
71
- - **Added — `server.proxy.requireForwardedHeaders`** (opt-in, declared in the published schema): when true, a request is classified as reverse-proxied only when it carries an `X-Forwarded-Host` header, disabling the port-less-Host heuristic so internal service-DNS calls can never rewrite the worker's proxy-host context. This is the deterministic option for deployments whose front proxy always sends `X-Forwarded-Host`, and the only mechanism that also protects renders with no request of their own (worker- or cron-driven rendering). Defaults to false — the historical heuristic is unchanged.
72
- - **Added — a `processing` state on the staged upload progress indicator.** `data-gina-upload-progress-state` is stamped `processing` the moment the browser finishes sending the bytesthe window during which the server post-processes the upload (rendering a preview, transcoding, scanning) before it responds. On a fast link the bytes finish in milliseconds while that window can run for seconds, during which the bar would otherwise sit frozen at a full `uploading` state; the new state advances the state attribute only, leaving the bar full so a styled bar can show a distinct processing affordance via CSS, and a native indeterminate bar keeps animating. Purely additive and i18n-neutral. Browser-bundledre-bake your bundles. (#R8)
73
- - **Fixedabsolute URLs poisoned by port-less internal calls.** A request whose `Host` carries no port a container health probe on an app route, a service-mesh hop, a sibling-bundle call addressed by service or DNS namewas classified as reverse-proxied and rewrote the worker's proxy-host context, so later renders' `getUrl` / `url` filter output and cross-bundle redirect and error-fallback targets could emit the internal host. The template filters (swig and nunjucks) and both URL builders now prefer the emitting request's own per-request classification on both engines, Express included; the worker-global remains the fallback for renders without a request. Server-side — restart your bundles. (#B152)
74
- - **Fixed — the Couchbase connector no longer hangs the request when an N1QL query fails at the socket level** connection refused or reset, or a node still warming up after a restart or rebalance with no query-error envelope. The three query error handlers read the vendor `cause` unconditionally, so on such a failure a swallowed `TypeError` left the query callback un-fired and the request never settled: no response, no error page. Each handler now forwards a usable error on both paths and always settles the query. Server-side — restart your bundles. (#B153)
75
- - **Fixed — a file input declaring only its staging upload action no longer emits a spurious warning-and-error pair** nor writes a visible error into the form's error container on every bind and re-bind. The delete action deliberately has no framework default because its endpoint is app-specific, so its absence is now a quiet debug at bind time; the requirement is still enforced when a delete is actually triggered. Declaring the delete action explicitly, the previous workaround, is no longer needed. Browser-bundled re-bake your bundles.
76
- - **Fixed — a staged-upload reset or delete click that matches none of the rendered previews now logs a diagnostic warning instead of silently doing nothing.** Previously a zero-match removal skipped its whole cleanup path the server-side temp-file delete request, the progress-indicator reset, and the removal callback with no signal, so orphaned temp files could go unnoticed. A normal removal is unchanged. Browser-bundledre-bake your bundles. (#B150)
62
+ ## What's in 0.5.26
63
+
64
+ > **Three behaviour changes to check before upgrading.** Two can stop a bundle
65
+ > that you have not otherwise touched: a route pairing an authorization key with
66
+ > `cache` now refuses to boot, and so does a `method: "ws"` route declaring
67
+ > `requireAuth` / `roles` / `policy`. The third only adds a boot line a bundle
68
+ > resolving a cleartext scheme outside the `local` scope now warns, and refuses
69
+ > only if you opt in with `server.requireHttps`. See the
70
+ > [migration guide](https://gina.io/docs/migration) for each.
71
+
72
+ - **Added — deny-by-default authorization.** `settings.json > auth.requireAuthByDefault: true` inverts a bundle's posture: every route requires an authenticated session unless its `routing.json` `param` block carries `"public": true`. It composes with the existing `requireAuth` / `roles` / `policy` keys rather than replacing them an explicitly gated route behaves exactly as before, and `public` can never un-gate one. The mode is strictly opt-in and strictly boolean (a truthy string refuses to boot rather than leaving every route silently ungated), and it is keyed per bundle, so one bundle enabling it never changes the posture of a sibling in a merged-mode process. The routes the framework injects for you — the site root, the custom error page, `/_status` and the upload endpoints — ship `"public": true`, so enabling the mode does not take them offline. The boot refuses three configurations the mode would otherwise make dangerous: `"public": true` on a route that also declares an explicit gate key; a login route the mode would gate, which would bounce to itself in an infinite redirect; and a mode-gated route that also declares `cache`, because the render cache is read before authorization runs and its key carries no user identity. `gina bundle:openapi` reflects the mode, so the emitted specification never declares a newly gated route as unauthenticated. Enable it in a non-production environment first and read the boot line, which reports how many routes it just gated. Server-siderestart your bundles. (#COMPLY10)
73
+ - **Addeda boot-time production transport posture guard.** A bundle resolving a cleartext scheme outside the `local` scope now warns once at boot, naming the remediation. `server.requireHttps: true` refuses to boot the cleartext bundle insteadpre-listen, so the port is never reachable and `server.allowInsecure: true` acknowledges that TLS terminates upstream (mesh, ingress, reverse proxy), turning the warn into one info line. Both are strict booleans; a non-boolean, or setting both, refuses to boot. Server-side — restart your bundles. (#COMPLY9)
74
+ - **Fixed — Couchbase client-side query timeouts now classify as transient and keep their message.** The connector replaced the driver error with one built from the query `cause` envelope whenever that envelope was presentbut the SDK attaches it to every query error, so a client-side timeout (which carries no server text) became an empty-message `Error` and lost the typed timeout class name the transient/permanent classifier matches on. The raw driver error is now forwarded whenever the envelope has no message to surface, so `err.isTransient` reports true and `err.message` keeps the SDK text. Server-side — restart your bundles.
75
+ - **Fixed — `gina bundle:mcp-start --transport=http` now actually applies `GINA_MCP_AUTH_TOKEN`.** It is read through the framework environment reader instead of `process.env` directly: the CLI moves every `GINA_*` variable out of `process.env` into the framework environment during startup, so the resolver's direct read always came back empty and the token was silently never applied a deployment that supplied the bearer token only through that variable ran with no authentication. The `--auth-token` flag and the `mcp.json > server > authToken` manifest field were not affected. If you set the token through the environment variable, restart the server and confirm the startup line now reports `bearer auth: enabled`.
76
+ - **Fixed — a Couchbase `.sql` `@options` annotation that silently did nothing now warns.** Two shapes were affected: an annotation the parser cannot read (braces are required write `@options { }`), and a parsed annotation whose keys are all dropped because no `consistency` key is present (keys such as `adhoc` or `timeout` apply only alongside `consistency`). Query behaviour is unchanged the warning lists the ignored keys and shows the exact form to write. Server-siderestart your bundles.
77
+ - **Fixed — the JSON schemas now describe the route-authorization vocabulary.** `auth.requireAuthByDefault` was missing from the `settings.json` schema whose `auth` block forbids unknown keys, so an editor flagged a perfectly valid deny-by-default configuration as invalid; and `param.requireAuth`, `param.roles`, `param.policy` and `param.public` were undeclared in the `routing.json` schema, so they were accepted but offered no completion, no type checking and no description on hover. Runtime behaviour is unchanged — the schemas are editor tooling, never enforced at boot.
78
+ - **Fixed — `lib/merge`'s documentation contradicted the shipped behaviour.** The two-argument form preserves existing target keys on a conflict (`override` defaults to `false`, not `true` as documented), and the array example now shows the real result — a two-argument array merge combines elements (`merge([1,2],[3,4])` gives `[1,2,3,4]`), while replacing the target array requires `override=true`. Behaviour is unchanged; only the JSDoc (including its copy embedded in the browser bundle) was wrong.
79
+ - **Security — the framework control-plane listeners now bind an explicit host that defaults to loopback.** A new `bind_host` setting (env `GINA_BIND_HOST`, flag `gina framework:set --bind-host=`) governs where the command socket and the MQ listener accept connections; it is separate from `host_v4`, which remains the address clients connect to, so a workstation pointing `host_v4` at another machine still starts its own daemon normally. Exposing the control plane beyond the local host is now a deliberate opt-in, the same way a bundle uses `--http-host`. Existing installs inherit the loopback default; set `bind_host` if you relied on reaching these ports from another machine.
80
+ - **Security — a command name arriving over the framework socket is constrained to the shipped command namespace** before it is resolved to a handler, so it can only ever resolve inside `lib/cmd/`. Unresolvable names are answered on the connection instead of ending the daemon process, which previously stopped serving every other client; a one-shot offline CLI run still exits non-zero. The MQ listener likewise skips a malformed frame rather than letting the parse failure drop the listener.
81
+ - **Security — a route that declares both an authorization key and `cache` now refuses to boot.** The render cache is read before the authorization gate runs and its key carries no user identity, so the first authenticated response was replayed verbatim to every later unauthenticated caller. The boot refusal names the route and the remedy; as a second layer, the render delegates never store a body for a gated route even if the configuration bypassed the lint. `auth.requireAuthByDefault` already refused this pairing for mode-gated routes — it now covers explicitly gated ones too. **Action required:** a bundle pairing `param.requireAuth` / `param.roles` / `param.policy` with `cache` will not start until you drop `cache` or open the route. (#B158)
82
+ - **Security — the MCP Streamable HTTP transport refuses to start without a bearer token once an ambient protection has been removed** — that is, when it is bound to a non-loopback address, or when the `Origin` allowlist has been disabled with `allowedOrigins: ["*"]`. Nothing binds in that case, so the port is never reachable unauthenticated. The default posture is unchanged: on a loopback bind with the built-in `Origin` allowlist a token stays optional, because the bind and the allowlist are the protection. A new `allowInsecure` option (CLI `--allow-insecure`, or `mcp.json > server > allowInsecure`, strict boolean) waives the requirement for deployments that restrict access upstream instead — a service mesh, a NetworkPolicy, or an authenticating reverse proxy. Bearer validation now hashes both the presented and the configured token before the constant-time comparison, so neither the comparison nor its timing depends on token length.
83
+ - **Security — a `method: "ws"` route that declares `param.requireAuth`, `param.roles` or `param.policy` now refuses to boot.** A WebSocket handshake is answered by the engine's extended-CONNECT handler and never reaches the authorization gate, so those keys could never be enforced — yet the route linted clean, started, and was counted in the "Registered N authorization-gated route(s)" boot line, actively confirming protection that did not exist. Authenticate inside the `wsHandler` instead: it receives the full request and can inspect headers and cookies before accepting the socket. Relatedly, `auth.requireAuthByDefault` no longer counts WebSocket routes among the routes it gates, and names them at boot instead. **Action required:** a bundle declaring an authorization key on a ws route will not start until the key is removed. (#B159)
77
84
 
78
85
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
79
86
 
package/ROADMAP.md CHANGED
@@ -50,6 +50,7 @@ This roadmap covers planned features, architectural improvements, new connectors
50
50
  | **Q3 2026** | `0.5.23` ✅ | **Fixed**: multipart `req.files[].size` now reports the exact stored byte count — the value was snapshotted before the write pipeline finished counting, coming up a varying whole-chunk short (file bytes on disk were always intact); it is finalized before the request resumes, so `self.store()` and any persister see the real size (#B142) · a multi-file multipart upload no longer hangs when an early small file finishes while a later large part is still streaming — the per-stream completion listeners now arm at creation (an already-finished stream's event never replays), and a mid-stream write error answers a guarded 500 instead of crashing the bundle; single-file uploads were unaffected (#B143) · the stale-release banner (`server.releaseWatch`) is now injected by the async template-loader render delegates too — a bundle on a custom async loader got the `/_gina/release/*` endpoints and SSE but no in-page banner; both async delegates (swig / nunjucks) now splice it onto the finalized HTML like the sync paths, CSP-nonce-aware, byte-inert outside the gate (#RWATCH) |
51
51
  | **Q3 2026** | `0.5.24` ✅ | **Added**: upload progress for the staged upload client layer — the staging POST reports real client-to-server wire progress via a new `uploadProgress.<id>` form event and an opt-in declarative `<progress>` / percent indicator (#R8, slice 1) · drag-and-drop — a file input binds a named element as a dropzone that routes dropped files through the exact same staging pipeline as the native picker, opt-in and explicit-id-only with `idle`/`over`/`dropped` CSS state hooks (#R8, slice 2) · an incident `ref` on every error response — a short voice-relayable correlation code (present in all scopes) that a server-side log line pairs with the full error detail before the wire copy is stripped, so support can resolve a user-relayed ref to the exact failure even in production (#ERRREF) · a per-upload-group `simulateWriteError` flag (non-production only) to verify the upload write-error crash-guard on your own surface after an upgrade (#B144) · **Fixed**: the staged upload client layer no longer corrupts binary uploads — the multipart body is now a Blob of raw file bytes instead of a UTF-8-inflating DOMString, so images / PDFs / archives are stored byte-identical (the defect only surfaced on gina ≥ 0.5.22; corrupted files are losslessly recoverable) (#B148) · a misconfigured upload group whose destination directory cannot be created answers a guarded 500 instead of crashing the bundle (#B145) · a file input declaring only its upload action is no longer silently repointed at the reset/delete route (#B146) · an upload no longer throws in its success handler when no preview element is present (#B147) |
52
52
  | **Q3 2026** | `0.5.25` ✅ | **Added**: microservices readiness — machine-caller authentication (an `Authorization: Bearer` key named in `settings.json > auth.machine.callers` satisfies route authorization without a session, opt-in and fail-closed, constant-time compared against boot-computed hashes, with an optional custom authenticator hook for JWT/HMAC/api-key schemes), cross-service request-id propagation (the always-on request id forwarded as `x-request-id` on every `self.query()` and echoed back on every response, so one logical request stays correlatable across bundles), an ungated `GET /_gina/health/check` on the express engine so container liveness probes no longer require the isaac engine, and the authorization contract in `bundle:openapi` (gated routes emit `401`/`403` entries and a `bearerAuth` security scheme, never role or policy names) · the `controller:` CLI group — `controller:add` scaffolds a namespace controller with per-action stubs and prints paste-ready routing rules, `controller:remove`/`rm` deletes only after a reference-aware scan that refuses while any routing rule or `requireController()` still points at it, and `controller:rename` rewrites the references it can resolve safely and reports the rest (#R9) · transient-vs-permanent classification for datastore connector errors — `err.isTransient` + a normalized `err.transientReason` on every connector query failure across all six datastore connectors, so an application can render an honest retry response without string-matching vendor error text; conservative by design, an unrecognized or genuinely permanent error classifies as permanent (#CE1) · `settings.swig.autoescape` to opt in to Swig output escaping (default unchanged; a non-boolean now refuses boot) · `server.proxy.requireForwardedHeaders` to require `X-Forwarded-Host` for proxy classification, the deterministic alternative to the port-less-Host heuristic · a `processing` state on the staged upload progress indicator, covering the server post-processing window so a full bar reads as working rather than stuck (#R8) · **Fixed**: absolute URLs poisoned by port-less internal calls — a health probe, service-mesh hop or service-DNS sibling call could rewrite the worker's proxy-host context and leak the internal host into later renders' `getUrl`/`url` output and cross-bundle redirect targets; emitting requests now prefer their own classification on both engines (#B152) · the Couchbase connector no longer hangs a request when an N1QL query fails at the socket level with no query-error envelope — the callback went un-fired and the request never settled (#B153) · a file input declaring only its staging upload action no longer emits a spurious warning-and-error pair on every bind · a staged-upload removal matching no preview now logs a diagnostic instead of silently skipping its whole cleanup path, including the temp-file delete (#B150) |
53
+ | **Q3 2026** | `0.5.26` ✅ | **Security**: a route pairing an authorization key (`param.requireAuth` / `param.roles` / `param.policy`) with `cache` now refuses to boot — both render-cache serve points run BEFORE the authorization gate and the cache key carries no user identity, so the first authenticated response was replayed verbatim to every later anonymous caller; as a second layer the render delegates never store a body for a gated route even if the configuration bypassed the lint (#B158) · a `method: "ws"` route declaring an authorization key now refuses to boot — a WebSocket handshake is answered by the engine's extended-CONNECT handler and never reaches the gate, so those keys could never be enforced while the boot line still counted the route as protected; authenticate inside the `wsHandler`, which receives the full request (#B159) · the framework control-plane listeners now bind an explicit host defaulting to loopback — a new `bind_host` setting (env `GINA_BIND_HOST`, `gina framework:set --bind-host=`), separate from `host_v4`, so exposing the command socket and MQ listener beyond the local host is a deliberate opt-in · a command name arriving over the framework socket is constrained to the shipped `lib/cmd/` namespace before it resolves, and an unresolvable name is answered on the connection instead of ending the daemon for every other client · the MCP Streamable HTTP transport refuses to start without a bearer token once an ambient protection is removed (a non-loopback bind, or `allowedOrigins: ["*"]`), with a new `allowInsecure` waiver for deployments that restrict access upstream · **Added**: deny-by-default authorization — `settings.json > auth.requireAuthByDefault: true` requires an authenticated session on every route unless its `param` block carries `"public": true`; opt-in, strictly boolean, keyed per bundle so one bundle never changes a sibling's posture in merged mode, with the framework-injected routes shipping exempt and boot refusals for the login-route lockout, the `public`-plus-explicit-key contradiction, and a mode-gated route that also declares `cache`; `bundle:openapi` follows the mode (#COMPLY10) · a boot-time production transport posture guard — a cleartext scheme outside the `local` scope warns once at boot, `server.requireHttps` refuses to start instead (pre-listen, so the port is never reachable), and `server.allowInsecure` acknowledges that TLS terminates upstream (#COMPLY9) · **Fixed**: Couchbase client-side query timeouts classify as transient and keep their message — the connector rebuilt the error from the query `cause` envelope the SDK attaches to every query error, so a client-side timeout became an empty-message `Error` that had lost the typed class name the classifier matches on (#B153) · `gina bundle:mcp-start --transport=http` now actually applies `GINA_MCP_AUTH_TOKEN` — the resolver read `process.env` directly while the CLI had already moved every `GINA_*` variable into the framework environment, so a deployment supplying the token only that way ran with no authentication · a `.sql` `@options` annotation that silently did nothing now warns, naming the ignored keys and showing the working form (#B155) · the `settings.json` and `routing.json` schemas now describe the route-authorization vocabulary, so an editor no longer flags a valid deny-by-default configuration as invalid · `lib/merge`'s JSDoc no longer documents an inverted `override` default |
53
54
  | **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
54
55
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
55
56
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
@@ -270,9 +271,9 @@ Technical-safeguard primitives that map to the **PCI-DSS**, **SOC2**, and **HIPA
270
271
  | 📋 | **Application-level rate limiting** — Per-endpoint / per-client throttling at the route layer (today only an HTTP/2 rapid-reset limiter exists). Maps to PCI-DSS anti-automation and SOC2 availability. | `0.6.x` | Q4 2026 |
271
272
  | 📋 | **Data-at-rest / field-level encryption helpers** — Field-level encryption + key-management utilities. Maps to PCI-DSS req 3 and HIPAA §164.312(a)(2)(iv). | `0.6.x` | Q4 2026 |
272
273
  | 📋 | **Compliance control-mapping guide** — A reference mapping each Gina control to the PCI-DSS / SOC2 / HIPAA requirement it supports, plus an explicit "what the framework does not cover" section (to follow). | `0.6.x` | Q4 2026 |
273
- | 📋 | **Transport-security posture** — A production-scope HTTPS enforcement option (refuse or warn when a bundle serves plain HTTP outside local/dev scope), with a "TLS terminates upstream" escape hatch for the common mesh/ingress pattern, plus documented guidance for terminating mTLS at the mesh or ingress. Maps to the "encrypt everywhere / no implicit network trust" principle of NIST SP 800-207 (Zero Trust). | `0.6.x` | Q4 2026 |
274
- | 📋 | **Deny-by-default authorization mode** — An opt-in posture where every route requires authentication unless explicitly marked public, inverting today's per-route opt-in (a route that declares nothing is currently untouched). Complements the shipped Authorization / RBAC control. Maps to NIST SP 800-207 least-privilege / deny-by-default. | `0.6.x` | Q4 2026 |
275
- | 📋 | **Zero-Trust deployment guide** — A guide to running Gina inside a zero-trust architecture (NIST SP 800-207): terminating mTLS at the mesh/ingress, enforcing HTTPS, applying network default-deny between services, and shipping the built-in audit/metrics telemetry to a SOC. An honest-boundary companion to the compliance control-mapping guide — the framework supplies the enforcement point, identity, and telemetry; the deployment supplies transport identity and segmentation. | `0.6.x` | Q4 2026 |
274
+ | | **Transport-security posture** — A bundle resolving a cleartext scheme outside the local scope warns once at boot, naming the bundle, scheme, and scope alongside both remediations. `server.requireHttps: true` refuses the boot instead — the throw lands pre-listen, so the cleartext port is never reachable at all. `server.allowInsecure: true` is the "TLS terminates upstream" acknowledgment for the mesh / ingress / reverse-proxy topology, turning the warning into a single info line; declaring both is a boot-refused contradiction. Both are strict booleans resolved exactly like `scheme` itself — the bundle's settings win and `env.json`'s `server` block fills — and a non-boolean value refuses the boot in every scope. Terminating mTLS stays a mesh/ingress concern by design. Maps to the "encrypt everywhere / no implicit network trust" principle of NIST SP 800-207 (Zero Trust). | `0.5.26-alpha.2` | shipped |
275
+ | | **Deny-by-default authorization mode** — `settings.json > auth.requireAuthByDefault: true` inverts a bundle's posture: a route declaring no authorization key is gated rather than open, and opts back out with `param.public: true`. The mode is keyed per bundle, so one bundle's posture can never un-gate a sibling's in a merged process. The existing `requireAuth` / `roles` / `policy` keys are unaffected — only the un-annotated route changes — and `public` is evaluated inside the un-annotated branch, so a route carrying it alongside an explicit gate key stays gated even in a hand-edited config. The boot refuses the three shapes the mode makes dangerous: `public` beside an explicit gate key, a login route the mode would gate (an infinite self-bounce), and a mode-gated route that also declares `cache` (the render cache is read before authorization and its key carries no identity). The five framework-injected routes ship exempt, so enabling the mode cannot take the site root or the error renderer offline. Complements the shipped Authorization / RBAC control. Maps to NIST SP 800-207 least-privilege / deny-by-default. | `0.5.26-alpha.2` | shipped |
276
+ | | **Zero-Trust deployment guide** — [Running Gina zero-trust](https://gina.io/docs/guides/zero-trust) walks the NIST SP 800-207 tenets against the controls Gina actually ships: deny-by-default authorization, the transport-posture knobs, terminating mTLS at the mesh or ingress, network default-deny between services, keeping the framework control sockets on loopback, and shipping the built-in audit / metrics / request-correlation telemetry to a SOC. An honest-boundary companion to the compliance control-mapping guide — the framework supplies the enforcement point, identity, and telemetry; the deployment supplies transport identity and segmentation. | `0.5.26-alpha.2` | shipped |
276
277
 
277
278
  ---
278
279
 
package/bin/cli CHANGED
@@ -55,6 +55,7 @@ async function onExec() {
55
55
  , settings = null
56
56
  , hostname = os.hostname() // by default
57
57
  , hostV4 = null
58
+ , bindHost = null
58
59
  , mqPort = null
59
60
  , settingsPath = null
60
61
  , err = null
@@ -122,6 +123,13 @@ async function onExec() {
122
123
  continue;
123
124
  }
124
125
 
126
+ if ( isFrameworkScopedCmd && /^\-\-bind\-host/.test(params[p]) ) {
127
+ let bind = params[p].split(/\=/)[1];
128
+ setEnvVar('GINA_BIND_HOST', bind);// jshint ignore:line
129
+ isUpdateRequired = true;
130
+ continue;
131
+ }
132
+
125
133
  if ( isFrameworkScopedCmd && /^\-\-hostname/.test(params[p]) ) {
126
134
  hostname = params[p].split(/\=/)[1];
127
135
  setEnvVar('GINA_HOSTNAME', hostname);// jshint ignore:line
@@ -185,6 +193,7 @@ async function onExec() {
185
193
  if (_hasUnresolved(settings['mq_port'])) { settings['mq_port'] = 8125; }
186
194
  if (_hasUnresolved(settings['port'])) { settings['port'] = 8124; }
187
195
  if (_hasUnresolved(settings['host_v4'])) { settings['host_v4'] = '127.0.0.1'; }
196
+ if (_hasUnresolved(settings['bind_host'])) { settings['bind_host'] = '127.0.0.1'; }
188
197
  if (_hasUnresolved(settings['hostname'])) { settings['hostname'] = undefined; }
189
198
 
190
199
  setEnvVar('GINA_LOG_LEVEL', settings['log_level']);// jshint ignore:line
@@ -238,6 +247,12 @@ async function onExec() {
238
247
  }
239
248
  hostV4 = getEnvVar('GINA_HOST_V4') || settings['host_v4'] || '127.0.0.1';// jshint ignore:line
240
249
  mqPort = getEnvVar('GINA_MQ_PORT')|| settings['mq_port'] || 8125;// jshint ignore:line
250
+ // Bind address for the framework control sockets (command socket + MQ
251
+ // listener). Deliberately independent of `host_v4`, which is the
252
+ // address CLIENTS connect to: a workstation may legitimately point
253
+ // `host_v4` at another machine, and inheriting that as a bind address
254
+ // would make the local daemon fail to start (EADDRNOTAVAIL).
255
+ bindHost = getEnvVar('GINA_BIND_HOST') || settings['bind_host'] || '127.0.0.1';// jshint ignore:line
241
256
 
242
257
  if (!isUpdateRequired) {
243
258
  setEnvVar('GINA_HOST_V4', settings['host_v4']);// jshint ignore:line
@@ -266,7 +281,10 @@ async function onExec() {
266
281
  if ( /(gina\/bin\/cli|gina\/\/bin\/gina)$/.test(process.argv[1]) ) {
267
282
 
268
283
  var MQListener = require(frameworkPath + '/lib/logger/src/containers/mq/listener.js');
269
- var mqListener = await new MQListener({ port: mqPort, host: hostV4 });
284
+ // The listener reads `opt.hostV4` (see listener.js); passing `host`
285
+ // left it undefined, which binds every interface. Bind the control
286
+ // plane to `bind_host` (loopback by default) like the command socket.
287
+ var mqListener = await new MQListener({ port: mqPort, hostV4: bindHost });
270
288
  // required for tail command
271
289
  var mqPortFile = getTmpDir() + '/mq-listener-v'+ version +'.port';// jshint ignore:line
272
290
  console.debug('Writting: '+ mqPortFile);
@@ -323,6 +341,7 @@ async function onExec() {
323
341
 
324
342
  settings['mq_port'] = getEnvVar('GINA_MQ_PORT') || settings['mq_port'] || null;// jshint ignore:line
325
343
  settings['host_v4'] = getEnvVar('GINA_HOST_V4') || settings['host_v4'] || null;// jshint ignore:line
344
+ settings['bind_host'] = getEnvVar('GINA_BIND_HOST') || settings['bind_host'] || null;// jshint ignore:line
326
345
  settings['hostname'] = getEnvVar('GINA_HOSTNAME') || settings['hostname'] || null;// jshint ignore:line
327
346
  generator.createFileFromDataSync(settings, settingsPath);// jshint ignore:line
328
347
  }
@@ -391,6 +410,7 @@ async function onExec() {
391
410
  homedir : home,
392
411
  port : port,
393
412
  hostV4 : hostV4,
413
+ bindHost : bindHost,
394
414
  mqPort : mqPort,
395
415
  hostname : hostname,
396
416
  debugPort : debugPort,
@@ -418,6 +438,7 @@ async function onExec() {
418
438
  homedir : home,
419
439
  port : port,
420
440
  hostV4 : hostV4,
441
+ bindHost : bindHost,
421
442
  mqPort : mqPort,
422
443
  hostname : hostname,
423
444
  debugPort : debugPort,
package/bin/cmd CHANGED
@@ -25,6 +25,10 @@ function Cmd(opt, runOffine) {
25
25
  local.hostV4 = opt.hostV4;
26
26
  local.mqPort = opt.mqPort;
27
27
  local.port = opt.port;
28
+ // Bind address for the framework command socket. Defaults to loopback
29
+ // here as well as at the resolution site (bin/cli), so a caller that
30
+ // omits the key can never widen the bind by accident.
31
+ local.bindHost = opt.bindHost || '127.0.0.1';
28
32
 
29
33
  lib = require(local.frameworkPath + "/lib");
30
34
 
@@ -145,7 +149,13 @@ function Cmd(opt, runOffine) {
145
149
  }
146
150
  });
147
151
 
148
- framework.listen(local.port, function() { //'listening' listener
152
+ // The command socket is a local control plane: a connection to it
153
+ // executes a framework CLI command. `listen(port, cb)` with no host
154
+ // argument binds every interface, so the bind host is passed
155
+ // explicitly and defaults to loopback (`bind_host` / GINA_BIND_HOST).
156
+ // Widening it is a deliberate opt-in, the same way a bundle's
157
+ // `--http-host` is.
158
+ framework.listen(local.port, local.bindHost, function() { //'listening' listener
149
159
 
150
160
  //First time launch.
151
161
  lib.cmd.load({
package/bin/gina-init CHANGED
@@ -368,6 +368,7 @@ var settingsOut = {
368
368
  debug_port : '9229',
369
369
  mq_port : '8125',
370
370
  host_v4 : '127.0.0.1',
371
+ bind_host : '127.0.0.1',
371
372
  hostname : os.hostname(),
372
373
  user : userInfo.username,
373
374
  uid : String(userInfo.uid),
@@ -0,0 +1 @@
1
+ 0.5.26
@@ -2154,13 +2154,15 @@ define("requireLib", function(){});
2154
2154
  * Works in Node.js (CommonJS) and browser (AMD / GFF) contexts.
2155
2155
  *
2156
2156
  * - Objects are merged recursively.
2157
- * - Arrays and primitives from `source` overwrite `target` (unless `override=false`).
2158
- * - Pass `true` as the last argument to force overwrite of existing keys.
2157
+ * - Missing keys are always filled from `source`; on a CONFLICTING key the
2158
+ * `target` value is preserved by default.
2159
+ * - Pass `true` as the last argument (`override`) to make `source` win instead.
2159
2160
  *
2160
2161
  * @example
2161
2162
  * var merge = require('lib/merge');
2162
2163
  * var result = merge({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }
2163
- * merge({ a: 1 }, { a: 9 }, false); // { a: 1 } — target wins when override=false
2164
+ * merge({ a: 1 }, { a: 9 }); // { a: 1 } — default: target wins on conflicts
2165
+ * merge({ a: 1 }, { a: 9 }, true); // { a: 9 } — override: source wins
2164
2166
  */
2165
2167
 
2166
2168
  /**
@@ -2186,13 +2188,15 @@ function Merge() {
2186
2188
  *
2187
2189
  * @param {object|Array} target - Target (base) object or array
2188
2190
  * @param {object|Array} source - Source object or array to merge into target
2189
- * @param {boolean} [override=true] - When `false`, existing target keys are preserved
2191
+ * @param {boolean} [override=false] - Pass `true` to let `source` overwrite existing target keys; by default they are preserved
2190
2192
  * @returns {object|Array} Merged result (mutates and returns `target`)
2191
2193
  *
2192
2194
  * @example
2193
2195
  * merge({ a: 1 }, { b: 2 }) // { a: 1, b: 2 }
2194
- * merge({ a: 1 }, { a: 9 }, false) // { a: 1 }
2195
- * merge([1, 2], [3, 4]) // [3, 4]
2196
+ * merge({ a: 1 }, { a: 9 }) // { a: 1 } — default: target wins
2197
+ * merge({ a: 1 }, { a: 9 }, true) // { a: 9 }
2198
+ * merge([1, 2], [3, 4]) // [1, 2, 3, 4]
2199
+ * merge([1, 2], [3, 4], true) // [3, 4]
2196
2200
  */
2197
2201
  var browse = function (_target, _source) {
2198
2202
 
@@ -1940,7 +1940,14 @@ function Config(opt, contextResetNeeded) {
1940
1940
  url: '/_status',
1941
1941
  method: 'GET',
1942
1942
  param: {
1943
- control: 'getBundleStatus'
1943
+ control: 'getBundleStatus',
1944
+ // #COMPLY10 — the framework-injected routes carry no authorization keys,
1945
+ // so `auth.requireAuthByDefault` would gate every one of them and a
1946
+ // bundle would lock itself out by flipping one settings key. Marking
1947
+ // them public preserves today's behaviour when a bundle opts into the
1948
+ // mode; a bundle that WANTS one of them gated declares its own route at
1949
+ // the same url. This is a monitoring surface, so it stays reachable.
1950
+ public: true
1944
1951
  },
1945
1952
  scopes: [ ''+ scope ]
1946
1953
  };
@@ -1955,7 +1962,12 @@ function Config(opt, contextResetNeeded) {
1955
1962
  param: {
1956
1963
  control: 'renderCustomError',
1957
1964
  // default data : will be fed on error
1958
- error: {}
1965
+ error: {},
1966
+ // #COMPLY10 — the error RENDERER. Gating it would mean an error is
1967
+ // rendered through a route that itself denies, so a bundle under
1968
+ // deny-by-default could not render its own error pages. Exempt
1969
+ // unconditionally.
1970
+ public: true
1959
1971
  },
1960
1972
  scopes: [ ''+ scope ]
1961
1973
  };
@@ -1975,7 +1987,13 @@ function Config(opt, contextResetNeeded) {
1975
1987
  control: "redirect",
1976
1988
  ignoreWebRoot: true,
1977
1989
  path: wroot,
1978
- code: 302
1990
+ code: 302,
1991
+ // #COMPLY10 — with `webrootAutoredirect` this route's url becomes
1992
+ // `'/,'+ …`, i.e. it also matches the SITE ROOT, across
1993
+ // GET/POST/PUT/DELETE/HEAD. Gating it would make `/` itself deny,
1994
+ // so deny-by-default would take the app's entry point offline. A
1995
+ // redirect-control route does run the gate, so this is not theoretical.
1996
+ public: true
1979
1997
  },
1980
1998
  scopes: [ ''+ scope ],
1981
1999
  bundle: bundle,
@@ -2002,7 +2020,11 @@ function Config(opt, contextResetNeeded) {
2002
2020
  "method": "POST",
2003
2021
  "param": {
2004
2022
  "control": "uploadToTmp",
2005
- "title": "Upload file"
2023
+ "title": "Upload file",
2024
+ // #COMPLY10 — preserves today's behaviour under the mode. A
2025
+ // deny-by-default bundle that wants uploads authenticated
2026
+ // declares its own POST route at this url.
2027
+ "public": true
2006
2028
  },
2007
2029
  "scopes": [ ""+ scope ]
2008
2030
  }
@@ -2015,7 +2037,9 @@ function Config(opt, contextResetNeeded) {
2015
2037
  "method": "POST",
2016
2038
  "param": {
2017
2039
  "control": "deleteFromTmp",
2018
- "title": "Delete uploaded file"
2040
+ "title": "Delete uploaded file",
2041
+ // #COMPLY10 — see `upload-to-tmp-xml` above.
2042
+ "public": true
2019
2043
  },
2020
2044
  "scopes": [ ""+ scope ]
2021
2045
  }
@@ -408,6 +408,17 @@ function Couchbase(conn, infos) {
408
408
  } catch (parseErr) {
409
409
  console.warn('[CONNECTOR] @options parse error in .sql file: ' + parseErr.message);
410
410
  }
411
+ } else if ( /\@options/.test(queryString) ) {
412
+ // #B155 — the file SAYS `@options` but the annotation regex above matched
413
+ // nothing, so the whole annotation is a silent no-op. The regex demands
414
+ // `@options { … }` (single space, braces) — the historical docs taught a
415
+ // brace-less `key=value` form, and a double space before the brace misses
416
+ // too. Warn with the exact expected shape. (A prose mention of `@options`
417
+ // inside a comment also lands here — accepted: a spurious warn is cheaper
418
+ // than a silently-dead annotation.)
419
+ console.warn('[CONNECTOR] found `@options` but could not parse a brace-delimited object — '
420
+ + 'annotation ignored. Write it as: @options { consistency: "request_plus" }\n'
421
+ + 'Found on: ' + queryString.substring(0, 80));
411
422
  }
412
423
  optionsArr = null;
413
424
 
@@ -711,6 +722,16 @@ function Couchbase(conn, infos) {
711
722
  if (o == 'consistency') continue;
712
723
  queryOptions[o] = options[o];
713
724
  }
725
+ } else if ( options && Object.keys(options).length ) {
726
+ // #B155 — a parsed `@options` with no `consistency` key never reaches
727
+ // the SDK: the passthrough above is gated on `consistency`, so every
728
+ // other key is dropped. Warn instead of silently ignoring; the gate
729
+ // itself stays (un-gating would make historically-inert options
730
+ // suddenly live for every consumer). An empty `@options {}` drops
731
+ // nothing and stays quiet.
732
+ console.warn('[CONNECTOR] @options is missing a `consistency` key — ignoring: '
733
+ + Object.keys(options).join(', ')
734
+ + '. Add e.g. "consistency": "not_bounded" alongside them to apply.\nFound on: '+ queryStatement);
714
735
  }
715
736
 
716
737
 
@@ -986,8 +1007,18 @@ function Couchbase(conn, infos) {
986
1007
  // never fired and the request hung forever. Build a usable error
987
1008
  // on BOTH paths (forwarding the raw error preserves its
988
1009
  // code/errno for downstream classification) and always settle.
1010
+ //
1011
+ // #B153 residual — synthesize ONLY when there is envelope text to
1012
+ // surface. The node binding marshals first_error_code /
1013
+ // first_error_message onto EVERY query error, so a CLIENT-side SDK
1014
+ // timeout arrives with a defined-but-EMPTY message; building
1015
+ // `new Error('')` from it destroyed the typed class name
1016
+ // (Un/AmbiguousTimeoutError) the classifier matches on, and a
1017
+ // retryable timeout was reported permanent. Raw-forwarding is
1018
+ // lossless here: the raw error keeps `.cause`, so even an
1019
+ // empty-message server envelope still classifies off the code table.
989
1020
  var error;
990
- if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' ) {
1021
+ if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' && err.cause.first_error_message !== '' ) {
991
1022
  error = new Error(err.cause.first_error_message);
992
1023
  error.stack = trigger +'\n'+ err.cause.http_body;
993
1024
  error.cause = err.cause;
@@ -1037,8 +1068,18 @@ function Couchbase(conn, infos) {
1037
1068
  // never fired and the request hung forever. Build a usable error
1038
1069
  // on BOTH paths (forwarding the raw error preserves its
1039
1070
  // code/errno for downstream classification) and always settle.
1071
+ //
1072
+ // #B153 residual — synthesize ONLY when there is envelope text to
1073
+ // surface. The node binding marshals first_error_code /
1074
+ // first_error_message onto EVERY query error, so a CLIENT-side SDK
1075
+ // timeout arrives with a defined-but-EMPTY message; building
1076
+ // `new Error('')` from it destroyed the typed class name
1077
+ // (Un/AmbiguousTimeoutError) the classifier matches on, and a
1078
+ // retryable timeout was reported permanent. Raw-forwarding is
1079
+ // lossless here: the raw error keeps `.cause`, so even an
1080
+ // empty-message server envelope still classifies off the code table.
1040
1081
  var error;
1041
- if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' ) {
1082
+ if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' && err.cause.first_error_message !== '' ) {
1042
1083
  error = new Error(err.cause.first_error_message);
1043
1084
  error.stack = trigger +'\n'+ err.cause.http_body;
1044
1085
  error.cause = err.cause;
@@ -1301,8 +1342,12 @@ function Couchbase(conn, infos) {
1301
1342
  // err.cause.first_error_message on it threw a swallowed TypeError so
1302
1343
  // self.emit never fired and the request hung. Emit a usable error on
1303
1344
  // BOTH paths (the raw error preserves its code/errno).
1345
+ // #B153 residual — the empty-message clause: a CLIENT-side SDK timeout
1346
+ // carries a defined-but-EMPTY first_error_message, so synthesizing from it
1347
+ // destroyed the typed class name the classifier matches on. Synthesize only
1348
+ // when there is envelope text; raw-forwarding keeps `.cause` either way.
1304
1349
  var error;
1305
- if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' ) {
1350
+ if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' && err.cause.first_error_message !== '' ) {
1306
1351
  error = new Error(err.cause.first_error_message);
1307
1352
  error.stack = trigger +'\n'+ err.cause.http_body;
1308
1353
  error.cause = err.cause;
@@ -47,6 +47,10 @@ async function writeCache(bundle, opt, jsonContent, req, res, cacheIsEnabled, th
47
47
  ! req.routing.cache
48
48
  ||
49
49
  ! /^true$/i.test(cacheIsEnabled)
50
+ ||
51
+ // #B158 — a gated route is never stored: the key carries no principal and
52
+ // both serve points run before the gate. Full rationale on isRouteGated.
53
+ lib.authzGate.isRouteGated(req)
50
54
  ) {
51
55
  return;
52
56
  }
@@ -880,6 +880,10 @@ async function writeCache(local, self, bundle, opt, htmlContent, req, res) {
880
880
  ! req.routing.cache
881
881
  ||
882
882
  String(self.serverInstance._cacheIsEnabled).toLowerCase() !== 'true'
883
+ ||
884
+ // #B158 — a gated route is never stored: the key carries no principal and
885
+ // both serve points run before the gate. Full rationale on isRouteGated.
886
+ libRef.authzGate.isRouteGated(req)
883
887
  ) {
884
888
  return;
885
889
  }
@@ -49,6 +49,10 @@ async function writeCache(bundle, opt, htmlContent, req, res, cacheIsEnabled, th
49
49
  // replaced: /^true$/i.test() (#P6); flag threaded as a param — module scope
50
50
  // has no render()-scoped bindings (see the #INS10 note at the top of this file)
51
51
  String(cacheIsEnabled).toLowerCase() !== 'true'
52
+ ||
53
+ // #B158 — a gated route is never stored: the key carries no principal and
54
+ // both serve points run before the gate. Full rationale on isRouteGated.
55
+ lib.authzGate.isRouteGated(req)
52
56
  ) {
53
57
  return;
54
58
  }
@@ -339,6 +339,18 @@ function ServerEngineClass(options) {
339
339
  // it inherits the strip.
340
340
  if ( clean.param && typeof(clean.param) == 'object' ) {
341
341
  const { requireAuth, roles, policy, ...cleanParam } = clean.param;
342
+ // #COMPLY10 — `public` is an authorization key too: under deny-by-default
343
+ // the set of public routes IS the authentication surface, so serving the
344
+ // markers hands an anonymous client a free recon map of what it can reach.
345
+ // Stripped with `delete` rather than by joining the destructuring above,
346
+ // for two independent reasons: `public` is a strict-mode RESERVED WORD, so
347
+ // the bare binding form is a SyntaxError (only a renamed binding compiles);
348
+ // and a separate statement leaves the destructuring line byte-identical to
349
+ // what the #COMPLY1 tests pin. The `#P21`/`#P22` note at the top of this
350
+ // loop moved AWAY from `delete` for V8 hidden-class reasons on hot paths —
351
+ // this loop runs once at boot over a bounded route table, so that rationale
352
+ // does not apply here.
353
+ delete cleanParam.public;
342
354
  clean.param = cleanParam;
343
355
  }
344
356
  _routing[_routingKeys[ri]] = clean;