gina 0.5.8 → 0.5.9

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 (500) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/README.md +5 -4
  3. package/ROADMAP.md +1 -0
  4. package/framework/v0.5.9/VERSION +1 -0
  5. package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -1
  6. package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +35 -35
  7. package/framework/v0.5.9/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  8. package/framework/v0.5.9/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  9. package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.js +58 -12
  10. package/framework/{v0.5.8 → v0.5.9}/core/server.isaac.js +81 -1
  11. package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/add.js +7 -5
  12. package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/migrate.js +5 -3
  13. package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/remove.js +6 -4
  14. package/framework/{v0.5.8 → v0.5.9}/lib/index.js +8 -0
  15. package/framework/v0.5.9/lib/json-config-header/package.json +17 -0
  16. package/framework/v0.5.9/lib/json-config-header/src/main.js +113 -0
  17. package/framework/{v0.5.8 → v0.5.9}/lib/routing/src/main.js +0 -1
  18. package/framework/{v0.5.8 → v0.5.9}/package.json +1 -1
  19. package/gna.js +4 -4
  20. package/llms.txt +1 -1
  21. package/package.json +3 -3
  22. package/framework/v0.5.8/VERSION +0 -1
  23. package/framework/v0.5.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  24. package/framework/v0.5.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  25. /package/framework/{v0.5.8 → v0.5.9}/AUTHORS +0 -0
  26. /package/framework/{v0.5.8 → v0.5.9}/LICENSE +0 -0
  27. /package/framework/{v0.5.8 → v0.5.9}/core/asset/html/nolayout.html +0 -0
  28. /package/framework/{v0.5.8 → v0.5.9}/core/asset/html/static.html +0 -0
  29. /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/android-chrome-192x192.png +0 -0
  30. /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/android-chrome-512x512.png +0 -0
  31. /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/apple-touch-icon.png +0 -0
  32. /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/favicon-16x16.png +0 -0
  33. /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/favicon-32x32.png +0 -0
  34. /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/favicon.ico +0 -0
  35. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/README.md +0 -0
  36. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  37. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  38. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  39. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  40. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  41. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  42. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  43. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  44. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  45. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  46. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  47. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  48. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  49. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  50. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  51. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  52. /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  53. /package/framework/{v0.5.8 → v0.5.9}/core/config.js +0 -0
  54. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/ai/index.js +0 -0
  55. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/ai/lib/connector.js +0 -0
  56. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/index.js +0 -0
  57. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/connector.js +0 -0
  58. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  59. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  60. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/n1ql.js +0 -0
  61. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/session-store.js +0 -0
  62. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  63. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  64. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/index.js +0 -0
  65. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/lib/connector.js +0 -0
  66. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/lib/job-store.js +0 -0
  67. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  68. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/lib/session-store.js +0 -0
  69. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mysql/index.js +0 -0
  70. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mysql/lib/connector.js +0 -0
  71. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/postgresql/index.js +0 -0
  72. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/postgresql/lib/connector.js +0 -0
  73. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/redis/index.js +0 -0
  74. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/redis/lib/connector.js +0 -0
  75. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/redis/lib/job-store.js +0 -0
  76. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/redis/lib/session-store.js +0 -0
  77. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/scylladb/index.js +0 -0
  78. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/scylladb/lib/connector.js +0 -0
  79. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/scylladb/lib/session-store.js +0 -0
  80. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sql-parser.js +0 -0
  81. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sqlite/index.js +0 -0
  82. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sqlite/lib/connector.js +0 -0
  83. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sqlite/lib/job-store.js +0 -0
  84. /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sqlite/lib/session-store.js +0 -0
  85. /package/framework/{v0.5.8 → v0.5.9}/core/content.encoding +0 -0
  86. /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.framework.js +0 -0
  87. /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-json.js +0 -0
  88. /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-nunjucks-async.js +0 -0
  89. /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-nunjucks.js +0 -0
  90. /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-stream.js +0 -0
  91. /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-swig-async.js +0 -0
  92. /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-swig.js +0 -0
  93. /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-v1.js +0 -0
  94. /package/framework/{v0.5.8 → v0.5.9}/core/controller/index.js +0 -0
  95. /package/framework/{v0.5.8 → v0.5.9}/core/controller/inspector-window-emit.js +0 -0
  96. /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/LICENSE +0 -0
  97. /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/README.md +0 -0
  98. /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  99. /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  100. /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  101. /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  102. /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/package.json +0 -0
  103. /package/framework/{v0.5.8 → v0.5.9}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  104. /package/framework/{v0.5.8 → v0.5.9}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  105. /package/framework/{v0.5.8 → v0.5.9}/core/deps/streamsearch-1.1.0/package.json +0 -0
  106. /package/framework/{v0.5.8 → v0.5.9}/core/dev/index.js +0 -0
  107. /package/framework/{v0.5.8 → v0.5.9}/core/dev/lib/class.js +0 -0
  108. /package/framework/{v0.5.8 → v0.5.9}/core/dev/lib/factory.js +0 -0
  109. /package/framework/{v0.5.8 → v0.5.9}/core/dev/lib/tools.js +0 -0
  110. /package/framework/{v0.5.8 → v0.5.9}/core/gna.js +0 -0
  111. /package/framework/{v0.5.8 → v0.5.9}/core/locales/README.md +0 -0
  112. /package/framework/{v0.5.8 → v0.5.9}/core/locales/currency.json +0 -0
  113. /package/framework/{v0.5.8 → v0.5.9}/core/locales/dist/language/en.json +0 -0
  114. /package/framework/{v0.5.8 → v0.5.9}/core/locales/dist/language/fr.json +0 -0
  115. /package/framework/{v0.5.8 → v0.5.9}/core/locales/dist/region/en.json +0 -0
  116. /package/framework/{v0.5.8 → v0.5.9}/core/locales/dist/region/fr.json +0 -0
  117. /package/framework/{v0.5.8 → v0.5.9}/core/locales/index.js +0 -0
  118. /package/framework/{v0.5.8 → v0.5.9}/core/mime.types +0 -0
  119. /package/framework/{v0.5.8 → v0.5.9}/core/model/entity.js +0 -0
  120. /package/framework/{v0.5.8 → v0.5.9}/core/model/index.js +0 -0
  121. /package/framework/{v0.5.8 → v0.5.9}/core/model/template/entityFactory.js +0 -0
  122. /package/framework/{v0.5.8 → v0.5.9}/core/model/template/index.js +0 -0
  123. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/README.md +0 -0
  124. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/index.js +0 -0
  125. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/csrf/README.md +0 -0
  126. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/csrf/package.json +0 -0
  127. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/csrf/src/main.js +0 -0
  128. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/README.md +0 -0
  129. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coep/README.md +0 -0
  130. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coep/package.json +0 -0
  131. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  132. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coop/README.md +0 -0
  133. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coop/package.json +0 -0
  134. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  135. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/corp/README.md +0 -0
  136. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/corp/package.json +0 -0
  137. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  138. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/csp/README.md +0 -0
  139. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/csp/package.json +0 -0
  140. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  141. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  142. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  143. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  144. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  145. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  146. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  147. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  148. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  149. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  150. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/package.json +0 -0
  151. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  152. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  153. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  154. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/src/main.js +0 -0
  155. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  156. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  157. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  158. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  159. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  160. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  161. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  162. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  163. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  164. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  165. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  166. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  167. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  168. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  169. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  170. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  171. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  172. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  173. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/session/README.md +0 -0
  174. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/session/package.json +0 -0
  175. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/session/src/main.js +0 -0
  176. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/storage/README.md +0 -0
  177. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/storage/build.json +0 -0
  178. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/storage/package.json +0 -0
  179. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/storage/src/main.js +0 -0
  180. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/README.md +0 -0
  181. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/build.json +0 -0
  182. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/package.json +0 -0
  183. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/src/form-validator.js +0 -0
  184. /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/src/main.js +0 -0
  185. /package/framework/{v0.5.8 → v0.5.9}/core/router.js +0 -0
  186. /package/framework/{v0.5.8 → v0.5.9}/core/server.express.js +0 -0
  187. /package/framework/{v0.5.8 → v0.5.9}/core/server.js +0 -0
  188. /package/framework/{v0.5.8 → v0.5.9}/core/status.codes +0 -0
  189. /package/framework/{v0.5.8 → v0.5.9}/core/template/_gitignore +0 -0
  190. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/app.json +0 -0
  191. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  192. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/routing.json +0 -0
  193. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/settings.json +0 -0
  194. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  195. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/templates.json +0 -0
  196. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  197. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  198. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  199. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  200. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/index.js +0 -0
  201. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/locales/en.json +0 -0
  202. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  203. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  204. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  205. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  206. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  207. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  208. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  209. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/readme.md +0 -0
  210. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/sw.js +0 -0
  211. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  212. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  213. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  214. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  215. /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  216. /package/framework/{v0.5.8 → v0.5.9}/core/template/command/gina.bat.tpl +0 -0
  217. /package/framework/{v0.5.8 → v0.5.9}/core/template/command/gina.tpl +0 -0
  218. /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/env.json +0 -0
  219. /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/manifest.json +0 -0
  220. /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/package.json +0 -0
  221. /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/settings.json +0 -0
  222. /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/statics.json +0 -0
  223. /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/templates.json +0 -0
  224. /package/framework/{v0.5.8 → v0.5.9}/core/template/error/client/json/401.json +0 -0
  225. /package/framework/{v0.5.8 → v0.5.9}/core/template/error/client/json/403.json +0 -0
  226. /package/framework/{v0.5.8 → v0.5.9}/core/template/error/client/json/404.json +0 -0
  227. /package/framework/{v0.5.8 → v0.5.9}/core/template/error/server/html/50x.html +0 -0
  228. /package/framework/{v0.5.8 → v0.5.9}/core/template/error/server/json/500.json +0 -0
  229. /package/framework/{v0.5.8 → v0.5.9}/core/template/error/server/json/503.json +0 -0
  230. /package/framework/{v0.5.8 → v0.5.9}/core/template/extensions/logger/config.json +0 -0
  231. /package/framework/{v0.5.8 → v0.5.9}/helpers/console.js +0 -0
  232. /package/framework/{v0.5.8 → v0.5.9}/helpers/context.js +0 -0
  233. /package/framework/{v0.5.8 → v0.5.9}/helpers/data/LICENSE +0 -0
  234. /package/framework/{v0.5.8 → v0.5.9}/helpers/data/README.md +0 -0
  235. /package/framework/{v0.5.8 → v0.5.9}/helpers/data/package.json +0 -0
  236. /package/framework/{v0.5.8 → v0.5.9}/helpers/data/src/main.js +0 -0
  237. /package/framework/{v0.5.8 → v0.5.9}/helpers/dateFormat.js +0 -0
  238. /package/framework/{v0.5.8 → v0.5.9}/helpers/index.js +0 -0
  239. /package/framework/{v0.5.8 → v0.5.9}/helpers/json/LICENSE +0 -0
  240. /package/framework/{v0.5.8 → v0.5.9}/helpers/json/README.md +0 -0
  241. /package/framework/{v0.5.8 → v0.5.9}/helpers/json/package.json +0 -0
  242. /package/framework/{v0.5.8 → v0.5.9}/helpers/json/src/main.js +0 -0
  243. /package/framework/{v0.5.8 → v0.5.9}/helpers/path.js +0 -0
  244. /package/framework/{v0.5.8 → v0.5.9}/helpers/plugins/README.md +0 -0
  245. /package/framework/{v0.5.8 → v0.5.9}/helpers/plugins/package.json +0 -0
  246. /package/framework/{v0.5.8 → v0.5.9}/helpers/plugins/src/api-error.js +0 -0
  247. /package/framework/{v0.5.8 → v0.5.9}/helpers/plugins/src/main.js +0 -0
  248. /package/framework/{v0.5.8 → v0.5.9}/helpers/prototypes.js +0 -0
  249. /package/framework/{v0.5.8 → v0.5.9}/helpers/task.js +0 -0
  250. /package/framework/{v0.5.8 → v0.5.9}/helpers/text.js +0 -0
  251. /package/framework/{v0.5.8 → v0.5.9}/lib/admin/package.json +0 -0
  252. /package/framework/{v0.5.8 → v0.5.9}/lib/admin/src/main.js +0 -0
  253. /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/README.md +0 -0
  254. /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/build.json +0 -0
  255. /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/package.json +0 -0
  256. /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/src/dep/jszip.min.js +0 -0
  257. /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/src/main.js +0 -0
  258. /package/framework/{v0.5.8 → v0.5.9}/lib/async/package.json +0 -0
  259. /package/framework/{v0.5.8 → v0.5.9}/lib/async/src/main.js +0 -0
  260. /package/framework/{v0.5.8 → v0.5.9}/lib/cache/README.md +0 -0
  261. /package/framework/{v0.5.8 → v0.5.9}/lib/cache/build.json +0 -0
  262. /package/framework/{v0.5.8 → v0.5.9}/lib/cache/package.json +0 -0
  263. /package/framework/{v0.5.8 → v0.5.9}/lib/cache/src/main.js +0 -0
  264. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/aliases.json +0 -0
  265. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/add.js +0 -0
  266. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/arguments.json +0 -0
  267. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/build.js +0 -0
  268. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/copy.js +0 -0
  269. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/cp.js +0 -0
  270. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/help.js +0 -0
  271. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/help.txt +0 -0
  272. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  273. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/list.js +0 -0
  274. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/man.js +0 -0
  275. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/mcp-start.js +0 -0
  276. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/mcp.js +0 -0
  277. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/oas.js +0 -0
  278. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/openapi.js +0 -0
  279. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/remove.js +0 -0
  280. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/rename.js +0 -0
  281. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/restart.js +0 -0
  282. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/rm.js +0 -0
  283. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/start.js +0 -0
  284. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/status.js +0 -0
  285. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/stop.js +0 -0
  286. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/cache/stats.js +0 -0
  287. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/arguments.json +0 -0
  288. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/help.js +0 -0
  289. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/help.txt +0 -0
  290. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/infer.js +0 -0
  291. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/list.js +0 -0
  292. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/models.js +0 -0
  293. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/rm.js +0 -0
  294. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/test.js +0 -0
  295. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/add.js +0 -0
  296. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/get.js +0 -0
  297. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/help.js +0 -0
  298. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/help.txt +0 -0
  299. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/link-dev.js +0 -0
  300. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/list.js +0 -0
  301. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/remove.js +0 -0
  302. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/rm.js +0 -0
  303. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/set.js +0 -0
  304. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/unset.js +0 -0
  305. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/use.js +0 -0
  306. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/add.js +0 -0
  307. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/arguments.json +0 -0
  308. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/build.js +0 -0
  309. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/dot.js +0 -0
  310. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/get.js +0 -0
  311. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/help.js +0 -0
  312. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/help.txt +0 -0
  313. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/init.js +0 -0
  314. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/link-node-modules.js +0 -0
  315. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/link.js +0 -0
  316. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/list.js +0 -0
  317. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/man.js +0 -0
  318. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/msg.json +0 -0
  319. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/open.js +0 -0
  320. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/remove.js +0 -0
  321. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/reset.js +0 -0
  322. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/restart.js +0 -0
  323. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/set.js +0 -0
  324. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/start.js +0 -0
  325. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/status.js +0 -0
  326. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/stop.js +0 -0
  327. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/tail.js +0 -0
  328. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/update.js +0 -0
  329. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/version.js +0 -0
  330. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/gina-dev.1.md +0 -0
  331. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/gina-framework.1.md +0 -0
  332. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/gina.1.md +0 -0
  333. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/helper.js +0 -0
  334. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/add.js +0 -0
  335. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/arguments.json +0 -0
  336. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/export.js +0 -0
  337. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/help.js +0 -0
  338. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/help.txt +0 -0
  339. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/import.js +0 -0
  340. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/scan.js +0 -0
  341. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/index.js +0 -0
  342. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/inspector/help.js +0 -0
  343. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/inspector/help.txt +0 -0
  344. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/inspector/open.js +0 -0
  345. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/man-render.js +0 -0
  346. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/arguments.json +0 -0
  347. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/help.js +0 -0
  348. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/help.txt +0 -0
  349. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/kill.js +0 -0
  350. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/list.js +0 -0
  351. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/msg.json +0 -0
  352. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/help.js +0 -0
  353. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/help.txt +0 -0
  354. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/inc/scan.js +0 -0
  355. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/list.js +0 -0
  356. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/reset.js +0 -0
  357. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/set.js +0 -0
  358. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/add.js +0 -0
  359. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/arguments.json +0 -0
  360. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/backup.js +0 -0
  361. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/build.js +0 -0
  362. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/help.js +0 -0
  363. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/help.txt +0 -0
  364. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/import.js +0 -0
  365. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/list.js +0 -0
  366. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/man.js +0 -0
  367. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/move.js +0 -0
  368. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/remove.js +0 -0
  369. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/rename.js +0 -0
  370. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/restart.js +0 -0
  371. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/restore.js +0 -0
  372. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/rm.js +0 -0
  373. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/start.js +0 -0
  374. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/status.js +0 -0
  375. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/stop.js +0 -0
  376. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/arguments.json +0 -0
  377. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/help.js +0 -0
  378. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/help.txt +0 -0
  379. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/list.js +0 -0
  380. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/remove.js +0 -0
  381. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/set.js +0 -0
  382. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/add.js +0 -0
  383. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/help.js +0 -0
  384. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/help.txt +0 -0
  385. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/link-local.js +0 -0
  386. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/link-production.js +0 -0
  387. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/list.js +0 -0
  388. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/remove.js +0 -0
  389. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/rm.js +0 -0
  390. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/use.js +0 -0
  391. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/arguments.json +0 -0
  392. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/check.js +0 -0
  393. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/help.js +0 -0
  394. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/help.txt +0 -0
  395. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/scan.js +0 -0
  396. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/help.js +0 -0
  397. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/help.txt +0 -0
  398. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/list.js +0 -0
  399. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/man.js +0 -0
  400. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/start.js +0 -0
  401. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/view/add.js +0 -0
  402. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd-status-format/package.json +0 -0
  403. /package/framework/{v0.5.8 → v0.5.9}/lib/cmd-status-format/src/main.js +0 -0
  404. /package/framework/{v0.5.8 → v0.5.9}/lib/collection/README.md +0 -0
  405. /package/framework/{v0.5.8 → v0.5.9}/lib/collection/build.json +0 -0
  406. /package/framework/{v0.5.8 → v0.5.9}/lib/collection/package.json +0 -0
  407. /package/framework/{v0.5.8 → v0.5.9}/lib/collection/src/main.js +0 -0
  408. /package/framework/{v0.5.8 → v0.5.9}/lib/config.js +0 -0
  409. /package/framework/{v0.5.8 → v0.5.9}/lib/connector-config/package.json +0 -0
  410. /package/framework/{v0.5.8 → v0.5.9}/lib/connector-config/src/main.js +0 -0
  411. /package/framework/{v0.5.8 → v0.5.9}/lib/connector-registry/package.json +0 -0
  412. /package/framework/{v0.5.8 → v0.5.9}/lib/connector-registry/src/main.js +0 -0
  413. /package/framework/{v0.5.8 → v0.5.9}/lib/cron/README.md +0 -0
  414. /package/framework/{v0.5.8 → v0.5.9}/lib/cron/package.json +0 -0
  415. /package/framework/{v0.5.8 → v0.5.9}/lib/cron/src/main.js +0 -0
  416. /package/framework/{v0.5.8 → v0.5.9}/lib/domain/LICENSE +0 -0
  417. /package/framework/{v0.5.8 → v0.5.9}/lib/domain/README.md +0 -0
  418. /package/framework/{v0.5.8 → v0.5.9}/lib/domain/package.json +0 -0
  419. /package/framework/{v0.5.8 → v0.5.9}/lib/domain/src/main.js +0 -0
  420. /package/framework/{v0.5.8 → v0.5.9}/lib/generator/index.js +0 -0
  421. /package/framework/{v0.5.8 → v0.5.9}/lib/i18n/package.json +0 -0
  422. /package/framework/{v0.5.8 → v0.5.9}/lib/i18n/src/main.js +0 -0
  423. /package/framework/{v0.5.8 → v0.5.9}/lib/inherits/LICENSE +0 -0
  424. /package/framework/{v0.5.8 → v0.5.9}/lib/inherits/README.md +0 -0
  425. /package/framework/{v0.5.8 → v0.5.9}/lib/inherits/package.json +0 -0
  426. /package/framework/{v0.5.8 → v0.5.9}/lib/inherits/src/main.js +0 -0
  427. /package/framework/{v0.5.8 → v0.5.9}/lib/inspector-events/package.json +0 -0
  428. /package/framework/{v0.5.8 → v0.5.9}/lib/inspector-events/src/main.js +0 -0
  429. /package/framework/{v0.5.8 → v0.5.9}/lib/inspector-redact/package.json +0 -0
  430. /package/framework/{v0.5.8 → v0.5.9}/lib/inspector-redact/src/main.js +0 -0
  431. /package/framework/{v0.5.8 → v0.5.9}/lib/instrument/package.json +0 -0
  432. /package/framework/{v0.5.8 → v0.5.9}/lib/instrument/src/main.js +0 -0
  433. /package/framework/{v0.5.8 → v0.5.9}/lib/job/package.json +0 -0
  434. /package/framework/{v0.5.8 → v0.5.9}/lib/job/src/main.js +0 -0
  435. /package/framework/{v0.5.8 → v0.5.9}/lib/job-store.js +0 -0
  436. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/README.md +0 -0
  437. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/package.json +0 -0
  438. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/default/index.js +0 -0
  439. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/file/index.js +0 -0
  440. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  441. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  442. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/mq/index.js +0 -0
  443. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/mq/listener.js +0 -0
  444. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/mq/speaker.js +0 -0
  445. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/helper.js +0 -0
  446. /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/main.js +0 -0
  447. /package/framework/{v0.5.8 → v0.5.9}/lib/math/index.js +0 -0
  448. /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-dispatch/package.json +0 -0
  449. /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-dispatch/src/main.js +0 -0
  450. /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-http/package.json +0 -0
  451. /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-http/src/main.js +0 -0
  452. /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-server/package.json +0 -0
  453. /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-server/src/main.js +0 -0
  454. /package/framework/{v0.5.8 → v0.5.9}/lib/merge/README.md +0 -0
  455. /package/framework/{v0.5.8 → v0.5.9}/lib/merge/package.json +0 -0
  456. /package/framework/{v0.5.8 → v0.5.9}/lib/merge/src/main.js +0 -0
  457. /package/framework/{v0.5.8 → v0.5.9}/lib/metrics/package.json +0 -0
  458. /package/framework/{v0.5.8 → v0.5.9}/lib/metrics/src/main.js +0 -0
  459. /package/framework/{v0.5.8 → v0.5.9}/lib/model.js +0 -0
  460. /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-filters/README.md +0 -0
  461. /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-filters/package.json +0 -0
  462. /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-filters/src/main.js +0 -0
  463. /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-resolver/package.json +0 -0
  464. /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-resolver/src/main.js +0 -0
  465. /package/framework/{v0.5.8 → v0.5.9}/lib/proc.js +0 -0
  466. /package/framework/{v0.5.8 → v0.5.9}/lib/routing/README.md +0 -0
  467. /package/framework/{v0.5.8 → v0.5.9}/lib/routing/build.json +0 -0
  468. /package/framework/{v0.5.8 → v0.5.9}/lib/routing/package.json +0 -0
  469. /package/framework/{v0.5.8 → v0.5.9}/lib/routing/src/radix.js +0 -0
  470. /package/framework/{v0.5.8 → v0.5.9}/lib/routing-introspect/package.json +0 -0
  471. /package/framework/{v0.5.8 → v0.5.9}/lib/routing-introspect/src/main.js +0 -0
  472. /package/framework/{v0.5.8 → v0.5.9}/lib/secrets/package.json +0 -0
  473. /package/framework/{v0.5.8 → v0.5.9}/lib/secrets/src/backends/env.js +0 -0
  474. /package/framework/{v0.5.8 → v0.5.9}/lib/secrets/src/main.js +0 -0
  475. /package/framework/{v0.5.8 → v0.5.9}/lib/session-store.js +0 -0
  476. /package/framework/{v0.5.8 → v0.5.9}/lib/shell.js +0 -0
  477. /package/framework/{v0.5.8 → v0.5.9}/lib/state.js +0 -0
  478. /package/framework/{v0.5.8 → v0.5.9}/lib/swig-filters/README.md +0 -0
  479. /package/framework/{v0.5.8 → v0.5.9}/lib/swig-filters/package.json +0 -0
  480. /package/framework/{v0.5.8 → v0.5.9}/lib/swig-filters/src/main.js +0 -0
  481. /package/framework/{v0.5.8 → v0.5.9}/lib/swig-resolver/package.json +0 -0
  482. /package/framework/{v0.5.8 → v0.5.9}/lib/swig-resolver/src/main.js +0 -0
  483. /package/framework/{v0.5.8 → v0.5.9}/lib/template-loaders/package.json +0 -0
  484. /package/framework/{v0.5.8 → v0.5.9}/lib/template-loaders/src/loaders/http.js +0 -0
  485. /package/framework/{v0.5.8 → v0.5.9}/lib/template-loaders/src/loaders/memory.js +0 -0
  486. /package/framework/{v0.5.8 → v0.5.9}/lib/template-loaders/src/main.js +0 -0
  487. /package/framework/{v0.5.8 → v0.5.9}/lib/url/README.md +0 -0
  488. /package/framework/{v0.5.8 → v0.5.9}/lib/url/index.js +0 -0
  489. /package/framework/{v0.5.8 → v0.5.9}/lib/url/routing.json +0 -0
  490. /package/framework/{v0.5.8 → v0.5.9}/lib/uuid/package.json +0 -0
  491. /package/framework/{v0.5.8 → v0.5.9}/lib/uuid/src/main.js +0 -0
  492. /package/framework/{v0.5.8 → v0.5.9}/lib/validator.js +0 -0
  493. /package/framework/{v0.5.8 → v0.5.9}/lib/watcher/package.json +0 -0
  494. /package/framework/{v0.5.8 → v0.5.9}/lib/watcher/src/main.js +0 -0
  495. /package/framework/{v0.5.8 → v0.5.9}/lib/ws-framing/package.json +0 -0
  496. /package/framework/{v0.5.8 → v0.5.9}/lib/ws-framing/src/main.js +0 -0
  497. /package/framework/{v0.5.8 → v0.5.9}/lib/ws-query/package.json +0 -0
  498. /package/framework/{v0.5.8 → v0.5.9}/lib/ws-query/src/main.js +0 -0
  499. /package/framework/{v0.5.8 → v0.5.9}/lib/ws-session/package.json +0 -0
  500. /package/framework/{v0.5.8 → v0.5.9}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,14 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.5.9 - 2026-07-04
