gina 0.6.3 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (567) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +32 -40
  3. package/ROADMAP.md +3 -1
  4. package/framework/v0.6.4/VERSION +1 -0
  5. package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
  6. package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  7. package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  8. package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/js/gina.js +1522 -79
  9. package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js +640 -0
  10. package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  11. package/framework/v0.6.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  12. package/framework/{v0.6.3 → v0.6.4}/core/config.js +22 -4
  13. package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.js +62 -2
  14. package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.render-nunjucks.js +11 -3
  15. package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.render-swig.js +15 -1
  16. package/framework/{v0.6.3 → v0.6.4}/core/gna.js +33 -1
  17. package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/validator/src/main.js +892 -21
  18. package/framework/{v0.6.3 → v0.6.4}/core/server.js +60 -2
  19. package/framework/v0.6.4/core/template/_gitignore +27 -0
  20. package/framework/{v0.6.3 → v0.6.4}/lib/cmd/secrets/arguments.json +1 -0
  21. package/framework/v0.6.4/lib/cmd/secrets/check.js +861 -0
  22. package/framework/{v0.6.3 → v0.6.4}/lib/cmd/secrets/help.txt +29 -5
  23. package/framework/v0.6.4/lib/loading-state/package.json +7 -0
  24. package/framework/v0.6.4/lib/loading-state/src/main.js +366 -0
  25. package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/containers/mq/listener.js +23 -0
  26. package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/containers/mq/speaker.js +27 -0
  27. package/framework/v0.6.4/lib/secrets/src/backends/file.js +180 -0
  28. package/framework/v0.6.4/lib/secrets/src/env-file.js +220 -0
  29. package/framework/{v0.6.3 → v0.6.4}/lib/secrets/src/main.js +84 -1
  30. package/framework/{v0.6.3 → v0.6.4}/package.json +1 -1
  31. package/gna.js +4 -4
  32. package/llms.txt +7 -7
  33. package/package.json +3 -3
  34. package/schema/settings.json +14 -0
  35. package/framework/v0.6.3/VERSION +0 -1
  36. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
  37. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  38. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  39. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -625
  40. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  41. package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  42. package/framework/v0.6.3/core/template/_gitignore +0 -19
  43. package/framework/v0.6.3/lib/cmd/secrets/check.js +0 -507
  44. /package/framework/{v0.6.3 → v0.6.4}/AUTHORS +0 -0
  45. /package/framework/{v0.6.3 → v0.6.4}/LICENSE +0 -0
  46. /package/framework/{v0.6.3 → v0.6.4}/core/asset/html/nolayout.html +0 -0
  47. /package/framework/{v0.6.3 → v0.6.4}/core/asset/html/static.html +0 -0
  48. /package/framework/{v0.6.3 → v0.6.4}/core/asset/img/android-chrome-192x192.png +0 -0
  49. /package/framework/{v0.6.3 → v0.6.4}/core/asset/img/android-chrome-512x512.png +0 -0
  50. /package/framework/{v0.6.3 → v0.6.4}/core/asset/img/apple-touch-icon.png +0 -0
  51. /package/framework/{v0.6.3 → v0.6.4}/core/asset/img/favicon-16x16.png +0 -0
  52. /package/framework/{v0.6.3 → v0.6.4}/core/asset/img/favicon-32x32.png +0 -0
  53. /package/framework/{v0.6.3 → v0.6.4}/core/asset/img/favicon.ico +0 -0
  54. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/README.md +0 -0
  55. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  56. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  57. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  58. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  59. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  60. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  61. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  62. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  63. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  64. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  65. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  66. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  67. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  68. /package/framework/{v0.6.3 → v0.6.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  69. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/ai/index.js +0 -0
  70. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/ai/lib/connector.js +0 -0
  71. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/couchbase/index.js +0 -0
  72. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/couchbase/lib/connector.js +0 -0
  73. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  74. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  75. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/couchbase/lib/n1ql.js +0 -0
  76. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/couchbase/lib/session-store.js +0 -0
  77. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  78. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  79. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/duckdb/index.js +0 -0
  80. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/duckdb/lib/connector.js +0 -0
  81. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/mongodb/index.js +0 -0
  82. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/mongodb/lib/connector.js +0 -0
  83. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/mongodb/lib/job-store.js +0 -0
  84. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  85. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/mongodb/lib/session-store.js +0 -0
  86. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/mysql/index.js +0 -0
  87. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/mysql/lib/connector.js +0 -0
  88. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/postgresql/index.js +0 -0
  89. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/postgresql/lib/connector.js +0 -0
  90. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/redis/index.js +0 -0
  91. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/redis/lib/connector.js +0 -0
  92. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/redis/lib/job-store.js +0 -0
  93. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/redis/lib/render-cache-store.js +0 -0
  94. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/redis/lib/session-store.js +0 -0
  95. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/scylladb/index.js +0 -0
  96. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/scylladb/lib/connector.js +0 -0
  97. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/scylladb/lib/session-store.js +0 -0
  98. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/sql-parser.js +0 -0
  99. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/sqlite/index.js +0 -0
  100. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/sqlite/lib/connector.js +0 -0
  101. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/sqlite/lib/job-store.js +0 -0
  102. /package/framework/{v0.6.3 → v0.6.4}/core/connectors/sqlite/lib/session-store.js +0 -0
  103. /package/framework/{v0.6.3 → v0.6.4}/core/content.encoding +0 -0
  104. /package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.framework.js +0 -0
  105. /package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.render-json.js +0 -0
  106. /package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.render-nunjucks-async.js +0 -0
  107. /package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.render-stream.js +0 -0
  108. /package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.render-swig-async.js +0 -0
  109. /package/framework/{v0.6.3 → v0.6.4}/core/controller/controller.render-v1.js +0 -0
  110. /package/framework/{v0.6.3 → v0.6.4}/core/controller/index.js +0 -0
  111. /package/framework/{v0.6.3 → v0.6.4}/core/controller/inspector-window-emit.js +0 -0
  112. /package/framework/{v0.6.3 → v0.6.4}/core/controller/release-banner.js +0 -0
  113. /package/framework/{v0.6.3 → v0.6.4}/core/dev/index.js +0 -0
  114. /package/framework/{v0.6.3 → v0.6.4}/core/dev/lib/class.js +0 -0
  115. /package/framework/{v0.6.3 → v0.6.4}/core/dev/lib/factory.js +0 -0
  116. /package/framework/{v0.6.3 → v0.6.4}/core/dev/lib/tools.js +0 -0
  117. /package/framework/{v0.6.3 → v0.6.4}/core/locales/README.md +0 -0
  118. /package/framework/{v0.6.3 → v0.6.4}/core/locales/currency.json +0 -0
  119. /package/framework/{v0.6.3 → v0.6.4}/core/locales/dist/language/en.json +0 -0
  120. /package/framework/{v0.6.3 → v0.6.4}/core/locales/dist/language/fr.json +0 -0
  121. /package/framework/{v0.6.3 → v0.6.4}/core/locales/dist/region/en.json +0 -0
  122. /package/framework/{v0.6.3 → v0.6.4}/core/locales/dist/region/fr.json +0 -0
  123. /package/framework/{v0.6.3 → v0.6.4}/core/locales/index.js +0 -0
  124. /package/framework/{v0.6.3 → v0.6.4}/core/mime.types +0 -0
  125. /package/framework/{v0.6.3 → v0.6.4}/core/model/entity.js +0 -0
  126. /package/framework/{v0.6.3 → v0.6.4}/core/model/index.js +0 -0
  127. /package/framework/{v0.6.3 → v0.6.4}/core/model/template/entityFactory.js +0 -0
  128. /package/framework/{v0.6.3 → v0.6.4}/core/model/template/index.js +0 -0
  129. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/README.md +0 -0
  130. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/index.js +0 -0
  131. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/csrf/README.md +0 -0
  132. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/csrf/package.json +0 -0
  133. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/csrf/src/main.js +0 -0
  134. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/README.md +0 -0
  135. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/coep/README.md +0 -0
  136. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/coep/package.json +0 -0
  137. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  138. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/coop/README.md +0 -0
  139. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/coop/package.json +0 -0
  140. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  141. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/corp/README.md +0 -0
  142. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/corp/package.json +0 -0
  143. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  144. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/csp/README.md +0 -0
  145. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/csp/package.json +0 -0
  146. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  147. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  148. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  149. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  150. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  151. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  152. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  153. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  154. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  155. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  156. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/package.json +0 -0
  157. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  158. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  159. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  160. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/src/main.js +0 -0
  161. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  162. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  163. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  164. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  165. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  166. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  167. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  168. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  169. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  170. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  171. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  172. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  173. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  174. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  175. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  176. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  177. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  178. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  179. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/session/README.md +0 -0
  180. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/session/package.json +0 -0
  181. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/session/src/main.js +0 -0
  182. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/storage/README.md +0 -0
  183. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/storage/build.json +0 -0
  184. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/storage/package.json +0 -0
  185. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/storage/src/main.js +0 -0
  186. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/validator/README.md +0 -0
  187. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/validator/build.json +0 -0
  188. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/validator/package.json +0 -0
  189. /package/framework/{v0.6.3 → v0.6.4}/core/plugins/lib/validator/src/form-validator.js +0 -0
  190. /package/framework/{v0.6.3 → v0.6.4}/core/router.js +0 -0
  191. /package/framework/{v0.6.3 → v0.6.4}/core/server.express.js +0 -0
  192. /package/framework/{v0.6.3 → v0.6.4}/core/server.isaac.js +0 -0
  193. /package/framework/{v0.6.3 → v0.6.4}/core/status.codes +0 -0
  194. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/config/app.json +0 -0
  195. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  196. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/config/routing.json +0 -0
  197. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/config/settings.json +0 -0
  198. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  199. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/config/templates.json +0 -0
  200. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  201. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  202. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  203. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  204. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/index.js +0 -0
  205. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle/locales/en.json +0 -0
  206. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  207. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  208. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  209. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  210. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  211. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  212. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  213. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  214. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/readme.md +0 -0
  215. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_public/sw.js +0 -0
  216. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  217. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  218. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  219. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  220. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  221. /package/framework/{v0.6.3 → v0.6.4}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  222. /package/framework/{v0.6.3 → v0.6.4}/core/template/command/gina.bat.tpl +0 -0
  223. /package/framework/{v0.6.3 → v0.6.4}/core/template/command/gina.tpl +0 -0
  224. /package/framework/{v0.6.3 → v0.6.4}/core/template/conf/env.json +0 -0
  225. /package/framework/{v0.6.3 → v0.6.4}/core/template/conf/manifest.json +0 -0
  226. /package/framework/{v0.6.3 → v0.6.4}/core/template/conf/package.json +0 -0
  227. /package/framework/{v0.6.3 → v0.6.4}/core/template/conf/settings.json +0 -0
  228. /package/framework/{v0.6.3 → v0.6.4}/core/template/conf/statics.json +0 -0
  229. /package/framework/{v0.6.3 → v0.6.4}/core/template/conf/templates.json +0 -0
  230. /package/framework/{v0.6.3 → v0.6.4}/core/template/error/client/json/401.json +0 -0
  231. /package/framework/{v0.6.3 → v0.6.4}/core/template/error/client/json/403.json +0 -0
  232. /package/framework/{v0.6.3 → v0.6.4}/core/template/error/client/json/404.json +0 -0
  233. /package/framework/{v0.6.3 → v0.6.4}/core/template/error/server/html/50x.html +0 -0
  234. /package/framework/{v0.6.3 → v0.6.4}/core/template/error/server/json/500.json +0 -0
  235. /package/framework/{v0.6.3 → v0.6.4}/core/template/error/server/json/503.json +0 -0
  236. /package/framework/{v0.6.3 → v0.6.4}/core/template/extensions/logger/config.json +0 -0
  237. /package/framework/{v0.6.3 → v0.6.4}/helpers/console.js +0 -0
  238. /package/framework/{v0.6.3 → v0.6.4}/helpers/context.js +0 -0
  239. /package/framework/{v0.6.3 → v0.6.4}/helpers/data/LICENSE +0 -0
  240. /package/framework/{v0.6.3 → v0.6.4}/helpers/data/README.md +0 -0
  241. /package/framework/{v0.6.3 → v0.6.4}/helpers/data/package.json +0 -0
  242. /package/framework/{v0.6.3 → v0.6.4}/helpers/data/src/main.js +0 -0
  243. /package/framework/{v0.6.3 → v0.6.4}/helpers/dateFormat.js +0 -0
  244. /package/framework/{v0.6.3 → v0.6.4}/helpers/index.js +0 -0
  245. /package/framework/{v0.6.3 → v0.6.4}/helpers/json/LICENSE +0 -0
  246. /package/framework/{v0.6.3 → v0.6.4}/helpers/json/README.md +0 -0
  247. /package/framework/{v0.6.3 → v0.6.4}/helpers/json/package.json +0 -0
  248. /package/framework/{v0.6.3 → v0.6.4}/helpers/json/src/main.js +0 -0
  249. /package/framework/{v0.6.3 → v0.6.4}/helpers/path.js +0 -0
  250. /package/framework/{v0.6.3 → v0.6.4}/helpers/plugins/README.md +0 -0
  251. /package/framework/{v0.6.3 → v0.6.4}/helpers/plugins/package.json +0 -0
  252. /package/framework/{v0.6.3 → v0.6.4}/helpers/plugins/src/api-error.js +0 -0
  253. /package/framework/{v0.6.3 → v0.6.4}/helpers/plugins/src/main.js +0 -0
  254. /package/framework/{v0.6.3 → v0.6.4}/helpers/prototypes.js +0 -0
  255. /package/framework/{v0.6.3 → v0.6.4}/helpers/task.js +0 -0
  256. /package/framework/{v0.6.3 → v0.6.4}/helpers/text.js +0 -0
  257. /package/framework/{v0.6.3 → v0.6.4}/lib/admin/package.json +0 -0
  258. /package/framework/{v0.6.3 → v0.6.4}/lib/admin/src/main.js +0 -0
  259. /package/framework/{v0.6.3 → v0.6.4}/lib/archiver/README.md +0 -0
  260. /package/framework/{v0.6.3 → v0.6.4}/lib/archiver/build.json +0 -0
  261. /package/framework/{v0.6.3 → v0.6.4}/lib/archiver/package.json +0 -0
  262. /package/framework/{v0.6.3 → v0.6.4}/lib/archiver/src/dep/jszip.min.js +0 -0
  263. /package/framework/{v0.6.3 → v0.6.4}/lib/archiver/src/main.js +0 -0
  264. /package/framework/{v0.6.3 → v0.6.4}/lib/async/package.json +0 -0
  265. /package/framework/{v0.6.3 → v0.6.4}/lib/async/src/main.js +0 -0
  266. /package/framework/{v0.6.3 → v0.6.4}/lib/audit/package.json +0 -0
  267. /package/framework/{v0.6.3 → v0.6.4}/lib/audit/src/main.js +0 -0
  268. /package/framework/{v0.6.3 → v0.6.4}/lib/audit-store.js +0 -0
  269. /package/framework/{v0.6.3 → v0.6.4}/lib/authn/package.json +0 -0
  270. /package/framework/{v0.6.3 → v0.6.4}/lib/authn/src/lockout.js +0 -0
  271. /package/framework/{v0.6.3 → v0.6.4}/lib/authn/src/main.js +0 -0
  272. /package/framework/{v0.6.3 → v0.6.4}/lib/authn/src/totp.js +0 -0
  273. /package/framework/{v0.6.3 → v0.6.4}/lib/authz-gate/package.json +0 -0
  274. /package/framework/{v0.6.3 → v0.6.4}/lib/authz-gate/src/main.js +0 -0
  275. /package/framework/{v0.6.3 → v0.6.4}/lib/cache/README.md +0 -0
  276. /package/framework/{v0.6.3 → v0.6.4}/lib/cache/build.json +0 -0
  277. /package/framework/{v0.6.3 → v0.6.4}/lib/cache/package.json +0 -0
  278. /package/framework/{v0.6.3 → v0.6.4}/lib/cache/src/main.js +0 -0
  279. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/aliases.json +0 -0
  280. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/audit/arguments.json +0 -0
  281. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/audit/help.txt +0 -0
  282. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/audit/verify.js +0 -0
  283. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/add.js +0 -0
  284. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/arguments.json +0 -0
  285. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/build.js +0 -0
  286. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/copy.js +0 -0
  287. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/cp.js +0 -0
  288. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/help.js +0 -0
  289. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/help.txt +0 -0
  290. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  291. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/list.js +0 -0
  292. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/man.js +0 -0
  293. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/mcp-start.js +0 -0
  294. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/mcp.js +0 -0
  295. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/oas.js +0 -0
  296. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/openapi.js +0 -0
  297. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/remove.js +0 -0
  298. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/rename.js +0 -0
  299. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/restart.js +0 -0
  300. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/rm.js +0 -0
  301. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/start.js +0 -0
  302. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/status.js +0 -0
  303. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/stop.js +0 -0
  304. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/bundle/types.js +0 -0
  305. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/cache/arguments.json +0 -0
  306. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/cache/clear.js +0 -0
  307. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/cache/help.txt +0 -0
  308. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/cache/stats.js +0 -0
  309. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/add.js +0 -0
  310. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/arguments.json +0 -0
  311. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/help.js +0 -0
  312. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/help.txt +0 -0
  313. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/infer.js +0 -0
  314. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/list.js +0 -0
  315. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/migrate.js +0 -0
  316. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/models.js +0 -0
  317. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/remove.js +0 -0
  318. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/rm.js +0 -0
  319. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/connector/test.js +0 -0
  320. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/container/arguments.json +0 -0
  321. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/container/help.js +0 -0
  322. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/container/help.txt +0 -0
  323. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/container/man.js +0 -0
  324. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/container/ps.js +0 -0
  325. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/container/stop.js +0 -0
  326. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/add.js +0 -0
  327. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/arguments.json +0 -0
  328. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/help.txt +0 -0
  329. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/inc/args.js +0 -0
  330. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/inc/namespace.js +0 -0
  331. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  332. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/inc/reference-scan.js +0 -0
  333. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/inc/scaffold.js +0 -0
  334. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/remove.js +0 -0
  335. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/rename.js +0 -0
  336. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/controller/rm.js +0 -0
  337. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/add.js +0 -0
  338. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/get.js +0 -0
  339. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/help.js +0 -0
  340. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/help.txt +0 -0
  341. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/link-dev.js +0 -0
  342. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/list.js +0 -0
  343. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/remove.js +0 -0
  344. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/rm.js +0 -0
  345. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/set.js +0 -0
  346. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/unset.js +0 -0
  347. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/env/use.js +0 -0
  348. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/add.js +0 -0
  349. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/arguments.json +0 -0
  350. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/build.js +0 -0
  351. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/dot.js +0 -0
  352. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/get.js +0 -0
  353. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/help.js +0 -0
  354. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/help.txt +0 -0
  355. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/init.js +0 -0
  356. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/link-node-modules.js +0 -0
  357. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/link.js +0 -0
  358. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/list.js +0 -0
  359. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/man.js +0 -0
  360. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/msg.json +0 -0
  361. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/open.js +0 -0
  362. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/remove.js +0 -0
  363. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/reset.js +0 -0
  364. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/restart.js +0 -0
  365. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/set.js +0 -0
  366. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/start.js +0 -0
  367. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/status.js +0 -0
  368. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/stop.js +0 -0
  369. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/tail.js +0 -0
  370. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/update.js +0 -0
  371. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/framework/version.js +0 -0
  372. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/gina-dev.1.md +0 -0
  373. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/gina-framework.1.md +0 -0
  374. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/gina.1.md +0 -0
  375. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/helper.js +0 -0
  376. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/i18n/add.js +0 -0
  377. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/i18n/arguments.json +0 -0
  378. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/i18n/export.js +0 -0
  379. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/i18n/help.js +0 -0
  380. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/i18n/help.txt +0 -0
  381. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/i18n/import.js +0 -0
  382. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/i18n/scan.js +0 -0
  383. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/_host.js +0 -0
  384. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/arguments.json +0 -0
  385. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/build.js +0 -0
  386. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/help.js +0 -0
  387. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/help.txt +0 -0
  388. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/list.js +0 -0
  389. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/man.js +0 -0
  390. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/rm.js +0 -0
  391. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/image/run.js +0 -0
  392. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/index.js +0 -0
  393. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/inspector/help.js +0 -0
  394. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/inspector/help.txt +0 -0
  395. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/inspector/open.js +0 -0
  396. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/man-render.js +0 -0
  397. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/minion/arguments.json +0 -0
  398. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/minion/help.js +0 -0
  399. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/minion/help.txt +0 -0
  400. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/minion/kill.js +0 -0
  401. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/minion/list.js +0 -0
  402. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/msg.json +0 -0
  403. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/port/help.js +0 -0
  404. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/port/help.txt +0 -0
  405. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/port/inc/scan.js +0 -0
  406. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/port/list.js +0 -0
  407. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/port/reset.js +0 -0
  408. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/port/set.js +0 -0
  409. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/add.js +0 -0
  410. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/arguments.json +0 -0
  411. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/backup.js +0 -0
  412. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/build.js +0 -0
  413. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/help.js +0 -0
  414. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/help.txt +0 -0
  415. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/import.js +0 -0
  416. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/list.js +0 -0
  417. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/man.js +0 -0
  418. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/move.js +0 -0
  419. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/remove.js +0 -0
  420. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/rename.js +0 -0
  421. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/restart.js +0 -0
  422. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/restore.js +0 -0
  423. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/rm.js +0 -0
  424. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/start.js +0 -0
  425. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/status.js +0 -0
  426. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/project/stop.js +0 -0
  427. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/protocol/arguments.json +0 -0
  428. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/protocol/help.js +0 -0
  429. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/protocol/help.txt +0 -0
  430. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/protocol/list.js +0 -0
  431. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/protocol/remove.js +0 -0
  432. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/protocol/set.js +0 -0
  433. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/add.js +0 -0
  434. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/help.js +0 -0
  435. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/help.txt +0 -0
  436. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/link-local.js +0 -0
  437. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/link-production.js +0 -0
  438. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/list.js +0 -0
  439. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/remove.js +0 -0
  440. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/rm.js +0 -0
  441. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/scope/use.js +0 -0
  442. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/secrets/help.js +0 -0
  443. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/secrets/scan.js +0 -0
  444. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/service/help.js +0 -0
  445. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/service/help.txt +0 -0
  446. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/service/list.js +0 -0
  447. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/service/man.js +0 -0
  448. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/service/start.js +0 -0
  449. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd/view/add.js +0 -0
  450. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd-status-format/package.json +0 -0
  451. /package/framework/{v0.6.3 → v0.6.4}/lib/cmd-status-format/src/main.js +0 -0
  452. /package/framework/{v0.6.3 → v0.6.4}/lib/collection/README.md +0 -0
  453. /package/framework/{v0.6.3 → v0.6.4}/lib/collection/build.json +0 -0
  454. /package/framework/{v0.6.3 → v0.6.4}/lib/collection/package.json +0 -0
  455. /package/framework/{v0.6.3 → v0.6.4}/lib/collection/src/main.js +0 -0
  456. /package/framework/{v0.6.3 → v0.6.4}/lib/config.js +0 -0
  457. /package/framework/{v0.6.3 → v0.6.4}/lib/connector-config/package.json +0 -0
  458. /package/framework/{v0.6.3 → v0.6.4}/lib/connector-config/src/main.js +0 -0
  459. /package/framework/{v0.6.3 → v0.6.4}/lib/connector-error/package.json +0 -0
  460. /package/framework/{v0.6.3 → v0.6.4}/lib/connector-error/src/main.js +0 -0
  461. /package/framework/{v0.6.3 → v0.6.4}/lib/connector-registry/package.json +0 -0
  462. /package/framework/{v0.6.3 → v0.6.4}/lib/connector-registry/src/main.js +0 -0
  463. /package/framework/{v0.6.3 → v0.6.4}/lib/cron/README.md +0 -0
  464. /package/framework/{v0.6.3 → v0.6.4}/lib/cron/package.json +0 -0
  465. /package/framework/{v0.6.3 → v0.6.4}/lib/cron/src/main.js +0 -0
  466. /package/framework/{v0.6.3 → v0.6.4}/lib/domain/LICENSE +0 -0
  467. /package/framework/{v0.6.3 → v0.6.4}/lib/domain/README.md +0 -0
  468. /package/framework/{v0.6.3 → v0.6.4}/lib/domain/package.json +0 -0
  469. /package/framework/{v0.6.3 → v0.6.4}/lib/domain/src/main.js +0 -0
  470. /package/framework/{v0.6.3 → v0.6.4}/lib/dto/package.json +0 -0
  471. /package/framework/{v0.6.3 → v0.6.4}/lib/dto/src/main.js +0 -0
  472. /package/framework/{v0.6.3 → v0.6.4}/lib/dto-pipe/package.json +0 -0
  473. /package/framework/{v0.6.3 → v0.6.4}/lib/dto-pipe/src/main.js +0 -0
  474. /package/framework/{v0.6.3 → v0.6.4}/lib/dto-types/package.json +0 -0
  475. /package/framework/{v0.6.3 → v0.6.4}/lib/dto-types/src/main.js +0 -0
  476. /package/framework/{v0.6.3 → v0.6.4}/lib/generator/index.js +0 -0
  477. /package/framework/{v0.6.3 → v0.6.4}/lib/i18n/package.json +0 -0
  478. /package/framework/{v0.6.3 → v0.6.4}/lib/i18n/src/main.js +0 -0
  479. /package/framework/{v0.6.3 → v0.6.4}/lib/image-build/package.json +0 -0
  480. /package/framework/{v0.6.3 → v0.6.4}/lib/image-build/src/main.js +0 -0
  481. /package/framework/{v0.6.3 → v0.6.4}/lib/index.js +0 -0
  482. /package/framework/{v0.6.3 → v0.6.4}/lib/inherits/LICENSE +0 -0
  483. /package/framework/{v0.6.3 → v0.6.4}/lib/inherits/README.md +0 -0
  484. /package/framework/{v0.6.3 → v0.6.4}/lib/inherits/package.json +0 -0
  485. /package/framework/{v0.6.3 → v0.6.4}/lib/inherits/src/main.js +0 -0
  486. /package/framework/{v0.6.3 → v0.6.4}/lib/inspector-events/package.json +0 -0
  487. /package/framework/{v0.6.3 → v0.6.4}/lib/inspector-events/src/main.js +0 -0
  488. /package/framework/{v0.6.3 → v0.6.4}/lib/inspector-redact/package.json +0 -0
  489. /package/framework/{v0.6.3 → v0.6.4}/lib/inspector-redact/src/main.js +0 -0
  490. /package/framework/{v0.6.3 → v0.6.4}/lib/instrument/package.json +0 -0
  491. /package/framework/{v0.6.3 → v0.6.4}/lib/instrument/src/main.js +0 -0
  492. /package/framework/{v0.6.3 → v0.6.4}/lib/job/package.json +0 -0
  493. /package/framework/{v0.6.3 → v0.6.4}/lib/job/src/main.js +0 -0
  494. /package/framework/{v0.6.3 → v0.6.4}/lib/job-store.js +0 -0
  495. /package/framework/{v0.6.3 → v0.6.4}/lib/json-config-header/package.json +0 -0
  496. /package/framework/{v0.6.3 → v0.6.4}/lib/json-config-header/src/main.js +0 -0
  497. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/README.md +0 -0
  498. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/package.json +0 -0
  499. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/containers/default/index.js +0 -0
  500. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/containers/file/index.js +0 -0
  501. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  502. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  503. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/containers/mq/index.js +0 -0
  504. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/helper.js +0 -0
  505. /package/framework/{v0.6.3 → v0.6.4}/lib/logger/src/main.js +0 -0
  506. /package/framework/{v0.6.3 → v0.6.4}/lib/math/index.js +0 -0
  507. /package/framework/{v0.6.3 → v0.6.4}/lib/mcp-dispatch/package.json +0 -0
  508. /package/framework/{v0.6.3 → v0.6.4}/lib/mcp-dispatch/src/main.js +0 -0
  509. /package/framework/{v0.6.3 → v0.6.4}/lib/mcp-http/package.json +0 -0
  510. /package/framework/{v0.6.3 → v0.6.4}/lib/mcp-http/src/main.js +0 -0
  511. /package/framework/{v0.6.3 → v0.6.4}/lib/mcp-server/package.json +0 -0
  512. /package/framework/{v0.6.3 → v0.6.4}/lib/mcp-server/src/main.js +0 -0
  513. /package/framework/{v0.6.3 → v0.6.4}/lib/merge/README.md +0 -0
  514. /package/framework/{v0.6.3 → v0.6.4}/lib/merge/package.json +0 -0
  515. /package/framework/{v0.6.3 → v0.6.4}/lib/merge/src/main.js +0 -0
  516. /package/framework/{v0.6.3 → v0.6.4}/lib/metrics/package.json +0 -0
  517. /package/framework/{v0.6.3 → v0.6.4}/lib/metrics/src/main.js +0 -0
  518. /package/framework/{v0.6.3 → v0.6.4}/lib/model.js +0 -0
  519. /package/framework/{v0.6.3 → v0.6.4}/lib/net-locality/package.json +0 -0
  520. /package/framework/{v0.6.3 → v0.6.4}/lib/net-locality/src/main.js +0 -0
  521. /package/framework/{v0.6.3 → v0.6.4}/lib/nunjucks-filters/README.md +0 -0
  522. /package/framework/{v0.6.3 → v0.6.4}/lib/nunjucks-filters/package.json +0 -0
  523. /package/framework/{v0.6.3 → v0.6.4}/lib/nunjucks-filters/src/main.js +0 -0
  524. /package/framework/{v0.6.3 → v0.6.4}/lib/nunjucks-resolver/package.json +0 -0
  525. /package/framework/{v0.6.3 → v0.6.4}/lib/nunjucks-resolver/src/main.js +0 -0
  526. /package/framework/{v0.6.3 → v0.6.4}/lib/proc.js +0 -0
  527. /package/framework/{v0.6.3 → v0.6.4}/lib/release-watch/package.json +0 -0
  528. /package/framework/{v0.6.3 → v0.6.4}/lib/release-watch/src/main.js +0 -0
  529. /package/framework/{v0.6.3 → v0.6.4}/lib/render-cache/package.json +0 -0
  530. /package/framework/{v0.6.3 → v0.6.4}/lib/render-cache/src/main.js +0 -0
  531. /package/framework/{v0.6.3 → v0.6.4}/lib/render-cache-store.js +0 -0
  532. /package/framework/{v0.6.3 → v0.6.4}/lib/routing/README.md +0 -0
  533. /package/framework/{v0.6.3 → v0.6.4}/lib/routing/build.json +0 -0
  534. /package/framework/{v0.6.3 → v0.6.4}/lib/routing/package.json +0 -0
  535. /package/framework/{v0.6.3 → v0.6.4}/lib/routing/src/main.js +0 -0
  536. /package/framework/{v0.6.3 → v0.6.4}/lib/routing/src/radix.js +0 -0
  537. /package/framework/{v0.6.3 → v0.6.4}/lib/routing-introspect/package.json +0 -0
  538. /package/framework/{v0.6.3 → v0.6.4}/lib/routing-introspect/src/main.js +0 -0
  539. /package/framework/{v0.6.3 → v0.6.4}/lib/secrets/package.json +0 -0
  540. /package/framework/{v0.6.3 → v0.6.4}/lib/secrets/src/backends/env.js +0 -0
  541. /package/framework/{v0.6.3 → v0.6.4}/lib/session-store.js +0 -0
  542. /package/framework/{v0.6.3 → v0.6.4}/lib/shell.js +0 -0
  543. /package/framework/{v0.6.3 → v0.6.4}/lib/sqlite-driver.js +0 -0
  544. /package/framework/{v0.6.3 → v0.6.4}/lib/state.js +0 -0
  545. /package/framework/{v0.6.3 → v0.6.4}/lib/swig-filters/README.md +0 -0
  546. /package/framework/{v0.6.3 → v0.6.4}/lib/swig-filters/package.json +0 -0
  547. /package/framework/{v0.6.3 → v0.6.4}/lib/swig-filters/src/main.js +0 -0
  548. /package/framework/{v0.6.3 → v0.6.4}/lib/swig-resolver/package.json +0 -0
  549. /package/framework/{v0.6.3 → v0.6.4}/lib/swig-resolver/src/main.js +0 -0
  550. /package/framework/{v0.6.3 → v0.6.4}/lib/template-loaders/package.json +0 -0
  551. /package/framework/{v0.6.3 → v0.6.4}/lib/template-loaders/src/loaders/http.js +0 -0
  552. /package/framework/{v0.6.3 → v0.6.4}/lib/template-loaders/src/loaders/memory.js +0 -0
  553. /package/framework/{v0.6.3 → v0.6.4}/lib/template-loaders/src/main.js +0 -0
  554. /package/framework/{v0.6.3 → v0.6.4}/lib/url/README.md +0 -0
  555. /package/framework/{v0.6.3 → v0.6.4}/lib/url/index.js +0 -0
  556. /package/framework/{v0.6.3 → v0.6.4}/lib/url/routing.json +0 -0
  557. /package/framework/{v0.6.3 → v0.6.4}/lib/uuid/package.json +0 -0
  558. /package/framework/{v0.6.3 → v0.6.4}/lib/uuid/src/main.js +0 -0
  559. /package/framework/{v0.6.3 → v0.6.4}/lib/validator.js +0 -0
  560. /package/framework/{v0.6.3 → v0.6.4}/lib/watcher/package.json +0 -0
  561. /package/framework/{v0.6.3 → v0.6.4}/lib/watcher/src/main.js +0 -0
  562. /package/framework/{v0.6.3 → v0.6.4}/lib/ws-framing/package.json +0 -0
  563. /package/framework/{v0.6.3 → v0.6.4}/lib/ws-framing/src/main.js +0 -0
  564. /package/framework/{v0.6.3 → v0.6.4}/lib/ws-query/package.json +0 -0
  565. /package/framework/{v0.6.3 → v0.6.4}/lib/ws-query/src/main.js +0 -0
  566. /package/framework/{v0.6.3 → v0.6.4}/lib/ws-session/package.json +0 -0
  567. /package/framework/{v0.6.3 → v0.6.4}/lib/ws-session/src/main.js +0 -0
@@ -0,0 +1,861 @@
1
+ var fs = require('fs');
2
+ var console = lib.logger;
3
+
4
+ var CmdHelper = require('./../helper');
5
+
6
+ /**
7
+ * @module gina/lib/cmd/secrets/check
8
+ */
9
+ /**
10
+ * Enumerates the `${secret:KEY}` placeholders each bundle requires (same
11
+ * walk as `secrets:scan`) and cross-references the *current* `process.env`,
12
+ * reporting each key as `SET` or `UNSET`. Exits non-zero when any required
13
+ * key is unset, so it can gate a CI / pre-deploy step.
14
+ *
15
+ * Usage:
16
+ * gina secrets:check
17
+ * gina secrets:check @<project>
18
+ * gina secrets:check <bundle> @<project>
19
+ * gina secrets:check @<project> --format=json
20
+ * gina secrets:check @<project> --scope=<scope>
21
+ * gina secrets:check @<project> --scope=<scope> --env-file=<path>
22
+ *
23
+ * "Set" matches the env backend's fail-closed rule exactly: a key counts
24
+ * as satisfied only when its value is a **non-empty string** — the same
25
+ * condition under which `secrets.resolve()` would succeed at bundle start.
26
+ * So an `UNSET` here is precisely a key that would throw at load.
27
+ *
28
+ * `--scope=<s>`: enumerate the *effective* keys for that scope by read-only
29
+ * overlaying the sibling `config_<s>/` dirs over the base (see `secrets:scan`).
30
+ * `--env-file=<path>`: stand in for the live `process.env` — e.g. a decrypted
31
+ * SOPS export or a CI-exported env. It occupies the *environment tier*, which
32
+ * outranks the file tier below, so an explicit file still wins.
33
+ *
34
+ * Two tiers, because the runtime has two. Since the file backend shipped, a
35
+ * bundle may declare `settings.secrets.file`, and `core/config.js` resolves
36
+ * placeholders against the environment first and those files second. Checking
37
+ * the environment alone therefore reported `UNSET` for a key the bundle would
38
+ * have started with — a false alarm on the very gate that exists to prevent
39
+ * surprises. This command now resolves the bundle's declared chain with the
40
+ * same `whisper` dictionary the runtime uses and consults it as the lower
41
+ * tier, so the two sides cannot disagree about what a file means (they share
42
+ * `lib/secrets`'s parser) nor about where it lives (they share the token
43
+ * substitution).
44
+ *
45
+ * Caveat: without `--env-file` this checks the env of THIS CLI process, not a
46
+ * detached bundle's runtime/container environment. Real value: a CI step that
47
+ * exports (or decrypts) the scope's secrets and runs `secrets:check --scope=…
48
+ * --env-file=…` before shipping. It cannot introspect an already-running
49
+ * bundle's env.
50
+ *
51
+ * Second caveat, and the reason the report names its assumptions: `${scope}`
52
+ * and `${env}` are *launch-time* values. The runtime reads `NODE_SCOPE` /
53
+ * `NODE_ENV` from whatever started the bundle; this process can only see
54
+ * `--scope` / `--env` or the project defaults. When a declared path embeds a
55
+ * token this command cannot resolve, it says so and skips the file tier
56
+ * rather than statting a literally-named path — which can only make the gate
57
+ * stricter than the runtime, never laxer.
58
+ *
59
+ * @class Check
60
+ * @constructor
61
+ * @param {object} opt - Parsed command-line options
62
+ * @param {object} opt.client - Socket client for terminal output
63
+ * @param {string[]} opt.argv - Full argv array
64
+ * @param {number} [opt.debugPort] - Node.js inspector port
65
+ * @param {boolean} [opt.debugBrkEnabled] - True when --inspect-brk is active
66
+ * @param {object} cmd - The cmd dispatcher object (lib/cmd/index.js)
67
+ */
68
+ function Check(opt, cmd) {
69
+ var self = { format: 'text', anyUnset: false, scopeName: null, envName: null, envFile: null, envMap: null };
70
+
71
+ var secrets = lib.secrets;
72
+ var merge = lib.merge;
73
+
74
+ /**
75
+ * Matches any `${…}` token the substitution pass did not resolve. Mirrors
76
+ * the guard in `lib/secrets/src/main.js` so this command rejects exactly
77
+ * what the runtime would reject.
78
+ *
79
+ * @inner
80
+ * @constant
81
+ * @type {RegExp}
82
+ */
83
+ var UNRESOLVED_TOKEN = /\$\{[^}]*\}/;
84
+
85
+ /**
86
+ * Config files are JSON. The loader globs every `.json` in a config
87
+ * dir; this matches that, then drops dotfiles and `* copy` siblings.
88
+ *
89
+ * @inner
90
+ * @constant
91
+ * @type {RegExp}
92
+ */
93
+ var JSON_EXT = /\.json$/;
94
+
95
+ /**
96
+ * Parses `--format`, resolves project + optional bundle via CmdHelper,
97
+ * dispatches to the right checker, and exits non-zero if any required
98
+ * secret is unset.
99
+ *
100
+ * @inner
101
+ * @private
102
+ */
103
+ var init = function () {
104
+ new CmdHelper(self, opt.client, { port: opt.debugPort, brkEnabled: opt.debugBrkEnabled });
105
+ if ( !isCmdConfigured() ) return false;
106
+
107
+ self.anyUnset = false;
108
+
109
+ for (var i = 3, len = process.argv.length; i < len; i++) {
110
+ var arg = process.argv[i];
111
+ if ( /^\-\-format\=/.test(arg) ) {
112
+ self.format = arg.split(/\=/)[1] || 'text';
113
+ }
114
+ }
115
+ if (self.format !== 'text' && self.format !== 'json') {
116
+ console.error('--format must be `text` or `json` (got `' + self.format + '`)');
117
+ process.exit(1);
118
+ return;
119
+ }
120
+
121
+ // --scope + --env-file are declared in arguments.json and captured into
122
+ // self.params by CmdHelper (filterArgs skips them for GINA_ mapping but
123
+ // leaves them in argv for getParams — same path bundle:* --scope uses).
124
+ self.scopeName = (self.params && self.params.scope) ? self.params.scope : null;
125
+ self.envFile = (self.params && self.params['env-file']) ? self.params['env-file'] : null;
126
+ // `--env` is not one of the task prefixes CmdHelper re-applies to
127
+ // `defaultEnv` (it does that only for start/stop/restart/build/deploy),
128
+ // so read it off params exactly as --scope is read above. It is needed
129
+ // because a project declares `homedir` per bundle AND per env.
130
+ self.envName = (self.params && self.params.env) ? self.params.env : (self.defaultEnv || null);
131
+ // The scope a declared `secrets.file` path is resolved WITH is a
132
+ // separate concern from `self.scopeName`, which selects the read-only
133
+ // `config_<scope>/` overlay. Defaulting `scopeName` itself would start
134
+ // applying that overlay to every bare `scan`/`check` — a behaviour
135
+ // change nobody asked for — so the assumed scope lives in its own slot
136
+ // and falls back to the project default, matching what the runtime
137
+ // would use when no launcher overrides NODE_SCOPE.
138
+ self.scopeAssumed = self.scopeName || self.defaultScope || null;
139
+ if (self.envFile) {
140
+ self.envMap = loadEnvFile(_(self.envFile, true));
141
+ if (self.envMap === null) {
142
+ console.error('--env-file not readable: ' + self.envFile);
143
+ process.exit(1);
144
+ return;
145
+ }
146
+ }
147
+
148
+ var bundleFilter = self.name || null;
149
+
150
+ if ( typeof(self.projectName) == 'undefined' || self.projectName == null ) {
151
+ if (bundleFilter) {
152
+ console.error('`secrets:check <bundle>` requires `@<project>`. Did you forget `@<project_name>`?');
153
+ process.exit(1);
154
+ return;
155
+ }
156
+ checkAll();
157
+ process.exit(self.anyUnset ? 1 : 0);
158
+ return;
159
+ }
160
+
161
+ if ( typeof(self.projects[self.projectName]) == 'undefined' ) {
162
+ console.error('Project @' + self.projectName + ' is not registered. Run `gina project:list` to see registered projects.');
163
+ process.exit(1);
164
+ return;
165
+ }
166
+
167
+ if (bundleFilter) {
168
+ var manifest = loadManifest(self.projects[self.projectName].path);
169
+ if (manifest && manifest.bundles && !manifest.bundles[bundleFilter]) {
170
+ console.error('Bundle [ ' + bundleFilter + ' ] is not registered inside `@' + self.projectName + '`.');
171
+ process.exit(1);
172
+ return;
173
+ }
174
+ checkBundleOnly(self.projectName, bundleFilter);
175
+ } else {
176
+ checkProjectOnly(self.projectName);
177
+ }
178
+
179
+ process.exit(self.anyUnset ? 1 : 0);
180
+ };
181
+
182
+ /**
183
+ * Reads a JSON file with comment tolerance via `requireJSON`. Returns
184
+ * `null` on any I/O or parse error.
185
+ *
186
+ * @inner
187
+ * @private
188
+ * @param {string} filePath
189
+ * @returns {object|null}
190
+ */
191
+ var readJsonSafe = function (filePath) {
192
+ try {
193
+ if ( !fs.existsSync(filePath) ) return null;
194
+ return requireJSON(filePath);
195
+ } catch (e) {
196
+ return null;
197
+ }
198
+ };
199
+
200
+ /**
201
+ * Parses a `.env`-style file into a `{ KEY: value }` map. Lines are
202
+ * `KEY=value`; blank lines and `#` comments are skipped, an optional
203
+ * `export ` prefix is stripped, and surrounding single/double quotes are
204
+ * removed. Returns `null` when the file cannot be read (so the caller can
205
+ * surface the error). Used by `--env-file`: validate a scope's exported /
206
+ * decrypted env (e.g. SOPS output) instead of the live `process.env`.
207
+ *
208
+ * Delegates to `lib.secrets.parseEnvFile` rather than parsing here: this
209
+ * handler answers "would a bundle started here resolve its placeholders?",
210
+ * so it must read a file byte-for-byte the way the runtime resolver would.
211
+ * A second copy of the parser could drift on a quoted value or a CRLF line
212
+ * ending and report a clean bill of health for a file the runtime then
213
+ * read differently — the exact false-green this command exists to prevent.
214
+ *
215
+ * @inner
216
+ * @private
217
+ * @param {string} filePath
218
+ * @returns {Object<string,string>|null}
219
+ */
220
+ var loadEnvFile = function (filePath) {
221
+ return secrets.parseEnvFile(filePath);
222
+ };
223
+
224
+ /**
225
+ * Reads one named config file with the `--scope` overlay applied, using
226
+ * the same merge direction as `collectKeysFromConfigDir` (scope wins,
227
+ * base back-fills, `override=false` stated explicitly).
228
+ *
229
+ * @inner
230
+ * @private
231
+ * @param {string} absDir - Absolute base config directory
232
+ * @param {string} name - File name, e.g. `settings.json`
233
+ * @returns {object|null}
234
+ */
235
+ var readScopedConfig = function (absDir, name) {
236
+ var base = readJsonSafe(_(absDir + '/' + name, true));
237
+ var scope = self.scopeName
238
+ ? readJsonSafe(_(absDir + '_' + self.scopeName + '/' + name, true))
239
+ : null;
240
+ if (!scope) return base;
241
+ return merge(JSON.clone(scope), base || {}, false);
242
+ };
243
+
244
+ /**
245
+ * The effective `settings.json` for a bundle — `shared/config/` first with
246
+ * the bundle's own on top. That direction mirrors the loader, which does
247
+ * `merge(sharedMain, jsonFile, true)` (`core/config.js`): the bundle's own
248
+ * file wins on a conflicting key. Both sides get the `--scope` overlay.
249
+ *
250
+ * @inner
251
+ * @private
252
+ * @param {string} projectPath
253
+ * @param {object|null} manifest
254
+ * @param {string} bundleName
255
+ * @returns {object|null}
256
+ */
257
+ var readEffectiveSettings = function (projectPath, manifest, bundleName) {
258
+ var bundleSrc = resolveBundleSrc(manifest, bundleName);
259
+ var shared = readScopedConfig(_(projectPath + '/shared/config', true), 'settings.json');
260
+ var own = readScopedConfig(_(projectPath + '/' + bundleSrc + '/config', true), 'settings.json');
261
+ if (!shared) return own;
262
+ if (!own) return shared;
263
+ return merge(JSON.clone(shared), own, true);
264
+ };
265
+
266
+ /**
267
+ * Rebuilds the subset of the runtime's substitution dictionary that a
268
+ * secrets-file path may legitimately use. Deliberately partial: only keys
269
+ * whose value this process can derive to the *same string* the runtime
270
+ * derives are included.
271
+ *
272
+ * A key is set only when its value is a non-empty string. That is not
273
+ * defensive tidiness — it is the contract. An absent key leaves its token
274
+ * verbatim, which the caller then rejects loudly; an **empty** value is
275
+ * substituted silently, so `${scope}` with `scope: ''` would collapse
276
+ * `<home>/<scope>/secrets.env` to the base path and read the wrong file
277
+ * without a word.
278
+ *
279
+ * `homedir` is read from the project's own `env.json` (`<bundle>.<env>`),
280
+ * falling back to the framework template's `~/.<projectName>` — the same
281
+ * two sources, in the same order, as `core/config.js`. It is emphatically
282
+ * NOT `projects.json`'s `homedir` field: that is a CLI-level concept the
283
+ * config loader never reads, and using it here would put this command on a
284
+ * different path from the bundle it is meant to be validating.
285
+ *
286
+ * @inner
287
+ * @private
288
+ * @param {string} projectPath
289
+ * @param {object|null} manifest - The project manifest, for the version tokens
290
+ * @param {string} bundleName
291
+ * @returns {Object<string,string>}
292
+ */
293
+ var buildReps = function (projectPath, manifest, bundleName) {
294
+ var reps = {};
295
+ var put = function (key, value) {
296
+ if (typeof value === 'string' && value !== '') reps[key] = value;
297
+ };
298
+
299
+ // Resolve the name from the PATH rather than trusting `self.projectName`:
300
+ // the no-argument form iterates every registered project, and on that
301
+ // branch `self.projectName` is undefined by definition. Using it there
302
+ // built `~/.undefined` — a real, stat-able, wrong path that reported
303
+ // every layer ABSENT instead of failing loudly.
304
+ var projectName = self.projectName;
305
+ for (var pn in (self.projects || {})) {
306
+ if (self.projects[pn] && self.projects[pn].path === projectPath) {
307
+ projectName = pn;
308
+ break;
309
+ }
310
+ }
311
+
312
+ put('projectName', projectName);
313
+ // `${project}` is the project's PATH, not its name (getPath('project')).
314
+ put('project', projectPath);
315
+ put('projectPath', projectPath);
316
+ put('executionPath', projectPath);
317
+ put('root', projectPath);
318
+ put('bundle', bundleName);
319
+ put('frameworkDir', (typeof getEnvVar === 'function') ? getEnvVar('GINA_FRAMEWORK_DIR') : null);
320
+ put('scope', self.scopeAssumed);
321
+ put('env', self.envName);
322
+
323
+ // Version tokens. The runtime gets these without listing them in the
324
+ // bundle-config dictionary: `core/template/conf/env.json` declares
325
+ // `projectVersion` / `projectVersionMajor` as per-bundle scalars, the
326
+ // env-loading pass resolves them from the manifest, and the scalar
327
+ // harvest then copies them into the dictionary that substitutes config.
328
+ // Omitting them here made a path like `${homedir}/v${projectVersionMajor}/…`
329
+ // unresolvable on this side while the bundle booted from it fine —
330
+ // the file tier would be skipped and its keys reported UNSET, which is
331
+ // the false alarm this command exists to prevent.
332
+ if (manifest && typeof manifest.version === 'string' && manifest.version !== '') {
333
+ put('projectVersion', manifest.version);
334
+ put('projectVersionMajor', manifest.version.split(/\./g)[0]);
335
+ }
336
+
337
+ var declared = null;
338
+ var envData = readJsonSafe(_(projectPath + '/env.json', true));
339
+ if (envData && envData[bundleName] && envData[bundleName][self.envName]) {
340
+ declared = envData[bundleName][self.envName].homedir;
341
+ }
342
+ // `~` is expanded by whisper's own OS pass, not by `_()`, so the
343
+ // template default is handed over verbatim exactly as the loader does.
344
+ put('homedir', (typeof declared === 'string' && declared !== '')
345
+ ? declared
346
+ : (projectName ? '~/.' + projectName : null));
347
+
348
+ return reps;
349
+ };
350
+
351
+ /**
352
+ * Resolves a bundle's declared `settings.secrets.file` chain and layers the
353
+ * readable files into one map, later entries winning — the same ordering
354
+ * `lib/secrets/backends/file.js` applies.
355
+ *
356
+ * Validation mirrors `secrets.selectBackend` so this command accepts and
357
+ * rejects exactly what a boot would: a non-string or empty entry, a
358
+ * `${secret:…}` placeholder (unresolvable by definition — the backend that
359
+ * would resolve it is the one being built), and any token the dictionary
360
+ * did not know.
361
+ *
362
+ * @inner
363
+ * @private
364
+ * @param {string} projectPath
365
+ * @param {object|null} manifest
366
+ * @param {string} bundleName
367
+ * @returns {{declared:boolean, layers:Array<{path:string, found:boolean, unreadable:boolean, code:(string|null), keys:number}>, map:(object|null), origin:(object|null), errors:string[]}}
368
+ * A layer is `unreadable` when it exists but could not be opened (`code` is the
369
+ * `fs` error, e.g. `'EACCES'`). That case also pushes an entry onto `errors`,
370
+ * because the runtime refuses to boot on it (#B267) — reporting it as a mere
371
+ * absence would green-light a config that cannot start.
372
+ */
373
+ var resolveSecretsFileChain = function (projectPath, manifest, bundleName) {
374
+ var out = { declared: false, layers: [], map: null, origin: null, errors: [] };
375
+
376
+ var settings = readEffectiveSettings(projectPath, manifest, bundleName);
377
+ var declared = (settings && settings.secrets && typeof settings.secrets === 'object')
378
+ ? settings.secrets.file
379
+ : undefined;
380
+ if (typeof declared === 'undefined' || declared === null) return out;
381
+
382
+ var raw = Array.isArray(declared) ? declared : [declared];
383
+ if (!raw.length) return out;
384
+ out.declared = true;
385
+
386
+ for (var i = 0; i < raw.length; i++) {
387
+ if (typeof raw[i] !== 'string' || raw[i] === '') {
388
+ out.errors.push('`settings.secrets.file` must be a non-empty string or an array of them');
389
+ return out;
390
+ }
391
+ if (raw[i].indexOf('${secret:') > -1) {
392
+ out.errors.push('`settings.secrets.file` cannot contain a `${secret:…}` placeholder');
393
+ return out;
394
+ }
395
+ }
396
+
397
+ var resolved;
398
+ try {
399
+ resolved = whisper(buildReps(projectPath, manifest, bundleName), JSON.clone(raw));
400
+ } catch (whisperErr) {
401
+ out.errors.push('could not substitute tokens in `settings.secrets.file`: ' + whisperErr.message);
402
+ return out;
403
+ }
404
+
405
+ var map = Object.create(null);
406
+ var origin = Object.create(null);
407
+ for (var p = 0; p < resolved.length; p++) {
408
+ var path = resolved[p];
409
+ if (UNRESOLVED_TOKEN.test(path)) {
410
+ // Skip the whole tier rather than stat a literally-named path.
411
+ // Under-reading can only make this gate stricter than the
412
+ // runtime; guessing could make it laxer, which is the failure
413
+ // this command exists to prevent.
414
+ out.errors.push('unresolved token in `' + path + '`'
415
+ + ' — pass --scope/--env if it names one, since the runtime'
416
+ + ' reads those from whatever launches the bundle');
417
+ return out;
418
+ }
419
+ var layerRead = secrets.readEnvFile(path);
420
+ out.layers.push({
421
+ path : path,
422
+ found : layerRead.found,
423
+ unreadable : (!layerRead.found && layerRead.code !== 'ENOENT'),
424
+ code : layerRead.code,
425
+ keys : layerRead.found ? Object.keys(layerRead.map).length : 0
426
+ });
427
+ if (!layerRead.found) {
428
+ // #B267 parity — the runtime REFUSES to boot on a declared path that
429
+ // exists but cannot be read. Reporting that as a plain absence here
430
+ // would hand back a clean bill of health for a config that cannot
431
+ // boot at all, which is precisely the checker-vs-runtime disagreement
432
+ // this command exists to prevent.
433
+ if (layerRead.code !== 'ENOENT') {
434
+ out.errors.push('`' + path + '` exists but cannot be read ('
435
+ + layerRead.code + ') — the runtime REFUSES to boot on this;'
436
+ + ' fix the file permissions or ownership');
437
+ }
438
+ continue; // absent file: contributes nothing, not an error
439
+ }
440
+ for (var key in layerRead.map) {
441
+ map[key] = layerRead.map[key]; // later path wins
442
+ origin[key] = path;
443
+ }
444
+ }
445
+
446
+ out.map = map;
447
+ out.origin = origin;
448
+ return out;
449
+ };
450
+
451
+ /**
452
+ * Loads `<projectPath>/manifest.json`. Returns `null` on failure.
453
+ *
454
+ * @inner
455
+ * @private
456
+ * @param {string} projectPath
457
+ * @returns {object|null}
458
+ */
459
+ var loadManifest = function (projectPath) {
460
+ return readJsonSafe(_(projectPath + '/manifest.json', true));
461
+ };
462
+
463
+ /**
464
+ * Resolves a bundle's source-dir (relative to the project root) from
465
+ * the manifest, mirroring `bundle:openapi`. Falls back to the bundle
466
+ * name when `src` is absent.
467
+ *
468
+ * @inner
469
+ * @private
470
+ * @param {object|null} manifest
471
+ * @param {string} bundleName
472
+ * @returns {string}
473
+ */
474
+ var resolveBundleSrc = function (manifest, bundleName) {
475
+ if ( manifest && manifest.bundles && manifest.bundles[bundleName] && manifest.bundles[bundleName].src ) {
476
+ return manifest.bundles[bundleName].src;
477
+ }
478
+ return bundleName;
479
+ };
480
+
481
+ /**
482
+ * Lists the `.json` files in `dir`, skipping dotfiles and `* copy`
483
+ * siblings. Empty when the dir is absent.
484
+ *
485
+ * @inner
486
+ * @private
487
+ * @param {string} dir - Absolute config directory
488
+ * @returns {string[]}
489
+ */
490
+ var listJsonFiles = function (dir) {
491
+ if ( !fs.existsSync(dir) ) return [];
492
+ var entries;
493
+ try { entries = fs.readdirSync(dir); } catch (e) { return []; }
494
+ var out = [];
495
+ for (var i = 0; i < entries.length; i++) {
496
+ var name = entries[i];
497
+ if ( /^\./.test(name) ) continue;
498
+ if ( /\s+copy/i.test(name) ) continue;
499
+ if ( !JSON_EXT.test(name) ) continue;
500
+ out.push(name);
501
+ }
502
+ out.sort();
503
+ return out;
504
+ };
505
+
506
+ /**
507
+ * Reads every `.json` under `absDir`, enumerates its required secret
508
+ * keys, and adds them to `keySet` (a null-proto set). Mutates `keySet`.
509
+ *
510
+ * When `--scope=<s>` is active, the sibling `<absDir>_<scope>/` dir is
511
+ * read-only deep-merged over the base per config file (scope wins) before
512
+ * enumeration — mirroring a deploy's per-scope overlay — so the keys are
513
+ * the *effective* ones that scope will require. Read-only introspection;
514
+ * never touches the runtime config loader.
515
+ *
516
+ * @inner
517
+ * @private
518
+ * @param {string} absDir - Absolute base config directory to read
519
+ * @param {object} keySet - Mutable null-proto set; key name -> true
520
+ */
521
+ var collectKeysFromConfigDir = function (absDir, keySet) {
522
+ var scopeAbsDir = self.scopeName ? (absDir + '_' + self.scopeName) : null;
523
+ var baseNames = listJsonFiles(absDir);
524
+ var scopeNames = scopeAbsDir ? listJsonFiles(scopeAbsDir) : [];
525
+
526
+ var names = baseNames.slice();
527
+ for (var s = 0; s < scopeNames.length; s++) {
528
+ if (names.indexOf(scopeNames[s]) < 0) names.push(scopeNames[s]);
529
+ }
530
+
531
+ for (var f = 0; f < names.length; f++) {
532
+ var name = names[f];
533
+ var baseContent = (baseNames.indexOf(name) > -1) ? readJsonSafe(_(absDir + '/' + name, true)) : null;
534
+ var scopeContent = (scopeAbsDir && scopeNames.indexOf(name) > -1) ? readJsonSafe(_(scopeAbsDir + '/' + name, true)) : null;
535
+ // scope deep-merges over base (scope wins); override=false is explicit (not
536
+ // merge's default) so scope precedence stays correct even if lib/merge's
537
+ // default override ever changes.
538
+ var effective = scopeContent ? merge(JSON.clone(scopeContent), baseContent || {}, false) : baseContent;
539
+ if (!effective) continue;
540
+ var keys = secrets.getRequiredKeys(effective);
541
+ for (var k = 0; k < keys.length; k++) {
542
+ keySet[keys[k]] = true;
543
+ }
544
+ }
545
+ };
546
+
547
+ /**
548
+ * Computes the shared-config key set once per project. The loader
549
+ * merges `shared/config/` into every bundle, so these keys are
550
+ * required by each bundle.
551
+ *
552
+ * @inner
553
+ * @private
554
+ * @param {string} projectPath
555
+ * @returns {object} Null-proto set; key name -> true
556
+ */
557
+ var computeSharedKeys = function (projectPath) {
558
+ var keySet = Object.create(null);
559
+ collectKeysFromConfigDir(_(projectPath + '/shared/config', true), keySet);
560
+ return keySet;
561
+ };
562
+
563
+ /**
564
+ * Resolves one key across both tiers in the runtime's order: the
565
+ * environment first, the declared file chain second. "Set" stays the env
566
+ * backend's fail-closed rule at every tier — a non-empty string — so an
567
+ * `UNSET` here is still precisely a key that would throw at bundle start.
568
+ *
569
+ * The environment tier is the `--env-file` map when one was given,
570
+ * otherwise the live `process.env`. Because that tier outranks the files,
571
+ * an explicit `--env-file` still wins over a declared chain, which is what
572
+ * it means to stand in for the environment.
573
+ *
574
+ * Naming the winning source is the point of the return shape: `SET` alone
575
+ * cannot tell an operator whether the value came from the environment they
576
+ * are about to deploy with or from a plaintext file sitting on this disk —
577
+ * and those have very different consequences.
578
+ *
579
+ * @inner
580
+ * @private
581
+ * @param {string} key
582
+ * @param {object|null} chain - Resolved chain from `resolveSecretsFileChain`
583
+ * @returns {{set:boolean, source:(string|null), from:(string|null)}}
584
+ */
585
+ var lookupSecret = function (key, chain) {
586
+ var source = self.envMap || process.env;
587
+ if (typeof source[key] === 'string' && source[key] !== '') {
588
+ return { set: true, source: self.envFile ? 'env-file' : 'env', from: self.envFile || null };
589
+ }
590
+ if (chain && chain.map) {
591
+ var value = chain.map[key];
592
+ if (typeof value === 'string' && value !== '') {
593
+ return { set: true, source: 'file', from: chain.origin[key] };
594
+ }
595
+ }
596
+ return { set: false, source: null, from: null };
597
+ };
598
+
599
+ /**
600
+ * Builds a check report for one bundle: every required key with its
601
+ * `SET`/`UNSET` status against both tiers, plus the resolved
602
+ * `settings.secrets.file` chain that formed the lower one. Flips
603
+ * `self.anyUnset` when a key is missing.
604
+ *
605
+ * The chain is resolved per bundle, not per project: `settings.json` is a
606
+ * per-bundle file and a declared path may embed `${bundle}`.
607
+ *
608
+ * @inner
609
+ * @private
610
+ * @param {string} projectPath
611
+ * @param {object|null} manifest
612
+ * @param {string} bundleName
613
+ * @param {object} sharedKeys - Pre-computed shared key set
614
+ * @returns {{bundle:string, totalKeys:number, set:number, unset:number, keys:Array<{key:string, set:boolean, source:(string|null), from:(string|null)}>, secretsFile:object}}
615
+ */
616
+ var checkBundle = function (projectPath, manifest, bundleName, sharedKeys) {
617
+ var keySet = Object.create(null);
618
+ for (var sk in sharedKeys) {
619
+ keySet[sk] = true;
620
+ }
621
+ var bundleSrc = resolveBundleSrc(manifest, bundleName);
622
+ collectKeysFromConfigDir(_(projectPath + '/' + bundleSrc + '/config', true), keySet);
623
+
624
+ var chain = resolveSecretsFileChain(projectPath, manifest, bundleName);
625
+
626
+ var keys = Object.keys(keySet).sort();
627
+ var statuses = [];
628
+ var setCount = 0;
629
+ for (var k = 0; k < keys.length; k++) {
630
+ var hit = lookupSecret(keys[k], chain);
631
+ if (hit.set) { setCount++; } else { self.anyUnset = true; }
632
+ statuses.push({ key: keys[k], set: hit.set, source: hit.source, from: hit.from });
633
+ }
634
+ return {
635
+ bundle : bundleName,
636
+ totalKeys : keys.length,
637
+ set : setCount,
638
+ unset : keys.length - setCount,
639
+ keys : statuses,
640
+ secretsFile : {
641
+ declared : chain.declared,
642
+ assumedScope : self.scopeAssumed || null,
643
+ assumedEnv : self.envName || null,
644
+ layers : chain.layers,
645
+ errors : chain.errors
646
+ }
647
+ };
648
+ };
649
+
650
+ /**
651
+ * Iterates every registered project, checking all bundles in each.
652
+ *
653
+ * @inner
654
+ * @private
655
+ */
656
+ var checkAll = function () {
657
+ var report = { projects: [] };
658
+ var names = Object.keys(self.projects).sort();
659
+ for (var i = 0; i < names.length; i++) {
660
+ var pp = self.projects[names[i]];
661
+ var mf = loadManifest(pp.path);
662
+ if (!mf || !mf.bundles) continue;
663
+ var sharedKeys = computeSharedKeys(pp.path);
664
+ var entry = { project: names[i], bundles: [] };
665
+ var bnames = Object.keys(mf.bundles).sort();
666
+ for (var b = 0; b < bnames.length; b++) {
667
+ entry.bundles.push(checkBundle(pp.path, mf, bnames[b], sharedKeys));
668
+ }
669
+ report.projects.push(entry);
670
+ }
671
+ emit(report);
672
+ };
673
+
674
+ /**
675
+ * Checks every bundle in a single named project.
676
+ *
677
+ * @inner
678
+ * @private
679
+ * @param {string} projectName
680
+ */
681
+ var checkProjectOnly = function (projectName) {
682
+ var project = self.projects[projectName];
683
+ var manifest = loadManifest(project.path);
684
+ if (!manifest || !manifest.bundles) {
685
+ console.error('Project @' + projectName + ' has no manifest.json or no bundles registered.');
686
+ process.exit(1);
687
+ return;
688
+ }
689
+ var sharedKeys = computeSharedKeys(project.path);
690
+ var bundles = Object.keys(manifest.bundles).sort();
691
+ var report = { project: projectName, bundles: [] };
692
+ for (var i = 0; i < bundles.length; i++) {
693
+ report.bundles.push(checkBundle(project.path, manifest, bundles[i], sharedKeys));
694
+ }
695
+ emit(report);
696
+ };
697
+
698
+ /**
699
+ * Checks a single bundle in a single project.
700
+ *
701
+ * @inner
702
+ * @private
703
+ * @param {string} projectName
704
+ * @param {string} bundleName
705
+ */
706
+ var checkBundleOnly = function (projectName, bundleName) {
707
+ var project = self.projects[projectName];
708
+ var manifest = loadManifest(project.path);
709
+ var sharedKeys = computeSharedKeys(project.path);
710
+ var report = { project: projectName, bundles: [checkBundle(project.path, manifest, bundleName, sharedKeys)] };
711
+ emit(report);
712
+ };
713
+
714
+ /**
715
+ * Dispatches to the JSON or text renderer based on `self.format`.
716
+ *
717
+ * @inner
718
+ * @private
719
+ * @param {object} report
720
+ */
721
+ var emit = function (report) {
722
+ if (self.format === 'json') {
723
+ console.log(JSON.stringify(report, null, 2));
724
+ return;
725
+ }
726
+ emitText(report);
727
+ };
728
+
729
+ /**
730
+ * Renders the human-readable text report.
731
+ *
732
+ * @inner
733
+ * @private
734
+ * @param {object} report
735
+ */
736
+ var emitText = function (report) {
737
+ var projects = report.projects
738
+ ? report.projects
739
+ : [{ project: report.project, bundles: report.bundles }];
740
+ for (var p = 0; p < projects.length; p++) {
741
+ var proj = projects[p];
742
+ console.log('\n@' + proj.project
743
+ + (self.scopeName ? ' (scope: ' + self.scopeName + ')' : '')
744
+ + (self.envFile ? ' [env: ' + self.envFile + ']' : '')
745
+ + ':');
746
+ if (proj.bundles.length === 0) {
747
+ console.log(' (no bundles)');
748
+ continue;
749
+ }
750
+ for (var b = 0; b < proj.bundles.length; b++) {
751
+ emitTextBundle(proj.bundles[b]);
752
+ }
753
+ }
754
+ };
755
+
756
+ /**
757
+ * Renders one bundle's SET/UNSET block.
758
+ *
759
+ * @inner
760
+ * @private
761
+ * @param {object} br - One bundle report from `checkBundle`
762
+ */
763
+ var emitTextBundle = function (br) {
764
+ console.log(' ' + br.bundle + ':');
765
+ emitTextChain(br.secretsFile);
766
+ if (br.totalKeys === 0) {
767
+ console.log(' No ${secret:KEY} placeholders found in config.');
768
+ return;
769
+ }
770
+ var width = 0;
771
+ for (var w = 0; w < br.keys.length; w++) {
772
+ if (br.keys[w].key.length > width) width = br.keys[w].key.length;
773
+ }
774
+ for (var k = 0; k < br.keys.length; k++) {
775
+ console.log(' ' + padRight(br.keys[k].key, width) + ' '
776
+ + padRight(br.keys[k].set ? 'SET' : 'UNSET', 5) + ' '
777
+ + sourceLabel(br.keys[k], br.secretsFile));
778
+ }
779
+ console.log(' (' + br.totalKeys + ' required: ' + br.set + ' set, ' + br.unset + ' unset)');
780
+ };
781
+
782
+ /**
783
+ * Renders the resolved `settings.secrets.file` block for one bundle, and
784
+ * nothing at all when the bundle declares no chain — an undeclared bundle
785
+ * behaves exactly as before the file tier existed, and its report should
786
+ * look that way too.
787
+ *
788
+ * The assumed scope/env line is not decoration: those are launch-time
789
+ * values this process cannot read, so the report has to say which ones it
790
+ * substituted or a reader cannot tell whether the paths below are the ones
791
+ * their bundle will actually open.
792
+ *
793
+ * @inner
794
+ * @private
795
+ * @param {object} sf - The `secretsFile` block from `checkBundle`
796
+ */
797
+ var emitTextChain = function (sf) {
798
+ if (!sf || !sf.declared) return;
799
+
800
+ var assumed = [];
801
+ if (sf.assumedScope) assumed.push('scope=' + sf.assumedScope);
802
+ if (sf.assumedEnv) assumed.push('env=' + sf.assumedEnv);
803
+ console.log(' settings.secrets.file'
804
+ + (assumed.length ? ' (assuming ' + assumed.join(', ') + ')' : '') + ':');
805
+
806
+ for (var e = 0; e < sf.errors.length; e++) {
807
+ console.log(' ! ' + sf.errors[e]);
808
+ }
809
+ if (sf.errors.length) {
810
+ console.log(' ! file tier skipped — keys below are checked against the environment only');
811
+ return;
812
+ }
813
+ for (var i = 0; i < sf.layers.length; i++) {
814
+ console.log(' [' + (i + 1) + '] ' + sf.layers[i].path + ' '
815
+ + (sf.layers[i].found
816
+ ? 'loaded (' + sf.layers[i].keys + ' keys)'
817
+ : (sf.layers[i].unreadable
818
+ ? 'UNREADABLE (' + sf.layers[i].code + ')'
819
+ : 'ABSENT')));
820
+ }
821
+ };
822
+
823
+ /**
824
+ * Names the tier a key was satisfied from. An empty label for `UNSET`
825
+ * keeps the column honest — there is no source to name.
826
+ *
827
+ * @inner
828
+ * @private
829
+ * @param {object} entry - One `{key, set, source, from}` status
830
+ * @param {object} sf - The `secretsFile` block, for layer numbering
831
+ * @returns {string}
832
+ */
833
+ var sourceLabel = function (entry, sf) {
834
+ if (!entry.set) return '';
835
+ if (entry.source !== 'file') return entry.source;
836
+ var layers = (sf && sf.layers) ? sf.layers : [];
837
+ for (var i = 0; i < layers.length; i++) {
838
+ if (layers[i].path === entry.from) return 'file[' + (i + 1) + ']';
839
+ }
840
+ return 'file';
841
+ };
842
+
843
+ /**
844
+ * Right-pads `s` with spaces to reach `n` characters.
845
+ *
846
+ * @inner
847
+ * @private
848
+ * @param {string} s
849
+ * @param {number} n
850
+ * @returns {string}
851
+ */
852
+ var padRight = function (s, n) {
853
+ var o = String(s || '');
854
+ while (o.length < n) o += ' ';
855
+ return o;
856
+ };
857
+
858
+ init();
859
+ }
860
+
861
+ module.exports = Check;