@honeybbq/teamspeak 0.0.1 → 1.0.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +726 -2
  3. package/dist/client/abort.d.ts +5 -0
  4. package/dist/client/abort.d.ts.map +1 -0
  5. package/dist/client/abort.js +23 -0
  6. package/dist/client/abort.js.map +1 -0
  7. package/dist/client/address.d.ts +17 -0
  8. package/dist/client/address.d.ts.map +1 -0
  9. package/dist/client/address.js +66 -0
  10. package/dist/client/address.js.map +1 -0
  11. package/dist/client/api/voice.d.ts +24 -0
  12. package/dist/client/api/voice.d.ts.map +1 -0
  13. package/dist/client/api/voice.js +33 -0
  14. package/dist/client/api/voice.js.map +1 -0
  15. package/dist/client/capabilities.d.ts +68 -0
  16. package/dist/client/capabilities.d.ts.map +1 -0
  17. package/dist/client/capabilities.js +59 -0
  18. package/dist/client/capabilities.js.map +1 -0
  19. package/dist/client/client.d.ts +196 -0
  20. package/dist/client/client.d.ts.map +1 -0
  21. package/dist/client/client.js +1523 -0
  22. package/dist/client/client.js.map +1 -0
  23. package/dist/client/commands.d.ts +66 -0
  24. package/dist/client/commands.d.ts.map +1 -0
  25. package/dist/client/commands.js +162 -0
  26. package/dist/client/commands.js.map +1 -0
  27. package/dist/client/crypto/crypt-ops.d.ts +7 -0
  28. package/dist/client/crypto/crypt-ops.d.ts.map +1 -0
  29. package/dist/client/crypto/crypt-ops.js +2 -0
  30. package/dist/client/crypto/crypt-ops.js.map +1 -0
  31. package/dist/client/crypto/crypt.d.ts +37 -0
  32. package/dist/client/crypto/crypt.d.ts.map +1 -0
  33. package/dist/client/crypto/crypt.js +203 -0
  34. package/dist/client/crypto/crypt.js.map +1 -0
  35. package/dist/client/crypto/eax.d.ts +12 -0
  36. package/dist/client/crypto/eax.d.ts.map +1 -0
  37. package/dist/client/crypto/eax.js +118 -0
  38. package/dist/client/crypto/eax.js.map +1 -0
  39. package/dist/client/crypto/identity.d.ts +97 -0
  40. package/dist/client/crypto/identity.d.ts.map +1 -0
  41. package/dist/client/crypto/identity.js +412 -0
  42. package/dist/client/crypto/identity.js.map +1 -0
  43. package/dist/client/crypto/index.d.ts +7 -0
  44. package/dist/client/crypto/index.d.ts.map +1 -0
  45. package/dist/client/crypto/index.js +5 -0
  46. package/dist/client/crypto/index.js.map +1 -0
  47. package/dist/client/crypto/primitives.d.ts +43 -0
  48. package/dist/client/crypto/primitives.d.ts.map +1 -0
  49. package/dist/client/crypto/primitives.js +116 -0
  50. package/dist/client/crypto/primitives.js.map +1 -0
  51. package/dist/client/diagnostics.d.ts +45 -0
  52. package/dist/client/diagnostics.d.ts.map +1 -0
  53. package/dist/client/diagnostics.js +30 -0
  54. package/dist/client/diagnostics.js.map +1 -0
  55. package/dist/client/discovery/index.d.ts +2 -0
  56. package/dist/client/discovery/index.d.ts.map +1 -0
  57. package/dist/client/discovery/index.js +2 -0
  58. package/dist/client/discovery/index.js.map +1 -0
  59. package/dist/client/discovery/resolver.d.ts +26 -0
  60. package/dist/client/discovery/resolver.d.ts.map +1 -0
  61. package/dist/client/discovery/resolver.js +275 -0
  62. package/dist/client/discovery/resolver.js.map +1 -0
  63. package/dist/client/errors.d.ts +82 -0
  64. package/dist/client/errors.d.ts.map +1 -0
  65. package/dist/client/errors.js +201 -0
  66. package/dist/client/errors.js.map +1 -0
  67. package/dist/client/events.d.ts +3 -0
  68. package/dist/client/events.d.ts.map +1 -0
  69. package/dist/client/events.js +8 -0
  70. package/dist/client/events.js.map +1 -0
  71. package/dist/client/handshake/crypt-handshake.d.ts +17 -0
  72. package/dist/client/handshake/crypt-handshake.d.ts.map +1 -0
  73. package/dist/client/handshake/crypt-handshake.js +128 -0
  74. package/dist/client/handshake/crypt-handshake.js.map +1 -0
  75. package/dist/client/handshake/crypt-init2.d.ts +7 -0
  76. package/dist/client/handshake/crypt-init2.d.ts.map +1 -0
  77. package/dist/client/handshake/crypt-init2.js +37 -0
  78. package/dist/client/handshake/crypt-init2.js.map +1 -0
  79. package/dist/client/handshake/index.d.ts +4 -0
  80. package/dist/client/handshake/index.d.ts.map +1 -0
  81. package/dist/client/handshake/index.js +4 -0
  82. package/dist/client/handshake/index.js.map +1 -0
  83. package/dist/client/handshake/license.d.ts +35 -0
  84. package/dist/client/handshake/license.d.ts.map +1 -0
  85. package/dist/client/handshake/license.js +169 -0
  86. package/dist/client/handshake/license.js.map +1 -0
  87. package/dist/client/handshake.d.ts +27 -0
  88. package/dist/client/handshake.d.ts.map +1 -0
  89. package/dist/client/handshake.js +126 -0
  90. package/dist/client/handshake.js.map +1 -0
  91. package/dist/client/helpers.d.ts +6 -0
  92. package/dist/client/helpers.d.ts.map +1 -0
  93. package/dist/client/helpers.js +13 -0
  94. package/dist/client/helpers.js.map +1 -0
  95. package/dist/client/hooks.d.ts +7 -0
  96. package/dist/client/hooks.d.ts.map +1 -0
  97. package/dist/client/hooks.js +28 -0
  98. package/dist/client/hooks.js.map +1 -0
  99. package/dist/client/index.d.ts +26 -0
  100. package/dist/client/index.d.ts.map +1 -0
  101. package/dist/client/index.js +28 -0
  102. package/dist/client/index.js.map +1 -0
  103. package/dist/client/reconnect.d.ts +12 -0
  104. package/dist/client/reconnect.d.ts.map +1 -0
  105. package/dist/client/reconnect.js +44 -0
  106. package/dist/client/reconnect.js.map +1 -0
  107. package/dist/client/throttle.d.ts +20 -0
  108. package/dist/client/throttle.d.ts.map +1 -0
  109. package/dist/client/throttle.js +83 -0
  110. package/dist/client/throttle.js.map +1 -0
  111. package/dist/client/trace.d.ts +223 -0
  112. package/dist/client/trace.d.ts.map +1 -0
  113. package/dist/client/trace.js +13 -0
  114. package/dist/client/trace.js.map +1 -0
  115. package/dist/client/transfer.d.ts +111 -0
  116. package/dist/client/transfer.d.ts.map +1 -0
  117. package/dist/client/transfer.js +243 -0
  118. package/dist/client/transfer.js.map +1 -0
  119. package/dist/client/transport/generation-window.d.ts +30 -0
  120. package/dist/client/transport/generation-window.d.ts.map +1 -0
  121. package/dist/client/transport/generation-window.js +97 -0
  122. package/dist/client/transport/generation-window.js.map +1 -0
  123. package/dist/client/transport/handler.d.ts +61 -0
  124. package/dist/client/transport/handler.d.ts.map +1 -0
  125. package/dist/client/transport/handler.js +793 -0
  126. package/dist/client/transport/handler.js.map +1 -0
  127. package/dist/client/transport/index.d.ts +6 -0
  128. package/dist/client/transport/index.d.ts.map +1 -0
  129. package/dist/client/transport/index.js +5 -0
  130. package/dist/client/transport/index.js.map +1 -0
  131. package/dist/client/transport/packet.d.ts +36 -0
  132. package/dist/client/transport/packet.d.ts.map +1 -0
  133. package/dist/client/transport/packet.js +55 -0
  134. package/dist/client/transport/packet.js.map +1 -0
  135. package/dist/client/transport/quicklz.d.ts +24 -0
  136. package/dist/client/transport/quicklz.d.ts.map +1 -0
  137. package/dist/client/transport/quicklz.js +179 -0
  138. package/dist/client/transport/quicklz.js.map +1 -0
  139. package/dist/client/types.d.ts +226 -0
  140. package/dist/client/types.d.ts.map +1 -0
  141. package/dist/client/types.js +39 -0
  142. package/dist/client/types.js.map +1 -0
  143. package/dist/core/api/channels.d.ts +182 -0
  144. package/dist/core/api/channels.d.ts.map +1 -0
  145. package/dist/core/api/channels.js +155 -0
  146. package/dist/core/api/channels.js.map +1 -0
  147. package/dist/core/api/clients.d.ts +304 -0
  148. package/dist/core/api/clients.d.ts.map +1 -0
  149. package/dist/core/api/clients.js +260 -0
  150. package/dist/core/api/clients.js.map +1 -0
  151. package/dist/core/api/command.d.ts +305 -0
  152. package/dist/core/api/command.d.ts.map +1 -0
  153. package/dist/core/api/command.js +363 -0
  154. package/dist/core/api/command.js.map +1 -0
  155. package/dist/core/api/files.d.ts +153 -0
  156. package/dist/core/api/files.d.ts.map +1 -0
  157. package/dist/core/api/files.js +181 -0
  158. package/dist/core/api/files.js.map +1 -0
  159. package/dist/core/api/groups.d.ts +248 -0
  160. package/dist/core/api/groups.d.ts.map +1 -0
  161. package/dist/core/api/groups.js +271 -0
  162. package/dist/core/api/groups.js.map +1 -0
  163. package/dist/core/api/moderation.d.ts +205 -0
  164. package/dist/core/api/moderation.d.ts.map +1 -0
  165. package/dist/core/api/moderation.js +209 -0
  166. package/dist/core/api/moderation.js.map +1 -0
  167. package/dist/core/api/parse.d.ts +16 -0
  168. package/dist/core/api/parse.d.ts.map +1 -0
  169. package/dist/core/api/parse.js +40 -0
  170. package/dist/core/api/parse.js.map +1 -0
  171. package/dist/core/api/server.d.ts +310 -0
  172. package/dist/core/api/server.d.ts.map +1 -0
  173. package/dist/core/api/server.js +290 -0
  174. package/dist/core/api/server.js.map +1 -0
  175. package/dist/core/command/command.d.ts +20 -0
  176. package/dist/core/command/command.d.ts.map +1 -0
  177. package/dist/core/command/command.js +112 -0
  178. package/dist/core/command/command.js.map +1 -0
  179. package/dist/core/command/ids.d.ts +125 -0
  180. package/dist/core/command/ids.d.ts.map +1 -0
  181. package/dist/core/command/ids.js +85 -0
  182. package/dist/core/command/ids.js.map +1 -0
  183. package/dist/core/command/parser.d.ts +17 -0
  184. package/dist/core/command/parser.d.ts.map +1 -0
  185. package/dist/core/command/parser.js +65 -0
  186. package/dist/core/command/parser.js.map +1 -0
  187. package/dist/core/command/request.d.ts +61 -0
  188. package/dist/core/command/request.d.ts.map +1 -0
  189. package/dist/core/command/request.js +64 -0
  190. package/dist/core/command/request.js.map +1 -0
  191. package/dist/core/command/responses.d.ts +59 -0
  192. package/dist/core/command/responses.d.ts.map +1 -0
  193. package/dist/core/command/responses.js +74 -0
  194. package/dist/core/command/responses.js.map +1 -0
  195. package/dist/core/command-name.d.ts +333 -0
  196. package/dist/core/command-name.d.ts.map +1 -0
  197. package/dist/core/command-name.js +331 -0
  198. package/dist/core/command-name.js.map +1 -0
  199. package/dist/core/enums.d.ts +146 -0
  200. package/dist/core/enums.d.ts.map +1 -0
  201. package/dist/core/enums.js +132 -0
  202. package/dist/core/enums.js.map +1 -0
  203. package/dist/core/errorcode.d.ts +413 -0
  204. package/dist/core/errorcode.d.ts.map +1 -0
  205. package/dist/core/errorcode.js +410 -0
  206. package/dist/core/errorcode.js.map +1 -0
  207. package/dist/core/errors.d.ts +111 -0
  208. package/dist/core/errors.d.ts.map +1 -0
  209. package/dist/core/errors.js +233 -0
  210. package/dist/core/errors.js.map +1 -0
  211. package/dist/core/events.d.ts +207 -0
  212. package/dist/core/events.d.ts.map +1 -0
  213. package/dist/core/events.js +6 -0
  214. package/dist/core/events.js.map +1 -0
  215. package/dist/core/helpers.d.ts +42 -0
  216. package/dist/core/helpers.d.ts.map +1 -0
  217. package/dist/core/helpers.js +156 -0
  218. package/dist/core/helpers.js.map +1 -0
  219. package/dist/core/index.d.ts +35 -0
  220. package/dist/core/index.d.ts.map +1 -0
  221. package/dist/core/index.js +34 -0
  222. package/dist/core/index.js.map +1 -0
  223. package/dist/core/internal.d.ts +23 -0
  224. package/dist/core/internal.d.ts.map +1 -0
  225. package/dist/core/internal.js +20 -0
  226. package/dist/core/internal.js.map +1 -0
  227. package/dist/core/middleware.d.ts +14 -0
  228. package/dist/core/middleware.d.ts.map +1 -0
  229. package/dist/core/middleware.js +18 -0
  230. package/dist/core/middleware.js.map +1 -0
  231. package/dist/core/notification-name.d.ts +154 -0
  232. package/dist/core/notification-name.d.ts.map +1 -0
  233. package/dist/core/notification-name.js +152 -0
  234. package/dist/core/notification-name.js.map +1 -0
  235. package/dist/core/notifications.d.ts +43 -0
  236. package/dist/core/notifications.d.ts.map +1 -0
  237. package/dist/core/notifications.js +116 -0
  238. package/dist/core/notifications.js.map +1 -0
  239. package/dist/core/permission-name.d.ts +533 -0
  240. package/dist/core/permission-name.d.ts.map +1 -0
  241. package/dist/core/permission-name.js +531 -0
  242. package/dist/core/permission-name.js.map +1 -0
  243. package/dist/core/permission.d.ts +31 -0
  244. package/dist/core/permission.d.ts.map +1 -0
  245. package/dist/core/permission.js +20 -0
  246. package/dist/core/permission.js.map +1 -0
  247. package/dist/core/property-name.d.ts +403 -0
  248. package/dist/core/property-name.d.ts.map +1 -0
  249. package/dist/core/property-name.js +405 -0
  250. package/dist/core/property-name.js.map +1 -0
  251. package/dist/core/reason.d.ts +39 -0
  252. package/dist/core/reason.d.ts.map +1 -0
  253. package/dist/core/reason.js +36 -0
  254. package/dist/core/reason.js.map +1 -0
  255. package/dist/core/reconnect.d.ts +59 -0
  256. package/dist/core/reconnect.d.ts.map +1 -0
  257. package/dist/core/reconnect.js +55 -0
  258. package/dist/core/reconnect.js.map +1 -0
  259. package/dist/core/types.d.ts +110 -0
  260. package/dist/core/types.d.ts.map +1 -0
  261. package/dist/core/types.js +27 -0
  262. package/dist/core/types.js.map +1 -0
  263. package/dist/query/client.d.ts +194 -0
  264. package/dist/query/client.d.ts.map +1 -0
  265. package/dist/query/client.js +967 -0
  266. package/dist/query/client.js.map +1 -0
  267. package/dist/query/errors.d.ts +61 -0
  268. package/dist/query/errors.d.ts.map +1 -0
  269. package/dist/query/errors.js +100 -0
  270. package/dist/query/errors.js.map +1 -0
  271. package/dist/query/index.d.ts +36 -0
  272. package/dist/query/index.d.ts.map +1 -0
  273. package/dist/query/index.js +34 -0
  274. package/dist/query/index.js.map +1 -0
  275. package/dist/query/knownhosts.d.ts +61 -0
  276. package/dist/query/knownhosts.d.ts.map +1 -0
  277. package/dist/query/knownhosts.js +223 -0
  278. package/dist/query/knownhosts.js.map +1 -0
  279. package/dist/query/lines.d.ts +14 -0
  280. package/dist/query/lines.d.ts.map +1 -0
  281. package/dist/query/lines.js +29 -0
  282. package/dist/query/lines.js.map +1 -0
  283. package/dist/query/options.d.ts +187 -0
  284. package/dist/query/options.d.ts.map +1 -0
  285. package/dist/query/options.js +213 -0
  286. package/dist/query/options.js.map +1 -0
  287. package/dist/query/reconnect.d.ts +29 -0
  288. package/dist/query/reconnect.d.ts.map +1 -0
  289. package/dist/query/reconnect.js +87 -0
  290. package/dist/query/reconnect.js.map +1 -0
  291. package/dist/query/ssh.d.ts +345 -0
  292. package/dist/query/ssh.d.ts.map +1 -0
  293. package/dist/query/ssh.js +241 -0
  294. package/dist/query/ssh.js.map +1 -0
  295. package/dist/query/stream.d.ts +38 -0
  296. package/dist/query/stream.d.ts.map +1 -0
  297. package/dist/query/stream.js +70 -0
  298. package/dist/query/stream.js.map +1 -0
  299. package/dist/query/tcp.d.ts +38 -0
  300. package/dist/query/tcp.d.ts.map +1 -0
  301. package/dist/query/tcp.js +53 -0
  302. package/dist/query/tcp.js.map +1 -0
  303. package/dist/query/transport.d.ts +36 -0
  304. package/dist/query/transport.d.ts.map +1 -0
  305. package/dist/query/transport.js +2 -0
  306. package/dist/query/transport.js.map +1 -0
  307. package/dist/query/web.d.ts +54 -0
  308. package/dist/query/web.d.ts.map +1 -0
  309. package/dist/query/web.js +146 -0
  310. package/dist/query/web.js.map +1 -0
  311. package/dist/versions/index.d.ts +3094 -0
  312. package/dist/versions/index.d.ts.map +1 -0
  313. package/dist/versions/index.js +9237 -0
  314. package/dist/versions/index.js.map +1 -0
  315. package/package.json +118 -4
  316. package/src/client/abort.ts +24 -0
  317. package/src/client/address.ts +74 -0
  318. package/src/client/api/voice.ts +61 -0
  319. package/src/client/capabilities.ts +106 -0
  320. package/src/client/client.ts +1809 -0
  321. package/src/client/commands.ts +193 -0
  322. package/src/client/crypto/crypt-ops.ts +6 -0
  323. package/src/client/crypto/crypt.ts +275 -0
  324. package/src/client/crypto/eax.ts +152 -0
  325. package/src/client/crypto/identity.ts +484 -0
  326. package/src/client/crypto/index.ts +21 -0
  327. package/src/client/crypto/primitives.ts +141 -0
  328. package/src/client/diagnostics.ts +58 -0
  329. package/src/client/discovery/index.ts +1 -0
  330. package/src/client/discovery/resolver.ts +325 -0
  331. package/src/client/errors.ts +217 -0
  332. package/src/client/events.ts +12 -0
  333. package/src/client/handshake/crypt-handshake.ts +157 -0
  334. package/src/client/handshake/crypt-init2.ts +48 -0
  335. package/src/client/handshake/index.ts +3 -0
  336. package/src/client/handshake/license.ts +208 -0
  337. package/src/client/handshake.ts +150 -0
  338. package/src/client/helpers.ts +10 -0
  339. package/src/client/hooks.ts +30 -0
  340. package/src/client/index.ts +93 -0
  341. package/src/client/reconnect.ts +43 -0
  342. package/src/client/throttle.ts +92 -0
  343. package/src/client/trace.ts +237 -0
  344. package/src/client/transfer.ts +436 -0
  345. package/src/client/transport/generation-window.ts +108 -0
  346. package/src/client/transport/handler.ts +926 -0
  347. package/src/client/transport/index.ts +14 -0
  348. package/src/client/transport/packet.ts +69 -0
  349. package/src/client/transport/quicklz.ts +209 -0
  350. package/src/client/types.ts +268 -0
  351. package/src/core/api/channels.ts +396 -0
  352. package/src/core/api/clients.ts +654 -0
  353. package/src/core/api/command.ts +563 -0
  354. package/src/core/api/files.ts +405 -0
  355. package/src/core/api/groups.ts +622 -0
  356. package/src/core/api/moderation.ts +525 -0
  357. package/src/core/api/parse.ts +52 -0
  358. package/src/core/api/server.ts +709 -0
  359. package/src/core/command/command.ts +125 -0
  360. package/src/core/command/ids.ts +149 -0
  361. package/src/core/command/parser.ts +68 -0
  362. package/src/core/command/request.ts +119 -0
  363. package/src/core/command/responses.ts +114 -0
  364. package/src/core/command-name.ts +334 -0
  365. package/src/core/enums.ts +167 -0
  366. package/src/core/errorcode.ts +412 -0
  367. package/src/core/errors.ts +258 -0
  368. package/src/core/events.ts +219 -0
  369. package/src/core/helpers.ts +161 -0
  370. package/src/core/index.ts +126 -0
  371. package/src/core/internal.ts +23 -0
  372. package/src/core/middleware.ts +24 -0
  373. package/src/core/notification-name.ts +155 -0
  374. package/src/core/notifications.ts +157 -0
  375. package/src/core/permission-name.ts +538 -0
  376. package/src/core/permission.ts +34 -0
  377. package/src/core/property-name.ts +411 -0
  378. package/src/core/reason.ts +38 -0
  379. package/src/core/reconnect.ts +98 -0
  380. package/src/core/types.ts +138 -0
  381. package/src/query/client.ts +1132 -0
  382. package/src/query/errors.ts +108 -0
  383. package/src/query/index.ts +65 -0
  384. package/src/query/knownhosts.ts +257 -0
  385. package/src/query/lines.ts +28 -0
  386. package/src/query/options.ts +388 -0
  387. package/src/query/reconnect.ts +84 -0
  388. package/src/query/ssh.ts +614 -0
  389. package/src/query/stream.ts +91 -0
  390. package/src/query/tcp.ts +85 -0
  391. package/src/query/transport.ts +35 -0
  392. package/src/query/web.ts +195 -0
  393. package/src/versions/index.ts +10774 -0
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Channel groups, the permission catalogue, and the privilege keys that grant groups.
3
+ */
4
+ import { nonZero, uint, U32, firstRow, exec, query, list, encodeFields, nonEmpty, parsePermission, permissionParam, createdGroupID, str, big, num, bool, icon, date, } from "./command.js";
5
+ import { asChannelGroupID, asChannelID, asClientDBID, asPermissionID, asServerGroupID, } from "../command/ids.js";
6
+ import { PermissionTarget, PrivilegeKeyType } from "../enums.js";
7
+ const parseChannelGroup = (row) => ({
8
+ id: asChannelGroupID(big(row, "cgid")),
9
+ name: str(row, "name"),
10
+ type: num(row, "type"),
11
+ iconID: icon(row, "iconid"),
12
+ savedInDatabase: bool(row, "savedb"),
13
+ sortID: num(row, "sortid"),
14
+ nameMode: num(row, "namemode"),
15
+ modifyPower: num(row, "n_modifyp"),
16
+ memberAddPower: num(row, "n_member_addp"),
17
+ memberRemovePower: num(row, "n_member_removep"),
18
+ });
19
+ /** Every channel group. */
20
+ export async function listChannelGroups(client, options) {
21
+ return (await list(client, "channelgrouplist", [], options)).map(parseChannelGroup);
22
+ }
23
+ /**
24
+ * Create a channel group.
25
+ *
26
+ * `type` is required, and always sent: the server's own default is
27
+ * `GroupType.Regular`, while the type's first value is `Template`, so leaving
28
+ * it to a default on either side is a trap.
29
+ */
30
+ export async function createChannelGroup(client, name, type, options) {
31
+ const rows = await query(client, "channelgroupadd", [
32
+ ["name", name],
33
+ ["type", type],
34
+ ], options);
35
+ return asChannelGroupID(createdGroupID(rows, "cgid", name, "channelgroupadd"));
36
+ }
37
+ /** Delete a channel group. */
38
+ export async function deleteChannelGroup(client, cgid, options = {}) {
39
+ await exec(client, "channelgroupdel", [
40
+ ["cgid", cgid],
41
+ ["force", options.force ?? false],
42
+ ], options);
43
+ }
44
+ /** Rename a channel group. */
45
+ export async function renameChannelGroup(client, cgid, name, options) {
46
+ await exec(client, "channelgrouprename", [
47
+ ["cgid", cgid],
48
+ ["name", name],
49
+ ], options);
50
+ }
51
+ /**
52
+ * Copy a channel group's permissions onto another; a `targetGroupID` of 0
53
+ * makes the server create a new group named `name`, of `type`.
54
+ */
55
+ export async function copyChannelGroup(client, sourceGroupID, targetGroupID, name, type, options) {
56
+ const rows = await query(client, "channelgroupcopy", [
57
+ ["scgid", sourceGroupID],
58
+ ["tcgid", targetGroupID],
59
+ ["name", name],
60
+ ["type", type],
61
+ ], options);
62
+ // Copying onto an existing group keeps that group's id.
63
+ if (targetGroupID !== 0n)
64
+ return targetGroupID;
65
+ return asChannelGroupID(createdGroupID(rows, "cgid", name, "channelgroupcopy"));
66
+ }
67
+ // A filter of 0 matches nothing in particular, so it is omitted, as unset is.
68
+ const membershipFilterNames = {
69
+ channelID: ["cid", nonZero],
70
+ databaseID: ["cldbid", nonZero],
71
+ groupID: ["cgid", nonZero],
72
+ };
73
+ /**
74
+ * Which channel group each client holds in which channel.
75
+ *
76
+ * Set at least one filter field to narrow it; called with none the server may
77
+ * return nothing.
78
+ */
79
+ export async function listChannelGroupClients(client, options = {}) {
80
+ const rows = await list(client, "channelgroupclientlist", encodeFields(options, membershipFilterNames), options);
81
+ return rows.map((row) => ({
82
+ channelID: asChannelID(big(row, "cid")),
83
+ databaseID: asClientDBID(big(row, "cldbid")),
84
+ groupID: asChannelGroupID(big(row, "cgid")),
85
+ }));
86
+ }
87
+ /** Permissions set on a channel group. */
88
+ export async function listChannelGroupPermissions(client, cgid, options) {
89
+ return (await list(client, "channelgrouppermlist", [["cgid", cgid]], options)).map(parsePermission);
90
+ }
91
+ /** Set a permission on a channel group. */
92
+ export async function addChannelGroupPermission(client, cgid, permission, value, options) {
93
+ await exec(client, "channelgroupaddperm", [["cgid", cgid], permissionParam(permission), ["permvalue", value]], options);
94
+ }
95
+ /** Remove a permission from a channel group. */
96
+ export async function deleteChannelGroupPermission(client, cgid, permission, options) {
97
+ await exec(client, "channelgroupdelperm", [["cgid", cgid], permissionParam(permission)], options);
98
+ }
99
+ /**
100
+ * The server's full permission catalogue.
101
+ *
102
+ * Rows that name no permission — the group markers some servers interleave —
103
+ * are left out.
104
+ *
105
+ * ServerQuery sends each permission's id. The voice protocol sends none: there
106
+ * a permission's id is its place in the list, counting from 1, which `id` is
107
+ * set to.
108
+ */
109
+ export async function listPermissions(client, options) {
110
+ const rows = await list(client, "permissionlist", [], options);
111
+ return rows
112
+ .filter((row) => row["permname"] !== undefined)
113
+ .map((row, index) => ({
114
+ id: asPermissionID(row["permid"] === undefined ? index + 1 : uint(row, "permid", U32)),
115
+ name: str(row, "permname"),
116
+ description: str(row, "permdesc"),
117
+ }));
118
+ }
119
+ /**
120
+ * Resolve a permission name to its numeric id, or undefined when the server
121
+ * knows no such permission.
122
+ *
123
+ * Needs an instance-level permission (`b_serverinstance_*`), which not even the
124
+ * Server Admin group holds by default — expect error 2568 until it is granted.
125
+ * Granted, it works over the voice protocol like any other query.
126
+ */
127
+ export async function getPermissionIDByName(client, name, options) {
128
+ const rows = await query(client, "permidgetbyname", [["permsid", name]], options);
129
+ if (rows.length === 0)
130
+ return undefined;
131
+ return asPermissionID(uint(firstRow(rows, "permidgetbyname", "permid"), "permid", U32));
132
+ }
133
+ /** Read a location from a `permfind` or `permoverview` row; undefined for an unknown target. */
134
+ function parseLocation(row) {
135
+ const permission = asPermissionID(uint(row, "p", U32));
136
+ const id1 = big(row, "id1");
137
+ const id2 = big(row, "id2");
138
+ switch (num(row, "t")) {
139
+ case PermissionTarget.ServerGroup:
140
+ return {
141
+ target: PermissionTarget.ServerGroup,
142
+ serverGroupID: asServerGroupID(id1),
143
+ permission,
144
+ };
145
+ case PermissionTarget.Client:
146
+ return { target: PermissionTarget.Client, databaseID: asClientDBID(id1), permission };
147
+ case PermissionTarget.Channel:
148
+ return { target: PermissionTarget.Channel, channelID: asChannelID(id1), permission };
149
+ case PermissionTarget.ChannelGroup:
150
+ return {
151
+ target: PermissionTarget.ChannelGroup,
152
+ channelID: asChannelID(id1),
153
+ channelGroupID: asChannelGroupID(id2),
154
+ permission,
155
+ };
156
+ case PermissionTarget.ChannelClient:
157
+ return {
158
+ target: PermissionTarget.ChannelClient,
159
+ channelID: asChannelID(id1),
160
+ databaseID: asClientDBID(id2),
161
+ permission,
162
+ };
163
+ default:
164
+ return undefined;
165
+ }
166
+ }
167
+ /** Every place a permission is set. */
168
+ export async function findPermission(client, permission, options) {
169
+ const rows = await list(client, "permfind", [permissionParam(permission)], options);
170
+ return rows.flatMap((row) => parseLocation(row) ?? []);
171
+ }
172
+ /**
173
+ * Every permission that applies to a client in a channel, from every source,
174
+ * unfiltered.
175
+ *
176
+ * It always asks for all of them (`permid=0`): the server requires a
177
+ * permission parameter — omitting it fails with 1539 — and treats 0 as "all".
178
+ * Each entry names its permission, so one is easy to pick out.
179
+ */
180
+ export async function getPermissionOverview(client, cid, cldbid, options) {
181
+ const rows = await list(client, "permoverview", [
182
+ ["cid", cid],
183
+ ["cldbid", cldbid],
184
+ ["permid", 0],
185
+ ], options);
186
+ return rows.flatMap((row) => {
187
+ const location = parseLocation(row);
188
+ if (location === undefined)
189
+ return [];
190
+ return [{ ...location, value: num(row, "v"), negated: bool(row, "n"), skip: bool(row, "s") }];
191
+ });
192
+ }
193
+ /**
194
+ * Wipe all permission overrides and restore the defaults.
195
+ *
196
+ * Destructive: every custom permission on the server goes. It also drops the
197
+ * caller's own rights, because it resets the group they rely on.
198
+ */
199
+ export async function resetPermissions(client, options) {
200
+ await exec(client, "permreset", [], options);
201
+ }
202
+ /**
203
+ * Read a key. The wire carries the group as `token_id1` and the channel as
204
+ * `token_id2`, whichever kind of group it is; which typed field each belongs in
205
+ * depends on the token type.
206
+ */
207
+ const parseKey = (row) => {
208
+ const type = num(row, "token_type");
209
+ const channelGroup = type === PrivilegeKeyType.ChannelGroup;
210
+ return {
211
+ token: str(row, "token"),
212
+ type,
213
+ serverGroupID: channelGroup ? undefined : asServerGroupID(big(row, "token_id1")),
214
+ channelGroupID: channelGroup ? asChannelGroupID(big(row, "token_id1")) : undefined,
215
+ channelID: channelGroup ? asChannelID(big(row, "token_id2")) : undefined,
216
+ description: str(row, "token_description"),
217
+ createdAt: date(row, "token_created"),
218
+ };
219
+ };
220
+ /** Every privilege key on the server. */
221
+ export async function listPrivilegeKeys(client, options) {
222
+ return (await list(client, "privilegekeylist", [], options)).map(parseKey);
223
+ }
224
+ /**
225
+ * Encode the group a key grants.
226
+ *
227
+ * The wire form is a type and two untyped ids whose meaning depends on it:
228
+ * `tokenid1` is the group and `tokenid2` the channel. The options used to take
229
+ * them as such, documented the other way round, so the typed fields are checked
230
+ * here to describe exactly one kind of key.
231
+ */
232
+ function keyParams(key) {
233
+ const { serverGroupID, channelGroupID, channelID } = key;
234
+ const isID = (v) => typeof v === "bigint" && v > 0n;
235
+ const description = nonEmpty(key.description ?? "");
236
+ if (isID(serverGroupID) && channelGroupID === undefined && channelID === undefined) {
237
+ return [
238
+ ["tokentype", PrivilegeKeyType.ServerGroup],
239
+ ["tokenid1", serverGroupID],
240
+ ["tokenid2", 0],
241
+ ["tokendescription", description],
242
+ ];
243
+ }
244
+ if (serverGroupID === undefined && isID(channelGroupID) && isID(channelID)) {
245
+ return [
246
+ ["tokentype", PrivilegeKeyType.ChannelGroup],
247
+ ["tokenid1", channelGroupID],
248
+ ["tokenid2", channelID],
249
+ ["tokendescription", description],
250
+ ];
251
+ }
252
+ throw new TypeError("a key grants a server group, or a channel group in a channel");
253
+ }
254
+ /** Create a privilege key. Returns the key as the server generated it. */
255
+ export async function addPrivilegeKey(client, key, options) {
256
+ const rows = await query(client, "privilegekeyadd", keyParams(key), options);
257
+ return str(firstRow(rows, "privilegekeyadd", "token"), "token");
258
+ }
259
+ /** Delete a privilege key. */
260
+ export async function deletePrivilegeKey(client, token, options) {
261
+ await exec(client, "privilegekeydelete", [["token", token]], options);
262
+ }
263
+ /**
264
+ * Redeem a privilege key.
265
+ *
266
+ * The key grants only if this connection has not already used one.
267
+ */
268
+ export async function usePrivilegeKey(client, token, options) {
269
+ await exec(client, "privilegekeyuse", [["token", token]], options);
270
+ }
271
+ //# sourceMappingURL=groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.js","sourceRoot":"","sources":["../../../src/core/api/groups.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Bans, complaints, offline messages, text messages and the server log.
3
+ *
4
+ * All administrative: expect a permission error, not an empty list, when the
5
+ * client lacks the rights.
6
+ */
7
+ import type { CommandExecutor, CommandOptions } from "../command/request.js";
8
+ import type { BanID, ClientDBID, ClientID, MessageID, UID } from "../command/ids.js";
9
+ import type { LogLevel } from "../enums.js";
10
+ /** A ban, as `banlist` reports it. */
11
+ export interface BanEntry {
12
+ /** The ban's id. */
13
+ readonly id: BanID;
14
+ /** The address pattern the ban matches, or "". */
15
+ readonly ip: string;
16
+ /** The nickname pattern the ban matches, or "". */
17
+ readonly name: string;
18
+ /** The unique identifier the ban matches, or "". */
19
+ readonly uid: UID;
20
+ /** The nickname of the last client the ban caught. */
21
+ readonly lastNickname: string;
22
+ /** When the ban was made. */
23
+ readonly createdAt: Date | undefined;
24
+ /**
25
+ * How long the ban lasts from `createdAt`, in milliseconds; 0 is a
26
+ * permanent ban. The server reports it in seconds.
27
+ */
28
+ readonly durationMs: number;
29
+ /** Who made the ban. */
30
+ readonly invokerDatabaseID: ClientDBID;
31
+ /** Their nickname. */
32
+ readonly invokerName: string;
33
+ /** Their unique identifier. */
34
+ readonly invokerUID: UID;
35
+ /** The reason given. */
36
+ readonly reason: string;
37
+ /** How many times the ban has turned a client away. */
38
+ readonly enforcements: number;
39
+ }
40
+ /** Every active ban. A server with none answers an empty list. */
41
+ export declare function listBans(client: CommandExecutor, options?: CommandOptions): Promise<BanEntry[]>;
42
+ /**
43
+ * What a ban matches, how long it lasts and why: the ban itself, never a
44
+ * command's options. `ip` and `name` are regular expressions matched against
45
+ * a client's address and nickname.
46
+ *
47
+ * Unset fields are omitted, and an empty string is treated as unset in every
48
+ * field here, never sent: an empty pattern would match every client.
49
+ */
50
+ export interface BanFields {
51
+ /** The address pattern to ban (`ip`). */
52
+ readonly ip?: string | undefined;
53
+ /** The nickname pattern to ban (`name`). */
54
+ readonly name?: string | undefined;
55
+ /** The unique identifier to ban (`uid`). */
56
+ readonly uid?: UID | undefined;
57
+ /** The reason, shown to the banned client (`banreason`). */
58
+ readonly reason?: string | undefined;
59
+ /**
60
+ * How long the ban lasts, in milliseconds (`time`); unset or 0 is permanent.
61
+ * Sent in whole seconds, and a positive duration under a second is sent as
62
+ * one rather than rounded down to forever.
63
+ */
64
+ readonly durationMs?: number | undefined;
65
+ }
66
+ /**
67
+ * A ban to add: {@link BanFields}, at least one of `ip`, `name` or `uid` set; a
68
+ * ban matching nothing is refused before anything is sent. It carries no
69
+ * signal or timeoutMs: those are addBan's separate last argument.
70
+ */
71
+ export type BanOptions = BanFields;
72
+ /**
73
+ * How long {@link banClient}'s bans last and why — {@link BanFields}' duration
74
+ * and reason — with the command's signal and timeoutMs, as the last argument.
75
+ */
76
+ export interface BanClientOptions extends Pick<BanFields, "durationMs" | "reason">, CommandOptions {
77
+ }
78
+ /**
79
+ * Add a ban and return its id — over ServerQuery. The voice protocol reports
80
+ * no id, so there this resolves to undefined.
81
+ *
82
+ * `ban` is what to ban; the command's `signal` and `timeoutMs` go in `options`,
83
+ * a separate last argument — set among the fields, they are not read.
84
+ */
85
+ export declare function addBan(client: CommandExecutor, ban: BanOptions, options?: CommandOptions): Promise<BanID | undefined>;
86
+ /**
87
+ * Ban a connected client by clid, and return the id of every ban that made.
88
+ *
89
+ * The server bans the client on several counts at once — its address, its
90
+ * uid, and on TS6 its myTeamSpeak id — and over ServerQuery answers one
91
+ * `banid` row for each; returning the first left the others to be found by
92
+ * hand. The voice protocol reports no ids, so there this resolves to `[]`.
93
+ */
94
+ export declare function banClient(client: CommandExecutor, clid: ClientID, options?: BanClientOptions): Promise<BanID[]>;
95
+ /** Remove a ban. */
96
+ export declare function deleteBan(client: CommandExecutor, banID: BanID, options?: CommandOptions): Promise<void>;
97
+ /** Remove every ban. */
98
+ export declare function deleteAllBans(client: CommandExecutor, options?: CommandOptions): Promise<void>;
99
+ /** A complaint one client filed against another. */
100
+ export interface Complaint {
101
+ /** Who the complaint is about. */
102
+ readonly targetDatabaseID: ClientDBID;
103
+ /** Their nickname. */
104
+ readonly targetName: string;
105
+ /** Who filed it. */
106
+ readonly fromDatabaseID: ClientDBID;
107
+ /** Their nickname. */
108
+ readonly fromName: string;
109
+ /** The complaint. */
110
+ readonly message: string;
111
+ /** When it was filed. */
112
+ readonly createdAt: Date | undefined;
113
+ }
114
+ /** Which complaints {@link listComplaints} reports. */
115
+ export interface ComplaintListOptions extends CommandOptions {
116
+ /** Only those against this client; unset for all (`tcldbid`). */
117
+ readonly targetDatabaseID?: ClientDBID | undefined;
118
+ }
119
+ /** Complaints, optionally only those against one client. */
120
+ export declare function listComplaints(client: CommandExecutor, options?: ComplaintListOptions): Promise<Complaint[]>;
121
+ /** File a complaint against a client. */
122
+ export declare function addComplaint(client: CommandExecutor, targetDatabaseID: ClientDBID, message: string, options?: CommandOptions): Promise<void>;
123
+ /** Withdraw one complaint. */
124
+ export declare function deleteComplaint(client: CommandExecutor, targetDatabaseID: ClientDBID, fromDatabaseID: ClientDBID, options?: CommandOptions): Promise<void>;
125
+ /** Withdraw every complaint against a client. */
126
+ export declare function deleteAllComplaints(client: CommandExecutor, targetDatabaseID: ClientDBID, options?: CommandOptions): Promise<void>;
127
+ /** A message left for a client while they were away. */
128
+ export interface OfflineMessage {
129
+ /** The message's id. */
130
+ readonly id: MessageID;
131
+ /** The sender's unique identifier. */
132
+ readonly uid: UID;
133
+ /** The subject. */
134
+ readonly subject: string;
135
+ /** The message; `messagelist` leaves it out, `getMessage` has it. */
136
+ readonly message: string;
137
+ /** When it was sent. */
138
+ readonly sentAt: Date | undefined;
139
+ /** Whether it has been read. */
140
+ readonly isRead: boolean;
141
+ }
142
+ /** Offline messages for this client. None is an empty list. */
143
+ export declare function listMessages(client: CommandExecutor, options?: CommandOptions): Promise<OfflineMessage[]>;
144
+ /** One offline message, with its text. */
145
+ export declare function getMessage(client: CommandExecutor, messageID: MessageID, options?: CommandOptions): Promise<OfflineMessage>;
146
+ /** Delete an offline message. */
147
+ export declare function deleteMessage(client: CommandExecutor, messageID: MessageID, options?: CommandOptions): Promise<void>;
148
+ /** The flags of an offline message that can be changed. */
149
+ export interface MessageFlags {
150
+ /** Whether the message is marked read (`flag`). */
151
+ readonly read: boolean;
152
+ }
153
+ /** Mark a message read or unread. */
154
+ export declare function updateMessageFlag(client: CommandExecutor, messageID: MessageID, flags: MessageFlags, options?: CommandOptions): Promise<void>;
155
+ /** Send a text message to one client. */
156
+ export declare function sendPrivateMessage(client: CommandExecutor, clid: ClientID, message: string, options?: CommandOptions): Promise<void>;
157
+ /**
158
+ * Send a text message to the channel this connection is in.
159
+ *
160
+ * It takes no channel because the server takes none: measured on TS3 and TS6,
161
+ * a channel message naming another channel still arrives in the sender's own.
162
+ * To write to another channel, move there first.
163
+ */
164
+ export declare function sendChannelMessage(client: CommandExecutor, message: string, options?: CommandOptions): Promise<void>;
165
+ /** Send a text message to everyone on the virtual server. */
166
+ export declare function sendServerMessage(client: CommandExecutor, message: string, options?: CommandOptions): Promise<void>;
167
+ /** One read of the server log. */
168
+ export interface LogPage {
169
+ /** The lines read, in the order the server sent them. */
170
+ readonly lines: readonly string[];
171
+ /**
172
+ * The byte offset the read stopped at. Pass it as the next read's
173
+ * `beginPosition` to continue from there.
174
+ */
175
+ readonly lastPosition: number;
176
+ /** The log file's size in bytes. */
177
+ readonly fileSize: number;
178
+ }
179
+ /**
180
+ * Which part of the log {@link viewLog} reads. Unset fields are omitted, and
181
+ * left to the server.
182
+ *
183
+ * The log is paged by byte offset rather than by row, and nothing says when
184
+ * the walk is done, so there is no iterator as there is for the client
185
+ * database: read a page, then pass its `lastPosition` as the next read's
186
+ * `beginPosition`.
187
+ */
188
+ export interface LogViewOptions extends CommandOptions {
189
+ /** How many lines to read, at most 100; unset or 0 leaves it to the server (`lines`). */
190
+ readonly lines?: number | undefined;
191
+ /** Read backwards from `beginPosition`, newest line first; false by default (`reverse`, always sent). */
192
+ readonly reverse?: boolean | undefined;
193
+ /** Read the instance log rather than the virtual server's; false by default (`instance`, always sent). */
194
+ readonly instance?: boolean | undefined;
195
+ /**
196
+ * The byte offset to read from; 0 is the start of the log, and unset leaves
197
+ * where to start to the server (`begin_pos`).
198
+ */
199
+ readonly beginPosition?: number | undefined;
200
+ }
201
+ /** Read a page of the server log. */
202
+ export declare function viewLog(client: CommandExecutor, options?: LogViewOptions): Promise<LogPage>;
203
+ /** Write an entry to the server log. */
204
+ export declare function addLog(client: CommandExecutor, level: LogLevel, message: string, options?: CommandOptions): Promise<void>;
205
+ //# sourceMappingURL=moderation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moderation.d.ts","sourceRoot":"","sources":["../../../src/core/api/moderation.ts"],"names":[],"mappings":"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"}