@warlock.js/notifications 4.15.0 → 5.0.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 (344) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/cjs/channel_api-CH3DxhRU.cjs +7463 -0
  3. package/cjs/channel_api-CH3DxhRU.cjs.map +1 -0
  4. package/cjs/chunk-fl3r8ClO.cjs +41 -0
  5. package/cjs/index.cjs +34 -4
  6. package/cjs/index.cjs.map +1 -1
  7. package/cjs/rabbitmq-driver-CJtyxjUQ.cjs +3 -0
  8. package/cjs/src-Cus6pYPC.cjs +10981 -0
  9. package/cjs/src-Cus6pYPC.cjs.map +1 -0
  10. package/esm/_virtual/_rolldown/runtime.mjs +32 -0
  11. package/esm/herald/src/communicators/broker-registry.mjs +204 -0
  12. package/esm/herald/src/communicators/broker-registry.mjs.map +1 -0
  13. package/esm/herald/src/communicators/broker.mjs +110 -0
  14. package/esm/herald/src/communicators/broker.mjs.map +1 -0
  15. package/esm/herald/src/communicators/index.mjs +4 -0
  16. package/esm/herald/src/decorators/consumable.mjs +36 -0
  17. package/esm/herald/src/decorators/consumable.mjs.map +1 -0
  18. package/esm/herald/src/decorators/index.mjs +3 -0
  19. package/esm/herald/src/drivers/index.mjs +5 -0
  20. package/esm/herald/src/drivers/rabbitmq/index.mjs +4 -0
  21. package/esm/herald/src/drivers/rabbitmq/rabbitmq-channel.mjs +403 -0
  22. package/esm/herald/src/drivers/rabbitmq/rabbitmq-channel.mjs.map +1 -0
  23. package/esm/herald/src/drivers/rabbitmq/rabbitmq-driver.mjs +303 -0
  24. package/esm/herald/src/drivers/rabbitmq/rabbitmq-driver.mjs.map +1 -0
  25. package/esm/herald/src/index.mjs +16 -0
  26. package/esm/herald/src/message-managers/event-consumer.mjs +76 -0
  27. package/esm/herald/src/message-managers/event-consumer.mjs.map +1 -0
  28. package/esm/herald/src/message-managers/event-message.mjs +85 -0
  29. package/esm/herald/src/message-managers/event-message.mjs.map +1 -0
  30. package/esm/herald/src/message-managers/index.mjs +4 -0
  31. package/esm/herald/src/message-managers/prepare-consumer-subscription.mjs +42 -0
  32. package/esm/herald/src/message-managers/prepare-consumer-subscription.mjs.map +1 -0
  33. package/esm/herald/src/use-case-broadcast.mjs +30 -0
  34. package/esm/herald/src/use-case-broadcast.mjs.map +1 -0
  35. package/esm/herald/src/utils/connect-to-broker.mjs +168 -0
  36. package/esm/herald/src/utils/connect-to-broker.mjs.map +1 -0
  37. package/esm/herald/src/utils/index.mjs +3 -0
  38. package/esm/in-app/base-notifications-repository.d.mts +15 -1
  39. package/esm/in-app/base-notifications-repository.d.mts.map +1 -1
  40. package/esm/in-app/base-notifications-repository.mjs +33 -3
  41. package/esm/in-app/base-notifications-repository.mjs.map +1 -1
  42. package/esm/in-app/in-app.d.mts +3 -3
  43. package/esm/in-app/in-app.d.mts.map +1 -1
  44. package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs +6 -0
  45. package/esm/node_modules/@mongez/reinforcements/esm/Random/_internal.mjs.map +1 -0
  46. package/esm/node_modules/@mongez/reinforcements/esm/Random/bool.mjs +3 -0
  47. package/esm/node_modules/@mongez/reinforcements/esm/Random/color.mjs +3 -0
  48. package/esm/node_modules/@mongez/reinforcements/esm/Random/date.mjs +3 -0
  49. package/esm/node_modules/@mongez/reinforcements/esm/Random/float.mjs +3 -0
  50. package/esm/node_modules/@mongez/reinforcements/esm/Random/id.mjs +3 -0
  51. package/esm/node_modules/@mongez/reinforcements/esm/Random/int.mjs +3 -0
  52. package/esm/node_modules/@mongez/reinforcements/esm/Random/nanoid.mjs +3 -0
  53. package/esm/node_modules/@mongez/reinforcements/esm/Random/pick.mjs +3 -0
  54. package/esm/node_modules/@mongez/reinforcements/esm/Random/random.mjs +16 -0
  55. package/esm/node_modules/@mongez/reinforcements/esm/Random/sample.mjs +3 -0
  56. package/esm/node_modules/@mongez/reinforcements/esm/Random/string.mjs +3 -0
  57. package/esm/node_modules/@mongez/reinforcements/esm/Random/token.mjs +3 -0
  58. package/esm/node_modules/@mongez/reinforcements/esm/Random/uuid.mjs +3 -0
  59. package/esm/node_modules/@mongez/reinforcements/esm/Random/weighted.mjs +3 -0
  60. package/esm/node_modules/@mongez/reinforcements/esm/async/retry.mjs +3 -0
  61. package/esm/node_modules/@mongez/reinforcements/esm/index.mjs +24 -0
  62. package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs +82 -0
  63. package/esm/node_modules/@mongez/reinforcements/esm/mixed/clone/clone.mjs.map +1 -0
  64. package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs +17 -0
  65. package/esm/node_modules/@mongez/reinforcements/esm/number/round.mjs.map +1 -0
  66. package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs +13 -0
  67. package/esm/node_modules/@mongez/reinforcements/esm/object/except.mjs.map +1 -0
  68. package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs +18 -0
  69. package/esm/node_modules/@mongez/reinforcements/esm/object/get.mjs.map +1 -0
  70. package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs +17 -0
  71. package/esm/node_modules/@mongez/reinforcements/esm/object/omit.mjs.map +1 -0
  72. package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs +30 -0
  73. package/esm/node_modules/@mongez/reinforcements/esm/object/unset.mjs.map +1 -0
  74. package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs +19 -0
  75. package/esm/node_modules/@mongez/reinforcements/esm/string/capitalize.mjs.map +1 -0
  76. package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs +18 -0
  77. package/esm/node_modules/@mongez/reinforcements/esm/string/ltrim.mjs.map +1 -0
  78. package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs +14 -0
  79. package/esm/node_modules/@mongez/reinforcements/esm/string/readMoreChars.mjs.map +1 -0
  80. package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs +18 -0
  81. package/esm/node_modules/@mongez/reinforcements/esm/string/rtrim.mjs.map +1 -0
  82. package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs +22 -0
  83. package/esm/node_modules/@mongez/reinforcements/esm/string/toCamelCase.mjs.map +1 -0
  84. package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs +17 -0
  85. package/esm/node_modules/@mongez/reinforcements/esm/string/toKebabCase.mjs.map +1 -0
  86. package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs +21 -0
  87. package/esm/node_modules/@mongez/reinforcements/esm/string/toSnakeCase.mjs.map +1 -0
  88. package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs +21 -0
  89. package/esm/node_modules/@mongez/reinforcements/esm/string/toStudlyCase.mjs.map +1 -0
  90. package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs +20 -0
  91. package/esm/node_modules/@mongez/reinforcements/esm/string/trim.mjs.map +1 -0
  92. package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs +15 -0
  93. package/esm/node_modules/@mongez/reinforcements/esm/string/ucfirst.mjs.map +1 -0
  94. package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs +25 -0
  95. package/esm/node_modules/@mongez/reinforcements/esm/string/words.mjs.map +1 -0
  96. package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs +11 -0
  97. package/esm/node_modules/@mongez/reinforcements/esm/utils/escapeRegex.mjs.map +1 -0
  98. package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs +100 -0
  99. package/esm/node_modules/@mongez/reinforcements/esm/utils/lazy.mjs.map +1 -0
  100. package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs +27 -0
  101. package/esm/node_modules/@mongez/reinforcements/esm/utils/tap.mjs.map +1 -0
  102. package/esm/node_modules/@mongez/supportive-is/esm/index.mjs +353 -0
  103. package/esm/node_modules/@mongez/supportive-is/esm/index.mjs.map +1 -0
  104. package/esm/node_modules/amqplib/channel_api.mjs +28 -0
  105. package/esm/node_modules/amqplib/channel_api.mjs.map +1 -0
  106. package/esm/node_modules/amqplib/lib/api_args.mjs +241 -0
  107. package/esm/node_modules/amqplib/lib/api_args.mjs.map +1 -0
  108. package/esm/node_modules/amqplib/lib/bitset.mjs +130 -0
  109. package/esm/node_modules/amqplib/lib/bitset.mjs.map +1 -0
  110. package/esm/node_modules/amqplib/lib/channel.mjs +302 -0
  111. package/esm/node_modules/amqplib/lib/channel.mjs.map +1 -0
  112. package/esm/node_modules/amqplib/lib/channel_model.mjs +206 -0
  113. package/esm/node_modules/amqplib/lib/channel_model.mjs.map +1 -0
  114. package/esm/node_modules/amqplib/lib/codec.mjs +273 -0
  115. package/esm/node_modules/amqplib/lib/codec.mjs.map +1 -0
  116. package/esm/node_modules/amqplib/lib/connect.mjs +143 -0
  117. package/esm/node_modules/amqplib/lib/connect.mjs.map +1 -0
  118. package/esm/node_modules/amqplib/lib/connection.mjs +416 -0
  119. package/esm/node_modules/amqplib/lib/connection.mjs.map +1 -0
  120. package/esm/node_modules/amqplib/lib/credentials.mjs +50 -0
  121. package/esm/node_modules/amqplib/lib/credentials.mjs.map +1 -0
  122. package/esm/node_modules/amqplib/lib/defs.mjs +4600 -0
  123. package/esm/node_modules/amqplib/lib/defs.mjs.map +1 -0
  124. package/esm/node_modules/amqplib/lib/error.mjs +29 -0
  125. package/esm/node_modules/amqplib/lib/error.mjs.map +1 -0
  126. package/esm/node_modules/amqplib/lib/format.mjs +28 -0
  127. package/esm/node_modules/amqplib/lib/format.mjs.map +1 -0
  128. package/esm/node_modules/amqplib/lib/frame.mjs +130 -0
  129. package/esm/node_modules/amqplib/lib/frame.mjs.map +1 -0
  130. package/esm/node_modules/amqplib/lib/heartbeat.mjs +40 -0
  131. package/esm/node_modules/amqplib/lib/heartbeat.mjs.map +1 -0
  132. package/esm/node_modules/amqplib/lib/mux.mjs +86 -0
  133. package/esm/node_modules/amqplib/lib/mux.mjs.map +1 -0
  134. package/esm/node_modules/amqplib/package.mjs +41 -0
  135. package/esm/node_modules/amqplib/package.mjs.map +1 -0
  136. package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs +360 -0
  137. package/esm/node_modules/buffer-more-ints/buffer-more-ints.mjs.map +1 -0
  138. package/esm/node_modules/dayjs/dayjs.min.mjs +305 -0
  139. package/esm/node_modules/dayjs/dayjs.min.mjs.map +1 -0
  140. package/esm/node_modules/querystringify/index.mjs +80 -0
  141. package/esm/node_modules/querystringify/index.mjs.map +1 -0
  142. package/esm/node_modules/requires-port/index.mjs +35 -0
  143. package/esm/node_modules/requires-port/index.mjs.map +1 -0
  144. package/esm/node_modules/url-parse/index.mjs +388 -0
  145. package/esm/node_modules/url-parse/index.mjs.map +1 -0
  146. package/esm/queue/load-herald.mjs +1 -1
  147. package/esm/seal/src/config.mjs +15 -0
  148. package/esm/seal/src/config.mjs.map +1 -0
  149. package/esm/seal/src/factory/index.mjs +4 -0
  150. package/esm/seal/src/factory/validate.mjs +34 -0
  151. package/esm/seal/src/factory/validate.mjs.map +1 -0
  152. package/esm/seal/src/factory/validators.mjs +132 -0
  153. package/esm/seal/src/factory/validators.mjs.map +1 -0
  154. package/esm/seal/src/helpers/date-helpers.mjs +24 -0
  155. package/esm/seal/src/helpers/date-helpers.mjs.map +1 -0
  156. package/esm/seal/src/helpers/get-field-value.mjs +46 -0
  157. package/esm/seal/src/helpers/get-field-value.mjs.map +1 -0
  158. package/esm/seal/src/helpers/index.mjs +6 -0
  159. package/esm/seal/src/helpers/is-empty-value.mjs +10 -0
  160. package/esm/seal/src/helpers/is-empty-value.mjs.map +1 -0
  161. package/esm/seal/src/helpers/path-helpers.mjs +12 -0
  162. package/esm/seal/src/helpers/path-helpers.mjs.map +1 -0
  163. package/esm/seal/src/helpers/validation-helpers.mjs +72 -0
  164. package/esm/seal/src/helpers/validation-helpers.mjs.map +1 -0
  165. package/esm/seal/src/index.mjs +87 -0
  166. package/esm/seal/src/mutators/array-mutators.mjs +32 -0
  167. package/esm/seal/src/mutators/array-mutators.mjs.map +1 -0
  168. package/esm/seal/src/mutators/date-mutators.mjs +94 -0
  169. package/esm/seal/src/mutators/date-mutators.mjs.map +1 -0
  170. package/esm/seal/src/mutators/index.mjs +8 -0
  171. package/esm/seal/src/mutators/number-mutators.mjs +52 -0
  172. package/esm/seal/src/mutators/number-mutators.mjs.map +1 -0
  173. package/esm/seal/src/mutators/object-mutators.mjs +30 -0
  174. package/esm/seal/src/mutators/object-mutators.mjs.map +1 -0
  175. package/esm/seal/src/mutators/scalar-mutators.mjs +9 -0
  176. package/esm/seal/src/mutators/scalar-mutators.mjs.map +1 -0
  177. package/esm/seal/src/mutators/string-mutators.mjs +186 -0
  178. package/esm/seal/src/mutators/string-mutators.mjs.map +1 -0
  179. package/esm/seal/src/rules/array/array-rules.mjs +41 -0
  180. package/esm/seal/src/rules/array/array-rules.mjs.map +1 -0
  181. package/esm/seal/src/rules/array/index.mjs +3 -0
  182. package/esm/seal/src/rules/color/color-rules.mjs +104 -0
  183. package/esm/seal/src/rules/color/color-rules.mjs.map +1 -0
  184. package/esm/seal/src/rules/color/index.mjs +3 -0
  185. package/esm/seal/src/rules/common/enum.mjs +77 -0
  186. package/esm/seal/src/rules/common/enum.mjs.map +1 -0
  187. package/esm/seal/src/rules/common/equals-field-rules.mjs +42 -0
  188. package/esm/seal/src/rules/common/equals-field-rules.mjs.map +1 -0
  189. package/esm/seal/src/rules/common/index.mjs +8 -0
  190. package/esm/seal/src/rules/common/instanceof.mjs +23 -0
  191. package/esm/seal/src/rules/common/instanceof.mjs.map +1 -0
  192. package/esm/seal/src/rules/common/literal.mjs +31 -0
  193. package/esm/seal/src/rules/common/literal.mjs.map +1 -0
  194. package/esm/seal/src/rules/common/type-rules.mjs +97 -0
  195. package/esm/seal/src/rules/common/type-rules.mjs.map +1 -0
  196. package/esm/seal/src/rules/common/unknown-key.mjs +25 -0
  197. package/esm/seal/src/rules/common/unknown-key.mjs.map +1 -0
  198. package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs +116 -0
  199. package/esm/seal/src/rules/conditional/forbidden-if-rules.mjs.map +1 -0
  200. package/esm/seal/src/rules/conditional/index.mjs +12 -0
  201. package/esm/seal/src/rules/conditional/present-if-rules.mjs +97 -0
  202. package/esm/seal/src/rules/conditional/present-if-rules.mjs.map +1 -0
  203. package/esm/seal/src/rules/conditional/present-unless-rules.mjs +30 -0
  204. package/esm/seal/src/rules/conditional/present-unless-rules.mjs.map +1 -0
  205. package/esm/seal/src/rules/conditional/present-with-rules.mjs +76 -0
  206. package/esm/seal/src/rules/conditional/present-with-rules.mjs.map +1 -0
  207. package/esm/seal/src/rules/conditional/present-without-rules.mjs +76 -0
  208. package/esm/seal/src/rules/conditional/present-without-rules.mjs.map +1 -0
  209. package/esm/seal/src/rules/conditional/required-if-rules.mjs +204 -0
  210. package/esm/seal/src/rules/conditional/required-if-rules.mjs.map +1 -0
  211. package/esm/seal/src/rules/conditional/required-unless-rules.mjs +31 -0
  212. package/esm/seal/src/rules/conditional/required-unless-rules.mjs.map +1 -0
  213. package/esm/seal/src/rules/conditional/required-when-rule.mjs +32 -0
  214. package/esm/seal/src/rules/conditional/required-when-rule.mjs.map +1 -0
  215. package/esm/seal/src/rules/conditional/required-with-rules.mjs +67 -0
  216. package/esm/seal/src/rules/conditional/required-with-rules.mjs.map +1 -0
  217. package/esm/seal/src/rules/conditional/required-without-rules.mjs +67 -0
  218. package/esm/seal/src/rules/conditional/required-without-rules.mjs.map +1 -0
  219. package/esm/seal/src/rules/core/equal.mjs +22 -0
  220. package/esm/seal/src/rules/core/equal.mjs.map +1 -0
  221. package/esm/seal/src/rules/core/forbidden.mjs +20 -0
  222. package/esm/seal/src/rules/core/forbidden.mjs.map +1 -0
  223. package/esm/seal/src/rules/core/index.mjs +7 -0
  224. package/esm/seal/src/rules/core/required.mjs +36 -0
  225. package/esm/seal/src/rules/core/required.mjs.map +1 -0
  226. package/esm/seal/src/rules/core/union.mjs +30 -0
  227. package/esm/seal/src/rules/core/union.mjs.map +1 -0
  228. package/esm/seal/src/rules/core/when.mjs +37 -0
  229. package/esm/seal/src/rules/core/when.mjs.map +1 -0
  230. package/esm/seal/src/rules/date/date-comparison-rules.mjs +78 -0
  231. package/esm/seal/src/rules/date/date-comparison-rules.mjs.map +1 -0
  232. package/esm/seal/src/rules/date/date-day-rules.mjs +49 -0
  233. package/esm/seal/src/rules/date/date-day-rules.mjs.map +1 -0
  234. package/esm/seal/src/rules/date/date-field-comparison-rules.mjs +82 -0
  235. package/esm/seal/src/rules/date/date-field-comparison-rules.mjs.map +1 -0
  236. package/esm/seal/src/rules/date/date-period-rules.mjs +399 -0
  237. package/esm/seal/src/rules/date/date-period-rules.mjs.map +1 -0
  238. package/esm/seal/src/rules/date/date-relative-rules.mjs +55 -0
  239. package/esm/seal/src/rules/date/date-relative-rules.mjs.map +1 -0
  240. package/esm/seal/src/rules/date/date-special-rules.mjs +58 -0
  241. package/esm/seal/src/rules/date/date-special-rules.mjs.map +1 -0
  242. package/esm/seal/src/rules/date/date.mjs +235 -0
  243. package/esm/seal/src/rules/date/date.mjs.map +1 -0
  244. package/esm/seal/src/rules/date/index.mjs +9 -0
  245. package/esm/seal/src/rules/file/dimensions.mjs +3 -0
  246. package/esm/seal/src/rules/file/file-size.mjs +3 -0
  247. package/esm/seal/src/rules/file/index.mjs +4 -0
  248. package/esm/seal/src/rules/index.mjs +54 -0
  249. package/esm/seal/src/rules/length/index.mjs +3 -0
  250. package/esm/seal/src/rules/length/length-rules.mjs +98 -0
  251. package/esm/seal/src/rules/length/length-rules.mjs.map +1 -0
  252. package/esm/seal/src/rules/number/index.mjs +3 -0
  253. package/esm/seal/src/rules/number/number-rules.mjs +197 -0
  254. package/esm/seal/src/rules/number/number-rules.mjs.map +1 -0
  255. package/esm/seal/src/rules/scalar/accepted-rule.mjs +116 -0
  256. package/esm/seal/src/rules/scalar/accepted-rule.mjs.map +1 -0
  257. package/esm/seal/src/rules/scalar/declined-rule.mjs +116 -0
  258. package/esm/seal/src/rules/scalar/declined-rule.mjs.map +1 -0
  259. package/esm/seal/src/rules/scalar/index.mjs +4 -0
  260. package/esm/seal/src/rules/string/alpha.mjs +41 -0
  261. package/esm/seal/src/rules/string/alpha.mjs.map +1 -0
  262. package/esm/seal/src/rules/string/credit-card.mjs +32 -0
  263. package/esm/seal/src/rules/string/credit-card.mjs.map +1 -0
  264. package/esm/seal/src/rules/string/email.mjs +20 -0
  265. package/esm/seal/src/rules/string/email.mjs.map +1 -0
  266. package/esm/seal/src/rules/string/id-formats.mjs +104 -0
  267. package/esm/seal/src/rules/string/id-formats.mjs.map +1 -0
  268. package/esm/seal/src/rules/string/index.mjs +13 -0
  269. package/esm/seal/src/rules/string/ip.mjs +66 -0
  270. package/esm/seal/src/rules/string/ip.mjs.map +1 -0
  271. package/esm/seal/src/rules/string/matches.mjs +4 -0
  272. package/esm/seal/src/rules/string/pattern.mjs +20 -0
  273. package/esm/seal/src/rules/string/pattern.mjs.map +1 -0
  274. package/esm/seal/src/rules/string/string-comparison.mjs +56 -0
  275. package/esm/seal/src/rules/string/string-comparison.mjs.map +1 -0
  276. package/esm/seal/src/rules/string/strong-password-rule.mjs +31 -0
  277. package/esm/seal/src/rules/string/strong-password-rule.mjs.map +1 -0
  278. package/esm/seal/src/rules/string/url.mjs +23 -0
  279. package/esm/seal/src/rules/string/url.mjs.map +1 -0
  280. package/esm/seal/src/rules/string/without-whitespace.mjs +19 -0
  281. package/esm/seal/src/rules/string/without-whitespace.mjs.map +1 -0
  282. package/esm/seal/src/standard-schema/json-schema.mjs +81 -0
  283. package/esm/seal/src/standard-schema/json-schema.mjs.map +1 -0
  284. package/esm/seal/src/standard-schema/map-result.mjs +26 -0
  285. package/esm/seal/src/standard-schema/map-result.mjs.map +1 -0
  286. package/esm/seal/src/types/date-types.mjs +17 -0
  287. package/esm/seal/src/types/date-types.mjs.map +1 -0
  288. package/esm/seal/src/validators/any-validator.mjs +38 -0
  289. package/esm/seal/src/validators/any-validator.mjs.map +1 -0
  290. package/esm/seal/src/validators/array-validator.mjs +177 -0
  291. package/esm/seal/src/validators/array-validator.mjs.map +1 -0
  292. package/esm/seal/src/validators/base-validator.mjs +691 -0
  293. package/esm/seal/src/validators/base-validator.mjs.map +1 -0
  294. package/esm/seal/src/validators/boolean-validator.mjs +126 -0
  295. package/esm/seal/src/validators/boolean-validator.mjs.map +1 -0
  296. package/esm/seal/src/validators/computed-validator.mjs +118 -0
  297. package/esm/seal/src/validators/computed-validator.mjs.map +1 -0
  298. package/esm/seal/src/validators/date-validator.mjs +639 -0
  299. package/esm/seal/src/validators/date-validator.mjs.map +1 -0
  300. package/esm/seal/src/validators/discriminated-union-validator.mjs +129 -0
  301. package/esm/seal/src/validators/discriminated-union-validator.mjs.map +1 -0
  302. package/esm/seal/src/validators/float-validator.mjs +18 -0
  303. package/esm/seal/src/validators/float-validator.mjs.map +1 -0
  304. package/esm/seal/src/validators/index.mjs +28 -0
  305. package/esm/seal/src/validators/instanceof-validator.mjs +64 -0
  306. package/esm/seal/src/validators/instanceof-validator.mjs.map +1 -0
  307. package/esm/seal/src/validators/int-validator.mjs +30 -0
  308. package/esm/seal/src/validators/int-validator.mjs.map +1 -0
  309. package/esm/seal/src/validators/lazy-validator.mjs +87 -0
  310. package/esm/seal/src/validators/lazy-validator.mjs.map +1 -0
  311. package/esm/seal/src/validators/literal-validator.mjs +71 -0
  312. package/esm/seal/src/validators/literal-validator.mjs.map +1 -0
  313. package/esm/seal/src/validators/managed-validator.mjs +39 -0
  314. package/esm/seal/src/validators/managed-validator.mjs.map +1 -0
  315. package/esm/seal/src/validators/methods/equality-conditional-methods.mjs +129 -0
  316. package/esm/seal/src/validators/methods/equality-conditional-methods.mjs.map +1 -0
  317. package/esm/seal/src/validators/methods/forbidden-methods.mjs +131 -0
  318. package/esm/seal/src/validators/methods/forbidden-methods.mjs.map +1 -0
  319. package/esm/seal/src/validators/methods/present-methods.mjs +235 -0
  320. package/esm/seal/src/validators/methods/present-methods.mjs.map +1 -0
  321. package/esm/seal/src/validators/methods/required-methods.mjs +347 -0
  322. package/esm/seal/src/validators/methods/required-methods.mjs.map +1 -0
  323. package/esm/seal/src/validators/number-validator.mjs +310 -0
  324. package/esm/seal/src/validators/number-validator.mjs.map +1 -0
  325. package/esm/seal/src/validators/numeric-validator.mjs +27 -0
  326. package/esm/seal/src/validators/numeric-validator.mjs.map +1 -0
  327. package/esm/seal/src/validators/object-validator.mjs +442 -0
  328. package/esm/seal/src/validators/object-validator.mjs.map +1 -0
  329. package/esm/seal/src/validators/primitive-validator.mjs +89 -0
  330. package/esm/seal/src/validators/primitive-validator.mjs.map +1 -0
  331. package/esm/seal/src/validators/record-validator.mjs +112 -0
  332. package/esm/seal/src/validators/record-validator.mjs.map +1 -0
  333. package/esm/seal/src/validators/scalar-validator.mjs +172 -0
  334. package/esm/seal/src/validators/scalar-validator.mjs.map +1 -0
  335. package/esm/seal/src/validators/string-validator.mjs +459 -0
  336. package/esm/seal/src/validators/string-validator.mjs.map +1 -0
  337. package/esm/seal/src/validators/tuple-validator.mjs +134 -0
  338. package/esm/seal/src/validators/tuple-validator.mjs.map +1 -0
  339. package/esm/seal/src/validators/union-validator.mjs +66 -0
  340. package/esm/seal/src/validators/union-validator.mjs.map +1 -0
  341. package/llms-full.txt +5 -1
  342. package/package.json +5 -5
  343. package/skills/send-ad-hoc/SKILL.md +1 -1
  344. package/skills/use-in-app/SKILL.md +4 -0
