gina 0.6.7 → 0.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +27 -26
  3. package/ROADMAP.md +3 -2
  4. package/framework/v0.6.8/VERSION +1 -0
  5. package/framework/{v0.6.7 → v0.6.8}/core/config.js +10 -0
  6. package/framework/v0.6.8/core/connectors/couchbase/lib/storage-store.js +1074 -0
  7. package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.js +532 -22
  8. package/framework/v0.6.8/core/controller/controller.render-stream.js +270 -0
  9. package/framework/{v0.6.7 → v0.6.8}/core/gna.js +10 -2
  10. package/framework/{v0.6.7 → v0.6.8}/core/router.js +30 -10
  11. package/framework/{v0.6.7 → v0.6.8}/core/server.isaac.js +42 -7
  12. package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/gc.js +6 -0
  13. package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/stats.js +7 -0
  14. package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/verify.js +6 -0
  15. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/local-cas.js +107 -9
  16. package/framework/v0.6.8/lib/storage/src/local-stream.js +1418 -0
  17. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/local.js +177 -16
  18. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/main.js +406 -25
  19. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/meta-store.js +13 -2
  20. package/framework/v0.6.8/lib/storage/src/s3.js +759 -0
  21. package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/util.js +26 -1
  22. package/framework/{v0.6.7 → v0.6.8}/lib/storage-store.js +33 -23
  23. package/framework/{v0.6.7 → v0.6.8}/package.json +1 -1
  24. package/gna.js +4 -4
  25. package/llms.txt +22 -47
  26. package/package.json +3 -3
  27. package/schema/routing.json +4 -0
  28. package/schema/settings.json +84 -10
  29. package/script/check_no_local_leak.js +2 -1
  30. package/script/retry_lockfile_sync.js +2 -1
  31. package/script/soak/storage-couchbase/README.md +61 -0
  32. package/script/soak/storage-couchbase/probe-cas.js +77 -0
  33. package/script/soak/storage-couchbase/probe-store.js +101 -0
  34. package/types/index.d.ts +18 -0
  35. package/framework/v0.6.7/VERSION +0 -1
  36. package/framework/v0.6.7/core/controller/controller.render-stream.js +0 -169
  37. /package/framework/{v0.6.7 → v0.6.8}/AUTHORS +0 -0
  38. /package/framework/{v0.6.7 → v0.6.8}/LICENSE +0 -0
  39. /package/framework/{v0.6.7 → v0.6.8}/core/asset/html/nolayout.html +0 -0
  40. /package/framework/{v0.6.7 → v0.6.8}/core/asset/html/static.html +0 -0
  41. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/android-chrome-192x192.png +0 -0
  42. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/android-chrome-512x512.png +0 -0
  43. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/apple-touch-icon.png +0 -0
  44. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon-16x16.png +0 -0
  45. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon-32x32.png +0 -0
  46. /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon.ico +0 -0
  47. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/README.md +0 -0
  48. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  49. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  50. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  51. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  52. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  53. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  54. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  55. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  56. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  57. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  58. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  59. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  60. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  61. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  62. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  63. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  64. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  65. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  66. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  67. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  68. /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  69. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/ai/index.js +0 -0
  70. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/ai/lib/connector.js +0 -0
  71. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/index.js +0 -0
  72. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.js +0 -0
  73. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  74. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  75. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/n1ql.js +0 -0
  76. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.js +0 -0
  77. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  78. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  79. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/duckdb/index.js +0 -0
  80. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/duckdb/lib/connector.js +0 -0
  81. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/index.js +0 -0
  82. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/connector.js +0 -0
  83. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/job-store.js +0 -0
  84. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  85. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/session-store.js +0 -0
  86. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mysql/index.js +0 -0
  87. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mysql/lib/connector.js +0 -0
  88. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/param-redact.js +0 -0
  89. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/postgresql/index.js +0 -0
  90. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/postgresql/lib/connector.js +0 -0
  91. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/index.js +0 -0
  92. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/connector.js +0 -0
  93. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/job-store.js +0 -0
  94. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/render-cache-store.js +0 -0
  95. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/session-store.js +0 -0
  96. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/index.js +0 -0
  97. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/lib/connector.js +0 -0
  98. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/lib/session-store.js +0 -0
  99. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sql-parser.js +0 -0
  100. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/index.js +0 -0
  101. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/connector.js +0 -0
  102. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/job-store.js +0 -0
  103. /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/session-store.js +0 -0
  104. /package/framework/{v0.6.7 → v0.6.8}/core/content.encoding +0 -0
  105. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.framework.js +0 -0
  106. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-json.js +0 -0
  107. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-nunjucks-async.js +0 -0
  108. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-nunjucks.js +0 -0
  109. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-swig-async.js +0 -0
  110. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-swig.js +0 -0
  111. /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-v1.js +0 -0
  112. /package/framework/{v0.6.7 → v0.6.8}/core/controller/index.js +0 -0
  113. /package/framework/{v0.6.7 → v0.6.8}/core/controller/inspector-window-emit.js +0 -0
  114. /package/framework/{v0.6.7 → v0.6.8}/core/controller/release-banner.js +0 -0
  115. /package/framework/{v0.6.7 → v0.6.8}/core/dev/index.js +0 -0
  116. /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/class.js +0 -0
  117. /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/factory.js +0 -0
  118. /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/tools.js +0 -0
  119. /package/framework/{v0.6.7 → v0.6.8}/core/locales/README.md +0 -0
  120. /package/framework/{v0.6.7 → v0.6.8}/core/locales/currency.json +0 -0
  121. /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/language/en.json +0 -0
  122. /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/language/fr.json +0 -0
  123. /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/region/en.json +0 -0
  124. /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/region/fr.json +0 -0
  125. /package/framework/{v0.6.7 → v0.6.8}/core/locales/index.js +0 -0
  126. /package/framework/{v0.6.7 → v0.6.8}/core/mime.types +0 -0
  127. /package/framework/{v0.6.7 → v0.6.8}/core/model/entity.js +0 -0
  128. /package/framework/{v0.6.7 → v0.6.8}/core/model/index.js +0 -0
  129. /package/framework/{v0.6.7 → v0.6.8}/core/model/template/entityFactory.js +0 -0
  130. /package/framework/{v0.6.7 → v0.6.8}/core/model/template/index.js +0 -0
  131. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/README.md +0 -0
  132. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/index.js +0 -0
  133. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/README.md +0 -0
  134. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/package.json +0 -0
  135. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/src/main.js +0 -0
  136. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/README.md +0 -0
  137. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/README.md +0 -0
  138. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/package.json +0 -0
  139. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  140. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/README.md +0 -0
  141. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/package.json +0 -0
  142. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  143. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/README.md +0 -0
  144. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/package.json +0 -0
  145. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  146. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/README.md +0 -0
  147. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/package.json +0 -0
  148. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  149. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  150. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  151. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  152. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  153. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  154. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  155. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  156. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  157. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  158. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/package.json +0 -0
  159. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  160. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  161. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  162. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/src/main.js +0 -0
  163. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  164. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  165. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  166. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  167. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  168. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  169. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  170. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  171. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  172. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  173. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  174. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  175. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  176. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  177. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  178. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  179. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  180. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  181. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/README.md +0 -0
  182. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/package.json +0 -0
  183. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/src/main.js +0 -0
  184. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/README.md +0 -0
  185. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/build.json +0 -0
  186. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/package.json +0 -0
  187. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/src/main.js +0 -0
  188. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/README.md +0 -0
  189. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/build.json +0 -0
  190. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/package.json +0 -0
  191. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/src/form-validator.js +0 -0
  192. /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/src/main.js +0 -0
  193. /package/framework/{v0.6.7 → v0.6.8}/core/server.express.js +0 -0
  194. /package/framework/{v0.6.7 → v0.6.8}/core/server.js +0 -0
  195. /package/framework/{v0.6.7 → v0.6.8}/core/status.codes +0 -0
  196. /package/framework/{v0.6.7 → v0.6.8}/core/template/_gitignore +0 -0
  197. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/app.json +0 -0
  198. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  199. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/routing.json +0 -0
  200. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/settings.json +0 -0
  201. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  202. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/templates.json +0 -0
  203. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  204. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  205. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  206. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  207. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/index.js +0 -0
  208. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/locales/en.json +0 -0
  209. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  210. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  211. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  212. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  213. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  214. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  215. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  216. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  217. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/readme.md +0 -0
  218. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/sw.js +0 -0
  219. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  220. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  221. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  222. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  223. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  224. /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  225. /package/framework/{v0.6.7 → v0.6.8}/core/template/command/gina.bat.tpl +0 -0
  226. /package/framework/{v0.6.7 → v0.6.8}/core/template/command/gina.tpl +0 -0
  227. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/env.json +0 -0
  228. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/manifest.json +0 -0
  229. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/package.json +0 -0
  230. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/settings.json +0 -0
  231. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/statics.json +0 -0
  232. /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/templates.json +0 -0
  233. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/401.json +0 -0
  234. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/403.json +0 -0
  235. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/404.json +0 -0
  236. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/html/50x.html +0 -0
  237. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/json/500.json +0 -0
  238. /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/json/503.json +0 -0
  239. /package/framework/{v0.6.7 → v0.6.8}/core/template/extensions/logger/config.json +0 -0
  240. /package/framework/{v0.6.7 → v0.6.8}/helpers/console.js +0 -0
  241. /package/framework/{v0.6.7 → v0.6.8}/helpers/context.js +0 -0
  242. /package/framework/{v0.6.7 → v0.6.8}/helpers/data/LICENSE +0 -0
  243. /package/framework/{v0.6.7 → v0.6.8}/helpers/data/README.md +0 -0
  244. /package/framework/{v0.6.7 → v0.6.8}/helpers/data/package.json +0 -0
  245. /package/framework/{v0.6.7 → v0.6.8}/helpers/data/src/main.js +0 -0
  246. /package/framework/{v0.6.7 → v0.6.8}/helpers/dateFormat.js +0 -0
  247. /package/framework/{v0.6.7 → v0.6.8}/helpers/index.js +0 -0
  248. /package/framework/{v0.6.7 → v0.6.8}/helpers/json/LICENSE +0 -0
  249. /package/framework/{v0.6.7 → v0.6.8}/helpers/json/README.md +0 -0
  250. /package/framework/{v0.6.7 → v0.6.8}/helpers/json/package.json +0 -0
  251. /package/framework/{v0.6.7 → v0.6.8}/helpers/json/src/main.js +0 -0
  252. /package/framework/{v0.6.7 → v0.6.8}/helpers/path.js +0 -0
  253. /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/README.md +0 -0
  254. /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/package.json +0 -0
  255. /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/src/api-error.js +0 -0
  256. /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/src/main.js +0 -0
  257. /package/framework/{v0.6.7 → v0.6.8}/helpers/prototypes.js +0 -0
  258. /package/framework/{v0.6.7 → v0.6.8}/helpers/task.js +0 -0
  259. /package/framework/{v0.6.7 → v0.6.8}/helpers/text.js +0 -0
  260. /package/framework/{v0.6.7 → v0.6.8}/lib/admin/package.json +0 -0
  261. /package/framework/{v0.6.7 → v0.6.8}/lib/admin/src/main.js +0 -0
  262. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/README.md +0 -0
  263. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/build.json +0 -0
  264. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/package.json +0 -0
  265. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/src/dep/jszip.min.js +0 -0
  266. /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/src/main.js +0 -0
  267. /package/framework/{v0.6.7 → v0.6.8}/lib/async/package.json +0 -0
  268. /package/framework/{v0.6.7 → v0.6.8}/lib/async/src/main.js +0 -0
  269. /package/framework/{v0.6.7 → v0.6.8}/lib/audit/package.json +0 -0
  270. /package/framework/{v0.6.7 → v0.6.8}/lib/audit/src/main.js +0 -0
  271. /package/framework/{v0.6.7 → v0.6.8}/lib/audit-store.js +0 -0
  272. /package/framework/{v0.6.7 → v0.6.8}/lib/authn/package.json +0 -0
  273. /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/lockout.js +0 -0
  274. /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/main.js +0 -0
  275. /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/totp.js +0 -0
  276. /package/framework/{v0.6.7 → v0.6.8}/lib/authz-gate/package.json +0 -0
  277. /package/framework/{v0.6.7 → v0.6.8}/lib/authz-gate/src/main.js +0 -0
  278. /package/framework/{v0.6.7 → v0.6.8}/lib/cache/README.md +0 -0
  279. /package/framework/{v0.6.7 → v0.6.8}/lib/cache/build.json +0 -0
  280. /package/framework/{v0.6.7 → v0.6.8}/lib/cache/package.json +0 -0
  281. /package/framework/{v0.6.7 → v0.6.8}/lib/cache/src/main.js +0 -0
  282. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/aliases.json +0 -0
  283. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/arguments.json +0 -0
  284. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/help.txt +0 -0
  285. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/verify.js +0 -0
  286. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/add.js +0 -0
  287. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/arguments.json +0 -0
  288. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/build.js +0 -0
  289. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/copy.js +0 -0
  290. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/cp.js +0 -0
  291. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/help.js +0 -0
  292. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/help.txt +0 -0
  293. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  294. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/list.js +0 -0
  295. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/man.js +0 -0
  296. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/mcp-start.js +0 -0
  297. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/mcp.js +0 -0
  298. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/oas.js +0 -0
  299. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/openapi.js +0 -0
  300. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/remove.js +0 -0
  301. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/rename.js +0 -0
  302. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/restart.js +0 -0
  303. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/rm.js +0 -0
  304. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/start.js +0 -0
  305. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/status.js +0 -0
  306. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/stop.js +0 -0
  307. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/types.js +0 -0
  308. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/arguments.json +0 -0
  309. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/clear.js +0 -0
  310. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/help.txt +0 -0
  311. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/stats.js +0 -0
  312. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/add.js +0 -0
  313. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/arguments.json +0 -0
  314. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/help.js +0 -0
  315. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/help.txt +0 -0
  316. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/infer.js +0 -0
  317. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/list.js +0 -0
  318. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/migrate.js +0 -0
  319. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/models.js +0 -0
  320. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/remove.js +0 -0
  321. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/rm.js +0 -0
  322. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/test.js +0 -0
  323. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/arguments.json +0 -0
  324. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/help.js +0 -0
  325. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/help.txt +0 -0
  326. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/man.js +0 -0
  327. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/ps.js +0 -0
  328. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/stop.js +0 -0
  329. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/add.js +0 -0
  330. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/arguments.json +0 -0
  331. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/help.txt +0 -0
  332. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/args.js +0 -0
  333. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/namespace.js +0 -0
  334. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  335. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/reference-scan.js +0 -0
  336. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/scaffold.js +0 -0
  337. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/remove.js +0 -0
  338. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/rename.js +0 -0
  339. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/rm.js +0 -0
  340. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/add.js +0 -0
  341. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/get.js +0 -0
  342. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/help.js +0 -0
  343. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/help.txt +0 -0
  344. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/link-dev.js +0 -0
  345. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/list.js +0 -0
  346. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/remove.js +0 -0
  347. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/rm.js +0 -0
  348. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/set.js +0 -0
  349. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/unset.js +0 -0
  350. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/use.js +0 -0
  351. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/add.js +0 -0
  352. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/arguments.json +0 -0
  353. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/build.js +0 -0
  354. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/dot.js +0 -0
  355. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/get.js +0 -0
  356. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/help.js +0 -0
  357. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/help.txt +0 -0
  358. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/init.js +0 -0
  359. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/link-node-modules.js +0 -0
  360. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/link.js +0 -0
  361. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/list.js +0 -0
  362. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/man.js +0 -0
  363. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/msg.json +0 -0
  364. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/open.js +0 -0
  365. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/remove.js +0 -0
  366. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/reset.js +0 -0
  367. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/restart.js +0 -0
  368. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/set.js +0 -0
  369. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/start.js +0 -0
  370. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/status.js +0 -0
  371. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/stop.js +0 -0
  372. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/tail.js +0 -0
  373. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/update.js +0 -0
  374. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/version.js +0 -0
  375. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina-dev.1.md +0 -0
  376. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina-framework.1.md +0 -0
  377. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina.1.md +0 -0
  378. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/helper.js +0 -0
  379. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/add.js +0 -0
  380. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/arguments.json +0 -0
  381. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/export.js +0 -0
  382. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/help.js +0 -0
  383. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/help.txt +0 -0
  384. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/import.js +0 -0
  385. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/scan.js +0 -0
  386. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/_host.js +0 -0
  387. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/arguments.json +0 -0
  388. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/build.js +0 -0
  389. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/help.js +0 -0
  390. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/help.txt +0 -0
  391. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/list.js +0 -0
  392. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/man.js +0 -0
  393. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/rm.js +0 -0
  394. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/run.js +0 -0
  395. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/index.js +0 -0
  396. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/help.js +0 -0
  397. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/help.txt +0 -0
  398. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/open.js +0 -0
  399. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/man-render.js +0 -0
  400. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/arguments.json +0 -0
  401. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/help.js +0 -0
  402. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/help.txt +0 -0
  403. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/kill.js +0 -0
  404. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/list.js +0 -0
  405. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/msg.json +0 -0
  406. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/help.js +0 -0
  407. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/help.txt +0 -0
  408. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/inc/scan.js +0 -0
  409. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/list.js +0 -0
  410. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/reset.js +0 -0
  411. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/set.js +0 -0
  412. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/add.js +0 -0
  413. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/arguments.json +0 -0
  414. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/backup.js +0 -0
  415. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/build.js +0 -0
  416. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/help.js +0 -0
  417. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/help.txt +0 -0
  418. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/import.js +0 -0
  419. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/list.js +0 -0
  420. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/man.js +0 -0
  421. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/move.js +0 -0
  422. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/remove.js +0 -0
  423. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/rename.js +0 -0
  424. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/restart.js +0 -0
  425. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/restore.js +0 -0
  426. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/rm.js +0 -0
  427. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/start.js +0 -0
  428. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/status.js +0 -0
  429. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/stop.js +0 -0
  430. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/arguments.json +0 -0
  431. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/help.js +0 -0
  432. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/help.txt +0 -0
  433. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/list.js +0 -0
  434. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/remove.js +0 -0
  435. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/set.js +0 -0
  436. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/add.js +0 -0
  437. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/help.js +0 -0
  438. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/help.txt +0 -0
  439. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/link-local.js +0 -0
  440. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/link-production.js +0 -0
  441. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/list.js +0 -0
  442. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/remove.js +0 -0
  443. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/rm.js +0 -0
  444. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/use.js +0 -0
  445. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/arguments.json +0 -0
  446. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/check.js +0 -0
  447. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/help.js +0 -0
  448. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/help.txt +0 -0
  449. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/scan.js +0 -0
  450. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/help.js +0 -0
  451. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/help.txt +0 -0
  452. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/list.js +0 -0
  453. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/man.js +0 -0
  454. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/start.js +0 -0
  455. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/arguments.json +0 -0
  456. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/help.txt +0 -0
  457. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/view/add.js +0 -0
  458. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd-status-format/package.json +0 -0
  459. /package/framework/{v0.6.7 → v0.6.8}/lib/cmd-status-format/src/main.js +0 -0
  460. /package/framework/{v0.6.7 → v0.6.8}/lib/collection/README.md +0 -0
  461. /package/framework/{v0.6.7 → v0.6.8}/lib/collection/build.json +0 -0
  462. /package/framework/{v0.6.7 → v0.6.8}/lib/collection/package.json +0 -0
  463. /package/framework/{v0.6.7 → v0.6.8}/lib/collection/src/main.js +0 -0
  464. /package/framework/{v0.6.7 → v0.6.8}/lib/config.js +0 -0
  465. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-config/package.json +0 -0
  466. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-config/src/main.js +0 -0
  467. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-error/package.json +0 -0
  468. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-error/src/main.js +0 -0
  469. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-registry/package.json +0 -0
  470. /package/framework/{v0.6.7 → v0.6.8}/lib/connector-registry/src/main.js +0 -0
  471. /package/framework/{v0.6.7 → v0.6.8}/lib/cron/README.md +0 -0
  472. /package/framework/{v0.6.7 → v0.6.8}/lib/cron/package.json +0 -0
  473. /package/framework/{v0.6.7 → v0.6.8}/lib/cron/src/main.js +0 -0
  474. /package/framework/{v0.6.7 → v0.6.8}/lib/domain/LICENSE +0 -0
  475. /package/framework/{v0.6.7 → v0.6.8}/lib/domain/README.md +0 -0
  476. /package/framework/{v0.6.7 → v0.6.8}/lib/domain/package.json +0 -0
  477. /package/framework/{v0.6.7 → v0.6.8}/lib/domain/src/main.js +0 -0
  478. /package/framework/{v0.6.7 → v0.6.8}/lib/dto/package.json +0 -0
  479. /package/framework/{v0.6.7 → v0.6.8}/lib/dto/src/main.js +0 -0
  480. /package/framework/{v0.6.7 → v0.6.8}/lib/dto-pipe/package.json +0 -0
  481. /package/framework/{v0.6.7 → v0.6.8}/lib/dto-pipe/src/main.js +0 -0
  482. /package/framework/{v0.6.7 → v0.6.8}/lib/dto-types/package.json +0 -0
  483. /package/framework/{v0.6.7 → v0.6.8}/lib/dto-types/src/main.js +0 -0
  484. /package/framework/{v0.6.7 → v0.6.8}/lib/generator/index.js +0 -0
  485. /package/framework/{v0.6.7 → v0.6.8}/lib/i18n/package.json +0 -0
  486. /package/framework/{v0.6.7 → v0.6.8}/lib/i18n/src/main.js +0 -0
  487. /package/framework/{v0.6.7 → v0.6.8}/lib/image-build/package.json +0 -0
  488. /package/framework/{v0.6.7 → v0.6.8}/lib/image-build/src/main.js +0 -0
  489. /package/framework/{v0.6.7 → v0.6.8}/lib/index.js +0 -0
  490. /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/LICENSE +0 -0
  491. /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/README.md +0 -0
  492. /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/package.json +0 -0
  493. /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/src/main.js +0 -0
  494. /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-events/package.json +0 -0
  495. /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-events/src/main.js +0 -0
  496. /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-redact/package.json +0 -0
  497. /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-redact/src/main.js +0 -0
  498. /package/framework/{v0.6.7 → v0.6.8}/lib/instrument/package.json +0 -0
  499. /package/framework/{v0.6.7 → v0.6.8}/lib/instrument/src/main.js +0 -0
  500. /package/framework/{v0.6.7 → v0.6.8}/lib/job/package.json +0 -0
  501. /package/framework/{v0.6.7 → v0.6.8}/lib/job/src/main.js +0 -0
  502. /package/framework/{v0.6.7 → v0.6.8}/lib/job-store.js +0 -0
  503. /package/framework/{v0.6.7 → v0.6.8}/lib/json-config-header/package.json +0 -0
  504. /package/framework/{v0.6.7 → v0.6.8}/lib/json-config-header/src/main.js +0 -0
  505. /package/framework/{v0.6.7 → v0.6.8}/lib/loading-state/package.json +0 -0
  506. /package/framework/{v0.6.7 → v0.6.8}/lib/loading-state/src/main.js +0 -0
  507. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/README.md +0 -0
  508. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/package.json +0 -0
  509. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/default/index.js +0 -0
  510. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/index.js +0 -0
  511. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  512. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  513. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/index.js +0 -0
  514. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/listener.js +0 -0
  515. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/speaker.js +0 -0
  516. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/helper.js +0 -0
  517. /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/main.js +0 -0
  518. /package/framework/{v0.6.7 → v0.6.8}/lib/math/index.js +0 -0
  519. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-dispatch/package.json +0 -0
  520. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-dispatch/src/main.js +0 -0
  521. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-http/package.json +0 -0
  522. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-http/src/main.js +0 -0
  523. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-server/package.json +0 -0
  524. /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-server/src/main.js +0 -0
  525. /package/framework/{v0.6.7 → v0.6.8}/lib/merge/README.md +0 -0
  526. /package/framework/{v0.6.7 → v0.6.8}/lib/merge/package.json +0 -0
  527. /package/framework/{v0.6.7 → v0.6.8}/lib/merge/src/main.js +0 -0
  528. /package/framework/{v0.6.7 → v0.6.8}/lib/metrics/package.json +0 -0
  529. /package/framework/{v0.6.7 → v0.6.8}/lib/metrics/src/main.js +0 -0
  530. /package/framework/{v0.6.7 → v0.6.8}/lib/model.js +0 -0
  531. /package/framework/{v0.6.7 → v0.6.8}/lib/net-locality/package.json +0 -0
  532. /package/framework/{v0.6.7 → v0.6.8}/lib/net-locality/src/main.js +0 -0
  533. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/README.md +0 -0
  534. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/package.json +0 -0
  535. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/src/main.js +0 -0
  536. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-resolver/package.json +0 -0
  537. /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-resolver/src/main.js +0 -0
  538. /package/framework/{v0.6.7 → v0.6.8}/lib/proc.js +0 -0
  539. /package/framework/{v0.6.7 → v0.6.8}/lib/release-watch/package.json +0 -0
  540. /package/framework/{v0.6.7 → v0.6.8}/lib/release-watch/src/main.js +0 -0
  541. /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache/package.json +0 -0
  542. /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache/src/main.js +0 -0
  543. /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache-store.js +0 -0
  544. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/README.md +0 -0
  545. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/build.json +0 -0
  546. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/package.json +0 -0
  547. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/src/main.js +0 -0
  548. /package/framework/{v0.6.7 → v0.6.8}/lib/routing/src/radix.js +0 -0
  549. /package/framework/{v0.6.7 → v0.6.8}/lib/routing-introspect/package.json +0 -0
  550. /package/framework/{v0.6.7 → v0.6.8}/lib/routing-introspect/src/main.js +0 -0
  551. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/package.json +0 -0
  552. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/backends/env.js +0 -0
  553. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/backends/file.js +0 -0
  554. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/env-file.js +0 -0
  555. /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/main.js +0 -0
  556. /package/framework/{v0.6.7 → v0.6.8}/lib/session-store.js +0 -0
  557. /package/framework/{v0.6.7 → v0.6.8}/lib/shell.js +0 -0
  558. /package/framework/{v0.6.7 → v0.6.8}/lib/sqlite-driver.js +0 -0
  559. /package/framework/{v0.6.7 → v0.6.8}/lib/state.js +0 -0
  560. /package/framework/{v0.6.7 → v0.6.8}/lib/storage/package.json +0 -0
  561. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/README.md +0 -0
  562. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/package.json +0 -0
  563. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/src/main.js +0 -0
  564. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-resolver/package.json +0 -0
  565. /package/framework/{v0.6.7 → v0.6.8}/lib/swig-resolver/src/main.js +0 -0
  566. /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/package.json +0 -0
  567. /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/loaders/http.js +0 -0
  568. /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/loaders/memory.js +0 -0
  569. /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/main.js +0 -0
  570. /package/framework/{v0.6.7 → v0.6.8}/lib/url/README.md +0 -0
  571. /package/framework/{v0.6.7 → v0.6.8}/lib/url/index.js +0 -0
  572. /package/framework/{v0.6.7 → v0.6.8}/lib/url/routing.json +0 -0
  573. /package/framework/{v0.6.7 → v0.6.8}/lib/uuid/package.json +0 -0
  574. /package/framework/{v0.6.7 → v0.6.8}/lib/uuid/src/main.js +0 -0
  575. /package/framework/{v0.6.7 → v0.6.8}/lib/validator.js +0 -0
  576. /package/framework/{v0.6.7 → v0.6.8}/lib/watcher/package.json +0 -0
  577. /package/framework/{v0.6.7 → v0.6.8}/lib/watcher/src/main.js +0 -0
  578. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-framing/package.json +0 -0
  579. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-framing/src/main.js +0 -0
  580. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-query/package.json +0 -0
  581. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-query/src/main.js +0 -0
  582. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-session/package.json +0 -0
  583. /package/framework/{v0.6.7 → v0.6.8}/lib/ws-session/src/main.js +0 -0
