@azurioh/discord-kernel 0.1.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 (373) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -0
  3. package/dist/authz/authorizer.d.ts +45 -0
  4. package/dist/authz/authorizer.d.ts.map +1 -0
  5. package/dist/authz/authorizer.js +31 -0
  6. package/dist/authz/authorizer.js.map +1 -0
  7. package/dist/authz/require-level-guard.d.ts +23 -0
  8. package/dist/authz/require-level-guard.d.ts.map +1 -0
  9. package/dist/authz/require-level-guard.js +37 -0
  10. package/dist/authz/require-level-guard.js.map +1 -0
  11. package/dist/clock.d.ts +13 -0
  12. package/dist/clock.d.ts.map +1 -0
  13. package/dist/clock.js +13 -0
  14. package/dist/clock.js.map +1 -0
  15. package/dist/concurrency/keyed-queue.d.ts +18 -0
  16. package/dist/concurrency/keyed-queue.d.ts.map +1 -0
  17. package/dist/concurrency/keyed-queue.js +37 -0
  18. package/dist/concurrency/keyed-queue.js.map +1 -0
  19. package/dist/concurrency/run-with-concurrency.d.ts +15 -0
  20. package/dist/concurrency/run-with-concurrency.d.ts.map +1 -0
  21. package/dist/concurrency/run-with-concurrency.js +40 -0
  22. package/dist/concurrency/run-with-concurrency.js.map +1 -0
  23. package/dist/config/env.d.ts +17 -0
  24. package/dist/config/env.d.ts.map +1 -0
  25. package/dist/config/env.js +49 -0
  26. package/dist/config/env.js.map +1 -0
  27. package/dist/config/errors.d.ts +14 -0
  28. package/dist/config/errors.d.ts.map +1 -0
  29. package/dist/config/errors.js +25 -0
  30. package/dist/config/errors.js.map +1 -0
  31. package/dist/datetime.d.ts +34 -0
  32. package/dist/datetime.d.ts.map +1 -0
  33. package/dist/datetime.js +188 -0
  34. package/dist/datetime.js.map +1 -0
  35. package/dist/discord/api-errors.d.ts +20 -0
  36. package/dist/discord/api-errors.d.ts.map +1 -0
  37. package/dist/discord/api-errors.js +90 -0
  38. package/dist/discord/api-errors.js.map +1 -0
  39. package/dist/discord/channel-exporter.d.ts +42 -0
  40. package/dist/discord/channel-exporter.d.ts.map +1 -0
  41. package/dist/discord/channel-exporter.js +3 -0
  42. package/dist/discord/channel-exporter.js.map +1 -0
  43. package/dist/discord/command/autocomplete-dispatcher.d.ts +26 -0
  44. package/dist/discord/command/autocomplete-dispatcher.d.ts.map +1 -0
  45. package/dist/discord/command/autocomplete-dispatcher.js +41 -0
  46. package/dist/discord/command/autocomplete-dispatcher.js.map +1 -0
  47. package/dist/discord/command/autocomplete.d.ts +18 -0
  48. package/dist/discord/command/autocomplete.d.ts.map +1 -0
  49. package/dist/discord/command/autocomplete.js +65 -0
  50. package/dist/discord/command/autocomplete.js.map +1 -0
  51. package/dist/discord/command/context.d.ts +33 -0
  52. package/dist/discord/command/context.d.ts.map +1 -0
  53. package/dist/discord/command/context.js +48 -0
  54. package/dist/discord/command/context.js.map +1 -0
  55. package/dist/discord/command/cooldown-guard.d.ts +25 -0
  56. package/dist/discord/command/cooldown-guard.d.ts.map +1 -0
  57. package/dist/discord/command/cooldown-guard.js +60 -0
  58. package/dist/discord/command/cooldown-guard.js.map +1 -0
  59. package/dist/discord/command/create-command.d.ts +100 -0
  60. package/dist/discord/command/create-command.d.ts.map +1 -0
  61. package/dist/discord/command/create-command.js +245 -0
  62. package/dist/discord/command/create-command.js.map +1 -0
  63. package/dist/discord/command/create-context-menu-command.d.ts +51 -0
  64. package/dist/discord/command/create-context-menu-command.d.ts.map +1 -0
  65. package/dist/discord/command/create-context-menu-command.js +128 -0
  66. package/dist/discord/command/create-context-menu-command.js.map +1 -0
  67. package/dist/discord/command/errors.d.ts +19 -0
  68. package/dist/discord/command/errors.d.ts.map +1 -0
  69. package/dist/discord/command/errors.js +27 -0
  70. package/dist/discord/command/errors.js.map +1 -0
  71. package/dist/discord/command/guard.d.ts +30 -0
  72. package/dist/discord/command/guard.d.ts.map +1 -0
  73. package/dist/discord/command/guard.js +34 -0
  74. package/dist/discord/command/guard.js.map +1 -0
  75. package/dist/discord/command/localization.d.ts +9 -0
  76. package/dist/discord/command/localization.d.ts.map +1 -0
  77. package/dist/discord/command/localization.js +13 -0
  78. package/dist/discord/command/localization.js.map +1 -0
  79. package/dist/discord/command/options.d.ts +113 -0
  80. package/dist/discord/command/options.d.ts.map +1 -0
  81. package/dist/discord/command/options.js +509 -0
  82. package/dist/discord/command/options.js.map +1 -0
  83. package/dist/discord/command/permission-guard.d.ts +21 -0
  84. package/dist/discord/command/permission-guard.d.ts.map +1 -0
  85. package/dist/discord/command/permission-guard.js +69 -0
  86. package/dist/discord/command/permission-guard.js.map +1 -0
  87. package/dist/discord/command/router.d.ts +48 -0
  88. package/dist/discord/command/router.d.ts.map +1 -0
  89. package/dist/discord/command/router.js +118 -0
  90. package/dist/discord/command/router.js.map +1 -0
  91. package/dist/discord/command/types.d.ts +51 -0
  92. package/dist/discord/command/types.d.ts.map +1 -0
  93. package/dist/discord/command/types.js +3 -0
  94. package/dist/discord/command/types.js.map +1 -0
  95. package/dist/discord/components/component-router.d.ts +116 -0
  96. package/dist/discord/components/component-router.d.ts.map +1 -0
  97. package/dist/discord/components/component-router.js +123 -0
  98. package/dist/discord/components/component-router.js.map +1 -0
  99. package/dist/discord/components/interactive-message/index.d.ts +3 -0
  100. package/dist/discord/components/interactive-message/index.d.ts.map +1 -0
  101. package/dist/discord/components/interactive-message/index.js +11 -0
  102. package/dist/discord/components/interactive-message/index.js.map +1 -0
  103. package/dist/discord/components/interactive-message/interactive-message-collector.d.ts +195 -0
  104. package/dist/discord/components/interactive-message/interactive-message-collector.d.ts.map +1 -0
  105. package/dist/discord/components/interactive-message/interactive-message-collector.js +151 -0
  106. package/dist/discord/components/interactive-message/interactive-message-collector.js.map +1 -0
  107. package/dist/discord/components/interactive-message/mount-interactive-message.d.ts +30 -0
  108. package/dist/discord/components/interactive-message/mount-interactive-message.d.ts.map +1 -0
  109. package/dist/discord/components/interactive-message/mount-interactive-message.js +44 -0
  110. package/dist/discord/components/interactive-message/mount-interactive-message.js.map +1 -0
  111. package/dist/discord/components/paginator/index.d.ts +5 -0
  112. package/dist/discord/components/paginator/index.d.ts.map +1 -0
  113. package/dist/discord/components/paginator/index.js +15 -0
  114. package/dist/discord/components/paginator/index.js.map +1 -0
  115. package/dist/discord/components/paginator/mount-paginator.d.ts +25 -0
  116. package/dist/discord/components/paginator/mount-paginator.d.ts.map +1 -0
  117. package/dist/discord/components/paginator/mount-paginator.js +41 -0
  118. package/dist/discord/components/paginator/mount-paginator.js.map +1 -0
  119. package/dist/discord/components/paginator/page-state.d.ts +21 -0
  120. package/dist/discord/components/paginator/page-state.d.ts.map +1 -0
  121. package/dist/discord/components/paginator/page-state.js +44 -0
  122. package/dist/discord/components/paginator/page-state.js.map +1 -0
  123. package/dist/discord/components/paginator/paginator-buttons.d.ts +17 -0
  124. package/dist/discord/components/paginator/paginator-buttons.d.ts.map +1 -0
  125. package/dist/discord/components/paginator/paginator-buttons.js +45 -0
  126. package/dist/discord/components/paginator/paginator-buttons.js.map +1 -0
  127. package/dist/discord/components/paginator/paginator-view.d.ts +26 -0
  128. package/dist/discord/components/paginator/paginator-view.d.ts.map +1 -0
  129. package/dist/discord/components/paginator/paginator-view.js +28 -0
  130. package/dist/discord/components/paginator/paginator-view.js.map +1 -0
  131. package/dist/discord/components/persistent-paginator.d.ts +47 -0
  132. package/dist/discord/components/persistent-paginator.d.ts.map +1 -0
  133. package/dist/discord/components/persistent-paginator.js +137 -0
  134. package/dist/discord/components/persistent-paginator.js.map +1 -0
  135. package/dist/discord/components/settings-editor/index.d.ts +7 -0
  136. package/dist/discord/components/settings-editor/index.d.ts.map +1 -0
  137. package/dist/discord/components/settings-editor/index.js +22 -0
  138. package/dist/discord/components/settings-editor/index.js.map +1 -0
  139. package/dist/discord/components/settings-editor/mount-settings-editor.d.ts +140 -0
  140. package/dist/discord/components/settings-editor/mount-settings-editor.d.ts.map +1 -0
  141. package/dist/discord/components/settings-editor/mount-settings-editor.js +344 -0
  142. package/dist/discord/components/settings-editor/mount-settings-editor.js.map +1 -0
  143. package/dist/discord/components/settings-editor/navigation.d.ts +49 -0
  144. package/dist/discord/components/settings-editor/navigation.d.ts.map +1 -0
  145. package/dist/discord/components/settings-editor/navigation.js +39 -0
  146. package/dist/discord/components/settings-editor/navigation.js.map +1 -0
  147. package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts +56 -0
  148. package/dist/discord/components/settings-editor/settings-editor-card.view.d.ts.map +1 -0
  149. package/dist/discord/components/settings-editor/settings-editor-card.view.js +284 -0
  150. package/dist/discord/components/settings-editor/settings-editor-card.view.js.map +1 -0
  151. package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts +69 -0
  152. package/dist/discord/components/settings-editor/settings-editor-field-modal.d.ts.map +1 -0
  153. package/dist/discord/components/settings-editor/settings-editor-field-modal.js +353 -0
  154. package/dist/discord/components/settings-editor/settings-editor-field-modal.js.map +1 -0
  155. package/dist/discord/components/settings-editor/settings-editor-fields.d.ts +216 -0
  156. package/dist/discord/components/settings-editor/settings-editor-fields.d.ts.map +1 -0
  157. package/dist/discord/components/settings-editor/settings-editor-fields.js +66 -0
  158. package/dist/discord/components/settings-editor/settings-editor-fields.js.map +1 -0
  159. package/dist/discord/components/settings-editor/settings-editor.view.d.ts +303 -0
  160. package/dist/discord/components/settings-editor/settings-editor.view.d.ts.map +1 -0
  161. package/dist/discord/components/settings-editor/settings-editor.view.js +316 -0
  162. package/dist/discord/components/settings-editor/settings-editor.view.js.map +1 -0
  163. package/dist/discord/events/create-event.d.ts +5 -0
  164. package/dist/discord/events/create-event.d.ts.map +1 -0
  165. package/dist/discord/events/create-event.js +8 -0
  166. package/dist/discord/events/create-event.js.map +1 -0
  167. package/dist/discord/events/event-router.d.ts +16 -0
  168. package/dist/discord/events/event-router.d.ts.map +1 -0
  169. package/dist/discord/events/event-router.js +51 -0
  170. package/dist/discord/events/event-router.js.map +1 -0
  171. package/dist/discord/events/types.d.ts +16 -0
  172. package/dist/discord/events/types.d.ts.map +1 -0
  173. package/dist/discord/events/types.js +3 -0
  174. package/dist/discord/events/types.js.map +1 -0
  175. package/dist/discord/i18n.d.ts +58 -0
  176. package/dist/discord/i18n.d.ts.map +1 -0
  177. package/dist/discord/i18n.js +173 -0
  178. package/dist/discord/i18n.js.map +1 -0
  179. package/dist/discord/interaction/button.d.ts +39 -0
  180. package/dist/discord/interaction/button.d.ts.map +1 -0
  181. package/dist/discord/interaction/button.js +36 -0
  182. package/dist/discord/interaction/button.js.map +1 -0
  183. package/dist/discord/interaction/interaction-router.d.ts +21 -0
  184. package/dist/discord/interaction/interaction-router.d.ts.map +1 -0
  185. package/dist/discord/interaction/interaction-router.js +24 -0
  186. package/dist/discord/interaction/interaction-router.js.map +1 -0
  187. package/dist/discord/interaction/modal.d.ts +171 -0
  188. package/dist/discord/interaction/modal.d.ts.map +1 -0
  189. package/dist/discord/interaction/modal.js +264 -0
  190. package/dist/discord/interaction/modal.js.map +1 -0
  191. package/dist/discord/interaction/select-menu.d.ts +104 -0
  192. package/dist/discord/interaction/select-menu.d.ts.map +1 -0
  193. package/dist/discord/interaction/select-menu.js +126 -0
  194. package/dist/discord/interaction/select-menu.js.map +1 -0
  195. package/dist/discord/permissions.d.ts +32 -0
  196. package/dist/discord/permissions.d.ts.map +1 -0
  197. package/dist/discord/permissions.js +40 -0
  198. package/dist/discord/permissions.js.map +1 -0
  199. package/dist/discord/placeholder-registry-errors.d.ts +10 -0
  200. package/dist/discord/placeholder-registry-errors.d.ts.map +1 -0
  201. package/dist/discord/placeholder-registry-errors.js +18 -0
  202. package/dist/discord/placeholder-registry-errors.js.map +1 -0
  203. package/dist/discord/placeholder-registry.d.ts +53 -0
  204. package/dist/discord/placeholder-registry.d.ts.map +1 -0
  205. package/dist/discord/placeholder-registry.js +52 -0
  206. package/dist/discord/placeholder-registry.js.map +1 -0
  207. package/dist/discord/presenter.d.ts +26 -0
  208. package/dist/discord/presenter.d.ts.map +1 -0
  209. package/dist/discord/presenter.js +3 -0
  210. package/dist/discord/presenter.js.map +1 -0
  211. package/dist/discord/ui/card.d.ts +114 -0
  212. package/dist/discord/ui/card.d.ts.map +1 -0
  213. package/dist/discord/ui/card.js +162 -0
  214. package/dist/discord/ui/card.js.map +1 -0
  215. package/dist/discord/ui/color-input-errors.d.ts +12 -0
  216. package/dist/discord/ui/color-input-errors.d.ts.map +1 -0
  217. package/dist/discord/ui/color-input-errors.js +21 -0
  218. package/dist/discord/ui/color-input-errors.js.map +1 -0
  219. package/dist/discord/ui/color-input.d.ts +37 -0
  220. package/dist/discord/ui/color-input.d.ts.map +1 -0
  221. package/dist/discord/ui/color-input.js +166 -0
  222. package/dist/discord/ui/color-input.js.map +1 -0
  223. package/dist/discord/ui/colors.d.ts +44 -0
  224. package/dist/discord/ui/colors.d.ts.map +1 -0
  225. package/dist/discord/ui/colors.js +45 -0
  226. package/dist/discord/ui/colors.js.map +1 -0
  227. package/dist/discord/ui/embed.d.ts +16 -0
  228. package/dist/discord/ui/embed.d.ts.map +1 -0
  229. package/dist/discord/ui/embed.js +53 -0
  230. package/dist/discord/ui/embed.js.map +1 -0
  231. package/dist/discord/ui/message-attachments.d.ts +40 -0
  232. package/dist/discord/ui/message-attachments.d.ts.map +1 -0
  233. package/dist/discord/ui/message-attachments.js +27 -0
  234. package/dist/discord/ui/message-attachments.js.map +1 -0
  235. package/dist/errors/business-error.d.ts +41 -0
  236. package/dist/errors/business-error.d.ts.map +1 -0
  237. package/dist/errors/business-error.js +39 -0
  238. package/dist/errors/business-error.js.map +1 -0
  239. package/dist/errors/describe-error.d.ts +29 -0
  240. package/dist/errors/describe-error.d.ts.map +1 -0
  241. package/dist/errors/describe-error.js +49 -0
  242. package/dist/errors/describe-error.js.map +1 -0
  243. package/dist/errors/incident-ref.d.ts +7 -0
  244. package/dist/errors/incident-ref.d.ts.map +1 -0
  245. package/dist/errors/incident-ref.js +13 -0
  246. package/dist/errors/incident-ref.js.map +1 -0
  247. package/dist/errors/index.d.ts +4 -0
  248. package/dist/errors/index.d.ts.map +1 -0
  249. package/dist/errors/index.js +15 -0
  250. package/dist/errors/index.js.map +1 -0
  251. package/dist/i18n/business-message.d.ts +14 -0
  252. package/dist/i18n/business-message.d.ts.map +1 -0
  253. package/dist/i18n/business-message.js +19 -0
  254. package/dist/i18n/business-message.js.map +1 -0
  255. package/dist/i18n/catalog.d.ts +27 -0
  256. package/dist/i18n/catalog.d.ts.map +1 -0
  257. package/dist/i18n/catalog.js +25 -0
  258. package/dist/i18n/catalog.js.map +1 -0
  259. package/dist/i18n/errors.d.ts +10 -0
  260. package/dist/i18n/errors.d.ts.map +1 -0
  261. package/dist/i18n/errors.js +18 -0
  262. package/dist/i18n/errors.js.map +1 -0
  263. package/dist/i18n/index.d.ts +6 -0
  264. package/dist/i18n/index.d.ts.map +1 -0
  265. package/dist/i18n/index.js +16 -0
  266. package/dist/i18n/index.js.map +1 -0
  267. package/dist/i18n/locale.d.ts +22 -0
  268. package/dist/i18n/locale.d.ts.map +1 -0
  269. package/dist/i18n/locale.js +40 -0
  270. package/dist/i18n/locale.js.map +1 -0
  271. package/dist/i18n/translator.d.ts +35 -0
  272. package/dist/i18n/translator.d.ts.map +1 -0
  273. package/dist/i18n/translator.js +40 -0
  274. package/dist/i18n/translator.js.map +1 -0
  275. package/dist/logger.d.ts +28 -0
  276. package/dist/logger.d.ts.map +1 -0
  277. package/dist/logger.js +3 -0
  278. package/dist/logger.js.map +1 -0
  279. package/dist/module/module.d.ts +42 -0
  280. package/dist/module/module.d.ts.map +1 -0
  281. package/dist/module/module.js +3 -0
  282. package/dist/module/module.js.map +1 -0
  283. package/dist/persistence/database.d.ts +24 -0
  284. package/dist/persistence/database.d.ts.map +1 -0
  285. package/dist/persistence/database.js +3 -0
  286. package/dist/persistence/database.js.map +1 -0
  287. package/dist/resilience/retry.d.ts +36 -0
  288. package/dist/resilience/retry.d.ts.map +1 -0
  289. package/dist/resilience/retry.js +78 -0
  290. package/dist/resilience/retry.js.map +1 -0
  291. package/dist/scheduler/errors.d.ts +25 -0
  292. package/dist/scheduler/errors.d.ts.map +1 -0
  293. package/dist/scheduler/errors.js +45 -0
  294. package/dist/scheduler/errors.js.map +1 -0
  295. package/dist/scheduler/scheduler.d.ts +68 -0
  296. package/dist/scheduler/scheduler.d.ts.map +1 -0
  297. package/dist/scheduler/scheduler.js +162 -0
  298. package/dist/scheduler/scheduler.js.map +1 -0
  299. package/package.json +89 -0
  300. package/src/authz/authorizer.ts +76 -0
  301. package/src/authz/require-level-guard.ts +42 -0
  302. package/src/clock.ts +18 -0
  303. package/src/concurrency/keyed-queue.ts +50 -0
  304. package/src/concurrency/run-with-concurrency.ts +44 -0
  305. package/src/config/env.ts +58 -0
  306. package/src/config/errors.ts +21 -0
  307. package/src/datetime.ts +221 -0
  308. package/src/discord/api-errors.ts +91 -0
  309. package/src/discord/channel-exporter.ts +48 -0
  310. package/src/discord/command/autocomplete-dispatcher.ts +54 -0
  311. package/src/discord/command/autocomplete.ts +76 -0
  312. package/src/discord/command/context.ts +85 -0
  313. package/src/discord/command/cooldown-guard.ts +81 -0
  314. package/src/discord/command/create-command.ts +431 -0
  315. package/src/discord/command/create-context-menu-command.ts +227 -0
  316. package/src/discord/command/errors.ts +22 -0
  317. package/src/discord/command/guard.ts +54 -0
  318. package/src/discord/command/localization.ts +11 -0
  319. package/src/discord/command/options.ts +847 -0
  320. package/src/discord/command/permission-guard.ts +74 -0
  321. package/src/discord/command/router.ts +142 -0
  322. package/src/discord/command/types.ts +52 -0
  323. package/src/discord/components/component-router.ts +213 -0
  324. package/src/discord/components/interactive-message/index.ts +18 -0
  325. package/src/discord/components/interactive-message/interactive-message-collector.ts +374 -0
  326. package/src/discord/components/interactive-message/mount-interactive-message.ts +71 -0
  327. package/src/discord/components/paginator/index.ts +17 -0
  328. package/src/discord/components/paginator/mount-paginator.ts +69 -0
  329. package/src/discord/components/paginator/page-state.ts +45 -0
  330. package/src/discord/components/paginator/paginator-buttons.ts +60 -0
  331. package/src/discord/components/paginator/paginator-view.ts +61 -0
  332. package/src/discord/components/persistent-paginator.ts +197 -0
  333. package/src/discord/components/settings-editor/index.ts +41 -0
  334. package/src/discord/components/settings-editor/mount-settings-editor.ts +646 -0
  335. package/src/discord/components/settings-editor/navigation.ts +67 -0
  336. package/src/discord/components/settings-editor/settings-editor-card.view.ts +344 -0
  337. package/src/discord/components/settings-editor/settings-editor-field-modal.ts +538 -0
  338. package/src/discord/components/settings-editor/settings-editor-fields.ts +290 -0
  339. package/src/discord/components/settings-editor/settings-editor.view.ts +654 -0
  340. package/src/discord/events/create-event.ts +7 -0
  341. package/src/discord/events/event-router.ts +53 -0
  342. package/src/discord/events/types.ts +17 -0
  343. package/src/discord/i18n.ts +173 -0
  344. package/src/discord/interaction/button.ts +75 -0
  345. package/src/discord/interaction/interaction-router.ts +28 -0
  346. package/src/discord/interaction/modal.ts +505 -0
  347. package/src/discord/interaction/select-menu.ts +246 -0
  348. package/src/discord/permissions.ts +57 -0
  349. package/src/discord/placeholder-registry-errors.ts +11 -0
  350. package/src/discord/placeholder-registry.ts +77 -0
  351. package/src/discord/presenter.ts +26 -0
  352. package/src/discord/ui/card.ts +303 -0
  353. package/src/discord/ui/color-input-errors.ts +17 -0
  354. package/src/discord/ui/color-input.ts +179 -0
  355. package/src/discord/ui/colors.ts +58 -0
  356. package/src/discord/ui/embed.ts +64 -0
  357. package/src/discord/ui/message-attachments.ts +57 -0
  358. package/src/errors/business-error.ts +49 -0
  359. package/src/errors/describe-error.ts +73 -0
  360. package/src/errors/incident-ref.ts +10 -0
  361. package/src/errors/index.ts +12 -0
  362. package/src/i18n/business-message.ts +23 -0
  363. package/src/i18n/catalog.ts +41 -0
  364. package/src/i18n/errors.ts +11 -0
  365. package/src/i18n/index.ts +11 -0
  366. package/src/i18n/locale.ts +41 -0
  367. package/src/i18n/translator.ts +78 -0
  368. package/src/logger.ts +28 -0
  369. package/src/module/module.ts +42 -0
  370. package/src/persistence/database.ts +23 -0
  371. package/src/resilience/retry.ts +102 -0
  372. package/src/scheduler/errors.ts +40 -0
  373. package/src/scheduler/scheduler.ts +248 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-context-menu-command.js","sourceRoot":"","sources":["../../../src/discord/command/create-context-menu-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { ValidationError } from "../../errors";
