zibri 2.4.1 → 2.5.0

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 (496) hide show
  1. package/dist/cjs/application-options.model.d.ts +2 -2
  2. package/dist/cjs/application-options.model.d.ts.map +1 -1
  3. package/dist/cjs/application.d.ts.map +1 -1
  4. package/dist/cjs/application.js +0 -1
  5. package/dist/cjs/application.js.map +1 -1
  6. package/dist/cjs/assets/asset.service.d.ts.map +1 -1
  7. package/dist/cjs/assets/asset.service.js +3 -1
  8. package/dist/cjs/assets/asset.service.js.map +1 -1
  9. package/dist/cjs/auth/2fa/methods/otp/otp-credentials.model.d.ts +1 -1
  10. package/dist/cjs/auth/2fa/methods/otp/otp-credentials.model.d.ts.map +1 -1
  11. package/dist/cjs/auth/2fa/methods/otp/otp-credentials.model.js.map +1 -1
  12. package/dist/cjs/auth/2fa/methods/otp/otp.two-factor-method.js +1 -1
  13. package/dist/cjs/auth/2fa/methods/otp/otp.two-factor-method.js.map +1 -1
  14. package/dist/cjs/auth/strategies/cookie/cookie-auth.controller.js +1 -1
  15. package/dist/cjs/auth/strategies/cookie/cookie-auth.controller.js.map +1 -1
  16. package/dist/cjs/auth/strategies/jwt/jwt-auth.controller.js +1 -1
  17. package/dist/cjs/auth/strategies/jwt/jwt-auth.controller.js.map +1 -1
  18. package/dist/cjs/auth/strategies/jwt/jwt.auth-strategy.js +1 -1
  19. package/dist/cjs/auth/strategies/jwt/jwt.auth-strategy.js.map +1 -1
  20. package/dist/cjs/backup/backup-resource-entity.model.d.ts +1 -1
  21. package/dist/cjs/backup/backup-resource-entity.model.d.ts.map +1 -1
  22. package/dist/cjs/backup/backup-resource-entity.model.js.map +1 -1
  23. package/dist/cjs/change-sets/models/change-set.model.d.ts +1 -1
  24. package/dist/cjs/change-sets/models/change-set.model.d.ts.map +1 -1
  25. package/dist/cjs/change-sets/models/change-set.model.js +1 -1
  26. package/dist/cjs/change-sets/models/change-set.model.js.map +1 -1
  27. package/dist/cjs/change-sets/models/change.model.d.ts +2 -2
  28. package/dist/cjs/change-sets/models/change.model.d.ts.map +1 -1
  29. package/dist/cjs/change-sets/models/change.model.js.map +1 -1
  30. package/dist/cjs/context/cache/cache.context.d.ts +2 -2
  31. package/dist/cjs/context/cache/cache.context.d.ts.map +1 -1
  32. package/dist/cjs/context/cache/cache.context.js +2 -2
  33. package/dist/cjs/context/cache/cache.context.js.map +1 -1
  34. package/dist/cjs/context/request/request-context-token.model.js +1 -1
  35. package/dist/cjs/context/request/request-context-token.model.js.map +1 -1
  36. package/dist/cjs/cron/cron-job-entity.model.d.ts +2 -2
  37. package/dist/cjs/cron/cron-job-entity.model.d.ts.map +1 -1
  38. package/dist/cjs/cron/cron-job-entity.model.js.map +1 -1
  39. package/dist/cjs/data-source/data-sources/postgres-typeorm-data-source.model.d.ts +1 -0
  40. package/dist/cjs/data-source/data-sources/postgres-typeorm-data-source.model.d.ts.map +1 -1
  41. package/dist/cjs/data-source/data-sources/postgres-typeorm-data-source.model.js +9 -0
  42. package/dist/cjs/data-source/data-sources/postgres-typeorm-data-source.model.js.map +1 -1
  43. package/dist/cjs/data-source/data-sources/typeorm-base-data-source.model.d.ts.map +1 -1
  44. package/dist/cjs/data-source/data-sources/typeorm-base-data-source.model.js +3 -3
  45. package/dist/cjs/data-source/data-sources/typeorm-base-data-source.model.js.map +1 -1
  46. package/dist/cjs/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.d.ts +2 -1
  47. package/dist/cjs/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.d.ts.map +1 -1
  48. package/dist/cjs/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.js +20 -0
  49. package/dist/cjs/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.js.map +1 -1
  50. package/dist/cjs/data-source/data-sources/where-converter/typeorm-where-filter.converter.d.ts +4 -0
  51. package/dist/cjs/data-source/data-sources/where-converter/typeorm-where-filter.converter.d.ts.map +1 -1
  52. package/dist/cjs/data-source/data-sources/where-converter/typeorm-where-filter.converter.js +3 -1
  53. package/dist/cjs/data-source/data-sources/where-converter/typeorm-where-filter.converter.js.map +1 -1
  54. package/dist/cjs/data-source/migration/migration-entity.model.d.ts +2 -2
  55. package/dist/cjs/data-source/migration/migration-entity.model.d.ts.map +1 -1
  56. package/dist/cjs/data-source/migration/migration-entity.model.js.map +1 -1
  57. package/dist/cjs/data-source/migration/migration.model.d.ts +2 -2
  58. package/dist/cjs/data-source/migration/migration.model.d.ts.map +1 -1
  59. package/dist/cjs/data-source/models/where/date-where-filter.model.d.ts +10 -2
  60. package/dist/cjs/data-source/models/where/date-where-filter.model.d.ts.map +1 -1
  61. package/dist/cjs/data-source/models/where/string-where-filter.model.d.ts +17 -0
  62. package/dist/cjs/data-source/models/where/string-where-filter.model.d.ts.map +1 -1
  63. package/dist/cjs/data-source/models/where/where-filter-keys.model.d.ts.map +1 -1
  64. package/dist/cjs/data-source/models/where/where-filter-keys.model.js +3 -0
  65. package/dist/cjs/data-source/models/where/where-filter-keys.model.js.map +1 -1
  66. package/dist/cjs/di/default/zibri-di-providers.default.d.ts.map +1 -1
  67. package/dist/cjs/di/default/zibri-di-providers.default.js +4 -0
  68. package/dist/cjs/di/default/zibri-di-providers.default.js.map +1 -1
  69. package/dist/cjs/di/default/zibri-di-tokens.default.d.ts +3 -0
  70. package/dist/cjs/di/default/zibri-di-tokens.default.d.ts.map +1 -1
  71. package/dist/cjs/di/default/zibri-di-tokens.default.js +2 -0
  72. package/dist/cjs/di/default/zibri-di-tokens.default.js.map +1 -1
  73. package/dist/cjs/email/email.service.d.ts +1 -1
  74. package/dist/cjs/email/email.service.d.ts.map +1 -1
  75. package/dist/cjs/email/email.service.js +4 -4
  76. package/dist/cjs/email/email.service.js.map +1 -1
  77. package/dist/cjs/email/models/email.model.d.ts +4 -4
  78. package/dist/cjs/email/models/email.model.d.ts.map +1 -1
  79. package/dist/cjs/email/models/email.model.js +4 -4
  80. package/dist/cjs/email/models/email.model.js.map +1 -1
  81. package/dist/cjs/entity/generation/generate-entity-file.function.js +1 -1
  82. package/dist/cjs/entity/generation/generate-entity-file.function.js.map +1 -1
  83. package/dist/cjs/event/event-subscriber-run.model.d.ts +1 -1
  84. package/dist/cjs/event/event-subscriber-run.model.d.ts.map +1 -1
  85. package/dist/cjs/event/event-subscriber-run.model.js +1 -1
  86. package/dist/cjs/event/event-subscriber-run.model.js.map +1 -1
  87. package/dist/cjs/global/global-registry.d.ts +2 -2
  88. package/dist/cjs/global/global-registry.d.ts.map +1 -1
  89. package/dist/cjs/http/http-request.model.d.ts +2 -2
  90. package/dist/cjs/http/http-request.model.d.ts.map +1 -1
  91. package/dist/cjs/http/known-header.enum.d.ts +1 -0
  92. package/dist/cjs/http/known-header.enum.d.ts.map +1 -1
  93. package/dist/cjs/http/known-header.enum.js +1 -0
  94. package/dist/cjs/http/known-header.enum.js.map +1 -1
  95. package/dist/cjs/http-client/http-client.d.ts.map +1 -1
  96. package/dist/cjs/http-client/http-client.js.map +1 -1
  97. package/dist/cjs/index.d.ts +7 -3
  98. package/dist/cjs/index.d.ts.map +1 -1
  99. package/dist/cjs/index.js +8 -3
  100. package/dist/cjs/index.js.map +1 -1
  101. package/dist/cjs/localization/formatting/format-price.function.d.ts.map +1 -1
  102. package/dist/cjs/localization/formatting/format-price.function.js.map +1 -1
  103. package/dist/cjs/logging/log-context.model.d.ts +6 -6
  104. package/dist/cjs/logging/log-context.model.d.ts.map +1 -1
  105. package/dist/cjs/logging/log-context.model.js +6 -6
  106. package/dist/cjs/logging/log-context.model.js.map +1 -1
  107. package/dist/cjs/logging/logger.js +1 -1
  108. package/dist/cjs/logging/logger.js.map +1 -1
  109. package/dist/cjs/multithreading/models/thread-job-entity.model.d.ts +5 -5
  110. package/dist/cjs/multithreading/models/thread-job-entity.model.d.ts.map +1 -1
  111. package/dist/cjs/multithreading/models/thread-job-entity.model.js +4 -4
  112. package/dist/cjs/multithreading/models/thread-job-entity.model.js.map +1 -1
  113. package/dist/cjs/multithreading/services/thread-job.d.ts +4 -4
  114. package/dist/cjs/multithreading/services/thread-job.d.ts.map +1 -1
  115. package/dist/cjs/multithreading/services/thread-job.js.map +1 -1
  116. package/dist/cjs/open-api/open-api-service.interface.d.ts +2 -1
  117. package/dist/cjs/open-api/open-api-service.interface.d.ts.map +1 -1
  118. package/dist/cjs/open-api/open-api.service.d.ts +5 -2
  119. package/dist/cjs/open-api/open-api.service.d.ts.map +1 -1
  120. package/dist/cjs/open-api/open-api.service.js +256 -139
  121. package/dist/cjs/open-api/open-api.service.js.map +1 -1
  122. package/dist/cjs/parsing/html/csp-options.model.d.ts +1 -1
  123. package/dist/cjs/parsing/html/csp-options.model.d.ts.map +1 -1
  124. package/dist/cjs/parsing/html/csp-options.model.js.map +1 -1
  125. package/dist/cjs/parsing/parser.js +3 -3
  126. package/dist/cjs/parsing/parser.js.map +1 -1
  127. package/dist/cjs/plugin/invoicing/models/invoice-address.model.d.ts +2 -2
  128. package/dist/cjs/plugin/invoicing/models/invoice-address.model.d.ts.map +1 -1
  129. package/dist/cjs/plugin/invoicing/models/invoice-address.model.js +2 -2
  130. package/dist/cjs/plugin/invoicing/models/invoice-address.model.js.map +1 -1
  131. package/dist/cjs/plugin/invoicing/models/vat.model.d.ts +1 -1
  132. package/dist/cjs/plugin/invoicing/models/vat.model.d.ts.map +1 -1
  133. package/dist/cjs/plugin/invoicing/models/vat.model.js +1 -1
  134. package/dist/cjs/plugin/invoicing/models/vat.model.js.map +1 -1
  135. package/dist/cjs/plugin/mailing-list/mailing-list.controller.js +1 -1
  136. package/dist/cjs/plugin/mailing-list/mailing-list.controller.js.map +1 -1
  137. package/dist/cjs/plugin/mailing-list/models/mailing-list-subscriber.model.d.ts +1 -1
  138. package/dist/cjs/plugin/mailing-list/models/mailing-list-subscriber.model.d.ts.map +1 -1
  139. package/dist/cjs/plugin/mailing-list/models/mailing-list-subscriber.model.js +1 -1
  140. package/dist/cjs/plugin/mailing-list/models/mailing-list-subscriber.model.js.map +1 -1
  141. package/dist/cjs/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.d.ts +1 -1
  142. package/dist/cjs/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.d.ts.map +1 -1
  143. package/dist/cjs/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.js +1 -1
  144. package/dist/cjs/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.js.map +1 -1
  145. package/dist/cjs/plugin/payment/models/payment.model.d.ts +2 -2
  146. package/dist/cjs/plugin/payment/models/payment.model.d.ts.map +1 -1
  147. package/dist/cjs/plugin/payment/models/payment.model.js +1 -1
  148. package/dist/cjs/plugin/payment/models/payment.model.js.map +1 -1
  149. package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal-client.d.ts +17 -17
  150. package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal-client.d.ts.map +1 -1
  151. package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal-client.js +17 -17
  152. package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal-client.js.map +1 -1
  153. package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal.payment-provider.js +1 -1
  154. package/dist/cjs/plugin/payment/providers/pay-pal/pay-pal.payment-provider.js.map +1 -1
  155. package/dist/cjs/preact/preact.utilities.js +1 -1
  156. package/dist/cjs/preact/preact.utilities.js.map +1 -1
  157. package/dist/cjs/preact/validate-email-templates.function.js +1 -1
  158. package/dist/cjs/preact/validate-email-templates.function.js.map +1 -1
  159. package/dist/cjs/rate-limiting/rate-limiter.d.ts +10 -5
  160. package/dist/cjs/rate-limiting/rate-limiter.d.ts.map +1 -1
  161. package/dist/cjs/rate-limiting/rate-limiter.js +22 -12
  162. package/dist/cjs/rate-limiting/rate-limiter.js.map +1 -1
  163. package/dist/cjs/routing/controller-route-configuration.model.d.ts +5 -0
  164. package/dist/cjs/routing/controller-route-configuration.model.d.ts.map +1 -1
  165. package/dist/cjs/routing/decorators/controller.decorator.d.ts +5 -0
  166. package/dist/cjs/routing/decorators/controller.decorator.d.ts.map +1 -1
  167. package/dist/cjs/routing/decorators/controller.decorator.js +3 -2
  168. package/dist/cjs/routing/decorators/controller.decorator.js.map +1 -1
  169. package/dist/cjs/routing/decorators/create-http-decorator.function.d.ts +2 -1
  170. package/dist/cjs/routing/decorators/create-http-decorator.function.d.ts.map +1 -1
  171. package/dist/cjs/routing/decorators/create-http-decorator.function.js +2 -2
  172. package/dist/cjs/routing/decorators/create-http-decorator.function.js.map +1 -1
  173. package/dist/cjs/routing/decorators/delete.decorator.d.ts +3 -1
  174. package/dist/cjs/routing/decorators/delete.decorator.d.ts.map +1 -1
  175. package/dist/cjs/routing/decorators/delete.decorator.js +3 -2
  176. package/dist/cjs/routing/decorators/delete.decorator.js.map +1 -1
  177. package/dist/cjs/routing/decorators/get.decorator.d.ts +3 -1
  178. package/dist/cjs/routing/decorators/get.decorator.d.ts.map +1 -1
  179. package/dist/cjs/routing/decorators/get.decorator.js +3 -2
  180. package/dist/cjs/routing/decorators/get.decorator.js.map +1 -1
  181. package/dist/cjs/routing/decorators/http-decorator-option-input.model.d.ts +11 -0
  182. package/dist/cjs/routing/decorators/http-decorator-option-input.model.d.ts.map +1 -0
  183. package/dist/cjs/routing/decorators/http-decorator-option-input.model.js +3 -0
  184. package/dist/cjs/routing/decorators/http-decorator-option-input.model.js.map +1 -0
  185. package/dist/cjs/routing/decorators/patch.decorator.d.ts +3 -1
  186. package/dist/cjs/routing/decorators/patch.decorator.d.ts.map +1 -1
  187. package/dist/cjs/routing/decorators/patch.decorator.js +3 -2
  188. package/dist/cjs/routing/decorators/patch.decorator.js.map +1 -1
  189. package/dist/cjs/routing/decorators/post.decorator.d.ts +3 -1
  190. package/dist/cjs/routing/decorators/post.decorator.d.ts.map +1 -1
  191. package/dist/cjs/routing/decorators/post.decorator.js +3 -2
  192. package/dist/cjs/routing/decorators/post.decorator.js.map +1 -1
  193. package/dist/cjs/routing/resolve-route-params.function.js +1 -0
  194. package/dist/cjs/routing/resolve-route-params.function.js.map +1 -1
  195. package/dist/cjs/routing/route-configuration.model.d.ts +11 -1
  196. package/dist/cjs/routing/route-configuration.model.d.ts.map +1 -1
  197. package/dist/cjs/routing/router.d.ts +6 -2
  198. package/dist/cjs/routing/router.d.ts.map +1 -1
  199. package/dist/cjs/routing/router.js +173 -88
  200. package/dist/cjs/routing/router.js.map +1 -1
  201. package/dist/cjs/utilities/fs.utilities.d.ts +1 -1
  202. package/dist/cjs/utilities/fs.utilities.js +1 -1
  203. package/dist/cjs/utilities/sem-ver.utilities.d.ts +46 -0
  204. package/dist/cjs/utilities/sem-ver.utilities.d.ts.map +1 -0
  205. package/dist/cjs/utilities/sem-ver.utilities.js +204 -0
  206. package/dist/cjs/utilities/sem-ver.utilities.js.map +1 -0
  207. package/dist/cjs/utilities/uuid.utilities.js +2 -2
  208. package/dist/cjs/utilities/uuid.utilities.js.map +1 -1
  209. package/dist/cjs/versioning/route-with-version-data.model.d.ts +15 -0
  210. package/dist/cjs/versioning/route-with-version-data.model.d.ts.map +1 -0
  211. package/dist/cjs/versioning/route-with-version-data.model.js +3 -0
  212. package/dist/cjs/versioning/route-with-version-data.model.js.map +1 -0
  213. package/dist/cjs/versioning/supported-versions-options.model.d.ts +17 -0
  214. package/dist/cjs/versioning/supported-versions-options.model.d.ts.map +1 -0
  215. package/dist/cjs/versioning/supported-versions-options.model.js +3 -0
  216. package/dist/cjs/versioning/supported-versions-options.model.js.map +1 -0
  217. package/dist/cjs/versioning/version.model.d.ts +29 -0
  218. package/dist/cjs/versioning/version.model.d.ts.map +1 -0
  219. package/dist/{esm/types/version.type.js → cjs/versioning/version.model.js} +1 -1
  220. package/dist/cjs/versioning/version.model.js.map +1 -0
  221. package/dist/cjs/versioning/versioning-service.interface.d.ts +31 -0
  222. package/dist/cjs/versioning/versioning-service.interface.d.ts.map +1 -0
  223. package/dist/cjs/versioning/versioning-service.interface.js +3 -0
  224. package/dist/cjs/versioning/versioning-service.interface.js.map +1 -0
  225. package/dist/cjs/versioning/versioning.service.d.ts +41 -0
  226. package/dist/cjs/versioning/versioning.service.d.ts.map +1 -0
  227. package/dist/cjs/versioning/versioning.service.js +366 -0
  228. package/dist/cjs/versioning/versioning.service.js.map +1 -0
  229. package/dist/cjs/websocket/decorators/websocket-controller.decorator.d.ts +10 -0
  230. package/dist/cjs/websocket/decorators/websocket-controller.decorator.d.ts.map +1 -1
  231. package/dist/cjs/websocket/decorators/websocket-controller.decorator.js +2 -2
  232. package/dist/cjs/websocket/decorators/websocket-controller.decorator.js.map +1 -1
  233. package/dist/cjs/websocket/decorators/websocket-route.decorator.d.ts +13 -1
  234. package/dist/cjs/websocket/decorators/websocket-route.decorator.d.ts.map +1 -1
  235. package/dist/cjs/websocket/decorators/websocket-route.decorator.js +3 -2
  236. package/dist/cjs/websocket/decorators/websocket-route.decorator.js.map +1 -1
  237. package/dist/cjs/websocket/models/connection/base-websocket-connection.model.d.ts +5 -0
  238. package/dist/cjs/websocket/models/connection/base-websocket-connection.model.d.ts.map +1 -1
  239. package/dist/cjs/websocket/models/connection/socket-io-websocket-connection.model.d.ts +3 -1
  240. package/dist/cjs/websocket/models/connection/socket-io-websocket-connection.model.d.ts.map +1 -1
  241. package/dist/cjs/websocket/models/connection/socket-io-websocket-connection.model.js +3 -1
  242. package/dist/cjs/websocket/models/connection/socket-io-websocket-connection.model.js.map +1 -1
  243. package/dist/cjs/websocket/models/websocket-controller-route-configuration.model.d.ts +6 -0
  244. package/dist/cjs/websocket/models/websocket-controller-route-configuration.model.d.ts.map +1 -1
  245. package/dist/cjs/websocket/models/websocket-message.model.d.ts +2 -2
  246. package/dist/cjs/websocket/models/websocket-message.model.d.ts.map +1 -1
  247. package/dist/cjs/websocket/models/websocket-message.model.js.map +1 -1
  248. package/dist/cjs/websocket/models/websocket-request.model.d.ts +3 -3
  249. package/dist/cjs/websocket/models/websocket-request.model.d.ts.map +1 -1
  250. package/dist/cjs/websocket/models/websocket-request.model.js +1 -1
  251. package/dist/cjs/websocket/models/websocket-request.model.js.map +1 -1
  252. package/dist/cjs/websocket/services/websocket.service.d.ts +6 -4
  253. package/dist/cjs/websocket/services/websocket.service.d.ts.map +1 -1
  254. package/dist/cjs/websocket/services/websocket.service.js +121 -33
  255. package/dist/cjs/websocket/services/websocket.service.js.map +1 -1
  256. package/dist/esm/application.js +0 -1
  257. package/dist/esm/application.js.map +1 -1
  258. package/dist/esm/assets/asset.service.js +3 -1
  259. package/dist/esm/assets/asset.service.js.map +1 -1
  260. package/dist/esm/auth/2fa/methods/otp/otp-credentials.model.js.map +1 -1
  261. package/dist/esm/auth/2fa/methods/otp/otp.two-factor-method.js +1 -1
  262. package/dist/esm/auth/2fa/methods/otp/otp.two-factor-method.js.map +1 -1
  263. package/dist/esm/auth/strategies/cookie/cookie-auth.controller.js +1 -1
  264. package/dist/esm/auth/strategies/cookie/cookie-auth.controller.js.map +1 -1
  265. package/dist/esm/auth/strategies/jwt/jwt-auth.controller.js +1 -1
  266. package/dist/esm/auth/strategies/jwt/jwt-auth.controller.js.map +1 -1
  267. package/dist/esm/auth/strategies/jwt/jwt.auth-strategy.js +1 -1
  268. package/dist/esm/auth/strategies/jwt/jwt.auth-strategy.js.map +1 -1
  269. package/dist/esm/backup/backup-resource-entity.model.js.map +1 -1
  270. package/dist/esm/change-sets/models/change-set.model.js +1 -1
  271. package/dist/esm/change-sets/models/change-set.model.js.map +1 -1
  272. package/dist/esm/change-sets/models/change.model.js.map +1 -1
  273. package/dist/esm/context/cache/cache.context.js +2 -2
  274. package/dist/esm/context/cache/cache.context.js.map +1 -1
  275. package/dist/esm/context/request/request-context-token.model.js +1 -1
  276. package/dist/esm/context/request/request-context-token.model.js.map +1 -1
  277. package/dist/esm/cron/cron-job-entity.model.js.map +1 -1
  278. package/dist/esm/data-source/data-sources/postgres-typeorm-data-source.model.js +9 -0
  279. package/dist/esm/data-source/data-sources/postgres-typeorm-data-source.model.js.map +1 -1
  280. package/dist/esm/data-source/data-sources/typeorm-base-data-source.model.js +3 -3
  281. package/dist/esm/data-source/data-sources/typeorm-base-data-source.model.js.map +1 -1
  282. package/dist/esm/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.js +20 -0
  283. package/dist/esm/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.js.map +1 -1
  284. package/dist/esm/data-source/data-sources/where-converter/typeorm-where-filter.converter.js +3 -1
  285. package/dist/esm/data-source/data-sources/where-converter/typeorm-where-filter.converter.js.map +1 -1
  286. package/dist/esm/data-source/migration/migration-entity.model.js.map +1 -1
  287. package/dist/esm/data-source/models/where/where-filter-keys.model.js +3 -0
  288. package/dist/esm/data-source/models/where/where-filter-keys.model.js.map +1 -1
  289. package/dist/esm/di/default/zibri-di-providers.default.js +4 -0
  290. package/dist/esm/di/default/zibri-di-providers.default.js.map +1 -1
  291. package/dist/esm/di/default/zibri-di-tokens.default.js +2 -0
  292. package/dist/esm/di/default/zibri-di-tokens.default.js.map +1 -1
  293. package/dist/esm/email/email.service.js +4 -4
  294. package/dist/esm/email/email.service.js.map +1 -1
  295. package/dist/esm/email/models/email.model.js +4 -4
  296. package/dist/esm/email/models/email.model.js.map +1 -1
  297. package/dist/esm/entity/generation/generate-entity-file.function.js +1 -1
  298. package/dist/esm/entity/generation/generate-entity-file.function.js.map +1 -1
  299. package/dist/esm/event/event-subscriber-run.model.js +1 -1
  300. package/dist/esm/event/event-subscriber-run.model.js.map +1 -1
  301. package/dist/esm/http/known-header.enum.js +1 -0
  302. package/dist/esm/http/known-header.enum.js.map +1 -1
  303. package/dist/esm/http-client/http-client.js.map +1 -1
  304. package/dist/esm/index.js +8 -3
  305. package/dist/esm/index.js.map +1 -1
  306. package/dist/esm/localization/formatting/format-price.function.js.map +1 -1
  307. package/dist/esm/logging/log-context.model.js +6 -6
  308. package/dist/esm/logging/log-context.model.js.map +1 -1
  309. package/dist/esm/logging/logger.js +1 -1
  310. package/dist/esm/logging/logger.js.map +1 -1
  311. package/dist/esm/multithreading/models/thread-job-entity.model.js +4 -4
  312. package/dist/esm/multithreading/models/thread-job-entity.model.js.map +1 -1
  313. package/dist/esm/multithreading/services/thread-job.js.map +1 -1
  314. package/dist/esm/open-api/open-api.service.js +256 -139
  315. package/dist/esm/open-api/open-api.service.js.map +1 -1
  316. package/dist/esm/parsing/html/csp-options.model.js.map +1 -1
  317. package/dist/esm/parsing/parser.js +3 -3
  318. package/dist/esm/parsing/parser.js.map +1 -1
  319. package/dist/esm/plugin/invoicing/models/invoice-address.model.js +2 -2
  320. package/dist/esm/plugin/invoicing/models/invoice-address.model.js.map +1 -1
  321. package/dist/esm/plugin/invoicing/models/vat.model.js +1 -1
  322. package/dist/esm/plugin/invoicing/models/vat.model.js.map +1 -1
  323. package/dist/esm/plugin/mailing-list/mailing-list.controller.js +1 -1
  324. package/dist/esm/plugin/mailing-list/mailing-list.controller.js.map +1 -1
  325. package/dist/esm/plugin/mailing-list/models/mailing-list-subscriber.model.js +1 -1
  326. package/dist/esm/plugin/mailing-list/models/mailing-list-subscriber.model.js.map +1 -1
  327. package/dist/esm/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.js +1 -1
  328. package/dist/esm/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.js.map +1 -1
  329. package/dist/esm/plugin/payment/models/payment.model.js +1 -1
  330. package/dist/esm/plugin/payment/models/payment.model.js.map +1 -1
  331. package/dist/esm/plugin/payment/providers/pay-pal/pay-pal-client.js +17 -17
  332. package/dist/esm/plugin/payment/providers/pay-pal/pay-pal-client.js.map +1 -1
  333. package/dist/esm/plugin/payment/providers/pay-pal/pay-pal.payment-provider.js +1 -1
  334. package/dist/esm/plugin/payment/providers/pay-pal/pay-pal.payment-provider.js.map +1 -1
  335. package/dist/esm/preact/preact.utilities.js +1 -1
  336. package/dist/esm/preact/preact.utilities.js.map +1 -1
  337. package/dist/esm/preact/validate-email-templates.function.js +1 -1
  338. package/dist/esm/preact/validate-email-templates.function.js.map +1 -1
  339. package/dist/esm/rate-limiting/rate-limiter.js +22 -12
  340. package/dist/esm/rate-limiting/rate-limiter.js.map +1 -1
  341. package/dist/esm/routing/decorators/controller.decorator.js +3 -2
  342. package/dist/esm/routing/decorators/controller.decorator.js.map +1 -1
  343. package/dist/esm/routing/decorators/create-http-decorator.function.js +2 -2
  344. package/dist/esm/routing/decorators/create-http-decorator.function.js.map +1 -1
  345. package/dist/esm/routing/decorators/delete.decorator.js +3 -2
  346. package/dist/esm/routing/decorators/delete.decorator.js.map +1 -1
  347. package/dist/esm/routing/decorators/get.decorator.js +3 -2
  348. package/dist/esm/routing/decorators/get.decorator.js.map +1 -1
  349. package/dist/esm/routing/decorators/http-decorator-option-input.model.js +3 -0
  350. package/dist/esm/routing/decorators/http-decorator-option-input.model.js.map +1 -0
  351. package/dist/esm/routing/decorators/patch.decorator.js +3 -2
  352. package/dist/esm/routing/decorators/patch.decorator.js.map +1 -1
  353. package/dist/esm/routing/decorators/post.decorator.js +3 -2
  354. package/dist/esm/routing/decorators/post.decorator.js.map +1 -1
  355. package/dist/esm/routing/resolve-route-params.function.js +1 -0
  356. package/dist/esm/routing/resolve-route-params.function.js.map +1 -1
  357. package/dist/esm/routing/router.js +173 -88
  358. package/dist/esm/routing/router.js.map +1 -1
  359. package/dist/esm/utilities/fs.utilities.js +1 -1
  360. package/dist/esm/utilities/sem-ver.utilities.js +204 -0
  361. package/dist/esm/utilities/sem-ver.utilities.js.map +1 -0
  362. package/dist/esm/utilities/uuid.utilities.js +2 -2
  363. package/dist/esm/utilities/uuid.utilities.js.map +1 -1
  364. package/dist/esm/versioning/route-with-version-data.model.js +3 -0
  365. package/dist/esm/versioning/route-with-version-data.model.js.map +1 -0
  366. package/dist/esm/versioning/supported-versions-options.model.js +3 -0
  367. package/dist/esm/versioning/supported-versions-options.model.js.map +1 -0
  368. package/dist/{cjs/types/version.type.js → esm/versioning/version.model.js} +1 -1
  369. package/dist/esm/versioning/version.model.js.map +1 -0
  370. package/dist/esm/versioning/versioning-service.interface.js +3 -0
  371. package/dist/esm/versioning/versioning-service.interface.js.map +1 -0
  372. package/dist/esm/versioning/versioning.service.js +366 -0
  373. package/dist/esm/versioning/versioning.service.js.map +1 -0
  374. package/dist/esm/websocket/decorators/websocket-controller.decorator.js +2 -2
  375. package/dist/esm/websocket/decorators/websocket-controller.decorator.js.map +1 -1
  376. package/dist/esm/websocket/decorators/websocket-route.decorator.js +3 -2
  377. package/dist/esm/websocket/decorators/websocket-route.decorator.js.map +1 -1
  378. package/dist/esm/websocket/models/connection/socket-io-websocket-connection.model.js +3 -1
  379. package/dist/esm/websocket/models/connection/socket-io-websocket-connection.model.js.map +1 -1
  380. package/dist/esm/websocket/models/websocket-message.model.js.map +1 -1
  381. package/dist/esm/websocket/models/websocket-request.model.js +1 -1
  382. package/dist/esm/websocket/models/websocket-request.model.js.map +1 -1
  383. package/dist/esm/websocket/services/websocket.service.js +121 -33
  384. package/dist/esm/websocket/services/websocket.service.js.map +1 -1
  385. package/package.json +17 -19
  386. package/src/__testing__/test-server/providers.ts +25 -1
  387. package/src/__testing__/test-server/start-test-server.function.ts +76 -8
  388. package/src/application-options.model.ts +2 -2
  389. package/src/application.ts +0 -1
  390. package/src/assets/asset.service.ts +3 -1
  391. package/src/auth/2fa/methods/otp/otp-credentials.model.ts +1 -1
  392. package/src/auth/2fa/methods/otp/otp.two-factor-method.ts +1 -1
  393. package/src/auth/strategies/cookie/cookie-auth.controller.ts +1 -1
  394. package/src/auth/strategies/jwt/jwt-auth.controller.ts +1 -1
  395. package/src/auth/strategies/jwt/jwt.auth-strategy.ts +1 -1
  396. package/src/backup/backup-resource-entity.model.ts +1 -1
  397. package/src/backup/backup-service.test.ts +2 -1
  398. package/src/change-sets/models/change-set.model.ts +1 -1
  399. package/src/change-sets/models/change.model.ts +2 -2
  400. package/src/context/cache/cache.context.ts +2 -2
  401. package/src/context/request/request-context-token.model.ts +1 -1
  402. package/src/cron/cron-job-entity.model.ts +2 -2
  403. package/src/data-source/data-sources/postgres-typeorm-data-source.model.ts +10 -0
  404. package/src/data-source/data-sources/typeorm-base-data-source.model.ts +4 -5
  405. package/src/data-source/data-sources/where-converter/postgres-typeorm-where-filter.converter.ts +35 -2
  406. package/src/data-source/data-sources/where-converter/typeorm-where-filter.converter.ts +14 -1
  407. package/src/data-source/hooks/hooks.test.ts +1 -1
  408. package/src/data-source/migration/migration-entity.model.ts +2 -2
  409. package/src/data-source/migration/migration.model.ts +2 -2
  410. package/src/data-source/migration/migration.test.ts +2 -2
  411. package/src/data-source/models/where/date-where-filter.model.ts +11 -3
  412. package/src/data-source/models/where/string-where-filter.model.ts +18 -1
  413. package/src/data-source/models/where/where-filter-keys.model.ts +3 -0
  414. package/src/data-source/nested-where-filter.test.ts +8 -3
  415. package/src/data-source/repository.test.ts +2 -2
  416. package/src/data-source/where-filter.test.ts +17 -7
  417. package/src/di/default/zibri-di-providers.default.ts +4 -0
  418. package/src/di/default/zibri-di-tokens.default.ts +3 -0
  419. package/src/email/email.service.ts +5 -5
  420. package/src/email/models/email.model.ts +4 -4
  421. package/src/entity/generation/generate-entity-file.function.ts +1 -1
  422. package/src/event/event-subscriber-run.model.ts +1 -1
  423. package/src/global/global-registry.ts +2 -2
  424. package/src/http/http-request.model.ts +2 -2
  425. package/src/http/known-header.enum.ts +1 -0
  426. package/src/http-client/http-client.ts +0 -1
  427. package/src/index.ts +9 -3
  428. package/src/localization/formatting/format-price.function.ts +2 -3
  429. package/src/logging/log-context.model.ts +6 -6
  430. package/src/logging/logger.ts +1 -1
  431. package/src/multithreading/models/thread-job-entity.model.ts +5 -5
  432. package/src/multithreading/services/thread-job.ts +4 -4
  433. package/src/open-api/open-api-service.interface.ts +2 -1
  434. package/src/open-api/open-api.service.ts +263 -141
  435. package/src/parsing/html/csp-options.model.ts +3 -0
  436. package/src/parsing/parser.ts +3 -3
  437. package/src/plugin/invoicing/models/invoice-address.model.ts +2 -2
  438. package/src/plugin/invoicing/models/vat.model.ts +1 -1
  439. package/src/plugin/mailing-list/mailing-list.controller.ts +1 -1
  440. package/src/plugin/mailing-list/models/mailing-list-subscriber.model.ts +1 -1
  441. package/src/plugin/mailing-list/models/mailing-list-subscription-confirmation-token.model.ts +1 -1
  442. package/src/plugin/payment/models/payment.model.ts +2 -2
  443. package/src/plugin/payment/providers/pay-pal/pay-pal-client.ts +17 -17
  444. package/src/plugin/payment/providers/pay-pal/pay-pal.payment-provider.test.ts +1 -1
  445. package/src/plugin/payment/providers/pay-pal/pay-pal.payment-provider.ts +1 -1
  446. package/src/preact/preact.utilities.ts +1 -1
  447. package/src/preact/validate-email-templates.function.ts +1 -1
  448. package/src/rate-limiting/rate-limiter.ts +23 -12
  449. package/src/routing/controller-route-configuration.model.ts +6 -1
  450. package/src/routing/decorators/controller.decorator.ts +8 -2
  451. package/src/routing/decorators/create-http-decorator.function.ts +3 -2
  452. package/src/routing/decorators/delete.decorator.ts +4 -2
  453. package/src/routing/decorators/get.decorator.ts +4 -2
  454. package/src/routing/decorators/http-decorator-option-input.model.ts +11 -0
  455. package/src/routing/decorators/patch.decorator.ts +4 -2
  456. package/src/routing/decorators/post.decorator.ts +4 -2
  457. package/src/routing/resolve-route-params.function.ts +1 -0
  458. package/src/routing/route-configuration.model.ts +13 -3
  459. package/src/routing/router.ts +265 -134
  460. package/src/utilities/fs.utilities.ts +1 -1
  461. package/src/utilities/sem-ver.utilities.ts +270 -0
  462. package/src/utilities/uuid.utilities.ts +2 -2
  463. package/src/versioning/route-with-version-data.model.ts +15 -0
  464. package/src/versioning/supported-versions-options.model.ts +25 -0
  465. package/src/versioning/version.model.ts +30 -0
  466. package/src/versioning/versioning-service.interface.ts +39 -0
  467. package/src/versioning/versioning-websocket.test.ts +351 -0
  468. package/src/versioning/versioning.service.test.ts +582 -0
  469. package/src/versioning/versioning.service.ts +496 -0
  470. package/src/websocket/decorators/websocket-controller.decorator.ts +13 -3
  471. package/src/websocket/decorators/websocket-route.decorator.ts +15 -2
  472. package/src/websocket/models/connection/base-websocket-connection.model.ts +6 -0
  473. package/src/websocket/models/connection/socket-io-websocket-connection.model.ts +8 -1
  474. package/src/websocket/models/websocket-controller-route-configuration.model.ts +8 -1
  475. package/src/websocket/models/websocket-message.model.ts +2 -2
  476. package/src/websocket/models/websocket-request.model.ts +4 -3
  477. package/src/websocket/services/websocket.service.ts +143 -38
  478. package/dist/cjs/types/version.type.d.ts +0 -5
  479. package/dist/cjs/types/version.type.d.ts.map +0 -1
  480. package/dist/cjs/types/version.type.js.map +0 -1
  481. package/dist/cjs/utilities/compare-versions.function.d.ts +0 -9
  482. package/dist/cjs/utilities/compare-versions.function.d.ts.map +0 -1
  483. package/dist/cjs/utilities/compare-versions.function.js +0 -33
  484. package/dist/cjs/utilities/compare-versions.function.js.map +0 -1
  485. package/dist/cjs/utilities/is-version.function.d.ts +0 -7
  486. package/dist/cjs/utilities/is-version.function.d.ts.map +0 -1
  487. package/dist/cjs/utilities/is-version.function.js +0 -18
  488. package/dist/cjs/utilities/is-version.function.js.map +0 -1
  489. package/dist/esm/types/version.type.js.map +0 -1
  490. package/dist/esm/utilities/compare-versions.function.js +0 -33
  491. package/dist/esm/utilities/compare-versions.function.js.map +0 -1
  492. package/dist/esm/utilities/is-version.function.js +0 -18
  493. package/dist/esm/utilities/is-version.function.js.map +0 -1
  494. package/src/types/version.type.ts +0 -4
  495. package/src/utilities/compare-versions.function.ts +0 -33
  496. package/src/utilities/is-version.function.ts +0 -16
