@openmouse/protocol 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 (547) hide show
  1. package/CONTRIBUTING.md +167 -0
  2. package/README.md +89 -0
  3. package/dist/asus/index.d.ts +52 -0
  4. package/dist/asus/index.d.ts.map +1 -0
  5. package/dist/asus/index.js +248 -0
  6. package/dist/asus/index.js.map +1 -0
  7. package/dist/atk/index.d.ts +200 -0
  8. package/dist/atk/index.d.ts.map +1 -0
  9. package/dist/atk/index.js +480 -0
  10. package/dist/atk/index.js.map +1 -0
  11. package/dist/bitmouse/index.d.ts +284 -0
  12. package/dist/bitmouse/index.d.ts.map +1 -0
  13. package/dist/bitmouse/index.js +396 -0
  14. package/dist/bitmouse/index.js.map +1 -0
  15. package/dist/compx/codec.d.ts +31 -0
  16. package/dist/compx/codec.d.ts.map +1 -0
  17. package/dist/compx/codec.js +50 -0
  18. package/dist/compx/codec.js.map +1 -0
  19. package/dist/corsair/index.d.ts +147 -0
  20. package/dist/corsair/index.d.ts.map +1 -0
  21. package/dist/corsair/index.js +223 -0
  22. package/dist/corsair/index.js.map +1 -0
  23. package/dist/dareu/index.d.ts +136 -0
  24. package/dist/dareu/index.d.ts.map +1 -0
  25. package/dist/dareu/index.js +344 -0
  26. package/dist/dareu/index.js.map +1 -0
  27. package/dist/drivers/asus/hid.d.ts +29 -0
  28. package/dist/drivers/asus/hid.d.ts.map +1 -0
  29. package/dist/drivers/asus/hid.js +419 -0
  30. package/dist/drivers/asus/hid.js.map +1 -0
  31. package/dist/drivers/atk/bitmouse-hid.d.ts +80 -0
  32. package/dist/drivers/atk/bitmouse-hid.d.ts.map +1 -0
  33. package/dist/drivers/atk/bitmouse-hid.js +501 -0
  34. package/dist/drivers/atk/bitmouse-hid.js.map +1 -0
  35. package/dist/drivers/atk/hid.d.ts +163 -0
  36. package/dist/drivers/atk/hid.d.ts.map +1 -0
  37. package/dist/drivers/atk/hid.js +1368 -0
  38. package/dist/drivers/atk/hid.js.map +1 -0
  39. package/dist/drivers/atk/products.d.ts +13 -0
  40. package/dist/drivers/atk/products.d.ts.map +1 -0
  41. package/dist/drivers/atk/products.js +13 -0
  42. package/dist/drivers/atk/products.js.map +1 -0
  43. package/dist/drivers/attackshark/dpi.d.ts +41 -0
  44. package/dist/drivers/attackshark/dpi.d.ts.map +1 -0
  45. package/dist/drivers/attackshark/dpi.js +215 -0
  46. package/dist/drivers/attackshark/dpi.js.map +1 -0
  47. package/dist/drivers/attackshark/hid.d.ts +124 -0
  48. package/dist/drivers/attackshark/hid.d.ts.map +1 -0
  49. package/dist/drivers/attackshark/hid.js +728 -0
  50. package/dist/drivers/attackshark/hid.js.map +1 -0
  51. package/dist/drivers/corsair/hid.d.ts +70 -0
  52. package/dist/drivers/corsair/hid.d.ts.map +1 -0
  53. package/dist/drivers/corsair/hid.js +414 -0
  54. package/dist/drivers/corsair/hid.js.map +1 -0
  55. package/dist/drivers/dareu/hid.d.ts +59 -0
  56. package/dist/drivers/dareu/hid.d.ts.map +1 -0
  57. package/dist/drivers/dareu/hid.js +478 -0
  58. package/dist/drivers/dareu/hid.js.map +1 -0
  59. package/dist/drivers/endgame/egg-op1-hid.d.ts +107 -0
  60. package/dist/drivers/endgame/egg-op1-hid.d.ts.map +1 -0
  61. package/dist/drivers/endgame/egg-op1-hid.js +605 -0
  62. package/dist/drivers/endgame/egg-op1-hid.js.map +1 -0
  63. package/dist/drivers/endgame/egg-we-control.d.ts +42 -0
  64. package/dist/drivers/endgame/egg-we-control.d.ts.map +1 -0
  65. package/dist/drivers/endgame/egg-we-control.js +87 -0
  66. package/dist/drivers/endgame/egg-we-control.js.map +1 -0
  67. package/dist/drivers/endgame/egg-we-hid.d.ts +58 -0
  68. package/dist/drivers/endgame/egg-we-hid.d.ts.map +1 -0
  69. package/dist/drivers/endgame/egg-we-hid.js +514 -0
  70. package/dist/drivers/endgame/egg-we-hid.js.map +1 -0
  71. package/dist/drivers/fantech/hid.d.ts +106 -0
  72. package/dist/drivers/fantech/hid.d.ts.map +1 -0
  73. package/dist/drivers/fantech/hid.js +295 -0
  74. package/dist/drivers/fantech/hid.js.map +1 -0
  75. package/dist/drivers/finalmouse/hid.d.ts +31 -0
  76. package/dist/drivers/finalmouse/hid.d.ts.map +1 -0
  77. package/dist/drivers/finalmouse/hid.js +181 -0
  78. package/dist/drivers/finalmouse/hid.js.map +1 -0
  79. package/dist/drivers/gearhub/hid.d.ts +191 -0
  80. package/dist/drivers/gearhub/hid.d.ts.map +1 -0
  81. package/dist/drivers/gearhub/hid.js +542 -0
  82. package/dist/drivers/gearhub/hid.js.map +1 -0
  83. package/dist/drivers/glorious/classic-hid.d.ts +62 -0
  84. package/dist/drivers/glorious/classic-hid.d.ts.map +1 -0
  85. package/dist/drivers/glorious/classic-hid.js +326 -0
  86. package/dist/drivers/glorious/classic-hid.js.map +1 -0
  87. package/dist/drivers/glorious/hid.d.ts +39 -0
  88. package/dist/drivers/glorious/hid.d.ts.map +1 -0
  89. package/dist/drivers/glorious/hid.js +203 -0
  90. package/dist/drivers/glorious/hid.js.map +1 -0
  91. package/dist/drivers/gwolves/hid.d.ts +27 -0
  92. package/dist/drivers/gwolves/hid.d.ts.map +1 -0
  93. package/dist/drivers/gwolves/hid.js +225 -0
  94. package/dist/drivers/gwolves/hid.js.map +1 -0
  95. package/dist/drivers/gwolves/products.d.ts +17 -0
  96. package/dist/drivers/gwolves/products.d.ts.map +1 -0
  97. package/dist/drivers/gwolves/products.js +58 -0
  98. package/dist/drivers/gwolves/products.js.map +1 -0
  99. package/dist/drivers/hyperx/hid.d.ts +59 -0
  100. package/dist/drivers/hyperx/hid.d.ts.map +1 -0
  101. package/dist/drivers/hyperx/hid.js +229 -0
  102. package/dist/drivers/hyperx/hid.js.map +1 -0
  103. package/dist/drivers/incott/hid.d.ts +513 -0
  104. package/dist/drivers/incott/hid.d.ts.map +1 -0
  105. package/dist/drivers/incott/hid.js +1173 -0
  106. package/dist/drivers/incott/hid.js.map +1 -0
  107. package/dist/drivers/index.d.ts +5 -0
  108. package/dist/drivers/index.d.ts.map +1 -0
  109. package/dist/drivers/index.js +5 -0
  110. package/dist/drivers/index.js.map +1 -0
  111. package/dist/drivers/keychron/m6-hid.d.ts +81 -0
  112. package/dist/drivers/keychron/m6-hid.d.ts.map +1 -0
  113. package/dist/drivers/keychron/m6-hid.js +486 -0
  114. package/dist/drivers/keychron/m6-hid.js.map +1 -0
  115. package/dist/drivers/keychron/nape-hid.d.ts +60 -0
  116. package/dist/drivers/keychron/nape-hid.d.ts.map +1 -0
  117. package/dist/drivers/keychron/nape-hid.js +432 -0
  118. package/dist/drivers/keychron/nape-hid.js.map +1 -0
  119. package/dist/drivers/ksnake/hid.d.ts +74 -0
  120. package/dist/drivers/ksnake/hid.d.ts.map +1 -0
  121. package/dist/drivers/ksnake/hid.js +368 -0
  122. package/dist/drivers/ksnake/hid.js.map +1 -0
  123. package/dist/drivers/lamzu/hid.d.ts +58 -0
  124. package/dist/drivers/lamzu/hid.d.ts.map +1 -0
  125. package/dist/drivers/lamzu/hid.js +414 -0
  126. package/dist/drivers/lamzu/hid.js.map +1 -0
  127. package/dist/drivers/lamzu-atlantis/hid.d.ts +148 -0
  128. package/dist/drivers/lamzu-atlantis/hid.d.ts.map +1 -0
  129. package/dist/drivers/lamzu-atlantis/hid.js +587 -0
  130. package/dist/drivers/lamzu-atlantis/hid.js.map +1 -0
  131. package/dist/drivers/logitech/bolt.d.ts +41 -0
  132. package/dist/drivers/logitech/bolt.d.ts.map +1 -0
  133. package/dist/drivers/logitech/bolt.js +105 -0
  134. package/dist/drivers/logitech/bolt.js.map +1 -0
  135. package/dist/drivers/logitech/hidpp.d.ts +525 -0
  136. package/dist/drivers/logitech/hidpp.d.ts.map +1 -0
  137. package/dist/drivers/logitech/hidpp.js +2774 -0
  138. package/dist/drivers/logitech/hidpp.js.map +1 -0
  139. package/dist/drivers/logitech/mode-status.d.ts +53 -0
  140. package/dist/drivers/logitech/mode-status.d.ts.map +1 -0
  141. package/dist/drivers/logitech/mode-status.js +52 -0
  142. package/dist/drivers/logitech/mode-status.js.map +1 -0
  143. package/dist/drivers/logitech/onboard-profiles.d.ts +298 -0
  144. package/dist/drivers/logitech/onboard-profiles.d.ts.map +1 -0
  145. package/dist/drivers/logitech/onboard-profiles.js +965 -0
  146. package/dist/drivers/logitech/onboard-profiles.js.map +1 -0
  147. package/dist/drivers/logitech/rgb-effects.d.ts +20 -0
  148. package/dist/drivers/logitech/rgb-effects.d.ts.map +1 -0
  149. package/dist/drivers/logitech/rgb-effects.js +93 -0
  150. package/dist/drivers/logitech/rgb-effects.js.map +1 -0
  151. package/dist/drivers/mchose/a5-gen1-hid.d.ts +36 -0
  152. package/dist/drivers/mchose/a5-gen1-hid.d.ts.map +1 -0
  153. package/dist/drivers/mchose/a5-gen1-hid.js +219 -0
  154. package/dist/drivers/mchose/a5-gen1-hid.js.map +1 -0
  155. package/dist/drivers/mchose/dock-hid.d.ts +26 -0
  156. package/dist/drivers/mchose/dock-hid.d.ts.map +1 -0
  157. package/dist/drivers/mchose/dock-hid.js +176 -0
  158. package/dist/drivers/mchose/dock-hid.js.map +1 -0
  159. package/dist/drivers/mchose/hid.d.ts +118 -0
  160. package/dist/drivers/mchose/hid.d.ts.map +1 -0
  161. package/dist/drivers/mchose/hid.js +550 -0
  162. package/dist/drivers/mchose/hid.js.map +1 -0
  163. package/dist/drivers/mchose/v3-hid.d.ts +109 -0
  164. package/dist/drivers/mchose/v3-hid.d.ts.map +1 -0
  165. package/dist/drivers/mchose/v3-hid.js +572 -0
  166. package/dist/drivers/mchose/v3-hid.js.map +1 -0
  167. package/dist/drivers/microsoft/hid.d.ts +25 -0
  168. package/dist/drivers/microsoft/hid.d.ts.map +1 -0
  169. package/dist/drivers/microsoft/hid.js +247 -0
  170. package/dist/drivers/microsoft/hid.js.map +1 -0
  171. package/dist/drivers/moddo/hid.d.ts +31 -0
  172. package/dist/drivers/moddo/hid.d.ts.map +1 -0
  173. package/dist/drivers/moddo/hid.js +154 -0
  174. package/dist/drivers/moddo/hid.js.map +1 -0
  175. package/dist/drivers/mouse-types.d.ts +388 -0
  176. package/dist/drivers/mouse-types.d.ts.map +1 -0
  177. package/dist/drivers/mouse-types.js +2 -0
  178. package/dist/drivers/mouse-types.js.map +1 -0
  179. package/dist/drivers/ninjutso/hid.d.ts +62 -0
  180. package/dist/drivers/ninjutso/hid.d.ts.map +1 -0
  181. package/dist/drivers/ninjutso/hid.js +680 -0
  182. package/dist/drivers/ninjutso/hid.js.map +1 -0
  183. package/dist/drivers/orbital/hid.d.ts +24 -0
  184. package/dist/drivers/orbital/hid.d.ts.map +1 -0
  185. package/dist/drivers/orbital/hid.js +85 -0
  186. package/dist/drivers/orbital/hid.js.map +1 -0
  187. package/dist/drivers/orbital/host-protocol.d.ts +59 -0
  188. package/dist/drivers/orbital/host-protocol.d.ts.map +1 -0
  189. package/dist/drivers/orbital/host-protocol.js +884 -0
  190. package/dist/drivers/orbital/host-protocol.js.map +1 -0
  191. package/dist/drivers/pulsar/pulsar-hid.d.ts +63 -0
  192. package/dist/drivers/pulsar/pulsar-hid.d.ts.map +1 -0
  193. package/dist/drivers/pulsar/pulsar-hid.js +381 -0
  194. package/dist/drivers/pulsar/pulsar-hid.js.map +1 -0
  195. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts +46 -0
  196. package/dist/drivers/pulsar/pulsar-pro-hid.d.ts.map +1 -0
  197. package/dist/drivers/pulsar/pulsar-pro-hid.js +343 -0
  198. package/dist/drivers/pulsar/pulsar-pro-hid.js.map +1 -0
  199. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts +40 -0
  200. package/dist/drivers/pulsar/pulsar-xs1-hid.d.ts.map +1 -0
  201. package/dist/drivers/pulsar/pulsar-xs1-hid.js +251 -0
  202. package/dist/drivers/pulsar/pulsar-xs1-hid.js.map +1 -0
  203. package/dist/drivers/rawm/hid.d.ts +29 -0
  204. package/dist/drivers/rawm/hid.d.ts.map +1 -0
  205. package/dist/drivers/rawm/hid.js +210 -0
  206. package/dist/drivers/rawm/hid.js.map +1 -0
  207. package/dist/drivers/razer/cobra-hid.d.ts +63 -0
  208. package/dist/drivers/razer/cobra-hid.d.ts.map +1 -0
  209. package/dist/drivers/razer/cobra-hid.js +282 -0
  210. package/dist/drivers/razer/cobra-hid.js.map +1 -0
  211. package/dist/drivers/razer/hid-open.d.ts +13 -0
  212. package/dist/drivers/razer/hid-open.d.ts.map +1 -0
  213. package/dist/drivers/razer/hid-open.js +29 -0
  214. package/dist/drivers/razer/hid-open.js.map +1 -0
  215. package/dist/drivers/razer/hid.d.ts +231 -0
  216. package/dist/drivers/razer/hid.d.ts.map +1 -0
  217. package/dist/drivers/razer/hid.js +772 -0
  218. package/dist/drivers/razer/hid.js.map +1 -0
  219. package/dist/drivers/razer/viper-hid.d.ts +33 -0
  220. package/dist/drivers/razer/viper-hid.d.ts.map +1 -0
  221. package/dist/drivers/razer/viper-hid.js +177 -0
  222. package/dist/drivers/razer/viper-hid.js.map +1 -0
  223. package/dist/drivers/razer/viper-mini-hid.d.ts +58 -0
  224. package/dist/drivers/razer/viper-mini-hid.d.ts.map +1 -0
  225. package/dist/drivers/razer/viper-mini-hid.js +273 -0
  226. package/dist/drivers/razer/viper-mini-hid.js.map +1 -0
  227. package/dist/drivers/razer/viper-v4-pro-hid.d.ts +26 -0
  228. package/dist/drivers/razer/viper-v4-pro-hid.d.ts.map +1 -0
  229. package/dist/drivers/razer/viper-v4-pro-hid.js +154 -0
  230. package/dist/drivers/razer/viper-v4-pro-hid.js.map +1 -0
  231. package/dist/drivers/registry.d.ts +70 -0
  232. package/dist/drivers/registry.d.ts.map +1 -0
  233. package/dist/drivers/registry.js +146 -0
  234. package/dist/drivers/registry.js.map +1 -0
  235. package/dist/drivers/steelseries/aerox3-hid.d.ts +53 -0
  236. package/dist/drivers/steelseries/aerox3-hid.d.ts.map +1 -0
  237. package/dist/drivers/steelseries/aerox3-hid.js +172 -0
  238. package/dist/drivers/steelseries/aerox3-hid.js.map +1 -0
  239. package/dist/drivers/steelseries/aerox5-hid.d.ts +54 -0
  240. package/dist/drivers/steelseries/aerox5-hid.d.ts.map +1 -0
  241. package/dist/drivers/steelseries/aerox5-hid.js +173 -0
  242. package/dist/drivers/steelseries/aerox5-hid.js.map +1 -0
  243. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts +69 -0
  244. package/dist/drivers/steelseries/aerox5-wireless-hid.d.ts.map +1 -0
  245. package/dist/drivers/steelseries/aerox5-wireless-hid.js +234 -0
  246. package/dist/drivers/steelseries/aerox5-wireless-hid.js.map +1 -0
  247. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts +70 -0
  248. package/dist/drivers/steelseries/aerox9-wireless-hid.d.ts.map +1 -0
  249. package/dist/drivers/steelseries/aerox9-wireless-hid.js +227 -0
  250. package/dist/drivers/steelseries/aerox9-wireless-hid.js.map +1 -0
  251. package/dist/drivers/steelseries/hid.d.ts +48 -0
  252. package/dist/drivers/steelseries/hid.d.ts.map +1 -0
  253. package/dist/drivers/steelseries/hid.js +157 -0
  254. package/dist/drivers/steelseries/hid.js.map +1 -0
  255. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts +62 -0
  256. package/dist/drivers/steelseries/prime-mini-wireless-hid.d.ts.map +1 -0
  257. package/dist/drivers/steelseries/prime-mini-wireless-hid.js +215 -0
  258. package/dist/drivers/steelseries/prime-mini-wireless-hid.js.map +1 -0
  259. package/dist/drivers/steelseries/prime-plus-hid.d.ts +51 -0
  260. package/dist/drivers/steelseries/prime-plus-hid.d.ts.map +1 -0
  261. package/dist/drivers/steelseries/prime-plus-hid.js +150 -0
  262. package/dist/drivers/steelseries/prime-plus-hid.js.map +1 -0
  263. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts +61 -0
  264. package/dist/drivers/steelseries/rival3-wireless-hid.d.ts.map +1 -0
  265. package/dist/drivers/steelseries/rival3-wireless-hid.js +185 -0
  266. package/dist/drivers/steelseries/rival3-wireless-hid.js.map +1 -0
  267. package/dist/drivers/steelseries/rival310-hid.d.ts +59 -0
  268. package/dist/drivers/steelseries/rival310-hid.d.ts.map +1 -0
  269. package/dist/drivers/steelseries/rival310-hid.js +182 -0
  270. package/dist/drivers/steelseries/rival310-hid.js.map +1 -0
  271. package/dist/drivers/steelseries/rival650-hid.d.ts +68 -0
  272. package/dist/drivers/steelseries/rival650-hid.d.ts.map +1 -0
  273. package/dist/drivers/steelseries/rival650-hid.js +209 -0
  274. package/dist/drivers/steelseries/rival650-hid.js.map +1 -0
  275. package/dist/drivers/steelseries/sensei-ten-hid.d.ts +62 -0
  276. package/dist/drivers/steelseries/sensei-ten-hid.d.ts.map +1 -0
  277. package/dist/drivers/steelseries/sensei-ten-hid.js +186 -0
  278. package/dist/drivers/steelseries/sensei-ten-hid.js.map +1 -0
  279. package/dist/drivers/teevolution/hid.d.ts +82 -0
  280. package/dist/drivers/teevolution/hid.d.ts.map +1 -0
  281. package/dist/drivers/teevolution/hid.js +607 -0
  282. package/dist/drivers/teevolution/hid.js.map +1 -0
  283. package/dist/drivers/vendors.d.ts +254 -0
  284. package/dist/drivers/vendors.d.ts.map +1 -0
  285. package/dist/drivers/vendors.js +587 -0
  286. package/dist/drivers/vendors.js.map +1 -0
  287. package/dist/drivers/vgn/hid.d.ts +33 -0
  288. package/dist/drivers/vgn/hid.d.ts.map +1 -0
  289. package/dist/drivers/vgn/hid.js +213 -0
  290. package/dist/drivers/vgn/hid.js.map +1 -0
  291. package/dist/drivers/wallhack/keyboard-hid.d.ts +28 -0
  292. package/dist/drivers/wallhack/keyboard-hid.d.ts.map +1 -0
  293. package/dist/drivers/wallhack/keyboard-hid.js +80 -0
  294. package/dist/drivers/wallhack/keyboard-hid.js.map +1 -0
  295. package/dist/drivers/wallhack/mouse-hid.d.ts +45 -0
  296. package/dist/drivers/wallhack/mouse-hid.d.ts.map +1 -0
  297. package/dist/drivers/wallhack/mouse-hid.js +288 -0
  298. package/dist/drivers/wallhack/mouse-hid.js.map +1 -0
  299. package/dist/drivers/webhid.d.ts +59 -0
  300. package/dist/drivers/webhid.d.ts.map +1 -0
  301. package/dist/drivers/webhid.js +2 -0
  302. package/dist/drivers/webhid.js.map +1 -0
  303. package/dist/drivers/wlmouse/hid.d.ts +81 -0
  304. package/dist/drivers/wlmouse/hid.d.ts.map +1 -0
  305. package/dist/drivers/wlmouse/hid.js +576 -0
  306. package/dist/drivers/wlmouse/hid.js.map +1 -0
  307. package/dist/drivers/wooting/hid.d.ts +86 -0
  308. package/dist/drivers/wooting/hid.d.ts.map +1 -0
  309. package/dist/drivers/wooting/hid.js +320 -0
  310. package/dist/drivers/wooting/hid.js.map +1 -0
  311. package/dist/drivers/zaunkoenig/hid.d.ts +31 -0
  312. package/dist/drivers/zaunkoenig/hid.d.ts.map +1 -0
  313. package/dist/drivers/zaunkoenig/hid.js +162 -0
  314. package/dist/drivers/zaunkoenig/hid.js.map +1 -0
  315. package/dist/endgame-gear/op1.d.ts +165 -0
  316. package/dist/endgame-gear/op1.d.ts.map +1 -0
  317. package/dist/endgame-gear/op1.js +384 -0
  318. package/dist/endgame-gear/op1.js.map +1 -0
  319. package/dist/endgame-gear/wireless.d.ts +93 -0
  320. package/dist/endgame-gear/wireless.d.ts.map +1 -0
  321. package/dist/endgame-gear/wireless.js +242 -0
  322. package/dist/endgame-gear/wireless.js.map +1 -0
  323. package/dist/fantech/index.d.ts +9 -0
  324. package/dist/fantech/index.d.ts.map +1 -0
  325. package/dist/fantech/index.js +11 -0
  326. package/dist/fantech/index.js.map +1 -0
  327. package/dist/finalmouse/index.d.ts +41 -0
  328. package/dist/finalmouse/index.d.ts.map +1 -0
  329. package/dist/finalmouse/index.js +106 -0
  330. package/dist/finalmouse/index.js.map +1 -0
  331. package/dist/gearhub/index.d.ts +210 -0
  332. package/dist/gearhub/index.d.ts.map +1 -0
  333. package/dist/gearhub/index.js +282 -0
  334. package/dist/gearhub/index.js.map +1 -0
  335. package/dist/glorious/index.d.ts +89 -0
  336. package/dist/glorious/index.d.ts.map +1 -0
  337. package/dist/glorious/index.js +236 -0
  338. package/dist/glorious/index.js.map +1 -0
  339. package/dist/glorious-classic/index.d.ts +103 -0
  340. package/dist/glorious-classic/index.d.ts.map +1 -0
  341. package/dist/glorious-classic/index.js +304 -0
  342. package/dist/glorious-classic/index.js.map +1 -0
  343. package/dist/gwolves/index.d.ts +82 -0
  344. package/dist/gwolves/index.d.ts.map +1 -0
  345. package/dist/gwolves/index.js +197 -0
  346. package/dist/gwolves/index.js.map +1 -0
  347. package/dist/hyperx/index.d.ts +181 -0
  348. package/dist/hyperx/index.d.ts.map +1 -0
  349. package/dist/hyperx/index.js +303 -0
  350. package/dist/hyperx/index.js.map +1 -0
  351. package/dist/incott/index.d.ts +1067 -0
  352. package/dist/incott/index.d.ts.map +1 -0
  353. package/dist/incott/index.js +1482 -0
  354. package/dist/incott/index.js.map +1 -0
  355. package/dist/index.d.ts +30 -0
  356. package/dist/index.d.ts.map +1 -0
  357. package/dist/index.js +30 -0
  358. package/dist/index.js.map +1 -0
  359. package/dist/keychron/index.d.ts +194 -0
  360. package/dist/keychron/index.d.ts.map +1 -0
  361. package/dist/keychron/index.js +341 -0
  362. package/dist/keychron/index.js.map +1 -0
  363. package/dist/ksnake/index.d.ts +157 -0
  364. package/dist/ksnake/index.d.ts.map +1 -0
  365. package/dist/ksnake/index.js +314 -0
  366. package/dist/ksnake/index.js.map +1 -0
  367. package/dist/lamzu/atlantis.d.ts +237 -0
  368. package/dist/lamzu/atlantis.d.ts.map +1 -0
  369. package/dist/lamzu/atlantis.js +263 -0
  370. package/dist/lamzu/atlantis.js.map +1 -0
  371. package/dist/lamzu/index.d.ts +60 -0
  372. package/dist/lamzu/index.d.ts.map +1 -0
  373. package/dist/lamzu/index.js +86 -0
  374. package/dist/lamzu/index.js.map +1 -0
  375. package/dist/logitech/controls.d.ts +138 -0
  376. package/dist/logitech/controls.d.ts.map +1 -0
  377. package/dist/logitech/controls.js +184 -0
  378. package/dist/logitech/controls.js.map +1 -0
  379. package/dist/logitech/friendly-name.d.ts +50 -0
  380. package/dist/logitech/friendly-name.d.ts.map +1 -0
  381. package/dist/logitech/friendly-name.js +74 -0
  382. package/dist/logitech/friendly-name.js.map +1 -0
  383. package/dist/logitech/haptics.d.ts +97 -0
  384. package/dist/logitech/haptics.d.ts.map +1 -0
  385. package/dist/logitech/haptics.js +116 -0
  386. package/dist/logitech/haptics.js.map +1 -0
  387. package/dist/logitech/hosts.d.ts +55 -0
  388. package/dist/logitech/hosts.d.ts.map +1 -0
  389. package/dist/logitech/hosts.js +80 -0
  390. package/dist/logitech/hosts.js.map +1 -0
  391. package/dist/logitech/index.d.ts +127 -0
  392. package/dist/logitech/index.d.ts.map +1 -0
  393. package/dist/logitech/index.js +233 -0
  394. package/dist/logitech/index.js.map +1 -0
  395. package/dist/logitech/wheel.d.ts +117 -0
  396. package/dist/logitech/wheel.d.ts.map +1 -0
  397. package/dist/logitech/wheel.js +133 -0
  398. package/dist/logitech/wheel.js.map +1 -0
  399. package/dist/mchose/a5-gen1.d.ts +38 -0
  400. package/dist/mchose/a5-gen1.d.ts.map +1 -0
  401. package/dist/mchose/a5-gen1.js +60 -0
  402. package/dist/mchose/a5-gen1.js.map +1 -0
  403. package/dist/mchose/buttons.d.ts +66 -0
  404. package/dist/mchose/buttons.d.ts.map +1 -0
  405. package/dist/mchose/buttons.js +184 -0
  406. package/dist/mchose/buttons.js.map +1 -0
  407. package/dist/mchose/dock.d.ts +77 -0
  408. package/dist/mchose/dock.d.ts.map +1 -0
  409. package/dist/mchose/dock.js +133 -0
  410. package/dist/mchose/dock.js.map +1 -0
  411. package/dist/mchose/index.d.ts +299 -0
  412. package/dist/mchose/index.d.ts.map +1 -0
  413. package/dist/mchose/index.js +429 -0
  414. package/dist/mchose/index.js.map +1 -0
  415. package/dist/mchose/v3-buttons.d.ts +64 -0
  416. package/dist/mchose/v3-buttons.d.ts.map +1 -0
  417. package/dist/mchose/v3-buttons.js +258 -0
  418. package/dist/mchose/v3-buttons.js.map +1 -0
  419. package/dist/mchose/v3.d.ts +380 -0
  420. package/dist/mchose/v3.d.ts.map +1 -0
  421. package/dist/mchose/v3.js +608 -0
  422. package/dist/mchose/v3.js.map +1 -0
  423. package/dist/microsoft/index.d.ts +19 -0
  424. package/dist/microsoft/index.d.ts.map +1 -0
  425. package/dist/microsoft/index.js +22 -0
  426. package/dist/microsoft/index.js.map +1 -0
  427. package/dist/moddo/index.d.ts +72 -0
  428. package/dist/moddo/index.d.ts.map +1 -0
  429. package/dist/moddo/index.js +147 -0
  430. package/dist/moddo/index.js.map +1 -0
  431. package/dist/ninjutso/index.d.ts +74 -0
  432. package/dist/ninjutso/index.d.ts.map +1 -0
  433. package/dist/ninjutso/index.js +133 -0
  434. package/dist/ninjutso/index.js.map +1 -0
  435. package/dist/orbital/index.d.ts +14 -0
  436. package/dist/orbital/index.d.ts.map +1 -0
  437. package/dist/orbital/index.js +19 -0
  438. package/dist/orbital/index.js.map +1 -0
  439. package/dist/pulsar/index.d.ts +81 -0
  440. package/dist/pulsar/index.d.ts.map +1 -0
  441. package/dist/pulsar/index.js +185 -0
  442. package/dist/pulsar/index.js.map +1 -0
  443. package/dist/rawm/index.d.ts +55 -0
  444. package/dist/rawm/index.d.ts.map +1 -0
  445. package/dist/rawm/index.js +229 -0
  446. package/dist/rawm/index.js.map +1 -0
  447. package/dist/razer/codec.d.ts +504 -0
  448. package/dist/razer/codec.d.ts.map +1 -0
  449. package/dist/razer/codec.js +648 -0
  450. package/dist/razer/codec.js.map +1 -0
  451. package/dist/razer/devices.d.ts +156 -0
  452. package/dist/razer/devices.d.ts.map +1 -0
  453. package/dist/razer/devices.js +540 -0
  454. package/dist/razer/devices.js.map +1 -0
  455. package/dist/razer/index.d.ts +2 -0
  456. package/dist/razer/index.d.ts.map +1 -0
  457. package/dist/razer/index.js +2 -0
  458. package/dist/razer/index.js.map +1 -0
  459. package/dist/razer/v4.d.ts +19 -0
  460. package/dist/razer/v4.d.ts.map +1 -0
  461. package/dist/razer/v4.js +51 -0
  462. package/dist/razer/v4.js.map +1 -0
  463. package/dist/steelseries/aerox3.d.ts +236 -0
  464. package/dist/steelseries/aerox3.d.ts.map +1 -0
  465. package/dist/steelseries/aerox3.js +311 -0
  466. package/dist/steelseries/aerox3.js.map +1 -0
  467. package/dist/steelseries/aerox5-wireless.d.ts +300 -0
  468. package/dist/steelseries/aerox5-wireless.d.ts.map +1 -0
  469. package/dist/steelseries/aerox5-wireless.js +389 -0
  470. package/dist/steelseries/aerox5-wireless.js.map +1 -0
  471. package/dist/steelseries/aerox5.d.ts +228 -0
  472. package/dist/steelseries/aerox5.d.ts.map +1 -0
  473. package/dist/steelseries/aerox5.js +294 -0
  474. package/dist/steelseries/aerox5.js.map +1 -0
  475. package/dist/steelseries/aerox9-wireless.d.ts +213 -0
  476. package/dist/steelseries/aerox9-wireless.d.ts.map +1 -0
  477. package/dist/steelseries/aerox9-wireless.js +305 -0
  478. package/dist/steelseries/aerox9-wireless.js.map +1 -0
  479. package/dist/steelseries/devices.d.ts +82 -0
  480. package/dist/steelseries/devices.d.ts.map +1 -0
  481. package/dist/steelseries/devices.js +310 -0
  482. package/dist/steelseries/devices.js.map +1 -0
  483. package/dist/steelseries/index.d.ts +13 -0
  484. package/dist/steelseries/index.d.ts.map +1 -0
  485. package/dist/steelseries/index.js +13 -0
  486. package/dist/steelseries/index.js.map +1 -0
  487. package/dist/steelseries/prime-mini-wireless.d.ts +253 -0
  488. package/dist/steelseries/prime-mini-wireless.d.ts.map +1 -0
  489. package/dist/steelseries/prime-mini-wireless.js +351 -0
  490. package/dist/steelseries/prime-mini-wireless.js.map +1 -0
  491. package/dist/steelseries/prime-plus.d.ts +179 -0
  492. package/dist/steelseries/prime-plus.d.ts.map +1 -0
  493. package/dist/steelseries/prime-plus.js +275 -0
  494. package/dist/steelseries/prime-plus.js.map +1 -0
  495. package/dist/steelseries/rival3-wireless.d.ts +222 -0
  496. package/dist/steelseries/rival3-wireless.d.ts.map +1 -0
  497. package/dist/steelseries/rival3-wireless.js +308 -0
  498. package/dist/steelseries/rival3-wireless.js.map +1 -0
  499. package/dist/steelseries/rival3.d.ts +99 -0
  500. package/dist/steelseries/rival3.d.ts.map +1 -0
  501. package/dist/steelseries/rival3.js +147 -0
  502. package/dist/steelseries/rival3.js.map +1 -0
  503. package/dist/steelseries/rival310.d.ts +230 -0
  504. package/dist/steelseries/rival310.d.ts.map +1 -0
  505. package/dist/steelseries/rival310.js +322 -0
  506. package/dist/steelseries/rival310.js.map +1 -0
  507. package/dist/steelseries/rival650.d.ts +215 -0
  508. package/dist/steelseries/rival650.d.ts.map +1 -0
  509. package/dist/steelseries/rival650.js +284 -0
  510. package/dist/steelseries/rival650.js.map +1 -0
  511. package/dist/steelseries/sensei-ten.d.ts +283 -0
  512. package/dist/steelseries/sensei-ten.d.ts.map +1 -0
  513. package/dist/steelseries/sensei-ten.js +389 -0
  514. package/dist/steelseries/sensei-ten.js.map +1 -0
  515. package/dist/teevolution/index.d.ts +211 -0
  516. package/dist/teevolution/index.d.ts.map +1 -0
  517. package/dist/teevolution/index.js +458 -0
  518. package/dist/teevolution/index.js.map +1 -0
  519. package/dist/valkyrie/index.d.ts +19 -0
  520. package/dist/valkyrie/index.d.ts.map +1 -0
  521. package/dist/valkyrie/index.js +43 -0
  522. package/dist/valkyrie/index.js.map +1 -0
  523. package/dist/valkyrie/settings.d.ts +28 -0
  524. package/dist/valkyrie/settings.d.ts.map +1 -0
  525. package/dist/valkyrie/settings.js +84 -0
  526. package/dist/valkyrie/settings.js.map +1 -0
  527. package/dist/vgn/index.d.ts +59 -0
  528. package/dist/vgn/index.d.ts.map +1 -0
  529. package/dist/vgn/index.js +165 -0
  530. package/dist/vgn/index.js.map +1 -0
  531. package/dist/wallhack/index.d.ts +165 -0
  532. package/dist/wallhack/index.d.ts.map +1 -0
  533. package/dist/wallhack/index.js +226 -0
  534. package/dist/wallhack/index.js.map +1 -0
  535. package/dist/wlmouse/index.d.ts +4 -0
  536. package/dist/wlmouse/index.d.ts.map +1 -0
  537. package/dist/wlmouse/index.js +7 -0
  538. package/dist/wlmouse/index.js.map +1 -0
  539. package/dist/wooting/index.d.ts +225 -0
  540. package/dist/wooting/index.d.ts.map +1 -0
  541. package/dist/wooting/index.js +296 -0
  542. package/dist/wooting/index.js.map +1 -0
  543. package/dist/zaunkoenig/index.d.ts +49 -0
  544. package/dist/zaunkoenig/index.d.ts.map +1 -0
  545. package/dist/zaunkoenig/index.js +127 -0
  546. package/dist/zaunkoenig/index.js.map +1 -0
  547. package/package.json +193 -0