2
+ /**
3
+ * Raised when a slash command option is declared or read in a way discord.js
4
+ * cannot honour (an unsupported `choices` call, a value that fails parsing).
5
+ * A `ValidationError`, so the command pipeline renders it as user feedback
6
+ * rather than an incident.
7
+ */
8
+ export declare class OptionValidationError extends ValidationError {
9
+ }
10
+ /**
11
+ * Raised when a context-menu interaction does not carry the target its command
12
+ * was declared for. Discord routes an interaction to the command it was
13
+ * registered as, so this signals a misregistration rather than user input —
14
+ * hence a plain `Error`, rendered as an incident with a reference.
15
+ */
16
+ export declare class ContextMenuTargetError extends Error {
17
+ constructor(commandName: string, expected: string);
18
+ }
19
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/discord/command/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;;;;GAKG;AACH,qBAAa,qBAAsB,SAAQ,eAAe;CAAG;AAE7D;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;gBACpC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAIjD"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ContextMenuTargetError = exports.OptionValidationError = void 0;
4
+ const errors_1 = require("../../errors");
5
+ /**
6
+ * Raised when a slash command option is declared or read in a way discord.js
7
+ * cannot honour (an unsupported `choices` call, a value that fails parsing).
8
+ * A `ValidationError`, so the command pipeline renders it as user feedback
9
+ * rather than an incident.
10
+ */
11
+ class OptionValidationError extends errors_1.ValidationError {
12
+ }
13
+ exports.OptionValidationError = OptionValidationError;
14
+ /**
15
+ * Raised when a context-menu interaction does not carry the target its command
16
+ * was declared for. Discord routes an interaction to the command it was
17
+ * registered as, so this signals a misregistration rather than user input —
18
+ * hence a plain `Error`, rendered as an incident with a reference.
19
+ */
20
+ class ContextMenuTargetError extends Error {
21
+ constructor(commandName, expected) {
22
+ super(`Context menu command "${commandName}" expected a ${expected} target.`);
23
+ this.name = "ContextMenuTargetError";
24
+ }
25
+ }
26
+ exports.ContextMenuTargetError = ContextMenuTargetError;
27
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/discord/command/errors.ts"],"names":[],"mappings":";;;AAAA,qCAA2C;AAE3C;;;;;GAKG;AACH,MAAa,qBAAsB,SAAQ,wBAAe;CAAG;AAA7D,sDAA6D;AAE7D;;;;;GAKG;AACH,MAAa,sBAAuB,SAAQ,KAAK;IAChD,YAAY,WAAmB,EAAE,QAAgB;QAChD,KAAK,CAAC,yBAAyB,WAAW,gBAAgB,QAAQ,UAAU,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACtC,CAAC;CACD;AALD,wDAKC"}
@@ -0,0 +1,30 @@
1
+ import type { CommandInteraction } from "discord.js";
2
+ import type { LocalizedText } from "../../i18n";
3
+ export type GuardResult = {
4
+ ok: true;
5
+ } | {
6
+ ok: false;
7
+ message: LocalizedText;
8
+ };
9
+ /**
10
+ * An authorization check run before a command/subcommand handler. Guards are
11
+ * generic by design: the core defines the contract, while concrete rules (admin,
12
+ * role, ownership…) live in the feature module that owns the relevant state.
13
+ *
14
+ * Typed on `CommandInteraction` — the base shared by chat-input and context-menu
15
+ * commands — so one guard protects both kinds without a cast.
16
+ *
17
+ * `check` is a *property* with a function type, not a method: TypeScript checks
18
+ * method parameters bivariantly, which would let a guard written for
19
+ * `ChatInputCommandInteraction` be attached to a context-menu command and read
20
+ * options that interaction never carries. As a property it is contravariant, so
21
+ * that mistake is a compile error.
22
+ */
23
+ export interface Guard {
24
+ readonly check: (interaction: CommandInteraction) => GuardResult | Promise<GuardResult>;
25
+ }
26
+ /** Compose guards: every guard must pass, short-circuiting on the first denial. */
27
+ export declare function allOf(...guards: Guard[]): Guard;
28
+ /** Pass when any guard passes; otherwise deny with `denyMessage`. */
29
+ export declare function anyOf(denyMessage: LocalizedText, ...guards: Guard[]): Guard;
30
+ //# sourceMappingURL=guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../../../src/discord/command/guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAAC;AAE/E;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,KAAK;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,kBAAkB,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACxF;AAID,mFAAmF;AACnF,wBAAgB,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAY/C;AAED,qEAAqE;AACrE,wBAAgB,KAAK,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAY3E"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.allOf = allOf;
4
+ exports.anyOf = anyOf;
5
+ const ALLOW = { ok: true };
6
+ /** Compose guards: every guard must pass, short-circuiting on the first denial. */
7
+ function allOf(...guards) {
8
+ return {
9
+ async check(interaction) {
10
+ for (const guard of guards) {
11
+ const result = await guard.check(interaction);
12
+ if (!result.ok) {
13
+ return result;
14
+ }
15
+ }
16
+ return ALLOW;
17
+ },
18
+ };
19
+ }
20
+ /** Pass when any guard passes; otherwise deny with `denyMessage`. */
21
+ function anyOf(denyMessage, ...guards) {
22
+ return {
23
+ async check(interaction) {
24
+ for (const guard of guards) {
25
+ const result = await guard.check(interaction);
26
+ if (result.ok) {
27
+ return ALLOW;
28
+ }
29
+ }
30
+ return { ok: false, message: denyMessage };
31
+ },
32
+ };
33
+ }
34
+ //# sourceMappingURL=guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guard.js","sourceRoot":"","sources":["../../../src/discord/command/guard.ts"],"names":[],"mappings":";;AA0BA,sBAYC;AAGD,sBAYC;AA9BD,MAAM,KAAK,GAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAExC,mFAAmF;AACnF,SAAgB,KAAK,CAAC,GAAG,MAAe;IACvC,OAAO;QACN,KAAK,CAAC,KAAK,CAAC,WAAW;YACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC9C,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;oBAChB,OAAO,MAAM,CAAC;gBACf,CAAC;YACF,CAAC;YACD,OAAO,KAAK,CAAC;QACd,CAAC;KACD,CAAC;AACH,CAAC;AAED,qEAAqE;AACrE,SAAgB,KAAK,CAAC,WAA0B,EAAE,GAAG,MAAe;IACnE,OAAO;QACN,KAAK,CAAC,KAAK,CAAC,WAAW;YACtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAC9C,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;oBACf,OAAO,KAAK,CAAC;gBACd,CAAC;YACF,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;QAC5C,CAAC;KACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { LocalizationMap } from "discord.js";
2
+ /**
3
+ * The single discord.js locale code for French, mapped to the given text. This
4
+ * bot's commands, subcommands and options default to English, so this is what
5
+ * adds the French translation without repeating `{ fr: ... }` at every call
6
+ * site.
7
+ */
8
+ export declare function frenchLocalization(text: string): LocalizationMap;
9
+ //# sourceMappingURL=localization.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localization.d.ts","sourceRoot":"","sources":["../../../src/discord/command/localization.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAEhE"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.frenchLocalization = frenchLocalization;
4
+ /**
5
+ * The single discord.js locale code for French, mapped to the given text. This
6
+ * bot's commands, subcommands and options default to English, so this is what
7
+ * adds the French translation without repeating `{ fr: ... }` at every call
8
+ * site.
9
+ */
10
+ function frenchLocalization(text) {
11
+ return { fr: text };
12
+ }
13
+ //# sourceMappingURL=localization.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localization.js","sourceRoot":"","sources":["../../../src/discord/command/localization.ts"],"names":[],"mappings":";;AAQA,gDAEC;AARD;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC9C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACrB,CAAC"}
@@ -0,0 +1,113 @@
1
+ import type { ApplicationCommandOptionAllowedChannelTypes, Attachment, AutocompleteInteraction, ChannelType, ChatInputCommandInteraction, GuildBasedChannel, LocalizationMap, Role, SlashCommandAttachmentOption, SlashCommandBooleanOption, SlashCommandChannelOption, SlashCommandIntegerOption, SlashCommandMentionableOption, SlashCommandNumberOption, SlashCommandRoleOption, SlashCommandStringOption, SlashCommandUserOption, User } from "discord.js";
2
+ /**
3
+ * Translated name/description for a single option, keyed by Discord locale
4
+ * (e.g. `{ nameLocalizations: { "en-US": "channel", "en-GB": "channel" } }`).
5
+ * Every `create*Option` factory accepts this so an option's picker label can be
6
+ * localised the same way a command/subcommand name already can.
7
+ */
8
+ export interface OptionLocalizations {
9
+ nameLocalizations?: LocalizationMap;
10
+ descriptionLocalizations?: LocalizationMap;
11
+ }
12
+ /**
13
+ * The subset of a discord.js builder an option needs to register itself.
14
+ * Both `SlashCommandBuilder` (flat commands) and `SlashCommandSubcommandBuilder`
15
+ * satisfy this structurally, so the same option works on either.
16
+ */
17
+ export interface OptionContainer {
18
+ addStringOption(input: (option: SlashCommandStringOption) => SlashCommandStringOption): unknown;
19
+ addUserOption(input: (option: SlashCommandUserOption) => SlashCommandUserOption): unknown;
20
+ addBooleanOption(input: (option: SlashCommandBooleanOption) => SlashCommandBooleanOption): unknown;
21
+ addIntegerOption(input: (option: SlashCommandIntegerOption) => SlashCommandIntegerOption): unknown;
22
+ addNumberOption(input: (option: SlashCommandNumberOption) => SlashCommandNumberOption): unknown;
23
+ addChannelOption(input: (option: SlashCommandChannelOption) => SlashCommandChannelOption): unknown;
24
+ addRoleOption(input: (option: SlashCommandRoleOption) => SlashCommandRoleOption): unknown;
25
+ addMentionableOption(input: (option: SlashCommandMentionableOption) => SlashCommandMentionableOption): unknown;
26
+ addAttachmentOption(input: (option: SlashCommandAttachmentOption) => SlashCommandAttachmentOption): unknown;
27
+ }
28
+ /** A single suggestion returned to Discord while the user types. */
29
+ export interface Choice {
30
+ readonly name: string;
31
+ readonly value: string | number;
32
+ }
33
+ /**
34
+ * Computes the suggestions for a focused option. Sync resolvers are allowed so a
35
+ * static list does not have to pay for a promise.
36
+ */
37
+ export type AutocompleteResolver = (interaction: AutocompleteInteraction) => Promise<readonly Choice[]> | readonly Choice[];
38
+ export interface Option<TValue, TRequired extends boolean> {
39
+ readonly description: string;
40
+ readonly isRequired: TRequired;
41
+ /** Present only on the option types Discord lets us autocomplete. */
42
+ readonly autocomplete?: AutocompleteResolver;
43
+ required(): Option<TValue, true>;
44
+ choices<const C extends readonly TValue[]>(values: C): Option<C[number], TRequired>;
45
+ apply(container: OptionContainer, name: string): void;
46
+ read(interaction: ChatInputCommandInteraction, name: string): TRequired extends true ? TValue : TValue | null;
47
+ }
48
+ /**
49
+ * The option types Discord accepts `autocomplete` on (string, integer, number).
50
+ * `required()` is narrowed so `.withAutocomplete()` stays reachable after it,
51
+ * while `choices()` deliberately falls back to a plain `Option`: Discord forbids
52
+ * combining both, so the illegal chain is unrepresentable rather than merely
53
+ * rejected at registration.
54
+ */
55
+ export interface AutocompletableOption<TValue, TRequired extends boolean> extends Option<TValue, TRequired> {
56
+ required(): AutocompletableOption<TValue, true>;
57
+ withAutocomplete(resolver: AutocompleteResolver): AutocompletableOption<TValue, TRequired>;
58
+ }
59
+ export type Options = Record<string, Option<unknown, boolean>>;
60
+ export type Values<O extends Options> = {
61
+ [K in keyof O]: O[K] extends Option<infer V, infer R> ? (R extends true ? V : V | null) : never;
62
+ };
63
+ /** Length limits for a string option, mirroring the numeric bounds below. */
64
+ interface StringLengthBounds {
65
+ minLength?: number;
66
+ maxLength?: number;
67
+ }
68
+ export declare function createStringOption(description: string, bounds?: StringLengthBounds, localizations?: OptionLocalizations): AutocompletableOption<string, false>;
69
+ export declare function createUserOption(description: string, localizations?: OptionLocalizations): Option<User, false>;
70
+ export declare function createBooleanOption(description: string, localizations?: OptionLocalizations): Option<boolean, false>;
71
+ interface IntegerBounds {
72
+ min?: number;
73
+ max?: number;
74
+ }
75
+ export declare function createIntegerOption(description: string, bounds?: IntegerBounds, localizations?: OptionLocalizations): AutocompletableOption<number, false>;
76
+ export declare function createNumberOption(description: string, bounds?: IntegerBounds, localizations?: OptionLocalizations): AutocompletableOption<number, false>;
77
+ export declare function createDateTimeOption(description: string, localizations?: OptionLocalizations): Option<Date, false>;
78
+ /**
79
+ * A `YYYY-MM-DD[ HH:MM[:SS]]` string option, validated against the wall-clock
80
+ * grammar but left unanchored (no `Date` conversion, no assumed timezone) — the
81
+ * caller anchors it with `zonedWallClockToUtc` once it knows the guild zone.
82
+ */
83
+ export declare function createWallClockOption(description: string, localizations?: OptionLocalizations): Option<string, false>;
84
+ /**
85
+ * A strict date-only (`YYYY-MM-DD`) option. The returned `Date` is UTC
86
+ * midnight of that calendar day — a caller that needs it anchored to a guild
87
+ * timezone (start/end of that guild-local day) uses `startOfGuildDay`/
88
+ * `endOfGuildDay` from `core/datetime`.
89
+ */
90
+ export declare function createDateOption(description: string, localizations?: OptionLocalizations): Option<Date, false>;
91
+ /** The channel types Discord accepts on a channel option (guild channels only). */
92
+ type AllowedChannelType = ApplicationCommandOptionAllowedChannelTypes;
93
+ /**
94
+ * Narrows the guild channel union to the declared channel types, mirroring the
95
+ * `Extract<>` mapping of `CommandInteractionOptionResolver.getChannel`. The
96
+ * thread ternary is load-bearing: `PublicThreadChannel.type` is
97
+ * `PublicThread | AnnouncementThread`, so extracting on a single one of them
98
+ * would collapse to `never`.
99
+ */
100
+ export type ChannelOptionValue<TType extends AllowedChannelType> = Extract<GuildBasedChannel, {
101
+ type: TType extends ChannelType.PublicThread | ChannelType.AnnouncementThread ? ChannelType.PublicThread | ChannelType.AnnouncementThread : TType;
102
+ }>;
103
+ export declare function createChannelOption<const TType extends AllowedChannelType = AllowedChannelType>(description: string, channelTypes?: readonly TType[], localizations?: OptionLocalizations): Option<ChannelOptionValue<TType>, false>;
104
+ export declare function createRoleOption(description: string, localizations?: OptionLocalizations): Option<Role, false>;
105
+ export declare function createMentionableOption(description: string, localizations?: OptionLocalizations): Option<Role | User, false>;
106
+ export declare function createAttachmentOption(description: string, localizations?: OptionLocalizations): Option<Attachment, false>;
107
+ type AsRequired<O> = O extends Option<infer V, boolean> ? Option<V, true> : never;
108
+ /** Turn every option in a record into its required variant. */
109
+ export declare function allRequired<O extends Options>(fields: O): {
110
+ [K in keyof O]: AsRequired<O[K]>;
111
+ };
112
+ export {};
113
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/discord/command/options.ts"],"names":[],"mappings":"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"}