gina 0.5.18 → 0.5.19

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 (544) hide show
  1. package/CHANGELOG.md +22 -1
  2. package/README.md +10 -15
  3. package/ROADMAP.md +5 -2
  4. package/bin/cli +1 -0
  5. package/framework/v0.5.19/VERSION +1 -0
  6. package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.js +53 -8
  7. package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +466 -465
  8. package/framework/v0.5.19/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  9. package/framework/v0.5.19/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  10. package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.js +198 -34
  11. package/framework/{v0.5.18 → v0.5.19}/core/gna.js +14 -1
  12. package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/src/main.js +19 -0
  13. package/framework/{v0.5.18 → v0.5.19}/core/router.js +20 -0
  14. package/framework/{v0.5.18 → v0.5.19}/core/server.isaac.js +26 -2
  15. package/framework/{v0.5.18 → v0.5.19}/core/server.js +277 -9
  16. package/framework/{v0.5.18 → v0.5.19}/core/template/conf/settings.json +53 -0
  17. package/framework/v0.5.19/lib/audit/package.json +12 -0
  18. package/framework/v0.5.19/lib/audit/src/main.js +434 -0
  19. package/framework/v0.5.19/lib/audit-store.js +91 -0
  20. package/framework/v0.5.19/lib/authz-gate/package.json +7 -0
  21. package/framework/v0.5.19/lib/authz-gate/src/main.js +581 -0
  22. package/framework/v0.5.19/lib/cmd/container/arguments.json +6 -0
  23. package/framework/v0.5.19/lib/cmd/container/help.js +46 -0
  24. package/framework/v0.5.19/lib/cmd/container/help.txt +86 -0
  25. package/framework/v0.5.19/lib/cmd/container/man.js +6 -0
  26. package/framework/v0.5.19/lib/cmd/container/ps.js +219 -0
  27. package/framework/v0.5.19/lib/cmd/container/stop.js +258 -0
  28. package/framework/{v0.5.18 → v0.5.19}/lib/cmd/gina.1.md +1 -0
  29. package/framework/{v0.5.18 → v0.5.19}/lib/cmd/helper.js +7 -1
  30. package/framework/v0.5.19/lib/cmd/image/_host.js +160 -0
  31. package/framework/{v0.5.18 → v0.5.19}/lib/cmd/image/arguments.json +7 -1
  32. package/framework/{v0.5.18 → v0.5.19}/lib/cmd/image/build.js +2 -48
  33. package/framework/v0.5.19/lib/cmd/image/help.txt +173 -0
  34. package/framework/v0.5.19/lib/cmd/image/list.js +183 -0
  35. package/framework/v0.5.19/lib/cmd/image/rm.js +150 -0
  36. package/framework/v0.5.19/lib/cmd/image/run.js +601 -0
  37. package/framework/{v0.5.18 → v0.5.19}/lib/image-build/src/main.js +483 -7
  38. package/framework/{v0.5.18 → v0.5.19}/lib/index.js +20 -0
  39. package/framework/{v0.5.18 → v0.5.19}/lib/routing/src/main.js +34 -8
  40. package/framework/{v0.5.18 → v0.5.19}/package.json +1 -1
  41. package/gna.js +4 -4
  42. package/llms.txt +28 -56
  43. package/package.json +3 -3
  44. package/types/index.d.ts +28 -4
  45. package/framework/v0.5.18/VERSION +0 -1
  46. package/framework/v0.5.18/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  47. package/framework/v0.5.18/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  48. package/framework/v0.5.18/lib/cmd/image/help.txt +0 -72
  49. /package/framework/{v0.5.18 → v0.5.19}/AUTHORS +0 -0
  50. /package/framework/{v0.5.18 → v0.5.19}/LICENSE +0 -0
  51. /package/framework/{v0.5.18 → v0.5.19}/core/asset/html/nolayout.html +0 -0
  52. /package/framework/{v0.5.18 → v0.5.19}/core/asset/html/static.html +0 -0
  53. /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/android-chrome-192x192.png +0 -0
  54. /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/android-chrome-512x512.png +0 -0
  55. /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/apple-touch-icon.png +0 -0
  56. /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/favicon-16x16.png +0 -0
  57. /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/favicon-32x32.png +0 -0
  58. /package/framework/{v0.5.18 → v0.5.19}/core/asset/img/favicon.ico +0 -0
  59. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/README.md +0 -0
  60. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  61. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  62. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  63. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  64. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  65. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  66. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  67. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  68. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  69. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  70. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  71. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  72. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  73. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  74. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  75. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  76. /package/framework/{v0.5.18 → v0.5.19}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  77. /package/framework/{v0.5.18 → v0.5.19}/core/config.js +0 -0
  78. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/ai/index.js +0 -0
  79. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/ai/lib/connector.js +0 -0
  80. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/index.js +0 -0
  81. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/connector.js +0 -0
  82. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  83. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  84. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/n1ql.js +0 -0
  85. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/session-store.js +0 -0
  86. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  87. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  88. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/index.js +0 -0
  89. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/lib/connector.js +0 -0
  90. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/lib/job-store.js +0 -0
  91. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  92. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mongodb/lib/session-store.js +0 -0
  93. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mysql/index.js +0 -0
  94. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/mysql/lib/connector.js +0 -0
  95. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/postgresql/index.js +0 -0
  96. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/postgresql/lib/connector.js +0 -0
  97. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/index.js +0 -0
  98. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/lib/connector.js +0 -0
  99. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/lib/job-store.js +0 -0
  100. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/lib/render-cache-store.js +0 -0
  101. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/redis/lib/session-store.js +0 -0
  102. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/scylladb/index.js +0 -0
  103. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/scylladb/lib/connector.js +0 -0
  104. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/scylladb/lib/session-store.js +0 -0
  105. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sql-parser.js +0 -0
  106. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sqlite/index.js +0 -0
  107. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sqlite/lib/connector.js +0 -0
  108. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sqlite/lib/job-store.js +0 -0
  109. /package/framework/{v0.5.18 → v0.5.19}/core/connectors/sqlite/lib/session-store.js +0 -0
  110. /package/framework/{v0.5.18 → v0.5.19}/core/content.encoding +0 -0
  111. /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.framework.js +0 -0
  112. /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-json.js +0 -0
  113. /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-nunjucks-async.js +0 -0
  114. /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-nunjucks.js +0 -0
  115. /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-stream.js +0 -0
  116. /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-swig-async.js +0 -0
  117. /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-swig.js +0 -0
  118. /package/framework/{v0.5.18 → v0.5.19}/core/controller/controller.render-v1.js +0 -0
  119. /package/framework/{v0.5.18 → v0.5.19}/core/controller/index.js +0 -0
  120. /package/framework/{v0.5.18 → v0.5.19}/core/controller/inspector-window-emit.js +0 -0
  121. /package/framework/{v0.5.18 → v0.5.19}/core/controller/release-banner.js +0 -0
  122. /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/LICENSE +0 -0
  123. /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/README.md +0 -0
  124. /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  125. /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  126. /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  127. /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  128. /package/framework/{v0.5.18 → v0.5.19}/core/deps/busboy-1.6.0/package.json +0 -0
  129. /package/framework/{v0.5.18 → v0.5.19}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  130. /package/framework/{v0.5.18 → v0.5.19}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  131. /package/framework/{v0.5.18 → v0.5.19}/core/deps/streamsearch-1.1.0/package.json +0 -0
  132. /package/framework/{v0.5.18 → v0.5.19}/core/dev/index.js +0 -0
  133. /package/framework/{v0.5.18 → v0.5.19}/core/dev/lib/class.js +0 -0
  134. /package/framework/{v0.5.18 → v0.5.19}/core/dev/lib/factory.js +0 -0
  135. /package/framework/{v0.5.18 → v0.5.19}/core/dev/lib/tools.js +0 -0
  136. /package/framework/{v0.5.18 → v0.5.19}/core/locales/README.md +0 -0
  137. /package/framework/{v0.5.18 → v0.5.19}/core/locales/currency.json +0 -0
  138. /package/framework/{v0.5.18 → v0.5.19}/core/locales/dist/language/en.json +0 -0
  139. /package/framework/{v0.5.18 → v0.5.19}/core/locales/dist/language/fr.json +0 -0
  140. /package/framework/{v0.5.18 → v0.5.19}/core/locales/dist/region/en.json +0 -0
  141. /package/framework/{v0.5.18 → v0.5.19}/core/locales/dist/region/fr.json +0 -0
  142. /package/framework/{v0.5.18 → v0.5.19}/core/locales/index.js +0 -0
  143. /package/framework/{v0.5.18 → v0.5.19}/core/mime.types +0 -0
  144. /package/framework/{v0.5.18 → v0.5.19}/core/model/entity.js +0 -0
  145. /package/framework/{v0.5.18 → v0.5.19}/core/model/index.js +0 -0
  146. /package/framework/{v0.5.18 → v0.5.19}/core/model/template/entityFactory.js +0 -0
  147. /package/framework/{v0.5.18 → v0.5.19}/core/model/template/index.js +0 -0
  148. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/README.md +0 -0
  149. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/index.js +0 -0
  150. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/csrf/README.md +0 -0
  151. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/csrf/package.json +0 -0
  152. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/csrf/src/main.js +0 -0
  153. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/README.md +0 -0
  154. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coep/README.md +0 -0
  155. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coep/package.json +0 -0
  156. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  157. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coop/README.md +0 -0
  158. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coop/package.json +0 -0
  159. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  160. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/corp/README.md +0 -0
  161. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/corp/package.json +0 -0
  162. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  163. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/csp/README.md +0 -0
  164. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/csp/package.json +0 -0
  165. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  166. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  167. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  168. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  169. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  170. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  171. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  172. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  173. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  174. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  175. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/package.json +0 -0
  176. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  177. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  178. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  179. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/src/main.js +0 -0
  180. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  181. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  182. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  183. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  184. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  185. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  186. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  187. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  188. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  189. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  190. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  191. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  192. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  193. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  194. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  195. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  196. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  197. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  198. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/session/README.md +0 -0
  199. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/session/package.json +0 -0
  200. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/session/src/main.js +0 -0
  201. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/storage/README.md +0 -0
  202. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/storage/build.json +0 -0
  203. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/storage/package.json +0 -0
  204. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/storage/src/main.js +0 -0
  205. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/README.md +0 -0
  206. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/build.json +0 -0
  207. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/package.json +0 -0
  208. /package/framework/{v0.5.18 → v0.5.19}/core/plugins/lib/validator/src/form-validator.js +0 -0
  209. /package/framework/{v0.5.18 → v0.5.19}/core/server.express.js +0 -0
  210. /package/framework/{v0.5.18 → v0.5.19}/core/status.codes +0 -0
  211. /package/framework/{v0.5.18 → v0.5.19}/core/template/_gitignore +0 -0
  212. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/app.json +0 -0
  213. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  214. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/routing.json +0 -0
  215. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/settings.json +0 -0
  216. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  217. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/templates.json +0 -0
  218. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  219. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  220. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  221. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  222. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/index.js +0 -0
  223. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle/locales/en.json +0 -0
  224. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  225. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  226. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  227. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  228. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  229. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  230. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  231. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  232. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/readme.md +0 -0
  233. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_public/sw.js +0 -0
  234. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  235. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  236. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  237. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  238. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  239. /package/framework/{v0.5.18 → v0.5.19}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  240. /package/framework/{v0.5.18 → v0.5.19}/core/template/command/gina.bat.tpl +0 -0
  241. /package/framework/{v0.5.18 → v0.5.19}/core/template/command/gina.tpl +0 -0
  242. /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/env.json +0 -0
  243. /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/manifest.json +0 -0
  244. /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/package.json +0 -0
  245. /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/statics.json +0 -0
  246. /package/framework/{v0.5.18 → v0.5.19}/core/template/conf/templates.json +0 -0
  247. /package/framework/{v0.5.18 → v0.5.19}/core/template/error/client/json/401.json +0 -0
  248. /package/framework/{v0.5.18 → v0.5.19}/core/template/error/client/json/403.json +0 -0
  249. /package/framework/{v0.5.18 → v0.5.19}/core/template/error/client/json/404.json +0 -0
  250. /package/framework/{v0.5.18 → v0.5.19}/core/template/error/server/html/50x.html +0 -0
  251. /package/framework/{v0.5.18 → v0.5.19}/core/template/error/server/json/500.json +0 -0
  252. /package/framework/{v0.5.18 → v0.5.19}/core/template/error/server/json/503.json +0 -0
  253. /package/framework/{v0.5.18 → v0.5.19}/core/template/extensions/logger/config.json +0 -0
  254. /package/framework/{v0.5.18 → v0.5.19}/helpers/console.js +0 -0
  255. /package/framework/{v0.5.18 → v0.5.19}/helpers/context.js +0 -0
  256. /package/framework/{v0.5.18 → v0.5.19}/helpers/data/LICENSE +0 -0
  257. /package/framework/{v0.5.18 → v0.5.19}/helpers/data/README.md +0 -0
  258. /package/framework/{v0.5.18 → v0.5.19}/helpers/data/package.json +0 -0
  259. /package/framework/{v0.5.18 → v0.5.19}/helpers/data/src/main.js +0 -0
  260. /package/framework/{v0.5.18 → v0.5.19}/helpers/dateFormat.js +0 -0
  261. /package/framework/{v0.5.18 → v0.5.19}/helpers/index.js +0 -0
  262. /package/framework/{v0.5.18 → v0.5.19}/helpers/json/LICENSE +0 -0
  263. /package/framework/{v0.5.18 → v0.5.19}/helpers/json/README.md +0 -0
  264. /package/framework/{v0.5.18 → v0.5.19}/helpers/json/package.json +0 -0
  265. /package/framework/{v0.5.18 → v0.5.19}/helpers/json/src/main.js +0 -0
  266. /package/framework/{v0.5.18 → v0.5.19}/helpers/path.js +0 -0
  267. /package/framework/{v0.5.18 → v0.5.19}/helpers/plugins/README.md +0 -0
  268. /package/framework/{v0.5.18 → v0.5.19}/helpers/plugins/package.json +0 -0
  269. /package/framework/{v0.5.18 → v0.5.19}/helpers/plugins/src/api-error.js +0 -0
  270. /package/framework/{v0.5.18 → v0.5.19}/helpers/plugins/src/main.js +0 -0
  271. /package/framework/{v0.5.18 → v0.5.19}/helpers/prototypes.js +0 -0
  272. /package/framework/{v0.5.18 → v0.5.19}/helpers/task.js +0 -0
  273. /package/framework/{v0.5.18 → v0.5.19}/helpers/text.js +0 -0
  274. /package/framework/{v0.5.18 → v0.5.19}/lib/admin/package.json +0 -0
  275. /package/framework/{v0.5.18 → v0.5.19}/lib/admin/src/main.js +0 -0
  276. /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/README.md +0 -0
  277. /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/build.json +0 -0
  278. /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/package.json +0 -0
  279. /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/src/dep/jszip.min.js +0 -0
  280. /package/framework/{v0.5.18 → v0.5.19}/lib/archiver/src/main.js +0 -0
  281. /package/framework/{v0.5.18 → v0.5.19}/lib/async/package.json +0 -0
  282. /package/framework/{v0.5.18 → v0.5.19}/lib/async/src/main.js +0 -0
  283. /package/framework/{v0.5.18 → v0.5.19}/lib/cache/README.md +0 -0
  284. /package/framework/{v0.5.18 → v0.5.19}/lib/cache/build.json +0 -0
  285. /package/framework/{v0.5.18 → v0.5.19}/lib/cache/package.json +0 -0
  286. /package/framework/{v0.5.18 → v0.5.19}/lib/cache/src/main.js +0 -0
  287. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/aliases.json +0 -0
  288. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/add.js +0 -0
  289. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/arguments.json +0 -0
  290. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/build.js +0 -0
  291. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/copy.js +0 -0
  292. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/cp.js +0 -0
  293. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/help.js +0 -0
  294. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/help.txt +0 -0
  295. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  296. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/list.js +0 -0
  297. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/man.js +0 -0
  298. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/mcp-start.js +0 -0
  299. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/mcp.js +0 -0
  300. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/oas.js +0 -0
  301. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/openapi.js +0 -0
  302. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/remove.js +0 -0
  303. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/rename.js +0 -0
  304. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/restart.js +0 -0
  305. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/rm.js +0 -0
  306. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/start.js +0 -0
  307. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/status.js +0 -0
  308. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/stop.js +0 -0
  309. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/bundle/types.js +0 -0
  310. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/cache/arguments.json +0 -0
  311. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/cache/clear.js +0 -0
  312. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/cache/help.txt +0 -0
  313. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/cache/stats.js +0 -0
  314. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/add.js +0 -0
  315. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/arguments.json +0 -0
  316. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/help.js +0 -0
  317. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/help.txt +0 -0
  318. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/infer.js +0 -0
  319. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/list.js +0 -0
  320. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/migrate.js +0 -0
  321. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/models.js +0 -0
  322. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/remove.js +0 -0
  323. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/rm.js +0 -0
  324. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/connector/test.js +0 -0
  325. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/add.js +0 -0
  326. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/get.js +0 -0
  327. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/help.js +0 -0
  328. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/help.txt +0 -0
  329. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/link-dev.js +0 -0
  330. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/list.js +0 -0
  331. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/remove.js +0 -0
  332. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/rm.js +0 -0
  333. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/set.js +0 -0
  334. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/unset.js +0 -0
  335. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/env/use.js +0 -0
  336. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/add.js +0 -0
  337. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/arguments.json +0 -0
  338. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/build.js +0 -0
  339. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/dot.js +0 -0
  340. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/get.js +0 -0
  341. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/help.js +0 -0
  342. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/help.txt +0 -0
  343. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/init.js +0 -0
  344. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/link-node-modules.js +0 -0
  345. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/link.js +0 -0
  346. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/list.js +0 -0
  347. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/man.js +0 -0
  348. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/msg.json +0 -0
  349. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/open.js +0 -0
  350. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/remove.js +0 -0
  351. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/reset.js +0 -0
  352. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/restart.js +0 -0
  353. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/set.js +0 -0
  354. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/start.js +0 -0
  355. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/status.js +0 -0
  356. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/stop.js +0 -0
  357. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/tail.js +0 -0
  358. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/update.js +0 -0
  359. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/framework/version.js +0 -0
  360. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/gina-dev.1.md +0 -0
  361. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/gina-framework.1.md +0 -0
  362. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/add.js +0 -0
  363. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/arguments.json +0 -0
  364. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/export.js +0 -0
  365. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/help.js +0 -0
  366. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/help.txt +0 -0
  367. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/import.js +0 -0
  368. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/i18n/scan.js +0 -0
  369. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/image/help.js +0 -0
  370. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/image/man.js +0 -0
  371. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/index.js +0 -0
  372. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/inspector/help.js +0 -0
  373. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/inspector/help.txt +0 -0
  374. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/inspector/open.js +0 -0
  375. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/man-render.js +0 -0
  376. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/arguments.json +0 -0
  377. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/help.js +0 -0
  378. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/help.txt +0 -0
  379. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/kill.js +0 -0
  380. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/minion/list.js +0 -0
  381. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/msg.json +0 -0
  382. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/help.js +0 -0
  383. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/help.txt +0 -0
  384. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/inc/scan.js +0 -0
  385. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/list.js +0 -0
  386. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/reset.js +0 -0
  387. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/port/set.js +0 -0
  388. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/add.js +0 -0
  389. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/arguments.json +0 -0
  390. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/backup.js +0 -0
  391. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/build.js +0 -0
  392. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/help.js +0 -0
  393. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/help.txt +0 -0
  394. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/import.js +0 -0
  395. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/list.js +0 -0
  396. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/man.js +0 -0
  397. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/move.js +0 -0
  398. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/remove.js +0 -0
  399. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/rename.js +0 -0
  400. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/restart.js +0 -0
  401. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/restore.js +0 -0
  402. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/rm.js +0 -0
  403. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/start.js +0 -0
  404. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/status.js +0 -0
  405. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/project/stop.js +0 -0
  406. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/arguments.json +0 -0
  407. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/help.js +0 -0
  408. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/help.txt +0 -0
  409. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/list.js +0 -0
  410. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/remove.js +0 -0
  411. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/protocol/set.js +0 -0
  412. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/add.js +0 -0
  413. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/help.js +0 -0
  414. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/help.txt +0 -0
  415. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/link-local.js +0 -0
  416. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/link-production.js +0 -0
  417. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/list.js +0 -0
  418. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/remove.js +0 -0
  419. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/rm.js +0 -0
  420. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/scope/use.js +0 -0
  421. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/arguments.json +0 -0
  422. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/check.js +0 -0
  423. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/help.js +0 -0
  424. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/help.txt +0 -0
  425. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/secrets/scan.js +0 -0
  426. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/help.js +0 -0
  427. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/help.txt +0 -0
  428. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/list.js +0 -0
  429. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/man.js +0 -0
  430. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/service/start.js +0 -0
  431. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd/view/add.js +0 -0
  432. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd-status-format/package.json +0 -0
  433. /package/framework/{v0.5.18 → v0.5.19}/lib/cmd-status-format/src/main.js +0 -0
  434. /package/framework/{v0.5.18 → v0.5.19}/lib/collection/README.md +0 -0
  435. /package/framework/{v0.5.18 → v0.5.19}/lib/collection/build.json +0 -0
  436. /package/framework/{v0.5.18 → v0.5.19}/lib/collection/package.json +0 -0
  437. /package/framework/{v0.5.18 → v0.5.19}/lib/collection/src/main.js +0 -0
  438. /package/framework/{v0.5.18 → v0.5.19}/lib/config.js +0 -0
  439. /package/framework/{v0.5.18 → v0.5.19}/lib/connector-config/package.json +0 -0
  440. /package/framework/{v0.5.18 → v0.5.19}/lib/connector-config/src/main.js +0 -0
  441. /package/framework/{v0.5.18 → v0.5.19}/lib/connector-registry/package.json +0 -0
  442. /package/framework/{v0.5.18 → v0.5.19}/lib/connector-registry/src/main.js +0 -0
  443. /package/framework/{v0.5.18 → v0.5.19}/lib/cron/README.md +0 -0
  444. /package/framework/{v0.5.18 → v0.5.19}/lib/cron/package.json +0 -0
  445. /package/framework/{v0.5.18 → v0.5.19}/lib/cron/src/main.js +0 -0
  446. /package/framework/{v0.5.18 → v0.5.19}/lib/domain/LICENSE +0 -0
  447. /package/framework/{v0.5.18 → v0.5.19}/lib/domain/README.md +0 -0
  448. /package/framework/{v0.5.18 → v0.5.19}/lib/domain/package.json +0 -0
  449. /package/framework/{v0.5.18 → v0.5.19}/lib/domain/src/main.js +0 -0
  450. /package/framework/{v0.5.18 → v0.5.19}/lib/dto/package.json +0 -0
  451. /package/framework/{v0.5.18 → v0.5.19}/lib/dto/src/main.js +0 -0
  452. /package/framework/{v0.5.18 → v0.5.19}/lib/dto-pipe/package.json +0 -0
  453. /package/framework/{v0.5.18 → v0.5.19}/lib/dto-pipe/src/main.js +0 -0
  454. /package/framework/{v0.5.18 → v0.5.19}/lib/dto-types/package.json +0 -0
  455. /package/framework/{v0.5.18 → v0.5.19}/lib/dto-types/src/main.js +0 -0
  456. /package/framework/{v0.5.18 → v0.5.19}/lib/generator/index.js +0 -0
  457. /package/framework/{v0.5.18 → v0.5.19}/lib/i18n/package.json +0 -0
  458. /package/framework/{v0.5.18 → v0.5.19}/lib/i18n/src/main.js +0 -0
  459. /package/framework/{v0.5.18 → v0.5.19}/lib/image-build/package.json +0 -0
  460. /package/framework/{v0.5.18 → v0.5.19}/lib/inherits/LICENSE +0 -0
  461. /package/framework/{v0.5.18 → v0.5.19}/lib/inherits/README.md +0 -0
  462. /package/framework/{v0.5.18 → v0.5.19}/lib/inherits/package.json +0 -0
  463. /package/framework/{v0.5.18 → v0.5.19}/lib/inherits/src/main.js +0 -0
  464. /package/framework/{v0.5.18 → v0.5.19}/lib/inspector-events/package.json +0 -0
  465. /package/framework/{v0.5.18 → v0.5.19}/lib/inspector-events/src/main.js +0 -0
  466. /package/framework/{v0.5.18 → v0.5.19}/lib/inspector-redact/package.json +0 -0
  467. /package/framework/{v0.5.18 → v0.5.19}/lib/inspector-redact/src/main.js +0 -0
  468. /package/framework/{v0.5.18 → v0.5.19}/lib/instrument/package.json +0 -0
  469. /package/framework/{v0.5.18 → v0.5.19}/lib/instrument/src/main.js +0 -0
  470. /package/framework/{v0.5.18 → v0.5.19}/lib/job/package.json +0 -0
  471. /package/framework/{v0.5.18 → v0.5.19}/lib/job/src/main.js +0 -0
  472. /package/framework/{v0.5.18 → v0.5.19}/lib/job-store.js +0 -0
  473. /package/framework/{v0.5.18 → v0.5.19}/lib/json-config-header/package.json +0 -0
  474. /package/framework/{v0.5.18 → v0.5.19}/lib/json-config-header/src/main.js +0 -0
  475. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/README.md +0 -0
  476. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/package.json +0 -0
  477. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/default/index.js +0 -0
  478. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/file/index.js +0 -0
  479. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  480. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  481. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/mq/index.js +0 -0
  482. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/mq/listener.js +0 -0
  483. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/containers/mq/speaker.js +0 -0
  484. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/helper.js +0 -0
  485. /package/framework/{v0.5.18 → v0.5.19}/lib/logger/src/main.js +0 -0
  486. /package/framework/{v0.5.18 → v0.5.19}/lib/math/index.js +0 -0
  487. /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-dispatch/package.json +0 -0
  488. /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-dispatch/src/main.js +0 -0
  489. /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-http/package.json +0 -0
  490. /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-http/src/main.js +0 -0
  491. /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-server/package.json +0 -0
  492. /package/framework/{v0.5.18 → v0.5.19}/lib/mcp-server/src/main.js +0 -0
  493. /package/framework/{v0.5.18 → v0.5.19}/lib/merge/README.md +0 -0
  494. /package/framework/{v0.5.18 → v0.5.19}/lib/merge/package.json +0 -0
  495. /package/framework/{v0.5.18 → v0.5.19}/lib/merge/src/main.js +0 -0
  496. /package/framework/{v0.5.18 → v0.5.19}/lib/metrics/package.json +0 -0
  497. /package/framework/{v0.5.18 → v0.5.19}/lib/metrics/src/main.js +0 -0
  498. /package/framework/{v0.5.18 → v0.5.19}/lib/model.js +0 -0
  499. /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-filters/README.md +0 -0
  500. /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-filters/package.json +0 -0
  501. /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-filters/src/main.js +0 -0
  502. /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-resolver/package.json +0 -0
  503. /package/framework/{v0.5.18 → v0.5.19}/lib/nunjucks-resolver/src/main.js +0 -0
  504. /package/framework/{v0.5.18 → v0.5.19}/lib/proc.js +0 -0
  505. /package/framework/{v0.5.18 → v0.5.19}/lib/release-watch/package.json +0 -0
  506. /package/framework/{v0.5.18 → v0.5.19}/lib/release-watch/src/main.js +0 -0
  507. /package/framework/{v0.5.18 → v0.5.19}/lib/render-cache/package.json +0 -0
  508. /package/framework/{v0.5.18 → v0.5.19}/lib/render-cache/src/main.js +0 -0
  509. /package/framework/{v0.5.18 → v0.5.19}/lib/render-cache-store.js +0 -0
  510. /package/framework/{v0.5.18 → v0.5.19}/lib/routing/README.md +0 -0
  511. /package/framework/{v0.5.18 → v0.5.19}/lib/routing/build.json +0 -0
  512. /package/framework/{v0.5.18 → v0.5.19}/lib/routing/package.json +0 -0
  513. /package/framework/{v0.5.18 → v0.5.19}/lib/routing/src/radix.js +0 -0
  514. /package/framework/{v0.5.18 → v0.5.19}/lib/routing-introspect/package.json +0 -0
  515. /package/framework/{v0.5.18 → v0.5.19}/lib/routing-introspect/src/main.js +0 -0
  516. /package/framework/{v0.5.18 → v0.5.19}/lib/secrets/package.json +0 -0
  517. /package/framework/{v0.5.18 → v0.5.19}/lib/secrets/src/backends/env.js +0 -0
  518. /package/framework/{v0.5.18 → v0.5.19}/lib/secrets/src/main.js +0 -0
  519. /package/framework/{v0.5.18 → v0.5.19}/lib/session-store.js +0 -0
  520. /package/framework/{v0.5.18 → v0.5.19}/lib/shell.js +0 -0
  521. /package/framework/{v0.5.18 → v0.5.19}/lib/state.js +0 -0
  522. /package/framework/{v0.5.18 → v0.5.19}/lib/swig-filters/README.md +0 -0
  523. /package/framework/{v0.5.18 → v0.5.19}/lib/swig-filters/package.json +0 -0
  524. /package/framework/{v0.5.18 → v0.5.19}/lib/swig-filters/src/main.js +0 -0
  525. /package/framework/{v0.5.18 → v0.5.19}/lib/swig-resolver/package.json +0 -0
  526. /package/framework/{v0.5.18 → v0.5.19}/lib/swig-resolver/src/main.js +0 -0
  527. /package/framework/{v0.5.18 → v0.5.19}/lib/template-loaders/package.json +0 -0
  528. /package/framework/{v0.5.18 → v0.5.19}/lib/template-loaders/src/loaders/http.js +0 -0
  529. /package/framework/{v0.5.18 → v0.5.19}/lib/template-loaders/src/loaders/memory.js +0 -0
  530. /package/framework/{v0.5.18 → v0.5.19}/lib/template-loaders/src/main.js +0 -0
  531. /package/framework/{v0.5.18 → v0.5.19}/lib/url/README.md +0 -0
  532. /package/framework/{v0.5.18 → v0.5.19}/lib/url/index.js +0 -0
  533. /package/framework/{v0.5.18 → v0.5.19}/lib/url/routing.json +0 -0
  534. /package/framework/{v0.5.18 → v0.5.19}/lib/uuid/package.json +0 -0
  535. /package/framework/{v0.5.18 → v0.5.19}/lib/uuid/src/main.js +0 -0
  536. /package/framework/{v0.5.18 → v0.5.19}/lib/validator.js +0 -0
  537. /package/framework/{v0.5.18 → v0.5.19}/lib/watcher/package.json +0 -0
  538. /package/framework/{v0.5.18 → v0.5.19}/lib/watcher/src/main.js +0 -0
  539. /package/framework/{v0.5.18 → v0.5.19}/lib/ws-framing/package.json +0 -0
  540. /package/framework/{v0.5.18 → v0.5.19}/lib/ws-framing/src/main.js +0 -0
  541. /package/framework/{v0.5.18 → v0.5.19}/lib/ws-query/package.json +0 -0
  542. /package/framework/{v0.5.18 → v0.5.19}/lib/ws-query/src/main.js +0 -0
  543. /package/framework/{v0.5.18 → v0.5.19}/lib/ws-session/package.json +0 -0
  544. /package/framework/{v0.5.18 → v0.5.19}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,27 @@ 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.19 - 2026-07-17