@@ -15,8 +15,10 @@
15
15
  * strategy; the tiering slice adds size tiering (sub-threshold objects live
16
16
  * inline in the metadata store — see `inlineThreshold`); the cas slice adds
17
17
  * the `cas` strategy (content-addressed, refcounted, GC-swept — see
18
- * `src/local-cas`); `stream` and `s3` arrive with the demand that needs them,
19
- * each capability-gated.
18
+ * `src/local-cas`); the stream slice adds the `stream` strategy (large
19
+ * sequential media with resumable, out-of-order segment uploads — see
20
+ * `src/local-stream`); `s3` arrives with the demand that needs it, each
21
+ * capability-gated.
20
22
  *
21
23
  * **Keys are opaque.** A caller stores a stream and receives a key; it must
22
24
  * never parse, compose or assume anything about that key's shape. That is what
@@ -112,6 +114,15 @@ var createLocalDriver = require('./local');
112
114
  */
113
115
  var createLocalCasDriver = require('./local-cas');
114
116
 
117
+ /**
118
+ * The `local` adapter / `stream` strategy pair — large sequential media with
119
+ * resumable, out-of-order segment uploads.
120
+ *
121
+ * @inner
122
+ * @type {function(string, object, object): StorageDriver}
123
+ */
124
+ var createLocalStreamDriver = require('./local-stream');
125
+
115
126
  /**
116
127
  * Strategy name → driver factory. THE dispatch seam: `start()` builds each
117
128
  * driver through this map (strategy names are validated before `start()`
@@ -124,7 +135,37 @@ var createLocalCasDriver = require('./local-cas');
124
135
  */
