gina 0.5.3 → 0.5.4

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 (475) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +11 -9
  3. package/ROADMAP.md +1 -0
  4. package/framework/v0.5.4/VERSION +1 -0
  5. package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +40 -1
  6. package/framework/v0.5.4/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  7. package/framework/v0.5.4/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  8. package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +180 -100
  9. package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.js +91 -15
  10. package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +216 -215
  11. package/framework/v0.5.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  12. package/framework/v0.5.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  13. package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.js +26 -0
  14. package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.render-swig.js +15 -7
  15. package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/validator/src/form-validator.js +73 -13
  16. package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/validator/src/main.js +6 -1
  17. package/framework/{v0.5.3 → v0.5.4}/core/router.js +15 -2
  18. package/framework/{v0.5.3 → v0.5.4}/core/server.isaac.js +2 -38
  19. package/framework/{v0.5.3 → v0.5.4}/core/server.js +195 -30
  20. package/framework/{v0.5.3 → v0.5.4}/core/template/conf/settings.json +1 -1
  21. package/framework/v0.5.4/lib/admin/package.json +17 -0
  22. package/framework/v0.5.4/lib/admin/src/main.js +93 -0
  23. package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/add.js +38 -2
  24. package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/arguments.json +1 -0
  25. package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/help.txt +15 -1
  26. package/framework/{v0.5.3 → v0.5.4}/lib/index.js +27 -5
  27. package/framework/{v0.5.3 → v0.5.4}/lib/routing/src/main.js +12 -1
  28. package/framework/{v0.5.3 → v0.5.4}/package.json +1 -1
  29. package/gna.js +4 -4
  30. package/llms.txt +27 -1
  31. package/package.json +4 -4
  32. package/framework/v0.5.3/VERSION +0 -1
  33. package/framework/v0.5.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  34. package/framework/v0.5.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  35. package/framework/v0.5.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  36. package/framework/v0.5.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  37. /package/framework/{v0.5.3 → v0.5.4}/AUTHORS +0 -0
  38. /package/framework/{v0.5.3 → v0.5.4}/LICENSE +0 -0
  39. /package/framework/{v0.5.3 → v0.5.4}/core/asset/html/nolayout.html +0 -0
  40. /package/framework/{v0.5.3 → v0.5.4}/core/asset/html/static.html +0 -0
  41. /package/framework/{v0.5.3 → v0.5.4}/core/asset/img/android-chrome-192x192.png +0 -0
  42. /package/framework/{v0.5.3 → v0.5.4}/core/asset/img/android-chrome-512x512.png +0 -0
  43. /package/framework/{v0.5.3 → v0.5.4}/core/asset/img/apple-touch-icon.png +0 -0
  44. /package/framework/{v0.5.3 → v0.5.4}/core/asset/img/favicon-16x16.png +0 -0
  45. /package/framework/{v0.5.3 → v0.5.4}/core/asset/img/favicon-32x32.png +0 -0
  46. /package/framework/{v0.5.3 → v0.5.4}/core/asset/img/favicon.ico +0 -0
  47. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/README.md +0 -0
  48. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  49. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  50. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  51. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  52. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  53. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  54. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  55. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  56. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  57. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  58. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  59. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  60. /package/framework/{v0.5.3 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  61. /package/framework/{v0.5.3 → v0.5.4}/core/config.js +0 -0
  62. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/ai/index.js +0 -0
  63. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/ai/lib/connector.js +0 -0
  64. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/couchbase/index.js +0 -0
  65. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/couchbase/lib/connector.js +0 -0
  66. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  67. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  68. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/couchbase/lib/n1ql.js +0 -0
  69. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/couchbase/lib/session-store.js +0 -0
  70. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  71. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  72. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/mongodb/index.js +0 -0
  73. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/mongodb/lib/connector.js +0 -0
  74. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  75. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/mongodb/lib/session-store.js +0 -0
  76. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/mysql/index.js +0 -0
  77. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/mysql/lib/connector.js +0 -0
  78. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/postgresql/index.js +0 -0
  79. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/postgresql/lib/connector.js +0 -0
  80. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/redis/index.js +0 -0
  81. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/redis/lib/session-store.js +0 -0
  82. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/scylladb/index.js +0 -0
  83. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/scylladb/lib/connector.js +0 -0
  84. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/scylladb/lib/session-store.js +0 -0
  85. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/sql-parser.js +0 -0
  86. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/sqlite/index.js +0 -0
  87. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/sqlite/lib/connector.js +0 -0
  88. /package/framework/{v0.5.3 → v0.5.4}/core/connectors/sqlite/lib/session-store.js +0 -0
  89. /package/framework/{v0.5.3 → v0.5.4}/core/content.encoding +0 -0
  90. /package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.framework.js +0 -0
  91. /package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.render-json.js +0 -0
  92. /package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.render-nunjucks-async.js +0 -0
  93. /package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.render-nunjucks.js +0 -0
  94. /package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.render-stream.js +0 -0
  95. /package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.render-swig-async.js +0 -0
  96. /package/framework/{v0.5.3 → v0.5.4}/core/controller/controller.render-v1.js +0 -0
  97. /package/framework/{v0.5.3 → v0.5.4}/core/controller/index.js +0 -0
  98. /package/framework/{v0.5.3 → v0.5.4}/core/controller/inspector-window-emit.js +0 -0
  99. /package/framework/{v0.5.3 → v0.5.4}/core/deps/busboy-1.6.0/LICENSE +0 -0
  100. /package/framework/{v0.5.3 → v0.5.4}/core/deps/busboy-1.6.0/README.md +0 -0
  101. /package/framework/{v0.5.3 → v0.5.4}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  102. /package/framework/{v0.5.3 → v0.5.4}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  103. /package/framework/{v0.5.3 → v0.5.4}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  104. /package/framework/{v0.5.3 → v0.5.4}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  105. /package/framework/{v0.5.3 → v0.5.4}/core/deps/busboy-1.6.0/package.json +0 -0
  106. /package/framework/{v0.5.3 → v0.5.4}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  107. /package/framework/{v0.5.3 → v0.5.4}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  108. /package/framework/{v0.5.3 → v0.5.4}/core/deps/streamsearch-1.1.0/package.json +0 -0
  109. /package/framework/{v0.5.3 → v0.5.4}/core/dev/index.js +0 -0
  110. /package/framework/{v0.5.3 → v0.5.4}/core/dev/lib/class.js +0 -0
  111. /package/framework/{v0.5.3 → v0.5.4}/core/dev/lib/factory.js +0 -0
  112. /package/framework/{v0.5.3 → v0.5.4}/core/dev/lib/tools.js +0 -0
  113. /package/framework/{v0.5.3 → v0.5.4}/core/gna.js +0 -0
  114. /package/framework/{v0.5.3 → v0.5.4}/core/locales/README.md +0 -0
  115. /package/framework/{v0.5.3 → v0.5.4}/core/locales/currency.json +0 -0
  116. /package/framework/{v0.5.3 → v0.5.4}/core/locales/dist/language/en.json +0 -0
  117. /package/framework/{v0.5.3 → v0.5.4}/core/locales/dist/language/fr.json +0 -0
  118. /package/framework/{v0.5.3 → v0.5.4}/core/locales/dist/region/en.json +0 -0
  119. /package/framework/{v0.5.3 → v0.5.4}/core/locales/dist/region/fr.json +0 -0
  120. /package/framework/{v0.5.3 → v0.5.4}/core/locales/index.js +0 -0
  121. /package/framework/{v0.5.3 → v0.5.4}/core/mime.types +0 -0
  122. /package/framework/{v0.5.3 → v0.5.4}/core/model/entity.js +0 -0
  123. /package/framework/{v0.5.3 → v0.5.4}/core/model/index.js +0 -0
  124. /package/framework/{v0.5.3 → v0.5.4}/core/model/template/entityFactory.js +0 -0
  125. /package/framework/{v0.5.3 → v0.5.4}/core/model/template/index.js +0 -0
  126. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/README.md +0 -0
  127. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/index.js +0 -0
  128. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/csrf/README.md +0 -0
  129. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/csrf/package.json +0 -0
  130. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/csrf/src/main.js +0 -0
  131. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/README.md +0 -0
  132. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/coep/README.md +0 -0
  133. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/coep/package.json +0 -0
  134. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  135. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/coop/README.md +0 -0
  136. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/coop/package.json +0 -0
  137. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  138. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/corp/README.md +0 -0
  139. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/corp/package.json +0 -0
  140. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  141. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/csp/README.md +0 -0
  142. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/csp/package.json +0 -0
  143. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  144. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  145. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  146. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  147. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  148. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  149. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  150. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  151. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  152. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  153. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/package.json +0 -0
  154. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  155. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  156. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  157. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/src/main.js +0 -0
  158. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  159. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  160. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  161. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  162. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  163. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  164. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  165. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  166. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  167. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  168. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  169. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  170. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  171. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  172. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  173. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  174. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  175. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  176. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/session/README.md +0 -0
  177. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/session/package.json +0 -0
  178. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/session/src/main.js +0 -0
  179. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/storage/README.md +0 -0
  180. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/storage/build.json +0 -0
  181. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/storage/package.json +0 -0
  182. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/storage/src/main.js +0 -0
  183. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/validator/README.md +0 -0
  184. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/validator/build.json +0 -0
  185. /package/framework/{v0.5.3 → v0.5.4}/core/plugins/lib/validator/package.json +0 -0
  186. /package/framework/{v0.5.3 → v0.5.4}/core/server.express.js +0 -0
  187. /package/framework/{v0.5.3 → v0.5.4}/core/status.codes +0 -0
  188. /package/framework/{v0.5.3 → v0.5.4}/core/template/_gitignore +0 -0
  189. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/config/app.json +0 -0
  190. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  191. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/config/routing.json +0 -0
  192. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/config/settings.json +0 -0
  193. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  194. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/config/templates.json +0 -0
  195. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  196. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  197. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  198. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  199. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/index.js +0 -0
  200. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle/locales/en.json +0 -0
  201. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  202. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  203. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  204. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  205. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  206. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  207. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  208. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_public/readme.md +0 -0
  209. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_public/sw.js +0 -0
  210. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  211. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  212. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  213. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  214. /package/framework/{v0.5.3 → v0.5.4}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  215. /package/framework/{v0.5.3 → v0.5.4}/core/template/command/gina.bat.tpl +0 -0
  216. /package/framework/{v0.5.3 → v0.5.4}/core/template/command/gina.tpl +0 -0
  217. /package/framework/{v0.5.3 → v0.5.4}/core/template/conf/env.json +0 -0
  218. /package/framework/{v0.5.3 → v0.5.4}/core/template/conf/manifest.json +0 -0
  219. /package/framework/{v0.5.3 → v0.5.4}/core/template/conf/package.json +0 -0
  220. /package/framework/{v0.5.3 → v0.5.4}/core/template/conf/statics.json +0 -0
  221. /package/framework/{v0.5.3 → v0.5.4}/core/template/conf/templates.json +0 -0
  222. /package/framework/{v0.5.3 → v0.5.4}/core/template/error/client/json/401.json +0 -0
  223. /package/framework/{v0.5.3 → v0.5.4}/core/template/error/client/json/403.json +0 -0
  224. /package/framework/{v0.5.3 → v0.5.4}/core/template/error/client/json/404.json +0 -0
  225. /package/framework/{v0.5.3 → v0.5.4}/core/template/error/server/html/50x.html +0 -0
  226. /package/framework/{v0.5.3 → v0.5.4}/core/template/error/server/json/500.json +0 -0
  227. /package/framework/{v0.5.3 → v0.5.4}/core/template/error/server/json/503.json +0 -0
  228. /package/framework/{v0.5.3 → v0.5.4}/core/template/extensions/logger/config.json +0 -0
  229. /package/framework/{v0.5.3 → v0.5.4}/helpers/console.js +0 -0
  230. /package/framework/{v0.5.3 → v0.5.4}/helpers/context.js +0 -0
  231. /package/framework/{v0.5.3 → v0.5.4}/helpers/data/LICENSE +0 -0
  232. /package/framework/{v0.5.3 → v0.5.4}/helpers/data/README.md +0 -0
  233. /package/framework/{v0.5.3 → v0.5.4}/helpers/data/package.json +0 -0
  234. /package/framework/{v0.5.3 → v0.5.4}/helpers/data/src/main.js +0 -0
  235. /package/framework/{v0.5.3 → v0.5.4}/helpers/dateFormat.js +0 -0
  236. /package/framework/{v0.5.3 → v0.5.4}/helpers/index.js +0 -0
  237. /package/framework/{v0.5.3 → v0.5.4}/helpers/json/LICENSE +0 -0
  238. /package/framework/{v0.5.3 → v0.5.4}/helpers/json/README.md +0 -0
  239. /package/framework/{v0.5.3 → v0.5.4}/helpers/json/package.json +0 -0
  240. /package/framework/{v0.5.3 → v0.5.4}/helpers/json/src/main.js +0 -0
  241. /package/framework/{v0.5.3 → v0.5.4}/helpers/path.js +0 -0
  242. /package/framework/{v0.5.3 → v0.5.4}/helpers/plugins/README.md +0 -0
  243. /package/framework/{v0.5.3 → v0.5.4}/helpers/plugins/package.json +0 -0
  244. /package/framework/{v0.5.3 → v0.5.4}/helpers/plugins/src/api-error.js +0 -0
  245. /package/framework/{v0.5.3 → v0.5.4}/helpers/plugins/src/main.js +0 -0
  246. /package/framework/{v0.5.3 → v0.5.4}/helpers/prototypes.js +0 -0
  247. /package/framework/{v0.5.3 → v0.5.4}/helpers/task.js +0 -0
  248. /package/framework/{v0.5.3 → v0.5.4}/helpers/text.js +0 -0
  249. /package/framework/{v0.5.3 → v0.5.4}/lib/archiver/README.md +0 -0
  250. /package/framework/{v0.5.3 → v0.5.4}/lib/archiver/build.json +0 -0
  251. /package/framework/{v0.5.3 → v0.5.4}/lib/archiver/package.json +0 -0
  252. /package/framework/{v0.5.3 → v0.5.4}/lib/archiver/src/dep/jszip.min.js +0 -0
  253. /package/framework/{v0.5.3 → v0.5.4}/lib/archiver/src/main.js +0 -0
  254. /package/framework/{v0.5.3 → v0.5.4}/lib/async/package.json +0 -0
  255. /package/framework/{v0.5.3 → v0.5.4}/lib/async/src/main.js +0 -0
  256. /package/framework/{v0.5.3 → v0.5.4}/lib/cache/README.md +0 -0
  257. /package/framework/{v0.5.3 → v0.5.4}/lib/cache/build.json +0 -0
  258. /package/framework/{v0.5.3 → v0.5.4}/lib/cache/package.json +0 -0
  259. /package/framework/{v0.5.3 → v0.5.4}/lib/cache/src/main.js +0 -0
  260. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/aliases.json +0 -0
  261. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/build.js +0 -0
  262. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/copy.js +0 -0
  263. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/cp.js +0 -0
  264. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/help.js +0 -0
  265. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  266. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/list.js +0 -0
  267. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/mcp-start.js +0 -0
  268. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/mcp.js +0 -0
  269. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/oas.js +0 -0
  270. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/openapi.js +0 -0
  271. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/remove.js +0 -0
  272. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/rename.js +0 -0
  273. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/restart.js +0 -0
  274. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/rm.js +0 -0
  275. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/start.js +0 -0
  276. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/status.js +0 -0
  277. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/bundle/stop.js +0 -0
  278. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/cache/stats.js +0 -0
  279. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/connector/add.js +0 -0
  280. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/connector/arguments.json +0 -0
  281. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/connector/help.js +0 -0
  282. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/connector/help.txt +0 -0
  283. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/connector/list.js +0 -0
  284. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/connector/migrate.js +0 -0
  285. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/connector/remove.js +0 -0
  286. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/connector/rm.js +0 -0
  287. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/add.js +0 -0
  288. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/get.js +0 -0
  289. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/help.js +0 -0
  290. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/help.txt +0 -0
  291. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/link-dev.js +0 -0
  292. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/list.js +0 -0
  293. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/remove.js +0 -0
  294. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/rm.js +0 -0
  295. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/set.js +0 -0
  296. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/unset.js +0 -0
  297. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/env/use.js +0 -0
  298. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/arguments.json +0 -0
  299. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/build.js +0 -0
  300. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/dot.js +0 -0
  301. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/get.js +0 -0
  302. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/help.js +0 -0
  303. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/help.txt +0 -0
  304. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/init.js +0 -0
  305. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/link-node-modules.js +0 -0
  306. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/link.js +0 -0
  307. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/msg.json +0 -0
  308. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/open.js +0 -0
  309. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/restart.js +0 -0
  310. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/set.js +0 -0
  311. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/start.js +0 -0
  312. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/status.js +0 -0
  313. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/stop.js +0 -0
  314. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/tail.js +0 -0
  315. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/update.js +0 -0
  316. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/framework/version.js +0 -0
  317. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/gina-dev.1.md +0 -0
  318. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/gina-framework.1.md +0 -0
  319. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/gina.1.md +0 -0
  320. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/helper.js +0 -0
  321. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/i18n/add.js +0 -0
  322. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/i18n/arguments.json +0 -0
  323. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/i18n/export.js +0 -0
  324. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/i18n/help.js +0 -0
  325. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/i18n/help.txt +0 -0
  326. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/i18n/import.js +0 -0
  327. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/i18n/scan.js +0 -0
  328. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/index.js +0 -0
  329. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/inspector/help.js +0 -0
  330. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/inspector/help.txt +0 -0
  331. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/inspector/open.js +0 -0
  332. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/minion/arguments.json +0 -0
  333. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/minion/help.js +0 -0
  334. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/minion/help.txt +0 -0
  335. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/minion/kill.js +0 -0
  336. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/minion/list.js +0 -0
  337. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/msg.json +0 -0
  338. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/port/help.js +0 -0
  339. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/port/help.txt +0 -0
  340. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/port/inc/scan.js +0 -0
  341. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/port/list.js +0 -0
  342. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/port/reset.js +0 -0
  343. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/port/set.js +0 -0
  344. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/add.js +0 -0
  345. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/arguments.json +0 -0
  346. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/build.js +0 -0
  347. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/help.js +0 -0
  348. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/help.txt +0 -0
  349. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/import.js +0 -0
  350. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/list.js +0 -0
  351. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/move.js +0 -0
  352. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/remove.js +0 -0
  353. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/rename.js +0 -0
  354. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/restart.js +0 -0
  355. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/rm.js +0 -0
  356. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/start.js +0 -0
  357. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/status.js +0 -0
  358. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/project/stop.js +0 -0
  359. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/protocol/arguments.json +0 -0
  360. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/protocol/help.js +0 -0
  361. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/protocol/help.txt +0 -0
  362. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/protocol/list.js +0 -0
  363. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/protocol/remove.js +0 -0
  364. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/protocol/set.js +0 -0
  365. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/add.js +0 -0
  366. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/help.js +0 -0
  367. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/help.txt +0 -0
  368. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/link-local.js +0 -0
  369. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/link-production.js +0 -0
  370. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/list.js +0 -0
  371. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/remove.js +0 -0
  372. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/rm.js +0 -0
  373. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/scope/use.js +0 -0
  374. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/secrets/arguments.json +0 -0
  375. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/secrets/check.js +0 -0
  376. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/secrets/help.js +0 -0
  377. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/secrets/help.txt +0 -0
  378. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/secrets/scan.js +0 -0
  379. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/service/help.js +0 -0
  380. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/service/help.txt +0 -0
  381. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/service/list.js +0 -0
  382. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/service/start.js +0 -0
  383. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd/view/add.js +0 -0
  384. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd-status-format/package.json +0 -0
  385. /package/framework/{v0.5.3 → v0.5.4}/lib/cmd-status-format/src/main.js +0 -0
  386. /package/framework/{v0.5.3 → v0.5.4}/lib/collection/README.md +0 -0
  387. /package/framework/{v0.5.3 → v0.5.4}/lib/collection/build.json +0 -0
  388. /package/framework/{v0.5.3 → v0.5.4}/lib/collection/package.json +0 -0
  389. /package/framework/{v0.5.3 → v0.5.4}/lib/collection/src/main.js +0 -0
  390. /package/framework/{v0.5.3 → v0.5.4}/lib/config.js +0 -0
  391. /package/framework/{v0.5.3 → v0.5.4}/lib/connector-registry/package.json +0 -0
  392. /package/framework/{v0.5.3 → v0.5.4}/lib/connector-registry/src/main.js +0 -0
  393. /package/framework/{v0.5.3 → v0.5.4}/lib/cron/README.md +0 -0
  394. /package/framework/{v0.5.3 → v0.5.4}/lib/cron/package.json +0 -0
  395. /package/framework/{v0.5.3 → v0.5.4}/lib/cron/src/main.js +0 -0
  396. /package/framework/{v0.5.3 → v0.5.4}/lib/domain/LICENSE +0 -0
  397. /package/framework/{v0.5.3 → v0.5.4}/lib/domain/README.md +0 -0
  398. /package/framework/{v0.5.3 → v0.5.4}/lib/domain/package.json +0 -0
  399. /package/framework/{v0.5.3 → v0.5.4}/lib/domain/src/main.js +0 -0
  400. /package/framework/{v0.5.3 → v0.5.4}/lib/generator/index.js +0 -0
  401. /package/framework/{v0.5.3 → v0.5.4}/lib/i18n/package.json +0 -0
  402. /package/framework/{v0.5.3 → v0.5.4}/lib/i18n/src/main.js +0 -0
  403. /package/framework/{v0.5.3 → v0.5.4}/lib/inherits/LICENSE +0 -0
  404. /package/framework/{v0.5.3 → v0.5.4}/lib/inherits/README.md +0 -0
  405. /package/framework/{v0.5.3 → v0.5.4}/lib/inherits/package.json +0 -0
  406. /package/framework/{v0.5.3 → v0.5.4}/lib/inherits/src/main.js +0 -0
  407. /package/framework/{v0.5.3 → v0.5.4}/lib/inspector-redact/package.json +0 -0
  408. /package/framework/{v0.5.3 → v0.5.4}/lib/inspector-redact/src/main.js +0 -0
  409. /package/framework/{v0.5.3 → v0.5.4}/lib/instrument/package.json +0 -0
  410. /package/framework/{v0.5.3 → v0.5.4}/lib/instrument/src/main.js +0 -0
  411. /package/framework/{v0.5.3 → v0.5.4}/lib/job/package.json +0 -0
  412. /package/framework/{v0.5.3 → v0.5.4}/lib/job/src/main.js +0 -0
  413. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/README.md +0 -0
  414. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/package.json +0 -0
  415. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/containers/default/index.js +0 -0
  416. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/containers/file/index.js +0 -0
  417. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  418. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  419. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/containers/mq/index.js +0 -0
  420. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/containers/mq/listener.js +0 -0
  421. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/containers/mq/speaker.js +0 -0
  422. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/helper.js +0 -0
  423. /package/framework/{v0.5.3 → v0.5.4}/lib/logger/src/main.js +0 -0
  424. /package/framework/{v0.5.3 → v0.5.4}/lib/math/index.js +0 -0
  425. /package/framework/{v0.5.3 → v0.5.4}/lib/mcp-dispatch/package.json +0 -0
  426. /package/framework/{v0.5.3 → v0.5.4}/lib/mcp-dispatch/src/main.js +0 -0
  427. /package/framework/{v0.5.3 → v0.5.4}/lib/mcp-http/package.json +0 -0
  428. /package/framework/{v0.5.3 → v0.5.4}/lib/mcp-http/src/main.js +0 -0
  429. /package/framework/{v0.5.3 → v0.5.4}/lib/mcp-server/package.json +0 -0
  430. /package/framework/{v0.5.3 → v0.5.4}/lib/mcp-server/src/main.js +0 -0
  431. /package/framework/{v0.5.3 → v0.5.4}/lib/merge/README.md +0 -0
  432. /package/framework/{v0.5.3 → v0.5.4}/lib/merge/package.json +0 -0
  433. /package/framework/{v0.5.3 → v0.5.4}/lib/merge/src/main.js +0 -0
  434. /package/framework/{v0.5.3 → v0.5.4}/lib/metrics/package.json +0 -0
  435. /package/framework/{v0.5.3 → v0.5.4}/lib/metrics/src/main.js +0 -0
  436. /package/framework/{v0.5.3 → v0.5.4}/lib/model.js +0 -0
  437. /package/framework/{v0.5.3 → v0.5.4}/lib/nunjucks-filters/README.md +0 -0
  438. /package/framework/{v0.5.3 → v0.5.4}/lib/nunjucks-filters/package.json +0 -0
  439. /package/framework/{v0.5.3 → v0.5.4}/lib/nunjucks-filters/src/main.js +0 -0
  440. /package/framework/{v0.5.3 → v0.5.4}/lib/nunjucks-resolver/package.json +0 -0
  441. /package/framework/{v0.5.3 → v0.5.4}/lib/nunjucks-resolver/src/main.js +0 -0
  442. /package/framework/{v0.5.3 → v0.5.4}/lib/proc.js +0 -0
  443. /package/framework/{v0.5.3 → v0.5.4}/lib/routing/README.md +0 -0
  444. /package/framework/{v0.5.3 → v0.5.4}/lib/routing/build.json +0 -0
  445. /package/framework/{v0.5.3 → v0.5.4}/lib/routing/package.json +0 -0
  446. /package/framework/{v0.5.3 → v0.5.4}/lib/routing/src/radix.js +0 -0
  447. /package/framework/{v0.5.3 → v0.5.4}/lib/routing-introspect/package.json +0 -0
  448. /package/framework/{v0.5.3 → v0.5.4}/lib/routing-introspect/src/main.js +0 -0
  449. /package/framework/{v0.5.3 → v0.5.4}/lib/secrets/package.json +0 -0
  450. /package/framework/{v0.5.3 → v0.5.4}/lib/secrets/src/backends/env.js +0 -0
  451. /package/framework/{v0.5.3 → v0.5.4}/lib/secrets/src/main.js +0 -0
  452. /package/framework/{v0.5.3 → v0.5.4}/lib/session-store.js +0 -0
  453. /package/framework/{v0.5.3 → v0.5.4}/lib/shell.js +0 -0
  454. /package/framework/{v0.5.3 → v0.5.4}/lib/state.js +0 -0
  455. /package/framework/{v0.5.3 → v0.5.4}/lib/swig-filters/README.md +0 -0
  456. /package/framework/{v0.5.3 → v0.5.4}/lib/swig-filters/package.json +0 -0
  457. /package/framework/{v0.5.3 → v0.5.4}/lib/swig-filters/src/main.js +0 -0
  458. /package/framework/{v0.5.3 → v0.5.4}/lib/swig-resolver/package.json +0 -0
  459. /package/framework/{v0.5.3 → v0.5.4}/lib/swig-resolver/src/main.js +0 -0
  460. /package/framework/{v0.5.3 → v0.5.4}/lib/template-loaders/package.json +0 -0
  461. /package/framework/{v0.5.3 → v0.5.4}/lib/template-loaders/src/loaders/http.js +0 -0
  462. /package/framework/{v0.5.3 → v0.5.4}/lib/template-loaders/src/loaders/memory.js +0 -0
  463. /package/framework/{v0.5.3 → v0.5.4}/lib/template-loaders/src/main.js +0 -0
  464. /package/framework/{v0.5.3 → v0.5.4}/lib/url/README.md +0 -0
  465. /package/framework/{v0.5.3 → v0.5.4}/lib/url/index.js +0 -0
  466. /package/framework/{v0.5.3 → v0.5.4}/lib/url/routing.json +0 -0
  467. /package/framework/{v0.5.3 → v0.5.4}/lib/uuid/package.json +0 -0
  468. /package/framework/{v0.5.3 → v0.5.4}/lib/uuid/src/main.js +0 -0
  469. /package/framework/{v0.5.3 → v0.5.4}/lib/validator.js +0 -0
  470. /package/framework/{v0.5.3 → v0.5.4}/lib/watcher/package.json +0 -0
  471. /package/framework/{v0.5.3 → v0.5.4}/lib/watcher/src/main.js +0 -0
  472. /package/framework/{v0.5.3 → v0.5.4}/lib/ws-framing/package.json +0 -0
  473. /package/framework/{v0.5.3 → v0.5.4}/lib/ws-framing/src/main.js +0 -0
  474. /package/framework/{v0.5.3 → v0.5.4}/lib/ws-session/package.json +0 -0
  475. /package/framework/{v0.5.3 → v0.5.4}/lib/ws-session/src/main.js +0 -0
@@ -4023,6 +4023,20 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4023
4023
  let httpStatus = null; // captured from the HTTP/2 HEADERS frame (:status pseudo-header)
4024
4024
  const chunks = []; // collect Buffer chunks — avoids peak-memory doubling from string concat
4025
4025
 
4026
+ // #B52 — release the settled outbound stream so the cached HTTP/2 session stops
4027
+ // retaining it (and, through the per-request controller it captures, the large
4028
+ // per-request `options.conf` clone made in router.js). Idempotent; invoked at every
4029
+ // NON-retry terminal below (retry paths client.destroy() the session, which tears the
4030
+ // old stream down). Never throws — cleanup must not break the response path.
4031
+ var _finalized = false;
4032
+ var _finalizeStream = function _finalizeStream() {
4033
+ if (_finalized) { return; }
4034
+ _finalized = true;
4035
+ try { req.setTimeout(0); } catch (e) {}
4036
+ try { req.removeAllListeners(); } catch (e) {}
4037
+ try { if (!req.closed && !req.destroyed) { req.close(); } } catch (e) {}
4038
+ };
4039
+
4026
4040
  // Capture the HTTP/2 response status code from the HEADERS frame.
4027
4041
  // Without this, the :status pseudo-header is never read and nginx-level errors
4028
4042
  // (e.g. 502 Bad Gateway) are indistinguishable from JSON parse failures.
@@ -4059,6 +4073,8 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4059
4073
  // All retries exhausted — surface the error (H4: typed GinaHttp2Error)
4060
4074
  var _timeoutMsg = '[HTTP2] No response from '+ options[':authority'] +' after '+ (_streamTimeout > 1000 ? (_streamTimeout / 1000) + 's' : _streamTimeout + 'ms') +' (exhausted '+ HTTP2_MAX_RETRIES +' retries)';
4061
4075
  var _timeoutErr = new GinaHttp2Error(_timeoutMsg, { code: 'TIMEOUT', retryable: false, status: 503, retryCount: retryCount });
4076
+ // #B52 — release the settled stream (covers both the swallow-return and the callback below)
4077
+ _finalizeStream();
4062
4078
  // H3: if non-critical, swallow and return
4063
4079
  if (_swallowIfNonCritical(_timeoutErr)) return;
4064
4080
  if (typeof callback === 'function') {
@@ -4143,6 +4159,8 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4143
4159
  _ginaErr.cause = error; // preserve original Node error (stack, syscall, etc.)
4144
4160
  if (isConnError && error.accessPoint) { _ginaErr.accessPoint = error.accessPoint; }
4145
4161
 
4162
+ // #B52 — release the settled stream (covers both the swallow-return and the callback below)
4163
+ _finalizeStream();
4146
4164
  // H3: if non-critical, swallow and return
4147
4165
  if (_swallowIfNonCritical(_ginaErr)) return;
4148
4166
  if (typeof callback !== 'undefined') {
@@ -4188,6 +4206,8 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4188
4206
  status : 503,
4189
4207
  retryCount : retryCount
4190
4208
  });
4209
+ // #B52 — release the settled stream (covers both the swallow-return and the callback below)
4210
+ _finalizeStream();
4191
4211
  // H3: if non-critical, swallow and return
4192
4212
  if (_swallowIfNonCritical(prematureCloseErr)) return;
4193
4213
  if (typeof callback !== 'undefined') {
@@ -4247,6 +4267,8 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4247
4267
  status : 502,
4248
4268
  retryCount : retryCount
4249
4269
  });
