gina 0.6.7 → 0.6.8

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 (583) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +27 -26
  3. package/ROADMAP.md +3 -2
  4. package/framework/v0.6.8/VERSION +1 -0
  5. package/framework/{v0.6.7 → v0.6.8}/core/config.js +10 -0
  6. package/framework/v0.6.8/core/connectors/couchbase/lib/storage-store.js +1074 -0
  7. package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.js +532 -22
  8. package/framework/v0.6.8/core/controller/controller.render-stream.js +270 -0
  9. package/framework/{v0.6.7 → v0.6.8}/core/gna.js +10 -2
  10. package/framework/{v0.6.7 → v0.6.8}/core/router.js +30 -10
  11. package/framework/{v0.6.7 → v0.6.8}/core/server.isaac.js +42 -7
  12. package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/gc.js +6 -0
  13. package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/stats.js +7 -0
  14. package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/verify.js +6 -0
  15. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/local-cas.js +107 -9
  16. package/framework/v0.6.8/lib/storage/src/local-stream.js +1418 -0
  17. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/local.js +177 -16
  18. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/main.js +406 -25
  19. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/meta-store.js +13 -2
  20. package/framework/v0.6.8/lib/storage/src/s3.js +759 -0
  21. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/util.js +26 -1
  22. package/framework/{v0.6.7 → v0.6.8}/lib/storage-store.js +33 -23
  23. package/framework/{v0.6.7 → v0.6.8}/package.json +1 -1
  24. package/gna.js +4 -4
  25. package/llms.txt +22 -47
  26. package/package.json +3 -3
  27. package/schema/routing.json +4 -0
  28. package/schema/settings.json +84 -10
  29. package/script/check_no_local_leak.js +2 -1
  30. package/script/retry_lockfile_sync.js +2 -1
  31. package/script/soak/storage-couchbase/README.md +61 -0
  32. package/script/soak/storage-couchbase/probe-cas.js +77 -0
  33. package/script/soak/storage-couchbase/probe-store.js +101 -0
  34. package/types/index.d.ts +18 -0
  35. package/framework/v0.6.7/VERSION +0 -1
  36. package/framework/v0.6.7/core/controller/controller.render-stream.js +0 -169
  37. /package/framework/{v0.6.7 → v0.6.8}/AUTHORS +0 -0
  38. /package/framework/{v0.6.7 → v0.6.8}/LICENSE +0 -0
  39. /package/framework/{v0.6.7 → v0.6.8}/core/asset/html/nolayout.html +0 -0
  40. /package/framework/{v0.6.7 → v0.6.8}/core/asset/html/static.html +0 -0
  41. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/android-chrome-192x192.png +0 -0
  42. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/android-chrome-512x512.png +0 -0
  43. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/apple-touch-icon.png +0 -0
  44. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon-16x16.png +0 -0
  45. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon-32x32.png +0 -0
  46. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon.ico +0 -0
  47. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/README.md +0 -0
  48. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  49. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  50. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  51. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  52. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  53. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  54. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  55. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  56. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  57. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  58. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  59. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  60. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  61. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  62. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  63. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  64. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  65. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  66. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  67. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  68. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  69. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/ai/index.js +0 -0
  70. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/ai/lib/connector.js +0 -0
  71. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/index.js +0 -0
  72. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.js +0 -0
  73. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  74. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  75. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/n1ql.js +0 -0
  76. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.js +0 -0
  77. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  78. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  79. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/duckdb/index.js +0 -0
  80. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/duckdb/lib/connector.js +0 -0
  81. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/index.js +0 -0
  82. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/connector.js +0 -0
  83. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/job-store.js +0 -0
  84. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  85. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/session-store.js +0 -0
  86. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mysql/index.js +0 -0
  87. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mysql/lib/connector.js +0 -0
  88. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/param-redact.js +0 -0
  89. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/postgresql/index.js +0 -0
  90. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/postgresql/lib/connector.js +0 -0
  91. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/index.js +0 -0
  92. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/connector.js +0 -0
  93. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/job-store.js +0 -0
  94. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/render-cache-store.js +0 -0
  95. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/session-store.js +0 -0
  96. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/index.js +0 -0
  97. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/lib/connector.js +0 -0
  98. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/lib/session-store.js +0 -0
  99. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sql-parser.js +0 -0
  100. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/index.js +0 -0
  101. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/connector.js +0 -0
  102. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/job-store.js +0 -0
  103. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/session-store.js +0 -0
  104. /package/framework/{v0.6.7 → v0.6.8}/core/content.encoding +0 -0
  105. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.framework.js +0 -0
  106. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-json.js +0 -0
  107. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-nunjucks-async.js +0 -0
  108. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-nunjucks.js +0 -0
  109. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-swig-async.js +0 -0
  110. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-swig.js +0 -0
  111. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-v1.js +0 -0
  112. /package/framework/{v0.6.7 → v0.6.8}/core/controller/index.js +0 -0
  113. /package/framework/{v0.6.7 → v0.6.8}/core/controller/inspector-window-emit.js +0 -0
  114. /package/framework/{v0.6.7 → v0.6.8}/core/controller/release-banner.js +0 -0
  115. /package/framework/{v0.6.7 → v0.6.8}/core/dev/index.js +0 -0
  116. /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/class.js +0 -0
  117. /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/factory.js +0 -0
  118. /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/tools.js +0 -0
  119. /package/framework/{v0.6.7 → v0.6.8}/core/locales/README.md +0 -0
  120. /package/framework/{v0.6.7 → v0.6.8}/core/locales/currency.json +0 -0
  121. /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/language/en.json +0 -0
  122. /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/language/fr.json +0 -0
  123. /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/region/en.json +0 -0
  124. /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/region/fr.json +0 -0
  125. /package/framework/{v0.6.7 → v0.6.8}/core/locales/index.js +0 -0
  126. /package/framework/{v0.6.7 → v0.6.8}/core/mime.types +0 -0
  127. /package/framework/{v0.6.7 → v0.6.8}/core/model/entity.js +0 -0
  128. /package/framework/{v0.6.7 → v0.6.8}/core/model/index.js +0 -0
  129. /package/framework/{v0.6.7 → v0.6.8}/core/model/template/entityFactory.js +0 -0
  130. /package/framework/{v0.6.7 → v0.6.8}/core/model/template/index.js +0 -0
  131. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/README.md +0 -0
  132. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/index.js +0 -0
  133. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/README.md +0 -0
  134. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/package.json +0 -0
  135. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/src/main.js +0 -0
  136. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/README.md +0 -0
  137. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/README.md +0 -0
  138. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/package.json +0 -0
  139. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  140. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/README.md +0 -0
  141. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/package.json +0 -0
  142. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  143. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/README.md +0 -0
  144. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/package.json +0 -0
  145. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  146. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/README.md +0 -0
  147. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/package.json +0 -0
  148. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  149. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  150. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  151. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  152. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  153. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  154. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  155. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  156. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  157. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  158. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/package.json +0 -0
  159. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  160. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  161. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  162. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/src/main.js +0 -0
  163. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  164. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  165. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  166. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  167. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  168. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  169. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  170. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  171. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  172. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  173. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  174. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  175. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  176. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  177. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  178. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  179. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  180. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  181. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/README.md +0 -0
  182. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/package.json +0 -0
  183. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/src/main.js +0 -0
  184. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/README.md +0 -0
  185. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/build.json +0 -0
  186. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/package.json +0 -0
  187. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/src/main.js +0 -0
  188. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/README.md +0 -0
  189. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/build.json +0 -0
  190. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/package.json +0 -0
  191. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/src/form-validator.js +0 -0
  192. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/src/main.js +0 -0
  193. /package/framework/{v0.6.7 → v0.6.8}/core/server.express.js +0 -0
  194. /package/framework/{v0.6.7 → v0.6.8}/core/server.js +0 -0
  195. /package/framework/{v0.6.7 → v0.6.8}/core/status.codes +0 -0
  196. /package/framework/{v0.6.7 → v0.6.8}/core/template/_gitignore +0 -0
  197. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/app.json +0 -0
  198. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  199. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/routing.json +0 -0
  200. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/settings.json +0 -0
  201. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  202. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/templates.json +0 -0
  203. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  204. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  205. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  206. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  207. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/index.js +0 -0
  208. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/locales/en.json +0 -0
  209. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  210. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  211. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  212. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  213. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  214. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  215. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  216. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  217. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/readme.md +0 -0
  218. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/sw.js +0 -0
  219. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  220. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  221. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  222. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  223. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  224. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  225. /package/framework/{v0.6.7 → v0.6.8}/core/template/command/gina.bat.tpl +0 -0
  226. /package/framework/{v0.6.7 → v0.6.8}/core/template/command/gina.tpl +0 -0
  227. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/env.json +0 -0
  228. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/manifest.json +0 -0
  229. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/package.json +0 -0
  230. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/settings.json +0 -0
  231. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/statics.json +0 -0
  232. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/templates.json +0 -0
  233. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/401.json +0 -0
  234. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/403.json +0 -0
  235. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/404.json +0 -0
  236. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/html/50x.html +0 -0
  237. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/json/500.json +0 -0
  238. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/json/503.json +0 -0
  239. /package/framework/{v0.6.7 → v0.6.8}/core/template/extensions/logger/config.json +0 -0
  240. /package/framework/{v0.6.7 → v0.6.8}/helpers/console.js +0 -0
  241. /package/framework/{v0.6.7 → v0.6.8}/helpers/context.js +0 -0
  242. /package/framework/{v0.6.7 → v0.6.8}/helpers/data/LICENSE +0 -0
  243. /package/framework/{v0.6.7 → v0.6.8}/helpers/data/README.md +0 -0
  244. /package/framework/{v0.6.7 → v0.6.8}/helpers/data/package.json +0 -0
  245. /package/framework/{v0.6.7 → v0.6.8}/helpers/data/src/main.js +0 -0
  246. /package/framework/{v0.6.7 → v0.6.8}/helpers/dateFormat.js +0 -0
  247. /package/framework/{v0.6.7 → v0.6.8}/helpers/index.js +0 -0
  248. /package/framework/{v0.6.7 → v0.6.8}/helpers/json/LICENSE +0 -0
  249. /package/framework/{v0.6.7 → v0.6.8}/helpers/json/README.md +0 -0
  250. /package/framework/{v0.6.7 → v0.6.8}/helpers/json/package.json +0 -0
  251. /package/framework/{v0.6.7 → v0.6.8}/helpers/json/src/main.js +0 -0
  252. /package/framework/{v0.6.7 → v0.6.8}/helpers/path.js +0 -0
  253. /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/README.md +0 -0
  254. /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/package.json +0 -0
  255. /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/src/api-error.js +0 -0
  256. /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/src/main.js +0 -0
  257. /package/framework/{v0.6.7 → v0.6.8}/helpers/prototypes.js +0 -0
  258. /package/framework/{v0.6.7 → v0.6.8}/helpers/task.js +0 -0
  259. /package/framework/{v0.6.7 → v0.6.8}/helpers/text.js +0 -0
  260. /package/framework/{v0.6.7 → v0.6.8}/lib/admin/package.json +0 -0
  261. /package/framework/{v0.6.7 → v0.6.8}/lib/admin/src/main.js +0 -0
  262. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/README.md +0 -0
  263. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/build.json +0 -0
  264. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/package.json +0 -0
  265. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/src/dep/jszip.min.js +0 -0
  266. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/src/main.js +0 -0
  267. /package/framework/{v0.6.7 → v0.6.8}/lib/async/package.json +0 -0
  268. /package/framework/{v0.6.7 → v0.6.8}/lib/async/src/main.js +0 -0
  269. /package/framework/{v0.6.7 → v0.6.8}/lib/audit/package.json +0 -0
  270. /package/framework/{v0.6.7 → v0.6.8}/lib/audit/src/main.js +0 -0
  271. /package/framework/{v0.6.7 → v0.6.8}/lib/audit-store.js +0 -0
  272. /package/framework/{v0.6.7 → v0.6.8}/lib/authn/package.json +0 -0
  273. /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/lockout.js +0 -0
  274. /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/main.js +0 -0
  275. /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/totp.js +0 -0
  276. /package/framework/{v0.6.7 → v0.6.8}/lib/authz-gate/package.json +0 -0
  277. /package/framework/{v0.6.7 → v0.6.8}/lib/authz-gate/src/main.js +0 -0
  278. /package/framework/{v0.6.7 → v0.6.8}/lib/cache/README.md +0 -0
  279. /package/framework/{v0.6.7 → v0.6.8}/lib/cache/build.json +0 -0
  280. /package/framework/{v0.6.7 → v0.6.8}/lib/cache/package.json +0 -0
  281. /package/framework/{v0.6.7 → v0.6.8}/lib/cache/src/main.js +0 -0
  282. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/aliases.json +0 -0
  283. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/arguments.json +0 -0
  284. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/help.txt +0 -0
  285. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/verify.js +0 -0
  286. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/add.js +0 -0
  287. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/arguments.json +0 -0
  288. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/build.js +0 -0
  289. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/copy.js +0 -0
  290. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/cp.js +0 -0
  291. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/help.js +0 -0
  292. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/help.txt +0 -0
  293. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  294. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/list.js +0 -0
  295. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/man.js +0 -0
  296. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/mcp-start.js +0 -0
  297. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/mcp.js +0 -0
  298. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/oas.js +0 -0
  299. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/openapi.js +0 -0
  300. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/remove.js +0 -0
  301. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/rename.js +0 -0
  302. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/restart.js +0 -0
  303. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/rm.js +0 -0
  304. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/start.js +0 -0
  305. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/status.js +0 -0
  306. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/stop.js +0 -0
  307. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/types.js +0 -0
  308. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/arguments.json +0 -0
  309. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/clear.js +0 -0
  310. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/help.txt +0 -0
  311. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/stats.js +0 -0
  312. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/add.js +0 -0
  313. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/arguments.json +0 -0
  314. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/help.js +0 -0
  315. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/help.txt +0 -0
  316. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/infer.js +0 -0
  317. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/list.js +0 -0
  318. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/migrate.js +0 -0
  319. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/models.js +0 -0
  320. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/remove.js +0 -0
  321. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/rm.js +0 -0
  322. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/test.js +0 -0
  323. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/arguments.json +0 -0
  324. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/help.js +0 -0
  325. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/help.txt +0 -0
  326. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/man.js +0 -0
  327. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/ps.js +0 -0
  328. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/stop.js +0 -0
  329. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/add.js +0 -0
  330. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/arguments.json +0 -0
  331. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/help.txt +0 -0
  332. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/args.js +0 -0
  333. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/namespace.js +0 -0
  334. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  335. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/reference-scan.js +0 -0
  336. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/scaffold.js +0 -0
  337. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/remove.js +0 -0
  338. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/rename.js +0 -0
  339. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/rm.js +0 -0
  340. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/add.js +0 -0
  341. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/get.js +0 -0
  342. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/help.js +0 -0
  343. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/help.txt +0 -0
  344. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/link-dev.js +0 -0
  345. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/list.js +0 -0
  346. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/remove.js +0 -0
  347. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/rm.js +0 -0
  348. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/set.js +0 -0
  349. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/unset.js +0 -0
  350. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/use.js +0 -0
  351. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/add.js +0 -0
  352. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/arguments.json +0 -0
  353. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/build.js +0 -0
  354. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/dot.js +0 -0
  355. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/get.js +0 -0
  356. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/help.js +0 -0
  357. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/help.txt +0 -0
  358. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/init.js +0 -0
  359. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/link-node-modules.js +0 -0
  360. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/link.js +0 -0
  361. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/list.js +0 -0
  362. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/man.js +0 -0
  363. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/msg.json +0 -0
  364. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/open.js +0 -0
  365. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/remove.js +0 -0
  366. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/reset.js +0 -0
  367. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/restart.js +0 -0
  368. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/set.js +0 -0
  369. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/start.js +0 -0
  370. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/status.js +0 -0
  371. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/stop.js +0 -0
  372. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/tail.js +0 -0
  373. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/update.js +0 -0
  374. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/version.js +0 -0
  375. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina-dev.1.md +0 -0
  376. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina-framework.1.md +0 -0
  377. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina.1.md +0 -0
  378. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/helper.js +0 -0
  379. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/add.js +0 -0
  380. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/arguments.json +0 -0
  381. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/export.js +0 -0
  382. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/help.js +0 -0
  383. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/help.txt +0 -0
  384. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/import.js +0 -0
  385. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/scan.js +0 -0
  386. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/_host.js +0 -0
  387. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/arguments.json +0 -0
  388. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/build.js +0 -0
  389. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/help.js +0 -0
  390. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/help.txt +0 -0
  391. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/list.js +0 -0
  392. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/man.js +0 -0
  393. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/rm.js +0 -0
  394. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/run.js +0 -0
  395. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/index.js +0 -0
  396. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/help.js +0 -0
  397. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/help.txt +0 -0
  398. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/open.js +0 -0
  399. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/man-render.js +0 -0
  400. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/arguments.json +0 -0
  401. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/help.js +0 -0
  402. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/help.txt +0 -0
  403. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/kill.js +0 -0
  404. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/list.js +0 -0
  405. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/msg.json +0 -0
  406. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/help.js +0 -0
  407. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/help.txt +0 -0
  408. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/inc/scan.js +0 -0
  409. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/list.js +0 -0
  410. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/reset.js +0 -0
  411. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/set.js +0 -0
  412. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/add.js +0 -0
  413. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/arguments.json +0 -0
  414. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/backup.js +0 -0
  415. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/build.js +0 -0
  416. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/help.js +0 -0
  417. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/help.txt +0 -0
  418. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/import.js +0 -0
  419. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/list.js +0 -0
  420. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/man.js +0 -0
  421. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/move.js +0 -0
  422. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/remove.js +0 -0
  423. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/rename.js +0 -0
  424. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/restart.js +0 -0
  425. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/restore.js +0 -0
  426. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/rm.js +0 -0
  427. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/start.js +0 -0
  428. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/status.js +0 -0
  429. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/stop.js +0 -0
  430. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/arguments.json +0 -0
  431. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/help.js +0 -0
  432. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/help.txt +0 -0
  433. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/list.js +0 -0
  434. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/remove.js +0 -0
  435. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/set.js +0 -0
  436. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/add.js +0 -0
  437. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/help.js +0 -0
  438. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/help.txt +0 -0
  439. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/link-local.js +0 -0
  440. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/link-production.js +0 -0
  441. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/list.js +0 -0
  442. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/remove.js +0 -0
  443. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/rm.js +0 -0
  444. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/use.js +0 -0
  445. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/arguments.json +0 -0
  446. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/check.js +0 -0
  447. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/help.js +0 -0
  448. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/help.txt +0 -0
  449. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/scan.js +0 -0
  450. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/help.js +0 -0
  451. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/help.txt +0 -0
  452. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/list.js +0 -0
  453. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/man.js +0 -0
  454. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/start.js +0 -0
  455. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/arguments.json +0 -0
  456. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/help.txt +0 -0
  457. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/view/add.js +0 -0
  458. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd-status-format/package.json +0 -0
  459. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd-status-format/src/main.js +0 -0
  460. /package/framework/{v0.6.7 → v0.6.8}/lib/collection/README.md +0 -0
  461. /package/framework/{v0.6.7 → v0.6.8}/lib/collection/build.json +0 -0
  462. /package/framework/{v0.6.7 → v0.6.8}/lib/collection/package.json +0 -0
  463. /package/framework/{v0.6.7 → v0.6.8}/lib/collection/src/main.js +0 -0
  464. /package/framework/{v0.6.7 → v0.6.8}/lib/config.js +0 -0
  465. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-config/package.json +0 -0
  466. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-config/src/main.js +0 -0
  467. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-error/package.json +0 -0
  468. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-error/src/main.js +0 -0
  469. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-registry/package.json +0 -0
  470. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-registry/src/main.js +0 -0
  471. /package/framework/{v0.6.7 → v0.6.8}/lib/cron/README.md +0 -0
  472. /package/framework/{v0.6.7 → v0.6.8}/lib/cron/package.json +0 -0
  473. /package/framework/{v0.6.7 → v0.6.8}/lib/cron/src/main.js +0 -0
  474. /package/framework/{v0.6.7 → v0.6.8}/lib/domain/LICENSE +0 -0
  475. /package/framework/{v0.6.7 → v0.6.8}/lib/domain/README.md +0 -0
  476. /package/framework/{v0.6.7 → v0.6.8}/lib/domain/package.json +0 -0
  477. /package/framework/{v0.6.7 → v0.6.8}/lib/domain/src/main.js +0 -0
  478. /package/framework/{v0.6.7 → v0.6.8}/lib/dto/package.json +0 -0
  479. /package/framework/{v0.6.7 → v0.6.8}/lib/dto/src/main.js +0 -0
  480. /package/framework/{v0.6.7 → v0.6.8}/lib/dto-pipe/package.json +0 -0
  481. /package/framework/{v0.6.7 → v0.6.8}/lib/dto-pipe/src/main.js +0 -0
  482. /package/framework/{v0.6.7 → v0.6.8}/lib/dto-types/package.json +0 -0
  483. /package/framework/{v0.6.7 → v0.6.8}/lib/dto-types/src/main.js +0 -0
  484. /package/framework/{v0.6.7 → v0.6.8}/lib/generator/index.js +0 -0
  485. /package/framework/{v0.6.7 → v0.6.8}/lib/i18n/package.json +0 -0
  486. /package/framework/{v0.6.7 → v0.6.8}/lib/i18n/src/main.js +0 -0
  487. /package/framework/{v0.6.7 → v0.6.8}/lib/image-build/package.json +0 -0
  488. /package/framework/{v0.6.7 → v0.6.8}/lib/image-build/src/main.js +0 -0
  489. /package/framework/{v0.6.7 → v0.6.8}/lib/index.js +0 -0
  490. /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/LICENSE +0 -0
  491. /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/README.md +0 -0
  492. /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/package.json +0 -0
  493. /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/src/main.js +0 -0
  494. /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-events/package.json +0 -0
  495. /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-events/src/main.js +0 -0
  496. /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-redact/package.json +0 -0
  497. /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-redact/src/main.js +0 -0
  498. /package/framework/{v0.6.7 → v0.6.8}/lib/instrument/package.json +0 -0
  499. /package/framework/{v0.6.7 → v0.6.8}/lib/instrument/src/main.js +0 -0
  500. /package/framework/{v0.6.7 → v0.6.8}/lib/job/package.json +0 -0
  501. /package/framework/{v0.6.7 → v0.6.8}/lib/job/src/main.js +0 -0
  502. /package/framework/{v0.6.7 → v0.6.8}/lib/job-store.js +0 -0
  503. /package/framework/{v0.6.7 → v0.6.8}/lib/json-config-header/package.json +0 -0
  504. /package/framework/{v0.6.7 → v0.6.8}/lib/json-config-header/src/main.js +0 -0
  505. /package/framework/{v0.6.7 → v0.6.8}/lib/loading-state/package.json +0 -0
  506. /package/framework/{v0.6.7 → v0.6.8}/lib/loading-state/src/main.js +0 -0
  507. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/README.md +0 -0
  508. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/package.json +0 -0
  509. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/default/index.js +0 -0
  510. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/index.js +0 -0
  511. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  512. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  513. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/index.js +0 -0
  514. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/listener.js +0 -0
  515. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/speaker.js +0 -0
  516. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/helper.js +0 -0
  517. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/main.js +0 -0
  518. /package/framework/{v0.6.7 → v0.6.8}/lib/math/index.js +0 -0
  519. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-dispatch/package.json +0 -0
  520. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-dispatch/src/main.js +0 -0
  521. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-http/package.json +0 -0
  522. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-http/src/main.js +0 -0
  523. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-server/package.json +0 -0
  524. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-server/src/main.js +0 -0
  525. /package/framework/{v0.6.7 → v0.6.8}/lib/merge/README.md +0 -0
  526. /package/framework/{v0.6.7 → v0.6.8}/lib/merge/package.json +0 -0
  527. /package/framework/{v0.6.7 → v0.6.8}/lib/merge/src/main.js +0 -0
  528. /package/framework/{v0.6.7 → v0.6.8}/lib/metrics/package.json +0 -0
  529. /package/framework/{v0.6.7 → v0.6.8}/lib/metrics/src/main.js +0 -0
  530. /package/framework/{v0.6.7 → v0.6.8}/lib/model.js +0 -0
  531. /package/framework/{v0.6.7 → v0.6.8}/lib/net-locality/package.json +0 -0
  532. /package/framework/{v0.6.7 → v0.6.8}/lib/net-locality/src/main.js +0 -0
  533. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/README.md +0 -0
  534. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/package.json +0 -0
  535. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/src/main.js +0 -0
  536. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-resolver/package.json +0 -0
  537. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-resolver/src/main.js +0 -0
  538. /package/framework/{v0.6.7 → v0.6.8}/lib/proc.js +0 -0
  539. /package/framework/{v0.6.7 → v0.6.8}/lib/release-watch/package.json +0 -0
  540. /package/framework/{v0.6.7 → v0.6.8}/lib/release-watch/src/main.js +0 -0
  541. /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache/package.json +0 -0
  542. /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache/src/main.js +0 -0
  543. /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache-store.js +0 -0
  544. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/README.md +0 -0
  545. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/build.json +0 -0
  546. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/package.json +0 -0
  547. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/src/main.js +0 -0
  548. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/src/radix.js +0 -0
  549. /package/framework/{v0.6.7 → v0.6.8}/lib/routing-introspect/package.json +0 -0
  550. /package/framework/{v0.6.7 → v0.6.8}/lib/routing-introspect/src/main.js +0 -0
  551. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/package.json +0 -0
  552. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/backends/env.js +0 -0
  553. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/backends/file.js +0 -0
  554. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/env-file.js +0 -0
  555. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/main.js +0 -0
  556. /package/framework/{v0.6.7 → v0.6.8}/lib/session-store.js +0 -0
  557. /package/framework/{v0.6.7 → v0.6.8}/lib/shell.js +0 -0
  558. /package/framework/{v0.6.7 → v0.6.8}/lib/sqlite-driver.js +0 -0
  559. /package/framework/{v0.6.7 → v0.6.8}/lib/state.js +0 -0
  560. /package/framework/{v0.6.7 → v0.6.8}/lib/storage/package.json +0 -0
  561. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/README.md +0 -0
  562. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/package.json +0 -0
  563. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/src/main.js +0 -0
  564. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-resolver/package.json +0 -0
  565. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-resolver/src/main.js +0 -0
  566. /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/package.json +0 -0
  567. /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/loaders/http.js +0 -0
  568. /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/loaders/memory.js +0 -0
  569. /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/main.js +0 -0
  570. /package/framework/{v0.6.7 → v0.6.8}/lib/url/README.md +0 -0
  571. /package/framework/{v0.6.7 → v0.6.8}/lib/url/index.js +0 -0
  572. /package/framework/{v0.6.7 → v0.6.8}/lib/url/routing.json +0 -0
  573. /package/framework/{v0.6.7 → v0.6.8}/lib/uuid/package.json +0 -0
  574. /package/framework/{v0.6.7 → v0.6.8}/lib/uuid/src/main.js +0 -0
  575. /package/framework/{v0.6.7 → v0.6.8}/lib/validator.js +0 -0
  576. /package/framework/{v0.6.7 → v0.6.8}/lib/watcher/package.json +0 -0
  577. /package/framework/{v0.6.7 → v0.6.8}/lib/watcher/src/main.js +0 -0
  578. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-framing/package.json +0 -0
  579. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-framing/src/main.js +0 -0
  580. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-query/package.json +0 -0
  581. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-query/src/main.js +0 -0
  582. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-session/package.json +0 -0
  583. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-session/src/main.js +0 -0