@@ -1,3 +1,5 @@
1
+ import assert from 'node:assert';
2
+
1
3
  import { Server, Socket } from 'socket.io';
2
4
 
3
5
  import { WebsocketSendData, WebsocketSendDataMessage, WebsocketSendToAllData, WebsocketSendToChannelData, WebsocketServiceInterface } from './websocket-service.interface';
@@ -17,6 +19,7 @@ import { toHttpError } from '../../error-handling/error-handler';
17
19
  import { BadRequestError } from '../../error-handling/errors/bad-request.error';
18
20
  import { HttpError, isHttpError } from '../../error-handling/errors/http.error';
19
21
  import { NotFoundError } from '../../error-handling/errors/not-found.error';
22
+ import { UnauthorizedError } from '../../error-handling/errors/unauthorized.error';
20
23
  import { isError } from '../../error-handling/is-error.function';
21
24
  import { BeforeAppShutdown } from '../../global/before-app-shutdown.interface';
22
25
  import { GlobalRegistry } from '../../global/global-registry';
@@ -24,13 +27,17 @@ import { OnAppInit } from '../../global/on-app-init.interface';
24
27
  import { HttpStatus } from '../../http/http-status.enum';
25
28
  import { KnownHeader } from '../../http/known-header.enum';
26
29
  import { type LoggerInterface } from '../../logging/logger.interface';