125
136
  var FACTORIES = {
126
137
  sharded : createLocalDriver,
127
- cas : createLocalCasDriver
138
+ cas : createLocalCasDriver,
139
+ stream : createLocalStreamDriver
140
+ };
141
+
142
+ /**
143
+ * `s3` adapter factory — object storage on any S3-compatible provider,
144
+ * storeless (the provider owns metadata). The SDK stays the consuming
145
+ * project's dependency, resolved through `start()`'s injected
146
+ * `requireProjectModule` (lib/storage is framework-independent, so the
147
+ * resolver is built by the caller where the path globals are legal).
148
+ *
149
+ * @inner
150
+ * @type {function(string, object, ?object, object): StorageDriver}
151
+ */
152
+ var createS3Driver = require('./s3');
153
+
154
+ /**
155
+ * Adapter × strategy — THE two-axis dispatch the strategy map above always
156
+ * said would arrive with a second adapter. Expressed as COMPOSITION rather
157
+ * than a rekey: `FACTORIES` keeps its flat strategy-keyed shape because the
158
+ * `storage:*` CLI's offline path dispatches through it directly (and its
159
+ * source is pinned by the maintenance suite) — offline builds are local-only
160
+ * by construction, so the flat map IS the local adapter's row here.
161
+ *
162
+ * @inner
163
+ * @constant
164
+ * @type {Object.<string, Object.<string, function>>}
165
+ */
166
+ var ADAPTER_FACTORIES = {
167
+ local : FACTORIES,
168
+ s3 : { sharded: createS3Driver }
128
169
  };
