gina 0.6.12 → 0.6.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (591) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/README.md +24 -17
  3. package/ROADMAP.md +3 -2
  4. package/framework/v0.6.13/VERSION +1 -0
  5. package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.js +8 -0
  6. package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +165 -165
  7. package/framework/v0.6.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  8. package/framework/v0.6.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  9. package/framework/{v0.6.12 → v0.6.13}/core/config.js +26 -0
  10. package/framework/v0.6.13/core/connectors/redis/index.js +62 -0
  11. package/framework/v0.6.13/core/connectors/redis/lib/kv-store.js +394 -0
  12. package/framework/v0.6.13/core/connectors/sqlite/lib/kv-store.js +316 -0
  13. package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.js +202 -0
  14. package/framework/{v0.6.12 → v0.6.13}/core/gna.js +85 -0
  15. package/framework/{v0.6.12 → v0.6.13}/core/model/entity.js +13 -5
  16. package/framework/{v0.6.12 → v0.6.13}/core/router.js +147 -56
  17. package/framework/{v0.6.12 → v0.6.13}/core/server.js +61 -0
  18. package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/help.txt +8 -2
  19. package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/start.js +1 -1
  20. package/framework/{v0.6.12 → v0.6.13}/lib/index.js +18 -0
  21. package/framework/v0.6.13/lib/kv/package.json +7 -0
  22. package/framework/v0.6.13/lib/kv/src/main.js +862 -0
  23. package/framework/v0.6.13/lib/kv-store.js +112 -0
  24. package/framework/v0.6.13/lib/rate-limit/package.json +6 -0
  25. package/framework/v0.6.13/lib/rate-limit/src/main.js +399 -0
  26. package/framework/{v0.6.12 → v0.6.13}/lib/routing/src/main.js +8 -0
  27. package/framework/{v0.6.12 → v0.6.13}/package.json +1 -1
  28. package/gna.js +4 -4
  29. package/llms.txt +13 -3
  30. package/package.json +3 -3
  31. package/schema/routing.json +30 -0
  32. package/schema/settings.json +101 -0
  33. package/types/index.d.ts +9 -0
  34. package/framework/v0.6.12/VERSION +0 -1
  35. package/framework/v0.6.12/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  36. package/framework/v0.6.12/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  37. package/framework/v0.6.12/core/connectors/redis/index.js +0 -36
  38. /package/framework/{v0.6.12 → v0.6.13}/AUTHORS +0 -0
  39. /package/framework/{v0.6.12 → v0.6.13}/LICENSE +0 -0
  40. /package/framework/{v0.6.12 → v0.6.13}/core/asset/html/nolayout.html +0 -0
  41. /package/framework/{v0.6.12 → v0.6.13}/core/asset/html/static.html +0 -0
  42. /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/android-chrome-192x192.png +0 -0
  43. /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/android-chrome-512x512.png +0 -0
  44. /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/apple-touch-icon.png +0 -0
  45. /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/favicon-16x16.png +0 -0
  46. /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/favicon-32x32.png +0 -0
  47. /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/favicon.ico +0 -0
  48. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/README.md +0 -0
  49. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  50. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  51. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  52. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  53. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  54. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  55. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  56. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  57. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  58. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  59. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  60. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  61. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  62. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  63. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  64. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  65. /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  66. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/ai/index.js +0 -0
  67. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/ai/lib/connector.js +0 -0
  68. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/index.js +0 -0
  69. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/connector.js +0 -0
  70. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  71. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  72. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/n1ql.js +0 -0
  73. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/session-store.js +0 -0
  74. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  75. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  76. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/storage-store.js +0 -0
  77. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/duckdb/index.js +0 -0
  78. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/duckdb/lib/connector.js +0 -0
  79. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/index.js +0 -0
  80. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/lib/connector.js +0 -0
  81. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/lib/job-store.js +0 -0
  82. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  83. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/lib/session-store.js +0 -0
  84. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mysql/index.js +0 -0
  85. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mysql/lib/connector.js +0 -0
  86. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/param-redact.js +0 -0
  87. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/postgresql/index.js +0 -0
  88. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/postgresql/lib/connector.js +0 -0
  89. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/redis/lib/connector.js +0 -0
  90. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/redis/lib/job-store.js +0 -0
  91. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/redis/lib/render-cache-store.js +0 -0
  92. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/redis/lib/session-store.js +0 -0
  93. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/scylladb/index.js +0 -0
  94. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/scylladb/lib/connector.js +0 -0
  95. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/scylladb/lib/session-store.js +0 -0
  96. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sql-parser.js +0 -0
  97. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sqlite/index.js +0 -0
  98. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sqlite/lib/connector.js +0 -0
  99. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sqlite/lib/job-store.js +0 -0
  100. /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sqlite/lib/session-store.js +0 -0
  101. /package/framework/{v0.6.12 → v0.6.13}/core/content.encoding +0 -0
  102. /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.framework.js +0 -0
  103. /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-json.js +0 -0
  104. /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-nunjucks-async.js +0 -0
  105. /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-nunjucks.js +0 -0
  106. /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-stream.js +0 -0
  107. /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-swig-async.js +0 -0
  108. /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-swig.js +0 -0
  109. /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-v1.js +0 -0
  110. /package/framework/{v0.6.12 → v0.6.13}/core/controller/index.js +0 -0
  111. /package/framework/{v0.6.12 → v0.6.13}/core/controller/inspector-window-emit.js +0 -0
  112. /package/framework/{v0.6.12 → v0.6.13}/core/controller/release-banner.js +0 -0
  113. /package/framework/{v0.6.12 → v0.6.13}/core/dev/index.js +0 -0
  114. /package/framework/{v0.6.12 → v0.6.13}/core/dev/lib/class.js +0 -0
  115. /package/framework/{v0.6.12 → v0.6.13}/core/dev/lib/factory.js +0 -0
  116. /package/framework/{v0.6.12 → v0.6.13}/core/dev/lib/tools.js +0 -0
  117. /package/framework/{v0.6.12 → v0.6.13}/core/locales/README.md +0 -0
  118. /package/framework/{v0.6.12 → v0.6.13}/core/locales/currency.json +0 -0
  119. /package/framework/{v0.6.12 → v0.6.13}/core/locales/dist/language/en.json +0 -0
  120. /package/framework/{v0.6.12 → v0.6.13}/core/locales/dist/language/fr.json +0 -0
  121. /package/framework/{v0.6.12 → v0.6.13}/core/locales/dist/region/en.json +0 -0
  122. /package/framework/{v0.6.12 → v0.6.13}/core/locales/dist/region/fr.json +0 -0
  123. /package/framework/{v0.6.12 → v0.6.13}/core/locales/index.js +0 -0
  124. /package/framework/{v0.6.12 → v0.6.13}/core/mime.types +0 -0
  125. /package/framework/{v0.6.12 → v0.6.13}/core/model/index.js +0 -0
  126. /package/framework/{v0.6.12 → v0.6.13}/core/model/template/entityFactory.js +0 -0
  127. /package/framework/{v0.6.12 → v0.6.13}/core/model/template/index.js +0 -0
  128. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/README.md +0 -0
  129. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/index.js +0 -0
  130. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/csrf/README.md +0 -0
  131. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/csrf/package.json +0 -0
  132. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/csrf/src/main.js +0 -0
  133. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/README.md +0 -0
  134. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coep/README.md +0 -0
  135. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coep/package.json +0 -0
  136. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  137. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coop/README.md +0 -0
  138. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coop/package.json +0 -0
  139. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  140. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/corp/README.md +0 -0
  141. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/corp/package.json +0 -0
  142. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  143. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/csp/README.md +0 -0
  144. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/csp/package.json +0 -0
  145. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  146. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  147. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  148. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  149. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  150. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  151. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  152. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  153. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  154. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  155. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/package.json +0 -0
  156. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  157. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  158. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  159. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/src/main.js +0 -0
  160. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  161. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  162. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  163. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  164. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  165. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  166. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  167. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  168. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  169. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  170. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  171. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  172. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  173. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  174. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  175. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  176. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  177. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  178. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/session/README.md +0 -0
  179. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/session/package.json +0 -0
  180. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/session/src/main.js +0 -0
  181. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/storage/README.md +0 -0
  182. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/storage/build.json +0 -0
  183. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/storage/package.json +0 -0
  184. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/storage/src/main.js +0 -0
  185. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/README.md +0 -0
  186. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/build.json +0 -0
  187. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/package.json +0 -0
  188. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/src/form-validator.js +0 -0
  189. /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/src/main.js +0 -0
  190. /package/framework/{v0.6.12 → v0.6.13}/core/server.express.js +0 -0
  191. /package/framework/{v0.6.12 → v0.6.13}/core/server.isaac.js +0 -0
  192. /package/framework/{v0.6.12 → v0.6.13}/core/status.codes +0 -0
  193. /package/framework/{v0.6.12 → v0.6.13}/core/template/_gitignore +0 -0
  194. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/app.json +0 -0
  195. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  196. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/routing.json +0 -0
  197. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/settings.json +0 -0
  198. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  199. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/templates.json +0 -0
  200. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  201. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  202. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  203. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  204. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/index.js +0 -0
  205. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/locales/en.json +0 -0
  206. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  207. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  208. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  209. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  210. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  211. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  212. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  213. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  214. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/readme.md +0 -0
  215. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/sw.js +0 -0
  216. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  217. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  218. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  219. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  220. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  221. /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  222. /package/framework/{v0.6.12 → v0.6.13}/core/template/command/gina.bat.tpl +0 -0
  223. /package/framework/{v0.6.12 → v0.6.13}/core/template/command/gina.tpl +0 -0
  224. /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/env.json +0 -0
  225. /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/manifest.json +0 -0
  226. /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/package.json +0 -0
  227. /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/settings.json +0 -0
  228. /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/statics.json +0 -0
  229. /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/templates.json +0 -0
  230. /package/framework/{v0.6.12 → v0.6.13}/core/template/error/client/json/401.json +0 -0
  231. /package/framework/{v0.6.12 → v0.6.13}/core/template/error/client/json/403.json +0 -0
  232. /package/framework/{v0.6.12 → v0.6.13}/core/template/error/client/json/404.json +0 -0
  233. /package/framework/{v0.6.12 → v0.6.13}/core/template/error/server/html/50x.html +0 -0
  234. /package/framework/{v0.6.12 → v0.6.13}/core/template/error/server/json/500.json +0 -0
  235. /package/framework/{v0.6.12 → v0.6.13}/core/template/error/server/json/503.json +0 -0
  236. /package/framework/{v0.6.12 → v0.6.13}/core/template/extensions/logger/config.json +0 -0
  237. /package/framework/{v0.6.12 → v0.6.13}/helpers/console.js +0 -0
  238. /package/framework/{v0.6.12 → v0.6.13}/helpers/context.js +0 -0
  239. /package/framework/{v0.6.12 → v0.6.13}/helpers/data/LICENSE +0 -0
  240. /package/framework/{v0.6.12 → v0.6.13}/helpers/data/README.md +0 -0
  241. /package/framework/{v0.6.12 → v0.6.13}/helpers/data/package.json +0 -0
  242. /package/framework/{v0.6.12 → v0.6.13}/helpers/data/src/main.js +0 -0
  243. /package/framework/{v0.6.12 → v0.6.13}/helpers/dateFormat.js +0 -0
  244. /package/framework/{v0.6.12 → v0.6.13}/helpers/index.js +0 -0
  245. /package/framework/{v0.6.12 → v0.6.13}/helpers/json/LICENSE +0 -0
  246. /package/framework/{v0.6.12 → v0.6.13}/helpers/json/README.md +0 -0
  247. /package/framework/{v0.6.12 → v0.6.13}/helpers/json/package.json +0 -0
  248. /package/framework/{v0.6.12 → v0.6.13}/helpers/json/src/main.js +0 -0
  249. /package/framework/{v0.6.12 → v0.6.13}/helpers/path.js +0 -0
  250. /package/framework/{v0.6.12 → v0.6.13}/helpers/plugins/README.md +0 -0
  251. /package/framework/{v0.6.12 → v0.6.13}/helpers/plugins/package.json +0 -0
  252. /package/framework/{v0.6.12 → v0.6.13}/helpers/plugins/src/api-error.js +0 -0
  253. /package/framework/{v0.6.12 → v0.6.13}/helpers/plugins/src/main.js +0 -0
  254. /package/framework/{v0.6.12 → v0.6.13}/helpers/prototypes.js +0 -0
  255. /package/framework/{v0.6.12 → v0.6.13}/helpers/task.js +0 -0
  256. /package/framework/{v0.6.12 → v0.6.13}/helpers/text.js +0 -0
  257. /package/framework/{v0.6.12 → v0.6.13}/lib/admin/package.json +0 -0
  258. /package/framework/{v0.6.12 → v0.6.13}/lib/admin/src/main.js +0 -0
  259. /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/README.md +0 -0
  260. /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/build.json +0 -0
  261. /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/package.json +0 -0
  262. /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/src/dep/jszip.min.js +0 -0
  263. /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/src/main.js +0 -0
  264. /package/framework/{v0.6.12 → v0.6.13}/lib/async/package.json +0 -0
  265. /package/framework/{v0.6.12 → v0.6.13}/lib/async/src/main.js +0 -0
  266. /package/framework/{v0.6.12 → v0.6.13}/lib/audit/package.json +0 -0
  267. /package/framework/{v0.6.12 → v0.6.13}/lib/audit/src/main.js +0 -0
  268. /package/framework/{v0.6.12 → v0.6.13}/lib/audit-store.js +0 -0
  269. /package/framework/{v0.6.12 → v0.6.13}/lib/authn/package.json +0 -0
  270. /package/framework/{v0.6.12 → v0.6.13}/lib/authn/src/lockout.js +0 -0
  271. /package/framework/{v0.6.12 → v0.6.13}/lib/authn/src/main.js +0 -0
  272. /package/framework/{v0.6.12 → v0.6.13}/lib/authn/src/totp.js +0 -0
  273. /package/framework/{v0.6.12 → v0.6.13}/lib/authz-gate/package.json +0 -0
  274. /package/framework/{v0.6.12 → v0.6.13}/lib/authz-gate/src/main.js +0 -0
  275. /package/framework/{v0.6.12 → v0.6.13}/lib/cache/README.md +0 -0
  276. /package/framework/{v0.6.12 → v0.6.13}/lib/cache/build.json +0 -0
  277. /package/framework/{v0.6.12 → v0.6.13}/lib/cache/package.json +0 -0
  278. /package/framework/{v0.6.12 → v0.6.13}/lib/cache/src/main.js +0 -0
  279. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/aliases.json +0 -0
  280. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/audit/arguments.json +0 -0
  281. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/audit/help.txt +0 -0
  282. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/audit/verify.js +0 -0
  283. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/add.js +0 -0
  284. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/arguments.json +0 -0
  285. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/build.js +0 -0
  286. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/copy.js +0 -0
  287. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/cp.js +0 -0
  288. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/help.js +0 -0
  289. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/help.txt +0 -0
  290. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  291. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/list.js +0 -0
  292. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/man.js +0 -0
  293. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/mcp-start.js +0 -0
  294. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/mcp.js +0 -0
  295. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/oas.js +0 -0
  296. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/openapi.js +0 -0
  297. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/remove.js +0 -0
  298. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/rename.js +0 -0
  299. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/restart.js +0 -0
  300. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/rm.js +0 -0
  301. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/start.js +0 -0
  302. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/status.js +0 -0
  303. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/stop.js +0 -0
  304. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/types.js +0 -0
  305. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/cache/arguments.json +0 -0
  306. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/cache/clear.js +0 -0
  307. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/cache/help.txt +0 -0
  308. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/cache/stats.js +0 -0
  309. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/add.js +0 -0
  310. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/arguments.json +0 -0
  311. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/help.js +0 -0
  312. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/help.txt +0 -0
  313. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/infer.js +0 -0
  314. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/list.js +0 -0
  315. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/migrate.js +0 -0
  316. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/models.js +0 -0
  317. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/remove.js +0 -0
  318. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/rm.js +0 -0
  319. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/test.js +0 -0
  320. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/arguments.json +0 -0
  321. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/help.js +0 -0
  322. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/help.txt +0 -0
  323. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/man.js +0 -0
  324. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/ps.js +0 -0
  325. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/stop.js +0 -0
  326. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/add.js +0 -0
  327. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/arguments.json +0 -0
  328. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/help.txt +0 -0
  329. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/args.js +0 -0
  330. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/namespace.js +0 -0
  331. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  332. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/reference-scan.js +0 -0
  333. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/scaffold.js +0 -0
  334. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/remove.js +0 -0
  335. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/rename.js +0 -0
  336. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/rm.js +0 -0
  337. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/add.js +0 -0
  338. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/get.js +0 -0
  339. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/help.js +0 -0
  340. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/help.txt +0 -0
  341. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/link-dev.js +0 -0
  342. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/list.js +0 -0
  343. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/remove.js +0 -0
  344. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/rm.js +0 -0
  345. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/set.js +0 -0
  346. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/unset.js +0 -0
  347. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/use.js +0 -0
  348. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/add.js +0 -0
  349. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/arguments.json +0 -0
  350. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/build.js +0 -0
  351. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/dot.js +0 -0
  352. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/get.js +0 -0
  353. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/help.js +0 -0
  354. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/help.txt +0 -0
  355. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/init.js +0 -0
  356. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/link-node-modules.js +0 -0
  357. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/link.js +0 -0
  358. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/list.js +0 -0
  359. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/man.js +0 -0
  360. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/msg.json +0 -0
  361. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/open.js +0 -0
  362. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/remove.js +0 -0
  363. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/reset.js +0 -0
  364. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/restart.js +0 -0
  365. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/set.js +0 -0
  366. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/start.js +0 -0
  367. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/status.js +0 -0
  368. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/stop.js +0 -0
  369. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/tail.js +0 -0
  370. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/update.js +0 -0
  371. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/version.js +0 -0
  372. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/gina-dev.1.md +0 -0
  373. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/gina-framework.1.md +0 -0
  374. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/gina.1.md +0 -0
  375. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/helper.js +0 -0
  376. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/add.js +0 -0
  377. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/arguments.json +0 -0
  378. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/export.js +0 -0
  379. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/help.js +0 -0
  380. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/help.txt +0 -0
  381. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/import.js +0 -0
  382. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/scan.js +0 -0
  383. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/_host.js +0 -0
  384. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/arguments.json +0 -0
  385. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/build.js +0 -0
  386. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/help.js +0 -0
  387. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/help.txt +0 -0
  388. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/list.js +0 -0
  389. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/man.js +0 -0
  390. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/rm.js +0 -0
  391. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/run.js +0 -0
  392. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/index.js +0 -0
  393. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/inspector/help.js +0 -0
  394. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/inspector/help.txt +0 -0
  395. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/inspector/open.js +0 -0
  396. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/man-render.js +0 -0
  397. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/arguments.json +0 -0
  398. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/help.js +0 -0
  399. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/help.txt +0 -0
  400. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/kill.js +0 -0
  401. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/list.js +0 -0
  402. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/msg.json +0 -0
  403. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/help.js +0 -0
  404. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/help.txt +0 -0
  405. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/inc/scan.js +0 -0
  406. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/list.js +0 -0
  407. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/reset.js +0 -0
  408. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/set.js +0 -0
  409. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/add.js +0 -0
  410. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/arguments.json +0 -0
  411. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/backup.js +0 -0
  412. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/build.js +0 -0
  413. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/help.js +0 -0
  414. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/help.txt +0 -0
  415. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/import.js +0 -0
  416. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/list.js +0 -0
  417. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/man.js +0 -0
  418. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/move.js +0 -0
  419. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/remove.js +0 -0
  420. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/rename.js +0 -0
  421. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/restart.js +0 -0
  422. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/restore.js +0 -0
  423. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/rm.js +0 -0
  424. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/start.js +0 -0
  425. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/status.js +0 -0
  426. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/stop.js +0 -0
  427. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/arguments.json +0 -0
  428. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/help.js +0 -0
  429. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/help.txt +0 -0
  430. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/list.js +0 -0
  431. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/remove.js +0 -0
  432. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/set.js +0 -0
  433. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/add.js +0 -0
  434. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/help.js +0 -0
  435. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/help.txt +0 -0
  436. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/link-local.js +0 -0
  437. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/link-production.js +0 -0
  438. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/list.js +0 -0
  439. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/remove.js +0 -0
  440. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/rm.js +0 -0
  441. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/use.js +0 -0
  442. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/arguments.json +0 -0
  443. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/check.js +0 -0
  444. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/help.js +0 -0
  445. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/help.txt +0 -0
  446. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/scan.js +0 -0
  447. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/help.js +0 -0
  448. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/list.js +0 -0
  449. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/man.js +0 -0
  450. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/arguments.json +0 -0
  451. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/gc.js +0 -0
  452. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/help.txt +0 -0
  453. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/stats.js +0 -0
  454. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/verify.js +0 -0
  455. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/view/add.js +0 -0
  456. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd-status-format/package.json +0 -0
  457. /package/framework/{v0.6.12 → v0.6.13}/lib/cmd-status-format/src/main.js +0 -0
  458. /package/framework/{v0.6.12 → v0.6.13}/lib/collection/README.md +0 -0
  459. /package/framework/{v0.6.12 → v0.6.13}/lib/collection/build.json +0 -0
  460. /package/framework/{v0.6.12 → v0.6.13}/lib/collection/package.json +0 -0
  461. /package/framework/{v0.6.12 → v0.6.13}/lib/collection/src/main.js +0 -0
  462. /package/framework/{v0.6.12 → v0.6.13}/lib/config.js +0 -0
  463. /package/framework/{v0.6.12 → v0.6.13}/lib/connector-config/package.json +0 -0
  464. /package/framework/{v0.6.12 → v0.6.13}/lib/connector-config/src/main.js +0 -0
  465. /package/framework/{v0.6.12 → v0.6.13}/lib/connector-error/package.json +0 -0
  466. /package/framework/{v0.6.12 → v0.6.13}/lib/connector-error/src/main.js +0 -0
  467. /package/framework/{v0.6.12 → v0.6.13}/lib/connector-registry/package.json +0 -0
  468. /package/framework/{v0.6.12 → v0.6.13}/lib/connector-registry/src/main.js +0 -0
  469. /package/framework/{v0.6.12 → v0.6.13}/lib/cron/README.md +0 -0
  470. /package/framework/{v0.6.12 → v0.6.13}/lib/cron/package.json +0 -0
  471. /package/framework/{v0.6.12 → v0.6.13}/lib/cron/src/main.js +0 -0
  472. /package/framework/{v0.6.12 → v0.6.13}/lib/domain/LICENSE +0 -0
  473. /package/framework/{v0.6.12 → v0.6.13}/lib/domain/README.md +0 -0
  474. /package/framework/{v0.6.12 → v0.6.13}/lib/domain/package.json +0 -0
  475. /package/framework/{v0.6.12 → v0.6.13}/lib/domain/src/main.js +0 -0
  476. /package/framework/{v0.6.12 → v0.6.13}/lib/dto/package.json +0 -0
  477. /package/framework/{v0.6.12 → v0.6.13}/lib/dto/src/main.js +0 -0
  478. /package/framework/{v0.6.12 → v0.6.13}/lib/dto-pipe/package.json +0 -0
  479. /package/framework/{v0.6.12 → v0.6.13}/lib/dto-pipe/src/main.js +0 -0
  480. /package/framework/{v0.6.12 → v0.6.13}/lib/dto-types/package.json +0 -0
  481. /package/framework/{v0.6.12 → v0.6.13}/lib/dto-types/src/main.js +0 -0
  482. /package/framework/{v0.6.12 → v0.6.13}/lib/generator/index.js +0 -0
  483. /package/framework/{v0.6.12 → v0.6.13}/lib/i18n/package.json +0 -0
  484. /package/framework/{v0.6.12 → v0.6.13}/lib/i18n/src/main.js +0 -0
  485. /package/framework/{v0.6.12 → v0.6.13}/lib/image-build/package.json +0 -0
  486. /package/framework/{v0.6.12 → v0.6.13}/lib/image-build/src/main.js +0 -0
  487. /package/framework/{v0.6.12 → v0.6.13}/lib/inherits/LICENSE +0 -0
  488. /package/framework/{v0.6.12 → v0.6.13}/lib/inherits/README.md +0 -0
  489. /package/framework/{v0.6.12 → v0.6.13}/lib/inherits/package.json +0 -0
  490. /package/framework/{v0.6.12 → v0.6.13}/lib/inherits/src/main.js +0 -0
  491. /package/framework/{v0.6.12 → v0.6.13}/lib/inspector-events/package.json +0 -0
  492. /package/framework/{v0.6.12 → v0.6.13}/lib/inspector-events/src/main.js +0 -0
  493. /package/framework/{v0.6.12 → v0.6.13}/lib/inspector-redact/package.json +0 -0
  494. /package/framework/{v0.6.12 → v0.6.13}/lib/inspector-redact/src/main.js +0 -0
  495. /package/framework/{v0.6.12 → v0.6.13}/lib/instrument/package.json +0 -0
  496. /package/framework/{v0.6.12 → v0.6.13}/lib/instrument/src/main.js +0 -0
  497. /package/framework/{v0.6.12 → v0.6.13}/lib/job/package.json +0 -0
  498. /package/framework/{v0.6.12 → v0.6.13}/lib/job/src/main.js +0 -0
  499. /package/framework/{v0.6.12 → v0.6.13}/lib/job-store.js +0 -0
  500. /package/framework/{v0.6.12 → v0.6.13}/lib/json-config-header/package.json +0 -0
  501. /package/framework/{v0.6.12 → v0.6.13}/lib/json-config-header/src/main.js +0 -0
  502. /package/framework/{v0.6.12 → v0.6.13}/lib/loading-state/package.json +0 -0
  503. /package/framework/{v0.6.12 → v0.6.13}/lib/loading-state/src/main.js +0 -0
  504. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/README.md +0 -0
  505. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/package.json +0 -0
  506. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/default/index.js +0 -0
  507. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/file/index.js +0 -0
  508. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  509. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  510. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/mq/index.js +0 -0
  511. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/mq/listener.js +0 -0
  512. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/mq/speaker.js +0 -0
  513. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/helper.js +0 -0
  514. /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/main.js +0 -0
  515. /package/framework/{v0.6.12 → v0.6.13}/lib/maintenance/package.json +0 -0
  516. /package/framework/{v0.6.12 → v0.6.13}/lib/maintenance/src/main.js +0 -0
  517. /package/framework/{v0.6.12 → v0.6.13}/lib/math/index.js +0 -0
  518. /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-dispatch/package.json +0 -0
  519. /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-dispatch/src/main.js +0 -0
  520. /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-http/package.json +0 -0
  521. /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-http/src/main.js +0 -0
  522. /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-server/package.json +0 -0
  523. /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-server/src/main.js +0 -0
  524. /package/framework/{v0.6.12 → v0.6.13}/lib/merge/README.md +0 -0
  525. /package/framework/{v0.6.12 → v0.6.13}/lib/merge/package.json +0 -0
  526. /package/framework/{v0.6.12 → v0.6.13}/lib/merge/src/main.js +0 -0
  527. /package/framework/{v0.6.12 → v0.6.13}/lib/metrics/package.json +0 -0
  528. /package/framework/{v0.6.12 → v0.6.13}/lib/metrics/src/main.js +0 -0
  529. /package/framework/{v0.6.12 → v0.6.13}/lib/model.js +0 -0
  530. /package/framework/{v0.6.12 → v0.6.13}/lib/net-locality/package.json +0 -0
  531. /package/framework/{v0.6.12 → v0.6.13}/lib/net-locality/src/main.js +0 -0
  532. /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-filters/README.md +0 -0
  533. /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-filters/package.json +0 -0
  534. /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-filters/src/main.js +0 -0
  535. /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-resolver/package.json +0 -0
  536. /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-resolver/src/main.js +0 -0
  537. /package/framework/{v0.6.12 → v0.6.13}/lib/proc.js +0 -0
  538. /package/framework/{v0.6.12 → v0.6.13}/lib/push/package.json +0 -0
  539. /package/framework/{v0.6.12 → v0.6.13}/lib/push/src/main.js +0 -0
  540. /package/framework/{v0.6.12 → v0.6.13}/lib/release-watch/package.json +0 -0
  541. /package/framework/{v0.6.12 → v0.6.13}/lib/release-watch/src/main.js +0 -0
  542. /package/framework/{v0.6.12 → v0.6.13}/lib/render-cache/package.json +0 -0
  543. /package/framework/{v0.6.12 → v0.6.13}/lib/render-cache/src/main.js +0 -0
  544. /package/framework/{v0.6.12 → v0.6.13}/lib/render-cache-store.js +0 -0
  545. /package/framework/{v0.6.12 → v0.6.13}/lib/routing/README.md +0 -0
  546. /package/framework/{v0.6.12 → v0.6.13}/lib/routing/build.json +0 -0
  547. /package/framework/{v0.6.12 → v0.6.13}/lib/routing/package.json +0 -0
  548. /package/framework/{v0.6.12 → v0.6.13}/lib/routing/src/radix.js +0 -0
  549. /package/framework/{v0.6.12 → v0.6.13}/lib/routing-introspect/package.json +0 -0
  550. /package/framework/{v0.6.12 → v0.6.13}/lib/routing-introspect/src/main.js +0 -0
  551. /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/package.json +0 -0
  552. /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/src/backends/env.js +0 -0
  553. /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/src/backends/file.js +0 -0
  554. /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/src/env-file.js +0 -0
  555. /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/src/main.js +0 -0
  556. /package/framework/{v0.6.12 → v0.6.13}/lib/session-store.js +0 -0
  557. /package/framework/{v0.6.12 → v0.6.13}/lib/shell.js +0 -0
  558. /package/framework/{v0.6.12 → v0.6.13}/lib/sqlite-driver.js +0 -0
  559. /package/framework/{v0.6.12 → v0.6.13}/lib/state.js +0 -0
  560. /package/framework/{v0.6.12 → v0.6.13}/lib/storage/package.json +0 -0
  561. /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/local-cas.js +0 -0
  562. /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/local-stream.js +0 -0
  563. /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/local.js +0 -0
  564. /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/main.js +0 -0
  565. /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/meta-store.js +0 -0
  566. /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/s3.js +0 -0
  567. /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/util.js +0 -0
  568. /package/framework/{v0.6.12 → v0.6.13}/lib/storage-store.js +0 -0
  569. /package/framework/{v0.6.12 → v0.6.13}/lib/swig-filters/README.md +0 -0
  570. /package/framework/{v0.6.12 → v0.6.13}/lib/swig-filters/package.json +0 -0
  571. /package/framework/{v0.6.12 → v0.6.13}/lib/swig-filters/src/main.js +0 -0
  572. /package/framework/{v0.6.12 → v0.6.13}/lib/swig-resolver/package.json +0 -0
  573. /package/framework/{v0.6.12 → v0.6.13}/lib/swig-resolver/src/main.js +0 -0
  574. /package/framework/{v0.6.12 → v0.6.13}/lib/template-loaders/package.json +0 -0
  575. /package/framework/{v0.6.12 → v0.6.13}/lib/template-loaders/src/loaders/http.js +0 -0
  576. /package/framework/{v0.6.12 → v0.6.13}/lib/template-loaders/src/loaders/memory.js +0 -0
  577. /package/framework/{v0.6.12 → v0.6.13}/lib/template-loaders/src/main.js +0 -0
  578. /package/framework/{v0.6.12 → v0.6.13}/lib/url/README.md +0 -0
  579. /package/framework/{v0.6.12 → v0.6.13}/lib/url/index.js +0 -0
  580. /package/framework/{v0.6.12 → v0.6.13}/lib/url/routing.json +0 -0
  581. /package/framework/{v0.6.12 → v0.6.13}/lib/uuid/package.json +0 -0
  582. /package/framework/{v0.6.12 → v0.6.13}/lib/uuid/src/main.js +0 -0
  583. /package/framework/{v0.6.12 → v0.6.13}/lib/validator.js +0 -0
  584. /package/framework/{v0.6.12 → v0.6.13}/lib/watcher/package.json +0 -0
  585. /package/framework/{v0.6.12 → v0.6.13}/lib/watcher/src/main.js +0 -0
  586. /package/framework/{v0.6.12 → v0.6.13}/lib/ws-framing/package.json +0 -0
  587. /package/framework/{v0.6.12 → v0.6.13}/lib/ws-framing/src/main.js +0 -0
  588. /package/framework/{v0.6.12 → v0.6.13}/lib/ws-query/package.json +0 -0
  589. /package/framework/{v0.6.12 → v0.6.13}/lib/ws-query/src/main.js +0 -0
  590. /package/framework/{v0.6.12 → v0.6.13}/lib/ws-session/package.json +0 -0
  591. /package/framework/{v0.6.12 → v0.6.13}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -9,7 +9,7 @@ and is generated by [Changie](https://github.com/miniscruff/changie).
9
9
  ## 0.6.12 - 2026-08-20
10
10
  ### Fixed
11
11
  * Refreshed the external references carried by the framework READMEs. The country-codes locale README pointed at a Simple Data Format specification URL that no longer exists (404); it now names the Tabular Data Package specification that superseded it, matching the upstream dataset the file mirrors. Every remaining plain-HTTP reference in the locales and frontend-asset READMEs is now HTTPS, with the geonames.org link resolved to the www host because the bare domain redirects back down to HTTP. Documentation only; no runtime or API change.
12
- * Collection.find(), findOne(), or() and update() now throw a descriptive Error - naming the offending key - when a filter object carries an undefined value, instead of silently dropping the key. Previously the internal JSON round-trip stripped such keys before matching, so a single-key filter degraded to the match-everything {} filter: findOne({ id: source.missingId }) returned the collection's FIRST row instead of null, and update() with such a filter mutated EVERY record. ACTION REQUIRED if you relied on the old behaviour: build filters conditionally (only add a key when its value is defined) - an explicitly empty {} filter still means "no constraint" and null values remain legal needles. The refusal also hardens the FormValidator's conditional-case rules lookup, which could previously merge the first condition's rules when the case field was absent from the form.
12
+ * Collection query methods now throw a descriptive Error - naming the offending key - when a filter object carries an undefined value, instead of silently dropping the key. Every method that accepts a filter object is covered: find(), findOne(), or(), update(), replace(), max(), notIn() and delete() - the last two because notIn() routes a filter-object argument through find(); its array form, notIn(rows, key), is unaffected. Previously the internal JSON round-trip stripped such keys before matching, so a single-key filter degraded to the match-everything {} filter: findOne({ id: source.missingId }) returned the collection's FIRST row instead of null, update() with such a filter mutated EVERY record, and delete({ id: source.missingId }) returned an EMPTY collection with every record removed. ACTION REQUIRED if you relied on the old behaviour: build filters conditionally (only add a key when its value is defined) - an explicitly empty {} filter still means "no constraint" and null values remain legal needles. The refusal also hardens the FormValidator's conditional-case rules lookup, which could previously merge the first condition's rules when the case field was absent from the form.
13
13
  * A non-string field value no longer aborts the whole form validation pass. The isEmail, isJsonWebToken and trim rules called a string method on the field value without checking its type, so a value like 123, true or [] - reachable from a JSON request body, or from a checkbox on the client - threw, and the rule driver re-threw, killing every remaining field: server-side the request went unvalidated, client-side the boot-time binding loop died and later forms silently lost validation and CSRF token injection. All three now leave a non-string untouched: isEmail and isJsonWebToken record a normal rule error for it (it is invalid, not silently accepted), and trim passes it through untransformed, matching how isFloat already behaved. Whitespace trimming of real strings is unchanged.
14
14
 
15
15
  ## 0.6.11 - 2026-08-19
package/README.md CHANGED
@@ -34,6 +34,7 @@ MVC framework for Node.js and Bun with built-in HTTP/2, multi-bundle architectur
34
34
  | Response caching | Per-route render cache — memory / fs / Redis tiers, cross-replica warm start, event-driven invalidation, RFC 9211 `Cache-Status` |
35
35
  | Authentication | `lib.authn` primitives — scrypt password hashing as self-describing PHC strings (argon2 / bcrypt verify-only for migration), NIST SP 800-63B policy, enumeration-safe `dummyVerify`, PCI-DSS account lockout, RFC 6238 TOTP |
36
36
  | Route authorization | `requireAuth` / `roles` / `policy` per route or deny-by-default, login bounce with `resumeRequest()`, `self.hasRole()` |
37
+ | Rate limiting | Opt-in identified-caller quotas at the router (#MS6) — fixed-window counters over the KV primitive (per-process, or replica-shared via redis/sqlite), per-route overrides/exemptions, 429 + `Retry-After` + draft `RateLimit` header fields; anonymous flood control stays at your edge by design |
37
38
  | Audit trail | Opt-in append-only JSONL audit log (`self.audit()`), authorization denials auto-recorded, always-on request ids; opt-in HMAC hash chain verified offline by `gina audit:verify` |
38
39
  | CSRF protection | Signed double-submit token middleware + Origin/Referer pre-filter + hardened session cookie |
39
40
  | Security headers | CSP with per-response nonces, HSTS, COOP / COEP / CORP, Referrer-Policy and the X-* family — per-header plugins or one `SecurityHeaders` wrapper |
@@ -61,28 +62,34 @@ open https://localhost:3100
61
62
 
62
63
  > **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.)
63
64
 
64
- ## What's in 0.6.12
65
+ ## What's in 0.6.13
65
66
 
66
67
  > **Restart your bundles AND rebuild them.** The browser bundle changed in this
67
- > release both code fixes below ship in it (`lib/collection` and the
68
- > FormValidator rule engine), so a restart alone keeps serving the old client
69
- > code. Run `gina bundle:build` for each bundle as well as `gina bundle:restart`.
68
+ > release. The client-side delta is inert it is the per-route flag propagation
69
+ > the new rate limiter needs on the server, which is dead code in the browser
70
+ > but the baked copy each bundle serves is no longer byte-identical to the
71
+ > shipped one, so run `gina bundle:build` for each bundle as well as
72
+ > `gina bundle:restart`. Every behaviour change below is server-side.
70
73
 
71
- > **No settings reset.** `0.6.12` is a patch — the `shortVersion` stays `0.6`, so
74
+ > **No settings reset.** `0.6.13` is a patch — the `shortVersion` stays `0.6`, so
72
75
  > your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
73
76
 
74
- **This is a fixes-only release: three fixes, two of them reported through GitHub
75
- issues (#62, #65).** It closes a silent match-everything defect in the
76
- `Collection` filter path and a crash in three validator rules that took the rest
77
- of the validation pass down with it. **Two behaviour changes to check before you
78
- upgrade** an undefined-valued `Collection` filter key now throws where it
79
- previously matched every record, and `isEmail` / `isJsonWebToken` / `trim` now
80
- record a normal verdict for a non-string value instead of aborting the pass.
81
- Details are in the [migration guide](https://gina.io/docs/migration).
82
-
83
- - **Fixed`Collection.find()`, `findOne()`, `or()` and `update()` refuse an undefined-valued filter key instead of matching everything (#B396, issue #65).** `find()` round-trips its filter objects through `JSON.stringify`, which silently **drops** keys whose value is `undefined` so a single-key filter built from a possibly-absent field degraded to the match-everything `{}` filter. `findOne({ id: source.missingId })` returned the collection's **first row** instead of the `null` the calling guard was written for, and `update()` with such a filter wrote its `set` onto **every** record. The refusal always intended for this input could never fire, because the serialization stripped the key before the matcher ran. All four entry points now throw a descriptive error naming the offending key. **ACTION REQUIRED if you relied on the old behaviour** (an undefined value acting as "no constraint"): build the filter conditionally, adding a key only when its value is defined. Deliberately unchanged an explicitly empty `{}` filter still means "no constraint", `null` remains a legal needle, and `delete()` / `notIn()` never had the defect. The same refusal also hardens the FormValidator's conditional-case rules lookup, which could previously merge the first condition's rules when the case field was absent from the form. Browser-bundled.
84
- - **Fixeda non-string field value no longer aborts the whole form validation pass (#B200).** The `isEmail`, `isJsonWebToken` and `trim` rules called a string method on the field value without checking its type, so a value that was not a string a `123`, `true` or `[]` arriving from a JSON request body, or a checkbox boolean on the client threw, and the rule driver re-threw, **killing every remaining field in the pass**. Server-side the request went unvalidated; client-side the boot-time binding loop died, and forms bound after the failing one silently lost both validation and CSRF token injection. All three now leave a non-string untouched: `isEmail` and `isJsonWebToken` record their normal rule error for it (the value is *invalid*, not silently accepted), and `trim`, being a transform rather than a check, passes it through untransformed matching how `isFloat` already behaved. Whitespace trimming of real strings is unchanged. No action is required; if you added a defensive upstream coercion to work around the crash, you can remove it. Browser-bundled.
85
- - **Fixed — the external references carried by the framework READMEs are current again (issue #62).** The country-codes locale README pointed at a Simple Data Format specification URL that no longer resolves; it now names the Tabular Data Package specification that superseded it, matching the upstream dataset the file mirrors. Every remaining plain-HTTP reference in the locales and frontend-asset READMEs is now HTTPS, with the geonames.org link resolved to the `www` host because the bare domain redirects back down to HTTP. Documentation onlyno runtime or API change.
77
+ **Three new opt-in capabilities and three fixes.** The headline is a
78
+ general-purpose key-value primitive with three backends, which the new
79
+ identified-caller rate limiter is built on top of. **One behaviour change to
80
+ check before you upgrade** an exception thrown by a controller's `onReady` or
81
+ `setup` hook now answers a 500 where it previously crashed the bundle process or
82
+ left the request hanging. Details are in the
83
+ [migration guide](https://gina.io/docs/migration).
84
+
85
+ - **New — a general-purpose key-value primitive with in-memory, redis and SQLite backends (#KV1).** Declare namespaces under `settings.json > kv.namespaces` and reach them as `gina.kv('<namespace>')`. The handle is promise-native with 13 operations, including the ones that are hard to get right by hand: `setnx` (set-if-absent), `consume` (atomic read-and-delete, so a one-shot token's second reader gets `null`), `delIfEquals` (compare-and-delete — the safe lock-release primitive), `incr`/`decr` with TTL-on-create-only, and `getOrSet` with per-process single-flight. **Redis** serves namespaces shared across hosts and replicas, keeping every guarantee server-side (`SET .. PX .. NX`, `GETDEL` with a Lua fallback below redis 6.2, Lua for compare-and-delete and counters). **SQLite** is the zero-dependency durable option — it survives a restart and is visible to any process opening the same file, with every read-modify-write inside an `IMMEDIATE` transaction so it stays atomic across processes; it uses `node:sqlite` (a `bun:sqlite` adapter under Bun), so there is nothing to install. Namespaces are strict-declared — an unknown name throws at the call site rather than silently minting an empty store — and each owns its `failMode`. All three backends are verified against one shared contract spec. Dormant with no `kv` block. Deliberately **not** a redis client: no data structures, batch operations, key scanning, binary values or first-class locks.
86
+ - **Newidentified-caller rate limiting (#MS6).** Opt-in quota enforcement at the router, keyed on the **authenticated principal** the session user (via the operator-named `server.rateLimit.keyField`) or a machine caller with fixed-window counters in a kv namespace you declare. That makes the scope your choice: a redis- or SQLite-backed namespace shares one quota across replicas, while an in-memory one counts per process (the boot resolver says so, and also warns about a redis connectors entry missing the fail-fast tuning that would otherwise queue every gated request through an outage). The gate runs **after** route authorization and **before** DTO validation, so the refusal order is `401 429 422` and a throttled caller never receives a field map. It throttles identified callers **only** a request with no resolvable principal is skipped, never bucketed by IP, because behind a reverse proxy that would be one bucket for the whole internet; anonymous flood control stays with your edge proxy and the HTTP/2 rapid-reset guard. Denials answer 429 with `Retry-After` plus the `RateLimit` / `RateLimit-Policy` structured fields from `draft-ietf-httpapi-ratelimit-headers-11`, which allowed limited requests carry too. Per-route overrides ride `routing.json`'s top-level `rateLimit` key (`false` exempts a route; an object replaces the policy for it). Store outages follow the namespace's own `failMode`.
87
+ - **Newan opt-in per-authority circuit breaker for `Controller::query()` (#MS5).** After N consecutive **transport-class** failures to one authority (default 5, each already a call whose own retries were exhausted), the circuit opens and further calls fail fast with a machine-readable `CIRCUIT_OPEN` error (status 503, `retryable: false`, plus the authority and `retryAfterMs`) instead of hammering a dead upstream. After the cooldown (default 30s) exactly one **critical** request is admitted as the half-open probe, closing the circuit on success and re-arming it on failure. The gate sits above the HTTP/1.x / HTTP/2 dispatch, so an open circuit rejects before any connection, retry or pre-flight machinery runs retries can never hammer an open circuit by construction. Only transport-class errors count: an application response, whatever its status, flows through the success terminus as data, so a 500 from a healthy upstream cannot trip the breaker. Configure under `settings.json > server.query.circuitBreaker`.
88
+ - **Fixed — an exception in a controller's `onReady` or `setup` hook can no longer vanish (#B399).** Both router dispatch sites invoked the reserved-action hooks outside the guarded band, so a **synchronous** throw escaped to the process level — on the built-in engine that was an uncaught exception killing the whole bundle process, while Express answered its own 500, an engine asymmetry — and an **asynchronous** rejection was unowned, leaving the request to hang to client or proxy timeout while work after the throw silently never happened. Both hook loops now run inside the dispatch `try`, and every hook's returned promise is owned by the same `.catch` → 500 guard the main action already carried, naming the failing hook in the error detail; the synthesized `setup` wrapper now returns the app call's own result, so an async `setup.js` rejection actually reaches the guard. **ACTION REQUIRED if a hook of yours can throw:** it now answers 500 (with the `#ERRREF` correlation ref) where it previously crashed the process, hung, or let the action's own response mask the failure. Note the hooks are still dispatched without awaiting, in the same synchronous frame as the action a hook rejection does not prevent the action from running, so its side effects may already have executed when the 500 reaches the client; treat retries of non-idempotent actions accordingly.
89
+ - **Fixed — the entity dispatch diagnostics are readable again (#B395).** The five `DISPATCH` markers in the entity callback machinery were raw `console.log` calls, which in gina is the logger's raw-stdout branch: it bypasses both the container dispatch and the level gate, so the lines never reached a bundle log file or `gina tail`, and a daemon-spawned bundle has its child stdout filtered as well, so they never reached container logs either. They were diagnostics visible only by running a bundle in the foreground. They now go through `console.debug` — off by default, appearing when the log hierarchy is raised to `debug`, which was the original intent.
90
+ - **Fixed — the published claim that gina ships a companion reverse-proxy service is retired (#MS8).** The service help text, its JSDoc and the docs-site CLI pages all named `proxy` as a framework-internal service you could start, and `gina service:list` reported it with status `ok` — for a bundle that cannot serve a single proxied request. Nothing is being taken away: the services directory is CLI-generated, gitignored and npmignored, and the published tarball carries zero entries for it, so no release ever shipped the bundle the text advertised. Each surface now carries the stance instead: **gina ships no edge or reverse proxy by design** — run nginx, Traefik or an ingress controller in front of your bundles. That is the position the rest of the documentation already assumed.
91
+ - **Documentation — two boundaries the framework deliberately does not cross.** API versioning and database migrations were both absences you could only discover by searching for something that was not there, and an absence with no statement behind it reads as an oversight rather than a decision. The routing guide now states plainly that there is no version route field and no version-aware dispatch — when to cut a version and how long to support the old one are product decisions — and shows the three shapes the existing primitives already cover. The models guide names the per-database migration tools to use instead, plus the two things that actually go wrong: run migrations as a discrete step **before** the new version serves (never at bundle boot, where they race themselves the moment there is more than one replica), and keep changes additive during a rolling deploy. The connector CLI page gains an explicit warning that `connector:migrate` is **not** a database migration — it lints connection configuration and issues no SQL.
92
+
86
93
  ## Documentation
87
94
 
88
95
  Full installation guide, tutorials, configuration reference, and API docs at **[gina.io/docs](https://gina.io/docs/)**.
package/ROADMAP.md CHANGED
@@ -63,7 +63,8 @@ This roadmap covers planned features, architectural improvements, new connectors
63
63
  | **Q4 2026** | `0.6.9` ✅ | **Security**: an engine.io socket's session identity is derived server-side from the upgrade request's own cookie instead of a field the browser asserts on every message — any client could previously claim another user's session and receive the pushes addressed to it, which took strictly less than stealing the cookie, since a rendered page carries the bare session id while the cookie carries the signed form; the binding replays the bundle's own session middleware (same secret, store and cookie name, no new configuration) and fails closed, so an id-less socket receives only deliberate broadcasts · **Added**: `gina.pushToSession()` gives code with no request context — a job handler, a cron tick, a boot hook — a sanctioned route to a user's socket, with a required recipient, no reachable broadcast, and delivery reported rather than assumed; and a bundle can declare which scopes it is deployed in through a `scopes` allow-list on its manifest entry, so one still under development stays out of every other scope · **Fixed**: `engine: "express"` bundles boot and serve on Express 5, with the supported range declared for the first time (`>= 4 < 6`, both majors verified live) · `project:add`/`project:import` no longer empty a project's `bundles` block on a declared-count mismatch, no longer adopt a bundle's invalid `server.protocol`/`server.scheme` into the project's registry lists, and no longer resolve one project's bundles against another project's path · `project:add` writes the `.gitignore` the shipped template's underscore prefix has always implied · the path helper's copier stages to a temp sibling and publishes with an atomic rename, so a failed copy can no longer destroy the destination it was replacing · the secrets resolver reads its two environment tiers independently, so a swept boolean no longer lets a plaintext file shadow `process.env`, and three malformed `settings.secrets.file` shapes that used to pass in silence are caught (ACTION REQUIRED — two of them now refuse to boot) · a bundle whose release tree cannot be linked refuses by name instead of dying as an opaque TypeError · `self.push()` refuses by name when the server instance has no engine.io channel |
64
64
  | **Q4 2026** | `0.6.10` ✅ | **Added**: maintenance mode — a bundle can be closed to the public without being stopped. When it is active every request except the framework's own built-in endpoints is answered `503` with a `Retry-After` header and a self-contained maintenance page, and the response is marked never to be stored so a cached copy cannot outlive the window. The gate runs on both engines ahead of static assets, the output cache and routing, so it also covers files and URLs that a route middleware never sees. The liveness endpoint deliberately keeps answering normally, so an orchestrator does not restart healthy instances over a declared window. Chosen visitors can still browse: a shared bypass key presented as a header or once in the address bar (which then sets a short-lived cookie and redirects without the secret) works under any deployment, while the supplementary IP allowlist applies only to requests that did not arrive through a reverse proxy — behind one, every address is the proxy's, so an unconditioned list would let either everybody or nobody through. Maintenance can be flipped at runtime through an administrator-gated endpoint with an optional expiry; a runtime flip is not persisted, and an expiry reverts to the configured state rather than to off, so a forgotten timer cannot re-open a site that configuration says is closed. **Fixed**: boot-time bundle mounts are idempotent, atomic and concurrency-safe — a mount symlink that already resolves to its source is left untouched (so the steady-state boot writes nothing), a wrong or missing one is published atomically through a temp sibling and a rename, and a process that loses the race to another publishing the identical link treats that as success instead of refusing to boot. Previously every boot re-created every declared bundle's link in two non-atomic steps with no mutual exclusion, so several processes sharing one project tree raced the same directory entries and a contended link could fail a boot or abort the shared configuration load for every bundle in the project. The same race is closed on the directory creation that accompanies a mount. Behaviour change: a real directory occupying a mount path is now refused by name instead of silently deleted. **Security**: cross-origin writes to the administrator-gated built-in endpoints are refused. Those endpoints authorise callers by network address alone — a credential a browser attaches automatically — so an operator browsing from an allowed machine could be lured to a page that silently issued writes to them; and because several of them read their whole input from the address rather than from a request body, the attack needed no scripting and no cross-origin negotiation at all. Such a write is now refused on both engines, using the browser's own request-context signal where it is sent, and otherwise comparing the stated origin against the address the client actually connected to — never against a forwarded header, which an attacker controls. Clients that send no browser origin signal, such as command-line tooling and deployment scripts, are deliberately unaffected, as are safe methods, so existing cross-origin read channels keep working. | `0.6.10` | 2026-08-16 |
65
65
  | **Q4 2026** | `0.6.11` ✅ | **Fixed**: `Collection.replace()` no longer silently discards the write when the stored entry carries an internal `_uuid` and the caller's `set` does not — the comparison key is now resolved from both sides (falling back to `id` when both carry one) and the call throws instead of returning quietly when the two sides share no usable key; an explicitly supplied key is honoured exactly as before (issue #64). Concurrent `util.promisify(entity.method)` calls on the same method no longer cross-deliver results or leave a caller hanging — the promisify fast-path now uses the same FIFO queue and single persistent dispatcher as the entity-context path, so every caller settles and in-order completion gives each its own result; out-of-order completion still pairs by arrival order, for which the per-call-identity path is a Promise-returning method. FormValidator: fast typing into a Safari `autocomplete="off"` field no longer scrambles the text (the caret is committed synchronously on every rebuild and the deferred restore re-asserts the latest committed position; issue #63), with three position-0 edge cases in the same interception corrected to native behaviour (Backspace, Delete with a selection, ArrowLeft); a refused submit's answer on an async-`query` form stays visible and focused instead of being re-hidden by a late completion (answer-placed focus is told from user-placed focus until the first genuine interaction); and a stale not-ready submit marker can no longer refuse every click until reload on a form whose async `query` field is not declared last (the reveal pass now carries its own completion identity and always completes). Inspector (development mode): the View tab's page-weight badge and the Flow tab's late timeline bars no longer go missing until a refresh — both data channels are refreshed at the end of the late-bind patch, keyed per tab. Pickup: restart **and** rebuild your bundles (the browser bundle changed). |
66
- | **Q4 2026** | `0.6.12` ✅ | **Fixed**: an undefined-valued filter key no longer makes a `Collection` query match every record — `find()`, `findOne()`, `or()` and `update()` round-tripped their filter object through `JSON.stringify`, which silently drops keys whose value is `undefined`, so a filter built from a possibly-absent field degraded to the match-everything `{}` filter: `findOne()` returned the collection's first row instead of the `null` the calling guard expected, and `update()` wrote its `set` onto every record. All four now throw a descriptive error naming the offending key (ACTION REQUIRED if you relied on an undefined value meaning "no constraint" — build the filter conditionally; an explicitly empty `{}` still means no constraint, and `null` remains a legal needle). A non-string field value no longer aborts the whole form validation pass — `isEmail`, `isJsonWebToken` and `trim` called a string method on the value without a type check, so a `123`, `true` or `[]` arriving from a JSON body or a checkbox threw and the rule driver re-threw, killing every remaining field: the request went unvalidated server-side, and client-side the boot-time binding loop died so forms bound after it silently lost both validation and CSRF token injection. All three now leave a non-string untouched — the two checks record their normal rule error and `trim` passes it through untransformed, matching how `isFloat` already behaved (no action required; a defensive upstream coercion added to work around the crash can be removed). Documentation: the external references carried by the framework READMEs are current again, the retired Simple Data Format specification link replaced by the Tabular Data Package specification that superseded it, and every remaining plain-HTTP reference moved to HTTPS. Pickup: restart **and** rebuild your bundles (the browser bundle changed). |
66
+ | **Q4 2026** | `0.6.12` ✅ | **Fixed**: an undefined-valued filter key no longer makes a `Collection` query match every record — every `Collection` method that accepts a filter object round-tripped it through `JSON.stringify`, which silently drops keys whose value is `undefined`, so a filter built from a possibly-absent field degraded to the match-everything `{}` filter: `findOne()` returned the collection's first row instead of the `null` the calling guard expected, `update()` wrote its `set` onto every record, and `delete()` returned an empty collection with every record removed. All eight filter-object methods now throw a descriptive error naming the offending key — `find()`, `findOne()`, `or()`, `update()`, `replace()`, `max()`, `notIn()` and `delete()`, the last two because `notIn()` routes a filter-object argument through `find()`; only `notIn()`'s array form, `notIn(rows, key)`, is exempt (ACTION REQUIRED if you relied on an undefined value meaning "no constraint" — build the filter conditionally; an explicitly empty `{}` still means no constraint, and `null` remains a legal needle). A non-string field value no longer aborts the whole form validation pass — `isEmail`, `isJsonWebToken` and `trim` called a string method on the value without a type check, so a `123`, `true` or `[]` arriving from a JSON body or a checkbox threw and the rule driver re-threw, killing every remaining field: the request went unvalidated server-side, and client-side the boot-time binding loop died so forms bound after it silently lost both validation and CSRF token injection. All three now leave a non-string untouched — the two checks record their normal rule error and `trim` passes it through untransformed, matching how `isFloat` already behaved (no action required; a defensive upstream coercion added to work around the crash can be removed). Documentation: the external references carried by the framework READMEs are current again, the retired Simple Data Format specification link replaced by the Tabular Data Package specification that superseded it, and every remaining plain-HTTP reference moved to HTTPS. Pickup: restart **and** rebuild your bundles (the browser bundle changed). |
67
+ | **Q4 2026** | `0.6.13` ✅ | **Added**: a general-purpose key-value primitive — declare namespaces under `settings.json > kv.namespaces` and reach them as `gina.kv('<namespace>')`, a promise-native handle with 13 operations including the ones that are hard to get right by hand: set-if-absent, atomic read-and-delete (a one-shot token's second reader gets `null`), compare-and-delete as the safe lock-release primitive, TTL-on-create-only counters, and fetch-or-compute with per-process single-flight. Three backends: in-memory with zero config, redis for namespaces shared across hosts and replicas (every guarantee server-side — `SET .. PX .. NX`, `GETDEL` with a Lua fallback below redis 6.2), and SQLite as the zero-dependency durable option that survives a restart and stays atomic across processes via `IMMEDIATE` transactions, using `node:sqlite` so there is nothing to install. Namespaces are strict-declared — an unknown name throws at the call site rather than silently minting an empty store — and each owns its failure policy; all three backends are verified against one shared contract spec. Deliberately not a redis client: no data structures, batch operations, key scanning, binary values or first-class locks. Identified-caller rate limiting — opt-in quota enforcement at the router keyed on the authenticated principal (a session user via an operator-named field, or a machine caller), with fixed-window counters in a kv namespace you declare, so choosing that namespace's backend chooses the quota's scope: redis or SQLite share one quota across replicas, in-memory counts per process. The gate runs after route authorization and before payload validation, so the refusal order is 401 → 429 → 422 and a throttled caller never receives a field map; it throttles identified callers only, and a request with no resolvable principal is skipped rather than bucketed by IP, since behind a reverse proxy that would be one bucket for the whole internet — anonymous flood control stays with your edge proxy. Denials answer 429 with `Retry-After` plus the `RateLimit` / `RateLimit-Policy` structured fields, which allowed limited requests carry too, and per-route overrides ride a top-level `rateLimit` key in `routing.json`. An opt-in per-authority circuit breaker for `Controller::query()` — after N consecutive transport-class failures to one authority the circuit opens and further calls fail fast with a machine-readable `CIRCUIT_OPEN` error instead of hammering a dead upstream, admitting exactly one critical request as the half-open probe after the cooldown; the gate sits above the HTTP/1.x / HTTP/2 dispatch so retries can never hammer an open circuit by construction, and only transport-class errors count, so an application response of any status cannot trip it. **Fixed**: an exception in a controller's `onReady` or `setup` hook can no longer vanish — both dispatch sites invoked the reserved-action hooks outside the guarded band, so a synchronous throw escaped to the process level (on the built-in engine an uncaught exception killing the whole bundle process, while Express answered its own 500 — an engine asymmetry) and an asynchronous rejection was unowned, leaving the request to hang to client or proxy timeout while work after the throw silently never happened; both loops now run inside the dispatch `try` and every hook's promise is owned by the same guard the main action carried, with the synthesized `setup` wrapper returning the app call's own result so an async `setup.js` rejection actually reaches it (ACTION REQUIRED if a hook of yours can throw: it now answers 500 where it previously crashed, hung, or was masked — and since hooks are still dispatched without awaiting, a hook rejection does not stop the action, so its side effects may already have run when the 500 lands). The entity dispatch diagnostics are readable again — five markers were raw `console.log` calls, which in gina bypasses both the container dispatch and the level gate, so they reached neither a bundle log file nor container logs and were visible only by running a bundle in the foreground; they now go through `console.debug`, off by default and appearing at the `debug` hierarchy as originally intended. **Documentation**: the published claim that gina ships a companion reverse-proxy service is retired — no release ever carried the bundle the help text advertised, and each surface now states the position the rest of the documentation already assumed, that gina ships no edge or reverse proxy by design; run nginx, Traefik or an ingress controller in front of your bundles. Two deliberate boundaries are now stated rather than left as absences: API versioning (no version route field, no version-aware dispatch — with the three shapes the existing primitives already cover) and database migrations (the per-database tools to use, plus running them as a discrete step before the new version serves rather than at bundle boot where replicas race each other, and keeping changes additive during a rolling deploy), and `connector:migrate` is explicitly flagged as not a database migration. Pickup: restart **and** rebuild your bundles — the browser bundle changed, though its client-side delta is inert. |
67
68
  | **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
68
69
  | **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
69
70
  | **2027** | `0.8.0` | Financial-messaging foundations — XML request/response handling · pluggable message-schema validation · IBAN/BIC validation rules · money & ISO 4217 minor-unit utilities · idempotency keys · sequence primitive · OAuth2 client-credentials egress |
@@ -285,7 +286,7 @@ Technical-safeguard primitives that map to the **PCI-DSS**, **SOC2**, and **HIPA
285
286
  | ✅ | **Authentication hardening** — `lib.authn` supplies the primitives that are dangerous to hand-roll, without becoming an identity provider: Gina still owns no user record, credential store, or login route, and the module ends where `req.login()` begins. `hashPassword` mints scrypt hashes encoded as self-describing PHC strings, so the cost parameters travel with the hash and can be raised later without a flag day — `needsRehash` reports which stored hashes are below policy and the next successful login upgrades them transparently, the one moment the plaintext is in hand. `verifyPassword` compares in constant time and also verifies existing argon2 and bcrypt hashes through your own project's package, so a bundle arriving with credentials already hashed keeps working; `dummyVerify` spends matching work on the account-not-found branch to close the user-enumeration oracle; `validatePasswordPolicy` checks length first per NIST SP 800-63B, with composition rules and a deny-list available. `createLockout()` adds the credential-stuffing brake — PCI-DSS §8.3.4 defaults of 10 consecutive failures and a 30-minute lock, a caller-chosen key with optional normalisation, per-key serialization so failures arriving concurrently cannot lose the count, a pluggable shared store for multi-replica correctness, and one `auth.lockout` audit record on the transition into locked; it is per-account credential lockout, not per-client request-rate limiting, which remains a separate roadmap item. RFC 6238 TOTP completes the set: secret generation, the `otpauth://` enrolment URI every standard authenticator scans, and constant-time verification returning the matched step as an absolute `counter` so your application can enforce replay defence. Maps to PCI-DSS req 8 (8.3.2 authentication-factor storage, 8.3.4 lockout, 8.4 MFA), HIPAA §164.312(d). | `0.6.0` | shipped |
286
287
  | ✅ | **Session lifecycle hardening** — `req.login(user, done)` now works without Passport and rotates the session id BEFORE binding the user (the session-fixation defense): the pre-login record is destroyed, the principal lands at `req.session.user`, and the absolute-timeout anchor is stamped — with a graceful bind-and-warn when the session provider exposes no `regenerate()`, and Passport bundles untouched. The Session plugin gained an opt-in absolute session cap: `session({ absoluteTimeout: <ms> })` or `settings.json > session.absoluteTimeout` (bundle code wins, `false` disables) destroys an authenticated session older than the cap on its next request — regardless of activity — and the request proceeds anonymously, exactly like a naturally-expired record; fail-closed when the record cannot be destroyed, anonymous sessions never touched so `saveUninitialized: false` keeps its meaning. Composes with the existing idle expiry (cookie `maxAge` + store-record TTL, both rolling with activity). Declared in the published settings.json schema. Maps to PCI-DSS req 8.2. | `0.6.0` | shipped |
287
288
  | ⏸ | **PII/PHI protection** — Production log-field redaction, data classification, and retention helpers (today's redaction is a dev-only inspector tool). **Deferred — built on request.** *Interim:* keep credentials and identifiers out of query strings, since the always-on access log records full request URLs. Maps to HIPAA and SOC2 Privacy. | — | on demand |
288
- | | **Application-level rate limiting** — Per-endpoint / per-client throttling at the route layer (today only an HTTP/2 rapid-reset limiter exists). **Deferred built on request.** *Interim:* throttle at your reverse proxy or ingress. Distinct from `lib.authn` account lockout, which brakes credential failures per account, not requests per client. Maps to PCI-DSS anti-automation and SOC2 availability. | | on demand |
289
+ | | **Application-level rate limiting** — Opt-in identified-caller quotas at the router (#MS6): fixed-window counters over the key-value primitive (per-process in-memory, or replica-shared via redis/sqlite), keyed on the session user (operator-named field) or the machine caller, enforced after route authorization and before DTO validation (401 429 → 422). 429 carries `Retry-After` plus the draft `RateLimit` / `RateLimit-Policy` fields; per-route `rateLimit` overrides/exemptions in routing.json; store outages follow the namespace's `failMode` (open admits, closed answers 503). Anonymous flood control stays at the edge proxy and the HTTP/2 rapid-reset guard by design. Distinct from `lib.authn` account lockout, which brakes credential failures per account, not requests per client. Maps to PCI-DSS anti-automation and SOC2 availability. | `0.6.x` | 2026-08-22 |
289
290
  | ⏸ | **Data-at-rest / field-level encryption helpers** — Field-level encryption + key-management utilities. **Deferred — built on request.** *Interim:* encrypt at the application layer with your platform's KMS SDK; `${secret:KEY}` delivers the key material. Maps to PCI-DSS req 3 and HIPAA §164.312(a)(2)(iv). | — | on demand |
290
291
  | ✅ | **Compliance control-mapping guide** — [Compliance control mapping](https://gina.io/docs/guides/compliance) maps every control Gina ships to the PCI-DSS v4.0.1, SOC 2 (2017 TSC), and HIPAA §164.312 requirement it supports, and states plainly where a framework's responsibility ends. Controls still on the roadmap are listed separately as unavailable, each with the interim pattern to use until it ships, so a planned control can never be mistaken for one you have. An explicit "what Gina does not — and cannot — cover" section names what no framework provides: the certification itself, legal instruments, network and physical security, personnel and process, operations, key-management infrastructure, and vendor risk. A living reference — rows move from planned to available as controls ship. | `0.5.26-alpha.2` | shipped |
291
292
  | ✅ | **Transport-security posture** — A bundle resolving a cleartext scheme outside the local scope warns once at boot, naming the bundle, scheme, and scope alongside both remediations. `server.requireHttps: true` refuses the boot instead — the throw lands pre-listen, so the cleartext port is never reachable at all. `server.allowInsecure: true` is the "TLS terminates upstream" acknowledgment for the mesh / ingress / reverse-proxy topology, turning the warning into a single info line; declaring both is a boot-refused contradiction. Both are strict booleans resolved exactly like `scheme` itself — the bundle's settings win and `env.json`'s `server` block fills — and a non-boolean value refuses the boot in every scope. Terminating mTLS stays a mesh/ingress concern by design. Maps to the "encrypt everywhere / no implicit network trust" principle of NIST SP 800-207 (Zero Trust). | `0.5.26-alpha.2` | shipped |
@@ -0,0 +1 @@
1
+ 0.6.13
@@ -5794,6 +5794,14 @@ function Routing() {
5794
5794
  if ( typeof(routeObject.negotiate) != 'undefined' ) {
5795
5795
  params.negotiate = routeObject.negotiate;
5796
5796
  }
5797
+ // #MS6 — propagate the per-route rate-limit override/exempt to
5798
+ // req.routing.rateLimit (top-level, NOT req.routing.param.* — the
5799
+ // #CSRF2 trap). typeof-guarded so `false` (exempt) survives the copy;
5800
+ // assigned only when declared, so a routing.json that never mentions
5801
+ // `rateLimit` produces a byte-identical params object.
5802
+ if ( typeof(routeObject.rateLimit) != 'undefined' ) {
5803
+ params.rateLimit = routeObject.rateLimit;
5804
+ }
5797
5805
 
5798
5806
  // isRoute
5799
5807
  return self.compareUrls(params, routeObject.url, req);