gina 0.3.15-alpha.1 → 0.3.15-alpha.2

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 (410) hide show
  1. package/ROADMAP.md +21 -0
  2. package/framework/v0.3.15-alpha.2/VERSION +1 -0
  3. package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/index.js +13 -3
  4. package/framework/v0.3.15-alpha.2/core/plugins/lib/hsts/README.md +144 -0
  5. package/framework/v0.3.15-alpha.2/core/plugins/lib/hsts/package.json +22 -0
  6. package/framework/v0.3.15-alpha.2/core/plugins/lib/hsts/src/main.js +270 -0
  7. package/framework/v0.3.15-alpha.2/core/plugins/lib/origin-agent-cluster/README.md +84 -0
  8. package/framework/v0.3.15-alpha.2/core/plugins/lib/origin-agent-cluster/package.json +22 -0
  9. package/framework/v0.3.15-alpha.2/core/plugins/lib/origin-agent-cluster/src/main.js +153 -0
  10. package/framework/v0.3.15-alpha.2/core/plugins/lib/referrer-policy/README.md +97 -0
  11. package/framework/v0.3.15-alpha.2/core/plugins/lib/referrer-policy/package.json +22 -0
  12. package/framework/v0.3.15-alpha.2/core/plugins/lib/referrer-policy/src/main.js +198 -0
  13. package/framework/v0.3.15-alpha.2/core/plugins/lib/x-content-type-options/README.md +64 -0
  14. package/framework/v0.3.15-alpha.2/core/plugins/lib/x-content-type-options/package.json +22 -0
  15. package/framework/v0.3.15-alpha.2/core/plugins/lib/x-content-type-options/src/main.js +145 -0
  16. package/framework/v0.3.15-alpha.2/core/plugins/lib/x-frame-options/README.md +94 -0
  17. package/framework/v0.3.15-alpha.2/core/plugins/lib/x-frame-options/package.json +22 -0
  18. package/framework/v0.3.15-alpha.2/core/plugins/lib/x-frame-options/src/main.js +190 -0
  19. package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/index.js +52 -0
  20. package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/conf/settings.json +59 -0
  21. package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/package.json +1 -1
  22. package/gna.js +4 -4
  23. package/llms.txt +6 -0
  24. package/package.json +2 -2
  25. package/framework/v0.3.15-alpha.1/VERSION +0 -1
  26. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/AUTHORS +0 -0
  27. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/LICENSE +0 -0
  28. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/html/nolayout.html +0 -0
  29. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/html/static.html +0 -0
  30. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/img/android-chrome-192x192.png +0 -0
  31. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/img/android-chrome-512x512.png +0 -0
  32. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/img/apple-touch-icon.png +0 -0
  33. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/img/favicon-16x16.png +0 -0
  34. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/img/favicon-32x32.png +0 -0
  35. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/img/favicon.ico +0 -0
  36. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/README.md +0 -0
  37. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  38. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  39. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  40. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  41. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  42. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  43. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  44. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  45. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  46. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  47. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  48. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  49. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  50. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  51. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  52. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  53. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  54. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  55. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  56. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  57. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  58. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/config.js +0 -0
  59. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/ai/index.js +0 -0
  60. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/ai/lib/connector.js +0 -0
  61. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/index.js +0 -0
  62. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/connector.js +0 -0
  63. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  64. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  65. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  66. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/n1ql.js +0 -0
  67. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/session-store.js +0 -0
  68. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
  69. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  70. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  71. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/mongodb/index.js +0 -0
  72. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/mongodb/lib/connector.js +0 -0
  73. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  74. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/mongodb/lib/session-store.js +0 -0
  75. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/mysql/index.js +0 -0
  76. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/mysql/lib/connector.js +0 -0
  77. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/postgresql/index.js +0 -0
  78. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/postgresql/lib/connector.js +0 -0
  79. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/redis/index.js +0 -0
  80. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/redis/lib/session-store.js +0 -0
  81. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/scylladb/index.js +0 -0
  82. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/scylladb/lib/connector.js +0 -0
  83. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/scylladb/lib/session-store.js +0 -0
  84. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/sql-parser.js +0 -0
  85. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/sqlite/index.js +0 -0
  86. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/sqlite/lib/connector.js +0 -0
  87. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/connectors/sqlite/lib/session-store.js +0 -0
  88. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/content.encoding +0 -0
  89. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/controller/controller.framework.js +0 -0
  90. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/controller/controller.js +0 -0
  91. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/controller/controller.render-json.js +0 -0
  92. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/controller/controller.render-nunjucks.js +0 -0
  93. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/controller/controller.render-stream.js +0 -0
  94. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/controller/controller.render-swig.js +0 -0
  95. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/controller/controller.render-v1.js +0 -0
  96. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/controller/index.js +0 -0
  97. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/busboy-1.6.0/LICENSE +0 -0
  98. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/busboy-1.6.0/README.md +0 -0
  99. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  100. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  101. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  102. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  103. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/busboy-1.6.0/package.json +0 -0
  104. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  105. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  106. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/deps/streamsearch-1.1.0/package.json +0 -0
  107. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/dev/index.js +0 -0
  108. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/dev/lib/class.js +0 -0
  109. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/dev/lib/factory.js +0 -0
  110. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/dev/lib/tools.js +0 -0
  111. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/gna.js +0 -0
  112. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/locales/README.md +0 -0
  113. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/locales/currency.json +0 -0
  114. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/locales/dist/language/en.json +0 -0
  115. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/locales/dist/language/fr.json +0 -0
  116. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/locales/dist/region/en.json +0 -0
  117. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/locales/dist/region/fr.json +0 -0
  118. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/locales/index.js +0 -0
  119. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/mime.types +0 -0
  120. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/model/entity.js +0 -0
  121. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/model/index.js +0 -0
  122. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/model/template/entityFactory.js +0 -0
  123. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/model/template/index.js +0 -0
  124. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/README.md +0 -0
  125. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/csrf/README.md +0 -0
  126. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/csrf/package.json +0 -0
  127. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/csrf/src/main.js +0 -0
  128. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/session/README.md +0 -0
  129. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/session/package.json +0 -0
  130. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/session/src/main.js +0 -0
  131. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/storage/README.md +0 -0
  132. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/storage/build.json +0 -0
  133. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/storage/package.json +0 -0
  134. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/storage/src/main.js +0 -0
  135. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/validator/README.md +0 -0
  136. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/validator/build.json +0 -0
  137. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/validator/package.json +0 -0
  138. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/validator/src/form-validator.js +0 -0
  139. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/plugins/lib/validator/src/main.js +0 -0
  140. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/router.js +0 -0
  141. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/server.express.js +0 -0
  142. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/server.isaac.js +0 -0
  143. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/server.js +0 -0
  144. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/status.codes +0 -0
  145. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/_gitignore +0 -0
  146. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/config/app.json +0 -0
  147. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  148. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/config/routing.json +0 -0
  149. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/config/settings.json +0 -0
  150. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  151. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/config/templates.json +0 -0
  152. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  153. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  154. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  155. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  156. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle/locales/en.json +0 -0
  157. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  158. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  159. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  160. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  161. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  162. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  163. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  164. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_public/readme.md +0 -0
  165. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_public/sw.js +0 -0
  166. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  167. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  168. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  169. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  170. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  171. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/command/gina.bat.tpl +0 -0
  172. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/command/gina.tpl +0 -0
  173. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/conf/env.json +0 -0
  174. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/conf/manifest.json +0 -0
  175. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/conf/package.json +0 -0
  176. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/conf/statics.json +0 -0
  177. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/conf/templates.json +0 -0
  178. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/error/client/json/401.json +0 -0
  179. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/error/client/json/403.json +0 -0
  180. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/error/client/json/404.json +0 -0
  181. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/error/server/html/50x.html +0 -0
  182. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/error/server/json/500.json +0 -0
  183. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/error/server/json/503.json +0 -0
  184. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/core/template/extensions/logger/config.json +0 -0
  185. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/console.js +0 -0
  186. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/context.js +0 -0
  187. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/data/LICENSE +0 -0
  188. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/data/README.md +0 -0
  189. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/data/package.json +0 -0
  190. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/data/src/main.js +0 -0
  191. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/dateFormat.js +0 -0
  192. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/index.js +0 -0
  193. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/json/LICENSE +0 -0
  194. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/json/README.md +0 -0
  195. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/json/package.json +0 -0
  196. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/json/src/main.js +0 -0
  197. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/path.js +0 -0
  198. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/plugins/README.md +0 -0
  199. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/plugins/package.json +0 -0
  200. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/plugins/src/api-error.js +0 -0
  201. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/plugins/src/main.js +0 -0
  202. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/prototypes.js +0 -0
  203. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/task.js +0 -0
  204. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/helpers/text.js +0 -0
  205. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/archiver/README.md +0 -0
  206. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/archiver/build.json +0 -0
  207. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/archiver/package.json +0 -0
  208. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/archiver/src/dep/jszip.min.js +0 -0
  209. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/archiver/src/main.js +0 -0
  210. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/async/package.json +0 -0
  211. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/async/src/main.js +0 -0
  212. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cache/README.md +0 -0
  213. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cache/build.json +0 -0
  214. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cache/package.json +0 -0
  215. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cache/src/main.js +0 -0
  216. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/aliases.json +0 -0
  217. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/add.js +0 -0
  218. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/arguments.json +0 -0
  219. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/build.js +0 -0
  220. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/copy.js +0 -0
  221. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/cp.js +0 -0
  222. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/help.js +0 -0
  223. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/help.txt +0 -0
  224. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/list.js +0 -0
  225. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/mcp-start.js +0 -0
  226. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/mcp.js +0 -0
  227. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/oas.js +0 -0
  228. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/openapi.js +0 -0
  229. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/remove.js +0 -0
  230. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/rename.js +0 -0
  231. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/restart.js +0 -0
  232. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/rm.js +0 -0
  233. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/start.js +0 -0
  234. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/status.js +0 -0
  235. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/bundle/stop.js +0 -0
  236. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/cache/stats.js +0 -0
  237. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/connector/add.js +0 -0
  238. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/connector/arguments.json +0 -0
  239. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/connector/help.js +0 -0
  240. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/connector/help.txt +0 -0
  241. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/connector/list.js +0 -0
  242. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/connector/migrate.js +0 -0
  243. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/connector/remove.js +0 -0
  244. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/connector/rm.js +0 -0
  245. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/add.js +0 -0
  246. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/get.js +0 -0
  247. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/help.js +0 -0
  248. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/help.txt +0 -0
  249. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/link-dev.js +0 -0
  250. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/list.js +0 -0
  251. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/remove.js +0 -0
  252. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/rm.js +0 -0
  253. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/set.js +0 -0
  254. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/unset.js +0 -0
  255. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/env/use.js +0 -0
  256. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/arguments.json +0 -0
  257. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/build.js +0 -0
  258. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/dot.js +0 -0
  259. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/get.js +0 -0
  260. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/help.js +0 -0
  261. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/help.txt +0 -0
  262. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/init.js +0 -0
  263. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/link-node-modules.js +0 -0
  264. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/link.js +0 -0
  265. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/msg.json +0 -0
  266. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/open.js +0 -0
  267. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/restart.js +0 -0
  268. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/set.js +0 -0
  269. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/start.js +0 -0
  270. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/status.js +0 -0
  271. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/stop.js +0 -0
  272. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/tail.js +0 -0
  273. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/update.js +0 -0
  274. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/framework/version.js +0 -0
  275. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/gina-dev.1.md +0 -0
  276. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/gina-framework.1.md +0 -0
  277. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/gina.1.md +0 -0
  278. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/helper.js +0 -0
  279. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/i18n/add.js +0 -0
  280. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/i18n/arguments.json +0 -0
  281. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/i18n/export.js +0 -0
  282. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/i18n/help.js +0 -0
  283. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/i18n/help.txt +0 -0
  284. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/i18n/import.js +0 -0
  285. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/i18n/scan.js +0 -0
  286. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/index.js +0 -0
  287. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/inspector/help.js +0 -0
  288. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/inspector/help.txt +0 -0
  289. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/inspector/open.js +0 -0
  290. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/minion/help.js +0 -0
  291. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/minion/help.txt +0 -0
  292. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/msg.json +0 -0
  293. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/port/help.js +0 -0
  294. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/port/help.txt +0 -0
  295. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/port/inc/scan.js +0 -0
  296. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/port/list.js +0 -0
  297. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/port/reset.js +0 -0
  298. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/port/set.js +0 -0
  299. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/add.js +0 -0
  300. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/arguments.json +0 -0
  301. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/build.js +0 -0
  302. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/help.js +0 -0
  303. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/help.txt +0 -0
  304. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/import.js +0 -0
  305. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/list.js +0 -0
  306. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/move.js +0 -0
  307. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/remove.js +0 -0
  308. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/rename.js +0 -0
  309. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/restart.js +0 -0
  310. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/rm.js +0 -0
  311. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/start.js +0 -0
  312. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/status.js +0 -0
  313. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/project/stop.js +0 -0
  314. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/protocol/help.js +0 -0
  315. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/protocol/help.txt +0 -0
  316. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/protocol/list.js +0 -0
  317. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/protocol/set.js +0 -0
  318. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/add.js +0 -0
  319. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/help.js +0 -0
  320. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/help.txt +0 -0
  321. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/link-local.js +0 -0
  322. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/link-production.js +0 -0
  323. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/list.js +0 -0
  324. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/remove.js +0 -0
  325. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/rm.js +0 -0
  326. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/scope/use.js +0 -0
  327. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/service/help.js +0 -0
  328. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/service/help.txt +0 -0
  329. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/service/list.js +0 -0
  330. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cmd/view/add.js +0 -0
  331. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/collection/README.md +0 -0
  332. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/collection/build.json +0 -0
  333. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/collection/package.json +0 -0
  334. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/collection/src/main.js +0 -0
  335. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/config.js +0 -0
  336. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/connector-registry/package.json +0 -0
  337. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/connector-registry/src/main.js +0 -0
  338. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cron/README.md +0 -0
  339. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cron/package.json +0 -0
  340. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/cron/src/main.js +0 -0
  341. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/domain/LICENSE +0 -0
  342. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/domain/README.md +0 -0
  343. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/domain/package.json +0 -0
  344. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/domain/src/main.js +0 -0
  345. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/generator/index.js +0 -0
  346. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/i18n/package.json +0 -0
  347. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/i18n/src/main.js +0 -0
  348. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/index.js +0 -0
  349. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/inherits/LICENSE +0 -0
  350. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/inherits/README.md +0 -0
  351. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/inherits/package.json +0 -0
  352. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/inherits/src/main.js +0 -0
  353. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/inspector-redact/package.json +0 -0
  354. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/inspector-redact/src/main.js +0 -0
  355. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/README.md +0 -0
  356. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/package.json +0 -0
  357. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/containers/default/index.js +0 -0
  358. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/containers/file/index.js +0 -0
  359. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  360. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  361. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/containers/mq/index.js +0 -0
  362. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/containers/mq/listener.js +0 -0
  363. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/containers/mq/speaker.js +0 -0
  364. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/helper.js +0 -0
  365. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/logger/src/main.js +0 -0
  366. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/math/index.js +0 -0
  367. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/mcp-dispatch/package.json +0 -0
  368. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/mcp-dispatch/src/main.js +0 -0
  369. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/mcp-http/package.json +0 -0
  370. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/mcp-http/src/main.js +0 -0
  371. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/mcp-server/package.json +0 -0
  372. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/mcp-server/src/main.js +0 -0
  373. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/merge/README.md +0 -0
  374. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/merge/package.json +0 -0
  375. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/merge/src/main.js +0 -0
  376. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/metrics/package.json +0 -0
  377. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/metrics/src/main.js +0 -0
  378. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/model.js +0 -0
  379. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/nunjucks-filters/README.md +0 -0
  380. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/nunjucks-filters/package.json +0 -0
  381. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/nunjucks-filters/src/main.js +0 -0
  382. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/nunjucks-resolver/package.json +0 -0
  383. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/nunjucks-resolver/src/main.js +0 -0
  384. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/proc.js +0 -0
  385. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/routing/README.md +0 -0
  386. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/routing/build.json +0 -0
  387. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/routing/package.json +0 -0
  388. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/routing/src/main.js +0 -0
  389. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/routing/src/radix.js +0 -0
  390. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/routing-introspect/package.json +0 -0
  391. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/routing-introspect/src/main.js +0 -0
  392. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/secrets/package.json +0 -0
  393. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/secrets/src/backends/env.js +0 -0
  394. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/secrets/src/main.js +0 -0
  395. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/session-store.js +0 -0
  396. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/shell.js +0 -0
  397. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/state.js +0 -0
  398. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/swig-filters/README.md +0 -0
  399. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/swig-filters/package.json +0 -0
  400. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/swig-filters/src/main.js +0 -0
  401. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/swig-resolver/package.json +0 -0
  402. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/swig-resolver/src/main.js +0 -0
  403. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/url/README.md +0 -0
  404. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/url/index.js +0 -0
  405. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/url/routing.json +0 -0
  406. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/uuid/package.json +0 -0
  407. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/uuid/src/main.js +0 -0
  408. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/validator.js +0 -0
  409. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/watcher/package.json +0 -0
  410. /package/framework/{v0.3.15-alpha.1 → v0.3.15-alpha.2}/lib/watcher/src/main.js +0 -0