129
170
 
130
171
  /**
@@ -146,7 +187,7 @@ var createEmbeddedMetaStore = require('./meta-store');
146
187
  * @constant
147
188
  * @type {string[]}
148
189
  */
149
- var ADAPTERS = ['local'];
190
+ var ADAPTERS = ['local', 's3'];
150
191
 
151
192
  /**
152
193
  * Strategies implemented today.
@@ -155,18 +196,26 @@ var ADAPTERS = ['local'];
155
196
  * @constant
156
197
  * @type {string[]}
157
198
  */
158
- var STRATEGIES = ['sharded', 'cas'];
199
+ var STRATEGIES = ['sharded', 'cas', 'stream'];
159
200
 
160
201
  /**
161
202
  * Strategies named in the design but not yet implemented. Kept distinct from
162
203
  * "unknown" so the boot message can say *deferred* instead of *typo* — an
163
- * operator who wrote `stream` made a scheduling mistake, not a spelling one.
204
+ * operator who wrote a designed-but-unshipped name made a scheduling mistake,
205
+ * not a spelling one.
206
+ *
207
+ * **Currently EMPTY**: `cas` left this list when the cas slice shipped, and
208
+ * `stream` when the stream slice did (`s3` arrived as an ADAPTER — the
209
+ * two-axis dispatch below — so it never passed through here). The list and
210
+ * its boot branch stay — cheap, and the next designed-before-implemented
211
+ * strategy inherits a working message instead of re-deriving one. Until then
212
+ * the branch is exercised by nothing, which is recorded rather than hidden.
164
213
  *
165
214
  * @inner
166
215
  * @constant
167
216
  * @type {string[]}
168
217
  */
169
- var DEFERRED_STRATEGIES = ['stream'];
218
+ var DEFERRED_STRATEGIES = [];
170
219
 
171
220
  /**
172
221
  * Per-driver keys, BY STRATEGY. Anything else in a driver block is reported
@@ -182,10 +231,35 @@ var DEFERRED_STRATEGIES = ['stream'];
182
231
  * @type {Object.<string, string[]>}
183
232
  */