4270
+ // #B52 — release the settled stream (covers both the swallow-return and the callback below)
4271
+ _finalizeStream();
4250
4272
  // H3: if non-critical, swallow and return
4251
4273
  if (_swallowIfNonCritical(_badGatewayErr)) return;
4252
4274
  if (typeof callback !== 'undefined') {
@@ -4257,6 +4279,10 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4257
4279
  return;
4258
4280
  }
4259
4281
 
4282
+ // #B52 — release the settled stream before the remaining onEnd terminals
4283
+ // (ALPN-mismatch, 5xx callback, throwError, success callback, EventEmitter-mode)
4284
+ _finalizeStream();
4285
+
4260
4286
  // 3. Exception filter for ALPN or protocol mismatches
4261
4287
  if (typeof data === 'string' && /^Unknown ALPN Protocol/.test(data)) {
4262
4288
  const err = { status: 500, error: new Error(data) };
@@ -12,10 +12,11 @@ var emitInspectorWindowData = require('./inspector-window-emit');
12
12
  // Precompiled regex — avoids per-request RegExp allocation (#P3)
13
13
  var blacklistRe = /[<>]/g;
14
14
 
15
- // Inherited from controller
16
- var self = null
17
- , local = null
18
- , getData = null
15
+ // Inherited from controller.
16
+ // #INS10 race fix: `self` / `local` are NOT declared module-scoped — they are
17
+ // captured FUNCTION-scoped inside render() (see the deps unpack) so concurrent
18
+ // renders never share them. The refs below stay module-scoped (read pre-await).
19
+ var getData = null
19
20
  , hasViews = null
20
21
  , setResources = null
21
22
  // Default filters
@@ -160,9 +161,16 @@ async function writeCache(bundle, opt, htmlContent, req, res) {
160
161
  */
161
162
  module.exports = async function render(userData, displayInspector, errOptions, deps) {
162
163
 
163
- // Inherited from controller
164
- self = deps.self;
165
- local = deps.local;
164
+ // Inherited from controller.
165
+ // #INS10 race fix — `self` / `local` are FUNCTION-scoped (`var`), not module-
166
+ // scoped: render() is async, so a render suspended at an await must not have
167
+ // its `self` / `local` overwritten by a concurrent render — otherwise the
168
+ // post-await Inspector emit (prod-window egress + dev `inspector#data`) would
169
+ // carry the other request's `_queryLog` / `_timeline`. Mirrors render-nunjucks.js.
170
+ // (getData / hasViews / SwigFilters / headersSent stay module-scoped: read
171
+ // before the first await, so they are not the documented race vector.)
172
+ var self = deps.self;
173
+ var local = deps.local;
166
174
  getData = deps.getData;
167
175
  hasViews = deps.hasViews;
168
176
  setResources = deps.setResources;
@@ -1504,8 +1504,23 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet) {
1504
1504
  }
1505
1505
 
1506
1506
  // test if val is strictly a float
1507
- if ( Number(val) === val && val % 1 !== 0 ) {
1508
- this.value = local.data[this.name] = Number(val);
1507
+ // #B46 (2026-06-15) accept STRING floats, not only real JS numbers.
1508
+ // The old gate `Number(val) === val` is true only for a real number,
1509
+ // so a string "1.5" (browser .value and urlencoded bodies are ALWAYS
1510
+ // strings) was rejected server-side. Coerce to Number first, then
1511
+ // require a finite value with a fractional part. Whole numbers ("2", 2)
1512
+ // still fail (no fractional part), preserving isFloat's contract that
1513
+ // an integer is not a float.
1514
+ // was:
1515
+ // if ( Number(val) === val && val % 1 !== 0 ) {
1516
+ // this.value = local.data[this.name] = Number(val);
1517
+ // isValid = true
1518
+ // } else {
1519
+ // isValid = false
1520
+ // }
1521
+ var floatVal = Number(val);
1522
+ if ( Number.isFinite(floatVal) && floatVal % 1 !== 0 ) {
1523
+ this.value = local.data[this.name] = floatVal;
1509
1524
  isValid = true
1510
1525
  } else {
1511
1526
  isValid = false
@@ -1686,7 +1701,7 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet) {
1686
1701
  *
1687
1702
  * @param {string|boolean} [mask] - by default "yyyy-mm-dd"
1688
1703
  *
1689
- * @returns {date} date - extended by gina::lib::helpers::dateFormat; an adaptation of Steven Levithan's code
1704
+ * @returns {object} field object (chainable). The parsed Date is preserved on the field's `.value` and rendered via the field's own `.format()` method (DateFormatHelper — an adaptation of Steven Levithan's code).
1690
1705
  * */
1691
1706
  self[el]['isDate'] = function(mask) {
1692
1707
  var val = this.value
@@ -1727,22 +1742,60 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet) {
1727
1742
  throw new Error('[FormValidator::isDate] Provided mask not allowed: `'+ mask +'`');
1728
1743
  }
1729
1744
 
1745
+ // #B47 (2026-06-15) — build the Date from explicit numeric
1746
+ // components identified by the mask tokens (y*/m*/d*), then
1747
+ // range-check via a round-trip. The old path rebuilt the string
1748
+ // FROM THE MASK (keeping its separators) and handed it to
1749
+ // `new Date(str)`, which parses a slash mask (e.g. "15/06/2023")
1750
+ // as US MM/DD -> month 15 -> Invalid Date, so any non-ISO mask
1751
+ // with day>12 (or non-US field order) was wrongly rejected. A
1752
+ // naive `new Date(y, m-1, d)` is not enough either: JS rolls
1753
+ // invalid components over (new Date(2023,12,45) is a valid date),
1754
+ // so the round-trip check (constructed components must equal the
1755
+ // inputs) is what still rejects e.g. 2023-13-45 and 2023-02-30.
1756
+ // was:
1757
+ // try {
1758
+ // val = val.match(/[^\/\- ]+/g);
1759
+ // var dic = {}, d, len;
1760
+ // for (d=0, len=m.length; d<len; ++d) { dic[m[d]] = val[d] }
1761
+ // var formatedDate = mask;
1762
+ // for (var v in dic) { formatedDate = formatedDate.replace(new RegExp(v, "g"), dic[v]) }
1763
+ // } catch (err) { throw new Error('...Provided value not allowed...'); }
1764
+ // date = this.value = local.data[this.name] = new Date(formatedDate);
1765
+ var dic = {}, d, len, parts = null,
1766
+ yNum = NaN, moNum = NaN, dNum = NaN;
1730
1767
  try {
1731
- val = val.match(/[^\/\- ]+/g);
1732
- var dic = {}, d, len;
1733
- for (d=0, len=m.length; d<len; ++d) {
1734
- dic[m[d]] = val[d]
1735
- }
1736
- var formatedDate = mask;
1737
- for (var v in dic) {
1738
- formatedDate = formatedDate.replace(new RegExp(v, "g"), dic[v])
1768
+ parts = val.match(/[^\/\- ]+/g);
1769
+ for (d = 0, len = m.length; d < len; ++d) {
1770
+ dic[m[d]] = parts[d];
1739
1771
  }
1740
1772
  } catch (err) {
1741
1773
  throw new Error('[FormValidator::isDate] Provided value not allowed: `'+ val +'`' + err);
1742
1774
  }
1743
1775
 
1776
+ for (var tok in dic) {
1777
+ if ( /y/i.test(tok) ) { yNum = parseInt(dic[tok], 10); }
1778
+ else if ( /m/i.test(tok) ) { moNum = parseInt(dic[tok], 10); }
1779
+ else if ( /d/i.test(tok) ) { dNum = parseInt(dic[tok], 10); }
1780
+ }
1744
1781
 
1745
- date = this.value = local.data[this.name] = new Date(formatedDate);
1782
+ if (
1783
+ !Number.isFinite(yNum) || !Number.isFinite(moNum) || !Number.isFinite(dNum)
1784
+ || moNum < 1 || moNum > 12 || dNum < 1 || dNum > 31
1785
+ ) {
1786
+ date = this.value = local.data[this.name] = new Date(NaN);
1787
+ } else {
1788
+ date = new Date(yNum, moNum - 1, dNum);
1789
+ // reject rolled-over components (e.g. Feb 30 -> Mar 2)
1790
+ if (
1791
+ date.getFullYear() !== yNum
1792
+ || date.getMonth() !== (moNum - 1)
1793
+ || date.getDate() !== dNum
1794
+ ) {
1795
+ date = new Date(NaN);
1796
+ }
1797
+ this.value = local.data[this.name] = date;
1798
+ }
1746
1799
 
1747
1800
  if ( /Invalid Date/i.test(date) || date instanceof Date === false ) {
1748
1801
  if ( !errors['isRequired'] && this.value == '' ) {
@@ -1762,7 +1815,14 @@ function FormValidatorUtil(data, $fields, xhrOptions, fieldsSet) {
1762
1815
 
1763
1816
  this.valid = isValid;
1764
1817
 
1765
- return date
1818
+ // #B48 (2026-06-17) — return the field object (chainable), like
1819
+ // every other rule, instead of the raw parsed Date. The Date is
1820
+ // preserved on this.value (set above), so
1821
+ // `field.isDate(mask).format('isoDateTime')` still renders it via
1822
+ // the field's own `format` method; returning the Date here broke
1823
+ // chaining into any validator rule (a Date has no .isX()).
1824
+ // was: return date
1825
+ return self[this.name]
1766
1826
  }
1767
1827
 
1768
1828
  /**
@@ -886,7 +886,12 @@ function ValidatorPlugin(rules, data, formId) {
886
886
 
887
887
  $divs[d].parentElement.removeChild($divs[d]);
888
888
  $err = document.createElement('div');
889
- $err.setAttribute('class', 'form-item-error-message');
889
+ // #livecheck — a field being typed in (the active element) surfaces only the
890
+ // soft form-item-warning border; its committed error message stays hidden until
891
+ // blur. This "refresh" re-create runs AFTER refreshWarning in the live-check
892
+ // global pass, so without this focus guard it re-shows the message mid-typing.
893
+ // On blur (field no longer active) the message is created shown (focusout commits).
894
+ $err.setAttribute('class', ( document.activeElement && document.activeElement.name == name ) ? 'form-item-error-message hidden' : 'form-item-error-message');
890
895
 
891
896
  // #A11Y1 (slice 2) — preserve the aria-errormessage wire we own across refresh.
892
897
  if ( _ginaOwnsErrMsg && _ariaErrId ) {
@@ -533,8 +533,21 @@ function Router(env, scope) {
533
533
  options = merge(JSON.clone(options), params);
534
534
  // options = merge(options, params);
535
535
 
536
- // We want to keep original conf untouched
537
- options.conf = JSON.clone(conf);
536
+ // We want to keep original conf untouched.
537
+ // #B52-residual: deep-cloning the WHOLE bundle conf on every matched request is a
538
+ // multi-MB per-request allocation (templates / server config / app assets / fonts) that
539
+ // accumulates under concurrency into a heap high-water-mark. Only conf.content.routing is
540
+ // mutated through this clone (the [rule].param write below) — every other subtree is
541
+ // read-only on the per-request path (setOptions reassigns conf.routing/reverseRouting/
542
+ // forms/locales/locale wholesale, which the shallow top-level copy already isolates; and
543
+ // plugins/connectors/model read config via their own getConfig clone or the global
544
+ // singleton, never through this object). So shallow-copy the top level + conf.content and
545
+ // deep-clone only conf.content.routing; the large immutable remainder is shared by
546
+ // reference at no per-request heap cost.
547
+ // options.conf = JSON.clone(conf); // pre-#B52-residual: whole-conf deep clone per request
548
+ options.conf = Object.assign({}, conf);
549
+ options.conf.content = Object.assign({}, conf.content);
550
+ options.conf.content.routing = JSON.clone(conf.content.routing);
538
551
  // inheriting from _common
539
552
  if (
540
553
  options.template
@@ -42,42 +42,6 @@ const env = process.env.NODE_ENV
42
42
  , isProductionScope = process.env.NODE_SCOPE_IS_PRODUCTION && process.env.NODE_SCOPE_IS_PRODUCTION.toLowerCase() === 'true'
43
43
  ;
44
44
 
45
- /**
46
- * IP-allowlist check for admin-grade /_gina/* endpoints (/_gina/info,
47
- * /_gina/cache/stats). #S7.
48
- *
49
- * Reads the allowlist from `process.gina._adminAllowList`, which `gna.js`
50
- * populates at bundle init from `app.json` `admin.allowFrom` (defaults to
51
- * loopback `['127.0.0.1', '::1']`). Same shape as `lib.metrics.isClientAllowed`
52
- * but on a separate axis — admin endpoints expose process state (memory,
53
- * uptime, HTTP/2 session counters, cache contents) and are gated separately
54
- * from Prometheus scrapes.
55
- *
56
- * Reads the client IP from `req.socket.remoteAddress` only — never trusts
57
- * `X-Forwarded-For` because reverse proxies could spoof it. Normalises
58
- * `::ffff:IPv4` (IPv6-mapped IPv4) → `IPv4` so listing `127.0.0.1` matches
59
- * both forms.
60
- *
61
- * Empty allowlist (`[]`) denies everyone — explicit lockdown choice.
62
- * Missing `process.gina._adminAllowList` (init not yet fired) falls back
63
- * to loopback-only, the safest default.
64
- *
65
- * @inner
66
- * @param {http.IncomingMessage|http2.Http2ServerRequest} req
67
- * @returns {boolean} true if client IP is allowed, false otherwise
68
- */
69
- function isAdminClientAllowed(req) {
70
- var list = (typeof process.gina === 'object' && process.gina && Array.isArray(process.gina._adminAllowList))
71
- ? process.gina._adminAllowList
72
- : ['127.0.0.1', '::1'];
73
- if (list.length === 0) return false;
74
- var ip = (req.socket && req.socket.remoteAddress)
75
- || (req.connection && req.connection.remoteAddress)
76
- || '';
77
- if (ip.indexOf('::ffff:') === 0) ip = ip.slice(7);
78
- return list.indexOf(ip) >= 0;
79
- }
80
-
81
45
  /**
82
46
  * Constant-time API-key check for the /_gina/agent SSE endpoint when it is
83
47
  * exposed outside dev mode (#INS9b). The configured key lives on
@@ -1007,7 +971,7 @@ function ServerEngineClass(options) {
1007
971
 
1008
972
  // #S7 — IP allowlist gate. Mirrors the metrics endpoint
1009
973
  // gate at L605-621. 403 on deny.
1010
- if ( !isAdminClientAllowed(request) ) {
974
+ if ( !lib.admin.isClientAllowed(request) ) {
1011
975
  var infoForbiddenBody = JSON.stringify({ error: 'forbidden', message: '/_gina/info: client IP not in app.json admin.allowFrom' });
1012
976
  var infoForbiddenHeaders = _setPoweredByHeader({
1013
977
  'cache-control': 'no-cache, no-store, must-revalidate',
@@ -1067,7 +1031,7 @@ function ServerEngineClass(options) {
1067
1031
  if ( request.method.toUpperCase() === 'GET' && /\/_gina\/cache\/stats$/i.test(request.url) ) {
1068
1032
 
1069
1033
  // #S7 — IP allowlist gate. Same shape as the /_gina/info gate above.
1070
- if ( !isAdminClientAllowed(request) ) {
1034
+ if ( !lib.admin.isClientAllowed(request) ) {
1071
1035
  var cacheStatsForbiddenBody = JSON.stringify({ error: 'forbidden', message: '/_gina/cache/stats: client IP not in app.json admin.allowFrom' });
1072
1036
  var cacheStatsForbiddenHeaders = _setPoweredByHeader({
1073
1037
  'cache-control': 'no-cache, no-store, must-revalidate',
@@ -2910,6 +2910,64 @@ function Server(options) {
2910
2910
  });
2911
2911
  }
2912
2912
 
2913
+ // ── /_gina/info — process/runtime state (always-on, admin-gated) ─────────
2914
+ // (#S7) Engine-agnostic mirror of the Isaac handler. GET only. The IP
2915
+ // allowlist comes from app.json `admin.allowFrom` (default loopback) via
2916
+ // process.gina._adminAllowList; 403 JSON on deny. The `http2` block is
2917
+ // Isaac-only (the Express engine has no HTTP/2 session metrics —
2918
+ // _h2Metrics is undefined here), so it degrades to omitted under Express.
2919
+ if (
2920
+ request.method.toUpperCase() === 'GET'
2921
+ && /\/_gina\/info$/i.test(request.url)
2922
+ ) {
2923
+ response.setHeader('content-type', 'application/json; charset=utf8');
2924
+ response.setHeader('cache-control', 'no-cache, no-store, must-revalidate');
2925
+ response.setHeader('pragma', 'no-cache');
2926
+ response.setHeader('expires', '0');
2927
+ if ( !lib.admin.isClientAllowed(request) ) {
2928
+ response.statusCode = 403;
2929
+ return response.end(JSON.stringify({ error: 'forbidden', message: '/_gina/info: client IP not in app.json admin.allowFrom' }));
2930
+ }
2931
+ var infoPayload = {
2932
+ "cache-is-enabled": self.instance._cacheIsEnabled,
2933
+ "memory" : process.memoryUsage(),
2934
+ "uptime" : process.uptime(),
2935
+ "version" : process.version
2936
+ };
2937
+ if (self.instance._h2Metrics) {
2938
+ infoPayload["http2"] = {
2939
+ activeSessions : self.instance._h2Metrics.activeSessions,
2940
+ totalStreams : self.instance._h2Metrics.totalStreams,
2941
+ goawayCount : self.instance._h2Metrics.goawayCount,
2942
+ rstCount : self.instance._h2Metrics.rstCount,
2943
+ rapidResetBlocked : self.instance._h2Metrics.rapidResetBlocked,
2944
+ extendedConnect : self.instance._h2Metrics.extendedConnect
2945
+ };
2946
+ }
2947
+ return response.end(JSON.stringify(infoPayload));
2948
+ }
2949
+
2950
+ // ── /_gina/cache/stats — cache statistics (always-on, admin-gated) ───────
2951
+ // (#S7) Engine-agnostic mirror of the Isaac handler. GET only. Same admin
2952
+ // IP allowlist as /_gina/info. Builds a Cache view over the shared
2953
+ // self.instance._cached Map and returns its stats(); 403 JSON on deny.
2954
+ if (
2955
+ request.method.toUpperCase() === 'GET'
2956
+ && /\/_gina\/cache\/stats$/i.test(request.url)
2957
+ ) {
2958
+ response.setHeader('content-type', 'application/json; charset=utf8');
2959
+ response.setHeader('cache-control', 'no-cache, no-store, must-revalidate');
2960
+ response.setHeader('pragma', 'no-cache');
2961
+ response.setHeader('expires', '0');
2962
+ if ( !lib.admin.isClientAllowed(request) ) {
2963
+ response.statusCode = 403;
2964
+ return response.end(JSON.stringify({ error: 'forbidden', message: '/_gina/cache/stats: client IP not in app.json admin.allowFrom' }));
2965
+ }
2966
+ var _cacheStatsView = new lib.Cache();
2967
+ _cacheStatsView.from(self.instance._cached);
2968
+ return response.end(JSON.stringify(_cacheStatsView.stats()));
2969
+ }
2970
+
2913
2971
  // ── /_gina/jobs/:id — async-job status (always-on, state-only) ──────────
2914
2972
  // (#AI6 slice 3) Engine-agnostic mirror of the Isaac handler. GET only.
2915
2973
  // Returns lib.job.toStatusView (id + state + timestamps) — never the
@@ -3386,8 +3444,36 @@ function Server(options) {
3386
3444
  // -> https://github.com/mscdex/busboy
3387
3445
  var opt = self.conf[self.appName][self.env].content.settings.upload;
3388
3446
  // checking size
3389
- var maxSize = parseInt(opt.maxFieldsSize);
3390
- var fileSize = request.headers["content-length"]/1024/1024; //MB
3447
+ // #B51 (2026-06-16) — parse the maxFieldsSize unit suffix into bytes.
3448
+ // was: var maxSize = parseInt(opt.maxFieldsSize);
3449
+ // var fileSize = request.headers["content-length"]/1024/1024; //MB
3450
+ // parseInt("512K") => 512, compared against content-length/1024/1024 (MB), so
3451
+ // "512K" silently meant 512 MB. parseSize reads B/KB/MB/GB (case-insensitive)
3452
+ // into bytes; a BARE number is treated as MB for back-compat (the shipped "2MB"
3453
+ // => 2*1024*1024, unchanged). content-length is then compared in bytes directly.
3454
+ var parseSize = function(value) {
3455
+ if ( typeof(value) == 'number' ) { return value * 1024 * 1024; } // bare number = MB
3456
+ if ( typeof(value) != 'string' ) { return NaN; }
3457
+ var m = value.trim().match(/^([0-9]*\.?[0-9]+)\s*(b|kb|k|mb|m|gb|g)?$/i);
3458
+ if ( !m ) { return NaN; }
3459
+ var n = parseFloat(m[1]);
3460
+ switch ( (m[2] || 'mb').toLowerCase() ) {
3461
+ case 'b':
3462
+ return n;
3463
+ case 'k':
3464
+ case 'kb':
3465
+ return n * 1024;
3466
+ case 'g':
3467
+ case 'gb':
3468
+ return n * 1024 * 1024 * 1024;
3469
+ case 'm':
3470
+ case 'mb':
3471
+ default:
3472
+ return n * 1024 * 1024;
3473
+ }
3474
+ };
3475
+ var maxSize = parseSize(opt.maxFieldsSize); // bytes
3476
+ var fileSize = parseInt(request.headers["content-length"], 10); // bytes
3391
3477
  var hasAutoTmpCleanupTimeout = (
3392
3478
  typeof(opt.autoTmpCleanupTimeout) != 'undefined'
3393
3479
  && opt.autoTmpCleanupTimeout != ''
@@ -3396,11 +3482,23 @@ function Server(options) {
3396
3482
  ) ? true : false;
3397
3483
  var autoTmpCleanupTimeout = (!hasAutoTmpCleanupTimeout) ? null : parseTimeout(opt.autoTmpCleanupTimeout);
3398
3484
 
3399
- if (fileSize > maxSize) {
3485
+ // #B51 guard on maxSize so an unset / 0 / invalid maxFieldsSize disables the
3486
+ // cap (was: `fileSize > maxSize` with maxSize=NaN naturally skipped; maxSize=0
3487
+ // would have rejected everything — 0 now means "no limit", as for maxFields).
3488
+ if (maxSize && fileSize > maxSize) {
3400
3489
  return throwError(response, 431, 'Attachment exceeded maximum file size [ '+ opt.maxFieldsSize +' ]');
3401
3490
  }
3402
3491
 
3403
- var uploadDir = opt.uploadDir || os.tmpdir();
3492
+ // #B49 (2026-06-16) honour the configured upload directory.
3493
+ // was: var uploadDir = opt.uploadDir || os.tmpdir();
3494
+ // The old line read only `opt.uploadDir`, a key the shipped settings.json
3495
+ // never sets (it defines `upload.tmpPath`, and nothing maps tmpPath→uploadDir),
3496
+ // so every upload fell back to os.tmpdir() and the documented `upload.tmpPath`
3497
+ // / per-group `path` keys were dead. `tmpPath` resolves to an absolute dir at
3498
+ // config-load (via whisper → <project>/tmp, created at boot), so prefer it;
3499
+ // `uploadDir` is kept first for back-compat (any operator who set it). A
3500
+ // per-group `path` overrides this global default at the write site below.
3501
+ var uploadDir = opt.uploadDir || opt.tmpPath || os.tmpdir();
3404
3502
 
3405
3503
  /**
3406
3504
  * str2ab
@@ -3504,43 +3602,108 @@ function Server(options) {
3504
3602
  file._dataLen = 0;
3505
3603
  ++fileCount;
3506
3604
 
3507
- if (
3508
- typeof(group) != 'undefined'
3509
- && group != 'untagged'
3510
- && typeof(opt.groups[group]) != 'undefined'
3511
- ) {
3512
- // allowed extensions
3513
- if ( typeof(opt.groups[group].allowedExtensions) != 'undefined'
3514
- && opt.groups[group].allowedExtensions != '*'
3515
- ) {
3516
- var ext = opt.groups[group].allowedExtensions;
3517
- var fileExt = filename.substring(filename.lastIndexOf('.')+1)
3518
- if ( !Array.isArray(ext) ) {
3519
- ext = [ext]
3520
- }
3605
+ // #B51 (2026-06-16) — enforce the global maxFields file-count cap. It was
3606
+ // declared in settings.json (default 1000) but read NOWHERE — the only count
3607
+ // limit was the binary per-group isMultipleAllowed, so an isMultipleAllowed:true
3608
+ // group (the shipped untagged default) accepted UNBOUNDED files. parseInt reads
3609
+ // the number or a string; an unset / 0 / NaN value disables the cap. Global only
3610
+ // (per-group maxFields is not wired, like per-group maxFieldsSize).
3611
+ var maxFields = parseInt(opt.maxFields, 10);
3612
+ if ( maxFields && fileCount > maxFields ) {
3613
+ throwError(response, 400, 'too many upload fields (max '+ maxFields +'). See the `upload.maxFields` definition in settings.json.');
3614
+ return false;
3615
+ }
3521
3616
 
3522
- if ( ext.indexOf(fileExt) < 0 ) {
3523
- throwError(response, 400, '`'+ fileExt +'` is not an allowed extension. See `'+ group +'` upload group definition.');
3524
- return false;
3525
- }
3617
+ // #B50 (2026-06-16) every uploaded file must map to a CONFIGURED upload group.
3618
+ // The old gate (commented below) ran the ext + count checks ONLY for a group that was
3619
+ // defined, NOT `untagged`, AND present in opt.groups; every other case — no group,
3620
+ // `untagged`, or an unknown group name — streamed through UNCHECKED, so a client could
3621
+ // bypass a group's allow-list simply by tagging a file with any unconfigured group.
3622
+ // Now: a file with no group falls back to the default `untagged`; a group not declared
3623
+ // in settings.json `upload.groups` is rejected (400); and `untagged` is no longer
3624
+ // hardcode-exempt — it obeys its own allowedExtensions / isMultipleAllowed like any
3625
+ // other group (the shipped default is `*` + isMultipleAllowed:true, so single- and
3626
+ // multi-file untagged uploads are unaffected).
3627
+ //
3628
+ // if (
3629
+ // typeof(group) != 'undefined'
3630
+ // && group != 'untagged'
3631
+ // && typeof(opt.groups[group]) != 'undefined'
3632
+ // ) {
3633
+ // // allowed extensions
3634
+ // if ( typeof(opt.groups[group].allowedExtensions) != 'undefined'
3635
+ // && opt.groups[group].allowedExtensions != '*'
3636
+ // ) {
3637
+ // var ext = opt.groups[group].allowedExtensions;
3638
+ // var fileExt = filename.substring(filename.lastIndexOf('.')+1)
3639
+ // if ( !Array.isArray(ext) ) { ext = [ext] }
3640
+ // if ( ext.indexOf(fileExt) < 0 ) {
3641
+ // throwError(response, 400, '`'+ fileExt +'` is not an allowed extension. See `'+ group +'` upload group definition.');
3642
+ // return false;
3643
+ // }
3644
+ // }
3645
+ // // multiple or single
3646
+ // if ( typeof(opt.groups[group].isMultipleAllowed) != 'undefined'
3647
+ // && !opt.groups[group].isMultipleAllowed
3648
+ // && fileCount > 1
3649
+ // ) {
3650
+ // throwError(response, 400, 'multiple uploads not allowed. See `'+ group +'` upload group definition.');
3651
+ // return false;
3652
+ // }
3653
+ // }
3654
+ var fileGroup = ( typeof(group) != 'undefined' && group ) ? group : 'untagged';
3655
+
3656
+ // deny an unconfigured upload group (was: silently streamed through)
3657
+ if ( typeof(opt.groups) == 'undefined' || typeof(opt.groups[fileGroup]) == 'undefined' ) {
3658
+ throwError(response, 400, '`'+ fileGroup +'` is not a configured upload group. See the `upload.groups` definition in settings.json.');
3659
+ return false;
3660
+ }
3661
+
3662
+ // allowed extensions
3663
+ if ( typeof(opt.groups[fileGroup].allowedExtensions) != 'undefined'
3664
+ && opt.groups[fileGroup].allowedExtensions != '*'
3665
+ ) {
3666
+ var ext = opt.groups[fileGroup].allowedExtensions;
3667
+ var fileExt = filename.substring(filename.lastIndexOf('.')+1)
3668
+ if ( !Array.isArray(ext) ) {
3669
+ ext = [ext]
3526
3670
  }
3527
3671
 
3528
- // multiple or single
3529
- if ( typeof(opt.groups[group].isMultipleAllowed) != 'undefined'
3530
- && !opt.groups[group].isMultipleAllowed
3531
- && fileCount > 1
3532
- ) {
3533
- throwError(response, 400, 'multiple uploads not allowed. See `'+ group +'` upload group definition.');
3672
+ if ( ext.indexOf(fileExt) < 0 ) {
3673
+ throwError(response, 400, '`'+ fileExt +'` is not an allowed extension. See `'+ fileGroup +'` upload group definition.');
3534
3674
  return false;
3535
3675
  }
3536
3676
  }
3537
3677
 
3678
+ // multiple or single
3679
+ if ( typeof(opt.groups[fileGroup].isMultipleAllowed) != 'undefined'
3680
+ && !opt.groups[fileGroup].isMultipleAllowed
3681
+ && fileCount > 1
3682
+ ) {
3683
+ throwError(response, 400, 'multiple uploads not allowed. See `'+ fileGroup +'` upload group definition.');
3684
+ return false;
3685
+ }
3686
+
3538
3687
 
3539
3688
  // TODO - https://github.com/TooTallNate/node-wav
3540
3689
  //file._mimetype = mimetype;
3541
3690
 
3691
+ // #B49 (2026-06-16) — per-group `path` overrides the global uploadDir;
3692
+ // fall back to the global dir when the group declares no path. The
3693
+ // configured defaults resolve to dirs that exist (os.tmpdir() always;
3694
+ // <project>/tmp is created at boot), but a CUSTOM dir may not exist yet —
3695
+ // and the writeStream 'error' handler is only attached later, in the
3696
+ // busboy 'finish' loop, so a missing dir would emit an unhandled ENOENT
3697
+ // here (during streaming) and crash the bundle. mkdir-if-missing guards it.
3698
+ var fileUploadDir = ( opt.groups[fileGroup] && opt.groups[fileGroup].path )
3699
+ ? opt.groups[fileGroup].path
3700
+ : uploadDir;
3701
+ if ( !fs.existsSync(fileUploadDir) ) {
3702
+ fs.mkdirSync(fileUploadDir, { recursive: true });
3703
+ }
3704
+
3542
3705
  // creating file
3543
- writeStreams[index] = fs.createWriteStream( _(uploadDir + '/' + filename) );
3706
+ writeStreams[index] = fs.createWriteStream( _(fileUploadDir + '/' + filename) );
3544
3707
  var liner = new require('stream').Transform({objectMode: true});
3545
3708
 
3546
3709
  liner._transform = function (chunk, encoding, done) {
@@ -3567,7 +3730,9 @@ function Server(options) {
3567
3730
  //fileObj = Buffer.from(str2ab(this._dataChunk));
3568
3731
  //delete this._dataChunk;
3569
3732
 
3570
- tmpFilename = _(uploadDir + '/' + filename);
3733
+ // #B49 mirror the per-group / configured dir chosen at the write site
3734
+ // above (file.on('end') closes over the same per-file fileUploadDir).
3735
+ tmpFilename = _(fileUploadDir + '/' + filename);
3571
3736
 
3572
3737
  request.files.push({
3573
3738
  name: fieldname,
@@ -83,7 +83,7 @@
83
83
  "untagged": {
84
84
  "path": "${tmpPath}",
85
85
  "allowedExtensions": "*", // or [ "jpg", "jpeg", "png", "svg" ]
86
- "isMultipleAllowed": false
86
+ "isMultipleAllowed": true // #B50 — untagged is the permissive default (now enforced); set false to require single-file
87
87
  // optional sample
88
88
  // ,
89
89
  // "filePrefix": "$designId_",
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "gina-lib-admin",
3
+ "version": "1.0.0",
4
+ "description": "Admin /_gina/* IP-allowlist gate (isClientAllowed). Single source of truth for the /_gina/info and /_gina/cache/stats access check; previously duplicated byte-identical in server.js and server.isaac.js.",
5
+ "authors": [
6
+ {
7
+ "name": "Martin-Luther ETOUMAN",
8
+ "email": "contact@gina.io"
9
+ }
10
+ ],
11
+ "copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
12
+ "engines": {
13
+ "node": ">=0.10.22"
14
+ },
15
+ "main": "src/main",
16
+ "license": "MIT"
17
+ }