gina 0.5.6 → 0.5.7

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 (499) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +9 -6
  3. package/ROADMAP.md +1 -0
  4. package/framework/v0.5.7/VERSION +1 -0
  5. package/framework/v0.5.7/core/connectors/mongodb/lib/job-store.js +334 -0
  6. package/framework/v0.5.7/core/connectors/redis/index.js +36 -0
  7. package/framework/v0.5.7/core/connectors/redis/lib/connector.js +66 -0
  8. package/framework/v0.5.7/core/connectors/redis/lib/job-store.js +454 -0
  9. package/framework/v0.5.7/core/connectors/sqlite/lib/job-store.js +263 -0
  10. package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-json.js +41 -31
  11. package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-stream.js +10 -5
  12. package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-swig.js +37 -31
  13. package/framework/{v0.5.6 → v0.5.7}/core/gna.js +22 -2
  14. package/framework/{v0.5.6 → v0.5.7}/core/server.js +68 -0
  15. package/framework/{v0.5.6 → v0.5.7}/lib/index.js +4 -0
  16. package/framework/{v0.5.6 → v0.5.7}/lib/job/src/main.js +147 -29
  17. package/framework/v0.5.7/lib/job-store.js +84 -0
  18. package/framework/{v0.5.6 → v0.5.7}/package.json +1 -1
  19. package/gna.js +4 -4
  20. package/llms.txt +7 -4
  21. package/package.json +4 -4
  22. package/script/check_no_local_leak.js +22 -2
  23. package/script/smoke_in_container.js +8 -2
  24. package/script/smoke_test_tarball.js +8 -1
  25. package/framework/v0.5.6/VERSION +0 -1
  26. package/framework/v0.5.6/core/connectors/redis/index.js +0 -30
  27. /package/framework/{v0.5.6 → v0.5.7}/AUTHORS +0 -0
  28. /package/framework/{v0.5.6 → v0.5.7}/LICENSE +0 -0
  29. /package/framework/{v0.5.6 → v0.5.7}/core/asset/html/nolayout.html +0 -0
  30. /package/framework/{v0.5.6 → v0.5.7}/core/asset/html/static.html +0 -0
  31. /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/android-chrome-192x192.png +0 -0
  32. /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/android-chrome-512x512.png +0 -0
  33. /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/apple-touch-icon.png +0 -0
  34. /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon-16x16.png +0 -0
  35. /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon-32x32.png +0 -0
  36. /package/framework/{v0.5.6 → v0.5.7}/core/asset/img/favicon.ico +0 -0
  37. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/README.md +0 -0
  38. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  39. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  40. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  41. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  42. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  43. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  44. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  45. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  46. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  47. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  48. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  49. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  50. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
  51. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  52. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  53. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  54. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  55. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  56. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  57. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  58. /package/framework/{v0.5.6 → v0.5.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  59. /package/framework/{v0.5.6 → v0.5.7}/core/config.js +0 -0
  60. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/ai/index.js +0 -0
  61. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/ai/lib/connector.js +0 -0
  62. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/index.js +0 -0
  63. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.js +0 -0
  64. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  65. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  66. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
  67. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.js +0 -0
  68. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  69. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  70. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/index.js +0 -0
  71. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/connector.js +0 -0
  72. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  73. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mongodb/lib/session-store.js +0 -0
  74. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mysql/index.js +0 -0
  75. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/mysql/lib/connector.js +0 -0
  76. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/postgresql/index.js +0 -0
  77. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/postgresql/lib/connector.js +0 -0
  78. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/redis/lib/session-store.js +0 -0
  79. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/index.js +0 -0
  80. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/lib/connector.js +0 -0
  81. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/scylladb/lib/session-store.js +0 -0
  82. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sql-parser.js +0 -0
  83. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/index.js +0 -0
  84. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/lib/connector.js +0 -0
  85. /package/framework/{v0.5.6 → v0.5.7}/core/connectors/sqlite/lib/session-store.js +0 -0
  86. /package/framework/{v0.5.6 → v0.5.7}/core/content.encoding +0 -0
  87. /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.framework.js +0 -0
  88. /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.js +0 -0
  89. /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-nunjucks-async.js +0 -0
  90. /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-nunjucks.js +0 -0
  91. /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-swig-async.js +0 -0
  92. /package/framework/{v0.5.6 → v0.5.7}/core/controller/controller.render-v1.js +0 -0
  93. /package/framework/{v0.5.6 → v0.5.7}/core/controller/index.js +0 -0
  94. /package/framework/{v0.5.6 → v0.5.7}/core/controller/inspector-window-emit.js +0 -0
  95. /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/LICENSE +0 -0
  96. /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/README.md +0 -0
  97. /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  98. /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  99. /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  100. /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  101. /package/framework/{v0.5.6 → v0.5.7}/core/deps/busboy-1.6.0/package.json +0 -0
  102. /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  103. /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  104. /package/framework/{v0.5.6 → v0.5.7}/core/deps/streamsearch-1.1.0/package.json +0 -0
  105. /package/framework/{v0.5.6 → v0.5.7}/core/dev/index.js +0 -0
  106. /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/class.js +0 -0
  107. /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/factory.js +0 -0
  108. /package/framework/{v0.5.6 → v0.5.7}/core/dev/lib/tools.js +0 -0
  109. /package/framework/{v0.5.6 → v0.5.7}/core/locales/README.md +0 -0
  110. /package/framework/{v0.5.6 → v0.5.7}/core/locales/currency.json +0 -0
  111. /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/language/en.json +0 -0
  112. /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/language/fr.json +0 -0
  113. /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/region/en.json +0 -0
  114. /package/framework/{v0.5.6 → v0.5.7}/core/locales/dist/region/fr.json +0 -0
  115. /package/framework/{v0.5.6 → v0.5.7}/core/locales/index.js +0 -0
  116. /package/framework/{v0.5.6 → v0.5.7}/core/mime.types +0 -0
  117. /package/framework/{v0.5.6 → v0.5.7}/core/model/entity.js +0 -0
  118. /package/framework/{v0.5.6 → v0.5.7}/core/model/index.js +0 -0
  119. /package/framework/{v0.5.6 → v0.5.7}/core/model/template/entityFactory.js +0 -0
  120. /package/framework/{v0.5.6 → v0.5.7}/core/model/template/index.js +0 -0
  121. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/README.md +0 -0
  122. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/index.js +0 -0
  123. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/README.md +0 -0
  124. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/package.json +0 -0
  125. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/csrf/src/main.js +0 -0
  126. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/README.md +0 -0
  127. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/README.md +0 -0
  128. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/package.json +0 -0
  129. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  130. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/README.md +0 -0
  131. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/package.json +0 -0
  132. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  133. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/README.md +0 -0
  134. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/package.json +0 -0
  135. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  136. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/README.md +0 -0
  137. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/package.json +0 -0
  138. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  139. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  140. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  141. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  142. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  143. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  144. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  145. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  146. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  147. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  148. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/package.json +0 -0
  149. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  150. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  151. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  152. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/src/main.js +0 -0
  153. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  154. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  155. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  156. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  157. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  158. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  159. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  160. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  161. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  162. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  163. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  164. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  165. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  166. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  167. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  168. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  169. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  170. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  171. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/README.md +0 -0
  172. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/package.json +0 -0
  173. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/session/src/main.js +0 -0
  174. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/README.md +0 -0
  175. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/build.json +0 -0
  176. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/package.json +0 -0
  177. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/storage/src/main.js +0 -0
  178. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/README.md +0 -0
  179. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/build.json +0 -0
  180. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/package.json +0 -0
  181. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/src/form-validator.js +0 -0
  182. /package/framework/{v0.5.6 → v0.5.7}/core/plugins/lib/validator/src/main.js +0 -0
  183. /package/framework/{v0.5.6 → v0.5.7}/core/router.js +0 -0
  184. /package/framework/{v0.5.6 → v0.5.7}/core/server.express.js +0 -0
  185. /package/framework/{v0.5.6 → v0.5.7}/core/server.isaac.js +0 -0
  186. /package/framework/{v0.5.6 → v0.5.7}/core/status.codes +0 -0
  187. /package/framework/{v0.5.6 → v0.5.7}/core/template/_gitignore +0 -0
  188. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/app.json +0 -0
  189. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  190. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
  191. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
  192. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  193. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
  194. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  195. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  196. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  197. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  198. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/index.js +0 -0
  199. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle/locales/en.json +0 -0
  200. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  201. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  202. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  203. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  204. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  205. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  206. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  207. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
  208. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_public/sw.js +0 -0
  209. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  210. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  211. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  212. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  213. /package/framework/{v0.5.6 → v0.5.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  214. /package/framework/{v0.5.6 → v0.5.7}/core/template/command/gina.bat.tpl +0 -0
  215. /package/framework/{v0.5.6 → v0.5.7}/core/template/command/gina.tpl +0 -0
  216. /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/env.json +0 -0
  217. /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/manifest.json +0 -0
  218. /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/package.json +0 -0
  219. /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/settings.json +0 -0
  220. /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/statics.json +0 -0
  221. /package/framework/{v0.5.6 → v0.5.7}/core/template/conf/templates.json +0 -0
  222. /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/401.json +0 -0
  223. /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/403.json +0 -0
  224. /package/framework/{v0.5.6 → v0.5.7}/core/template/error/client/json/404.json +0 -0
  225. /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/html/50x.html +0 -0
  226. /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/json/500.json +0 -0
  227. /package/framework/{v0.5.6 → v0.5.7}/core/template/error/server/json/503.json +0 -0
  228. /package/framework/{v0.5.6 → v0.5.7}/core/template/extensions/logger/config.json +0 -0
  229. /package/framework/{v0.5.6 → v0.5.7}/helpers/console.js +0 -0
  230. /package/framework/{v0.5.6 → v0.5.7}/helpers/context.js +0 -0
  231. /package/framework/{v0.5.6 → v0.5.7}/helpers/data/LICENSE +0 -0
  232. /package/framework/{v0.5.6 → v0.5.7}/helpers/data/README.md +0 -0
  233. /package/framework/{v0.5.6 → v0.5.7}/helpers/data/package.json +0 -0
  234. /package/framework/{v0.5.6 → v0.5.7}/helpers/data/src/main.js +0 -0
  235. /package/framework/{v0.5.6 → v0.5.7}/helpers/dateFormat.js +0 -0
  236. /package/framework/{v0.5.6 → v0.5.7}/helpers/index.js +0 -0
  237. /package/framework/{v0.5.6 → v0.5.7}/helpers/json/LICENSE +0 -0
  238. /package/framework/{v0.5.6 → v0.5.7}/helpers/json/README.md +0 -0
  239. /package/framework/{v0.5.6 → v0.5.7}/helpers/json/package.json +0 -0
  240. /package/framework/{v0.5.6 → v0.5.7}/helpers/json/src/main.js +0 -0
  241. /package/framework/{v0.5.6 → v0.5.7}/helpers/path.js +0 -0
  242. /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/README.md +0 -0
  243. /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/package.json +0 -0
  244. /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/src/api-error.js +0 -0
  245. /package/framework/{v0.5.6 → v0.5.7}/helpers/plugins/src/main.js +0 -0
  246. /package/framework/{v0.5.6 → v0.5.7}/helpers/prototypes.js +0 -0
  247. /package/framework/{v0.5.6 → v0.5.7}/helpers/task.js +0 -0
  248. /package/framework/{v0.5.6 → v0.5.7}/helpers/text.js +0 -0
  249. /package/framework/{v0.5.6 → v0.5.7}/lib/admin/package.json +0 -0
  250. /package/framework/{v0.5.6 → v0.5.7}/lib/admin/src/main.js +0 -0
  251. /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/README.md +0 -0
  252. /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/build.json +0 -0
  253. /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/package.json +0 -0
  254. /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/src/dep/jszip.min.js +0 -0
  255. /package/framework/{v0.5.6 → v0.5.7}/lib/archiver/src/main.js +0 -0
  256. /package/framework/{v0.5.6 → v0.5.7}/lib/async/package.json +0 -0
  257. /package/framework/{v0.5.6 → v0.5.7}/lib/async/src/main.js +0 -0
  258. /package/framework/{v0.5.6 → v0.5.7}/lib/cache/README.md +0 -0
  259. /package/framework/{v0.5.6 → v0.5.7}/lib/cache/build.json +0 -0
  260. /package/framework/{v0.5.6 → v0.5.7}/lib/cache/package.json +0 -0
  261. /package/framework/{v0.5.6 → v0.5.7}/lib/cache/src/main.js +0 -0
  262. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/aliases.json +0 -0
  263. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/add.js +0 -0
  264. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/arguments.json +0 -0
  265. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/build.js +0 -0
  266. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/copy.js +0 -0
  267. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/cp.js +0 -0
  268. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/help.js +0 -0
  269. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/help.txt +0 -0
  270. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  271. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/list.js +0 -0
  272. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/man.js +0 -0
  273. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/mcp-start.js +0 -0
  274. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/mcp.js +0 -0
  275. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/oas.js +0 -0
  276. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/openapi.js +0 -0
  277. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/remove.js +0 -0
  278. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/rename.js +0 -0
  279. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/restart.js +0 -0
  280. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/rm.js +0 -0
  281. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/start.js +0 -0
  282. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/status.js +0 -0
  283. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/bundle/stop.js +0 -0
  284. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/cache/stats.js +0 -0
  285. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/add.js +0 -0
  286. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/arguments.json +0 -0
  287. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/help.js +0 -0
  288. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/help.txt +0 -0
  289. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/infer.js +0 -0
  290. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/list.js +0 -0
  291. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/migrate.js +0 -0
  292. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/remove.js +0 -0
  293. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/rm.js +0 -0
  294. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/connector/test.js +0 -0
  295. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/add.js +0 -0
  296. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/get.js +0 -0
  297. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/help.js +0 -0
  298. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/help.txt +0 -0
  299. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/link-dev.js +0 -0
  300. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/list.js +0 -0
  301. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/remove.js +0 -0
  302. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/rm.js +0 -0
  303. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/set.js +0 -0
  304. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/unset.js +0 -0
  305. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/env/use.js +0 -0
  306. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/add.js +0 -0
  307. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/arguments.json +0 -0
  308. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/build.js +0 -0
  309. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/dot.js +0 -0
  310. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/get.js +0 -0
  311. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/help.js +0 -0
  312. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/help.txt +0 -0
  313. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/init.js +0 -0
  314. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/link-node-modules.js +0 -0
  315. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/link.js +0 -0
  316. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/list.js +0 -0
  317. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/man.js +0 -0
  318. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/msg.json +0 -0
  319. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/open.js +0 -0
  320. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/remove.js +0 -0
  321. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/reset.js +0 -0
  322. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/restart.js +0 -0
  323. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/set.js +0 -0
  324. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/start.js +0 -0
  325. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/status.js +0 -0
  326. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/stop.js +0 -0
  327. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/tail.js +0 -0
  328. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/update.js +0 -0
  329. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/framework/version.js +0 -0
  330. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina-dev.1.md +0 -0
  331. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina-framework.1.md +0 -0
  332. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/gina.1.md +0 -0
  333. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/helper.js +0 -0
  334. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/add.js +0 -0
  335. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/arguments.json +0 -0
  336. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/export.js +0 -0
  337. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/help.js +0 -0
  338. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/help.txt +0 -0
  339. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/import.js +0 -0
  340. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/i18n/scan.js +0 -0
  341. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/index.js +0 -0
  342. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/help.js +0 -0
  343. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/help.txt +0 -0
  344. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/inspector/open.js +0 -0
  345. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/man-render.js +0 -0
  346. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/arguments.json +0 -0
  347. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/help.js +0 -0
  348. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/help.txt +0 -0
  349. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/kill.js +0 -0
  350. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/minion/list.js +0 -0
  351. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/msg.json +0 -0
  352. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/help.js +0 -0
  353. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/help.txt +0 -0
  354. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/inc/scan.js +0 -0
  355. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/list.js +0 -0
  356. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/reset.js +0 -0
  357. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/port/set.js +0 -0
  358. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/add.js +0 -0
  359. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/arguments.json +0 -0
  360. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/backup.js +0 -0
  361. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/build.js +0 -0
  362. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/help.js +0 -0
  363. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/help.txt +0 -0
  364. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/import.js +0 -0
  365. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/list.js +0 -0
  366. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/man.js +0 -0
  367. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/move.js +0 -0
  368. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/remove.js +0 -0
  369. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/rename.js +0 -0
  370. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/restart.js +0 -0
  371. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/restore.js +0 -0
  372. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/rm.js +0 -0
  373. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/start.js +0 -0
  374. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/status.js +0 -0
  375. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/project/stop.js +0 -0
  376. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/arguments.json +0 -0
  377. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/help.js +0 -0
  378. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/help.txt +0 -0
  379. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/list.js +0 -0
  380. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/remove.js +0 -0
  381. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/protocol/set.js +0 -0
  382. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/add.js +0 -0
  383. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/help.js +0 -0
  384. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/help.txt +0 -0
  385. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/link-local.js +0 -0
  386. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/link-production.js +0 -0
  387. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/list.js +0 -0
  388. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/remove.js +0 -0
  389. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/rm.js +0 -0
  390. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/scope/use.js +0 -0
  391. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/arguments.json +0 -0
  392. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/check.js +0 -0
  393. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/help.js +0 -0
  394. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/help.txt +0 -0
  395. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/secrets/scan.js +0 -0
  396. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/help.js +0 -0
  397. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/help.txt +0 -0
  398. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/list.js +0 -0
  399. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/man.js +0 -0
  400. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/service/start.js +0 -0
  401. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd/view/add.js +0 -0
  402. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd-status-format/package.json +0 -0
  403. /package/framework/{v0.5.6 → v0.5.7}/lib/cmd-status-format/src/main.js +0 -0
  404. /package/framework/{v0.5.6 → v0.5.7}/lib/collection/README.md +0 -0
  405. /package/framework/{v0.5.6 → v0.5.7}/lib/collection/build.json +0 -0
  406. /package/framework/{v0.5.6 → v0.5.7}/lib/collection/package.json +0 -0
  407. /package/framework/{v0.5.6 → v0.5.7}/lib/collection/src/main.js +0 -0
  408. /package/framework/{v0.5.6 → v0.5.7}/lib/config.js +0 -0
  409. /package/framework/{v0.5.6 → v0.5.7}/lib/connector-config/package.json +0 -0
  410. /package/framework/{v0.5.6 → v0.5.7}/lib/connector-config/src/main.js +0 -0
  411. /package/framework/{v0.5.6 → v0.5.7}/lib/connector-registry/package.json +0 -0
  412. /package/framework/{v0.5.6 → v0.5.7}/lib/connector-registry/src/main.js +0 -0
  413. /package/framework/{v0.5.6 → v0.5.7}/lib/cron/README.md +0 -0
  414. /package/framework/{v0.5.6 → v0.5.7}/lib/cron/package.json +0 -0
  415. /package/framework/{v0.5.6 → v0.5.7}/lib/cron/src/main.js +0 -0
  416. /package/framework/{v0.5.6 → v0.5.7}/lib/domain/LICENSE +0 -0
  417. /package/framework/{v0.5.6 → v0.5.7}/lib/domain/README.md +0 -0
  418. /package/framework/{v0.5.6 → v0.5.7}/lib/domain/package.json +0 -0
  419. /package/framework/{v0.5.6 → v0.5.7}/lib/domain/src/main.js +0 -0
  420. /package/framework/{v0.5.6 → v0.5.7}/lib/generator/index.js +0 -0
  421. /package/framework/{v0.5.6 → v0.5.7}/lib/i18n/package.json +0 -0
  422. /package/framework/{v0.5.6 → v0.5.7}/lib/i18n/src/main.js +0 -0
  423. /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/LICENSE +0 -0
  424. /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/README.md +0 -0
  425. /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/package.json +0 -0
  426. /package/framework/{v0.5.6 → v0.5.7}/lib/inherits/src/main.js +0 -0
  427. /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-events/package.json +0 -0
  428. /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-events/src/main.js +0 -0
  429. /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-redact/package.json +0 -0
  430. /package/framework/{v0.5.6 → v0.5.7}/lib/inspector-redact/src/main.js +0 -0
  431. /package/framework/{v0.5.6 → v0.5.7}/lib/instrument/package.json +0 -0
  432. /package/framework/{v0.5.6 → v0.5.7}/lib/instrument/src/main.js +0 -0
  433. /package/framework/{v0.5.6 → v0.5.7}/lib/job/package.json +0 -0
  434. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/README.md +0 -0
  435. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/package.json +0 -0
  436. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/default/index.js +0 -0
  437. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/index.js +0 -0
  438. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  439. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  440. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/index.js +0 -0
  441. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/listener.js +0 -0
  442. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/containers/mq/speaker.js +0 -0
  443. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/helper.js +0 -0
  444. /package/framework/{v0.5.6 → v0.5.7}/lib/logger/src/main.js +0 -0
  445. /package/framework/{v0.5.6 → v0.5.7}/lib/math/index.js +0 -0
  446. /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-dispatch/package.json +0 -0
  447. /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-dispatch/src/main.js +0 -0
  448. /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-http/package.json +0 -0
  449. /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-http/src/main.js +0 -0
  450. /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-server/package.json +0 -0
  451. /package/framework/{v0.5.6 → v0.5.7}/lib/mcp-server/src/main.js +0 -0
  452. /package/framework/{v0.5.6 → v0.5.7}/lib/merge/README.md +0 -0
  453. /package/framework/{v0.5.6 → v0.5.7}/lib/merge/package.json +0 -0
  454. /package/framework/{v0.5.6 → v0.5.7}/lib/merge/src/main.js +0 -0
  455. /package/framework/{v0.5.6 → v0.5.7}/lib/metrics/package.json +0 -0
  456. /package/framework/{v0.5.6 → v0.5.7}/lib/metrics/src/main.js +0 -0
  457. /package/framework/{v0.5.6 → v0.5.7}/lib/model.js +0 -0
  458. /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/README.md +0 -0
  459. /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/package.json +0 -0
  460. /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-filters/src/main.js +0 -0
  461. /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-resolver/package.json +0 -0
  462. /package/framework/{v0.5.6 → v0.5.7}/lib/nunjucks-resolver/src/main.js +0 -0
  463. /package/framework/{v0.5.6 → v0.5.7}/lib/proc.js +0 -0
  464. /package/framework/{v0.5.6 → v0.5.7}/lib/routing/README.md +0 -0
  465. /package/framework/{v0.5.6 → v0.5.7}/lib/routing/build.json +0 -0
  466. /package/framework/{v0.5.6 → v0.5.7}/lib/routing/package.json +0 -0
  467. /package/framework/{v0.5.6 → v0.5.7}/lib/routing/src/main.js +0 -0
  468. /package/framework/{v0.5.6 → v0.5.7}/lib/routing/src/radix.js +0 -0
  469. /package/framework/{v0.5.6 → v0.5.7}/lib/routing-introspect/package.json +0 -0
  470. /package/framework/{v0.5.6 → v0.5.7}/lib/routing-introspect/src/main.js +0 -0
  471. /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/package.json +0 -0
  472. /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/src/backends/env.js +0 -0
  473. /package/framework/{v0.5.6 → v0.5.7}/lib/secrets/src/main.js +0 -0
  474. /package/framework/{v0.5.6 → v0.5.7}/lib/session-store.js +0 -0
  475. /package/framework/{v0.5.6 → v0.5.7}/lib/shell.js +0 -0
  476. /package/framework/{v0.5.6 → v0.5.7}/lib/state.js +0 -0
  477. /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/README.md +0 -0
  478. /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/package.json +0 -0
  479. /package/framework/{v0.5.6 → v0.5.7}/lib/swig-filters/src/main.js +0 -0
  480. /package/framework/{v0.5.6 → v0.5.7}/lib/swig-resolver/package.json +0 -0
  481. /package/framework/{v0.5.6 → v0.5.7}/lib/swig-resolver/src/main.js +0 -0
  482. /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/package.json +0 -0
  483. /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/loaders/http.js +0 -0
  484. /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/loaders/memory.js +0 -0
  485. /package/framework/{v0.5.6 → v0.5.7}/lib/template-loaders/src/main.js +0 -0
  486. /package/framework/{v0.5.6 → v0.5.7}/lib/url/README.md +0 -0
  487. /package/framework/{v0.5.6 → v0.5.7}/lib/url/index.js +0 -0
  488. /package/framework/{v0.5.6 → v0.5.7}/lib/url/routing.json +0 -0
  489. /package/framework/{v0.5.6 → v0.5.7}/lib/uuid/package.json +0 -0
  490. /package/framework/{v0.5.6 → v0.5.7}/lib/uuid/src/main.js +0 -0
  491. /package/framework/{v0.5.6 → v0.5.7}/lib/validator.js +0 -0
  492. /package/framework/{v0.5.6 → v0.5.7}/lib/watcher/package.json +0 -0
  493. /package/framework/{v0.5.6 → v0.5.7}/lib/watcher/src/main.js +0 -0
  494. /package/framework/{v0.5.6 → v0.5.7}/lib/ws-framing/package.json +0 -0
  495. /package/framework/{v0.5.6 → v0.5.7}/lib/ws-framing/src/main.js +0 -0
  496. /package/framework/{v0.5.6 → v0.5.7}/lib/ws-query/package.json +0 -0
  497. /package/framework/{v0.5.6 → v0.5.7}/lib/ws-query/src/main.js +0 -0
  498. /package/framework/{v0.5.6 → v0.5.7}/lib/ws-session/package.json +0 -0
  499. /package/framework/{v0.5.6 → v0.5.7}/lib/ws-session/src/main.js +0 -0
@@ -1282,6 +1282,40 @@ function Server(options) {
1282
1282
  }
1283
1283
 
1284
1284
 
1285
+ /**
1286
+ * Confines a resolved static-asset filename to its intended base directory,
1287
+ * rejecting path-traversal escapes (`../`, and their `%2e%2e` / `%2F` encoded
1288
+ * variants once decoded) that would otherwise canonicalise to a sibling under
1289
+ * the shared root. Both paths are normalised with `path.resolve`, then a
1290
+ * separator-aware containment check is applied so a base of `/srv/app/lib`
1291
+ * cannot be bypassed by a sibling such as `/srv/app/lib-secrets`. Callers must
1292
+ * settle percent-decoding on `filename` BEFORE calling — both static resolvers
1293
+ * `safeDecodeURIComponent()` first, so `%2e%2e` / `%2F` are already `..` / `/`
1294
+ * here. Purely lexical (no symlink following) — matches the existing
1295
+ * CVE-2023-25345 boundary-check idiom in `controller.render-swig.js`.
1296
+ *
1297
+ * @inner
1298
+ * @private
1299
+ * @param {string} filename - The concatenated candidate filesystem path (decoded)
1300
+ * @param {string} base - The intended base directory (mapping target or publicPath)
1301
+ * @returns {string|null} The canonical in-base path, or `null` when it escapes `base`
1302
+ * @example
1303
+ * confineToBase('/srv/app/js/lib/../../../config/secret.json', '/srv/app/js/lib'); // → null
1304
+ * confineToBase('/srv/app/js/lib/app.js', '/srv/app/js/lib'); // → '/srv/app/js/lib/app.js'
1305
+ */
1306
+ var confineToBase = function(filename, base) {
1307
+ if ( typeof(filename) != 'string' || typeof(base) != 'string' || base.length === 0 ) {
1308
+ return null;
1309
+ }
1310
+ var _resolvedBase = path.resolve(base);
1311
+ var _resolvedFile = path.resolve(filename);
1312
+ // separator-aware containment: identical to base, or a proper child of it
1313
+ if ( _resolvedFile === _resolvedBase || _resolvedFile.indexOf(_resolvedBase + path.sep) === 0 ) {
1314
+ return _resolvedFile;
1315
+ }
1316
+ return null;
1317
+ }
1318
+
1285
1319
  /**
1286
1320
  * Resolves a request URL to an absolute asset filename by consulting
1287
1321
  * `publicResources`, `staticResources`, reverse-routing aliases, and
@@ -1311,6 +1345,7 @@ function Server(options) {
1311
1345
  , path = null
1312
1346
  , altConf = ( typeof(staticProps.firstLevel) != 'undefined' && typeof(self.conf.reverseRouting) != 'undefined' ) ? self.conf.reverseRouting[staticProps.firstLevel] : false
1313
1347
  , backedupPath = null
1348
+ , _base = null // #B64 — intended base dir to confine `filename` against
1314
1349
  ;
1315
1350
  if (
1316
1351
  staticProps.isFile && staticsArr.indexOf(url) > -1
@@ -1334,11 +1369,26 @@ function Server(options) {
1334
1369
  } else {
1335
1370
  filename = (bundleConf.staticResources.indexOf(path) > -1) ? bundleConf.content.statics[path] + url.replace(path, '/') : bundleConf.content.statics[staticProps.firstLevel] + url.replace(staticProps.firstLevel, '/');
1336
1371
  }
1372
+ // #B64 path-traversal guard — the mapped filename above is
1373
+ // `<mapping target> + <url remainder>` by raw concatenation, so a
1374
+ // decoded `../` in the remainder escapes the target dir. Capture the
1375
+ // matched mapping target as the base to confine against (below).
1376
+ _base = (bundleConf.staticResources.indexOf(path) > -1) ? bundleConf.content.statics[path] : bundleConf.content.statics[staticProps.firstLevel];
1337
1377
  } else {
1338
1378
  filename = ( bundleConf.staticResources.indexOf(url) > -1 ) ? bundleConf.content.statics[url] : bundleConf.publicPath + url;
1379
+ // #B64 path-traversal guard — exact-match mapping target, else the
1380
+ // bundle `publicPath` (for the `publicPath + url` fallback).
1381
+ _base = ( bundleConf.staticResources.indexOf(url) > -1 ) ? bundleConf.content.statics[url] : bundleConf.publicPath;
1339
1382
  }
1340
1383
 
1341
1384
 
1385
+ // #B64 — reject any path that canonicalises outside its base dir
1386
+ // (traversal). Returns notFound (`404.html`) — identical to a missing
1387
+ // file, no distinct signal. Guards every caller (HTTP/2 push, asset
1388
+ // catalog) at this single resolver chokepoint.
1389
+ if ( confineToBase(filename, _base) === null )
1390
+ return notFound;
1391
+
1342
1392
  if ( !fs.existsSync(filename) )
1343
1393
  return notFound;
1344
1394
 
@@ -2359,6 +2409,10 @@ function Server(options) {
2359
2409
  var isCacheless = bundleConf.isCacheless;
2360
2410
  // by default
2361
2411
  var filename = bundleConf.publicPath + pathname;
2412
+ // #B64 path-traversal guard — the intended base dir for `filename`. Starts
2413
+ // at publicPath (the default build above) and is re-pointed to the matched
2414
+ // statics mapping target in each branch below, then confined post-decode.
2415
+ var _staticBase = bundleConf.publicPath;
2362
2416
  var isFilenameDir = null
2363
2417
  , stat = null
2364
2418
  , dirname = null
@@ -2374,6 +2428,7 @@ function Server(options) {
2374
2428
  var staticIndex = bundleConf.staticResources.indexOf(pathname);
2375
2429
  if ( staticProps.isStaticFilename && staticIndex > -1 ) {
2376
2430
  filename = bundleConf.content.statics[ bundleConf.staticResources[staticIndex] ]
2431
+ _staticBase = filename; // #B64 — exact single-file mapping; base = the file itself
2377
2432
  } else {
2378
2433
  var s = 0, sLen = bundleConf.staticResources.length;
2379
2434
  for ( ; s < sLen; ++s ) {
@@ -2383,6 +2438,8 @@ function Server(options) {
2383
2438
  // `staticResources` path.
2384
2439
  // if ( eval('/^' + bundleConf.staticResources[s].replace(/\//g,'\\/') +'/').test(pathname) ) {
2385
2440
  if ( new RegExp('^' + bundleConf.staticResources[s].replace(/\//g,'\\/')).test(pathname) ) {
2441
+ // #B64 — capture the matched mapping target as the confinement base
2442
+ _staticBase = bundleConf.content.statics[ bundleConf.staticResources[s] ];
2386
2443
  filename = bundleConf.content.statics[ bundleConf.staticResources[s] ] +'/'+ pathname.replace(bundleConf.staticResources[s], '');
2387
2444
  break;
2388
2445
  }
@@ -2393,6 +2450,8 @@ function Server(options) {
2393
2450
  var key = pathname.replace(pathname.split('/').splice(-1), '');
2394
2451
  for ( ; s < sLen; ++s ) {
2395
2452
  if ( bundleConf.staticResources[s] == key ) {
2453
+ // #B64 — capture the matched mapping target as the confinement base
2454
+ _staticBase = bundleConf.content.statics[ bundleConf.staticResources[s] ];
2396
2455
  filename = bundleConf.content.statics[ bundleConf.staticResources[s] ] +'/'+ pathname.replace(bundleConf.staticResources[s], '');
2397
2456
  break;
2398
2457
  }
@@ -2410,6 +2469,15 @@ function Server(options) {
2410
2469
  // and crash the bundle. Fall back to the raw filename on a bad escape.
2411
2470
  // was: filename = decodeURIComponent(filename);
2412
2471
  filename = safeDecodeURIComponent(filename);
2472
+ // #B64 path-traversal guard — `filename` above is `<base> + '/' + <url
2473
+ // remainder>` (or `publicPath + pathname`) by raw concatenation, so a
2474
+ // decoded `../` (incl. %2F / %2e%2e, now settled by the line above)
2475
+ // escapes the base dir. Reject anything resolving outside `_staticBase`
2476
+ // with a plain 404 — identical to a missing file, no distinct signal.
2477
+ // Guards BOTH the fs.readFile and fs.createReadStream sinks below.
2478
+ if ( confineToBase(filename, _staticBase) === null ) {
2479
+ return throwError(response, 404, 'Page not found: \n' + pathname, next);
2480
+ }
2413
2481
  let filenameObj = new _(filename, true);
2414
2482
  filenameObj.exists(function onStaticExists(exists) {
2415
2483
  // fs.exists(filename, function onStaticExists(exists) {
@@ -84,6 +84,10 @@ function Lib() {
84
84
  archiver : require('./archiver'),
85
85
  cmd : _require('./cmd'),
86
86
  SessionStore : _require('./session-store'),
87
+ // #AI6 — connector-backed job-store factory (lib/job `start({store})`).
88
+ // Stateless dispatcher invoked ONCE at boot from gna.js; _require like
89
+ // SessionStore (no instance/singleton state to protect from eviction).
90
+ JobStore : _require('./job-store'),
87
91
  SwigFilters : _require('./swig-filters'),
88
92
  Cache : require('./cache'), // #B32-residual — plain require (leaf class held at gen-0 via server.isaac.js:35; Cache._events is a Collection). See Collection note above.
89
93
  uuid : require('./uuid'), // #B32-residual — plain require (pushed as a child of the gen-0 collection module per `new Collection()`). See Collection note above.
@@ -25,14 +25,22 @@
25
25
  * deferred functions run at once; the rest queue. This is the whole point
26
26
  * of moving the work out-of-band — a burst of requests must not fan out
27
27
  * into N unbounded concurrent (and expensive) LLM calls.
28
- * - **Pluggable store, memory in v1.** Records persist behind a small
28
+ * - **Failed-job retry (opt-in).** `create(fn, { maxAttempts: N })` retries
29
+ * a failed attempt with exponential backoff (`retryBackoffMs`, default
30
+ * 1s, doubling); the record returns to `pending` (last error and
31
+ * `nextRetryAt` stay visible) until the final attempt — `failed` is
32
+ * strictly terminal. The deferred fn lives only in the creating process,
33
+ * so only the origin pod retries; other pods just read records.
34
+ * - **Pluggable store, memory by default.** Records persist behind a small
29
35
  * callback-shaped store interface (`set / get / remove / list / sweep`).
30
- * v1 ships the in-memory store; a connector-backed store (for multi-pod,
31
- * where a job created on one pod is polled on another) is a drop-in
32
- * follow-up no API change, because the interface is callback-shaped
33
- * from day one. The deferred *function* always lives in the creating
34
- * process's memory (a closure cannot be serialised); only the *record*
35
- * (state / result / error) goes in the store.
36
+ * The in-memory store is the default; a connector-backed store is a
37
+ * drop-in via `start({ store })` SQLite ships first
38
+ * (`core/connectors/sqlite/lib/job-store.js`, wired from `app.json`'s
39
+ * `jobs.store` through `lib/job-store`), making records survive a bundle
40
+ * restart and readable cross-process. The deferred *function* always
41
+ * lives in the creating process's memory (a closure cannot be
42
+ * serialised); only the *record* (state / result / error) goes in the
43
+ * store.
36
44
  * - **Self-contained TTL sweep.** Terminal (completed / failed) records past
37
45
  * their TTL are purged by an unref'd `setInterval` (the SQLite
38
46
  * session-store cleanup pattern) — NOT `lib/cron`, which is dormant (not
@@ -48,12 +56,18 @@
48
56
  * "maxConcurrency": 4,
49
57
  * "ttl": 3600,
50
58
  * "sweepInterval": 300,
51
- * "idSize": 21
59
+ * "idSize": 21,
60
+ * "retryBackoffMs": 1000,
61
+ * "store": "jobsDb"
52
62
  * }
53
63
  * }
54
64
  *
55
65
  * `core/gna.js`'s `server.on('started')` callback calls `lib.job.start(...)`
56
- * once per bundle with this block.
66
+ * once per bundle with this block. `store` (optional) names a
67
+ * `config/connectors.json` entry; gna.js resolves it through `lib/job-store`
68
+ * into a connector-backed store (records survive restarts / are visible
69
+ * cross-process) and fails the boot if it cannot be built. Absent `store`
70
+ * means the in-memory store, as before.
57
71
  *
58
72
  * @package gina.framework
59
73
  * @namespace lib.job
@@ -74,8 +88,9 @@ var uuid = require('../../uuid/src/main');
74
88
 
75
89
  /**
76
90
  * Job lifecycle states. A job moves `PENDING -> RUNNING -> COMPLETED | FAILED`.
77
- * A terminal `FAILED` job may be returned to `PENDING` only by an explicit
78
- * retry (sweeper-driven; not implemented in v1).
91
+ * With retries (`maxAttempts > 1`) a failed attempt moves `RUNNING -> PENDING`
92
+ * (rescheduled with backoff on the creating process) — `FAILED` and
93
+ * `COMPLETED` are strictly terminal.
79
94
  *
80
95
  * @memberof module:gina/lib/job
81
96
  * @constant
@@ -141,6 +156,17 @@ var DEFAULT_WEBHOOK_BACKOFF_MS = 500;
141
156
  /** Per-attempt request timeout (ms). @memberof module:gina/lib/job @constant @type {number} */
142
157
  var DEFAULT_WEBHOOK_TIMEOUT_MS = 5000;
143
158
 
159
+ /**
160
+ * Default base delay (ms) between attempts of a failed job with retries
161
+ * remaining (`maxAttempts > 1`) — doubles on each attempt (the webhook-retry
162
+ * backoff shape).
163
+ *
164
+ * @memberof module:gina/lib/job
165
+ * @constant
166
+ * @type {number}
167
+ */
168
+ var DEFAULT_RETRY_BACKOFF_MS = 1000;
169
+
144
170
  /**
145
171
  * The active record store (memory store by default). `null` until the first
146
172
  * {@link create} or {@link start}.
@@ -191,6 +217,15 @@ var _webhookTimeoutMs = DEFAULT_WEBHOOK_TIMEOUT_MS;
191
217
  * @type {?string}
192
218
  */
193
219
  var _webhookSecret = null;
220
+ /** @inner @type {number} */
221
+ var _retryBackoffMs = DEFAULT_RETRY_BACKOFF_MS;
222
+ /**
223
+ * Pending retry timers (unref'd). Tracked so {@link reset} can cancel them —
224
+ * a timer firing after a reset would re-enqueue into a torn-down store.
225
+ * @inner
226
+ * @type {Set<*>}
227
+ */
228
+ var _retryTimers = new Set();
194
229
 
195
230
  /**
196
231
  * No-op callback used when a caller omits one.
@@ -206,14 +241,15 @@ function noop() {}
206
241
  * @property {*} result - The resolved value once `completed`; `null` otherwise.
207
242
  * @property {?{name:string, message:string, stack:?string}} error - Serialised error once `failed`; `null` otherwise.
208
243
  * @property {number} attempts - How many times the worker has run the function.
209
- * @property {number} maxAttempts - Retry ceiling (1 in v1 retry is a follow-up).
244
+ * @property {number} maxAttempts - Retry ceiling (default 1 run once). Above 1, a failed attempt is retried with backoff on the creating process.
210
245
  * @property {?string} callbackUrl - Webhook URL POSTed `{ id, state, result, error }` on completion when set.
211
246
  * @property {?Object} meta - Caller-supplied opaque metadata.
212
247
  * @property {number} createdAt - Epoch ms at creation.
213
248
  * @property {number} updatedAt - Epoch ms of the last transition.
214
249
  * @property {?number} startedAt - Epoch ms the worker began; `null` while pending.
215
250
  * @property {?number} finishedAt - Epoch ms of the terminal transition; `null` until then.
216
- * @property {?number} expiresAt - Epoch ms after which a terminal record is sweepable; `null` until terminal.
251
+ * @property {?number} expiresAt - Epoch ms after which a terminal record is sweepable; `null` until terminal — deliberately including while a retry is pending, so the sweep can never purge a retryable job.
252
+ * @property {?number} nextRetryAt - Epoch ms of the next scheduled attempt while a failed attempt awaits its retry; `null` once terminal (absent if the job never settled).
217
253
  * @property {?number} webhookDeliveredAt - Epoch ms a completion webhook succeeded; absent until delivered.
218
254
  * @property {?boolean} webhookFailed - `true` once webhook delivery exhausts its retries; absent otherwise.
219
255
  * @property {?string} webhookError - Last webhook failure reason; absent on success.
@@ -377,33 +413,61 @@ function runOne(entry) {
377
413
  rec.startedAt = Date.now();
378
414
  rec.updatedAt = rec.startedAt;
379
415
  rec.attempts = (rec.attempts || 0) + 1;
416
+ // Carried to settle() so the retry decision needs no extra store read
417
+ // (the fn itself rides on the entry — it exists only in this process).
418
+ entry.attempts = rec.attempts;
419
+ entry.maxAttempts = rec.maxAttempts || 1;
380
420
  _store.set(id, rec, function() {
381
421
  Promise.resolve().then(function() {
382
422
  return entry.fn();
383
423
  }).then(function(result) {
384
- settle(id, result, null);
424
+ settle(id, result, null, entry);
385
425
  }, function(rejErr) {
386
- settle(id, null, rejErr);
426
+ settle(id, null, rejErr, entry);
387
427
  });
388
428
  });
389
429
  });
390
430
  }
391
431
 
392
432
  /**
393
- * Write the terminal state for a job, free the worker slot, and pump the
394
- * queue again.
433
+ * Route a finished attempt. A failed attempt with retries remaining
434
+ * (`attempts < maxAttempts`) is rescheduled: the record returns to `pending`
435
+ * with the serialised failure kept visible and an informational
436
+ * `nextRetryAt`, while `expiresAt` stays `null` so the sweep can never purge
437
+ * a retryable job. Otherwise the terminal state is written, the worker slot
438
+ * freed, and the queue pumped again. `failed` / `completed` are strictly
439
+ * terminal, and the completion webhook fires only on that final transition.
395
440
  *
396
441
  * @inner
397
442
  * @param {string} id
398
443
  * @param {*} result - Resolved value on success.
399
444
  * @param {*} err - Thrown / rejected value on failure (mutually exclusive with `result`).
445
+ * @param {{id:string, fn:function, attempts:number, maxAttempts:number}} entry - In-process queue entry (carries the deferred fn for a reschedule).
400
446
  * @returns {void}
401
447
  */
402
- function settle(id, result, err) {
403
- var now = Date.now();
448
+ function settle(id, result, err, entry) {
449
+ var now = Date.now();
450
+
451
+ // Retry path — only the process that created the job holds the fn, so a
452
+ // reschedule can only ever originate here: a pod that merely reads the
453
+ // record through a shared store never reaches this code for that id.
454
+ if (err && entry && entry.attempts < entry.maxAttempts) {
455
+ var delay = _retryBackoffMs * Math.pow(2, entry.attempts - 1);
456
+ update(id, {
457
+ state: STATES.PENDING,
458
+ error: serializeError(err),
459
+ nextRetryAt: now + delay
460
+ }, function() {
461
+ _running--;
462
+ drain();
463
+ scheduleRetry(entry, delay);
464
+ });
465
+ return;
466
+ }
467
+
404
468
  var patch = err
405
- ? { state: STATES.FAILED, error: serializeError(err), finishedAt: now, expiresAt: now + _ttl * 1000 }
406
- : { state: STATES.COMPLETED, result: result, finishedAt: now, expiresAt: now + _ttl * 1000 };
469
+ ? { state: STATES.FAILED, error: serializeError(err), nextRetryAt: null, finishedAt: now, expiresAt: now + _ttl * 1000 }
470
+ : { state: STATES.COMPLETED, result: result, error: null, nextRetryAt: null, finishedAt: now, expiresAt: now + _ttl * 1000 };
407
471
 
408
472
  update(id, patch, function(uErr, rec) {
409
473
  _running--;
@@ -417,6 +481,31 @@ function settle(id, result, err) {
417
481
  });
418
482
  }
419
483
 
484
+ /**
485
+ * Arm the unref'd backoff timer that re-enqueues a failed attempt's entry.
486
+ * The timer closure is what keeps the deferred function alive between
487
+ * attempts (no separate registry). {@link reset} cancels pending timers so
488
+ * none can fire into a torn-down store, and the timer re-checks the store
489
+ * before re-queueing (a reset may race an already-elapsed timer). Re-entry
490
+ * goes through the normal queue, so retries respect `maxConcurrency` like
491
+ * any other job.
492
+ *
493
+ * @inner
494
+ * @param {{id:string, fn:function}} entry
495
+ * @param {number} delay - Backoff delay (ms).
496
+ * @returns {void}
497
+ */
498
+ function scheduleRetry(entry, delay) {
499
+ var t = setTimeout(function() {
500
+ _retryTimers.delete(t);
501
+ if (!_store) return; // reset() raced the timer
502
+ _queue.push(entry);
503
+ drain();
504
+ }, delay);
505
+ if (t && typeof t.unref === 'function') t.unref();
506
+ _retryTimers.add(t);
507
+ }
508
+
420
509
  /**
421
510
  * Best-effort completion webhook. POSTs `{ id, state, result, error }` to the
422
511
  * record's `callbackUrl` with retry/backoff and an optional HMAC signature.
@@ -515,7 +604,13 @@ function retryWebhook(record, payload, attempt, reason) {
515
604
 
516
605
  /**
517
606
  * Get-merge-set a partial patch onto a record. Store-agnostic (works for the
518
- * sync memory store and a future async connector store).
607
+ * sync memory store and an async connector store).
608
+ *
609
+ * NOT atomic across the get/set pair. Safe because every writer for a given id
610
+ * runs sequentially by construction — create, then the worker, then settle,
611
+ * then the webhook outcome, all on the origin pod (other pods only read). Do
612
+ * not add a concurrent same-id update() caller without adding per-id
613
+ * serialisation first.
519
614
  *
520
615
  * @inner
521
616
  * @param {string} id
@@ -550,7 +645,7 @@ function update(id, patch, cb) {
550
645
  * @param {Object} [opts]
551
646
  * @param {string} [opts.callbackUrl] - Webhook URL notified on completion (consumed by the webhook slice).
552
647
  * @param {Object} [opts.meta] - Opaque metadata stored on the record.
553
- * @param {number} [opts.maxAttempts=1] - Retry ceiling (retry is a follow-up; v1 runs once).
648
+ * @param {number} [opts.maxAttempts=1] - Retry ceiling. Above 1, a failed attempt is retried on the creating process with exponential backoff (`retryBackoffMs`); `failed` is only ever the state after the last attempt.
554
649
  * @returns {string} - The job id.
555
650
  * @throws {TypeError} - When `fn` is not a function.
556
651
  *
@@ -587,10 +682,18 @@ function create(fn, opts) {
587
682
  expiresAt: null
588
683
  };
589
684
 
590
- _store.set(id, record, noop);
591
685
  _queue.push({ id: id, fn: fn });
592
- // Defer so create() returns the id before the function starts.
593
- setImmediate(drain);
686
+ // Defer so create() returns the id before the function starts — and pump
687
+ // only once the store has landed the record: with an async connector store
688
+ // an immediate drain could reach runOne's get() before the set() has
689
+ // persisted, and the vanished-record guard would silently drop the job.
690
+ // (The memory store fires this callback synchronously — identical timing.)
691
+ _store.set(id, record, function(setErr) {
692
+ if (setErr) {
693
+ console.warn('[lib.job] create: store.set failed for job `' + id + '` — the job will be dropped: ' + (setErr.message || setErr));
694
+ }
695
+ setImmediate(drain);
696
+ });
594
697
  return id;
595
698
  }
596
699
 
@@ -682,6 +785,7 @@ function sweep(cb) {
682
785
  * @param {number} [opts.ttl=3600] - Terminal-record TTL (seconds).
683
786
  * @param {number} [opts.sweepInterval=300] - Sweep interval (seconds); `0` disables the internal timer.
684
787
  * @param {number} [opts.idSize=21] - jobId length (characters).
788
+ * @param {number} [opts.retryBackoffMs=1000] - Base delay (ms) between attempts of a failed job with retries remaining; doubles each attempt.
685
789
  * @param {number} [opts.webhookMaxAttempts=3] - Completion-webhook retry ceiling.
686
790
  * @param {number} [opts.webhookBackoffMs=500] - Webhook backoff base (ms); doubles each retry.
687
791
  * @param {number} [opts.webhookTimeoutMs=5000] - Per-attempt webhook request timeout (ms).
@@ -707,6 +811,9 @@ function start(opts) {
707
811
  if (typeof opts.idSize === 'number' && opts.idSize > 0) {
708
812
  _idSize = Math.floor(opts.idSize);
709
813
  }
814
+ if (typeof opts.retryBackoffMs === 'number' && opts.retryBackoffMs >= 0) {
815
+ _retryBackoffMs = Math.floor(opts.retryBackoffMs);
816
+ }
710
817
  if (typeof opts.webhookMaxAttempts === 'number' && opts.webhookMaxAttempts > 0) {
711
818
  _webhookMaxAttempts = Math.floor(opts.webhookMaxAttempts);
712
819
  }
@@ -721,6 +828,12 @@ function start(opts) {
721
828
  }
722
829
  if (!_store) {
723
830
  _store = (opts.store && typeof opts.store === 'object') ? opts.store : createMemoryStore();
831
+ } else if (opts.store && typeof opts.store === 'object' && opts.store !== _store) {
832
+ // Store adoption is once-only: a store arriving after one is installed
833
+ // (e.g. a create() already ran ensureStarted() and defaulted to the
834
+ // memory store) would strand the earlier records, so it is refused —
835
+ // loudly, because silently ignoring it loses the configured durability.
836
+ console.warn('[lib.job] start: a job store is already installed — the `store` option was ignored. Wire `jobs.store` before the first create().');
724
837
  }
725
838
  ensureSweepTimer();
726
839
  return true;
@@ -728,13 +841,14 @@ function start(opts) {
728
841
 
729
842
  /**
730
843
  * Snapshot of worker state. Useful for tests (asserting the concurrency cap)
731
- * and a future admin view.
844
+ * and a future admin view. `retryWaiting` counts failed attempts currently
845
+ * awaiting their backoff timer.
732
846
  *
733
847
  * @memberof module:gina/lib/job
734
- * @returns {{running:number, queued:number, maxConcurrency:number}}
848
+ * @returns {{running:number, queued:number, maxConcurrency:number, retryWaiting:number}}
735
849
  */
736
850
  function stats() {
737
- return { running: _running, queued: _queue.length, maxConcurrency: _maxConcurrency };
851
+ return { running: _running, queued: _queue.length, maxConcurrency: _maxConcurrency, retryWaiting: _retryTimers.size };
738
852
  }
739
853
 
740
854
  /**
@@ -772,6 +886,8 @@ function reset() {
772
886
  clearInterval(_sweepTimer);
773
887
  _sweepTimer = null;
774
888
  }
889
+ _retryTimers.forEach(function(t) { clearTimeout(t); });
890
+ _retryTimers.clear();
775
891
  _store = null;
776
892
  _queue = [];
777
893
  _running = 0;
@@ -783,6 +899,7 @@ function reset() {
783
899
  _webhookBackoffMs = DEFAULT_WEBHOOK_BACKOFF_MS;
784
900
  _webhookTimeoutMs = DEFAULT_WEBHOOK_TIMEOUT_MS;
785
901
  _webhookSecret = null;
902
+ _retryBackoffMs = DEFAULT_RETRY_BACKOFF_MS;
786
903
  }
787
904
 
788
905
  module.exports = {
@@ -800,6 +917,7 @@ module.exports = {
800
917
  DEFAULT_TTL: DEFAULT_TTL,
801
918
  DEFAULT_SWEEP_INTERVAL: DEFAULT_SWEEP_INTERVAL,
802
919
  DEFAULT_ID_SIZE: DEFAULT_ID_SIZE,
920
+ DEFAULT_RETRY_BACKOFF_MS: DEFAULT_RETRY_BACKOFF_MS,
803
921
  DEFAULT_WEBHOOK_MAX_ATTEMPTS: DEFAULT_WEBHOOK_MAX_ATTEMPTS,
804
922
  DEFAULT_WEBHOOK_BACKOFF_MS: DEFAULT_WEBHOOK_BACKOFF_MS,
805
923
  DEFAULT_WEBHOOK_TIMEOUT_MS: DEFAULT_WEBHOOK_TIMEOUT_MS
@@ -0,0 +1,84 @@
1
+ /*
2
+ * This file is part of the gina package.
3
+ * Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
4
+ *
5
+ * For the full copyright and license information, please view the LICENSE
6
+ * file that was distributed with this source code.
7
+ */
8
+ var fs = require('fs');
9
+
10
+ var helpers = require('./../helpers');
11
+ var console = require('./logger');
12
+
13
+ /**
14
+ * @module lib/job-store
15
+ * @description Thin factory that loads the connector-specific job-store
16
+ * implementation from `<connectorsPath>/<connector>/lib/job-store.js` and
17
+ * returns a ready `JobStore` instance for `lib/job`'s `start({ store })` —
18
+ * the `lib/session-store` sibling for the async-job primitive (#AI6).
19
+ *
20
+ * Do not call this directly — declare the backend in `config/connectors.json`,
21
+ * point `app.json`'s `jobs.store` at that entry name, and let `gna.js` wire it
22
+ * at boot (before the first `create()`, since store adoption is once-only).
23
+ */
24
+
25
+ /**
26
+ * Resolve `connName` against the bundle's `connectors.json` and build the
27
+ * connector-specific job store.
28
+ *
29
+ * @class JobStore
30
+ * @constructor
31
+ *
32
+ * @param {string} connName - `connectors.json` entry name (referenced by `app.json`'s
33
+ * `jobs.store`). The entry's `.connector` field selects the
34
+ * implementation (`sqlite` ships first; a connector without a
35
+ * `lib/job-store.js` is rejected).
36
+ * @returns {object} - A `JobStore` instance (`set/get/remove/list/sweep`).
37
+ * @throws {Error} - When the entry is missing, has no `connector` field, or the
38
+ * connector has no job-store implementation. `gna.js` treats a
39
+ * throw as fatal — an explicitly configured store must build,
40
+ * never degrade silently to the memory store.
41
+ *
42
+ * @example
43
+ * // app.json: { "jobs": { "store": "jobsDb" } }
44
+ * // connectors.json: { "jobsDb": { "connector": "sqlite", "file": "/data/jobs.db" } }
45
+ * var store = new JobStore('jobsDb'); // done by gna.js at boot
46
+ */
47
+ function JobStore(connName) {
48
+
49
+ if (typeof connName !== 'string' || connName.length === 0) {
50
+ throw new Error('[JobStore] a connectors.json entry name is required (got: ' + JSON.stringify(connName) + ')');
51
+ }
52
+
53
+ var ctx = getContext()
54
+ , bundle = ctx.bundle
55
+ , env = ctx.env
56
+ , conf = getConfig()[bundle][env]
57
+ // Same resolution as lib/session-store (#B10 fix): conf.connectorsPath is
58
+ // never populated by config.js — use GINA_FRAMEWORK_DIR directly.
59
+ , connectorsPath = GINA_FRAMEWORK_DIR + '/core/connectors'
60
+ , connConf = null
61
+ , connector = null
62
+ ;
63
+ try {
64
+ connConf = conf.content.connectors[connName];
65
+ connector = connConf.connector;
66
+ } catch (err) {
67
+ throw new Error('[JobStore] could not resolve `' + connName + '`: check your bundle configuration @config/connectors.json\n' + err.stack);
68
+ }
69
+ if (!connector) {
70
+ throw new Error('[JobStore] connectors.json entry `' + connName + '` has no `connector` field');
71
+ }
72
+
73
+ var filename = _(connectorsPath + '/' + connector + '/lib/job-store.js', true);
74
+
75
+ if ( !fs.existsSync(filename) ) {
76
+ throw new Error('[JobStore] connector `' + connector + '` has no job-store implementation (`' + filename + '` is missing)');
77
+ }
78
+
79
+ var store = require(filename)(connConf, bundle);
80
+ console.debug('[job-store] loaded connector=' + connector + ' bundle=' + bundle + ' (entry: ' + connName + ')');
81
+ return store;
82
+ };
83
+
84
+ module.exports = JobStore;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gina-framework",
3
- "version": "0.5.6",
3
+ "version": "0.5.7",
4
4
  "dependencies": {
5
5
  "@rhinostone/swig": "^2.7.2",
6
6
  "intl-messageformat": "^11.2.4",
package/gna.js CHANGED
@@ -15,14 +15,14 @@
15
15
  'use strict';
16
16
 
17
17
  // Framework core — the main gna module (lifecycle hooks, lib, etc.)
18
- var _gna = require('./framework/v0.5.6/core/gna');
18
+ var _gna = require('./framework/v0.5.7/core/gna');
19
19
 
20
20
  // SuperController and EntitySuper — loaded from their source modules
21
- var SuperController = require('./framework/v0.5.6/core/controller');
22
- var EntitySuper = require('./framework/v0.5.6/core/model/entity');
21
+ var SuperController = require('./framework/v0.5.7/core/controller');
22
+ var EntitySuper = require('./framework/v0.5.7/core/model/entity');
23
23
 
24
24
  // uuid — from the lib registry
25
- var uuid = require('./framework/v0.5.6/lib/uuid');
25
+ var uuid = require('./framework/v0.5.7/lib/uuid');
26
26
 
27
27
  module.exports = {
28
28