184
233
  var STRATEGY_KEYS = {
185
- sharded : ['adapter', 'strategy', 'root', 'maxObjectSize', 'store', 'inlineThreshold'],
186
- cas : ['adapter', 'strategy', 'root', 'maxObjectSize', 'store', 'inlineThreshold', 'hash', 'fsync', 'sweepInterval', 'sweepGrace']
234
+ // NB `sharded` consumes `sweepGrace` but NOT `sweepInterval`: it reclaims
235
+ // crashed-put temp orphans at BUILD only, and has no periodic machinery to
236
+ // hang a tick on. A restart is also the earliest moment the previous
237
+ // process is provably gone, which is the whole safety argument (#B349).
238
+ sharded : ['adapter', 'strategy', 'root', 'maxObjectSize', 'store', 'inlineThreshold', 'sweepGrace'],
239
+ cas : ['adapter', 'strategy', 'root', 'maxObjectSize', 'store', 'inlineThreshold', 'hash', 'fsync', 'sweepInterval', 'sweepGrace'],
240
+ // NB `stream` carries NEITHER `inlineThreshold` NOR `hash`, deliberately:
241
+ // a multi-gigabyte strategy has no business inlining its payload into a
242
+ // metadata row, and its write path does not hash. Accepting either key
243
+ // would be exactly the "configured behaviour that never happens" lie this
244
+ // whole warning exists to prevent, so both warn as ignored instead.
245
+ stream : ['adapter', 'strategy', 'root', 'maxObjectSize', 'store', 'chunkSize', 'fsync', 'sessionTtl', 'sessionSweepInterval']
187
246
  };
188
247
 
248
+ /**
249
+ * Per-driver keys for the `s3` ADAPTER (one list — s3 runs a single
250
+ * strategy, so the per-strategy split above does not apply). NB what is
251
+ * deliberately ABSENT: `root` (no filesystem), `store`/`inlineThreshold`
252
+ * (storeless — no metadata rows to inline into), `hash`/`fsync` (the
253
+ * provider owns integrity and durability). Each warns as ignored — the
254
+ * same "configured behaviour that never happens" honesty as the strategy
255
+ * lists.
256
+ *
257
+ * @inner
258
+ * @constant
259
+ * @type {string[]}
260
+ */
261
+ var S3_KEYS = ['adapter', 'strategy', 'bucket', 'region', 'endpoint', 'prefix', 'accessKeyId', 'secretAccessKey', 'sessionToken', 'forcePathStyle', 'presignExpiry', 'maxObjectSize', 'sweepGrace'];
262
+
189
263
  /**
190
264
  * Default per-object byte ceiling when a driver sets no `maxObjectSize`.
191
265
  * Defense in depth only: no per-file cap exists anywhere upstream today (the
@@ -217,6 +291,20 @@ var DEFAULT_MAX_OBJECT_SIZE = 100 * 1024 * 1024;
217
291
  */
218
292
  var DEFAULT_INLINE_THRESHOLD = 64 * 1024;
219
293
 
294
+ /**
295
+ * Default presigned-URL lifetime for `s3` drivers when `presignExpiry` is
296
+ * unset. 15 minutes: long enough for a redirect chain and a slow download to
297
+ * START (a transfer in flight survives expiry — S3 validates the signature
298
+ * at request time), short enough that a leaked URL goes stale fast. The
299
+ * serving facade re-presigns per request, so the lifetime is not a caching
300
+ * knob.
301
+ *
302
+ * @inner
303
+ * @constant
304
+ * @type {number}
305
+ */
306
+ var DEFAULT_PRESIGN_EXPIRY = 15 * 60 * 1000;
307
+
220
308
  /**
221
309
  * Default digest algorithm for `cas` drivers. SHA-256: hardware-accelerated
222
310
  * on every deployment target (SHA-NI, ARMv8 crypto extensions put it around
@@ -269,6 +357,64 @@ var DEFAULT_SWEEP_INTERVAL = 15 * 60 * 1000;
269
357
  */
270
358
  var DEFAULT_SWEEP_GRACE = 60 * 60 * 1000;
271
359
 