@@ -0,0 +1,66 @@
1
+ import { getRuleOptions } from "../standard-schema/json-schema.mjs";
2
+ import { BaseValidator } from "./base-validator.mjs";
3
+ import { unionRule } from "../rules/core/union.mjs";
4
+ import "../rules/index.mjs";
5
+
6
+ //#region ../seal/src/validators/union-validator.ts
7
+ /**
8
+ * Union validator class - validates value against multiple validator types
9
+ *
10
+ * Tries each validator in order until one passes. If a validator's matchesType()
11
+ * returns false, it's skipped for optimization. First validator that both matches
12
+ * the type and passes validation wins.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * // Accept email or username
17
+ * const identifier = v.union([
18
+ * v.string().email(),
19
+ * v.string().alphanumeric().min(3).max(20)
20
+ * ]);
21
+ *
22
+ * // Accept different types
23
+ * const customValue = v.union([
24
+ * v.string().required(),
25
+ * v.number().required(),
26
+ * v.boolean().required(),
27
+ * v.file().required()
28
+ * ]);
29
+ * ```
30
+ */
31
+ var UnionValidator = class extends BaseValidator {
32
+ /**
33
+ * Set the validators to try for union validation
34
+ *
35
+ * @param validators - Array of validators to try
36
+ * @param errorMessage - Optional custom error message if all validators fail
37
+ * @returns This validator for chaining
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * new UnionValidator()
42
+ * .union([v.string(), v.number()], 'Must be string or number');
43
+ * ```
44
+ */
45
+ union(validators, errorMessage) {
46
+ return this.addRule(unionRule, errorMessage, { validators });
47
+ }
48
+ /**
49
+ * @inheritdoc
50
+ *
51
+ * Generates `{ oneOf: [...] }` by mapping each sub-validator to its JSON Schema.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * v.union([v.string(), v.number()]).toJsonSchema("draft-2020-12")
56
+ * // → { oneOf: [{ type: "string" }, { type: "number" }] }
57
+ * ```
58
+ */
59
+ toJsonSchema(target = "draft-2020-12") {
60
+ return { oneOf: (getRuleOptions(this.rules, "union")?.validators ?? []).map((v) => v.toJsonSchema(target)) };
61
+ }
62
+ };
63
+
64
+ //#endregion
65
+ export { UnionValidator };
66
+ //# sourceMappingURL=union-validator.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"union-validator.mjs","names":[],"sources":["../../../../../../../../../seal/src/validators/union-validator.ts"],"sourcesContent":["import { unionRule } from \"../rules\";\r\nimport { BaseValidator } from \"./base-validator\";\r\nimport { getRuleOptions } from \"../standard-schema/json-schema\";\r\nimport type { JsonSchemaResult, JsonSchemaTarget } from \"../standard-schema/json-schema\";\r\n\r\n/**\r\n * Union validator class - validates value against multiple validator types\r\n *\r\n * Tries each validator in order until one passes. If a validator's matchesType()\r\n * returns false, it's skipped for optimization. First validator that both matches\r\n * the type and passes validation wins.\r\n *\r\n * @example\r\n * ```ts\r\n * // Accept email or username\r\n * const identifier = v.union([\r\n * v.string().email(),\r\n * v.string().alphanumeric().min(3).max(20)\r\n * ]);\r\n *\r\n * // Accept different types\r\n * const customValue = v.union([\r\n * v.string().required(),\r\n * v.number().required(),\r\n * v.boolean().required(),\r\n * v.file().required()\r\n * ]);\r\n * ```\r\n */\r\nexport class UnionValidator extends BaseValidator {\r\n /**\r\n * Set the validators to try for union validation\r\n *\r\n * @param validators - Array of validators to try\r\n * @param errorMessage - Optional custom error message if all validators fail\r\n * @returns This validator for chaining\r\n *\r\n * @example\r\n * ```ts\r\n * new UnionValidator()\r\n * .union([v.string(), v.number()], 'Must be string or number');\r\n * ```\r\n */\r\n public union(validators: BaseValidator[], errorMessage?: string) {\r\n return this.addRule(unionRule, errorMessage, { validators });\r\n }\r\n\r\n /**\r\n * @inheritdoc\r\n *\r\n * Generates `{ oneOf: [...] }` by mapping each sub-validator to its JSON Schema.\r\n *\r\n * @example\r\n * ```ts\r\n * v.union([v.string(), v.number()]).toJsonSchema(\"draft-2020-12\")\r\n * // → { oneOf: [{ type: \"string\" }, { type: \"number\" }] }\r\n * ```\r\n */\r\n public override toJsonSchema(target: JsonSchemaTarget = \"draft-2020-12\"): JsonSchemaResult {\r\n const opts = getRuleOptions(this.rules, \"union\");\r\n const validators = (opts?.validators ?? []) as BaseValidator[];\r\n\r\n return {\r\n oneOf: validators.map(v => v.toJsonSchema(target)),\r\n };\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,IAAa,iBAAb,cAAoC,cAAc;;;;;;;;;;;;;;CAchD,AAAO,MAAM,YAA6B,cAAuB;EAC/D,OAAO,KAAK,QAAQ,WAAW,cAAc,EAAE,WAAW,CAAC;CAC7D;;;;;;;;;;;;CAaA,AAAgB,aAAa,SAA2B,iBAAmC;EAIzF,OAAO,EACL,QAJW,eAAe,KAAK,OAAO,OACjB,CAAC,EAAE,cAAc,CAAC,EAGtB,CAAC,KAAI,MAAK,EAAE,aAAa,MAAM,CAAC,EACnD;CACF;AACF"}
package/llms-full.txt CHANGED
@@ -697,7 +697,7 @@ const channelName = await chooseChannelForUser(user);
697
697
  await notify.channel(channelName).send(user, payload);