27
- import { type ParserInterface } from '../../parsing/parser.interface';
28
30
  import { resolveRouteParams } from '../../routing/resolve-route-params.function';
29
31
  import { Newable } from '../../types/newable.type';
30
32
  import { JsonUtilities } from '../../utilities/json.utilities';
31
33
  import { MetadataUtilities } from '../../utilities/metadata.utilities';
34
+ import { SemVerVersion } from '../../utilities/sem-ver.utilities';
32
35
  import { UUIDUtilities } from '../../utilities/uuid.utilities';
33
36
  import { type ValidationServiceInterface } from '../../validation/validation-service.interface';
37
+ import { RouteWithVersionData } from '../../versioning/route-with-version-data.model';
38
+ import { SupportedVersionsOptions } from '../../versioning/supported-versions-options.model';
39
+ import { Version } from '../../versioning/version.model';
40
+ import { type VersioningServiceInterface } from '../../versioning/versioning-service.interface';
34
41
  import { WebsocketControllerData } from '../decorators/websocket-controller.decorator';
35
42
  import { SocketIOWebsocketConnection } from '../models/connection/socket-io-websocket-connection.model';
36
43
  import { WebsocketChannel } from '../models/websocket-channel.model';
@@ -57,17 +64,25 @@ type SocketIOWebsocketHandler = (
57
64
  @Injectable({ register: 'onUse' })
58
65
  export class WebsocketService implements WebsocketServiceInterface<SocketIOWebsocketConnection>, OnAppInit, BeforeAppShutdown {
59
66
  private socketServer!: Server;
67
+ private readonly allEventRoutes: RouteWithVersionData[] = [];
60
68
  private readonly websocketHandlers: Record<string, SocketIOWebsocketHandler | undefined> = {};
61
69
  private readonly websocketChannels: Record<string, SocketIOWebsocketConnection[] | undefined> = {};
62
70
  private readonly connections: SocketIOWebsocketConnection[] = [];
63
71
 
72
+ private readonly pendingRouteGroups: Map<string, {
73
+ // eslint-disable-next-line jsdoc/require-jsdoc
74
+ entries: { versions: SupportedVersionsOptions, innerHandler: SocketIOWebsocketHandler }[]
75
+ }> = new Map();
76
+
77
+ private get versioningService(): VersioningServiceInterface {
78
+ return inject(ZIBRI_DI_TOKENS.VERSIONING_SERVICE);
79
+ }
80
+
64
81
  constructor(
65
82
  @Inject(ZIBRI_DI_TOKENS.LOGGER)
66
83
  private readonly logger: LoggerInterface,
67
84
  @Inject(ZIBRI_DI_TOKENS.AUTH_SERVICE)
68
85
  private readonly authService: AuthServiceInterface,
69
- @Inject(ZIBRI_DI_TOKENS.PARSER)
70
- private readonly parser: ParserInterface,
71
86
  @Inject(ZIBRI_DI_TOKENS.VALIDATION_SERVICE)
72
87
  private readonly validationService: ValidationServiceInterface,
73
88
  @InjectRepository(WebsocketChannel)
@@ -92,7 +107,44 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
92
107
  }
93
108
  this.checkForOrphanedControllers(app.options.websocketControllers);
94
109
 
95
- this.socketServer.on('connection', socket => this.onConnect(socket));
110
+ for (const [event, group] of this.pendingRouteGroups.entries()) {
111
+ this.websocketHandlers[event] = this.createDispatchHandler(group.entries);
112
+ await this.logger.debug(`- mounting websocket event "${event}"`);
113
+ }
114
+
115
+ // eslint-disable-next-line typescript/no-misused-promises
116
+ this.socketServer.use(async (socket, next) => {
117
+ const request: WebsocketRequest = {
118
+ headers: socket.handshake.headers as Partial<Record<KnownHeader, string | undefined>>,
119
+ body: undefined,
120
+ query: socket.handshake.query as Partial<Record<string, string | undefined>>,
121
+ params: {}
122
+ };
123
+ const context: WebsocketRequestContext = new WebsocketRequestContext(request, undefined, undefined, undefined);
124
+
125
+ const currentUser: BaseUser<string> | undefined = await this.authService.getCurrentUser(
126
+ context,
127
+ this.authService.strategies,
128
+ false
129
+ );
130
+ if (!await this.options.isAllowedToConnect(currentUser)) {
131
+ next(new UnauthorizedError('Not allowed to connect'));
132
+ return;
133
+ }
134
+
135
+ try {
136
+ const version: Version = await this.versioningService.resolveVersion(context);
137
+ // eslint-disable-next-line typescript/no-unsafe-member-access
138
+ socket.data.resolvedVersion = version;
139
+ // eslint-disable-next-line typescript/no-unsafe-member-access
140
+ socket.data.currentUser = currentUser;
141
+ next();
142
+ }
143
+ catch (error) {
144
+ next(error instanceof Error ? error : new Error('Could not resolve version', { cause: error }));
145
+ }
146
+ });
147
+ this.socketServer.on('connection', async socket => await this.onConnect(socket));
96
148
  }
97
149
 
98
150
  // eslint-disable-next-line jsdoc/require-jsdoc
@@ -101,26 +153,12 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
101
153
  }