10
+ ### Fixed
11
+ * Fixed `connector:add`, `connector:rm`, and `connector:migrate --fix` corrupting a `connectors.json` that carries a comment header. The scaffolded bundle template's example block contains a `{` inside a `//` comment, and the write-back split the file at the first raw `{` — which landed inside that comment, commenting out the JSON body's opening brace and dropping the rest of the header, so the file no longer parsed (`connector:list`, `connector:test`, and the bundle's own connector load then failed). The header/body split is now comment-aware and preserves the full comment header verbatim; a comment-free `connectors.json` rewrites byte-for-byte as before.
12
+ * Fixed a reverse-proxy host-context leak on workers that serve a mix of proxied and direct traffic (or several public hostnames): the server-side URL, redirect, and config resolvers (`self.getConfig()`, `self.redirect()`, server-rendered asset host resolution, and the per-request routing clone) now resolve the host of the request in hand rather than the host of the last proxied request the worker happened to serve. A direct or internal request — and concurrent requests to different public hosts on the same worker — no longer inherit a stale proxied host. Requests without a per-request proxy classification (the Express engine, released responses, and WebSocket-query callers) fall back to the previous worker-global behaviour, so nothing changes for single-public-host-per-worker deployments.
13
+ * Fixed a latent `ReferenceError` in server-side URL-property resolution for routes flagged with a redirect control: a leftover debug statement referenced an undefined variable and would throw whenever the redirect route `toUrl()` was resolved server-side. The stray debug statement has been removed.
14
+ ### Security
15
+ * Fixed a browser-side internal-host information disclosure on reverse-proxied deployments. The client gina.config.hostname and the fetched /_gina/assets/routing.json no longer serialize each bundle's internal scheme://host:port to the browser — a proxied client now receives a public host-only origin and a host-stripped routing map, while direct host:port access stays byte-identical. This also fixes cross-bundle client getRoute(...).toUrl(), which previously resolved to the unreachable internal host on such deployments and now resolves same-origin.
16
+
9
17
  ## 0.5.8 - 2026-07-04
10
18
  ### Added
11
19
  * `gina help <group>` now prints help for that command group (e.g. `gina help bundle` shows the bundle command reference), falling back to the top-level help for an unknown group.
package/README.md CHANGED
@@ -42,11 +42,12 @@ open https://localhost:3100
42
42
 
43
43
  > **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
44
44
 
45
- ## What's in 0.5.8
45
+ ## What's in 0.5.9
46
46
 
47
- - **New`gina connector:models`.** List the model catalogue a configured AI connector's provider can serve: `gina connector:models <connector> @<project> [<bundle>]`. It is the read sibling of `connector:test --connect` the same credentialed `models.list()` call, but it returns the model list instead of only a count. Text mode prints one model id per line; `--format=json` emits `{ project, connector, provider, count, models }` with each entry passed through verbatim from the provider (only `id` is guaranteed across providers). Resolves config only and never prints credentials; offline providers such as `ollama://` work with no internet.
48
- - **Newper-group `gina help [<group>]`.** `gina help <group>` (e.g. `gina help framework`) prints just that group's commands, and an unknown action now prints a clean message instead of a raw stack trace.
49
- - **Fixed — reverse-proxy host context no longer freezes (#B65).** For a bundle behind a reverse proxy, the host context derived from a port-less `Host` header or `X-Forwarded-Host` was captured once at the first proxied request and reused for the life of the worker, so later requests and internal cross-bundle calls — could build URLs against a stale host. It is now re-derived per request: single-hop and multi-hop (`X-Forwarded-Host`) deployments resolve the correct host, and a bundle accessed directly on `host:port` (no proxy) is unaffected. No configuration change required.
47
+ - **Securityreverse-proxied deployments no longer disclose a bundle's internal host to the browser (#B66).** The client `gina.config.hostname` and the fetched `/_gina/assets/routing.json` no longer serialize each bundle's internal `scheme://host:port` a proxied client now receives a public host-only origin and a host-stripped routing map, while direct `host:port` access stays byte-identical. This also fixes cross-bundle client `getRoute(...).toUrl()`, which previously resolved to the unreachable internal host on such deployments and now resolves same-origin.
48
+ - **Fixedserver-side proxy host context is request-scoped (#B66).** The server-side URL, redirect, and config resolvers (`self.getConfig()`, `self.redirect()`, server-rendered asset host resolution, and the per-request routing clone) now resolve the host of the request in hand rather than the last proxied host the worker served. A worker that serves a mix of proxied and direct traffic — or several public hostnames — no longer inherits a stale proxied host. Single-public-host-per-worker deployments are unchanged.
49
+ - **Fixed — `connector:add` / `connector:rm` / `connector:migrate --fix` no longer corrupt a comment-headed `connectors.json`.** The header/body split is now comment-aware, so a `connectors.json` that carries a leading comment header (including the scaffolded example block) is preserved verbatim instead of being truncated into an unparseable file. A comment-free `connectors.json` still rewrites byte-for-byte as before.
50
+ - **Fixed — latent `ReferenceError` in server-side URL resolution for redirect routes.** A leftover debug statement referenced an undefined variable and would throw whenever a redirect-flagged route's `toUrl()` was resolved server-side; it has been removed.
50
51
 
51
52
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
52
53
 
package/ROADMAP.md CHANGED
@@ -33,6 +33,7 @@ This roadmap covers planned features, architectural improvements, new connectors
33
33
  | **Q3 2026** | `0.5.6` ✅ | AI-connector CLI suite — `connector:infer` (one-off inference · `--stream` NDJSON · `--raw`) + `connector:test` (CI readiness probe · `--connect` zero-token live check) · AI connector `stream()` + Inspector "AI stream" tab · application events in the Inspector — `self.emitEvent()` + a new "Events" tab, opt-in entity-event & connector-lifecycle bridges · `getModel()` exposes the AI `infer`/`stream` API · fixes: model-init fail-fast · corrupt `projects.json` registration skipped cleanly · DELETE-route regex flags + off-by-one crash · UTF-8 multipart upload filenames · native `<dialog>` popin close cleanup · Couchbase dynamic field-path placeholder · `project:import` additive across release targets · `gina stop` bundles-still-running notice |
34
34
  | **Q3 2026** | `0.5.7` ✅ | Durable async-job stores — `jobs.store` (app.json) → `connectors.json` entry: SQLite (`node:sqlite`, zero new dependencies) · MongoDB (shared mongod, multi-pod) · Redis (`ioredis`, atomic per-state + expiry indexes, Redis Cluster via hash-tagged prefix); restart-durable, cross-process, fail-fast on an unbuildable store · opt-in failed-job retry (`maxAttempts` + exponential backoff; completion webhook fires exactly once) · npm 12 readiness (install + release tooling, `--allow-scripts=gina` guidance) · render-delegate concurrency fixes (production cross-request data bleed / wrong-controller error routing / cached-route 500) · `"connector": "redis"` entry no longer aborts boot · **Security**: static-asset path-traversal fix — resolver paths canonicalised and confined to their `statics.json` mapping target (404 on any escape, `%2F` / `%2e%2e` forms included) |
35
35
  | **Q3 2026** | `0.5.8` ✅ | `connector:models` — list a configured AI connector's provider models (the read sibling of `connector:test --connect`) · per-group `gina help [<group>]` · **Fixed**: reverse-proxy host context request-scoped — `PROXY_HOST` / `PROXY_HOSTNAME` no longer freeze at the first proxied request (single-hop and multi-hop `X-Forwarded-Host` both handled; raw `host:port` unchanged) · CLI help polish (per-group help output, clean message for an unknown action, em-dash flag typos) |
36
+ | **Q3 2026** | `0.5.9` ✅ | **Security**: reverse-proxied deployments no longer disclose a bundle's internal `scheme://host:port` to the browser — the client `gina.config.hostname` and the fetched `/_gina/assets/routing.json` serve a public host-only origin and a host-stripped routing map to proxied clients (direct `host:port` access byte-identical), also fixing cross-bundle client `getRoute(...).toUrl()` which previously resolved to the unreachable internal host (#B66) · **Fixed**: the server-side URL / redirect / config resolvers request-scope the proxy host, so a worker serving mixed proxied + direct traffic (or several public hosts) no longer inherits a stale proxied host (#B66 S2b) · **Fixed**: `connector:add` / `connector:rm` / `connector:migrate --fix` no longer corrupt a comment-headed `connectors.json` · **Fixed**: a latent `ReferenceError` in server-side URL resolution for redirect-flagged routes |
36
37
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
37
38
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
38
39
 
@@ -0,0 +1 @@
1
+ 0.5.9
@@ -5138,7 +5138,6 @@ function Routing() {
5138
5138
  urlProps.hostname = config.envConf[bundle][env].hostname;
5139
5139
  urlProps.host = config.envConf[bundle][env].host;
5140
5140
  urlProps.webroot = config.envConf[bundle][env].server.webroot;
5141
- console.debug("[self.getUrlProps][isProxyHost = "+ getContext('isProxyHost') +"] hostname ", config.envConf[bundle][env].hostname, vs, process.gina.PROXY_HOSTNAME);
5142
5141
  }
5143
5142
 
5144
5143
  return urlProps;
@@ -106,41 +106,41 @@ return u};e.toData=function(){if(k.excluded.length>0)for(var g=0,u=k.excluded.le
106
106
  typeof module!=='undefined'&&module.exports?module.exports=FormValidatorUtil:typeof define==='function'&&define.amd&&define('lib/form-validator',[],function(){return FormValidatorUtil});
107
107
  function Routing(){var n=typeof module!=='undefined'&&module.exports?!1:!0,F={allowedMethods:['get','post','put','delete'],reservedParams:['controle','file','title','namespace','path'],notFound:{},getInstance:function(p){return Routing.instance}};if(typeof Routing.initialized=='undefined')Routing.initialized=!0,Routing.instance=F,Routing._cached=[],Routing._cachedRoutes={},Routing._tries={};else return F=F.getInstance();F.allowedMethodsString=F.allowedMethods.join(',');var I=null,O=null,G=null;n?
108
108
  (O&&typeof O=='function'||(O=require('lib/merge')),G&&typeof G=='function'||(G=require('lib/form-validator'))):(require('fs'),require('util'),require('../../inherits'),O=require('../../merge'),I=require(__dirname+'/../../../core/plugins')||getContext('gina').plugins,G=I.Validator);F.getUrlProps=function(p,k){var e={};if(n){var U=window.gina.config;e.hostname=U.hostname;typeof p!='undefined'&&(p=this.getRoute('webroot@'+p),e.hostname=p.hostname,e.host=p.host,e.webroot=p.webroot)}else U=getContext('gina').config,
109
- typeof getContext('argvFilename')!='undefined'&&(U.getRouting=getContext('gina').Config.instance.getRouting),typeof p=='undefined'&&(p=U.bundle),typeof k=='undefined'&&(k=U.env),e.hostname=U.envConf[p][k].hostname,e.host=U.envConf[p][k].host,e.webroot=U.envConf[p][k].server.webroot,console.debug('[self.getUrlProps][isProxyHost = '+getContext('isProxyHost')+'] hostname ',U.envConf[p][k].hostname,vs,process.gina.PROXY_HOSTNAME);return e};F.cache=function(p,k,e,U,la){Routing._cached.indexOf(p)==-1&&
110
- (Routing._cached.length>=5E3&&F.invalidateCached(Routing._cached[0]),Routing._cached.push(p),Routing._cachedRoutes[p]={name:k,routing:e,params:U,methodParams:la})};F.getCached=function(p,k){if(Routing._cached.indexOf(p)>-1){var e=Routing._cachedRoutes[p],U=k.method.toLowerCase();p=JSON.clone(e.routing);e={method:U,requirements:p.requirements,namespace:p.namespace||void 0,url:safeDecodeURI(k.url),rule:p.originalRule||e.name,param:p.param,middleware:p.middleware,bundle:p.bundle,isXMLRequest:k.isXMLRequest,
111
- isWithCredentials:k.isWithCredentials};typeof p.rule=='undefined'&&typeof e.rule!='undefined'&&(p.rule=e.rule);typeof p.cache!='undefined'&&(e.cache=p.cache);typeof p.csrfExempt!='undefined'&&(e.csrfExempt=p.csrfExempt);typeof p.culturePrefix!='undefined'&&(e.culturePrefix=p.culturePrefix);typeof p.queryTimeout!='undefined'&&(e.queryTimeout=parseTimeout(p.queryTimeout));return F.compareUrls(e,p.url,k)}return null};F.invalidateCached=function(p){Routing._cached.indexOf(p)>-1&&(Routing._cached.splice(Routing._cached.indexOf(p),
112
- 1),delete Routing._cachedRoutes[p])};F.compareUrls=async function(p,k,e,U,la){typeof e=='undefined'&&(e={routing:{}});if(/,/.test(k)){var fa=0;k=k.split(/,/g);for(var x=k.length,v={past:!1,request:e};fa<x&&!v.past;)v=await C(p,k[fa],e,U,la),++fa;return v}return await C(p,k,e,U,la)};var C=async function(p,k,e,U,la){var fa=null;try{fa=p.url.split(/\//)}catch(P){console.warn(P),fa=['']}k=k.split(/\//);var x=0,v=0,Y=k.length,l=0,g={},u=0,J=e.method.toLowerCase(),N='get';try{N=p.method.toLowerCase()}catch(P){}var q=
113
- !1;if(typeof p.requirements!='undefined'&&/get|delete/i.test(J)&&typeof e[J]!='undefined'||typeof p.requirements!='undefined'&&/get/i.test(J)&&/delete/i.test(N)){/get/i.test(J)&&/delete/i.test(N)&&(J=N);if(/^(delete)$/i.test(J)&&fa.length===k.length){typeof e[J]=='undefined'&&(e[J]={});for(let P=0,ha=k.length;P<ha;P++){if(fa[P]===k[P]){++l;continue}N=k[P].substring(1);if(typeof p.requirements[N]=='undefined')continue;N=p.requirements[N];q='';if(/^\//.test(N))q=N.substring(N.lastIndexOf('/')+1),N=
114
- N.substring(1,N.lastIndexOf('/'));else if(/^validator::/.test(N)&&await X(k[P],fa[P],p,e,U,la)){++l;continue}/^:/.test(k[P])&&typeof N!='undefined'&&(new RegExp(N,q)).test(fa[P])&&(++l,e[J][k[P].substring(1)]=fa[P])}q=!0}for(var z in e[J])typeof p.requirements[z]!='undefined'&&k.indexOf(':'+z)<0&&(k[v]=':'+z,++v,fa[x]=e[J][z],++x,q||fa.length!==k.length||++Y)}if(!q&&fa.length===k.length)for(;u<Y;++u)fa[u]===k[u]?++l:l==u&&/:/.test(k[u])&&await X(k[u],fa[u],p,e,U,la)&&++l;if(typeof p.requirements!=
115
- 'undefined'&&J==p.method.toLowerCase()&&!q&&l>=Y)for(z=Object.getOwnPropertyNames(p.requirements),x=0,k.join(',').match(/:[-_a-z0-9]+/g);x<z.length;){v=z[x];if(typeof p.param[v]=='undefined'&&/^validator::/i.test(p.requirements[v])){if(k.length!=fa.length)break;var M=k.join(',').match(/:[-_a-z0-9]+/g);let P=p.requirements[v];u={};N={};q={};try{N=JSON.parse(P.split(/::/).splice(1)[0].replace(/([^:"\s+](\w+)):/g,'"$1":').replace(/([^:"\s+](\w+))\s+:/g,'"$1":'))}catch(ha){throw ha;}if(typeof N.query!=
116
- 'undefined'&&typeof N.query.data!='undefined'){u=N.query.data;for(let ha in u)M.indexOf(u[ha])<0&&delete u[ha];for(let ha=0,ma=k.length;ha<ma;ha++){if(!/^:/.test(k[ha]))continue;M=k[ha].replace(/^:/,'');M!=''&&typeof fa[ha]!='undefined'&&(u[M]=fa[ha],typeof e.params[M]=='undefined'&&(e.params[M]=fa[ha]))}}u=O(u,JSON.clone(e[J])||{});typeof u[v]=='undefined'&&(u[v]=null);q[v]=N;_validator=n?new G(u):new G('routing',u,null,q);if(N.count()==0){console.error('Route validation failed '+p.rule);--l;x++;
117
- continue}for(let ha in N)if(typeof N[ha].data!='undefined'&&(N[ha].data=u),q=Array.isArray(N[ha])?await _validator[v][ha].apply(_validator[v],N[ha]):await _validator[v][ha](N[ha],e,U,la),!q.isValid&&(--l,typeof q.error!='undefined'))throw q.error;}x++}g.past=l===Y?!0:!1;g.past&&(e.routing=Z(p,e[J]),g.request=e);return g},X=async function(p,k,e,U,la,fa){var x=-1,v=p.match(/:\w+/g);x=new RegExp(p,'g');var Y=null,l=null,g=null;Y=!1;var u=Y=l=l=null,J=null,N=U.method.toLowerCase();if(!v.length)return!1;
118
- e.param.path&&x.test(e.param.path)&&(e.param.path=e.param.path.replace(x,k));e.param.namespace&&x.test(e.param.namespace)&&(e.param.namespace=e.param.namespace.replace(x,k));typeof e.param.file!='undefined'&&/:/.test(e.param.file)&&(Y=new RegExp('(:'+p+'/|:'+p+'$)','g'),E.variable=k,e.param.file=e.param.file.replace(Y,E),Y=null);e.param.title&&x.test(e.param.title)&&(e.param.title=e.param.title.replace(x,k));if(v.length==1){Y=new RegExp(v[0]);x=v.indexOf(p)>-1?v.indexOf(p):!1;x===!1&&p.match(Y)&&
119
- (x=0);if(x===!1)return x;if(e.method.toLowerCase()!==N)return!1;typeof U[N]=='undefined'&&(U[N]={});g=v[x].substring(1);if(typeof e.requirements=='undefined'||typeof e.requirements[g]=='undefined')return typeof e.param[g]!='undefined'&&typeof U.params!='undefined'&&k?(U.params[g]=k,typeof U[N][g]=='undefined'&&(U[N][g]=k),!0):!1;x=e.requirements[g];if(/^\//.test(x))Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k);else if(/^validator::/.test(x)&&k){l={};Y={};u={};J=
120
- '';p.replace(new RegExp('[^'+g+']','g'),function(){J+=arguments[0]});l[g]=k.replace(new RegExp(J,'g'),'');try{Y=JSON.parse(x.split(/::/).splice(1)[0].replace(/([^:"\s+](\w+)):/g,'"$1":').replace(/([^:"\s+](\w+))\s+:/g,'"$1":'))}catch(ha){throw ha;}typeof Y.query!='undefined'&&typeof Y.query.data!='undefined'&&p==Y.query.data[Object.keys(Y.query.data)[0]]&&(Y.query.data[Object.keys(Y.query.data)[0]]=l[g],U.params[g]=l[g]);u[g]=Y;l=new G('routing',l,null,u);if(Y.count()==0)return console.error('Route validation failed '+
121
- e.rule),!1;for(var q in Y)Array.isArray(Y[q])?await l[g][q].apply(l[g],Y[q]):await l[g][q](Y[q],U,la,fa);Y=l.isValid()}else Y=(new RegExp(e.requirements[g])).test(k);if(typeof e.param[g]!='undefined'&&typeof e.requirements!='undefined'&&typeof e.requirements[g]!='undefined'&&typeof U.params!='undefined'&&Y){U.params[g]=k;if(typeof U[N][g]=='undefined'){switch(k){case 'null':k=null;break;case 'false':k=!1;break;case 'true':k=!0}U[N][g]=k}return!0}}else{if(typeof e.requirements=='undefined')return!1;
122
- la=e.url;fa=U.url;N={};u='';var z=!1,M=0;q=0;for(var P=fa.length;q<P;++q)if(fa.charAt(q)!=la.charAt(M)||z){if(u=='')z=!0,u+=fa.charAt(q);else if(q>la.indexOf(v[0])+v[0].length){x=e.requirements[v[0]];k=u.substring(0,u.length);if(/^\//.test(x))Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k);else if(/^validator::/.test(x)){l={};Y={};u={};J='';p.replace(new RegExp('[^'+g[0]+']','g'),function(){J+=arguments[0]});l[g[0]]=k.replace(new RegExp(J,'g'),'');Y=JSON.parse(x.split(/::/).splice(1)[0].replace(/([^\W+ true false])+(\w+)/g,
123
- '"$&"'));u[g[0]]=Y;l=new G('routing',l,null,u);for(let ha in Y)if(Array.isArray(Y[ha]))l[g[0]][ha].apply(l[g[0]],Y[ha]);else l[g[0]][ha](Y[ha]);Y=l.isValid()}else Y=(new RegExp(e.requirements[g[0]])).test(k);if(Y)N[v[0].substring(1)]=k;else return!1;u='';z=!1;M=la.indexOf(v[0])+v[0].length;--q;v.splice(0,1)}else u+=fa.charAt(q),++M;if(q==P-1)if(x=e.requirements[v[0]],k=u.substring(0,u.length),/^\//.test(x)?(Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k)):Y=(new RegExp(e.requirements[g])).test(k),
124
- Y)N[v[0].substring(1)]=k;else return!1}else++M;if(N.count()==v.length){g=null;for(g in N){switch(N[g]){case 'null':N[g]=null;break;case 'false':N[g]=!1;break;case 'true':N[g]=!0}U.params[g]=N[g]}return!0}}return!1},E=function(p){return/\/$/.test(p)?E.variable+'/':E.variable},Z=function(p,k){var e=null,U,la=p.url,fa=null;for(fa in p.param)if((typeof k=='undefined'||typeof k[fa]!='undefined')&&/^:/.test(p.param[fa])){var x=p.param[fa].substring(1);if(typeof k!='undefined'&&typeof k[x]!='undefined'){var v=
125
- new RegExp('(:'+x+'/|:'+x+'$)','g');typeof p.param.path!='undefined'&&/:/.test(p.param.path)&&(p.param.path=p.param.path.replace(v,k[x]));typeof p.param.title!='undefined'&&/:/.test(p.param.title)&&(p.param.title=p.param.title.replace(v,k[x]));typeof p.param.namespace!='undefined'&&/:/.test(p.param.namespace)&&(p.param.namespace=p.param.namespace.replace(v,k[x]));typeof p.param.file!='undefined'&&/:/.test(p.param.file)&&(E.variable=k[x],p.param.file=p.param.file.replace(v,E));if(/,/.test(p.url)){e=
126
- p.url.split(/,/g);var Y=0;for(U=e.length;Y<U;++Y)E.variable=k[x],e[Y]=e[Y].replace(v,E);p.url=e.join(',')}else E.variable=k[x],p.url=p.url.replace(v,E)}}if(e){Y=0;U=e.length;la=la.split(/,/g);var l=0;for(p.urlIndex=0;Y<U;++Y)if(e=0,v=la[0].match(/:[-_a-z0-9]+/ig)){fa=0;for(x=v.length;fa<x;fa++){var g=v[fa].substring(1);typeof k[g]!='undefined'&&k[g]&&e++}e>l&&(l=e,p.urlIndex=Y)}}return p};F.getRoute=function(p,k,e){var U=null,la=!1;n?(window.location.port||window.location.hostname!=window.gina.config.hostname.replace(/^(https|http|wss|ws):\/\//,
127
- '').replace(/:\d+$/,'')||(la=!0,window.gina.config.hostname=window.gina.config.hostname.replace(/^(https|http|wss|ws):\/\//,'').replace(/:\d+$/,'')),U=window.gina.config):(U=getContext('gina').config,typeof getContext('argvFilename')!='undefined'&&(U.getRouting=getContext('gina').Config.instance.getRouting),la=getContext('isProxyHost'));var fa=U.env||GINA_ENV,x=null,v=U.bundle;/@/.test(p)||typeof v=='undefined'||v==null||(p=p.toLowerCase(),p+='@'+v);if(/@/.test(p)){var Y=p.replace(/(.*):\/\//,'').split(/@/);
128
- v=Y[1];/\/(.*)$/.test(p)&&(x=p.replace(/(.*):\/\//,'').split(/\/(.*)$/)[1],v=v.replace(/\/(.*)$/,''),fa=x||fa);p=Y[0].toLowerCase()+'@'+v}v=U.getRouting(v,fa);if(typeof v[p]=='undefined')throw Error('[ RoutingHelper::getRouting(rule, params) ] : `'+p+'` not found !');x=JSON.clone(v[p]);Y=null;x=Z(x,k);(x.isProxyHost=la)?(x.proxy_hostname=n?window.location.protocol+'//'+document.location.hostname:process.gina.PROXY_HOSTNAME||U.envConf._proxyHostname,x.proxy_host=x.proxy_hostname.replace(/^(https|http):\/\//,
129
- '')):n||typeof process.gina.PROXY_HOSTNAME=='undefined'||(x.proxy_hostname=process.gina.PROXY_HOSTNAME,x.proxy_host=x.proxy_hostname.replace(/^(https|http):\/\//,''),console.debug('[getRoute#2]['+la+'] process.gina.PROXY_HOSTNAME ('+process.gina.PROXY_HOSTNAME+') VS config.envConf._proxyHostname ('+U.envConf._proxyHostname+')'));/,/.test(x.url)&&(typeof x.urlIndex!='undefined'&&(e=x.urlIndex,delete x.urlIndex),e=typeof e!='undefined'?e:0,x.url=x.url.split(/,/g)[e]);/\/$/.test(x.url)&&x.url!='/'&&
130
- (x.url=x.url.substring(0,x.url.length-1));if(/GET/i.test(x.method)&&typeof k!='undefined'){e='?';U=v[p].url;la=[];v=0;for(let l in x.param)F.reservedParams.indexOf(l)>-1||(new RegExp(x.param[l])).test(U)||typeof k[l]=='undefined'||(e+=l+'='+encodeRFC5987ValueChars(k[l])+'&',la[v]=k[l],++v);for(let l in k)F.reservedParams.indexOf(l)>-1||typeof x.requirements[l]!='undefined'||la.indexOf(l)>-1||(e=typeof k[l]=='object'?e+(l+'='+encodeRFC5987ValueChars(JSON.stringify(k[l]))+'&'):e+(l+'='+k[l]+'&'));v=
131
- la=U=null;e.length>1&&(e=e.substring(0,e.length-1),x.url+=e);e=null}x.toUrl=function(l){var g=null;/^redirect$/i.test(this.param.control)&&(g=F.getUrlProps(this.bundle,fa||GINA_ENV));var u=this.webroot||g.webroot;g=''+this.hostname||''+g.hostname;var J=''+this.url;this.isProxyHost&&(g=''+this.proxy_hostname);this.url=typeof l!='undefined'&&/^true$/i.test(l)?J.replace(new RegExp('^'+u),'/'):J.replace(new RegExp('^('+u+'|/$)'),u);return g+this.url};x.request=function(l,g){var u=null,J=null;typeof arguments[arguments.length-
132
- 1]=='function'&&(u=arguments[arguments.length-1]);typeof arguments[2]=='object'&&(J=arguments[2]);var N=this.webroot||J.webroot,q=this.hostname||J.hostname;J=typeof l!='undefined'&&l==1?path.replace(N,'/'):this.url||J.url;/^\//.test(J)&&(J=q+J);q=/^https/.test(q)?'https':'http';n?window.open(J,typeof g!='undefined'&&typeof g.target!='undefined'?g.target:'_self'):(typeof g.agent=='undefined'&&(g.agent=!1),q=require(''+q),N=function(z){var M='',P=!1;z.on('data',function(ha){M+=ha});z.on('error',function(ha){P=
133
- 'Failed to get mail content';ha&&typeof ha.stack!='undefined'?P+=ha.stack:typeof ha=='string'&&(P+='\n'+ha)});z.on('end',function(){if(/^\{/.test(M))try{M=JSON.parse(M),typeof M.error!='undefined'&&(P=JSON.clone(M),M=null)}catch(ha){P=ha}P?u(P):u(!1,M)})},u?q.get(J,g,N):q.get(J,g))};!/:/.test(x.url)||/:d+\//.test(x.url)||/:\/\//.test(x.url)||(k=x.url.match(/(:(.*)\/|:(.*)$)/g).map(function(l){return l.replace(/\//g,'')}).join(', '),Y='[ RoutingHelper::getRoute(rule[, bundle, method]) ] : route [ %r ] param placeholder not defined: `'+
134
- x.url+'` !\n Check your route description to compare requirements against param variables [ '+k+']',Y=Y.replace(/%r/,p),p=Error(Y),console.warn(p),Y=p=k=null);return x};F.getRouteByUrl=function(p,k,e,U,la){arguments.length==2&&typeof arguments[1]!='undefined'&&arguments[1]&&F.allowedMethods.indexOf(arguments[1].toLowerCase())>-1&&(e=arguments[1],k=void 0);var fa=null,x=null,v=null,Y=null,l=null,g=null;if(/#/.test(p)&&p.length>1){var u=p.split(/#/);p=u[0];l='#'+u[1];u=null}arguments.length==1&&typeof arguments[0]!=
135
- 'undefined'&&(/^(https|http)/i.test(p)||/^\//.test(p)||(p='/'+p),fa='/'+p.split(/\//g)[1],n&&(Y=gina.config.reverseRouting,v=gina.config.routing),typeof Y[fa]!='undefined'&&(u=v[Y[fa]],k=u.bundle,fa=u.webroot,g=u.hostname,u=null));la=typeof arguments[arguments.length-1]!='boolean'?!1:arguments[arguments.length-1];var J=!1,N=null,q=Y=N=Y=null;u=typeof e!='undefined'?!0:!1;n?(N=window.gina.config,k=typeof k!='undefined'?k:N.bundle,Y=N.env,v=N.routing||N.getRouting(k),Y=N.reverseRouting,isXMLRequest=
136
- typeof isXMLRequest!='undefined'?isXMLRequest:!1,g=g||N.hostname,fa=fa||N.webroot,U={routing:{},method:e,params:{},url:p},k&&(U.bundle=k)):(N=getContext('gina').config,k=typeof k!='undefined'?k:N.bundle,Y=N.env,v=N.getRouting(k),g=N.envConf[k][Y].hostname,fa=N.envConf[k][Y].server.webroot,U||={routing:{},isXMLRequest:!1,method:typeof e!='undefined'?e.toLowerCase():'get',params:{},url:p},la&&(U.method=e),isXMLRequest=U.isXMLRequest||!1);N=p.replace(new RegExp('^('+g+'|'+g.replace(/:\d+/,'')+')'),'');
137
- typeof U.routing.path=='undefined'&&(U.routing.path=safeDecodeURI(N));e=typeof e!='undefined'?e.toLowerCase():'get';u&&(U.originalMethod=U.method,U.method=e,U.routing.path=safeDecodeURI(N));U.method||(U.method=e);Y={};fa=new RegExp(e,'i');g=null;for(z in v){if(typeof v[z].param=='undefined')break;if(v[z].bundle==k&&(g=v[z].method,/,/.test(g)&&fa.test(g)&&(g=U.method),typeof v[z].method=='undefined'||fa.test(g))){Y={method:g,requirements:v[z].requirements,namespace:v[z].namespace||void 0,url:safeDecodeURI(N),
138
- rule:v[z].originalRule||z,param:JSON.clone(v[z].param),middleware:JSON.clone(v[z].middleware),bundle:v[z].bundle,isXMLRequest};try{if(q=F.compareUrls(Y,v[z].url,U),q.past){x=JSON.clone(v[z]);x.name=z;x.param=Y.param;J=!0;q={};break}}catch(M){throw Error('Route [ '+z+' ] needs your attention.\n'+M.stack);}}}if(J)return/\/$/.test(p)&&p!='/'&&(p=p.substring(0,p.length-1)),l&&(p+=l),x.url=p,x.toUrl=function(M){var P=this.webroot,ha=this.hostname,ma=this.url;this.url=typeof M!='undefined'&&M==1?ma.replace(P,
139
- '/'):ma;return ha+this.url},x;if(n){var z=!1;if(p=='#'&&/GET/i.test(e)&&u||/^404:/.test(p))p=location.pathname,z=!0;typeof F.notFound=='undefined'&&(F.notFound={});l=null;x='[ RoutingHelper::getRouteByUrl(rule[, bundle, method]) ] : route [ %r ] is called but not found inside your view: `'+p+'` !';if((l=(l=gina.hasPopinHandler&&gina.popinIsBinded?gina.popin.getActivePopin().target.innerHTML.match(/404:\[\w+\][a-z 0-9-_@]+/):document.body.innerHTML.match(/404:\[\w+\][a-z 0-9-_@]+/))&&l.length>0?l[0]:
140
- null)&&u&&z)return z=l.match(/\[\w+\]/)[0],l=l.replace('404:'+z,z.replace(/\[|\]/g,'')+'::'),x=x.replace(/%r/,l.replace(/404:\s+/,'')),typeof F.notFound[l]=='undefined'?F.notFound[l]={count:1,message:x}:u&&typeof F.notFound[l]!='undefined'&&++F.notFound[l].count,!1;if((z=gina.config.reverseRouting[p]||null)&&typeof z!='undefined'&&z.split(/@(.+)$/)[1]==k)return l=z,typeof F.notFound[l]=='undefined'?(x=x.replace(/%r/,e.toUpperCase()+'::'+z),F.notFound[l]={count:1,message:x}):u&&typeof F.notFound[l]!=
141
- 'undefined'&&++F.notFound[l].count,!1;l=F.compareUrls(Y,p,U)||null;l.past&&u&&(l=e.toUpperCase()+'::'+l.request.routing.rule,typeof F.notFound[l]=='undefined'?x=x.replace(/%r/,l):++F.notFound[l].count);return!1}console.warn(Error('[ RoutingHelper::getRouteByUrl(rule[, bundle, method, request]) ] : route not found for url: `'+p+'` !').stack);return!1};F.buildTrie=function(p,k){if(!n){var e=require('./radix'),U=e.createNode(),la;for(la in p){var fa=p[la];if(fa&&typeof fa==='object'&&fa.bundle===k){fa=
142
- Array.isArray(fa.url)?fa.url:String(fa.url).split(',');for(var x=0;x<fa.length;x++){var v=fa[x].trim();v&&e.insert(U,v,la)}}}Routing._tries[k]=U}};F.lookupTrie=function(p,k){return Routing._tries&&Routing._tries[k]?require('./radix').lookup(Routing._tries[k],p):null};return F}
143
- typeof module!=='undefined'&&module.exports?(typeof console.err=='undefined'&&(console=require('../../logger')),module.exports=Routing()):typeof define==='function'&&define.amd&&define('lib/routing',['require','lib/form-validator','lib/merge'],function(){return Routing()});function registerEvents(n,F){typeof gina=='undefined'&&typeof window.gina!='undefined'&&(gina=window.gina);gina.registeredEvents[n]=F}function mergeEventProps(n,F){for(let I in F)typeof n[I]=='undefined'&&(n[I]=F[I]);return n}
109
+ typeof getContext('argvFilename')!='undefined'&&(U.getRouting=getContext('gina').Config.instance.getRouting),typeof p=='undefined'&&(p=U.bundle),typeof k=='undefined'&&(k=U.env),e.hostname=U.envConf[p][k].hostname,e.host=U.envConf[p][k].host,e.webroot=U.envConf[p][k].server.webroot;return e};F.cache=function(p,k,e,U,la){Routing._cached.indexOf(p)==-1&&(Routing._cached.length>=5E3&&F.invalidateCached(Routing._cached[0]),Routing._cached.push(p),Routing._cachedRoutes[p]={name:k,routing:e,params:U,methodParams:la})};
110
+ F.getCached=function(p,k){if(Routing._cached.indexOf(p)>-1){var e=Routing._cachedRoutes[p],U=k.method.toLowerCase();p=JSON.clone(e.routing);e={method:U,requirements:p.requirements,namespace:p.namespace||void 0,url:safeDecodeURI(k.url),rule:p.originalRule||e.name,param:p.param,middleware:p.middleware,bundle:p.bundle,isXMLRequest:k.isXMLRequest,isWithCredentials:k.isWithCredentials};typeof p.rule=='undefined'&&typeof e.rule!='undefined'&&(p.rule=e.rule);typeof p.cache!='undefined'&&(e.cache=p.cache);
111
+ typeof p.csrfExempt!='undefined'&&(e.csrfExempt=p.csrfExempt);typeof p.culturePrefix!='undefined'&&(e.culturePrefix=p.culturePrefix);typeof p.queryTimeout!='undefined'&&(e.queryTimeout=parseTimeout(p.queryTimeout));return F.compareUrls(e,p.url,k)}return null};F.invalidateCached=function(p){Routing._cached.indexOf(p)>-1&&(Routing._cached.splice(Routing._cached.indexOf(p),1),delete Routing._cachedRoutes[p])};F.compareUrls=async function(p,k,e,U,la){typeof e=='undefined'&&(e={routing:{}});if(/,/.test(k)){var fa=
112
+ 0;k=k.split(/,/g);for(var x=k.length,v={past:!1,request:e};fa<x&&!v.past;)v=await C(p,k[fa],e,U,la),++fa;return v}return await C(p,k,e,U,la)};var C=async function(p,k,e,U,la){var fa=null;try{fa=p.url.split(/\//)}catch(P){console.warn(P),fa=['']}k=k.split(/\//);var x=0,v=0,Y=k.length,l=0,g={},u=0,J=e.method.toLowerCase(),N='get';try{N=p.method.toLowerCase()}catch(P){}var q=!1;if(typeof p.requirements!='undefined'&&/get|delete/i.test(J)&&typeof e[J]!='undefined'||typeof p.requirements!='undefined'&&
113
+ /get/i.test(J)&&/delete/i.test(N)){/get/i.test(J)&&/delete/i.test(N)&&(J=N);if(/^(delete)$/i.test(J)&&fa.length===k.length){typeof e[J]=='undefined'&&(e[J]={});for(let P=0,ha=k.length;P<ha;P++){if(fa[P]===k[P]){++l;continue}N=k[P].substring(1);if(typeof p.requirements[N]=='undefined')continue;N=p.requirements[N];q='';if(/^\//.test(N))q=N.substring(N.lastIndexOf('/')+1),N=N.substring(1,N.lastIndexOf('/'));else if(/^validator::/.test(N)&&await X(k[P],fa[P],p,e,U,la)){++l;continue}/^:/.test(k[P])&&typeof N!=
114
+ 'undefined'&&(new RegExp(N,q)).test(fa[P])&&(++l,e[J][k[P].substring(1)]=fa[P])}q=!0}for(var z in e[J])typeof p.requirements[z]!='undefined'&&k.indexOf(':'+z)<0&&(k[v]=':'+z,++v,fa[x]=e[J][z],++x,q||fa.length!==k.length||++Y)}if(!q&&fa.length===k.length)for(;u<Y;++u)fa[u]===k[u]?++l:l==u&&/:/.test(k[u])&&await X(k[u],fa[u],p,e,U,la)&&++l;if(typeof p.requirements!='undefined'&&J==p.method.toLowerCase()&&!q&&l>=Y)for(z=Object.getOwnPropertyNames(p.requirements),x=0,k.join(',').match(/:[-_a-z0-9]+/g);x<
115
+ z.length;){v=z[x];if(typeof p.param[v]=='undefined'&&/^validator::/i.test(p.requirements[v])){if(k.length!=fa.length)break;var M=k.join(',').match(/:[-_a-z0-9]+/g);let P=p.requirements[v];u={};N={};q={};try{N=JSON.parse(P.split(/::/).splice(1)[0].replace(/([^:"\s+](\w+)):/g,'"$1":').replace(/([^:"\s+](\w+))\s+:/g,'"$1":'))}catch(ha){throw ha;}if(typeof N.query!='undefined'&&typeof N.query.data!='undefined'){u=N.query.data;for(let ha in u)M.indexOf(u[ha])<0&&delete u[ha];for(let ha=0,ma=k.length;ha<
116
+ ma;ha++){if(!/^:/.test(k[ha]))continue;M=k[ha].replace(/^:/,'');M!=''&&typeof fa[ha]!='undefined'&&(u[M]=fa[ha],typeof e.params[M]=='undefined'&&(e.params[M]=fa[ha]))}}u=O(u,JSON.clone(e[J])||{});typeof u[v]=='undefined'&&(u[v]=null);q[v]=N;_validator=n?new G(u):new G('routing',u,null,q);if(N.count()==0){console.error('Route validation failed '+p.rule);--l;x++;continue}for(let ha in N)if(typeof N[ha].data!='undefined'&&(N[ha].data=u),q=Array.isArray(N[ha])?await _validator[v][ha].apply(_validator[v],
117
+ N[ha]):await _validator[v][ha](N[ha],e,U,la),!q.isValid&&(--l,typeof q.error!='undefined'))throw q.error;}x++}g.past=l===Y?!0:!1;g.past&&(e.routing=Z(p,e[J]),g.request=e);return g},X=async function(p,k,e,U,la,fa){var x=-1,v=p.match(/:\w+/g);x=new RegExp(p,'g');var Y=null,l=null,g=null;Y=!1;var u=Y=l=l=null,J=null,N=U.method.toLowerCase();if(!v.length)return!1;e.param.path&&x.test(e.param.path)&&(e.param.path=e.param.path.replace(x,k));e.param.namespace&&x.test(e.param.namespace)&&(e.param.namespace=
118
+ e.param.namespace.replace(x,k));typeof e.param.file!='undefined'&&/:/.test(e.param.file)&&(Y=new RegExp('(:'+p+'/|:'+p+'$)','g'),E.variable=k,e.param.file=e.param.file.replace(Y,E),Y=null);e.param.title&&x.test(e.param.title)&&(e.param.title=e.param.title.replace(x,k));if(v.length==1){Y=new RegExp(v[0]);x=v.indexOf(p)>-1?v.indexOf(p):!1;x===!1&&p.match(Y)&&(x=0);if(x===!1)return x;if(e.method.toLowerCase()!==N)return!1;typeof U[N]=='undefined'&&(U[N]={});g=v[x].substring(1);if(typeof e.requirements==
119
+ 'undefined'||typeof e.requirements[g]=='undefined')return typeof e.param[g]!='undefined'&&typeof U.params!='undefined'&&k?(U.params[g]=k,typeof U[N][g]=='undefined'&&(U[N][g]=k),!0):!1;x=e.requirements[g];if(/^\//.test(x))Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k);else if(/^validator::/.test(x)&&k){l={};Y={};u={};J='';p.replace(new RegExp('[^'+g+']','g'),function(){J+=arguments[0]});l[g]=k.replace(new RegExp(J,'g'),'');try{Y=JSON.parse(x.split(/::/).splice(1)[0].replace(/([^:"\s+](\w+)):/g,
120
+ '"$1":').replace(/([^:"\s+](\w+))\s+:/g,'"$1":'))}catch(ha){throw ha;}typeof Y.query!='undefined'&&typeof Y.query.data!='undefined'&&p==Y.query.data[Object.keys(Y.query.data)[0]]&&(Y.query.data[Object.keys(Y.query.data)[0]]=l[g],U.params[g]=l[g]);u[g]=Y;l=new G('routing',l,null,u);if(Y.count()==0)return console.error('Route validation failed '+e.rule),!1;for(var q in Y)Array.isArray(Y[q])?await l[g][q].apply(l[g],Y[q]):await l[g][q](Y[q],U,la,fa);Y=l.isValid()}else Y=(new RegExp(e.requirements[g])).test(k);
121
+ if(typeof e.param[g]!='undefined'&&typeof e.requirements!='undefined'&&typeof e.requirements[g]!='undefined'&&typeof U.params!='undefined'&&Y){U.params[g]=k;if(typeof U[N][g]=='undefined'){switch(k){case 'null':k=null;break;case 'false':k=!1;break;case 'true':k=!0}U[N][g]=k}return!0}}else{if(typeof e.requirements=='undefined')return!1;la=e.url;fa=U.url;N={};u='';var z=!1,M=0;q=0;for(var P=fa.length;q<P;++q)if(fa.charAt(q)!=la.charAt(M)||z){if(u=='')z=!0,u+=fa.charAt(q);else if(q>la.indexOf(v[0])+
122
+ v[0].length){x=e.requirements[v[0]];k=u.substring(0,u.length);if(/^\//.test(x))Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k);else if(/^validator::/.test(x)){l={};Y={};u={};J='';p.replace(new RegExp('[^'+g[0]+']','g'),function(){J+=arguments[0]});l[g[0]]=k.replace(new RegExp(J,'g'),'');Y=JSON.parse(x.split(/::/).splice(1)[0].replace(/([^\W+ true false])+(\w+)/g,'"$&"'));u[g[0]]=Y;l=new G('routing',l,null,u);for(let ha in Y)if(Array.isArray(Y[ha]))l[g[0]][ha].apply(l[g[0]],
123
+ Y[ha]);else l[g[0]][ha](Y[ha]);Y=l.isValid()}else Y=(new RegExp(e.requirements[g[0]])).test(k);if(Y)N[v[0].substring(1)]=k;else return!1;u='';z=!1;M=la.indexOf(v[0])+v[0].length;--q;v.splice(0,1)}else u+=fa.charAt(q),++M;if(q==P-1)if(x=e.requirements[v[0]],k=u.substring(0,u.length),/^\//.test(x)?(Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k)):Y=(new RegExp(e.requirements[g])).test(k),Y)N[v[0].substring(1)]=k;else return!1}else++M;if(N.count()==v.length){g=null;
124
+ for(g in N){switch(N[g]){case 'null':N[g]=null;break;case 'false':N[g]=!1;break;case 'true':N[g]=!0}U.params[g]=N[g]}return!0}}return!1},E=function(p){return/\/$/.test(p)?E.variable+'/':E.variable},Z=function(p,k){var e=null,U,la=p.url,fa=null;for(fa in p.param)if((typeof k=='undefined'||typeof k[fa]!='undefined')&&/^:/.test(p.param[fa])){var x=p.param[fa].substring(1);if(typeof k!='undefined'&&typeof k[x]!='undefined'){var v=new RegExp('(:'+x+'/|:'+x+'$)','g');typeof p.param.path!='undefined'&&/:/.test(p.param.path)&&
125
+ (p.param.path=p.param.path.replace(v,k[x]));typeof p.param.title!='undefined'&&/:/.test(p.param.title)&&(p.param.title=p.param.title.replace(v,k[x]));typeof p.param.namespace!='undefined'&&/:/.test(p.param.namespace)&&(p.param.namespace=p.param.namespace.replace(v,k[x]));typeof p.param.file!='undefined'&&/:/.test(p.param.file)&&(E.variable=k[x],p.param.file=p.param.file.replace(v,E));if(/,/.test(p.url)){e=p.url.split(/,/g);var Y=0;for(U=e.length;Y<U;++Y)E.variable=k[x],e[Y]=e[Y].replace(v,E);p.url=
126
+ e.join(',')}else E.variable=k[x],p.url=p.url.replace(v,E)}}if(e){Y=0;U=e.length;la=la.split(/,/g);var l=0;for(p.urlIndex=0;Y<U;++Y)if(e=0,v=la[0].match(/:[-_a-z0-9]+/ig)){fa=0;for(x=v.length;fa<x;fa++){var g=v[fa].substring(1);typeof k[g]!='undefined'&&k[g]&&e++}e>l&&(l=e,p.urlIndex=Y)}}return p};F.getRoute=function(p,k,e){var U=null,la=!1;n?(window.location.port||window.location.hostname!=window.gina.config.hostname.replace(/^(https|http|wss|ws):\/\//,'').replace(/:\d+$/,'')||(la=!0,window.gina.config.hostname=
127
+ window.gina.config.hostname.replace(/^(https|http|wss|ws):\/\//,'').replace(/:\d+$/,'')),U=window.gina.config):(U=getContext('gina').config,typeof getContext('argvFilename')!='undefined'&&(U.getRouting=getContext('gina').Config.instance.getRouting),la=getContext('isProxyHost'));var fa=U.env||GINA_ENV,x=null,v=U.bundle;/@/.test(p)||typeof v=='undefined'||v==null||(p=p.toLowerCase(),p+='@'+v);if(/@/.test(p)){var Y=p.replace(/(.*):\/\//,'').split(/@/);v=Y[1];/\/(.*)$/.test(p)&&(x=p.replace(/(.*):\/\//,
128
+ '').split(/\/(.*)$/)[1],v=v.replace(/\/(.*)$/,''),fa=x||fa);p=Y[0].toLowerCase()+'@'+v}v=U.getRouting(v,fa);if(typeof v[p]=='undefined')throw Error('[ RoutingHelper::getRouting(rule, params) ] : `'+p+'` not found !');x=JSON.clone(v[p]);Y=null;x=Z(x,k);(x.isProxyHost=la)?(x.proxy_hostname=n?window.location.protocol+'//'+document.location.hostname:process.gina.PROXY_HOSTNAME||U.envConf._proxyHostname,x.proxy_host=x.proxy_hostname.replace(/^(https|http):\/\//,'')):n||typeof process.gina.PROXY_HOSTNAME==
129
+ 'undefined'||(x.proxy_hostname=process.gina.PROXY_HOSTNAME,x.proxy_host=x.proxy_hostname.replace(/^(https|http):\/\//,''),console.debug('[getRoute#2]['+la+'] process.gina.PROXY_HOSTNAME ('+process.gina.PROXY_HOSTNAME+') VS config.envConf._proxyHostname ('+U.envConf._proxyHostname+')'));/,/.test(x.url)&&(typeof x.urlIndex!='undefined'&&(e=x.urlIndex,delete x.urlIndex),e=typeof e!='undefined'?e:0,x.url=x.url.split(/,/g)[e]);/\/$/.test(x.url)&&x.url!='/'&&(x.url=x.url.substring(0,x.url.length-1));if(/GET/i.test(x.method)&&
130
+ typeof k!='undefined'){e='?';U=v[p].url;la=[];v=0;for(let l in x.param)F.reservedParams.indexOf(l)>-1||(new RegExp(x.param[l])).test(U)||typeof k[l]=='undefined'||(e+=l+'='+encodeRFC5987ValueChars(k[l])+'&',la[v]=k[l],++v);for(let l in k)F.reservedParams.indexOf(l)>-1||typeof x.requirements[l]!='undefined'||la.indexOf(l)>-1||(e=typeof k[l]=='object'?e+(l+'='+encodeRFC5987ValueChars(JSON.stringify(k[l]))+'&'):e+(l+'='+k[l]+'&'));v=la=U=null;e.length>1&&(e=e.substring(0,e.length-1),x.url+=e);e=null}x.toUrl=
131
+ function(l){var g=null;/^redirect$/i.test(this.param.control)&&(g=F.getUrlProps(this.bundle,fa||GINA_ENV));var u=this.webroot||g.webroot;g=''+this.hostname||''+g.hostname;var J=''+this.url;this.isProxyHost&&(g=''+this.proxy_hostname);this.url=typeof l!='undefined'&&/^true$/i.test(l)?J.replace(new RegExp('^'+u),'/'):J.replace(new RegExp('^('+u+'|/$)'),u);return g+this.url};x.request=function(l,g){var u=null,J=null;typeof arguments[arguments.length-1]=='function'&&(u=arguments[arguments.length-1]);
132
+ typeof arguments[2]=='object'&&(J=arguments[2]);var N=this.webroot||J.webroot,q=this.hostname||J.hostname;J=typeof l!='undefined'&&l==1?path.replace(N,'/'):this.url||J.url;/^\//.test(J)&&(J=q+J);q=/^https/.test(q)?'https':'http';n?window.open(J,typeof g!='undefined'&&typeof g.target!='undefined'?g.target:'_self'):(typeof g.agent=='undefined'&&(g.agent=!1),q=require(''+q),N=function(z){var M='',P=!1;z.on('data',function(ha){M+=ha});z.on('error',function(ha){P='Failed to get mail content';ha&&typeof ha.stack!=
133
+ 'undefined'?P+=ha.stack:typeof ha=='string'&&(P+='\n'+ha)});z.on('end',function(){if(/^\{/.test(M))try{M=JSON.parse(M),typeof M.error!='undefined'&&(P=JSON.clone(M),M=null)}catch(ha){P=ha}P?u(P):u(!1,M)})},u?q.get(J,g,N):q.get(J,g))};!/:/.test(x.url)||/:d+\//.test(x.url)||/:\/\//.test(x.url)||(k=x.url.match(/(:(.*)\/|:(.*)$)/g).map(function(l){return l.replace(/\//g,'')}).join(', '),Y='[ RoutingHelper::getRoute(rule[, bundle, method]) ] : route [ %r ] param placeholder not defined: `'+x.url+'` !\n Check your route description to compare requirements against param variables [ '+
134
+ k+']',Y=Y.replace(/%r/,p),p=Error(Y),console.warn(p),Y=p=k=null);return x};F.getRouteByUrl=function(p,k,e,U,la){arguments.length==2&&typeof arguments[1]!='undefined'&&arguments[1]&&F.allowedMethods.indexOf(arguments[1].toLowerCase())>-1&&(e=arguments[1],k=void 0);var fa=null,x=null,v=null,Y=null,l=null,g=null;if(/#/.test(p)&&p.length>1){var u=p.split(/#/);p=u[0];l='#'+u[1];u=null}arguments.length==1&&typeof arguments[0]!='undefined'&&(/^(https|http)/i.test(p)||/^\//.test(p)||(p='/'+p),fa='/'+p.split(/\//g)[1],
135
+ n&&(Y=gina.config.reverseRouting,v=gina.config.routing),typeof Y[fa]!='undefined'&&(u=v[Y[fa]],k=u.bundle,fa=u.webroot,g=u.hostname,u=null));la=typeof arguments[arguments.length-1]!='boolean'?!1:arguments[arguments.length-1];var J=!1,N=null,q=Y=N=Y=null;u=typeof e!='undefined'?!0:!1;n?(N=window.gina.config,k=typeof k!='undefined'?k:N.bundle,Y=N.env,v=N.routing||N.getRouting(k),Y=N.reverseRouting,isXMLRequest=typeof isXMLRequest!='undefined'?isXMLRequest:!1,g=g||N.hostname,fa=fa||N.webroot,U={routing:{},
136
+ method:e,params:{},url:p},k&&(U.bundle=k)):(N=getContext('gina').config,k=typeof k!='undefined'?k:N.bundle,Y=N.env,v=N.getRouting(k),g=N.envConf[k][Y].hostname,fa=N.envConf[k][Y].server.webroot,U||={routing:{},isXMLRequest:!1,method:typeof e!='undefined'?e.toLowerCase():'get',params:{},url:p},la&&(U.method=e),isXMLRequest=U.isXMLRequest||!1);N=p.replace(new RegExp('^('+g+'|'+g.replace(/:\d+/,'')+')'),'');typeof U.routing.path=='undefined'&&(U.routing.path=safeDecodeURI(N));e=typeof e!='undefined'?
137
+ e.toLowerCase():'get';u&&(U.originalMethod=U.method,U.method=e,U.routing.path=safeDecodeURI(N));U.method||(U.method=e);Y={};fa=new RegExp(e,'i');g=null;for(z in v){if(typeof v[z].param=='undefined')break;if(v[z].bundle==k&&(g=v[z].method,/,/.test(g)&&fa.test(g)&&(g=U.method),typeof v[z].method=='undefined'||fa.test(g))){Y={method:g,requirements:v[z].requirements,namespace:v[z].namespace||void 0,url:safeDecodeURI(N),rule:v[z].originalRule||z,param:JSON.clone(v[z].param),middleware:JSON.clone(v[z].middleware),
138
+ bundle:v[z].bundle,isXMLRequest};try{if(q=F.compareUrls(Y,v[z].url,U),q.past){x=JSON.clone(v[z]);x.name=z;x.param=Y.param;J=!0;q={};break}}catch(M){throw Error('Route [ '+z+' ] needs your attention.\n'+M.stack);}}}if(J)return/\/$/.test(p)&&p!='/'&&(p=p.substring(0,p.length-1)),l&&(p+=l),x.url=p,x.toUrl=function(M){var P=this.webroot,ha=this.hostname,ma=this.url;this.url=typeof M!='undefined'&&M==1?ma.replace(P,'/'):ma;return ha+this.url},x;if(n){var z=!1;if(p=='#'&&/GET/i.test(e)&&u||/^404:/.test(p))p=
139
+ location.pathname,z=!0;typeof F.notFound=='undefined'&&(F.notFound={});l=null;x='[ RoutingHelper::getRouteByUrl(rule[, bundle, method]) ] : route [ %r ] is called but not found inside your view: `'+p+'` !';if((l=(l=gina.hasPopinHandler&&gina.popinIsBinded?gina.popin.getActivePopin().target.innerHTML.match(/404:\[\w+\][a-z 0-9-_@]+/):document.body.innerHTML.match(/404:\[\w+\][a-z 0-9-_@]+/))&&l.length>0?l[0]:null)&&u&&z)return z=l.match(/\[\w+\]/)[0],l=l.replace('404:'+z,z.replace(/\[|\]/g,'')+'::'),
140
+ x=x.replace(/%r/,l.replace(/404:\s+/,'')),typeof F.notFound[l]=='undefined'?F.notFound[l]={count:1,message:x}:u&&typeof F.notFound[l]!='undefined'&&++F.notFound[l].count,!1;if((z=gina.config.reverseRouting[p]||null)&&typeof z!='undefined'&&z.split(/@(.+)$/)[1]==k)return l=z,typeof F.notFound[l]=='undefined'?(x=x.replace(/%r/,e.toUpperCase()+'::'+z),F.notFound[l]={count:1,message:x}):u&&typeof F.notFound[l]!='undefined'&&++F.notFound[l].count,!1;l=F.compareUrls(Y,p,U)||null;l.past&&u&&(l=e.toUpperCase()+
141
+ '::'+l.request.routing.rule,typeof F.notFound[l]=='undefined'?x=x.replace(/%r/,l):++F.notFound[l].count);return!1}console.warn(Error('[ RoutingHelper::getRouteByUrl(rule[, bundle, method, request]) ] : route not found for url: `'+p+'` !').stack);return!1};F.buildTrie=function(p,k){if(!n){var e=require('./radix'),U=e.createNode(),la;for(la in p){var fa=p[la];if(fa&&typeof fa==='object'&&fa.bundle===k){fa=Array.isArray(fa.url)?fa.url:String(fa.url).split(',');for(var x=0;x<fa.length;x++){var v=fa[x].trim();
142
+ v&&e.insert(U,v,la)}}}Routing._tries[k]=U}};F.lookupTrie=function(p,k){return Routing._tries&&Routing._tries[k]?require('./radix').lookup(Routing._tries[k],p):null};return F}typeof module!=='undefined'&&module.exports?(typeof console.err=='undefined'&&(console=require('../../logger')),module.exports=Routing()):typeof define==='function'&&define.amd&&define('lib/routing',['require','lib/form-validator','lib/merge'],function(){return Routing()});
143
+ function registerEvents(n,F){typeof gina=='undefined'&&typeof window.gina!='undefined'&&(gina=window.gina);gina.registeredEvents[n]=F}function mergeEventProps(n,F){for(let I in F)typeof n[I]=='undefined'&&(n[I]=F[I]);return n}
144
144
  function addListener(n,F,I,O){var G=function(E,Z,p,k){typeof E.event!='undefined'&&E.event.isTouchSupported&&/^(click|mouseout|mouseover)/.test(p)&&E.event[p].indexOf(Z)==-1&&(E.event[p][E.event[p].length]=Z);typeof Z!='undefined'&&Z!=null?Z.addEventListener?Z.addEventListener(p,k,!1):Z.attachEvent&&Z.attachEvent('on'+p,k):E.customEvent.addListener(p,k);gina.events[p]=typeof Z.id!='undefined'&&typeof Z.id!='object'?Z.id:Z.getAttribute('id')},C=0,X=null;if(Array.isArray(I))for(X=I.length;C<X;C++)G(n,
145
145
  F,I[C],O);else if(Array.isArray(F))for(C=0,X=F.length;C<X;C++){let E=/\.$/.test(I)?I+F[C].id:I;G(n,F[C],E,O)}else I=/\.$/.test(I)?I+F.id:I,G(n,F,I,O)}
146
146
  function triggerEvent(n,F,I,O,G){if(typeof F!='undefined'&&F!=null){var C=!1;window.CustomEvent||document.createEvent?(window.CustomEvent?n=new CustomEvent(I,{detail:O,bubbles:!0,cancelable:!0,target:F}):(n=document.createEvent('HTMLEvents'),n.detail=O,n.target=F,n.initEvent(I,!0,!0),n.eventName=I),G&&(n=mergeEventProps(n,G)),typeof n.defaultPrevented!='undefined'&&n.defaultPrevented&&(C=n.defaultPrevented),C||F.dispatchEvent(n)):document.createEventObject&&(n=document.createEventObject(),n.srcElement.id=
@@ -512,11 +512,19 @@ function SuperController(options) {
512
512
  // && /^true$/i.test(req.headers['x-nginx-proxy'])
513
513
  // ) ? true : false;
514
514
  // setContext('isProxyHost', isProxyHost);
515
- var isProxyHost = getContext('isProxyHost') || false;
515
+ // #B66 S2b — the routing-clone gate (drives the _proxyHostname derivation
516
+ // + the per-route host rewrite below) AND the browser-whispered proxy host
517
+ // (page.environment.proxyHost/proxyHostname -> gina.config.* via loader.js)
518
+ // read THIS request's per-request #B65 classification (local.req slots)
519
+ // instead of the sticky worker-global latch, so a mixed proxied+direct (or
520
+ // concurrent multi-host) worker resolves the request in hand, not the last
521
+ // proxied global. The worker-global stays the fallback for req-less/Express
522
+ // paths that never set the slots.
523
+ var isProxyHost = ( local.req && typeof(local.req._ginaIsProxyHost) != 'undefined' ) ? local.req._ginaIsProxyHost : ( getContext('isProxyHost') || false );
516
524
  set('page.environment.isProxyHost', isProxyHost);
517
525
  if ( /^true$/.test(isProxyHost) ) {
518
- set('page.environment.proxyHost', process.gina.PROXY_HOST);
519
- set('page.environment.proxyHostname', process.gina.PROXY_HOSTNAME);
526
+ set('page.environment.proxyHost', ( local.req && local.req._ginaProxyHost ) ? local.req._ginaProxyHost : process.gina.PROXY_HOST);
527
+ set('page.environment.proxyHostname', ( local.req && local.req._ginaProxyHostname ) ? local.req._ginaProxyHostname : process.gina.PROXY_HOSTNAME);
520
528
  }
521
529
 
522
530
  var _config = ctx.config.envConf[options.conf.bundle][process.env.NODE_ENV];
@@ -553,7 +561,24 @@ function SuperController(options) {
553
561
  // }
554
562
  // }
555
563
 
556
- set('page.environment.hostname', hostname);
564
+ // #B66 — the hostname whispered to the browser (gina.config.hostname).
565
+ // On a proxied deployment (per-request #B65 classification) whisper the
566
+ // PUBLIC host-only origin (scheme://public-host, port-less — the webroot is
567
+ // whispered separately below) instead of the bundle's INTERNAL
568
+ // scheme://host:port(+webroot). This closes an information-disclosure AND
569
+ // lets the browser routing self-check flip isProxyHost=true (it cannot while
570
+ // the whispered value carries a port/webroot the self-check can't strip), so
571
+ // cross-bundle toUrl resolves same-origin. The internal `hostname` var above
572
+ // is left byte-identical — it still feeds _proxyHostname + the routing clone
573
+ // below. RAW (direct host:port) whispers the internal value, byte-identical.
574
+ // `_ginaProxyHostname` is the per-request #B65 slot (host-only, forwarded
575
+ // scheme); per-request (NOT a process-global) so it can't leak across a mix
576
+ // of proxied + direct requests. See server.isaac.js for the writer.
577
+ var _publicHostname = hostname;
578
+ if ( local.req && local.req._ginaIsProxyHost === true && local.req._ginaProxyHostname ) {
579
+ _publicHostname = local.req._ginaProxyHostname;
580
+ }
581
+ set('page.environment.hostname', _publicHostname);
557
582
  // Updating _config.rootDomain - 2024/04/15
558
583
  // _config.rootDomain = domainLib.getRootDomain(hostname).value;
559
584
 
@@ -970,7 +995,10 @@ function SuperController(options) {
970
995
  , rLen = resArr.length
971
996
  , obj = null
972
997
  , str = ''
973
- , isProxyHost = getContext('isProxyHost')
998
+ // #B66 S2b — read THIS request's per-request #B65 proxy classification
999
+ // (slot) instead of the sticky worker-global latch; worker-global stays
1000
+ // the fallback for req-less/Express paths that never set the slot.
1001
+ , isProxyHost = ( local.req && typeof(local.req._ginaIsProxyHost) != 'undefined' ) ? local.req._ginaIsProxyHost : ( getContext('isProxyHost') || false )
974
1002
  , requestHost = ( /http\/2/.test(local.options.conf.server.protocol) )
975
1003
  ? local.req.headers[':host']
976
1004
  : local.req.headers.host
@@ -999,7 +1027,9 @@ function SuperController(options) {
999
1027
  && !isSpecialCase
1000
1028
  ) {
1001
1029
 
1002
- hostname = scheme + '://'+ (local.req.headers.host||local.req.headers[':host']||process.gina.PROXY_HOST);
1030
+ // #B66 S2b last-resort host fallback prefers THIS request's slot over the
1031
+ // worker-global (local.req is guaranteed here — headers are dereferenced above).
1032
+ hostname = scheme + '://'+ (local.req.headers.host||local.req.headers[':host']||local.req._ginaProxyHost||process.gina.PROXY_HOST);
1003
1033
 
1004
1034
  // replaced: /^(80|443)$/ + new RegExp(requestPort+'$') — use string methods (#P1, #P12)
1005
1035
  if (
@@ -2203,12 +2233,18 @@ function SuperController(options) {
2203
2233
  typeof(local.req.headers['x-nginx-proxy']) != 'undefined'
2204
2234
  && String(local.req.headers['x-nginx-proxy']).toLowerCase() === 'true'
2205
2235
  ||
2206
- typeof(process.gina.PROXY_HOSTNAME) != 'undefined'
2236
+ // #B66 S2b — the freeze-prone catch-all term: prefer THIS request's
2237
+ // per-request #B65 classification (slot) over the worker-global "has this
2238
+ // worker ever seen a proxy" latch, so a raw/direct request on a worker
2239
+ // that previously served a proxied one is not misclassified as proxied.
2240
+ // Worker-global stays the fallback for req-less/Express paths (no slot).
2241
+ ( ( local.req && typeof(local.req._ginaIsProxyHost) != 'undefined' ) ? local.req._ginaIsProxyHost === true : typeof(process.gina.PROXY_HOSTNAME) != 'undefined' )
2207
2242
  ) ? true : false;
2208
2243
 
2209
2244
  // var isProxyHost = getContext('isProxyHost');
2245
+ // #B66 S2b — redirect target host prefers THIS request's slot over the worker-global.
2210
2246
  var hostname = (isProxyHost)
2211
- ? process.gina.PROXY_HOSTNAME
2247
+ ? ( ( local.req && local.req._ginaProxyHostname ) ? local.req._ginaProxyHostname : process.gina.PROXY_HOSTNAME )
2212
2248
  : ctx.config.envConf[bundle][env].hostname;
2213
2249
 
2214
2250
 
@@ -4952,13 +4988,23 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
4952
4988
  tmp = JSON.clone(local.options.conf);
4953
4989
  }
4954
4990
 
4991
+ // #B66 S2b — prefer THIS request's per-request proxy classification (the
4992
+ // #B65 slots on local.req) over the sticky worker-global latch, so a mixed
4993
+ // proxied+direct worker (or a concurrent request to a different public host)
4994
+ // resolves the host for the request in hand, not the last-proxied global.
4995
+ // getConfig is reachable req-less (ws-query, released-response, the async
4996
+ // health probe) AND under the Express engine (which never sets the slots),
4997
+ // so the worker-global stays the fallback whenever the slot is absent.
4998
+ var _isProxyHost = ( local.req && typeof(local.req._ginaIsProxyHost) != 'undefined' ) ? local.req._ginaIsProxyHost : ( getContext('isProxyHost') || false );
4999
+ var _proxyHostname = ( local.req && local.req._ginaProxyHostname ) ? local.req._ginaProxyHostname : process.gina.PROXY_HOSTNAME;
5000
+ var _proxyHost = ( local.req && local.req._ginaProxyHost ) ? local.req._ginaProxyHost : process.gina.PROXY_HOST;
4955
5001
  if (
4956
- getContext('isProxyHost')
5002
+ _isProxyHost
4957
5003
  && typeof(tmp.hostname) != 'undefined'
4958
- && typeof(process.gina.PROXY_HOSTNAME) != 'undefined'
5004
+ && typeof(_proxyHostname) != 'undefined'
4959
5005
  ) {
4960
- tmp.hostname = process.gina.PROXY_HOSTNAME;
4961
- tmp.host = process.gina.PROXY_HOST;
5006
+ tmp.hostname = _proxyHostname;
5007
+ tmp.host = _proxyHost;
4962
5008
  }
4963
5009
  return tmp;
4964
5010
  }
@@ -334,6 +334,20 @@ function ServerEngineClass(options) {
334
334
 
335
335
  }// EO for routing keys
336
336
 
337
+ // #B66 — a host-stripped variant of the routing map, served to PROXIED clients
338
+ // so the browser never receives any bundle's INTERNAL scheme://host:port (an
339
+ // information disclosure) and cross-bundle client toUrl resolves same-origin.
340
+ // Drop each route's `host` + `hostname`; KEEP `webroot` (the client toUrl path
341
+ // relies on it). Proxy-host-agnostic + boot-static like the full map above; the
342
+ // serve-time handler picks stripped-vs-full per request on request._ginaIsProxyHost.
343
+ // See the #B66 handler branch below.
344
+ var _routingStripped = JSON.clone(_routing);
345
+ var _routingStrippedKeys = Object.keys(_routingStripped);
346
+ for (var si = 0; si < _routingStrippedKeys.length; ++si) {
347
+ const { host, hostname, ...cleanStripped } = _routingStripped[_routingStrippedKeys[si]];
348
+ _routingStripped[_routingStrippedKeys[si]] = cleanStripped;
349
+ }// EO for stripped routing keys
350
+
337
351
  // Checking if brotli is installed
338
352
  var brotliBin = null;
339
353
  try {
@@ -420,6 +434,53 @@ function ServerEngineClass(options) {
420
434
  }
421
435
  }
422
436
 
437
+ // #B66 — write + (br/gz)-compress the host-stripped variant to disk, mirroring
438
+ // the full routing.json above. Served to proxied clients by the #B66 handler
439
+ // branch; RAW clients keep the full blob (the full write above is untouched).
440
+ if (_routingStripped) {
441
+ targetFile = 'routing.stripped.json';
442
+ // Storing to disk
443
+ console.debug(`Writing ${targetFile} to: ${targetDir}/${targetFile}`);
444
+ fd = fs.openSync(targetDir +'/'+ targetFile, 'w'); // Open file for writing
445
+ buffer = Buffer.from( JSON.stringify(_routingStripped) );
446
+ fs.writeSync(fd, buffer, 0, buffer.length, 0); // Write the buffer
447
+ fs.closeSync(fd); // Close the file descriptor
448
+
449
+ // Adding brotli version (see the full routing.json block above)
450
+ try {
451
+ if (brotliBin) {
452
+ brFileObj = new _(targetDir +'/'+ targetFile +'.br');
453
+ if ( brFileObj.existsSync() ) {
454
+ brFileObj.rmSync();
455
+ }
456
+ cmd = brotliBin +' --best '+ _(targetDir +'/'+ targetFile, true);
457
+ exec(cmd, function(brCmdErr, stdout) {
458
+ if (brCmdErr) { console.error('[ SERVER ] brotli compression error: ' + (brCmdErr.stack || brCmdErr.message)); return; }
459
+ if (stdout) console.debug(stdout.toString().trim());
460
+ });
461
+ }
462
+ } catch (brError) {
463
+ console.error('[ SERVER ] '+ brError.stack);
464
+ }
465
+
466
+ // Adding GZip version
467
+ try {
468
+ if (gZipBin) {
469
+ gzFileObj = new _(targetDir +'/'+ targetFile +'.gz');
470
+ if ( gzFileObj.existsSync() ) {
471
+ gzFileObj.rmSync();
472
+ }
473
+ cmd = gZipBin +' -9 -k '+ _(targetDir +'/'+ targetFile, true);
474
+ exec(cmd, function(gzCmdErr, stdout) {
475
+ if (gzCmdErr) { console.error('[ SERVER ] gzip compression error: ' + (gzCmdErr.stack || gzCmdErr.message)); return; }
476
+ if (stdout) console.debug(stdout.toString().trim());
477
+ });
478
+ }
479
+ } catch (gzError) {
480
+ console.error('[ SERVER ] '+ gzError.stack);
481
+ }
482
+ }
483
+
423
484
 
424
485
  buffer = null;
425
486
  fd = null;
@@ -430,6 +491,12 @@ function ServerEngineClass(options) {
430
491
  file : 'routing.json',
431
492
  path : targetDir,
432
493
  mime : 'application/json; charset=utf8'
494
+ },
495
+ // #B66 — host-stripped variant, served to proxied clients (see handler branch)
496
+ {
497
+ file : 'routing.stripped.json',
498
+ path : targetDir,
499
+ mime : 'application/json; charset=utf8'
433
500
  }
434
501
  ];
435
502
  for (let i=0, len=localAssets.length; i<len; i++) {
@@ -1688,9 +1755,22 @@ function ServerEngineClass(options) {
1688
1755
  // server.toApi(reques, response)
1689
1756
  // console.debug('[ SERVER ][200] '+ request.url);
1690
1757
  localAsset = assetsCollection.findOne({ file: request.url.split(/\//g).slice(-1).toString() });
1758
+ // #B66 — on a proxied deployment serve the host-stripped routing.json so
1759
+ // the browser never receives any bundle's INTERNAL scheme://host:port (an
1760
+ // information disclosure) and cross-bundle client toUrl resolves
1761
+ // same-origin. Gated on the per-request #B65 classification; RAW (direct
1762
+ // host:port) keeps the full blob, byte-identical.
1763
+ if ( request._ginaIsProxyHost === true ) {
1764
+ var _strippedRoutingAsset = assetsCollection.findOne({ file: 'routing.stripped.json' });
1765
+ if (_strippedRoutingAsset) {
1766
+ localAsset = _strippedRoutingAsset;
1767
+ }
1768
+ }
1691
1769
  response.setHeader('content-type', localAsset.mime);
1692
1770
  response.setHeader('vary', 'Origin');
1693
- response.setHeader('cache-control', 'public, max-age=86400');
1771
+ // #B66 — a shared cache must not cross-serve the stripped (proxied) and
1772
+ // full (raw) variants under the same URL; mark the proxied variant private.
1773
+ response.setHeader('cache-control', ( request._ginaIsProxyHost === true ) ? 'private, max-age=86400' : 'public, max-age=86400');
1694
1774
  response.setHeader('x-content-type-options', 'nosniff');
1695
1775
  response.setHeader('x-frame-options', 'DENY');
1696
1776
  response.setHeader('x-xss-protection', '1; mode=block');
@@ -25,7 +25,7 @@ var CmdHelper = require('./../helper');
25
25
  * 2. the framework's built-in driver range table (DRIVER_MAP / AI_DRIVER_MAP)
26
26
  *
27
27
  * Leading header comments at the top of an existing `connectors.json` are
28
- * preserved verbatim (everything before the first `{`). Mid-body `//` or
28
+ * preserved verbatim (everything before the first non-comment `{`). Mid-body `//` or
29
29
  * `/* * /` comments are lost — the JSON body is rewritten from the parsed
30
30
  * object graph. See help.txt for the caveat.
31
31
  *
@@ -349,7 +349,7 @@ function Add(opt, cmd) {
349
349
 
350
350
  /**
351
351
  * Reads the existing `connectors.json` (if any), preserves any leading
352
- * comment header (everything before the first `{`), and parses the
352
+ * comment header (everything before the first non-comment `{`), and parses the
353
353
  * JSON body with comment tolerance via `requireJSON`.
354
354
  *
355
355
  * Returns `{ header: string, data: object }`. On a parse failure, exits
@@ -379,8 +379,10 @@ function Add(opt, cmd) {
379
379
  process.exit(1);
380
380
  return null;
381
381
  }
382
- var firstBrace = raw.indexOf('{');
383
- var header = (firstBrace > 0) ? raw.slice(0, firstBrace) : '';
382
+ // Comment-aware: the scaffolded template's `// "couchbase": {` puts a
383
+ // brace inside a comment, so a naive first-brace scan lands there and
384
+ // corrupts the rewrite. splitHeader finds the first STRUCTURAL `{`.
385
+ var header = lib.jsonConfigHeader.splitHeader(raw).header;
384
386
  var data;
385
387
  try {
386
388
  data = requireJSON(target) || {};
@@ -435,7 +437,7 @@ function Add(opt, cmd) {
435
437
  * @inner
436
438
  * @private
437
439
  * @param {string} target
438
- * @param {string} header - Text before the first `{` in the existing file
440
+ * @param {string} header - Text before the first non-comment `{` in the existing file
439
441
  * @param {object} data - Full merged config object
440
442
  */
441
443
  var writeFile = function (target, header, data) {
@@ -36,7 +36,7 @@ var CmdHelper = require('./../helper');
36
36
  * when a concrete migration (e.g. #CN8 Couchbase SDK v2 removal at
37
37
  * `0.4.0`) lands with a real before/after shape.
38
38
  *
39
- * Leading comment headers (everything before the first `{`) are preserved
39
+ * Leading comment headers (everything before the first non-comment `{`) are preserved
40
40
  * verbatim when `--fix` writes the file — same convention as `add.js` and
41
41
  * `remove.js`. Mid-body comments are lost on rewrite.
42
42
  *
@@ -285,8 +285,10 @@ function Migrate(opt, cmd) {
285
285
  report.parseError = 'read failed: ' + e.message;
286
286
  return report;
287
287
  }
288
- var firstBrace = raw.indexOf('{');
289
- report.header = (firstBrace > 0) ? raw.slice(0, firstBrace) : '';
288
+ // Comment-aware: the scaffolded template's `// "couchbase": {` puts a
289
+ // brace inside a comment, so a naive first-brace scan lands there and
290
+ // corrupts a --fix rewrite. splitHeader finds the first STRUCTURAL `{`.
291
+ report.header = lib.jsonConfigHeader.splitHeader(raw).header;
290
292
 
291
293
  var data;
292
294
  try {
@@ -24,7 +24,7 @@ var CmdHelper = require('./../helper');
24
24
  * user can decide whether to keep the driver installed.
25
25
  *
26
26
  * Leading header comments at the top of an existing `connectors.json`
27
- * (everything before the first `{`) are preserved verbatim. Mid-body
27
+ * (everything before the first non-comment `{`) are preserved verbatim. Mid-body
28
28
  * `//` or `/* * /` comments are lost — the body is rewritten from the
29
29
  * parsed object graph. Same caveat as `connector:add`.
30
30
  *
@@ -269,7 +269,7 @@ function Remove(opt, cmd) {
269
269
 
270
270
  /**
271
271
  * Reads the existing `connectors.json`, preserves the leading comment
272
- * header (everything before the first `{`), and parses the body with
272
+ * header (everything before the first non-comment `{`), and parses the body with
273
273
  * comment tolerance. Exits on parse or I/O failure. Returns null when
274
274
  * the target file does not exist at all — that's an error for
275
275
  * `connector:rm` because there's nothing to remove.
@@ -293,8 +293,10 @@ function Remove(opt, cmd) {
293
293
  process.exit(1);
294
294
  return null;
295
295
  }
296
- var firstBrace = raw.indexOf('{');
297
- var header = (firstBrace > 0) ? raw.slice(0, firstBrace) : '';
296
+ // Comment-aware: the scaffolded template's `// "couchbase": {` puts a
297
+ // brace inside a comment, so a naive first-brace scan lands there and
298
+ // corrupts the rewrite. splitHeader finds the first STRUCTURAL `{`.
299
+ var header = lib.jsonConfigHeader.splitHeader(raw).header;
298
300
  var data;
299
301
  try {
300
302
  data = requireJSON(target) || {};
@@ -160,6 +160,14 @@ function Lib() {
160
160
  // caller can run lib.secrets.resolve() on it in place. Pure (same
161
161
  // contract as connector-registry / cmd-status-format).
162
162
  connectorConfig : _require('./connector-config'),
163
+ // Comment-aware header/body splitter for JSON-with-comments config
164
+ // files. firstStructuralBraceIndex / splitHeader find the first `{`
165
+ // that is NOT inside a `//` or block comment, so a rewrite preserves a
166
+ // leading comment header verbatim (the scaffolded connectors.json
167
+ // template carries `// "couchbase": {` — a brace inside a comment).
168
+ // Consumed by the connector:add / connector:rm / connector:migrate
169
+ // handlers. Pure (same contract as cmd-status-format / routing-introspect).
170
+ jsonConfigHeader: _require('./json-config-header'),
163
171
  // Pure resolver that picks between a project-installed @rhinostone/swig
164
172
  // (or swig-twig) and the framework's bundled copy. Opt-in via
165
173
  // settings.json > swig.useProject; default-off. Returns a decision