698
698
  ```
699
699
 
700
- This is the only path with `unknown`-typed payloads — prefer the literal `notify.<channel>` when you can.
700
+ This is the only path with `unknown`-typed payloads — prefer the literal `notify.<channel>` when you can. `to` is still what decides the recipient: even for the `database` channel, a `recipientId`-shaped key on `payload` (or the model's physical recipient column name) is stripped before the row is built, so an untyped payload assembled from request JSON can't redirect the write to another recipient — see [`use-in-app/SKILL.md`](../use-in-app/SKILL.md#createfor-write-side--no-idor-either-since-4150).
701
701
 
702
702
  ## Opt into preference/rate-limit gating
703
703
 
@@ -835,6 +835,10 @@ class BaseNotificationsRepository extends RepositoryManager {
835
835
  }
836
836
  ```
837
837
 
838
+ ### `createFor` write side — no IDOR either (since 4.15.0)
839
+
840
+ `recipientId` is always the trusted argument, applied **after** the payload — `createFor`/`createManyFor` strip server-owned keys (`id`, `recipientId`, `tenant`, `readAt`, `isRead`, and their resolved `columnMap` physical column names) off `input` before merging. Before this, a caller passing an untyped payload straight through (request JSON, a channel's `send` args) could smuggle its own `recipientId` — or the raw physical column name — and write the notification into someone else's inbox. `type` / `title` / `body` / `payload` / `idempotencyKey` are untouched; you don't need to sanitize `input` yourself.
841
+
838
842
  ### `columnMap` — map logical roles → your columns
839
843
 
840
844
  ```ts
package/package.json CHANGED
@@ -2,10 +2,10 @@
2
2
  "name": "@warlock.js/notifications",
3
3
  "description": "Multi-channel notifications for Warlock.js — define once, fire anywhere; mail / in-app database / pluggable custom channels with preferences, rate limits, and idempotency.",
4
4
  "dependencies": {
5
- "@warlock.js/cache": "4.15.0",
6
- "@warlock.js/cascade": "4.15.0",
7
- "@warlock.js/core": "4.15.0",
8
- "@warlock.js/logger": "4.15.0"
5
+ "@warlock.js/cache": "5.0.0",
6
+ "@warlock.js/cascade": "5.0.0",
7
+ "@warlock.js/core": "5.0.0",
8
+ "@warlock.js/logger": "5.0.0"
9
9
  },
10
10
  "optionalDependencies": {
11
11
  "@warlock.js/herald": "*"
@@ -24,7 +24,7 @@
24
24
  ],
25
25
  "author": "hassanzohdy",
26
26
  "license": "MIT",
27
- "version": "4.15.0",
27
+ "version": "5.0.0",
28
28
  "main": "./cjs/index.cjs",
29
29
  "module": "./esm/index.mjs",
30
30
  "types": "./esm/index.d.mts",
@@ -46,7 +46,7 @@ const channelName = await chooseChannelForUser(user);
46
46
  await notify.channel(channelName).send(user, payload);
47
47
  ```
48
48
 
49
- This is the only path with `unknown`-typed payloads — prefer the literal `notify.<channel>` when you can.
49
+ This is the only path with `unknown`-typed payloads — prefer the literal `notify.<channel>` when you can. `to` is still what decides the recipient: even for the `database` channel, a `recipientId`-shaped key on `payload` (or the model's physical recipient column name) is stripped before the row is built, so an untyped payload assembled from request JSON can't redirect the write to another recipient — see [`use-in-app/SKILL.md`](../use-in-app/SKILL.md#createfor-write-side--no-idor-either-since-4150).
50
50
 
51
51
  ## Opt into preference/rate-limit gating
52
52
 
@@ -85,6 +85,10 @@ class BaseNotificationsRepository extends RepositoryManager {
85
85
  }
86
86
  ```
87
87
 
88
+ ### `createFor` write side — no IDOR either (since 4.15.0)
89
+
90
+ `recipientId` is always the trusted argument, applied **after** the payload — `createFor`/`createManyFor` strip server-owned keys (`id`, `recipientId`, `tenant`, `readAt`, `isRead`, and their resolved `columnMap` physical column names) off `input` before merging. Before this, a caller passing an untyped payload straight through (request JSON, a channel's `send` args) could smuggle its own `recipientId` — or the raw physical column name — and write the notification into someone else's inbox. `type` / `title` / `body` / `payload` / `idempotencyKey` are untouched; you don't need to sanitize `input` yourself.
91
+
88
92
  ### `columnMap` — map logical roles → your columns
89
93
 
90
94
  ```ts