@@ -326,6 +326,99 @@ function formatAttachmentDisposition(filename) {
326
326
  return 'attachment; filename="' + String(filename).replace(/[\\"]/g, '\\$&') + '"';
327
327
  }
328
328
 
329
+ /**
330
+ * Parse an HTTP `Range` request header against a known representation size.
331
+ *
332
+ * Honours a SINGLE `bytes=` range in its three RFC 9110 shapes — `a-b`,
333
+ * `a-` (open-ended) and `-n` (suffix: the last `n` bytes). Everything else —
334
+ * an absent/non-string header, another unit, a multi-range list, syntactic
335
+ * garbage, or `a-b` with `a > b` — returns `null`, which the caller treats as
336
+ * "ignore the header, serve the full 200" (RFC-sanctioned: a server MAY
337
+ * ignore Range). A syntactically valid range that matches no byte of the
338
+ * representation — `start >= size`, a `-0` suffix, or any range against a
339
+ * zero-length object — returns `{unsatisfiable: true}`, the caller's 416.
340
+ * A satisfiable range comes back `{start, end}` with `end` INCLUSIVE and
341
+ * clamped to `size - 1`, matching both the header semantics and the storage
342
+ * drivers' `getRange` contract, so no arithmetic sits between them.
343
+ *
344
+ * @function _parseRangeHeader
345
+ * @private
346
+ * @param {string} header - The raw `Range` header value.
347
+ * @param {number} size - The representation size in bytes.
348
+ * @returns {object|null} `{start, end}` inclusive · `{unsatisfiable: true}` · `null` (ignore).
349
+ *
350
+ * @example
351
+ * _parseRangeHeader('bytes=0-499', 1000); // -> { start: 0, end: 499 }
352
+ * _parseRangeHeader('bytes=-500', 1000); // -> { start: 500, end: 999 }
353
+ * _parseRangeHeader('bytes=0-1,5-9', 1000); // -> null (multi-range: full 200)
354
+ * _parseRangeHeader('bytes=1000-', 1000); // -> { unsatisfiable: true } (416)
355
+ */
356
+ function _parseRangeHeader(header, size) {
357
+ if ( typeof(header) != 'string' ) {
358
+ return null;
359
+ }
360
+ var m = header.match(/^\s*bytes\s*=\s*(\d*)\s*-\s*(\d*)\s*$/);
361
+ if ( !m ) {
362
+ return null;
363
+ }
364
+ var startStr = m[1], endStr = m[2];
365
+ if ( startStr === '' && endStr === '' ) {
366
+ return null; // "bytes=-" is garbage
367
+ }
368
+ if ( startStr === '' ) {
369
+ // suffix form `-n`: the last n bytes
370
+ var n = parseInt(endStr, 10);
371
+ if ( n === 0 || size === 0 ) {
372
+ return { unsatisfiable: true }; // a -0 suffix matches no byte; empty matches none
373
+ }
374
+ var s = size - n;
375
+ return { start: (s > 0) ? s : 0, end: size - 1 };
376
+ }
377
+ var start = parseInt(startStr, 10);
378
+ if ( size === 0 || start >= size ) {
379
+ return { unsatisfiable: true };
380
+ }
381
+ var end = ( endStr === '' ) ? size - 1 : parseInt(endStr, 10);
382
+ if ( end < start ) {
383
+ return null; // last-byte-pos < first-byte-pos: invalid spec, ignore (RFC 9110)
384
+ }
385
+ return { start: start, end: Math.min(end, size - 1) };
386
+ }
387
+
388
+ /**
389
+ * Resolve the Content-Type a stored object is served with.
390
+ *
391
+ * The stored contentType is UPLOADER-supplied and stored verbatim (untrusted
392
+ * at the seam), so serving it back on the app's own origin is a stored-XSS
393
+ * vector: a declared `text/html`/`image/svg+xml` renders as active content
394
+ * and `nosniff` does not stop a DECLARED type. Fail-closed: active-content
395
+ * types downgrade to `application/octet-stream` unless the app passes an
396
+ * explicit `opts.contentType` — the app's informed choice is served verbatim.
397
+ *
398
+ * @function _resolveServedContentType
399
+ * @private
400
+ * @param {string} [optsContentType] - The caller's explicit choice; wins verbatim.
401
+ * @param {string} [metaContentType] - The stored, uploader-supplied MIME type.
402
+ * @returns {string} The Content-Type to serve.
403
+ *
404
+ * @example
405
+ * _resolveServedContentType(null, 'image/png'); // -> 'image/png'
406
+ * _resolveServedContentType(null, 'text/html'); // -> 'application/octet-stream'
407
+ * _resolveServedContentType('image/svg+xml', 'x/y'); // -> 'image/svg+xml' (explicit)
408
+ */
409
+ function _resolveServedContentType(optsContentType, metaContentType) {
410
+ if ( typeof(optsContentType) == 'string' && optsContentType !== '' ) {
411
+ return optsContentType;
412
+ }
413
+ if ( typeof(metaContentType) == 'string' && metaContentType !== '' ) {
414
+ if ( /(html|xml|svg|javascript|ecmascript)/i.test(metaContentType) ) {
415
+ return 'application/octet-stream';
416
+ }
417
+ return metaContentType;
418
+ }
419
+ return 'application/octet-stream';
420
+ }
421
+
329
422
  /**
330
423
  * @class SuperController
331
424
  * @constructor
@@ -1806,7 +1899,10 @@ function SuperController(options) {
1806
1899
  * HTTP/1.1: response.write() with automatic chunked transfer-encoding
1807
1900
  *
1808
1901
  * The iterable should yield strings or Buffers. Objects are coerced via String().
1809
- * Upstream response headers (CORS, etc.) are preserved in the initial headers frame.
1902
+ * Buffers pass through byte-exact on non-SSE content-types (SSE decodes them as
1903
+ * UTF-8 text). HEAD requests answer headers-only — the iterable is never consumed.
1904
+ * Upstream response headers (CORS, Content-Range, etc.) are preserved in the initial
1905
+ * headers frame, and the delegate's own defaults yield to pre-set values.
1810
1906
  *
1811
1907
  * @param {AsyncIterable} asyncIterable - Source of chunks; typically an AI SDK stream
1812
1908
  * @param {string} [contentType] - Response Content-Type (default: text/event-stream)
@@ -2472,6 +2568,20 @@ function SuperController(options) {
2472
2568
  *
2473
2569
  * if you are free to use the redirection [ code ] of your choice, we've set it to 301 by default
2474
2570
  *
2571
+ * Add [ keep-params ] to carry the incoming request's query string onto the
2572
+ * redirect target (#B352). Default is `false`: the target is used verbatim and the
2573
+ * caller's query is dropped, which is the historical behaviour of every redirect
2574
+ * route. Set it when the redirect is a path normalisation and must stay transparent
2575
+ * to request state — the framework's own auto-generated `webroot@<bundle>` route
2576
+ * does exactly that, which is why `/webroot?token=…` now lands on
2577
+ * `/webroot/?token=…` instead of losing the parameter:
2578
+ * { "control": "redirect", "path": "/documentation/", "keep-params": true }
2579
+ *
2580
+ * Only a LOCAL target inherits the query. An absolute [ url ] names another origin,
2581
+ * and forwarding the caller's parameters there would disclose whatever the query
2582
+ * carried to a third party, so the flag is ignored for the absolute form. If the
2583
+ * target already carries a query the incoming one is appended with `&`.
2584
+ *
2475
2585
  *
2476
2586
  * 2) By calling this.redirect(rule, [ignoreWebRoot]):
2477
2587
  * ------------------------------------------------
@@ -2793,6 +2903,51 @@ function SuperController(options) {
2793
2903
  //path = local.req.headers.host + path
2794
2904
  }
2795
2905
 
2906
+ // #B352 — `keep-params`: carry the incoming request's query string onto the
2907
+ // redirect target. The option has been documented as a redirect-route key
2908
+ // since the pre-GitHub import, but was never implemented: `keepParams` was
2909
+ // read into a local above and then dropped, so EVERY redirect-control route
2910
+ // silently discarded the caller's query.
2911
+ //
2912
+ // This is what made the framework's own auto-generated `webroot@<bundle>`
2913
+ // route lossy (config.js — it now sets the flag): that route's `param.path`
2914
+ // is a CONSTANT (the configured webroot), so nothing else could ever have
2915
+ // carried the query, and a bare-webroot hit carrying a token or a redirect
2916
+ // target — `/app?t=…` -> 302 `/app/` — arrived at the application with the
2917
+ // parameter already gone. A path-normalisation redirect must be transparent
2918
+ // to request state.
2919
+ //
2920
+ // Query source is `originalUrl || url`, the established idiom here (#B219,
2921
+ // pauseRequest, server.js access logs): the isaac engine strips the query
2922
+ // from `req.url` before controllers run and preserves the byte-exact
2923
+ // incoming URL on `req.originalUrl` (stamped as its listener's first
2924
+ // statement); express sets `originalUrl` natively. A request carrying
2925
+ // neither (bare/harness) simply contributes no query.
2926
+ //
2927
+ // Deliberately narrow scope — LOCAL targets only. An absolute `param.url`
2928
+ // names another origin, and forwarding the caller's parameters there would
2929
+ // hand a third party whatever the query carried (session tokens, ids). An
2930
+ // opt-in convenience flag must not be able to leak cross-origin, so the
2931
+ // absolute form is excluded rather than trusted.
2932
+ //
2933
+ // Placement is load-bearing: it runs BEFORE the `inheritedData` block below,
2934
+ // whose `?`-vs-`&` test must see the query appended here. On the wrong-method
2935
+ // (HEAD -> GET, 303) path both mechanisms fire, so the target carries the
2936
+ // query verbatim AND the `inheritedData` copy — redundant but consistent.
2937
+ if ( keepParams && !(/\:\/\//).test(path) ) {
2938
+ var _incomingUrl = local.req.originalUrl || local.req.url || '';
2939
+ var _queryIndex = _incomingUrl.indexOf('?');
2940
+ if ( _queryIndex > -1 ) {
2941
+ // verbatim — already percent-encoded as received, so re-encoding
2942
+ // would corrupt it. CR/LF stripped: a Location built from client
2943
+ // input must not be able to split the response header.
2944
+ var _incomingQuery = _incomingUrl.substring(_queryIndex + 1).replace(/[\r\n]/g, '');
2945
+ if ( _incomingQuery ) {
2946
+ path += ( (/\?/).test(path) ? '&' : '?' ) + _incomingQuery;
2947
+ }
2948
+ }
2949
+ }
2950
+
2796
2951
  var isPopinContext = false;
2797
2952
  if (
2798
2953
  typeof(req.routing.param.isPopinContext) != 'undefined'
@@ -2816,11 +2971,29 @@ function SuperController(options) {
2816
2971
  return;
2817
2972
  }
2818
2973
 
2974
+ // #B353 — HEAD is a SAFE method: it is GET without a response body, so a
2975
+ // redirect must treat it exactly as it treats GET. This gate exists to stop
2976
+ // an UNSAFE method being replayed against the target — its own warning says
2977
+ // "A redirection is not permitted in this scenario", which is a
2978
+ // POST/PUT/DELETE concern — but it tested `!== 'GET'`, so HEAD was swept in
2979
+ // with them. Every consequence was wrong for a safe method: a warning on a
2980
+ // route that explicitly lists HEAD in its own `method` list (the framework's
2981
+ // auto-generated `webroot@<bundle>` route does), a 303 telling the client to
2982
+ // re-issue as GET and fetch a body it deliberately did not ask for, and —
2983
+ // because switching the method made `originalMethod !== req.method` — an
2984
+ // `inheritedData` copy appended to the target that the same request as a GET
2985
+ // never receives. Admitting HEAD converges it on GET: same status, same
2986
+ // Location, no warning.
2987
+ //
2988
+ // Kept as string comparisons rather than a regex, per #P13 below, which
2989
+ // deliberately moved this condition off `/GET/i.test()`.
2990
+ var _reqMethod = req.method.toUpperCase();
2991
+ var _origMethod = originalMethod ? originalMethod.toUpperCase() : null;
2819
2992
  // replaced: !/GET/i.test() (#P13)
2820
2993
  if (
2821
- req.method.toUpperCase() !== 'GET'
2994
+ ( _reqMethod !== 'GET' && _reqMethod !== 'HEAD' )
2822
2995
  ||
2823
- originalMethod && originalMethod.toUpperCase() !== 'GET'
2996
+ ( _origMethod && _origMethod !== 'GET' && _origMethod !== 'HEAD' )
2824
2997
  ) { // trying to redirect using the wrong method ?
2825
2998
 
2826
2999
  console.warn(new Error('Your are trying to redirect using the wrong method: `'+ req.method+'`.\nThis can often occur while redirecting from a controller to another controller or from a bundle to another.\nA redirection is not permitted in this scenario.\nDon\'t panic :)\nSwitching request method to `GET` method instead.\n').message);
@@ -3398,6 +3571,290 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
3398
3571
  }
3399
3572
 
3400
3573
 
3574
+ /**
3575
+ * Serve a stored object over HTTP with full Range support — the read-side
3576
+ * companion of `store()`'s driver-routed upload path (#STO1).
3577
+ *
3578
+ * Terminal: renders the bytes (via `renderStream`) or ends the response
3579
+ * itself (304/416), or routes through `throwError` (404/500). The whole
3580
+ * HTTP protocol dance is owned here so applications never re-implement it:
3581
+ *
3582
+ * - `stat()`-gated: an unknown/released key answers 404; on the `stream`
3583
+ * strategy a finalize-heal residue (row write failed, bytes readable)
3584
+ * also 404s until the idempotent finalize heals the row.
3585
+ * - Strong validators: `ETag: "<key>"` (storage keys are immutable — every
3586
+ * strategy publishes via temp+rename and no in-place mutation API
3587
+ * exists) + `Last-Modified` from the publish time.
3588
+ * - Conditional GET: `If-None-Match` matching the key ETag → 304, no
3589
+ * driver read.
3590
+ * - Range (GET only, gated on `driver.capabilities.ranges`): a single
3591
+ * `bytes=` range → 206 with `Content-Range`/exact `Content-Length`;
3592
+ * unsatisfiable → 416 + `Content-Range: bytes *\/<size>`; multi-range /
3593
+ * other units / garbage → the full 200 (RFC-sanctioned ignore).
3594
+ * `If-Range` honours the Range only on an exact validator match —
3595
+ * anything unevaluable degrades to the full 200, fail-safe.
3596
+ * - `Accept-Ranges: bytes` advertised whenever the driver can serve them.
3597
+ * - Content-Type: `opts.contentType` verbatim (the app's informed choice),
3598
+ * else the STORED type with active-content downgrade — it is
3599
+ * uploader-supplied, so `text\/html`/`svg`/`xml`/`javascript` fall back
3600
+ * to `application\/octet-stream` (stored-XSS fail-closed). Every
3601
+ * response carries `X-Content-Type-Options: nosniff`.
3602
+ * - Caching: `Cache-Control: private, max-age=31536000, immutable` by
3603
+ * default (correct for immutable-per-key objects; `private` keeps
3604
+ * shared caches out of the application's authorization), overridable
3605
+ * verbatim via `opts.cacheControl`.
3606
+ * - HEAD answers headers-only (full-size accounting, no driver read).
3607
+ * - OFFLOAD (`capabilities.offload`, the `s3` adapter): GET/HEAD answer
3608
+ * **307** to a short-lived presigned URL instead of proxying the bytes
3609
+ * — after the 304 check, with the facade's decisions riding the URL as
3610
+ * signed `response-*` overrides (the DOWNGRADED content type included,
3611
+ * so the stored-XSS guard holds when the provider serves). Range goes
3612
+ * with the client to the provider, which answers 206/416 natively. The
3613
+ * redirect itself is `no-store` (it outlives no signature); the
3614
+ * payload's caching policy rides `response-cache-control`.
3615
+ * `opts.offload: false` forces the proxy path (`get`/`getRange`) —
3616
+ * private buckets, IP-gated egress, or byte-level control.
3617
+ *
3618
+ * Works identically on both engines: headers/status ride `local.res`, and
3619
+ * the byte emission is `renderStream`'s two arms.
3620
+ *
3621
+ * @param {string} driverName - The `settings.storage` driver name (as `store()` routed it).
3622
+ * @param {string} key - The opaque storage key (from the `store()` result slot).
3623
+ * @param {object} [opts] - Serving options.
3624
+ * @param {string} [opts.contentType] - Explicit Content-Type; served verbatim, bypasses the downgrade.
3625
+ * @param {string} [opts.cacheControl] - Explicit Cache-Control; replaces the immutable default.
3626
+ * @param {boolean} [opts.download] - `true` → `Content-Disposition: attachment`.
3627
+ * @param {string} [opts.filename] - Download filename (implies attachment); defaults to the stored originalName.
3628
+ * @param {boolean} [opts.offload] - `false` → proxy the bytes even on an offload-capable
3629
+ * driver (no redirect). Default: offload when the
3630
+ * driver can.
3631
+ * @returns {void}
3632
+ *
3633
+ * @example
3634
+ * // a document route: GET /files/:id — Range, 304 and HEAD handled for free
3635
+ * this.download = function(req, res) {
3636
+ * var self = this;
3637
+ * var doc = getDocFromDb(req.params.id); // { storageKey, mime, name }
3638
+ * self.serveFromStorage('media', doc.storageKey, { contentType: doc.mime });
3639
+ * };
3640
+ *
3641
+ * @example
3642
+ * // force a download dialog with a safe filename
3643
+ * self.serveFromStorage('media', record.storageKey, { download: true, filename: 'report-2026.pdf' });
3644
+ */
3645
+ this.serveFromStorage = function(driverName, key, opts) {
3646
+ // #B31/#B38 family — released-response guard: a prior terminal exit
3647
+ // nulled the per-request refs; a live request is unaffected.
3648
+ if ( local.res == null ) {
3649
+ return;
3650
+ }
3651
+ opts = opts || {};
3652
+
3653
+ var request = local.req;
3654
+ var response = local.res;
3655
+ var method = ( request && request.method ) ? request.method.toUpperCase() : 'GET';
3656
+
3657
+ var driver = null;
3658
+ try {
3659
+ driver = lib.storage.get(driverName);
3660
+ } catch (acquireErr) {
3661
+ // not configured / unknown driver — an app config error, never a 404
3662
+ return self.throwError(response, 500, acquireErr);
3663
+ }
3664
+
3665
+ driver.stat(key, function onServeStat(statErr, meta) {
3666
+ // re-guard after the async hop (the #M1/#B37 discipline)
3667
+ if ( local.res == null ) {
3668
+ return;
3669
+ }
3670
+ if ( statErr ) {
3671
+ return self.throwError(response, 500, statErr);
3672
+ }
3673
+ if ( !meta ) {
3674
+ return self.throwError(response, 404, new Error('serveFromStorage(): no object for key `' + key + '` on driver `' + driverName + '`'));
3675
+ }
3676
+
3677
+ var size = meta.size;
3678
+ var contentType = _resolveServedContentType(opts.contentType, meta.contentType);
3679
+ var etag = '"' + key + '"';
3680
+ var lastModified = ( typeof(meta.createdAt) == 'number' ) ? new Date(meta.createdAt).toUTCString() : null;
3681
+ var rangesOn = !!( driver.capabilities && driver.capabilities.ranges );
3682
+
3683
+ /**
3684
+ * Headers every serve outcome shares (200/206/304/416/HEAD).
3685
+ * Applied only once an outcome is decided, so a driver error can
3686
+ * still route through `throwError` with no Range headers leaked.
3687
+ *
3688
+ * @inner
3689
+ * @returns {void}
3690
+ */
3691
+ var setCommonHeaders = function() {
3692
+ response.setHeader('x-content-type-options', 'nosniff');
3693
+ response.setHeader('etag', etag);
3694
+ if ( lastModified ) {
3695
+ response.setHeader('last-modified', lastModified);
3696
+ }
3697
+ if ( rangesOn ) {
3698
+ response.setHeader('accept-ranges', 'bytes');
3699
+ }
3700
+ response.setHeader('cache-control',
3701
+ ( typeof(opts.cacheControl) == 'string' && opts.cacheControl !== '' )
3702
+ ? opts.cacheControl
3703
+ : 'private, max-age=31536000, immutable'
3704
+ );
3705
+ if ( opts.download === true || typeof(opts.filename) == 'string' ) {
3706
+ // the stored originalName is uploader-supplied: strip control
3707
+ // chars so setHeader cannot throw on CR/LF (header injection)
3708
+ var _fname = String(opts.filename || meta.originalName || 'download').replace(/[\x00-\x1f\x7f]/g, '');
3709
+ response.setHeader('content-disposition', formatAttachmentDisposition(_fname));
3710
+ }
3711
+ };
3712
+
3713
+ // Conditional GET — If-None-Match vs the strong key ETag (weak
3714
+ // comparison per RFC 9110, hence indexOf: a W/-prefixed echo matches).
3715
+ var inm = ( request && request.headers ) ? request.headers['if-none-match'] : null;
3716
+ if ( inm && ( method === 'GET' || method === 'HEAD' )
3717
+ && ( inm === '*' || String(inm).indexOf(etag) > -1 )
3718
+ ) {
3719
+ setCommonHeaders();
3720
+ response.statusCode = 304;
3721
+ local.req = null; local.res = null; local.next = null;
3722
+ return response.end();
3723
+ }
3724
+
3725
+ // #STO1 s3 — OFFLOAD: an offload-capable driver hands the byte
3726
+ // transfer to its provider through a short-lived presigned URL.
3727
+ // Runs AFTER the 304 check (the key ETag needs no presign) and
3728
+ // carries this facade's decisions into the PROVIDER's response as
3729
+ // signed response-* overrides — the DOWNGRADED content type
3730
+ // included, which is what keeps the stored-XSS guard intact when
3731
+ // the provider serves the bytes. Range is deliberately NOT
3732
+ // evaluated here: the client re-issues it against the redirect
3733
+ // target and the provider answers 206/416 natively. 307 preserves
3734
+ // the method (HEAD stays HEAD). The redirect itself is `no-store`
3735
+ // — a cached redirect would outlive its signature — while the
3736
+ // payload's caching policy rides response-cache-control.
3737
+ var offloadOn = !!( driver.capabilities && driver.capabilities.offload ) && ( opts.offload !== false );
3738
+ if ( offloadOn && ( method === 'GET' || method === 'HEAD' ) ) {
3739
+ var wantsAttachment = ( opts.download === true || typeof(opts.filename) == 'string' );
3740
+ driver.resolve(key, {
3741
+ contentType : contentType,
3742
+ download : wantsAttachment,
3743
+ filename : wantsAttachment
3744
+ ? String(opts.filename || meta.originalName || 'download').replace(/[\x00-\x1f\x7f]/g, '')
3745
+ : undefined,
3746
+ cacheControl : ( typeof(opts.cacheControl) == 'string' && opts.cacheControl !== '' )
3747
+ ? opts.cacheControl
3748
+ : 'private, max-age=31536000, immutable'
3749
+ }, function onServeResolve(resolveErr, resolved) {
3750
+ if ( local.res == null ) {
3751
+ return;
3752
+ }
3753
+ if ( resolveErr ) {
3754
+ return self.throwError(response, ( resolveErr.code === 'STORAGE_NO_OBJECT' ) ? 404 : 500, resolveErr);
3755
+ }
3756
+ if ( !resolved || resolved.kind !== 'url' || typeof(resolved.url) != 'string' ) {
3757
+ // capability said offload, resolve() answered something
3758
+ // else — a driver contract violation, surfaced loudly
3759
+ // rather than silently degraded to the proxy path.
3760
+ return self.throwError(response, 500, new Error('serveFromStorage(): driver `' + driverName + '` declares capabilities.offload but resolve() returned no `{kind:\'url\'}` — driver contract violation'));
3761
+ }
3762
+ response.setHeader('x-content-type-options', 'nosniff');
3763
+ response.setHeader('cache-control', 'private, no-store');
3764
+ response.setHeader('location', resolved.url);
3765
+ response.statusCode = 307;
3766
+ local.req = null; local.res = null; local.next = null;
3767
+ return response.end();
3768
+ });
3769
+ return;
3770
+ }
3771
+
3772
+ // HEAD — full-size accounting, headers only, no driver read; the
3773
+ // renderStream HEAD branch ends the response without a body.
3774
+ if ( method === 'HEAD' ) {
3775
+ setCommonHeaders();
3776
+ response.setHeader('content-length', String(size));
3777
+ response.statusCode = response.statusCode || 200;
3778
+ return self.renderStream(null, contentType);
3779
+ }
3780
+
3781
+ // Range evaluation — GET only, and only when the driver can serve
3782
+ // ranges (capability-gated: an offloading adapter that cannot is
3783
+ // transparently answered with the full 200).
3784
+ var range = null;
3785
+ if ( method === 'GET' && rangesOn && request && request.headers && request.headers.range ) {
3786
+ var ifRange = request.headers['if-range'];
3787
+ var ifRangeOk = true;
3788
+ if ( typeof(ifRange) == 'string' && ifRange !== '' ) {
3789
+ // exact validator match only; anything unevaluable → full 200
3790
+ ifRangeOk = ( ifRange === etag ) || ( lastModified != null && ifRange === lastModified );
3791
+ }
3792
+ if ( ifRangeOk ) {
3793
+ range = _parseRangeHeader(request.headers.range, size);
3794
+ }
3795
+ }
3796
+
3797
+ if ( range && range.unsatisfiable ) {
3798
+ setCommonHeaders();
3799
+ response.setHeader('content-range', 'bytes */' + size);
3800
+ response.statusCode = 416;
3801
+ local.req = null; local.res = null; local.next = null;
3802
+ return response.end();
3803
+ }
3804
+
3805
+ /**
3806
+ * Apply the decided outcome's headers and stream the bytes.
3807
+ * Runs only in a driver-success callback (headers-on-success).
3808
+ *
3809
+ * @inner
3810
+ * @param {number} status - 200 or 206.
3811
+ * @param {object} extraHeaders - Outcome-specific headers.
3812
+ * @param {object} readable - The driver's byte stream.
3813
+ * @returns {void}
3814
+ */
3815
+ var sendStream = function(status, extraHeaders, readable) {
3816
+ if ( local.res == null ) {
3817
+ return;
3818
+ }
3819
+ setCommonHeaders();
3820
+ for (var h in extraHeaders) {
3821
+ response.setHeader(h, extraHeaders[h]);
3822
+ }
3823
+ response.statusCode = status;
3824
+ return self.renderStream(readable, contentType);
3825
+ };
3826
+
3827
+ if ( range ) {
3828
+ driver.getRange(key, range.start, range.end, function onServeRange(rErr, readable) {
3829
+ if ( local.res == null ) {
3830
+ return;
3831
+ }
3832
+ if ( rErr ) {
3833
+ // post-stat race (cas grace expiry, vanished file) → 404;
3834
+ // anything else is an I/O anomaly → 500
3835
+ return self.throwError(response, ( rErr.code === 'STORAGE_NO_OBJECT' ) ? 404 : 500, rErr);
3836
+ }
3837
+ sendStream(206, {
3838
+ 'content-range' : 'bytes ' + range.start + '-' + range.end + '/' + size,
3839
+ 'content-length' : String(range.end - range.start + 1)
3840
+ }, readable);
3841
+ });
3842
+ return;
3843
+ }
3844
+
3845
+ driver.get(key, function onServeGet(gErr, readable) {
3846
+ if ( local.res == null ) {
3847
+ return;
3848
+ }
3849
+ if ( gErr ) {
3850
+ return self.throwError(response, ( gErr.code === 'STORAGE_NO_OBJECT' ) ? 404 : 500, gErr);
3851
+ }
3852
+ sendStream(200, { 'content-length': String(size) }, readable);
3853
+ });
3854
+ });
3855
+ }
3856
+
3857
+
3401
3858
  /**
3402
3859
  * Store file(s) to a targeted directory - Will create target if new
3403
3860
  * You only need to provide the destination path
@@ -5973,17 +6430,40 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5973
6430
 
5974
6431
  /**
5975
6432
  * Push a Server-Sent Events payload to connected clients.
5976
- * Targets the client whose `sessionID` matches the current session,
5977
- * or broadcasts to all active clients when no session is found.
5978
6433
  *
5979
- * @param {object|null} payload - Data to push; falls back to `req[method].payload` when `null`
5980
- * @param {object} [option] - Push options (e.g. `{ section: '...' }`)
5981
- * @param {function} [callback] - `callback(err, result)`
6434
+ * The recipient is decided SERVER-side and can never be chosen by the
6435
+ * request body (#B364): an explicit `option.sessionID` wins, else the
6436
+ * payload goes to the caller's own session. With neither — and without an
6437
+ * explicit broadcast — this is a no-op that warns, because a push with no
6438
+ * resolvable recipient is a bug, and the previous fail-OPEN answer to it
6439
+ * was to send to everybody.
6440
+ *
6441
+ * Reaching every connected client requires `option.broadcast === true`,
6442
+ * supplied by your code rather than inferred from a missing value.
6443
+ *
6444
+ * @param {object|null} payload - Data to push; falls back to `req[method].payload` when `null`
6445
+ * @param {object} [option] - Push options, also forwarded to the transport (e.g. `{ compress: true }`)
6446
+ * @param {string} [option.sessionID] - Explicit recipient session id; defaults to the caller's own session
6447
+ * @param {boolean} [option.broadcast] - `true` (strictly) to reach every connected client
6448
+ * @param {string} [option.section] - Section stamped onto the payload; falls back to `req[method].section`
6449
+ * @param {function} [callback] - `callback(err, result)`
5982
6450
  * @returns {void}
6451
+ *
6452
+ * @example
6453
+ * // to the caller's own session
6454
+ * self.push({ event: 'saved' });
6455
+ *
6456
+ * @example
6457
+ * // to a specific session your code selected
6458
+ * self.push({ event: 'invited' }, { sessionID: invitee.sessionId });
6459
+ *
6460
+ * @example
6461
+ * // to everyone — deliberate, never implicit
6462
+ * self.push({ event: 'maintenance' }, { broadcast: true });
5983
6463
  */
5984
6464
  this.push = function(payload, option, callback) {
5985
6465
 
5986
- // #B38 — released-response guard (see #B31): push is a fire-and-forget broadcast
6466
+ // #B38 — released-response guard (see #B31): push is a fire-and-forget send
5987
6467
  // over the SSE/engine.io clients; on a released request (per-request refs nulled by
5988
6468
  // a terminal exit) a no-op return is correct — the response this request would have
5989
6469
  // pushed to is already gone. Live requests are unaffected (guard skipped).
@@ -5993,11 +6473,34 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
5993
6473
 
5994
6474
  var req = local.req, res = local.res;
5995
6475
  var method = req.method.toLowerCase();
5996
- // if no session defined, will push to all active clients
5997
- // resuming current session
5998
- var sessionId = ( typeof(req[method].sessionID) != 'undefined' ) ? req[method].sessionID : null;
5999
- // retrieve section if existing
6000
- var section = ( typeof(req[method].section) != 'undefined' ) ? req[method].section : null;
6476
+
6477
+ // #B364 — the recipient is NEVER read from the request body. It used to be
6478
+ // (`req[method].sessionID`), which let a caller aim a push at any session by
6479
+ // sending an id — and, when the id was absent, at EVERY connected client.
6480
+ // Order: explicit server-supplied id → the caller's own session → nothing.
6481
+ var broadcast = ( option != null && option.broadcast === true );
6482
+ var sessionId = null;
6483
+ if ( option != null && typeof(option.sessionID) == 'string' && option.sessionID !== '' ) {
6484
+ sessionId = option.sessionID;
6485
+ } else if ( typeof(req.sessionID) != 'undefined' && req.sessionID ) {
6486
+ sessionId = req.sessionID;
6487
+ } else if ( req.session != null && typeof(req.session.id) != 'undefined' && req.session.id ) {
6488
+ sessionId = req.session.id;
6489
+ }
6490
+
6491
+ // Fail CLOSED: no recipient and no explicit broadcast sends nothing at all.
6492
+ if ( !broadcast && !sessionId ) {
6493
+ console.warn('[CONTROLLER][ push ] no recipient: the request has no session and no `option.sessionID` was given, so nothing was sent. Pass `{ sessionID: <id> }` to target a session, or `{ broadcast: true }` to reach every connected client.');
6494
+ return;
6495
+ }
6496
+
6497
+ // retrieve section if existing — an explicit option wins over the request
6498
+ var section = null;
6499
+ if ( option != null && typeof(option.section) != 'undefined' ) {
6500
+ section = option.section;
6501
+ } else if ( typeof(req[method].section) != 'undefined' ) {
6502
+ section = req[method].section;
6503
+ }
6001
6504
 
6002
6505
  if (!payload) {
6003
6506
  payload = null;
@@ -6028,20 +6531,27 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
6028
6531
  clients = self.serverInstance.eio.clients;
6029
6532
  if ( clients ) {
6030
6533
  for (let s in clients) {
6031
- if ( !clients[s].constructor.name == 'Socket' ) {
6534
+ // #B364 — was `!clients[s].constructor.name == 'Socket'`, which parses
6535
+ // as `(!name) == 'Socket'` and is therefore always false: the guard
6536
+ // never once skipped a non-socket entry.
6537
+ if ( clients[s].constructor.name !== 'Socket' ) {
6032
6538
  continue;
6033
6539
  }
6034
6540
 
6035
6541
  if (
6036
- // session filter
6037
- sessionId
6038
- && typeof(clients[s].sessionId) != 'undefined'
6039
- && clients[s].sessionId == sessionId
6542
+ // every client, only when the caller asked for it
6543
+ broadcast
6040
6544
  ||
6041
- // send to all clients if no specific sessionId defined
6042
- !sessionId
6545
+ // otherwise the resolved session, and nothing else
6546
+ (
6547
+ typeof(clients[s].sessionId) != 'undefined'
6548
+ && clients[s].sessionId == sessionId
6549
+ )
6043
6550
  ) {
6044
- clients[s].sendPacket("message", payload, options, callback);
6551
+ // #B364 — was `options`, an identifier that exists nowhere in this
6552
+ // scope: every call threw ReferenceError here before sending, so
6553
+ // push() had never delivered a packet in any published release.
6554
+ clients[s].sendPacket("message", payload, option, callback);
6045
6555
  }
6046
6556
  }
6047
6557
  }