360
+ /**
361
+ * Default segment size for `stream` drivers, in bytes. It becomes the write
362
+ * stream's `highWaterMark` — the same syscall size with no hand-rolled buffer
363
+ * and no extra copy, so memory stays bounded by the stream machinery rather
364
+ * than by us — and is echoed to clients as the size the write path is tuned
365
+ * for. 8MB: large enough that per-segment overheads (an fsync, a marker
366
+ * create) disappear against the transfer, small enough that re-sending one
367
+ * after a broken connection is cheap.
368
+ *
369
+ * REASONED against a measured mechanism, NOT tuned to a workload: no consumer
370
+ * with a large-sequential-media workload exists yet, so re-measure when one
371
+ * appears.
372
+ *
373
+ * @inner
374
+ * @constant
375
+ * @type {number}
376
+ */
377
+ var DEFAULT_CHUNK_SIZE = 8 * 1024 * 1024;
378
+
379
+ /**
380
+ * Whether `stream` publishes and segment writes fsync by default. `true` —
381
+ * the durability contract of a RESUMABLE upload is that a range the client
382
+ * was told is durable actually is, and the cost is ~2% of network-paced
383
+ * ingest at 100 Mbps (measured; ~19% at 1 Gbps, fsync-dominant at 10 Gbps).
384
+ * A LAN-ingest consumer sets `fsync: false` and accepts the documented
385
+ * power-loss window.
386
+ *
387
+ * @inner
388
+ * @constant
389
+ * @type {boolean}
390
+ */
391
+ var DEFAULT_STREAM_FSYNC = true;
392
+
393
+ /**
394
+ * Default lifetime of an untouched resumable upload session for `stream`
395
+ * drivers, in ms. REASONED, not benchmarked: it must comfortably exceed a
396
+ * paused-then-resumed upload over a bad link, and a session holds real disk,
397
+ * so 24 hours. A zero TTL would eat in-flight sessions and snaps back to this
398
+ * default (the `sweepGrace` reasoning).
399
+ *
400
+ * @inner
401
+ * @constant
402
+ * @type {number}
403
+ */
404
+ var DEFAULT_SESSION_TTL = 24 * 60 * 60 * 1000;
405
+
406
+ /**
407
+ * Default period of the abandoned-session sweep for `stream` drivers, in ms.
408
+ * REASONED, not benchmarked: the sweep gates reclaim latency only — no hot
409
+ * path — so the default just bounds how long an abandoned session's disk
410
+ * lingers past its TTL. 1 hour.
411
+ *
412
+ * @inner
413
+ * @constant
414
+ * @type {number}
415
+ */
416
+ var DEFAULT_SESSION_SWEEP_INTERVAL = 60 * 60 * 1000;
417
+
272
418
  /**
273
419
  * Built drivers, keyed by name. `null` until {@link start} runs — deliberately
274
420
  * NOT built at require time, because `test/lib/types-runtime-parity.test.js`
@@ -326,6 +472,12 @@ var _default = null;
326
472
  * (which would re-open the sweep-vs-put race) — each falls back to its
327
473
  * default; `'0s'` is legal and silent for `sweepInterval` only (periodic
328
474
  * sweep off);
475
+ * - a stream `chunkSize` that is not a unit-suffixed size (or is zero), a
476
+ * `fsync` that is not a boolean, a `sessionTtl`/`sessionSweepInterval`
477
+ * that is not a unit-suffixed duration, or a zero `sessionTtl` (which
478
+ * would reclaim in-flight uploads) — each falls back to its default;
479
+ * `'0s'` is legal and silent for `sessionSweepInterval` only (periodic
480
+ * session sweep off, the build-time pass still runs);
329
481
  * - driver keys the selected strategy does not consume — they are ignored,
330
482
  * and a silently-ignored key reads as configured behaviour that never
331
483
  * happens (the list is per-strategy: `fsync` is consumed by `cas` and
@@ -426,6 +578,105 @@ function validateConfig(storageBlock, context) {
426
578
  return out;
427
579
  }
428
580
 
581
+ // ─── `s3` — a SELF-CONTAINED branch, so the local checks below stay
582
+ // byte-identical. On external object storage the layout algorithm
583
+ // collapses to key naming, the filesystem keys (`root`, `store`,
584
+ // tiering, fsync) have no meaning, and the identity keys are the
585
+ // provider coordinates instead.
586
+ if ( d.adapter === 's3' ) {
587
+ if ( typeof(d.strategy) != 'undefined' && d.strategy !== null && d.strategy !== 'sharded' ) {
588
+ if ( d.strategy === 'cas' || d.strategy === 'stream' ) {
589
+ out.fatal = 'driver `' + name + '`: the `' + d.strategy + '` strategy does not run on the `s3` adapter — the provider owns placement: S3 ETags are not content digests (no cas dedup), and multipart is the provider\'s own resumable (no stream sessions). Use `sharded` (or omit `strategy`, it is the s3 default), or move the driver to the `local` adapter.';
590
+ return out;
591
+ }
592
+ out.fatal = 'driver `' + name + '`: unknown strategy ' + JSON.stringify(d.strategy) + ' — the `s3` adapter supports `sharded` only, and defaults to it when `strategy` is omitted';
593
+ return out;
594
+ }
595
+
596
+ if ( typeof(d.bucket) != 'string' || d.bucket.length === 0 ) {
597
+ out.fatal = 'driver `' + name + '`: `bucket` must be a non-empty bucket name for the `s3` adapter';
598
+ return out;
599
+ }
600
+ if ( /\$\{/.test(d.bucket) ) {
601
+ out.fatal = 'driver `' + name + '`: `bucket` carries an unresolved `${...}` placeholder (' + d.bucket + ') — only the anchored `${secret:KEY}` form is substituted at config load';
602
+ return out;
603
+ }
604
+
605
+ if ( typeof(d.prefix) != 'undefined' && d.prefix !== null && d.prefix !== '' ) {
606
+ if ( typeof(d.prefix) != 'string' ) {
607
+ out.fatal = 'driver `' + name + '`: `prefix` must be a string key prefix';
608
+ return out;
609
+ }
610
+ if ( /\$\{/.test(d.prefix) ) {
611
+ out.fatal = 'driver `' + name + '`: `prefix` carries an unresolved `${...}` placeholder (' + d.prefix + ') — only the anchored `${secret:KEY}` form is substituted at config load';
612
+ return out;
613
+ }
614
+ if ( d.prefix.charAt(0) === '/' || d.prefix.indexOf('\\') > -1 || d.prefix.indexOf('..') > -1 ) {
615
+ out.fatal = 'driver `' + name + '`: `prefix` must be a relative key prefix (no leading `/`, no `\\`, no `..`) — got `' + d.prefix + '`';
616
+ return out;
617
+ }
618
+ }
619
+
620
+ if ( typeof(d.endpoint) != 'undefined' && d.endpoint !== null && ( typeof(d.endpoint) != 'string' || d.endpoint.length === 0 ) ) {
621
+ out.fatal = 'driver `' + name + '`: `endpoint` must be a non-empty S3-compatible endpoint (e.g. "s3.fr-par.scw.cloud")';
622
+ return out;
623
+ }
624
+ if ( typeof(d.region) != 'undefined' && d.region !== null && ( typeof(d.region) != 'string' || d.region.length === 0 ) ) {
625
+ out.fatal = 'driver `' + name + '`: `region` must be a non-empty region name';
626
+ return out;
627
+ }
628
+
629
+ // static credentials are BOTH-OR-NEITHER: a half pair is almost
630
+ // certainly a mistake, but the SDK default provider chain
631
+ // (env/IMDS/IRSA) is a legitimate fallback, so this warns rather
632
+ // than refusing the boot.
633
+ var hasAk = ( typeof(d.accessKeyId) == 'string' && d.accessKeyId.length > 0 );
634
+ var hasSk = ( typeof(d.secretAccessKey) == 'string' && d.secretAccessKey.length > 0 );
635
+ if ( hasAk !== hasSk ) {
636
+ out.warnings.push('driver `' + name + '`: only one of `accessKeyId`/`secretAccessKey` is set — static credentials need BOTH; falling back to the SDK default provider chain (env / shared config / IMDS / IRSA)');
637
+ } else if ( !hasAk && typeof(d.sessionToken) == 'string' && d.sessionToken.length > 0 ) {
638
+ out.warnings.push('driver `' + name + '`: `sessionToken` is set without `accessKeyId`/`secretAccessKey` — it is ignored; the SDK default provider chain supplies its own session credentials');
639
+ }
640
+
641
+ if ( typeof(d.forcePathStyle) != 'undefined' && d.forcePathStyle !== null && typeof(d.forcePathStyle) != 'boolean' ) {
642
+ out.warnings.push('driver `' + name + '`: `forcePathStyle` must be a boolean — got ' + JSON.stringify(d.forcePathStyle) + '; using the default (false)');
643
+ }
644
+
645
+ if ( typeof(d.presignExpiry) != 'undefined' && d.presignExpiry !== null ) {
646
+ if ( isNaN(util.parseDuration(d.presignExpiry)) ) {
647
+ out.warnings.push('driver `' + name + '`: `presignExpiry` must carry a unit (ms/s/m/h/d, e.g. "15m") — got ' + JSON.stringify(d.presignExpiry) + '; using the default (' + DEFAULT_PRESIGN_EXPIRY + ' ms)');
648
+ } else if ( util.parseDuration(d.presignExpiry) <= 0 ) {
649
+ out.warnings.push('driver `' + name + '`: `presignExpiry` must be greater than zero — got ' + JSON.stringify(d.presignExpiry) + '; using the default (' + DEFAULT_PRESIGN_EXPIRY + ' ms)');
650
+ }
651
+ }
652
+
653
+ // same key, same default as the local strategies' temp-orphan
654
+ // gate — here it ages the multipart-orphan sweep (an incomplete
655
+ // multipart upload bills until aborted).
656
+ if ( typeof(d.sweepGrace) != 'undefined' && d.sweepGrace !== null ) {
657
+ if ( isNaN(util.parseDuration(d.sweepGrace)) ) {
658
+ out.warnings.push('driver `' + name + '`: `sweepGrace` must carry a unit (ms/s/m/h/d, e.g. "1h") — got ' + JSON.stringify(d.sweepGrace) + '; using the default (' + DEFAULT_SWEEP_GRACE + ' ms)');
659
+ } else if ( util.parseDuration(d.sweepGrace) <= 0 ) {
660
+ out.warnings.push('driver `' + name + '`: `sweepGrace` must be greater than zero — got ' + JSON.stringify(d.sweepGrace) + '; using the default (' + DEFAULT_SWEEP_GRACE + ' ms)');
661
+ }
662
+ }
663
+
664
+ if ( typeof(d.maxObjectSize) != 'undefined' && d.maxObjectSize !== null ) {
665
+ if ( isNaN(util.parseSize(d.maxObjectSize)) ) {
666
+ out.warnings.push('driver `' + name + '`: `maxObjectSize` must carry a unit (B/KB/MB/GB, e.g. "50MB") — got ' + JSON.stringify(d.maxObjectSize) + '; using the default (' + DEFAULT_MAX_OBJECT_SIZE + ' bytes)');
667
+ } else if ( util.parseSize(d.maxObjectSize) <= 0 ) {
668
+ out.warnings.push('driver `' + name + '`: `maxObjectSize` must be greater than zero — got ' + JSON.stringify(d.maxObjectSize) + '; using the default (' + DEFAULT_MAX_OBJECT_SIZE + ' bytes)');
669
+ }
670
+ }
671
+
672
+ var s3extra = Object.keys(d).filter(function (k) { return S3_KEYS.indexOf(k) < 0; });
673
+ if ( s3extra.length > 0 ) {
674
+ out.warnings.push('driver `' + name + '`: key(s) ' + s3extra.join(', ') + ' are not used by the `s3` adapter and are ignored');
675
+ }
676
+
677
+ continue;
678
+ }
679
+
429
680
  if ( DEFERRED_STRATEGIES.indexOf(d.strategy) > -1 ) {
430
681
  out.fatal = 'driver `' + name + '`: the `' + d.strategy + '` strategy is designed but not implemented yet — use `' + STRATEGIES.join('|') + '` for now';
431
682
  return out;
@@ -514,17 +765,63 @@ function validateConfig(storageBlock, context) {
514
765
  out.warnings.push('driver `' + name + '`: `sweepInterval` must carry a unit (ms/s/m/h/d, e.g. "15m"), or be "0s" to disable the periodic sweep — got ' + JSON.stringify(d.sweepInterval) + '; using the default (' + DEFAULT_SWEEP_INTERVAL + ' ms)');
515
766
  }
516
767
  }
768
+ }
769
+
770
+ // `sweepGrace` is shared, so its lint is too: under `cas` it gates the
771
+ // blob GC AND the temp-orphan cutoff, under `sharded` the temp-orphan
772
+ // cutoff alone (#B349). `sweepInterval` deliberately stays cas-only —
773
+ // sharded sweeps at build, never on a tick.
774
+ if ( d.strategy === 'cas' || d.strategy === 'sharded' ) {
517
775
  if ( typeof(d.sweepGrace) != 'undefined' && d.sweepGrace !== null ) {
518
776
  if ( isNaN(util.parseDuration(d.sweepGrace)) ) {
519
777
  out.warnings.push('driver `' + name + '`: `sweepGrace` must carry a unit (ms/s/m/h/d, e.g. "1h") — got ' + JSON.stringify(d.sweepGrace) + '; using the default (' + DEFAULT_SWEEP_GRACE + ' ms)');
520
778
  } else if ( util.parseDuration(d.sweepGrace) <= 0 ) {
521
- // grace 0 would let the sweep race an in-flight identical
522
- // put — the exact window the grace exists to close
779
+ // grace 0 would let the sweep eat a temp still being
780
+ // written — under cas it would also race an in-flight
781
+ // identical put. Either way it re-opens the exact window
782
+ // the grace exists to close.
523
783
  out.warnings.push('driver `' + name + '`: `sweepGrace` must be greater than zero — got ' + JSON.stringify(d.sweepGrace) + '; using the default (' + DEFAULT_SWEEP_GRACE + ' ms)');
524
784
  }
525
785
  }
526
786
  }
527
787
 
788
+ if ( d.strategy === 'stream' ) {
789
+ // `chunkSize` is a size key and takes the size parser's strictness
790
+ // (a unit is required); it only tunes the write stream's
791
+ // highWaterMark, so an unusable value degrades to the default
792
+ // rather than refusing the boot.
793
+ if ( typeof(d.chunkSize) != 'undefined' && d.chunkSize !== null ) {
794
+ if ( isNaN(util.parseSize(d.chunkSize)) ) {
795
+ out.warnings.push('driver `' + name + '`: `chunkSize` must carry a unit (B/KB/MB/GB, e.g. "8MB") — got ' + JSON.stringify(d.chunkSize) + '; using the default (' + DEFAULT_CHUNK_SIZE + ' bytes)');
796
+ } else if ( util.parseSize(d.chunkSize) <= 0 ) {
797
+ out.warnings.push('driver `' + name + '`: `chunkSize` must be greater than zero — got ' + JSON.stringify(d.chunkSize) + '; using the default (' + DEFAULT_CHUNK_SIZE + ' bytes)');
798
+ }
799
+ }
800
+
801
+ if ( typeof(d.fsync) != 'undefined' && d.fsync !== null && typeof(d.fsync) != 'boolean' ) {
802
+ out.warnings.push('driver `' + name + '`: `fsync` must be a boolean — got ' + JSON.stringify(d.fsync) + '; using the default (' + DEFAULT_STREAM_FSYNC + ')');
803
+ }
804
+
805
+ // duration keys, same strictness as the cas pair: a unit is
806
+ // required, because `'15m'` means minutes here and megabytes in a
807
+ // size key and neither parser guesses.
808
+ if ( typeof(d.sessionTtl) != 'undefined' && d.sessionTtl !== null ) {
809
+ if ( isNaN(util.parseDuration(d.sessionTtl)) ) {
810
+ out.warnings.push('driver `' + name + '`: `sessionTtl` must carry a unit (ms/s/m/h/d, e.g. "24h") — got ' + JSON.stringify(d.sessionTtl) + '; using the default (' + DEFAULT_SESSION_TTL + ' ms)');
811
+ } else if ( util.parseDuration(d.sessionTtl) <= 0 ) {
812
+ // a zero TTL would reclaim sessions that are still being
813
+ // written to — the same class of foot-gun as a zero
814
+ // sweepGrace, so it never means "off"
815
+ out.warnings.push('driver `' + name + '`: `sessionTtl` must be greater than zero — a zero TTL would reclaim in-flight uploads; got ' + JSON.stringify(d.sessionTtl) + '; using the default (' + DEFAULT_SESSION_TTL + ' ms)');
816
+ }
817
+ }
818
+ if ( typeof(d.sessionSweepInterval) != 'undefined' && d.sessionSweepInterval !== null ) {
819
+ if ( isNaN(util.parseDuration(d.sessionSweepInterval)) ) {
820
+ out.warnings.push('driver `' + name + '`: `sessionSweepInterval` must carry a unit (ms/s/m/h/d, e.g. "1h"), or be "0s" to disable the periodic sweep — got ' + JSON.stringify(d.sessionSweepInterval) + '; using the default (' + DEFAULT_SESSION_SWEEP_INTERVAL + ' ms)');
821
+ }
822
+ }
823
+ }
824
+
528
825
  var consumed = STRATEGY_KEYS[d.strategy];
529
826
  var extra = Object.keys(d).filter(function (k) { return consumed.indexOf(k) < 0; });
530
827
  if ( extra.length > 0 ) {
@@ -597,6 +894,50 @@ function resolveDriverConf(conf) {
597
894
  inlineThreshold : inline
598
895
  };
599
896
 
897
+ // s3 resolves here and RETURNS EARLY — none of the local strategy blocks
898
+ // below apply. `strategy` collapses to key naming (`sharded`, the only
899
+ // value and the default); `prefix`/`endpoint` are normalised so the
900
+ // factory stays dumb; `region` falls back to the S3-compat convention
901
+ // (`us-east-1`) ONLY when a custom endpoint is configured — real AWS
902
+ // keeps the SDK's own resolution chain, whose "missing region" message
903
+ // beats a silently mis-signed default.
904
+ if ( conf.adapter === 's3' ) {
905
+ resolved.strategy = 'sharded';
906
+ resolved.bucket = conf.bucket;
907
+ var pfx = ( typeof conf.prefix === 'string' ) ? conf.prefix : '';
908
+ if ( pfx.length && pfx.charAt(pfx.length - 1) !== '/' ) { pfx += '/'; }
909
+ resolved.prefix = pfx;
910
+ if ( typeof conf.endpoint === 'string' && conf.endpoint.length ) {
911
+ resolved.endpoint = /^https?:\/\//i.test(conf.endpoint) ? conf.endpoint : ('https://' + conf.endpoint);
912
+ }
913
+ resolved.region = ( typeof conf.region === 'string' && conf.region.length )
914
+ ? conf.region
915
+ : ( resolved.endpoint ? 'us-east-1' : undefined );
916
+ if ( conf.forcePathStyle === true ) { resolved.forcePathStyle = true; }
917
+ if ( typeof conf.accessKeyId === 'string' && conf.accessKeyId.length
918
+ && typeof conf.secretAccessKey === 'string' && conf.secretAccessKey.length ) {
919
+ resolved.accessKeyId = conf.accessKeyId;
920
+ resolved.secretAccessKey = conf.secretAccessKey;
921
+ if ( typeof conf.sessionToken === 'string' && conf.sessionToken.length ) {
922
+ resolved.sessionToken = conf.sessionToken;
923
+ }
924
+ }
925
+ var pe = util.parseDuration(conf.presignExpiry);
926
+ resolved.presignExpiry = ( isNaN(pe) || pe <= 0 ) ? DEFAULT_PRESIGN_EXPIRY : pe;
927
+ var s3g = util.parseDuration(conf.sweepGrace);
928
+ resolved.sweepGrace = ( isNaN(s3g) || s3g <= 0 ) ? DEFAULT_SWEEP_GRACE : s3g;
929
+ return resolved;
930
+ }
931
+
932
+ // sharded takes `sweepGrace` alone — the age gate on its build-time
933
+ // temp-orphan sweep (#B349). Same key, same default and same meaning as
934
+ // cas's ("how long before an unfinished temp is presumed abandoned"), but
935
+ // no `sweepInterval`: there is no periodic pass to configure.
936
+ if ( conf.strategy === 'sharded' ) {
937
+ var tsg = util.parseDuration(conf.sweepGrace);
938
+ resolved.sweepGrace = ( isNaN(tsg) || tsg <= 0 ) ? DEFAULT_SWEEP_GRACE : tsg;
939
+ }
940
+
600
941
  // cas defaults resolve here too, same pattern. `hash` was validated
601
942
  // against crypto.getHashes() by validateConfig; lowercasing makes the
602
943
  // key's algorithm segment canonical.
@@ -611,6 +952,20 @@ function resolveDriverConf(conf) {
611
952
  resolved.sweepGrace = ( isNaN(sg) || sg <= 0 ) ? DEFAULT_SWEEP_GRACE : sg; // 0 grace would re-open the sweep race
612
953
  }
613
954
 
955
+ // stream defaults, same pattern. NB `inlineThreshold` is resolved above
956
+ // for every strategy but the stream factory ignores it — the key is not in
957
+ // STRATEGY_KEYS.stream, so setting it warns as ignored, and
958
+ // capabilities.inline stays false.
959
+ if ( conf.strategy === 'stream' ) {
960
+ var cs = util.parseSize(conf.chunkSize);
961
+ resolved.chunkSize = ( isNaN(cs) || cs <= 0 ) ? DEFAULT_CHUNK_SIZE : cs;
962
+ resolved.fsync = ( typeof conf.fsync === 'boolean' ) ? conf.fsync : DEFAULT_STREAM_FSYNC;
963
+ var st = util.parseDuration(conf.sessionTtl);
964
+ resolved.sessionTtl = ( isNaN(st) || st <= 0 ) ? DEFAULT_SESSION_TTL : st; // 0 would reclaim in-flight uploads
965
+ var ssi = util.parseDuration(conf.sessionSweepInterval);
966
+ resolved.sessionSweepInterval = ( isNaN(ssi) || ssi < 0 ) ? DEFAULT_SESSION_SWEEP_INTERVAL : ssi; // '0s' is legal: periodic sweep off
967
+ }
968
+
614
969
  return resolved;
615
970
  }
616
971
 
@@ -628,7 +983,15 @@ function resolveDriverConf(conf) {
628
983
  * @param {object} [opt.stores] - Pre-built connector metadata stores keyed by driver
629
984
  * name (the caller resolves them through
630
985
  * `lib/storage-store`). A driver absent from this map
631
- * gets the embedded SQLite store inside its own root.
986
+ * gets the embedded SQLite store inside its own root
987
+ * (`s3` drivers get neither — storeless).
988
+ * @param {function} [opt.requireProjectModule] - Project-module resolver for adapters whose
989
+ * SDK is the consuming project's dependency (`s3`).
990
+ * Built by the CALLER (gna.js, from
991
+ * `getPath('project')`) because this module is
992
+ * framework-independent and cannot reach the path
993
+ * globals itself; tests inject a fake SDK loader.
994
+ * Omitted: building an `s3` driver throws (fatal).
632
995
  * @param {function} [opt.warn] - Boot-warning sink for the per-root strategy-stamp
633
996
  * checks (§4: a strategy flip on populated storage is
634
997
  * unrecoverable by config, so it warns every boot; a
@@ -673,31 +1036,43 @@ function start(opt) {
673
1036
  // A connector store when one was built for this driver, else the
674
1037
  // embedded SQLite file inside the driver's own root — self-contained,
675
1038
  // so moving the root moves its metadata with it, and never web-served
676
- // because validateConfig refuses a served root.
677
- var store = ( opt.stores && opt.stores[name] )
678
- ? opt.stores[name]
679
- : createEmbeddedMetaStore(nodePath.join(conf.root, '.meta.db'));
1039
+ // because validateConfig refuses a served root. `s3` is STORELESS:
1040
+ // the provider carries the metadata ON the object (immutable after
1041
+ // upload, like the key), so there is no embedded file to create.
1042
+ var isRemote = ( conf.adapter === 's3' );
1043
+ var store = isRemote
1044
+ ? null
1045
+ : ( ( opt.stores && opt.stores[name] )
1046
+ ? opt.stores[name]
1047
+ : createEmbeddedMetaStore(nodePath.join(conf.root, '.meta.db')) );
680
1048
 
681
1049
  // Defaults, size/duration parsing and the cas hash canonicalisation —
682
1050
  // ONE shared resolver, also driven by the `storage:*` CLI's offline
683
1051
  // path (see resolveDriverConf).
684
1052
  var resolved = resolveDriverConf(conf);
685
1053
 
686
- // THE strategy dispatch — validateConfig has already refused unknown
687
- // and deferred names, so this lookup cannot miss on a validated boot;
688
- // a direct caller bypassing validation gets a loud TypeError, which
689
- // is the fail-fast it asked for. A factory throw (e.g. cas over a
690
- // store lacking the refcount verbs) propagates to the caller, whose
691
- // documented contract treats it as fatal.
692
- built[name] = FACTORIES[conf.strategy](name, resolved, store);
1054
+ // THE dispatch — adapter × strategy via the composition map (an
1055
+ // adapter-less conf is a direct caller's, and behaves exactly as
1056
+ // before: the local row). validateConfig has already refused unknown
1057
+ // names, so a miss here is a programming error and gets its loud
1058
+ // TypeError. A factory throw (a store lacking the refcount verbs, a
1059
+ // missing s3 SDK) propagates to the caller, whose documented contract
1060
+ // treats it as fatal. The 4th argument carries the injected
1061
+ // dependencies the s3 factory needs; local factories ignore it.
1062
+ built[name] = ADAPTER_FACTORIES[conf.adapter || 'local'][resolved.strategy](
1063
+ name, resolved, store, { requireModule: opt.requireProjectModule }
1064
+ );
693
1065
 
694
1066
  // §4 — keys are strategy-specific, so a strategy flip on populated
695
1067
  // storage is unrecoverable by config edit; persist the strategy on
696
1068
  // the root's own metadata and warn on mismatch, every boot, until it
697
1069
  // is resolved. Fire-and-forget: with the embedded store it completes
698
1070
  // synchronously, with a connector store the warning simply lands
699
- // when it lands — it gates nothing.
700
- checkDriverStamp(name, conf.strategy, resolved.hash || null, store, warn);
1071
+ // when it lands — it gates nothing. NOT for s3: no store to stamp,
1072
+ // and only one strategy to flip to.
1073
+ if ( !isRemote ) {
1074
+ checkDriverStamp(name, conf.strategy, resolved.hash || null, store, warn);
1075
+ }
701
1076
  }
702
1077
 
703
1078
  _drivers = built;
@@ -871,6 +1246,8 @@ module.exports = {
871
1246
  // and factories a boot uses — in-tree consumers, versioned together.
872
1247
  _resolveDriverConf : resolveDriverConf,
873
1248
  _FACTORIES : FACTORIES,
1249
+ _ADAPTER_FACTORIES : ADAPTER_FACTORIES,
1250
+ _S3_KEYS : S3_KEYS,
874
1251
  _createEmbeddedMetaStore : createEmbeddedMetaStore,
875
1252
  _ulid : util.ulid,
876
1253
  _parseSize : util.parseSize,
@@ -886,5 +1263,9 @@ module.exports = {
886
1263
  _DEFAULT_CAS_FSYNC : DEFAULT_CAS_FSYNC,
887
1264
  _DEFAULT_SWEEP_INTERVAL : DEFAULT_SWEEP_INTERVAL,
888
1265
  _DEFAULT_SWEEP_GRACE : DEFAULT_SWEEP_GRACE,
1266
+ _DEFAULT_CHUNK_SIZE : DEFAULT_CHUNK_SIZE,
1267
+ _DEFAULT_STREAM_FSYNC : DEFAULT_STREAM_FSYNC,
1268
+ _DEFAULT_SESSION_TTL : DEFAULT_SESSION_TTL,
1269
+ _DEFAULT_SESSION_SWEEP_INTERVAL : DEFAULT_SESSION_SWEEP_INTERVAL,
889
1270
  _parseDuration : util.parseDuration
890
1271
  };
@@ -112,8 +112,19 @@ function noop() {}
112
112
  * primitive is) and inherits the documented residual: across PROCESSES, the
113
113
  * sweep's unlink can in principle race a same-content publish in the
114
114
  * nanoseconds between claim and unlink — which is why the sweep only collects
115
- * blobs at zero for longer than the grace window, and why multi-process sweep
116
- * coordination arrives WITH the first connector implementation, not before.
115
+ * blobs at zero for longer than the grace window.
116
+ *
117
+ * Multi-process sweep COORDINATION was expected to arrive with the first
118
+ * connector store; measured against that store (couchbase, 2026-08-14), it
119
+ * turned out to need no election layer, because `removeIfZero`'s atomicity IS
120
+ * the coordination: several processes may sweep one root concurrently and
121
+ * exactly one claim per blob wins, every loser reading a compare-and-set
122
+ * failure and skipping. An election would also have made `storage:gc` report
123
+ * `collected: 0` on whichever process did not hold the lease. The residual
124
+ * above is UNCHANGED by that finding — it is put-vs-sweep, not
125
+ * sweeper-vs-sweeper, so no coordination between sweepers could have closed
126
+ * it; the grace window, the put-side heal and `storage:verify` remain its
127
+ * mitigations.
117
128
  *
118
129
  * @typedef {Object} StorageMetaStore
119
130
  * @property {function(string, StorageMeta, function=): void} set - Upsert `meta` under `key`; `fn(err, meta)`. MUST report failure through the callback, never by throwing. NEVER call it on a refcounted row — REPLACE semantics would reset the count; `acquireRef` owns those rows.