10
+ ### Added
11
+ * The checkbox migration warning now also covers the un-tick direction: markup carrying the `checked` attribute plus a `value` (or `data-value`) reading false or empty — which used to render unticked and now stays ticked — is flagged once per field, with the same legacy opt-in pointer as the existing warning
12
+ * Routes can now require an authenticated session. Declare `"requireAuth": true` in a routing.json rule's `param` block and the framework answers unauthenticated requests before the controller action ever runs: a 401 by default, or — for a browser navigation, when `settings.json > auth.loginRoute` names a rule or a path — a non-cacheable redirect to the login page, with the original request snapshotted first so the login action can replay it via `self.resumeRequest()`. A request counts as authenticated when `req.session.user` is set; populating it at login stays the application's job. XHR requests always get the 401, never a redirect. Routes that declare nothing behave exactly as before. Author mistakes now refuse to boot rather than silently leaving a route open: a non-boolean `requireAuth`, or an `auth.loginRoute` the bundle does not declare.
13
+ * image:list and image:rm — inspect and remove OCI images on the container host image:build targets. Both resolve the host with image:build's own precedence (GINA_CONTAINER_HOST env override, then native buildah, then the container.host setting), so image:list always shows what image:build would build onto. image:list prints an aligned table or --format=json ({ host, images: [{ ref, id, size, created, sizeBytes, createdAt }] } — createdAt is the exact RFC3339 creation time and sizeBytes an approximate machine-sortable byte count derived from buildah's humanized size); an untagged image reports <none>:<none> and a multi-tagged image yields one entry per tag. image:rm takes an explicit image reference or id (--force removes one a container still references; removing one tag of a multi-tagged image untags it — the image survives under its other tags); there is no bulk delete, and the reference is charset-gated before it reaches the host
14
+ * Role-based route authorization — a route can now require the session user to hold one of a set of roles: routing.json `param.roles: ["admin", "editor"]` (ANY-of match against `req.session.user.roles`; implies `requireAuth`, so unauthenticated callers still get the 401/login bounce). Authenticated callers holding none of the listed roles get a 403 whose body stays generic — the required roles are never echoed to the wire. Declared but invalid `roles` shapes (null, a bare string, an empty array, non-string members) refuse to boot instead of leaving the route silently ungated, and the client-served routing maps no longer ship the authorization keys (`requireAuth`/`roles`/`policy`).
15
+ * A policy-function escape hatch for route authorization — a route can now delegate its access decision to a named per-bundle function for the record/attribute checks roles cannot express (ownership and the like): routing.json `param.policy: "ownsInvoice"` loads `<bundle>/policies/ownsInvoice.js` (`module.exports = function (user, req) { return boolean; }`), registered at boot and AND-composed after roles (implies `requireAuth`; evaluation order authN → roles → policy). A policy is allowed only when it returns a literal `true`; any other return denies, and a policy that throws denies with a 403 rather than erroring the response. The 403 stays generic — the policy name is never echoed to the wire. A missing, broken, non-function, non-string or `async function` policy refuses to boot instead of leaving the route silently ungated. Also adds the imperative `self.hasRole(role)` controller helper for actions that authorize mid-logic.
16
+ * An audit trail — a user-attributed, append-only record of "who did what to which record when", distinct from application logging (it has its own store and never rides the logger sinks). Opt in with `settings.json > audit.enabled: true` and call `self.audit(action, data[, cb])` from an action: `self.audit("invoice.delete", { resource: id })` writes a v1 record `{ id, ts, requestId, actor: {key, roles}, action, resource?, meta?, ip, rule, method, bundle, env }`. The default backend is an append-only JSONL file at `<project>/logs/audit-<bundle>-<env>.jsonl` (per-bundle-per-env, resolved path logged at boot; override with `audit.file`, or point `audit.store` at a connectors.json entry — no connector ships an audit-store implementation yet, so that path currently refuses the boot rather than failing silently). Writes are serialized, so on-disk order matches emit order. The actor is a snapshot of `session.user[audit.actorKey]` (default `"id"`) plus a copy of `user.roles` — never the whole user object; `ip` is the socket address and `X-Forwarded-For` is never trusted. Route authorization denials are recorded automatically when the trail is on (`authz.denied` with `meta.outcome` covering `401` / `login-bounce` / `403-roles` / `403-policy`; opt out with `audit.events.authz: false`), and an audit failure can never change an authorization outcome. Every request now carries an always-on request id, so audit records and JSON log lines correlate by construction (that id honours a sanitized inbound `X-Request-Id`, so it is a correlation key, not attribution — attribution is the actor fields). Malformed `audit` settings — a non-boolean `enabled`, an empty `file`/`store`/`actorKey`, a non-boolean `events.authz`, or `store` and `file` together — refuse to boot instead of leaving a compliance control silently OFF.
17
+ * `gina image:run <image>` runs an image on the same container host `image:build` targets, with podman. Detached by default (the container id is printed on stdout, alone, so it can be captured), publishing the port the image EXPOSEs mapped same:same — that EXPOSE is the port the gina-init allocator computed at build time, so it is the one the bundle actually binds. `--publish=<host>:<container>[,...]` overrides it, `--publish=none` publishes nothing. Also `--name`, `--rm`, `--stream` (foreground, mirroring the container output as NDJSON frames) and `--format=json`. Runtime environment comes from `--env-var=KEY=VALUE` (repeatable) and `--env-file=<path>`, and reaches the container without ever entering argv or a shell, so values stay out of the host process list — which is how a ${secret:KEY} placeholder baked verbatim into the image gets its value at start. buildah builds images but cannot run them, so a build-only host (buildah present, podman absent) says so honestly instead of failing opaquely. Host resolution is identical to image:build / image:list / image:rm, and no project is required.
18
+ * A new `container:` command group — `gina container:ps [--all] [--format=json]` lists the containers on the container host `image:build` targets (running only by default; every container on the host is shown, as there is no gina-specific marker to filter on), and `gina container:stop <name|id> [--time=<s>] [--force] [--format=json]` stops one. The verbs live in their own group because they act on containers rather than images — the split podman and docker make — but they resolve the host through exactly the same precedence as the image group, so container:ps always lists the host image:build builds onto and image:run runs on. container:stop reports the rung the container came down on, which podman own exit code hides: podman exits 0 whether the container handled SIGTERM or had to be SIGKILLed after the grace period, so a post-stop inspect reads the container exit code — 137 is 128+SIGKILL (it did not handle the signal in time) and anything else means it came down on its own terms. Stopping an already-exited container is a success no-op, so the verb is safe to re-run. Both verbs drive podman and report a build-only host (buildah present, podman absent) honestly rather than as an opaque exec failure.
19
+ ### Changed
20
+ * Request data crossing a redirect() now rides the session (the hidden inheritedData flash channel, one-shot — consumed by the next routed GET, gone on refresh) whenever a live session exists; the clear-text ?inheritedData= URL form and its 2000-char cap now apply only to session-less bundles. resumeRequest()'s plain-XHR and non-XHR GET replays no longer drop the halted request's extra data. For a session-ful bundle that halts a credential-bearing POST (a registration or login paused mid-flight), this removes a plaintext-secret-in-URL disclosure: the payload no longer lands in the address bar, browser history, or access logs.
21
+ ### Fixed
22
+ * Calling `gina.emit('error', ...)` on the module object no longer throws — `emit` is now an inert stub that always returns `false` (the detached-copy assignment it replaces never dispatched to any listener; the module object is not an event surface — application events go through the controller's `self.emitEvent()`)
23
+ * image:build: images for projects that declare gina among their own dependencies no longer fail at gina-init with EACCES — the synthesized Containerfile re-hands the runtime home back after the project-dependency install, whose framework postinstall was re-seeding $HOME/.gina root-owned after the earlier hand-back (dependency-free projects were unaffected)
24
+ * image:build: the pinned framework now actually wins require('gina') inside images built for gina-dependent projects — the node_modules/gina link supersedes the project-extracted copy (ln -sfn against a real directory exits 0 but nests the symlink inside it, so the project's own gina was silently used at runtime while the CLI binaries ran from the global pin)
25
+ * getRoute() no longer throws (surfacing as a 500 at the caller) when composing a URL for a GET route that declares no requirements block and receives extra params — the deep-link-before-login replay (resumeRequest()) failed on any halted requirements-less GET route carrying data, and the same crash was reachable from the url template filter / getUrl() family, in the browser bundle too. Extra params now land on the composed URL as query parameters.
26
+ * The relative-path `self.redirect('/path')` form resolves its target again server-side: the route matcher is async and the historical un-awaited call could never match. `redirect()` is now async as a result — prefer `return self.redirect(...)` from controller actions so a resolution error reaches the framework's handler.
27
+ * A redirect to an unresolvable target no longer crashes the process — the request now gets a clean 404, and the response-header composer tolerates a falsy routing state instead of throwing from inside the error path itself.
28
+ * Prometheus metrics (app.json metrics.enabled) no longer double-count requests under the isaac engine: the request-lifecycle hook ran at both dispatch layers for any request reaching the router, so counters were double-incremented and the duration histogram double-observed. The hook now records exactly once on either engine, request durations are measured from engine entry, and the dev Inspector Flow timeline keeps its accurate request-start time.
29
+
9
30
  ## 0.5.18 - 2026-07-16
10
31
  ### Added
11
32
  * Bundle-wide `sliding` and `maxAge` cache defaults: `server.cache` now supplies `sliding` and `maxAge` fallbacks that a route inherits when it omits them, mirroring the existing `ttl` fallback — so sliding-window caching can be enabled for a whole bundle from one place. Per-route values still win (an explicit `sliding: false` overrides a bundle-wide `true`), and behaviour is unchanged for bundles that do not set these keys. Applies to cached HTML (swig, nunjucks) and JSON responses.
@@ -45,7 +66,7 @@ and is generated by [Changie](https://github.com/miniscruff/changie).
45
66
  ### Fixed
46
67
  * Cleaning up a stale project registration is now reliable. `gina project:rm @<project> --force` (the `:rm` alias) removes the entry instead of erroring — the alias had failed an internal `--force` guard that only the full `project:remove` form passed. And `gina project:remove` / `project:rm @<project> --force` no longer crashes with an `ENOENT` error when the stale project's path can no longer be created (a top-level path such as `/app`, or any path under a read-only parent): it skips the now-pointless project-directory re-creation and goes straight to registry-only removal, cleaning both `~/.gina/projects.json` and its state-store mirror plus the project's port assignments — without resurrecting an empty skeleton directory.
47
68
  * Installing gina with the npm 12 `--allow-scripts=gina` remedy (or `npm config set allow-scripts=gina --location=user`) no longer fails with `EALLOWSCRIPTS`. npm exports the allowance to install-script children as `npm_config_allow_scripts`, and npm rejects it in project-scoped installs — which killed the nested framework-dependency install inside post-install, and with it the whole `npm install -g gina`. The nested install now drops the inherited allowance for its duration (the framework dependencies carry no install scripts, so nothing is lost). This unblocks the npm 12 install path, where install scripts are blocked by default and the flag is required.
48
- * `gina bundle:start` now honours a bundle's configured default scope. A typo in the scope-resolution expression returned an undefined property, so a bundle that declared a default scope in its manifest started with an undefined scope instead of the configured one (bundles with no configured default scope were unaffected they already fell back to the framework default scope). The command now reads the correct property.
69
+ * Corrected a typo in `gina bundle:start`'s scope-resolution expression, which read a misspelled property name. **No behaviour change** the local variable it assigns is never read, and no bundle manifest carries the per-bundle property (nothing writes it), so the misspelled branch was unreachable: no bundle was ever started with a wrong or undefined scope. A bundle's effective scope continues to resolve, unchanged, from `--scope=`, then `NODE_SCOPE`, then the project's default scope, then the framework default.
49
70
 
50
71
  ## 0.5.16 - 2026-07-12
51
72
  ### Added
package/README.md CHANGED
@@ -42,21 +42,16 @@ open https://localhost:3100
42
42
 
43
43
  > **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.)
44
44
 
45
- ## What's in 0.5.18
46
-
47
- - **Added — a shared redis L2 for the render cache, and pluggable cache backends.** `server.cache.type` now sets a bundle's default output-cache backend (`memory`, `fs`, or `redis`) and a route with `cache` set inherits it, alongside new bundle-wide `sliding` / `maxAge` fallbacks (per-route values still win). The `redis` tier caches rendered output in a shared store, so several replicas serve the same rendered page and a freshly-started replica serves what a peer already rendered (cross-replica cold-start): writes go to the in-process L1 synchronously and to redis fire-and-forget (the response never waits on redis), an L1 miss warms back from redis with the authoritative remaining TTL, invalidation propagates, and a down or failing redis degrades to per-replica caching (fail-open). The bundle validates its cache configuration at boot and refuses to start on an unsupported shape. New bundles default to `memory`; existing installs are unchanged.
48
- - **Added — type-safe DTOs and a default-on validation pipe.** `gina.dto` lets you author a data shape once and project it four ways: runtime validation, response shaping, JSON Schema (draft-07 or 2020-12), and TypeScript. A `routing.json` rule declaring `param.dto` has its payload validated before the controller action runs a clean, localised 422 on failure, a type-coerced payload on success — and `param.responseDto` shapes the outgoing JSON so a field marked `.exclude()` never reaches the wire. `gina bundle:types <bundle> @<project>` emits declarations from those same DTOs, and `bundle:openapi` / `bundle:mcp` now emit real request/response schemas instead of `.*`. DTOs are resolved at bundle boot, so a missing one fails the boot instead of silently disabling validation; routes that declare no DTO are unaffected.
49
- - **Added — `releaseWatch`, a stale built-release watch for local production rehearsals.** A bundle serving a built release under `local` scope + a non-dev env has no hot-reload, so after you edit source it silently keeps serving the stale build. Opt in via `server.releaseWatch`: the bundle fingerprints its source tree against the manifest release stamp (now written by `bundle:build` / `project:build`), surfaces staleness on `GET /_gina/release/status` and a `GET /_gina/release/events` SSE stream, and rebuilds on `POST /_gina/release/rebuild` with an **idle-gated restart** that waits on in-flight requests and `gina.registerBusyProbe` application probes. Rendered pages carry a live shadow-DOM banner offering one-click rebuild-and-reload, and `restartMode: supervisor` suits a daemonless container launch (drain, then exit(0) for an orchestrator to respawn). Hard-gated on local scope + a non-dev env byte-inert everywhere else.
50
- - **Addedflush or event-evict the render cache from outside the bundle.** `POST /_gina/cache/clear` (both engines, loopback-gated) and a new `gina cache:clear [<bundle>] @<project>` CLI flush the rendered-output cache without ever touching compiled templates or HTTP/2 sessions with `--dry-run` and `--format=json`. `?event=<name>` evicts by event: a controller's `self.cache.invalidateByEvent()` only reaches its own process, so this is how one bundle's write invalidates another bundle's cached pages. Note `?event=` previously went unread, so passing it flushed *every* bundle's output cache; it is now honoured.
51
- - **Addedtwo-tier render-cache observability.** Every cache hit's `Cache-Status` header now carries an RFC 9211 `detail` parameter naming the physical tier that served the bytes `memory` for the in-process L1, `redis` for a shared-L2 warm (the cross-replica cold-start, visible per request), `fs` for a disk read-back after a restart and `/_gina/cache/stats` gains an `l2` block reporting the redis store's connection health, with no network round-trip on the admin path.
52
- - **Changedrender-cache keys are release-namespaced, so an upgrade auto-invalidates.** The cache key *and* the `fs` cache path now carry a release namespace — `GINA_CACHE_NAMESPACE` (an id you set, such as a git SHA or build number) when present, otherwise the framework version so a new build never serves a page cached by old code. `fs`-cached files from a superseded namespace are orphaned on disk until cleared. Dev mode is unaffected (it runs cacheless).
53
- - **Changedthe `Cache-Status` miss form follows RFC 9211.** It is now `gina-cache; fwd=uri-miss` (previously the bare `gina-cache; uri-miss`, which read as an unregistered parameter to RFC-aware tooling), and the engine-agnostic read path emits it on a genuine both-tier miss giving Express bundles their first cache-miss signal on the wire.
54
- - **Fixed — event-driven cache invalidation now works, and a cache fault no longer discards a good page.** A route's `cache.invalidateOnEvents` was registered but nothing ever fired it the documented `self.cache.invalidateByEvent()` did not exist, so configured routes served stale content until their TTL expired. `self.cache` now exists on the controller and reports the number of entries evicted. Three further defects in the same path are fixed: re-registering a key carrying a querystring **threw** (the registry ran cache keys through a condition evaluator, where `?`/`=` parse as operator tokens) and under the swig engine that throw unwound to the top-level error handler, which answered 500 and discarded a page that had already rendered; registrations were never reclaimed, so the registry grew a row per cache-miss re-render; and an `fs` entry read back after a restart carried no registration at all. Separately, a failed cache **write** now degrades exactly as the nunjucks and JSON renderers already did — the response is served, the failure logged, and the next miss retries.
55
- - **Fixed — the `fs` render cache survives a restart.** An `fs`-cached response written to disk was previously orphaned on the next boot (the in-process index starts empty), so it was never served again and its file was never cleaned up — `fs` behaved no better than `memory` across a restart. The read path now falls back to disk on an index miss, replaying the entry from a `.meta` sidecar and preserving the **original absolute expiry**, so a restart never extends a TTL. Entries expiring on their timer now run the same cleanup as a manual eviction, instead of stranding their body and sidecar on disk.
56
- - **Fixed — a checkbox's `value` attribute no longer decides its `checked` state.** The HTML `checked` attribute alone drives the initial rendering, and the posted boolean is derived from the live checked state rather than the value string — so a consent-style checkbox rendered with `value="true"` is no longer silently pre-ticked, `value="false"` no longer un-ticks a server-checked box, a checkbox unticked from your own script no longer posts `true` off its stale value, and a neutral-valued checkbox with an `isBoolean` rule posts real booleans instead of going dead. The forced rule injection now appends `isRequired` before `isBoolean`, so an unchecked box whose rule declared neither no longer fails with "Cannot be left empty". A transitional per-form opt-in — `data-gina-form-checkbox-value-as-state="true"` (deprecated) — preserves the old value-driven ticking while markup migrates to `checked`, and a once-per-field console warning flags the affected checkboxes. (#49)
57
- - **Fixed — the published TypeScript declarations now describe the runtime.** `import gina from "gina"; gina.lib` previously failed to typecheck for every consumer, because the main entry declared no value at all. The module surface now carries all 78 runtime members including `gina.dto`; `SuperController` gains its i18n / jobs / trailers / events / template-override methods plus `GinaRequest<TDto>` and `req.dto` typing for route DTOs; fictional declarations were removed; and a two-part gate (a consumer fixture compiled by `tsc` through the package exports map, plus a runtime-parity test) keeps the declarations and the runtime in sync.
58
- - **Fixed — errors surface instead of crashing, masking, or coming back as `0`.** A framework error raised from a detached context — a scheduled cron/timer, a worker, or a bootstrap-time `getLib()` — no longer crashes the process with `TypeError: next is not a function` while masking the original error. `getLib()` / `getConfig()` no longer crash with an opaque `Cannot read properties of undefined (reading 'conf')` when configuration is read while the config build is still partway (for example a fail-closed `${secret:KEY}` resolution), so the real boot error surfaces. A bitwise `|` at nine sites across the HTTP server, the browser client bundle, and three CLI commands coerced the Error to the number `0` — a rendered 500 page body and the `protocol:set` / `port:reset` / `project:add` output all reported `0` instead of the cause. And log messages containing a `$` are no longer mangled by the text formatter's `%`-token splice, across every level and sink. (#B108 / #B112)
59
- - **Fixed — two smaller corrections.** A server-side form-validator `query` rule no longer re-points the framework's process-wide cache onto a second Map, so concurrent renders keep reading their cached entries and pooled HTTP/2 sessions land in the real server's cache. And `bundle:openapi` / `bundle:mcp` no longer advertise `.exclude()`d DTO fields in response schemas — the 200 content schema and the MCP tool `outputSchema` now emit the response projection, while request-side schemas keep the declared shape. (#B110 / #B115)
45
+ ## What's in 0.5.19
46
+
47
+ - **Added — route authorization.** A `routing.json` rule can now gate access declaratively, enforced before the controller action runs. `param.requireAuth: true` requires an authenticated session (`req.session.user` set populating it at login stays the app's job): an unauthenticated XHR gets a 401, a browser navigation gets a non-cacheable redirect to `settings.json > auth.loginRoute` with the original request snapshotted for `self.resumeRequest()` to replay. `param.roles: ["admin", "editor"]` requires any one of a set of roles (implies `requireAuth`); `param.policy: "ownsInvoice"` delegates the decision to a per-bundle `policies/ownsInvoice.js` function for the ownership/record checks roles can't express (AND-composed after roles, allowed only on a literal `true`, a throwing policy denies). Denials stay generic the required roles and policy name never reach the wire, and the client-served routing maps no longer ship the authorization keys. Author mistakes refuse to boot rather than leaving a route silently open (a non-boolean flag, an undeclared `loginRoute`, an invalid `roles` shape, a missing / broken / `async` policy). Also adds the imperative `self.hasRole(role)` controller helper. Routes that declare nothing behave exactly as before.
48
+ - **Added — an audit trail.** A user-attributed, append-only record of "who did what to which record when", with its own store, never riding the logger sinks. Opt in with `settings.json > audit.enabled: true` and call `self.audit("invoice.delete", { resource: id })` from an action; the default backend is an append-only JSONL file at `<project>/logs/audit-<bundle>-<env>.jsonl` (override with `audit.file`, or point `audit.store` at a connectors.json entry). The actor is a snapshot of `session.user[audit.actorKey]` plus a copy of `user.roles` never the whole user object — and `X-Forwarded-For` is never trusted. Route-authorization denials are recorded automatically (`authz.denied`, opt out with `audit.events.authz: false`), and an audit failure can never change an authorization outcome. Every request now carries an always-on request id, so audit records and JSON log lines correlate by construction. Malformed `audit` settings refuse to boot rather than leaving a compliance control silently off.
49
+ - **Added — an OCI image and container CLI.** Building on `image:build` (0.5.11), five verbs now inspect and run images on the same container host: `gina image:list` (aligned table or `--format=json` with a machine-sortable `sizeBytes` and an RFC3339 `createdAt`), `image:rm <ref>` (untags a multi-tagged image; no bulk delete; the reference is charset-gated), and `image:run <image>` (runs with podman detached by default, publishing the EXPOSEd port same:same, with `--publish` / `--rm` / `--stream` / `--env-var` / `--env-file`, so a `${secret:KEY}` baked into an image gets its value at start without ever entering argv or a shell). A new `container:` group lists and stops running containers `container:ps [--all]` and `container:stop <name|id>`, which reports the rung the container came down on (137 = SIGKILL after the grace period, otherwise its own terms). Every verb resolves the host with `image:build`'s precedence and reports a build-only host (buildah without podman) honestly instead of failing opaquely.
50
+ - **Changed`redirect()` carries request data through the session by default.** When a redirect carried the request's params they used to travel in the URL as `?inheritedData=<encoded JSON>` — in clear, in the address bar, browser history, and access logs, capped at 2000 characters. On a bundle with a session they now ride the session instead (a one-shot flash, consumed by the next routed GET, gone on refresh); the URL form and its cap now apply only to session-less bundles. For a bundle that halts a credential-bearing POST mid-flight (a registration or login), this removes a plaintext-secret-in-URL disclosure. The target action still reads the data from `req.get` unchanged, and `resumeRequest()`'s plain-XHR and full-page replays no longer drop it.
51
+ - **Fixedmetrics no longer double-count under the isaac engine.** With `app.json metrics.enabled` on, the request-lifecycle hook ran at both dispatch layers for any request reaching the router, so Prometheus counters were double-incremented and the duration histogram double-observed. The hook now records exactly once on either engine, durations are measured from engine entry, and the dev Inspector Flow timeline keeps its accurate request-start time. Metrics-enabled deployments will see counter rates roughly halve at pickup that is the double-count disappearing, not traffic dropping. (#OBS1)
52
+ - **Fixedredirect resolution.** The relative-path `self.redirect('/path')` form resolves its target server-side again (the route matcher is async and the historical un-awaited call could never match; `redirect()` is now async prefer `return self.redirect(...)` from actions), a redirect to an unresolvable target gets a clean 404 instead of crashing the process, and `getRoute()` no longer throws a 500 when composing a URL for a GET route that declares no `requirements` block and receives extra params (they now land as query parameters). (#B120 / #B121)
53
+ - **Fixed — `image:build` for projects that depend on gina.** Images built for a project that lists gina among its own dependencies no longer fail at `gina-init` with `EACCES`, and the pinned framework now actually wins `require('gina')` inside the imagethe `node_modules/gina` link supersedes the project-extracted copy. Dependency-free projects were unaffected. (#B118 / #B119)
54
+ - **Fixed — two smaller corrections.** `gina.emit('error', ...)` on the module object no longer throws (`emit` is an inert stub; application events go through the controller's `self.emitEvent()`), and the checkbox migration warning added in 0.5.18 now also covers the un-tick direction markup carrying `checked` plus a false / empty `value` that used to render unticked and now stays ticked is flagged once per field. (#B109 / #49)
60
55
 
61
56
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
62
57
 
package/ROADMAP.md CHANGED
@@ -43,6 +43,7 @@ This roadmap covers planned features, architectural improvements, new connectors
43
43
  | **Q3 2026** | `0.5.16` ✅ | **Added**: a `multipart/form-data` request's non-file text fields are now captured into `request.body` (bracket-notation nested, values verbatim, capped by `upload.maxTextFields` / `upload.maxTextFieldSize` with a 400 on breach) — previously silently dropped · **Fixed**: `$form.send(FormData)` keeps its non-file fields when the payload also carries files (#B92), and a routing rule's `param.title` now reaches the browser-tab title (`page.view.title`) instead of always showing the route name, with the route name as the fallback (#B98) |
44
44
  | **Q3 2026** | `0.5.17` ✅ | **Fixed**: `npm install -g gina` no longer fails with `EALLOWSCRIPTS` under the npm 12 `--allow-scripts=gina` remedy — the nested framework-dependency install drops the inherited allowance, making `0.5.17` the first version installable on npm 12 (#B106) · stale project cleanup is reliable — `project:rm @<project> --force` (the alias) removes the entry, and `project:remove` / `:rm --force` no longer `ENOENT`-crashes on an uncreatable stale path, going straight to registry-only removal (#B104/#B105) · `bundle:start` honours a bundle's configured default scope (a typo had returned an undefined property) |
45
45
  | **Q3 2026** | `0.5.18` ✅ | **Added**: a redis-backed L2 render cache — rendered output is cached in a shared store, so several replicas serve the same rendered page and a freshly-started replica serves what a peer already rendered (cross-replica cold-start), degrading to per-replica caching if redis is down · pluggable cache backends (`server.cache.type`: `memory` / `fs` / `redis`) with bundle-wide `sliding` / `maxAge` fallbacks a route inherits · type-safe DTOs and a default-on validation pipe (`gina.dto` — one shape projected to runtime validation, response shaping, JSON Schema and TypeScript; `param.dto` validates the payload before the action with a localised 422, `param.responseDto` shapes the wire, `gina bundle:types` emits declarations, and `bundle:openapi` / `bundle:mcp` emit real request/response schemas) · `releaseWatch` — an opt-in stale built-release watch for local production rehearsals (source-tree fingerprint against the manifest release stamp, `GET /_gina/release/status` + an SSE stream, idle-gated rebuild-and-restart honouring in-flight requests and busy probes, a live shadow-DOM banner, and `restartMode: supervisor` for daemonless container launches) · `POST /_gina/cache/clear` + a `gina cache:clear` CLI (flush the rendered-output cache, or evict by event across bundles) · two-tier cache observability (an RFC 9211 `Cache-Status` `detail` naming the serving tier, plus an `l2` redis-health block on `/_gina/cache/stats`) · **Changed**: render-cache keys are release-namespaced, so an upgrade auto-invalidates (`GINA_CACHE_NAMESPACE`, else the framework version) · the `Cache-Status` miss form is now the RFC 9211 `gina-cache; fwd=uri-miss`, and Express bundles get their first cache-miss signal · **Fixed**: event-driven cache invalidation works — `self.cache.invalidateByEvent()` now exists, and a key carrying a querystring no longer throws a 500 that discarded an already-rendered page · the `fs` cache survives a restart (disk read-back via a `.meta` sidecar, original absolute expiry preserved, no TTL extension) · a checkbox's `value` attribute no longer decides its `checked` state (#49) · the published TypeScript declarations describe the runtime · errors surface instead of crashing, masking, or coming back as `0` (detached-context `throwError`, partial-boot `getLib()` / `getConfig()`, a bitwise-or at nine sites, and `$` in log messages) |
46
+ | **Q3 2026** | `0.5.19` ✅ | **Added**: route authorization — a `routing.json` rule gates access before the action runs via `param.requireAuth` (a 401 for XHR, a non-cacheable login redirect for a browser navigation, the original request snapshotted for `resumeRequest()`), `param.roles` (ANY-of, implies `requireAuth`), and `param.policy` (a per-bundle function for the ownership/record checks roles can't express, AND-composed after roles); denials stay generic — required roles and the policy name never reach the wire — author mistakes refuse to boot, and `self.hasRole()` authorizes mid-logic · an audit trail — opt-in `self.audit(action, data)` writes a user-attributed append-only JSONL record (its own store, never the logger sinks; an actor snapshot, `X-Forwarded-For` never trusted), route-authorization denials recorded automatically, and an always-on request id correlating audit records to JSON logs · an OCI image/container CLI on the `image:build` host — `image:list` / `image:rm` / `image:run` (podman; publishes the EXPOSEd port, `--env-var` / `--env-file` keep secrets out of argv) and a `container:` group (`container:ps` / `container:stop`, reporting the rung a container came down on) · **Changed**: `redirect()` carries request data through the session by default (a one-shot flash, gone on refresh), the clear-text `?inheritedData=` URL form and its 2000-char cap now session-less-only — removing a plaintext-secret-in-URL disclosure when a session-ful bundle halts a credential-bearing POST · **Fixed**: Prometheus metrics no longer double-count under the isaac engine (#OBS1) · the relative `self.redirect('/path')` form resolves again and an unresolvable target 404s instead of crashing (`redirect()` is now async), and `getRoute()` no longer 500s on a requirements-less GET route with extra params (#B120/#B121) · `image:build` for gina-dependent projects no longer fails at gina-init and the pinned framework wins `require('gina')` (#B118/#B119) · `gina.emit` is an inert stub (#B109) and the checkbox migration warning now covers the un-tick direction (#49) |
46
47
  | **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
47
48
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
48
49
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
@@ -117,6 +118,8 @@ Stub commands confirmed in source — handler files exist but are empty or comme
117
118
  | ✅ | **`project:backup` / `project:restore`** — Archive a project's source tree to a `.zip` (`backup`, symlinks skipped), and rebuild + re-register a project from a backup `.zip` so it is immediately startable (`restore`). | `0.5.5-alpha.2` | 2026-06-19 |
118
119
  | ✅ | **`framework:man` / `project:man` / `bundle:man` / `service:man`** — Inline CLI manual pages. Runtime-renders the group's ronn `.1.md` (substituting `{version}`/`{year}`) when it exists (`framework` today), else falls back to that group's `help.txt`. No build step or markdown/man dependency. | `0.5.5-alpha.2` | 2026-06-20 |
119
120
  | ✅ | **`image:build` — first-class OCI packaging** — Packages a project bundle as a standard OCI image: synthesizes a Containerfile + build context from the project's registered state (bundles, entry, ports, env model, node floor) and executes the build with buildah — natively on Linux, or on a container host reached over ssh (`GINA_CONTAINER_HOST=ssh://[user@]host[:port]` env override → native buildah → `container.host` settings fallback). The selected `--env` bakes dev/prod parity: a non-dev env ships the release tree built in-image by `gina bundle:build` (never dev-mode hot-reload); the image boots via `gina-init` + `gina-container` (SIGTERM drain) and `EXPOSE` is computed deterministically from the `gina-init` port allocator. `${secret:KEY}` config placeholders ride byte-verbatim and resolve from the container environment at runtime — never baked. `--emit` prints the Containerfile + context manifest without building; `--format=json` emits a one-shot `{ project, bundle, image, tag, imageId?, durationMs, host, exposedPort }`; `--stream` emits NDJSON progress frames (`start` → `step` → `log` → `done` \| `error`); failures exit 1 with the reason on stdout. | `0.5.11-alpha.2` | 2026-07-05 |
121
+ | ✅ | **`image:list` / `image:rm`** — Host-level image management on the container host `image:build` targets, resolved with the same precedence (`GINA_CONTAINER_HOST=ssh://[user@]host[:port]` env override → native buildah → `container.host` settings fallback); no `@<project>` argument. `image:list` prints every image on the host — an aligned table or `--format=json` (`{ host, images: [{ ref, id, size, created }] }`); the listing is deliberately unfiltered (a synthesized image carries no distinguishing label to filter on). `image:rm <ref>` removes one explicitly-named image — no bulk delete; `--force` maps to `buildah rmi -f`. | `0.5.19-alpha.2` | 2026-07-17 |
122
+ | ✅ | **`image:run` / `container:ps` / `container:stop` — running images on the container host** — Runs a built OCI image as a container on the same host every `image:*` verb resolves (`GINA_CONTAINER_HOST=ssh://[user@]host[:port]` env override → native → `container.host` settings), driving `podman` — buildah builds images but cannot run them, and a build-only host (buildah present, podman absent) is reported honestly (`run unavailable on this host … needs podman + conmon`) rather than as an opaque exec failure. `image:run <image>` is detached by default and prints the container id alone on stdout (`--format=json` → `{ host, id, name, image, ports }`); with no `--publish` the image’s own baked `EXPOSE` is published same:same, `--publish=<host:ctr>[,…]` overrides, `--publish=none` disables; `--env-var=K=V` (repeatable) and `--env-file=<path>` hand environment values to the container without ever placing them in a process argv or baking them into the image; `--rm`; `--stream` runs it in the foreground and mirrors the container as NDJSON frames (`start` → `log` → `done` \| `error`, carrying the container’s own exit code). `container:ps [--all]` lists the host’s containers (aligned table or `--format=json` with normalized port maps); `container:stop <name|id> [--time=<s>] [--force]` stops one and reports the rung it came down on — `graceful` (the container handled the signal), `killed` (force-killed after the grace period) or `forced` (`--force`) — read from a post-stop inspect, since podman exits 0 either way. | `0.5.19-alpha.2` | 2026-07-17 |
120
123
 
121
124
  ---
122
125
 
@@ -248,8 +251,8 @@ Technical-safeguard primitives that map to the **PCI-DSS**, **SOC2**, and **HIPA
248
251
 
249
252
  | Status | Feature | Version | Target |
250
253
  | --- | --- | --- | --- |
251
- | 📋 | **Authorization / RBAC** — A role/permission model, per-route authorization gate, and policy helpers (today Gina ships authentication status only, no authorization). Maps to PCI-DSS req 7, HIPAA §164.312(a)(1), SOC2 CC6 (least privilege). | `0.6.x` | Q4 2026 |
252
- | 📋 | **Tamper-evident audit trail** — A user-attributed, append-only, integrity-protected record of who did what to which record when, distinct from application logging. Maps to PCI-DSS req 10, HIPAA §164.312(b), SOC2 CC7. | `0.6.x` | Q4 2026 |
254
+ | | **Authorization / RBAC** — Per-route authorization declared in `routing.json`: `param.requireAuth` requires an authenticated session, `param.roles: ["admin","editor"]` requires any one of a set of roles, and `param.policy: "ownsInvoice"` delegates to a per-bundle function for the record/attribute checks roles cannot express (evaluation order: authentication → roles → policy). Unauthenticated callers get a 401, or a non-cacheable login bounce when `settings.json > auth.loginRoute` is set (the paused request replays after sign-in); authorized-but-denied callers get a 403 whose body stays generic — the required roles and the policy name are never echoed to the wire. `self.hasRole(role)` covers actions that authorize mid-logic. A route that declares nothing is untouched, and any declaration that would leave a route silently ungated refuses to boot. Maps to PCI-DSS req 7, HIPAA §164.312(a)(1), SOC2 CC6 (least privilege). | `0.5.19-alpha.2` | shipped |
255
+ | 📋 | **Tamper-evident audit trail** — A user-attributed, append-only, integrity-protected record of who did what to which record when, distinct from application logging. **The audit trail itself has already shipped** — `settings.json > audit.enabled` plus `self.audit(action, data)` writes an append-only JSONL trail (actor, action, resource, request id, ip, route, timestamp), and route-authorization denials are recorded automatically; see the changelog for the release that carries it. **What remains for this row is the tamper-evidence** — the HMAC hash chain that makes an edited, deleted, or reordered record detectable, plus `gina audit:verify`. Maps to PCI-DSS req 10, HIPAA §164.312(b), SOC2 CC7. | `0.6.x` | Q4 2026 |
253
256
  | 📋 | **Authentication hardening** — Password hashing/policy helpers, account lockout, and MFA/TOTP hooks. Maps to PCI-DSS req 8, HIPAA §164.312(d). | `0.6.x` | Q4 2026 |
254
257
  | 📋 | **Session lifecycle hardening** — Session-id rotation on privilege change and idle/absolute timeouts, on top of the existing Session plugin. Maps to PCI-DSS req 8.2. | `0.6.x` | Q4 2026 |
255
258
  | 📋 | **PII/PHI protection** — Production log-field redaction, data classification, and retention helpers (today's redaction is a dev-only inspector tool). Maps to HIPAA and SOC2 Privacy. | `0.6.x` | Q4 2026 |
package/bin/cli CHANGED
@@ -341,6 +341,7 @@ async function onExec() {
341
341
  'bundle:',
342
342
  'cache:',
343
343
  'connector:',
344
+ 'container:',
344
345
  'dev:',
345
346
  'env:',
346
347
  'i18n:',
@@ -0,0 +1 @@
1
+ 0.5.19
@@ -6216,7 +6216,7 @@ function Routing() {
6216
6216
  * @function getRoute
6217
6217
  *
6218
6218
  * @param {string} rule e.g.: [ <scheme>:// ]<name>[ @<bundle> ][ /<environment> ]
6219
- * @param {object} params
6219
+ * @param {object} params - substituted into the route's `:placeholders`; on a GET route, leftover keys that are neither reserved nor declared in the rule's `requirements` are appended to `route.url` as query parameters (a rule with no `requirements` block is safe — the block is optional)
6220
6220
  * @param {number} [urlIndex] in case you have more than one url registered for the current route, you can select the one you want to use. Default is 0.
6221
6221
  *
6222
6222
  * @returns {object} route
@@ -6349,7 +6349,10 @@ function Routing() {
6349
6349
  for (let p in params) {
6350
6350
  if (
6351
6351
  self.reservedParams.indexOf(p) > -1
6352
- || typeof(route.requirements[p]) != 'undefined'
6352
+ // a rule that declares no `requirements` block composes with requirements: undefined
6353
+ // guard the deref (the fitsWithRequirements discipline) so getRoute(rule, extraParams)
6354
+ // on such a GET route appends the query params instead of throwing
6355
+ || ( route.requirements && typeof(route.requirements[p]) != 'undefined' )
6353
6356
  || extracted.indexOf(p) > -1
6354
6357
  ) {
6355
6358
  continue;
@@ -6547,9 +6550,15 @@ function Routing() {
6547
6550
  /**
6548
6551
  * Get route by url
6549
6552
  * N.B.: this will only work with rules declared with `GET` method property
6550
- * ATTENTION !!! Not fully working for frontend because of unresolved promises !!!!
6553
+ *
6554
+ * Async since #B121: the underlying `compareUrls` machinery is async (it can
6555
+ * await `validator::` routing-requirement validation), and the historical
6556
+ * un-awaited call meant no rule could ever match — callers received the
6557
+ * `false` sentinel for every url. Await this method (or `.then()` it); the
6558
+ * old "unresolved promises" caveat that used to sit here was this defect.
6551
6559
  *
6552
6560
  * @function getRouteByUrl
6561
+ * @async
6553
6562
  *
6554
6563
  * @param {string} url e.g.: /webroot/some/url/path or http
6555
6564
  * @param {string} [bundle] targeted bundle
@@ -6557,10 +6566,15 @@ function Routing() {
6557
6566
  * @param {object} [request]
6558
6567
  * @param {boolean} [isOverridingMethod] // will replace request.method by the provided method - Used for redirections
6559
6568
  *
6560
- * @returns {object|boolean} route - when route is found; `false` when not found
6569
+ * @returns {Promise<object|boolean>} route - when route is found; `false` when not found
6570
+ *
6571
+ * @example
6572
+ * // from an async context (e.g. a controller helper)
6573
+ * var route = await lib.routing.getRouteByUrl('/myapp/landing', 'myapp', 'GET', req);
6574
+ * if (route) { console.log(route.name, route.param); }
6561
6575
  * */
6562
6576
 
6563
- self.getRouteByUrl = function (url, bundle, method, request, isOverridingMethod) {
6577
+ self.getRouteByUrl = async function (url, bundle, method, request, isOverridingMethod) {
6564
6578
 
6565
6579
  if (
6566
6580
  arguments.length == 2
@@ -6744,8 +6758,16 @@ function Routing() {
6744
6758
  // normal case
6745
6759
  //Parsing for the right url.
6746
6760
  try {
6747
- isRoute = self.compareUrls(params, routing[name].url, request);
6748
- if (isRoute.past) {
6761
+ // #B121 root cause — `compareUrls` is async (it can await `validator::`
6762
+ // requirement validation), so the historical un-awaited call yielded a
6763
+ // Promise whose `.past` is always undefined: no rule could EVER match
6764
+ // server-side. Await it, and mirror the engine loop's exact-url
6765
+ // fast-path so this block stays identical to `server.js` (see the
6766
+ // N.B. above the loop).
6767
+ // was: isRoute = self.compareUrls(params, routing[name].url, request);
6768
+ // was: if (isRoute.past) {
6769
+ isRoute = await self.compareUrls(params, routing[name].url, request);
6770
+ if (pathname == routing[name].url || isRoute.past) {
6749
6771
  route = JSON.clone(routing[name]);
6750
6772
  route.name = name;
6751
6773
  // #B52-residual finding-2: getRouteByUrl returns `route` (a fresh clone of the
@@ -6839,7 +6861,11 @@ function Routing() {
6839
6861
  }
6840
6862
 
6841
6863
  // forms
6842
- var altRoute = self.compareUrls(params, url, request) || null;
6864
+ // #B121 root-cause sibling un-awaited async `compareUrls`: `altRoute`
6865
+ // was a Promise (truthy, `.past` undefined), so this not-found
6866
+ // bookkeeping branch could never run.
6867
+ // was: var altRoute = self.compareUrls(params, url, request) || null;
6868
+ var altRoute = ( await self.compareUrls(params, url, request) ) || null;
6843
6869
  if(altRoute.past && isMethodProvidedByDefault) {
6844
6870
  notFound = method.toUpperCase() +'::'+ altRoute.request.routing.rule;
6845
6871
  if ( typeof(self.notFound[notFound]) == 'undefined' ) {
@@ -14951,6 +14977,25 @@ function ValidatorPlugin(rules, data, formId, culture) {
14951
14977
  checkboxValueStateWarned[elId] = true;
14952
14978
  console.warn('[ FormValidator ] checkbox `'+ elId +'`: `value` no longer implies the checked state; add the `checked` attribute if it must render ticked, or set `data-gina-form-checkbox-value-as-state="true"` on the form to restore the legacy behavior');
14953
14979
  }
14980
+
14981
+ // Migration aid (#49) — the mirror direction: this markup used to be
14982
+ // auto-UN-ticked by its `value` (the pre-fix init pass cleared a
14983
+ // parser-checked box whose resolved value read false/empty) and now
14984
+ // stays ticked. Membership mirrors the old resolution chain:
14985
+ // `data-value` attribute, else `value` attribute, else the DOM
14986
+ // `.value` — with the empty string mapping to false. Reads run
14987
+ // before the checkbox init pass, so `.value` is parser-fresh here.
14988
+ var legacyUntickValue = $inputs[f].getAttribute('data-value') || $inputs[f].getAttribute('value') || $inputs[f].value;
14989
+ if (
14990
+ /^(checkbox)$/i.test($inputs[f].type)
14991
+ && !isCheckboxValueAsState($form)
14992
+ && $inputs[f].hasAttribute('checked')
14993
+ && ( legacyUntickValue === '' || /^false$/i.test(legacyUntickValue) )
14994
+ && !checkboxValueStateWarned[elId]
14995
+ ) {
14996
+ checkboxValueStateWarned[elId] = true;
14997
+ console.warn('[ FormValidator ] checkbox `'+ elId +'`: `value` no longer un-ticks a checked box; remove the `checked` attribute if it must render unticked, or set `data-gina-form-checkbox-value-as-state="true"` on the form to restore the legacy behavior');
14998
+ }
14954
14999
  }
14955
15000
  }
14956
15001