102
154
 
103
155
  private async onConnect(socket: Socket): Promise<void> {
104
- const request: WebsocketRequest = {
105
- headers: socket.handshake.headers as Partial<Record<KnownHeader, string | undefined>>,
106
- body: undefined,
107
- query: socket.handshake.query as Partial<Record<string, string | undefined>>,
108
- params: {}
109
- };
110
- let connection: SocketIOWebsocketConnection | undefined = this.connections.find(c => c.id === socket.id);
111
-
112
- const context: WebsocketRequestContext = new WebsocketRequestContext(request, connection, undefined, undefined);
113
- const currentUser: BaseUser<string> | undefined = await this.authService.getCurrentUser(
114
- context,
115
- this.authService.strategies,
116
- false
117
- );
156
+ // eslint-disable-next-line typescript/no-unsafe-member-access
157
+ const currentUser: BaseUser<string> | undefined = socket.data.currentUser as BaseUser<string> | undefined;
158
+ // eslint-disable-next-line typescript/no-unsafe-member-access
159
+ const resolvedVersion: Version = socket.data.resolvedVersion as Version;
118
160
 
119
- const isAllowedToConnect: boolean = await this.options.isAllowedToConnect(currentUser);
120
- if (!isAllowedToConnect) {
121
- socket.disconnect(true);
122
- return;
123
- }
161
+ let connection: SocketIOWebsocketConnection | undefined = this.connections.find(c => c.id === socket.id);
124
162
 
125
163
  if (connection) {
126
164
  connection.offset = socket.handshake.auth.offset as number;
@@ -128,7 +166,7 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
128
166
  return;
129
167
  }
130
168
 
131
- connection = new SocketIOWebsocketConnection(socket, currentUser?.id);
169
+ connection = new SocketIOWebsocketConnection(socket, currentUser?.id, resolvedVersion);
132
170
  this.connections.push(connection);
133
171
  await this.logger.debug('a user connected');
134
172
 
@@ -284,6 +322,8 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
284
322
  // eslint-disable-next-line jsdoc/require-jsdoc
285
323
  async registerController(controllerClass: Newable<unknown>): Promise<void> {
286
324
  const controllerData: WebsocketControllerData | undefined = MetadataUtilities.getWebsocketControllerData(controllerClass);
325
+ const currentLatest: SemVerVersion | undefined = GlobalRegistry.getAppData('version');
326
+ assert(currentLatest);
287
327
  if (controllerData == undefined) {
288
328
  // eslint-disable-next-line stylistic/max-len
289
329
  throw new Error(`Could not find websocket controller data on class ${controllerClass.name}. Did you forget to decorate it with @WebsocketController?`);
@@ -291,19 +331,44 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
291
331
  const routes: WebsocketControllerRouteConfiguration[] = MetadataUtilities.getWebsocketControllerRoutes(controllerClass);
292
332
 
293
333
  for (const route of routes) {
294
- const handler: SocketIOWebsocketHandler = this.controllerRouteToWebsocketHandler(
295
- controllerClass,
296
- route
334
+ const fullEvent: string = `${controllerData.eventPrefix}${route.event}`;
335
+ const versions: SupportedVersionsOptions = route.versions ?? controllerData.versions;
336
+
337
+ const overlappingRoute: RouteWithVersionData | undefined = this.allEventRoutes.find(
338
+ r => r.key === fullEvent && this.versioningService.hasOverlappingVersions(r.versions, versions, currentLatest)
297
339
  );
298
- if (this.websocketHandlers[route.event]) {
299
- throw new Error(
300
- `The websocket event "${route.event}" has been defined more than once.`,
301
- { cause: controllerClass }
340
+ if (overlappingRoute) {
341
+ const overlappingVersions: SupportedVersionsOptions = this.versioningService.findOverlappingVersions(
342
+ overlappingRoute.versions,
343
+ versions,
344
+ currentLatest
302
345
  );
346
+ if (overlappingVersions === 'all') {
347
+ throw new Error([
348
+ `The websocket event "${fullEvent}"`,
349
+ 'has been defined more than once.',
350
+ '(versions: \'all\' has been used)'
351
+ ].join(' '), { cause: controllerClass });
352
+ }
353
+ throw new Error([
354
+ `The websocket event "${fullEvent}"`,
355
+ `for the ${overlappingVersions.length > 1 ? 'versions' : 'version'} "${overlappingVersions.join(', ')}"`,
356
+ 'has been defined more than once.'
357
+ ].join(' '), { cause: controllerClass });
303
358
  }
304
- await this.logger.debug(`- mounting websocket event "${route.event}"`);
305
359
 
306
- this.websocketHandlers[route.event] = handler;
360
+ this.allEventRoutes.push({ key: fullEvent, versions });
361
+
362
+ const innerHandler: SocketIOWebsocketHandler = this.controllerRouteToWebsocketHandler(controllerClass, route);
363
+ // eslint-disable-next-line typescript/typedef
364
+ const existing = this.pendingRouteGroups.get(fullEvent);
365
+ if (existing) {
366
+ existing.entries.push({ versions, innerHandler });
367
+ }
368
+ else {
369
+ this.pendingRouteGroups.set(fullEvent, { entries: [{ versions, innerHandler }] });
370
+ }
371
+ await this.logger.debug(`- registering websocket event "${fullEvent}"`);
307
372
  }
308
373
  }
309
374
 
@@ -358,7 +423,7 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
358
423
  async sendToChannel<B extends boolean>(
359
424
  data: WebsocketSendToChannelData<B>
360
425
  ): Promise<B extends false ? void : WebsocketRequestWithConnection<SocketIOWebsocketConnection>[]> {
361
- data.expectResponse ??= true as B;
426
+ data.expectResponse ??= false as B;
362
427
  const channel: WebsocketChannel = await this.channelRepository.findById(data.channelId);
363
428
 
364
429
  const message: WebsocketMessage = await this.createWebsocketMessage(
@@ -422,9 +487,9 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
422
487
 
423
488
  // eslint-disable-next-line jsdoc/require-jsdoc
424
489
  async sendToAll<B extends boolean>(
425
- data: WebsocketSendToAllData<B>,
426
- expectResponse: B = true as B
490
+ data: WebsocketSendToAllData<B>
427
491
  ): Promise<B extends false ? void : WebsocketRequestWithConnection<SocketIOWebsocketConnection>[]> {
492
+ data.expectResponse ??= false as B;
428
493
  const message: WebsocketMessage = await this.createWebsocketMessage(
429
494
  data.persist ?? true,
430
495
  data.message.ok
@@ -450,7 +515,7 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
450
515
  return undefined as B extends false ? void : WebsocketRequestWithConnection<SocketIOWebsocketConnection>[];
451
516
  }
452
517
 
453
- if (!expectResponse) {
518
+ if (!data.expectResponse) {
454
519
  this.socketServer.emit(data.event, JsonUtilities.parse(JsonUtilities.stringify(message)));
455
520
  return undefined as B extends false ? void : WebsocketRequestWithConnection<SocketIOWebsocketConnection>[];
456
521
  }
@@ -514,7 +579,9 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
514
579
  }
515
580
  await connection.leave(channel.name);
516
581
 
517
- const foundChannel: SocketIOWebsocketConnection | undefined = this.websocketChannels[channel.name]?.find(c => c.id === channel.id);
582
+ const foundChannel: SocketIOWebsocketConnection | undefined = this.websocketChannels[channel.name]?.find(
583
+ c => c.id === connection.id
584
+ );
518
585
  if (foundChannel) {
519
586
  // eslint-disable-next-line typescript/no-non-null-assertion
520
587
  this.websocketChannels[channel.name]!.splice(this.websocketChannels[channel.name]!.indexOf(foundChannel), 1);
@@ -544,6 +611,44 @@ export class WebsocketService implements WebsocketServiceInterface<SocketIOWebso
544
611
  return foundConnection;
545
612
  }
546
613
 
614
+ private createDispatchHandler(
615
+ // eslint-disable-next-line jsdoc/require-jsdoc
616
+ entries: { versions: SupportedVersionsOptions, innerHandler: SocketIOWebsocketHandler }[]
617
+ ): SocketIOWebsocketHandler {
618
+ return async (connection, req, responseHandler) => {
619
+ try {
620
+ // eslint-disable-next-line typescript/typedef
621
+ const match = entries.find(e => this.versioningService.matchesVersion(e.versions, connection.resolvedVersion));
622
+ if (!match) {
623
+ const error: NotFoundError = new NotFoundError(
624
+ `Could not find handler for websocket event for version "${connection.resolvedVersion.value}"`
625
+ );
626
+ await this.send({
627
+ connection,
628
+ event: WebsocketEvent.RESPONSE,
629
+ message: { ok: false, error, status: error.status, senderUserId: undefined, senderConnectionId: undefined },
630
+ responseHandler,
631
+ expectResponse: true,
632
+ persist: false
633
+ });
634
+ return;
635
+ }
636
+ await match.innerHandler(connection, req, responseHandler);
637
+ }
638
+ catch (error) {
639
+ const err: HttpError = toHttpError(error);
640
+ await this.send({
641
+ connection,
642
+ event: WebsocketEvent.RESPONSE,
643
+ message: { ok: false, error: err, status: err.status, senderUserId: undefined, senderConnectionId: undefined },
644
+ responseHandler,
645
+ expectResponse: true,
646
+ persist: false
647
+ });
648
+ }
649
+ };
650
+ }
651
+
547
652
  private async createWebsocketMessage(
548
653
  persist: boolean,
549
654
  messageData: CreateWebsocketMessageData | WebsocketMessage
@@ -1,5 +0,0 @@
1
- /**
2
- * Definition for a SemVer version.
3
- */
4
- export type Version = `${number}.${number}.${number}`;
5
- //# sourceMappingURL=version.type.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.type.d.ts","sourceRoot":"","sources":["../../../src/types/version.type.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,OAAO,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.type.js","sourceRoot":"","sources":["../../../src/types/version.type.ts"],"names":[],"mappings":""}
@@ -1,9 +0,0 @@
1
- import { Version } from '../types/version.type';
2
- /**
3
- * Compares the given versions and check if the first one is bigger, equal or smaller than the second one.
4
- * @param v1 - The first version.
5
- * @param v2 - The second version to compare against.
6
- * @returns 'bigger', 'equal' or 'smaller'.
7
- */
8
- export declare function compareVersion(v1: Version, v2: Version): 'bigger' | 'equal' | 'smaller';
9
- //# sourceMappingURL=compare-versions.function.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare-versions.function.d.ts","sourceRoot":"","sources":["../../../src/utilities/compare-versions.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAwBvF"}
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compareVersion = compareVersion;
4
- /**
5
- * Compares the given versions and check if the first one is bigger, equal or smaller than the second one.
6
- * @param v1 - The first version.
7
- * @param v2 - The second version to compare against.
8
- * @returns 'bigger', 'equal' or 'smaller'.
9
- */
10
- function compareVersion(v1, v2) {
11
- const [v1One, v1Two, v1Three] = v1;
12
- const [v2One, v2Two, v2Three] = v2;
13
- if (v1One > v2One) {
14
- return 'bigger';
15
- }
16
- if (v1Two > v2Two) {
17
- return 'bigger';
18
- }
19
- if (v1Three > v2Three) {
20
- return 'bigger';
21
- }
22
- if (v2One > v1One) {
23
- return 'smaller';
24
- }
25
- if (v2Two > v1Two) {
26
- return 'smaller';
27
- }
28
- if (v2Three > v1Three) {
29
- return 'smaller';
30
- }
31
- return 'equal';
32
- }
33
- //# sourceMappingURL=compare-versions.function.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare-versions.function.js","sourceRoot":"","sources":["../../../src/utilities/compare-versions.function.ts"],"names":[],"mappings":";;AAQA,wCAwBC;AA9BD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,EAAW,EAAE,EAAW;IACnD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACnC,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -1,7 +0,0 @@
1
- import { Version } from '../types/version.type';
2
- /**
3
- * Checks whether the given value is a valid SemVer Version.
4
- * @param value - The value to check.
5
- */
6
- export declare function isVersion(value: string): value is Version;
7
- //# sourceMappingURL=is-version.function.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-version.function.d.ts","sourceRoot":"","sources":["../../../src/utilities/is-version.function.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,OAAO,CAOzD"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isVersion = isVersion;
4
- const is_numeric_function_1 = require("./is-numeric.function");
5
- // eslint-disable-next-line jsdoc/require-returns
6
- /**
7
- * Checks whether the given value is a valid SemVer Version.
8
- * @param value - The value to check.
9
- */
10
- function isVersion(value) {
11
- const parts = value.split('.');
12
- if (parts.length !== 3) {
13
- return false;
14
- }
15
- const [one, two, three] = parts;
16
- return (0, is_numeric_function_1.isNumeric)(one) && (0, is_numeric_function_1.isNumeric)(two) && (0, is_numeric_function_1.isNumeric)(three);
17
- }
18
- //# sourceMappingURL=is-version.function.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-version.function.js","sourceRoot":"","sources":["../../../src/utilities/is-version.function.ts"],"names":[],"mappings":";;AAQA,8BAOC;AAfD,+DAAkD;AAGlD,iDAAiD;AACjD;;;GAGG;AACH,SAAgB,SAAS,CAAC,KAAa;IACnC,MAAM,KAAK,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IAChC,OAAO,IAAA,+BAAS,EAAC,GAAG,CAAC,IAAI,IAAA,+BAAS,EAAC,GAAG,CAAC,IAAI,IAAA,+BAAS,EAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"version.type.js","sourceRoot":"","sources":["../../../src/types/version.type.ts"],"names":[],"mappings":""}
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compareVersion = compareVersion;
4
- /**
5
- * Compares the given versions and check if the first one is bigger, equal or smaller than the second one.
6
- * @param v1 - The first version.
7
- * @param v2 - The second version to compare against.
8
- * @returns 'bigger', 'equal' or 'smaller'.
9
- */
10
- function compareVersion(v1, v2) {
11
- const [v1One, v1Two, v1Three] = v1;
12
- const [v2One, v2Two, v2Three] = v2;
13
- if (v1One > v2One) {
14
- return 'bigger';
15
- }
16
- if (v1Two > v2Two) {
17
- return 'bigger';
18
- }
19
- if (v1Three > v2Three) {
20
- return 'bigger';
21
- }
22
- if (v2One > v1One) {
23
- return 'smaller';
24
- }
25
- if (v2Two > v1Two) {
26
- return 'smaller';
27
- }
28
- if (v2Three > v1Three) {
29
- return 'smaller';
30
- }
31
- return 'equal';
32
- }
33
- //# sourceMappingURL=compare-versions.function.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compare-versions.function.js","sourceRoot":"","sources":["../../../src/utilities/compare-versions.function.ts"],"names":[],"mappings":";;AAQA,wCAwBC;AA9BD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,EAAW,EAAE,EAAW;IACnD,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACnC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IACnC,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAChB,OAAO,QAAQ,CAAC;IACpB,CAAC;IACD,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,GAAG,KAAK,EAAE,CAAC;QAChB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,GAAG,OAAO,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isVersion = isVersion;
4
- const is_numeric_function_1 = require("./is-numeric.function");
5
- // eslint-disable-next-line jsdoc/require-returns
6
- /**
7
- * Checks whether the given value is a valid SemVer Version.
8
- * @param value - The value to check.
9
- */
10
- function isVersion(value) {
11
- const parts = value.split('.');
12
- if (parts.length !== 3) {
13
- return false;
14
- }
15
- const [one, two, three] = parts;
16
- return (0, is_numeric_function_1.isNumeric)(one) && (0, is_numeric_function_1.isNumeric)(two) && (0, is_numeric_function_1.isNumeric)(three);
17
- }
18
- //# sourceMappingURL=is-version.function.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"is-version.function.js","sourceRoot":"","sources":["../../../src/utilities/is-version.function.ts"],"names":[],"mappings":";;AAQA,8BAOC;AAfD,+DAAkD;AAGlD,iDAAiD;AACjD;;;GAGG;AACH,SAAgB,SAAS,CAAC,KAAa;IACnC,MAAM,KAAK,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IAChC,OAAO,IAAA,+BAAS,EAAC,GAAG,CAAC,IAAI,IAAA,+BAAS,EAAC,GAAG,CAAC,IAAI,IAAA,+BAAS,EAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
@@ -1,4 +0,0 @@
1
- /**
2
- * Definition for a SemVer version.
3
- */
4
- export type Version = `${number}.${number}.${number}`;
@@ -1,33 +0,0 @@
1
- import { Version } from '../types/version.type';
2
-
3
- /**
4
- * Compares the given versions and check if the first one is bigger, equal or smaller than the second one.
5
- * @param v1 - The first version.
6
- * @param v2 - The second version to compare against.
7
- * @returns 'bigger', 'equal' or 'smaller'.
8
- */
9
- export function compareVersion(v1: Version, v2: Version): 'bigger' | 'equal' | 'smaller' {
10
- const [v1One, v1Two, v1Three] = v1;
11
- const [v2One, v2Two, v2Three] = v2;
12
- if (v1One > v2One) {
13
- return 'bigger';
14
- }
15
- if (v1Two > v2Two) {
16
- return 'bigger';
17
- }
18
- if (v1Three > v2Three) {
19
- return 'bigger';
20
- }
21
-
22
- if (v2One > v1One) {
23
- return 'smaller';
24
- }
25
- if (v2Two > v1Two) {
26
- return 'smaller';
27
- }
28
- if (v2Three > v1Three) {
29
- return 'smaller';
30
- }
31
-
32
- return 'equal';
33
- }
@@ -1,16 +0,0 @@
1
- import { isNumeric } from './is-numeric.function';
2
- import { Version } from '../types/version.type';
3
-
4
- // eslint-disable-next-line jsdoc/require-returns
5
- /**
6
- * Checks whether the given value is a valid SemVer Version.
7
- * @param value - The value to check.
8
- */
9
- export function isVersion(value: string): value is Version {
10
- const parts: string[] = value.split('.');
11
- if (parts.length !== 3) {
12
- return false;
13
- }
14
- const [one, two, three] = parts;
15
- return isNumeric(one) && isNumeric(two) && isNumeric(three);
16
- }