package/ROADMAP.md CHANGED
@@ -156,6 +156,27 @@ Cross-site request forgery protection. Three-phase defense-in-depth plan aligned
156
156
 
157
157
  ---
158
158
 
159
+ ## Web Security Headers
160
+
161
+ HTTP security response headers as opt-in `gina.plugins.*` middlewares, mirroring the `Session` (#CSRF1) and `Csrf` (#CSRF2/#CSRF3) plugin shape. Each plugin is single-concern, opt-in by default-off, and reads its config from a flat top-level `settings.json` key. Native implementation — no `helmet` dependency. **Phase 1** covers the five modern critical headers (X-Content-Type-Options, X-Frame-Options, Referrer-Policy, HSTS, Origin-Agent-Cluster) — all shipped in `0.3.15-alpha`. **Phase 1.5** covers helmet-parity gap-fill (HidePoweredBy, X-DNS-Prefetch-Control, X-XSS-Protection, X-Download-Options, X-Permitted-Cross-Domain-Policies) — defense-in-depth + parity-with-helmet narrative; modest practical value. **Phase 2** covers CSP + COEP/COOP/CORP (dynamic / higher-break-risk, deferred to `0.4.0`). CORS handling is separate and already lives in `core/server.js` (request-side).
162
+
163
+ | Status | Feature | Version | Target |
164
+ | --- | --- | --- | --- |
165
+ | ✅ | **`X-Content-Type-Options: nosniff` middleware** — Opt-in plugin `gina.plugins.XContentTypeOptions()` returns an Express-compatible middleware that emits the `X-Content-Type-Options: nosniff` response header on every response (the only valid value per RFC 7034 / WHATWG Fetch Standard). Adoption is two lines: `var xContentTypeOptions = require('gina').plugins.XContentTypeOptions(); app.use(xContentTypeOptions);`. Idempotent — if an earlier middleware already set the header, the existing value is preserved (safe to stack with helmet-style upstream gates). No `enabled` flag — register to opt in, don't register to opt out. Settings template seeds `xContentTypeOptions: {}` with the block reserved for future fields (per-route opt-out, etc.); future additions do not need an API break. Establishes the per-header response-middleware shape that the rest of Phase 1 (X-Frame-Options, Referrer-Policy, HSTS, Origin-Agent-Cluster) will mirror. 33 unit tests; full suite 5467/5467. | `0.3.15-alpha` | 2026-05-17 |
166
+ | ✅ | **`X-Frame-Options` clickjacking-defense middleware** — Opt-in plugin `gina.plugins.XFrameOptions({ value })`. Settings: `xFrameOptions.value: "DENY"` or `"SAMEORIGIN"` (default `"SAMEORIGIN"`). Caller options always win over settings; values are normalised to uppercase. Validation rejects the legacy `"ALLOW-FROM"` value at factory call time with a dedicated error pointing at the modern `Content-Security-Policy: frame-ancestors` replacement (modern browsers never honoured ALLOW-FROM cross-vendor). Idempotent — first-writer-wins. 51 unit tests. | `0.3.15-alpha` | 2026-05-17 |
167
+ | ✅ | **`Referrer-Policy` middleware** — Opt-in plugin `gina.plugins.ReferrerPolicy({ value })`. Settings: `referrerPolicy.value` is one of the eight W3C tokens (`"no-referrer"`, `"no-referrer-when-downgrade"`, `"origin"`, `"origin-when-cross-origin"`, `"same-origin"`, `"strict-origin"`, `"strict-origin-when-cross-origin"`, `"unsafe-url"`). Default `"strict-origin-when-cross-origin"` matches the browser default since ~2021. Caller options always win over settings; values are normalised to lowercase per the W3C spec's case-insensitive matching. Invalid tokens throw at factory call time with the full eight-token list + W3C spec URL in the message. Idempotent — first-writer-wins. 56 unit tests. | `0.3.15-alpha` | 2026-05-17 |
168
+ | ✅ | **`Strict-Transport-Security` (HSTS) middleware** — Opt-in plugin `gina.plugins.Hsts({ maxAge, includeSubDomains, preload })`. Defaults: `maxAge: 15552000` (180 days), `includeSubDomains: false`, `preload: false`. Caller options always win over settings. Browser-parity invariant: `preload: true` requires `includeSubDomains: true` AND `maxAge >= 31536000` (1 year) per the HSTS preload-list submission requirements; factory throws at call time on invariant violations with a pointer at https://hstspreload.org/. Also throws on non-integer / negative / NaN / Infinity `maxAge`. Header value built per RFC 6797 §6.1 directive order (`max-age=<n>; includeSubDomains; preload`). Spec deviation documented: emits on every response (helmet-aligned) rather than gating HTTPS-only — receiver enforces correctly anyway per RFC 6797 §8.1. Idempotent — first-writer-wins. 69 unit tests. | `0.3.15-alpha` | 2026-05-17 |
169
+ | ✅ | **`Origin-Agent-Cluster: ?1` middleware** — Opt-in plugin `gina.plugins.OriginAgentCluster()` requests origin-keyed agent clustering — same-site cross-origin pages get isolated agents (can no longer reach in via `document.domain`), mitigating one class of Spectre side-channel attack. Per the HTML spec, `?1` (Structured Header boolean true) is the only useful value; no tunable options. Browser support: Chrome 88+, Edge 88+, Firefox 109+, Safari 15+. Mirrors the #HDR1 shape exactly. Idempotent — first-writer-wins. 33 unit tests. **Closes Phase 1 (modern critical coverage).** | `0.3.15-alpha` | 2026-05-17 |
170
+ | 📋 | **Phase 1.5 — `HidePoweredBy` (#HDR8)** — `gina.plugins.HidePoweredBy()` removes the `X-Powered-By` response header (Express's `X-Powered-By: Express` leaks framework identity). REMOVE shape (`res.removeHeader`), unlike the SET shape of every other plugin in the track. Modest practical value; helmet covers it. | `0.3.16-alpha` | Q2 2026 |
171
+ | 📋 | **Phase 1.5 — `X-DNS-Prefetch-Control` (#HDR9)** — `gina.plugins.XDnsPrefetchControl({ value })`. Default `"off"` (matches helmet). Marginal value — modern browsers mostly ignore the header. | `0.3.16-alpha` | Q3 2026 |
172
+ | 📋 | **Phase 1.5 — `X-XSS-Protection: 0` (#HDR10)** — `gina.plugins.XXssProtection()` emits `0` to DISABLE Chrome's legacy XSS auditor (deprecated; auditor had its own vulnerabilities). Near-zero practical value in 2026 (Chrome dropped the auditor in 78; Firefox / Safari never implemented). | `0.3.16-alpha` | Q3 2026 |
173
+ | 📋 | **Phase 1.5 — `X-Download-Options: noopen` (#HDR11)** — `gina.plugins.XDownloadOptions()` IE8+ legacy header. Modern browsers ignore. Defense-in-depth for IE11 holdouts only. | `0.3.16-alpha` | Q3 2026 |
174
+ | 📋 | **Phase 1.5 — `X-Permitted-Cross-Domain-Policies` (#HDR12)** — `gina.plugins.XPermittedCrossDomainPolicies({ value })`. Restricts Adobe Flash / PDF cross-domain. Flash EOL since 2020; PDF readers mostly ignore. Helmet still ships it. | `0.3.16-alpha` | Q3 2026 |
175
+ | 📋 | **`Content-Security-Policy` (Phase 2 — static directives)** — Opt-in plugin `gina.plugins.Csp({ directives, reportOnly })`. v0 ships static directives only; per-response nonce wiring requires template-render integration and defers to a separate CSP-aware view-layer plugin. `reportOnly: true` emits `Content-Security-Policy-Report-Only` for non-enforcing migration testing. | `0.4.0` | Q1 2027 |
176
+ | 📋 | **`Cross-Origin-{Embedder,Opener,Resource}-Policy` (Phase 2)** — Opt-in plugin `gina.plugins.CrossOriginPolicies({ embedder, opener, resource })` — COEP/COOP/CORP browsing-context isolation. Distinct from CORS (request-side, handled in `core/server.js:1362-1520`). Can break legitimate cross-origin resource loading; opt-in even more conservatively than Phase 1. | `0.4.0` | Q1 2027 |
177
+
178
+ ---
179
+
159
180
  ## Secrets & Configuration
160
181
 
161
182
  Secrets handling for bundle JSON configs without baking plaintext values into source. Pluggable-backend design with `process.env` as the default; the reserved API surface allows future Vault / SOPS / K8s Secrets backends to slot in without changing call sites or the placeholder syntax.
@@ -0,0 +1 @@
1
+ 0.3.15-alpha.2
@@ -32,11 +32,21 @@ function Plugins() {
32
32
 
33
33
 
34
34
  var self = {
35
- Validator : _require('./lib/validator'),
35
+ Validator : _require('./lib/validator'),
36
36
  // #CSRF1 — hardened session-cookie wrapper around express-session.
37
- Session : _require('./lib/session'),
37
+ Session : _require('./lib/session'),
38
38
  // #CSRF2 — signed double-submit token CSRF middleware.
39
- Csrf : _require('./lib/csrf')
39
+ Csrf : _require('./lib/csrf'),
40
+ // #HDR1 — X-Content-Type-Options: nosniff response header.
41
+ XContentTypeOptions : _require('./lib/x-content-type-options'),
42
+ // #HDR2 — X-Frame-Options clickjacking-defense response header.
43
+ XFrameOptions : _require('./lib/x-frame-options'),
44
+ // #HDR3 — Referrer-Policy response header.
45
+ ReferrerPolicy : _require('./lib/referrer-policy'),
46
+ // #HDR4 — HSTS (Strict-Transport-Security) response header.
47
+ Hsts : _require('./lib/hsts'),
48
+ // #HDR7 — Origin-Agent-Cluster response header (origin-keyed isolation).
49
+ OriginAgentCluster : _require('./lib/origin-agent-cluster')
40
50
  };
41
51
 
42
52
  return self
@@ -0,0 +1,144 @@
1
+ # HSTS Plugin (#HDR4)
2
+
3
+ Opt-in middleware that sets the `Strict-Transport-Security` response
4
+ header on every response, instructing browsers to access the host
5
+ exclusively over HTTPS for the next `maxAge` seconds.
6
+
7
+ ## Why
8
+
9
+ Once a browser receives a valid HSTS policy from a host, it refuses to
10
+ make plain HTTP requests to that host for the duration of `maxAge` —
11
+ attempts get upgraded to HTTPS before the network even sees them. This
12
+ defeats SSL-stripping attacks where an active MITM intercepts the
13
+ client's first HTTP request and prevents it from ever escalating to
14
+ HTTPS. Once the policy is in place, the attacker has no opportunity to
15
+ sit between the client and the server in plaintext.
16
+
17
+ The fourth and final Phase 1 plugin on the gina security headers
18
+ track (#HDR1–#HDR4).
19
+
20
+ ## Adoption
21
+
22
+ One line in the bundle bootstrap (`bundles/<name>/index.js`), after the
23
+ express app is created:
24
+
25
+ ```js
26
+ var express = require('express');
27
+ var hsts = require('gina').plugins.Hsts();
28
+ var app = express();
29
+
30
+ app.use(hsts);
31
+ ```
32
+
33
+ Order with other gina security plugins does not matter — the header is
34
+ emitted on the response, not consumed from the request.
35
+
36
+ ## Configuration
37
+
38
+ In `bundles/<name>/config/settings.json`:
39
+
40
+ ```jsonc
41
+ {
42
+ "hsts": {
43
+ "maxAge": 15552000,
44
+ "includeSubDomains": false,
45
+ "preload": false
46
+ }
47
+ }
48
+ ```
49
+
50
+ | Field | Type | Default | Notes |
51
+ |---------------------|---------|-------------|--------------------------------------------|
52
+ | `maxAge` | number | `15552000` | Seconds. Default = 180 days. |
53
+ | `includeSubDomains` | boolean | `false` | Apply HSTS to all sub-domains as well. |
54
+ | `preload` | boolean | `false` | Opt into the HSTS preload list. |
55
+
56
+ Caller-supplied options always win over settings:
57
+
58
+ ```js
59
+ var hsts = require('gina').plugins.Hsts({
60
+ maxAge: 63072000,
61
+ includeSubDomains: true,
62
+ preload: true
63
+ });
64
+ ```
65
+
66
+ ## Browser-parity invariant on `preload`
67
+
68
+ `preload: true` requires `includeSubDomains: true` AND `maxAge >=
69
+ 31536000` (1 year) per the [HSTS preload-list submission requirements](https://hstspreload.org/#deployment-recommendations).
70
+ The factory throws at call time when the combination is invalid:
71
+
72
+ ```
73
+ [gina.plugins.Hsts] preload=true requires includeSubDomains=true per the
74
+ HSTS preload-list submission requirements — see
75
+ https://hstspreload.org/#deployment-recommendations
76
+ ```
77
+
78
+ ```
79
+ [gina.plugins.Hsts] preload=true requires maxAge>=31536000 (1 year)
80
+ per the HSTS preload-list submission requirements; received
81
+ maxAge=15552000. See https://hstspreload.org/#deployment-recommendations
82
+ ```
83
+
84
+ This mirrors the #CSRF1 `SameSite=None`+`Secure` lock and the #HDR2
85
+ `ALLOW-FROM` rejection — fast-fail at bootstrap, the bundle won't start
86
+ with a misconfigured header.
87
+
88
+ **Why the invariant matters**: the HSTS preload list is the browsers'
89
+ hard-coded HSTS database. Once your hostname is in it, all browsers
90
+ treat HSTS as active from the moment they install the browser update,
91
+ regardless of whether they've ever fetched a response from your host.
92
+ Removal from the preload list takes months and isn't guaranteed —
93
+ opting in is a one-way operation in practical terms. The submission
94
+ requirements exist to keep operators from accidentally locking
95
+ themselves out.
96
+
97
+ ## Choosing values
98
+
99
+ - **`maxAge`** — start small (`300` = 5 minutes) during initial rollout
100
+ to bound the blast radius of a mistake; ramp to `15552000` (180 days)
101
+ for steady state; `63072000` (2 years) is the conventional value for
102
+ preload-list submission.
103
+ - **`includeSubDomains`** — only enable if you're certain *every*
104
+ sub-domain (including ones added in the future) will be HTTPS-only.
105
+ Common foot-gun: `app.example.com` enabling `includeSubDomains` and
106
+ breaking `legacy.example.com` that's stuck on HTTP.
107
+ - **`preload`** — only opt in once you've run stable in steady-state for
108
+ weeks, audited every sub-domain, and accepted that removal is slow.
109
+
110
+ ## Spec note — emission gating
111
+
112
+ This plugin emits the header on **every** response regardless of
113
+ transport. RFC 6797 §7.2 says "An HSTS Host MUST NOT include the STS
114
+ header field in HTTP responses conveyed over non-secure transport".
115
+ However, §8.1 also says the user agent "MUST ignore any present STS
116
+ header field(s)" received over insecure transport — the receiver
117
+ enforces the policy correctly regardless of what the server sends.
118
+
119
+ The plugin's design favours **proxy-deployment robustness** (no
120
+ dependency on `x-forwarded-proto` being preserved by intermediaries)
121
+ over sender-side spec purity. helmet's `Strict-Transport-Security`
122
+ middleware takes the same approach, so adopters migrating from helmet
123
+ see identical wire behaviour.
124
+
125
+ Bundles that need strict §7.2 compliance can simply not register the
126
+ plugin in non-HTTPS bundles — the `registration = opt-in` discipline
127
+ covers that case.
128
+
129
+ ## Failure modes
130
+
131
+ | Condition | Outcome |
132
+ |----------------------------------------------------------|------------------------------------------------------|
133
+ | All fields omitted | Emits `max-age=15552000` |
134
+ | `maxAge` is not a non-negative integer | Factory throws at call time |
135
+ | `preload=true` with `includeSubDomains=false` | Factory throws with hstspreload.org pointer |
136
+ | `preload=true` with `maxAge<31536000` | Factory throws with hstspreload.org pointer |
137
+ | `maxAge=0` | Emits `max-age=0` (clears existing HSTS policy) |
138
+ | Plugin not registered | Header not emitted; browser uses no HSTS policy |
139
+ | Header already set by an earlier middleware | Existing value preserved (idempotent) |
140
+ | Response already sent (`res.headersSent === true`) | Node's `setHeader` no-ops; request resumes |
141
+
142
+ The idempotent behaviour makes the plugin safe to register more than
143
+ once or alongside another middleware that emits the same header (e.g.
144
+ a generic helmet-style upstream gate) — the first writer wins.
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "gina-core-plugin-hsts",
3
+ "version": "1.0.0",
4
+ "description": "Strict-Transport-Security (HSTS) response header middleware (#HDR4)",
5
+ "authors": [
6
+ {
7
+ "name": "Maritn-Luther ETOUMAN",
8
+ "email": "contact@gina.io"
9
+ },
10
+ {
11
+ "name": "Fabrice DELANEAU",
12
+ "email": "contact@gina.io"
13
+ }
14
+ ],
15
+ "copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
16
+ "engines": {
17
+ "node": ">=0.10.22"
18
+ },
19
+ "main": "src/main",
20
+ "license": "MIT",
21
+ "readmeFilename": "README.md"
22
+ }
@@ -0,0 +1,270 @@
1
+ /*
2
+ * This file is part of the gina package.
3
+ * Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
4
+ *
5
+ * For the full copyright and license information, please view the LICENSE
6
+ * file that was distributed with this source code.
7
+ */
8
+ 'use strict';
9
+
10
+ /**
11
+ * HSTS plugin (#HDR4) — emits the `Strict-Transport-Security` response
12
+ * header on every response, instructing browsers to access the host
13
+ * exclusively over HTTPS for the next `maxAge` seconds.
14
+ *
15
+ * Bundles adopt it with a one-line bootstrap add:
16
+ *
17
+ * var express = require('express');
18
+ * var hsts = require('gina').plugins.Hsts();
19
+ * var app = express();
20
+ *
21
+ * app.use(hsts);
22
+ *
23
+ * Three configuration fields per RFC 6797:
24
+ *
25
+ * - `maxAge` — seconds; default 15552000 (180 days).
26
+ * - `includeSubDomains` — boolean; default false.
27
+ * - `preload` — boolean; default false. Browser-parity
28
+ * invariant: preload=true requires
29
+ * includeSubDomains=true AND maxAge>=31536000
30
+ * (1 year) per the HSTS preload-list
31
+ * submission requirements.
32
+ *
33
+ * Browser-parity invariant on `preload` is enforced at factory call
34
+ * time — the factory throws when the combination is invalid, mirroring
35
+ * the #CSRF1 SameSite=None+Secure lock and the #HDR2 ALLOW-FROM
36
+ * rejection.
37
+ *
38
+ * **Spec deviation**: this plugin emits the header on every response
39
+ * regardless of transport. RFC 6797 §7.2 says "An HSTS Host MUST NOT
40
+ * include the STS header field in HTTP responses conveyed over non-secure
41
+ * transport" — but §8.1 also says "the UA MUST ignore any present STS
42
+ * header field(s)" received over insecure transport. The receiver
43
+ * enforces the policy correctly regardless, so the practical wire
44
+ * outcome is identical. This plugin matches helmet's behaviour
45
+ * (emit unconditionally) rather than the sender-side MUST NOT — the
46
+ * design favours proxy-deployment robustness (no dependency on
47
+ * x-forwarded-proto being preserved by intermediaries) over sender-side
48
+ * spec purity. Bundles that need strict §7.2 compliance can simply not
49
+ * register the plugin in non-HTTPS bundles.
50
+ *
51
+ * @module plugins/hsts
52
+ */
53
+
54
+ var HEADER_NAME = 'strict-transport-security';
55
+ var DEFAULT_MAX_AGE = 15552000; // 180 days
56
+ var DEFAULT_INCLUDE_SUBDOMS = false;
57
+ var DEFAULT_PRELOAD = false;
58
+ var PRELOAD_MIN_MAX_AGE = 31536000; // 1 year — HSTS preload-list submission requirement
59
+
60
+
61
+ /**
62
+ * Read the active bundle's `settings.json > hsts.*` block and return the
63
+ * merged framework defaults.
64
+ *
65
+ * Falls back to an empty object when the bundle context is not ready yet
66
+ * (e.g. `Hsts()` invoked at module-require time, before `onInitialize`).
67
+ *
68
+ * @returns {object}
69
+ * @inner
70
+ * @private
71
+ */
72
+ function resolveSettingsDefaults() {
73
+ var defaults = {};
74
+ var pluginConf = {};
75
+
76
+ try {
77
+ var ctx = getContext();
78
+ var bundle = ctx && ctx.bundle;
79
+ var env = ctx && ctx.env;
80
+ var conf = (typeof getConfig === 'function') ? getConfig() : null;
81
+ if (bundle && env && conf && conf[bundle] && conf[bundle][env]) {
82
+ var content = conf[bundle][env].content || {};
83
+ var settings = content.settings || {};
84
+ pluginConf = settings.hsts || {};
85
+ }
86
+ } catch (ignored) {
87
+ pluginConf = {};
88
+ }
89
+
90
+ for (var k in pluginConf) {
91
+ if (Object.prototype.hasOwnProperty.call(pluginConf, k)) {
92
+ defaults[k] = pluginConf[k];
93
+ }
94
+ }
95
+
96
+ return defaults;
97
+ }
98
+
99
+
100
+ /**
101
+ * Merge caller-supplied options on top of the resolved defaults.
102
+ * Caller-supplied values always win (`hasOwnProperty`-guarded).
103
+ *
104
+ * @param {object|undefined} caller
105
+ * @param {object} defaults
106
+ * @returns {object}
107
+ * @inner
108
+ * @private
109
+ */
110
+ function mergeOptions(caller, defaults) {
111
+ caller = caller || {};
112
+ var merged = {};
113
+ for (var dk in defaults) {
114
+ if (Object.prototype.hasOwnProperty.call(defaults, dk)) merged[dk] = defaults[dk];
115
+ }
116
+ for (var ck in caller) {
117
+ if (Object.prototype.hasOwnProperty.call(caller, ck)) merged[ck] = caller[ck];
118
+ }
119
+ return merged;
120
+ }
121
+
122
+
123
+ /**
124
+ * Coerce a value to boolean with explicit defaults.
125
+ *
126
+ * @param {*} value
127
+ * @param {boolean} fallback
128
+ * @returns {boolean}
129
+ * @inner
130
+ * @private
131
+ */
132
+ function toBool(value, fallback) {
133
+ if (typeof value === 'undefined' || value === null) return fallback;
134
+ if (typeof value === 'boolean') return value;
135
+ if (typeof value === 'string') {
136
+ if (/^(true|1|yes|on)$/i.test(value)) return true;
137
+ if (/^(false|0|no|off)$/i.test(value)) return false;
138
+ }
139
+ return fallback;
140
+ }
141
+
142
+
143
+ /**
144
+ * Validate the merged options against the HSTS spec invariants and
145
+ * return a normalised triplet `{ maxAge, includeSubDomains, preload }`.
146
+ *
147
+ * Browser-parity invariant: `preload: true` requires
148
+ * `includeSubDomains: true` AND `maxAge >= 31536000` (1 year). Per the
149
+ * HSTS preload-list submission requirements at
150
+ * https://hstspreload.org/#deployment-recommendations — the factory
151
+ * throws at call time when the combination is invalid, mirroring the
152
+ * #HDR2 throw-on-invalid pattern.
153
+ *
154
+ * @param {object} merged
155
+ * @returns {{maxAge: number, includeSubDomains: boolean, preload: boolean}}
156
+ * @throws {Error} when maxAge is not a non-negative integer, or when
157
+ * preload=true is not paired with includeSubDomains=true
158
+ * and maxAge>=PRELOAD_MIN_MAX_AGE
159
+ * @inner
160
+ * @private
161
+ */
162
+ function resolveOptions(merged) {
163
+ var maxAge = (typeof merged.maxAge === 'undefined' || merged.maxAge === null)
164
+ ? DEFAULT_MAX_AGE
165
+ : merged.maxAge;
166
+ var includeSubDomains = toBool(merged.includeSubDomains, DEFAULT_INCLUDE_SUBDOMS);
167
+ var preload = toBool(merged.preload, DEFAULT_PRELOAD);
168
+
169
+ if (typeof maxAge !== 'number' || !isFinite(maxAge) || maxAge < 0 || Math.floor(maxAge) !== maxAge) {
170
+ throw new Error(
171
+ '[gina.plugins.Hsts] maxAge must be a non-negative integer (seconds); '
172
+ + 'received ' + JSON.stringify(merged.maxAge) + '.'
173
+ );
174
+ }
175
+
176
+ if (preload) {
177
+ if (!includeSubDomains) {
178
+ throw new Error(
179
+ '[gina.plugins.Hsts] preload=true requires includeSubDomains=true '
180
+ + 'per the HSTS preload-list submission requirements — see '
181
+ + 'https://hstspreload.org/#deployment-recommendations'
182
+ );
183
+ }
184
+ if (maxAge < PRELOAD_MIN_MAX_AGE) {
185
+ throw new Error(
186
+ '[gina.plugins.Hsts] preload=true requires maxAge>=' + PRELOAD_MIN_MAX_AGE
187
+ + ' (1 year) per the HSTS preload-list submission requirements; '
188
+ + 'received maxAge=' + maxAge + '. See '
189
+ + 'https://hstspreload.org/#deployment-recommendations'
190
+ );
191
+ }
192
+ }
193
+
194
+ return { maxAge: maxAge, includeSubDomains: includeSubDomains, preload: preload };
195
+ }
196
+
197
+
198
+ /**
199
+ * Build the header value string from a normalised triplet.
200
+ *
201
+ * Per RFC 6797 §6.1, `max-age` MUST appear first; the optional
202
+ * `includeSubDomains` and `preload` directives are appended in that
203
+ * order when their fields are true.
204
+ *
205
+ * @param {{maxAge: number, includeSubDomains: boolean, preload: boolean}} opts
206
+ * @returns {string}
207
+ * @inner
208
+ * @private
209
+ */
210
+ function buildHeaderValue(opts) {
211
+ var parts = ['max-age=' + opts.maxAge];
212
+ if (opts.includeSubDomains) parts.push('includeSubDomains');
213
+ if (opts.preload) parts.push('preload');
214
+ return parts.join('; ');
215
+ }
216
+
217
+
218
+ /**
219
+ * Return an express-compatible middleware that sets the
220
+ * `Strict-Transport-Security` response header.
221
+ *
222
+ * Idempotent — if the header is already set by an earlier middleware, the
223
+ * existing value is preserved and `next()` is called immediately.
224
+ *
225
+ * @example
226
+ * var hsts = require('gina').plugins.Hsts({
227
+ * maxAge: 63072000,
228
+ * includeSubDomains: true,
229
+ * preload: true
230
+ * });
231
+ * app.use(hsts);
232
+ *
233
+ * @param {object} [opts]
234
+ * @param {number} [opts.maxAge=15552000] — seconds (180 days default)
235
+ * @param {boolean} [opts.includeSubDomains=false]
236
+ * @param {boolean} [opts.preload=false] — preload-list opt-in
237
+ * @returns {function} — express middleware `(req, res, next) => void`
238
+ * @throws {Error} when maxAge is not a non-negative integer, or when
239
+ * preload=true is not paired with includeSubDomains=true
240
+ * and maxAge>=31536000 (1 year)
241
+ */
242
+ function Hsts(opts) {
243
+ var defaults = resolveSettingsDefaults();
244
+ var merged = mergeOptions(opts, defaults);
245
+ var resolved = resolveOptions(merged);
246
+ var headerValue = buildHeaderValue(resolved);
247
+
248
+ return function ginaHsts(req, res, next) {
249
+ if (typeof res.getHeader === 'function' && res.getHeader(HEADER_NAME)) {
250
+ return next();
251
+ }
252
+ res.setHeader(HEADER_NAME, headerValue);
253
+ next();
254
+ };
255
+ }
256
+
257
+
258
+ // Exposed for unit testing. Do not rely on these in application code.
259
+ Hsts._HEADER_NAME = HEADER_NAME;
260
+ Hsts._DEFAULT_MAX_AGE = DEFAULT_MAX_AGE;
261
+ Hsts._DEFAULT_INCLUDE_SUBDOMS = DEFAULT_INCLUDE_SUBDOMS;
262
+ Hsts._DEFAULT_PRELOAD = DEFAULT_PRELOAD;
263
+ Hsts._PRELOAD_MIN_MAX_AGE = PRELOAD_MIN_MAX_AGE;
264
+ Hsts._resolveSettingsDefaults = resolveSettingsDefaults;
265
+ Hsts._mergeOptions = mergeOptions;
266
+ Hsts._resolveOptions = resolveOptions;
267
+ Hsts._buildHeaderValue = buildHeaderValue;
268
+ Hsts._toBool = toBool;
269
+
270
+ module.exports = Hsts;
@@ -0,0 +1,84 @@
1
+ # Origin-Agent-Cluster Plugin (#HDR7)
2
+
3
+ Opt-in middleware that sets the `Origin-Agent-Cluster: ?1` response
4
+ header on every response, requesting that the browser place this page's
5
+ origin in its own agent cluster (origin-keyed) rather than the default
6
+ site-keyed (eTLD+1) cluster.
7
+
8
+ ## Why
9
+
10
+ By default, two same-site cross-origin pages (e.g. `app.example.com`
11
+ and `marketing.example.com`) share an agent cluster — they can
12
+ synchronously script each other if either page sets `document.domain`.
13
+ Origin-Agent-Cluster opts the page out of this: it gets its own agent,
14
+ isolated from sibling-origin pages, and `document.domain` becomes a
15
+ no-op.
16
+
17
+ Two benefits:
18
+
19
+ 1. **Spectre mitigation** — origin-keyed agents are placed in their own
20
+ OS process where possible, limiting the blast radius of side-channel
21
+ attacks that leak memory across same-site pages.
22
+ 2. **Cleaner isolation contract** — defends against the rare-but-real
23
+ pattern where a less-trusted same-site origin tries to reach into a
24
+ trusted page's documents via `document.domain` tricks.
25
+
26
+ Cost is small: same-site cross-origin pages can no longer use
27
+ `document.domain` to share a same-origin context. Pages that rely on
28
+ this legacy pattern (rare in modern apps) should not opt in.
29
+
30
+ Per the [HTML spec](https://html.spec.whatwg.org/multipage/document-sequences.html#origin-keyed-agent-clusters)
31
+ and helmet convention, `?1` (boolean true per Structured Header Values
32
+ syntax) is the only value worth emitting. `?0` is the browser default;
33
+ emitting it is a no-op. There is no `enabled` flag in the configuration
34
+ surface — register the plugin to opt in, don't register to opt out.
35
+
36
+ ## Adoption
37
+
38
+ One line in the bundle bootstrap (`bundles/<name>/index.js`), after the
39
+ express app is created:
40
+
41
+ ```js
42
+ var express = require('express');
43
+ var originAgentCluster = require('gina').plugins.OriginAgentCluster();
44
+ var app = express();
45
+
46
+ app.use(originAgentCluster);
47
+ ```
48
+
49
+ Order with other gina security plugins does not matter — the header is
50
+ emitted on the response, not consumed from the request.
51
+
52
+ ## Configuration
53
+
54
+ In `bundles/<name>/config/settings.json`:
55
+
56
+ ```jsonc
57
+ {
58
+ "originAgentCluster": {}
59
+ }
60
+ ```
61
+
62
+ The block is reserved for future use (e.g. per-route opt-out). Today the
63
+ plugin has no tunable options — the only useful header value is `?1`,
64
+ and the header is unconditionally emitted on every response the
65
+ middleware sees.
66
+
67
+ ## Browser support
68
+
69
+ Chrome 88+, Edge 88+, Firefox 109+, Safari 15+. Older browsers ignore
70
+ the header silently — safe to register unconditionally.
71
+
72
+ ## Failure modes
73
+
74
+ | Condition | Outcome |
75
+ |----------------------------------------------------------|------------------------------------------------------|
76
+ | Plugin not registered | Header not emitted; browser uses default site-keyed agent |
77
+ | Header already set by an earlier middleware | Existing value preserved (idempotent) |
78
+ | Response already sent (`res.headersSent === true`) | Node's `setHeader` no-ops; request resumes |
79
+ | Browser predates the feature | Header ignored silently — harmless |
80
+ | Same-origin policy relies on `document.domain` | Will break; do not register the plugin |
81
+
82
+ The idempotent behaviour makes the plugin safe to register more than
83
+ once or alongside another middleware that emits the same header (e.g.
84
+ a generic helmet-style upstream gate) — the first writer wins.
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "gina-core-plugin-origin-agent-cluster",
3
+ "version": "1.0.0",
4
+ "description": "Origin-Agent-Cluster response header middleware (#HDR7)",
5
+ "authors": [
6
+ {
7
+ "name": "Maritn-Luther ETOUMAN",
8
+ "email": "contact@gina.io"
9
+ },
10
+ {
11
+ "name": "Fabrice DELANEAU",
12
+ "email": "contact@gina.io"
13
+ }
14
+ ],
15
+ "copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
16
+ "engines": {
17
+ "node": ">=0.10.22"
18
+ },
19
+ "main": "src/main",
20
+ "license": "MIT",
21
+ "readmeFilename": "README.md"
22
+ }