@@ -0,0 +1,234 @@
1
+ import { AEROX5_WIRELESS_POLLING_RATES, AEROX5_WIRELESS_REPORT_ID, STEELSERIES_PRODUCTS, STEELSERIES_VENDOR_ID, steelseriesAerox5WirelessBatteryQuery, steelseriesAerox5WirelessDecodeBattery, steelseriesAerox5WirelessDpiOptions, steelseriesAerox5WirelessEncodeButtonsMapping, steelseriesAerox5WirelessEncodeDefaultLighting, steelseriesAerox5WirelessEncodeDimTimer, steelseriesAerox5WirelessEncodeDpiPresets, steelseriesAerox5WirelessEncodePollingRate, steelseriesAerox5WirelessEncodeRainbowEffect, steelseriesAerox5WirelessEncodeReactiveColor, steelseriesAerox5WirelessEncodeSleepTimer, steelseriesAerox5WirelessEncodeZoneColor, steelseriesAerox5WirelessSaveCommand, } from "@openmouse/protocol/steelseries";
2
+ /** rivalcfg's `command_approve_delay`, shared across every SteelSeries family. */
3
+ const COMMAND_DELAY_MS = 50;
4
+ /** rivalcfg reads input-report replies with a 200 ms timeout; allow slack. */
5
+ const RESPONSE_TIMEOUT_MS = 500;
6
+ /** rivalcfg profile default (`aerox5_wireless_wired.py`: "400, 800, 1200, 2400, 3200"). */
7
+ const DEFAULT_DPI = 400;
8
+ const DEFAULT_POLLING_HZ = 1000;
9
+ /**
10
+ * SteelSeries Aerox 5 Wireless WebHID control.
11
+ *
12
+ * One physical mouse, two transport-dependent product-id groups, one class:
13
+ * the USB-cabled group (`1038:1854`/`185E`/`1862` — "wired mode" in
14
+ * rivalcfg's naming) and the 2.4 GHz dongle group (`1038:1852`/`185C`/`1860`).
15
+ * Both use the exact same command set; only the wireless flag bit
16
+ * (`applyWirelessFlag` in the protocol module) and, per rivalcfg, a longer
17
+ * expected readback differ. `this.wireless` is fixed from the granted
18
+ * device's product id at construction and threaded through every encode
19
+ * call so a client instance never mixes flagged and unflagged commands.
20
+ *
21
+ * DPI presets, polling rate, zone colors, reactive color, sleep/dim timers,
22
+ * rainbow, default lighting, and buttons are write-only — neither rivalcfg
23
+ * file for this device defines a getter for any of them. Battery level
24
+ * **is** readable (`92`/`D2`, 2-byte reply, different response shape from
25
+ * the Rival 3 Wireless's `AA 01`/3-byte reply — see the protocol module's
26
+ * doc comment) and `readStatus` uses it as the connectivity probe, same
27
+ * role the Rival 3 Wireless's battery probe plays.
28
+ *
29
+ * The config channel is hidapi interface 3, per both rivalcfg files'
30
+ * `"endpoint": 3` model entries; its WebHID collection shape has not been
31
+ * captured yet, so the picker offers every interface and the wrong ones
32
+ * fail the battery probe loudly.
33
+ */
34
+ export class SteelSeriesAerox5WirelessHidClient {
35
+ device;
36
+ wireless;
37
+ queue = Promise.resolve();
38
+ listenerAttached = false;
39
+ inputWaiters = new Set();
40
+ lastWritten = {
41
+ dpi: null,
42
+ pollingRateHz: null,
43
+ };
44
+ onInputReport = (event) => {
45
+ const payload = new Uint8Array(event.data.buffer.slice(event.data.byteOffset, event.data.byteOffset + event.data.byteLength));
46
+ for (const finish of [...this.inputWaiters])
47
+ finish(payload);
48
+ };
49
+ constructor(device) {
50
+ this.device = device;
51
+ this.wireless = STEELSERIES_PRODUCTS.get(device.productId)?.wireless === true
52
+ && WIRELESS_MODE_PRODUCT_IDS.has(device.productId);
53
+ }
54
+ static isSupported(device) {
55
+ if (device.vendorId !== STEELSERIES_VENDOR_ID)
56
+ return false;
57
+ return STEELSERIES_PRODUCTS.get(device.productId)?.family === "aerox5-wireless";
58
+ }
59
+ get pollIntervalMs() { return 30_000; }
60
+ get supportedPollingRates() { return [...AEROX5_WIRELESS_POLLING_RATES]; }
61
+ getDpiOptions() { return steelseriesAerox5WirelessDpiOptions(); }
62
+ async open() {
63
+ if (!this.device.opened)
64
+ await this.device.open();
65
+ if (!this.listenerAttached) {
66
+ this.device.addEventListener("inputreport", this.onInputReport);
67
+ this.listenerAttached = true;
68
+ }
69
+ }
70
+ async close() {
71
+ if (this.listenerAttached) {
72
+ this.device.removeEventListener("inputreport", this.onInputReport);
73
+ this.listenerAttached = false;
74
+ }
75
+ if (this.device.opened)
76
+ await this.device.close();
77
+ }
78
+ async readStatus() {
79
+ return await this.run(async () => {
80
+ await this.open();
81
+ const battery = await this.probeBattery();
82
+ const product = STEELSERIES_PRODUCTS.get(this.device.productId);
83
+ const name = this.device.productName?.trim() || `SteelSeries ${product?.model ?? "Aerox 5 Wireless"}`;
84
+ return {
85
+ brand: "SteelSeries",
86
+ name,
87
+ ui: {
88
+ family: "steelseries-aerox5-wireless",
89
+ settingsReady: true,
90
+ valuesVerified: false,
91
+ hideUnsupportedPollingRates: true,
92
+ hideProcessingCard: true,
93
+ pollingNote: "The Aerox 5 Wireless cannot report its current DPI or polling rate; values shown are the last written by this app, or assumed defaults.",
94
+ defaultDisplayName: "SteelSeries Aerox 5 Wireless",
95
+ },
96
+ batteryPercent: battery.level,
97
+ batteryState: battery.isCharging ? "Charging" : "Discharging",
98
+ dpi: this.lastWritten.dpi ?? DEFAULT_DPI,
99
+ pollingRateHz: this.lastWritten.pollingRateHz ?? DEFAULT_POLLING_HZ,
100
+ supportedPollingRates: this.supportedPollingRates,
101
+ activeProfile: null,
102
+ connectionType: this.wireless ? "Wireless" : "Wired",
103
+ liftOffDistance: null,
104
+ firmware: [],
105
+ };
106
+ });
107
+ }
108
+ /**
109
+ * Replaces the mouse's DPI preset table with a single preset. The device
110
+ * does not expose a getter for DPI, so the existing presets cannot be read
111
+ * and preserved — record them in SteelSeries GG before testing.
112
+ */
113
+ async setDpi(dpi) {
114
+ const report = steelseriesAerox5WirelessEncodeDpiPresets([dpi], 0, this.wireless);
115
+ await this.run(async () => {
116
+ await this.open();
117
+ await this.write(report);
118
+ await this.delay(COMMAND_DELAY_MS);
119
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
120
+ this.lastWritten.dpi = dpi;
121
+ });
122
+ return dpi;
123
+ }
124
+ async setPollingRate(pollingRateHz) {
125
+ const report = steelseriesAerox5WirelessEncodePollingRate(pollingRateHz, this.wireless);
126
+ await this.run(async () => {
127
+ await this.open();
128
+ await this.write(report);
129
+ await this.delay(COMMAND_DELAY_MS);
130
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
131
+ this.lastWritten.pollingRateHz = pollingRateHz;
132
+ });
133
+ return pollingRateHz;
134
+ }
135
+ async setZoneColor(zone, r, g, b) {
136
+ const report = steelseriesAerox5WirelessEncodeZoneColor(zone, r, g, b, this.wireless);
137
+ await this.run(async () => {
138
+ await this.open();
139
+ await this.write(report);
140
+ await this.delay(COMMAND_DELAY_MS);
141
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
142
+ });
143
+ }
144
+ async setReactiveColor(color) {
145
+ const report = steelseriesAerox5WirelessEncodeReactiveColor(color, this.wireless);
146
+ await this.run(async () => {
147
+ await this.open();
148
+ await this.write(report);
149
+ await this.delay(COMMAND_DELAY_MS);
150
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
151
+ });
152
+ }
153
+ async setSleepTimer(minutes) {
154
+ const report = steelseriesAerox5WirelessEncodeSleepTimer(minutes, this.wireless);
155
+ await this.run(async () => {
156
+ await this.open();
157
+ await this.write(report);
158
+ await this.delay(COMMAND_DELAY_MS);
159
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
160
+ });
161
+ }
162
+ async setDimTimer(seconds) {
163
+ const report = steelseriesAerox5WirelessEncodeDimTimer(seconds, this.wireless);
164
+ await this.run(async () => {
165
+ await this.open();
166
+ await this.write(report);
167
+ await this.delay(COMMAND_DELAY_MS);
168
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
169
+ });
170
+ }
171
+ async setRainbowEffect() {
172
+ const report = steelseriesAerox5WirelessEncodeRainbowEffect(this.wireless);
173
+ await this.run(async () => {
174
+ await this.open();
175
+ await this.write(report);
176
+ await this.delay(COMMAND_DELAY_MS);
177
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
178
+ });
179
+ }
180
+ async setDefaultLighting(mode) {
181
+ const report = steelseriesAerox5WirelessEncodeDefaultLighting(mode, this.wireless);
182
+ await this.run(async () => {
183
+ await this.open();
184
+ await this.write(report);
185
+ await this.delay(COMMAND_DELAY_MS);
186
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
187
+ });
188
+ }
189
+ async setButtonsMapping(mapping) {
190
+ const report = steelseriesAerox5WirelessEncodeButtonsMapping(mapping, this.wireless);
191
+ await this.run(async () => {
192
+ await this.open();
193
+ await this.write(report);
194
+ await this.delay(COMMAND_DELAY_MS);
195
+ await this.write(steelseriesAerox5WirelessSaveCommand(this.wireless));
196
+ });
197
+ }
198
+ /** `92`/`D2` — battery percentage and charging state. Doubles as the connectivity probe. */
199
+ async probeBattery() {
200
+ const payload = await this.awaitResponse(steelseriesAerox5WirelessBatteryQuery(this.wireless));
201
+ if (!payload) {
202
+ throw new Error("The Aerox 5 Wireless did not answer on this interface. Close SteelSeries GG (and the SteelSeriesEngine service); if it still does not answer, add the device again and choose another entry.");
203
+ }
204
+ return steelseriesAerox5WirelessDecodeBattery(payload);
205
+ }
206
+ async awaitResponse(query) {
207
+ const response = new Promise((resolve) => {
208
+ let timer;
209
+ const finish = (payload) => {
210
+ clearTimeout(timer);
211
+ this.inputWaiters.delete(finish);
212
+ resolve(payload);
213
+ };
214
+ timer = setTimeout(() => finish(null), RESPONSE_TIMEOUT_MS);
215
+ this.inputWaiters.add(finish);
216
+ });
217
+ await this.write(query);
218
+ return await response;
219
+ }
220
+ async write(payload) {
221
+ await this.device.sendReport(AEROX5_WIRELESS_REPORT_ID, payload.buffer);
222
+ }
223
+ delay(milliseconds) {
224
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
225
+ }
226
+ async run(operation) {
227
+ const result = this.queue.then(operation, operation);
228
+ this.queue = result.then(() => undefined, () => undefined);
229
+ return await result;
230
+ }
231
+ }
232
+ /** The 2.4 GHz dongle-mode PIDs — distinguishes which transform to apply from `wireless: true` in `devices.ts`. */
233
+ const WIRELESS_MODE_PRODUCT_IDS = new Set([0x1852, 0x185c, 0x1860]);
234
+ //# sourceMappingURL=aerox5-wireless-hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aerox5-wireless-hid.js","sourceRoot":"","sources":["../../../src/drivers/steelseries/aerox5-wireless-hid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,70 @@
1
+ import type { MouseStatus } from "../mouse-types.js";
2
+ import { type Aerox9WirelessDefaultLighting, type Aerox9WirelessZone } from "@openmouse/protocol/steelseries";
3
+ /**
4
+ * SteelSeries Aerox 9 Wireless WebHID control.
5
+ *
6
+ * One physical mouse, two transport-dependent product-id groups, one class —
7
+ * same architecture as `./aerox5-wireless-hid.ts`: the USB-cabled group
8
+ * (`1038:185A`/`1876` — "wired mode" in rivalcfg's naming) and the 2.4 GHz
9
+ * dongle group (`1038:1858`/`1874`). Both use the exact same command set;
10
+ * only the wireless flag bit (`applyWirelessFlag` in the protocol module)
11
+ * and, per rivalcfg, a longer expected readback differ. `this.wireless` is
12
+ * fixed from the granted device's product id at construction and threaded
13
+ * through every encode call so a client instance never mixes flagged and
14
+ * unflagged commands.
15
+ *
16
+ * DPI presets, polling rate, zone colors, reactive color, sleep/dim timers,
17
+ * rainbow, and default lighting are write-only — neither rivalcfg file for
18
+ * this device defines a getter for any of them, and (see the protocol
19
+ * module's doc comment) this device's rivalcfg profile defines no
20
+ * button-mapping command at all, unlike the Aerox 5 Wireless — so no setter
21
+ * for it exists here either. Battery level **is** readable (`92`/`D2`,
22
+ * 2-byte reply, same shape as the Aerox 5 Wireless) and `readStatus` uses it
23
+ * as the connectivity probe, same role it plays for that device.
24
+ *
25
+ * The config channel is hidapi interface 3, per both rivalcfg files'
26
+ * `"endpoint": 3` model entries; its WebHID collection shape has not been
27
+ * captured yet, so the picker offers every interface and the wrong ones
28
+ * fail the battery probe loudly.
29
+ */
30
+ export declare class SteelSeriesAerox9WirelessHidClient {
31
+ readonly device: HIDDevice;
32
+ private readonly wireless;
33
+ private queue;
34
+ private listenerAttached;
35
+ private readonly inputWaiters;
36
+ private lastWritten;
37
+ private readonly onInputReport;
38
+ constructor(device: HIDDevice);
39
+ static isSupported(device: HIDDevice): boolean;
40
+ get pollIntervalMs(): number;
41
+ get supportedPollingRates(): number[];
42
+ getDpiOptions(): number[];
43
+ open(): Promise<void>;
44
+ close(): Promise<void>;
45
+ readStatus(): Promise<MouseStatus>;
46
+ /**
47
+ * Replaces the mouse's DPI preset table with a single preset. The device
48
+ * does not expose a getter for DPI, so the existing presets cannot be read
49
+ * and preserved — record them in SteelSeries GG before testing.
50
+ */
51
+ setDpi(dpi: number): Promise<number>;
52
+ setPollingRate(pollingRateHz: number): Promise<number>;
53
+ setZoneColor(zone: Aerox9WirelessZone, r: number, g: number, b: number): Promise<void>;
54
+ setReactiveColor(color: {
55
+ r: number;
56
+ g: number;
57
+ b: number;
58
+ } | null): Promise<void>;
59
+ setSleepTimer(minutes: number): Promise<void>;
60
+ setDimTimer(seconds: number): Promise<void>;
61
+ setRainbowEffect(): Promise<void>;
62
+ setDefaultLighting(mode: Aerox9WirelessDefaultLighting): Promise<void>;
63
+ /** `92`/`D2` — battery percentage and charging state. Doubles as the connectivity probe. */
64
+ private probeBattery;
65
+ private awaitResponse;
66
+ private write;
67
+ private delay;
68
+ private run;
69
+ }
70
+ //# sourceMappingURL=aerox9-wireless-hid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aerox9-wireless-hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/steelseries/aerox9-wireless-hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAkBL,KAAK,6BAA6B,EAClC,KAAK,kBAAkB,EACxB,MAAM,iCAAiC,CAAC;AAUzC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,kCAAkC;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4C;IACzE,OAAO,CAAC,WAAW,CAGjB;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;gBAEU,MAAM,EAAE,SAAS;IAM7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAK9C,IAAI,cAAc,IAAI,MAAM,CAAmB;IAE/C,IAAI,qBAAqB,IAAI,MAAM,EAAE,CAA+C;IAEpF,aAAa,IAAI,MAAM,EAAE;IAEnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA+BxC;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYtD,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtF,gBAAgB,CAAC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlF,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC,kBAAkB,CAAC,IAAI,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5E,4FAA4F;YAC9E,YAAY;YAUZ,aAAa;YAeb,KAAK;IAInB,OAAO,CAAC,KAAK;YAIC,GAAG;CAKlB"}
@@ -0,0 +1,227 @@
1
+ import { AEROX9_WIRELESS_POLLING_RATES, AEROX9_WIRELESS_REPORT_ID, STEELSERIES_PRODUCTS, STEELSERIES_VENDOR_ID, steelseriesAerox9WirelessBatteryQuery, steelseriesAerox9WirelessDecodeBattery, steelseriesAerox9WirelessDpiOptions, steelseriesAerox9WirelessEncodeDefaultLighting, steelseriesAerox9WirelessEncodeDimTimer, steelseriesAerox9WirelessEncodeDpiPresets, steelseriesAerox9WirelessEncodePollingRate, steelseriesAerox9WirelessEncodeRainbowEffect, steelseriesAerox9WirelessEncodeReactiveColor, steelseriesAerox9WirelessEncodeSleepTimer, steelseriesAerox9WirelessEncodeZoneColor, steelseriesAerox9WirelessSaveCommand, } from "@openmouse/protocol/steelseries";
2
+ /** rivalcfg's `command_approve_delay`, shared across every SteelSeries family. */
3
+ const COMMAND_DELAY_MS = 50;
4
+ /** rivalcfg reads input-report replies with a 200 ms timeout; allow slack. */
5
+ const RESPONSE_TIMEOUT_MS = 500;
6
+ /** rivalcfg profile default (`aerox9_wireless_wired.py`: "400, 800, 1200, 2400, 3200"). */
7
+ const DEFAULT_DPI = 400;
8
+ const DEFAULT_POLLING_HZ = 1000;
9
+ /**
10
+ * SteelSeries Aerox 9 Wireless WebHID control.
11
+ *
12
+ * One physical mouse, two transport-dependent product-id groups, one class —
13
+ * same architecture as `./aerox5-wireless-hid.ts`: the USB-cabled group
14
+ * (`1038:185A`/`1876` — "wired mode" in rivalcfg's naming) and the 2.4 GHz
15
+ * dongle group (`1038:1858`/`1874`). Both use the exact same command set;
16
+ * only the wireless flag bit (`applyWirelessFlag` in the protocol module)
17
+ * and, per rivalcfg, a longer expected readback differ. `this.wireless` is
18
+ * fixed from the granted device's product id at construction and threaded
19
+ * through every encode call so a client instance never mixes flagged and
20
+ * unflagged commands.
21
+ *
22
+ * DPI presets, polling rate, zone colors, reactive color, sleep/dim timers,
23
+ * rainbow, and default lighting are write-only — neither rivalcfg file for
24
+ * this device defines a getter for any of them, and (see the protocol
25
+ * module's doc comment) this device's rivalcfg profile defines no
26
+ * button-mapping command at all, unlike the Aerox 5 Wireless — so no setter
27
+ * for it exists here either. Battery level **is** readable (`92`/`D2`,
28
+ * 2-byte reply, same shape as the Aerox 5 Wireless) and `readStatus` uses it
29
+ * as the connectivity probe, same role it plays for that device.
30
+ *
31
+ * The config channel is hidapi interface 3, per both rivalcfg files'
32
+ * `"endpoint": 3` model entries; its WebHID collection shape has not been
33
+ * captured yet, so the picker offers every interface and the wrong ones
34
+ * fail the battery probe loudly.
35
+ */
36
+ export class SteelSeriesAerox9WirelessHidClient {
37
+ device;
38
+ wireless;
39
+ queue = Promise.resolve();
40
+ listenerAttached = false;
41
+ inputWaiters = new Set();
42
+ lastWritten = {
43
+ dpi: null,
44
+ pollingRateHz: null,
45
+ };
46
+ onInputReport = (event) => {
47
+ const payload = new Uint8Array(event.data.buffer.slice(event.data.byteOffset, event.data.byteOffset + event.data.byteLength));
48
+ for (const finish of [...this.inputWaiters])
49
+ finish(payload);
50
+ };
51
+ constructor(device) {
52
+ this.device = device;
53
+ this.wireless = STEELSERIES_PRODUCTS.get(device.productId)?.wireless === true
54
+ && WIRELESS_MODE_PRODUCT_IDS.has(device.productId);
55
+ }
56
+ static isSupported(device) {
57
+ if (device.vendorId !== STEELSERIES_VENDOR_ID)
58
+ return false;
59
+ return STEELSERIES_PRODUCTS.get(device.productId)?.family === "aerox9-wireless";
60
+ }
61
+ get pollIntervalMs() { return 30_000; }
62
+ get supportedPollingRates() { return [...AEROX9_WIRELESS_POLLING_RATES]; }
63
+ getDpiOptions() { return steelseriesAerox9WirelessDpiOptions(); }
64
+ async open() {
65
+ if (!this.device.opened)
66
+ await this.device.open();
67
+ if (!this.listenerAttached) {
68
+ this.device.addEventListener("inputreport", this.onInputReport);
69
+ this.listenerAttached = true;
70
+ }
71
+ }
72
+ async close() {
73
+ if (this.listenerAttached) {
74
+ this.device.removeEventListener("inputreport", this.onInputReport);
75
+ this.listenerAttached = false;
76
+ }
77
+ if (this.device.opened)
78
+ await this.device.close();
79
+ }
80
+ async readStatus() {
81
+ return await this.run(async () => {
82
+ await this.open();
83
+ const battery = await this.probeBattery();
84
+ const product = STEELSERIES_PRODUCTS.get(this.device.productId);
85
+ const name = this.device.productName?.trim() || `SteelSeries ${product?.model ?? "Aerox 9 Wireless"}`;
86
+ return {
87
+ brand: "SteelSeries",
88
+ name,
89
+ ui: {
90
+ family: "steelseries-aerox9-wireless",
91
+ settingsReady: true,
92
+ valuesVerified: false,
93
+ hideUnsupportedPollingRates: true,
94
+ hideProcessingCard: true,
95
+ pollingNote: "The Aerox 9 Wireless cannot report its current DPI or polling rate; values shown are the last written by this app, or assumed defaults.",
96
+ defaultDisplayName: "SteelSeries Aerox 9 Wireless",
97
+ },
98
+ batteryPercent: battery.level,
99
+ batteryState: battery.isCharging ? "Charging" : "Discharging",
100
+ dpi: this.lastWritten.dpi ?? DEFAULT_DPI,
101
+ pollingRateHz: this.lastWritten.pollingRateHz ?? DEFAULT_POLLING_HZ,
102
+ supportedPollingRates: this.supportedPollingRates,
103
+ activeProfile: null,
104
+ connectionType: this.wireless ? "Wireless" : "Wired",
105
+ liftOffDistance: null,
106
+ firmware: [],
107
+ };
108
+ });
109
+ }
110
+ /**
111
+ * Replaces the mouse's DPI preset table with a single preset. The device
112
+ * does not expose a getter for DPI, so the existing presets cannot be read
113
+ * and preserved — record them in SteelSeries GG before testing.
114
+ */
115
+ async setDpi(dpi) {
116
+ const report = steelseriesAerox9WirelessEncodeDpiPresets([dpi], 0, this.wireless);
117
+ await this.run(async () => {
118
+ await this.open();
119
+ await this.write(report);
120
+ await this.delay(COMMAND_DELAY_MS);
121
+ await this.write(steelseriesAerox9WirelessSaveCommand(this.wireless));
122
+ this.lastWritten.dpi = dpi;
123
+ });
124
+ return dpi;
125
+ }
126
+ async setPollingRate(pollingRateHz) {
127
+ const report = steelseriesAerox9WirelessEncodePollingRate(pollingRateHz, this.wireless);
128
+ await this.run(async () => {
129
+ await this.open();
130
+ await this.write(report);
131
+ await this.delay(COMMAND_DELAY_MS);
132
+ await this.write(steelseriesAerox9WirelessSaveCommand(this.wireless));
133
+ this.lastWritten.pollingRateHz = pollingRateHz;
134
+ });
135
+ return pollingRateHz;
136
+ }
137
+ async setZoneColor(zone, r, g, b) {
138
+ const report = steelseriesAerox9WirelessEncodeZoneColor(zone, r, g, b, this.wireless);
139
+ await this.run(async () => {
140
+ await this.open();
141
+ await this.write(report);
142
+ await this.delay(COMMAND_DELAY_MS);
143
+ await this.write(steelseriesAerox9WirelessSaveCommand(this.wireless));
144
+ });
145
+ }
146
+ async setReactiveColor(color) {
147
+ const report = steelseriesAerox9WirelessEncodeReactiveColor(color, this.wireless);
148
+ await this.run(async () => {
149
+ await this.open();
150
+ await this.write(report);
151
+ await this.delay(COMMAND_DELAY_MS);
152
+ await this.write(steelseriesAerox9WirelessSaveCommand(this.wireless));
153
+ });
154
+ }
155
+ async setSleepTimer(minutes) {
156
+ const report = steelseriesAerox9WirelessEncodeSleepTimer(minutes, this.wireless);
157
+ await this.run(async () => {
158
+ await this.open();
159
+ await this.write(report);
160
+ await this.delay(COMMAND_DELAY_MS);
161
+ await this.write(steelseriesAerox9WirelessSaveCommand(this.wireless));
162
+ });
163
+ }
164
+ async setDimTimer(seconds) {
165
+ const report = steelseriesAerox9WirelessEncodeDimTimer(seconds, this.wireless);
166
+ await this.run(async () => {
167
+ await this.open();
168
+ await this.write(report);
169
+ await this.delay(COMMAND_DELAY_MS);
170
+ await this.write(steelseriesAerox9WirelessSaveCommand(this.wireless));
171
+ });
172
+ }
173
+ async setRainbowEffect() {
174
+ const report = steelseriesAerox9WirelessEncodeRainbowEffect(this.wireless);
175
+ await this.run(async () => {
176
+ await this.open();
177
+ await this.write(report);
178
+ await this.delay(COMMAND_DELAY_MS);
179
+ await this.write(steelseriesAerox9WirelessSaveCommand(this.wireless));
180
+ });
181
+ }
182
+ async setDefaultLighting(mode) {
183
+ const report = steelseriesAerox9WirelessEncodeDefaultLighting(mode, this.wireless);
184
+ await this.run(async () => {
185
+ await this.open();
186
+ await this.write(report);
187
+ await this.delay(COMMAND_DELAY_MS);
188
+ await this.write(steelseriesAerox9WirelessSaveCommand(this.wireless));
189
+ });
190
+ }
191
+ /** `92`/`D2` — battery percentage and charging state. Doubles as the connectivity probe. */
192
+ async probeBattery() {
193
+ const payload = await this.awaitResponse(steelseriesAerox9WirelessBatteryQuery(this.wireless));
194
+ if (!payload) {
195
+ throw new Error("The Aerox 9 Wireless did not answer on this interface. Close SteelSeries GG (and the SteelSeriesEngine service); if it still does not answer, add the device again and choose another entry.");
196
+ }
197
+ return steelseriesAerox9WirelessDecodeBattery(payload);
198
+ }
199
+ async awaitResponse(query) {
200
+ const response = new Promise((resolve) => {
201
+ let timer;
202
+ const finish = (payload) => {
203
+ clearTimeout(timer);
204
+ this.inputWaiters.delete(finish);
205
+ resolve(payload);
206
+ };
207
+ timer = setTimeout(() => finish(null), RESPONSE_TIMEOUT_MS);
208
+ this.inputWaiters.add(finish);
209
+ });
210
+ await this.write(query);
211
+ return await response;
212
+ }
213
+ async write(payload) {
214
+ await this.device.sendReport(AEROX9_WIRELESS_REPORT_ID, payload.buffer);
215
+ }
216
+ delay(milliseconds) {
217
+ return new Promise((resolve) => setTimeout(resolve, milliseconds));
218
+ }
219
+ async run(operation) {
220
+ const result = this.queue.then(operation, operation);
221
+ this.queue = result.then(() => undefined, () => undefined);
222
+ return await result;
223
+ }
224
+ }
225
+ /** The 2.4 GHz dongle-mode PIDs — distinguishes which transform to apply from `wireless: true` in `devices.ts`. */
226
+ const WIRELESS_MODE_PRODUCT_IDS = new Set([0x1858, 0x1874]);
227
+ //# sourceMappingURL=aerox9-wireless-hid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aerox9-wireless-hid.js","sourceRoot":"","sources":["../../../src/drivers/steelseries/aerox9-wireless-hid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { MouseStatus } from "../mouse-types.js";
2
+ /**
3
+ * SteelSeries Rival 3 Gen 1 WebHID control (`1038:1824`, `1038:184C`).
4
+ *
5
+ * The device is write-only: settings are sent as unnumbered output reports and
6
+ * nothing can be read back except the two-byte firmware version, which this
7
+ * driver uses as its connectivity probe. `readStatus` therefore reports the
8
+ * session's last-written values (or rivalcfg's documented defaults before any
9
+ * write) with `valuesVerified: false` — it never pretends to have read them.
10
+ * Every setter follows its write with the save command so the change persists
11
+ * in the mouse's onboard memory, mirroring rivalcfg's CLI default.
12
+ *
13
+ * The config channel is hidapi interface 3; its WebHID collection shape has
14
+ * not been captured yet, so the picker offers every interface and the wrong
15
+ * ones fail the firmware probe loudly.
16
+ */
17
+ export declare class SteelSeriesRival3HidClient {
18
+ readonly device: HIDDevice;
19
+ private queue;
20
+ private listenerAttached;
21
+ private readonly inputWaiters;
22
+ private lastWritten;
23
+ private readonly onInputReport;
24
+ constructor(device: HIDDevice);
25
+ static isSupported(device: HIDDevice): boolean;
26
+ get pollIntervalMs(): number;
27
+ get supportedPollingRates(): number[];
28
+ getDpiOptions(): number[];
29
+ open(): Promise<void>;
30
+ close(): Promise<void>;
31
+ readStatus(): Promise<MouseStatus>;
32
+ /**
33
+ * Replaces the mouse's DPI preset table with a single preset. The device is
34
+ * write-only, so the existing presets cannot be read and preserved — record
35
+ * them in SteelSeries GG before testing, per docs/steelseries-testing.md.
36
+ */
37
+ setDpi(dpi: number): Promise<number>;
38
+ setPollingRate(pollingRateHz: number): Promise<number>;
39
+ /**
40
+ * The `10 00` firmware query is the device's only readable value, so it
41
+ * doubles as the proof that the granted interface is the config channel.
42
+ */
43
+ private probeFirmware;
44
+ private write;
45
+ private delay;
46
+ private run;
47
+ }
48
+ //# sourceMappingURL=hid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hid.d.ts","sourceRoot":"","sources":["../../../src/drivers/steelseries/hid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAwBrD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,0BAA0B;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4C;IACzE,OAAO,CAAC,WAAW,CAGjB;IAEF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAK5B;gBAEU,MAAM,EAAE,SAAS;IAI7B,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO;IAK9C,IAAI,cAAc,IAAI,MAAM,CAAmB;IAE/C,IAAI,qBAAqB,IAAI,MAAM,EAAE,CAAsC;IAE3E,aAAa,IAAI,MAAM,EAAE;IAEnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IA+BxC;;;;OAIG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYpC,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAY5D;;;OAGG;YACW,aAAa;YAqBb,KAAK;IAInB,OAAO,CAAC,KAAK;YAIC,GAAG;CAKlB"}