@omujs/omu 0.9.9 → 0.9.26

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 (458) hide show
  1. package/CHANGELOG.md +157 -0
  2. package/README.md +0 -1
  3. package/dist/dts/address.d.ts +4 -4
  4. package/dist/dts/api/asset/extension.d.ts +25 -0
  5. package/dist/dts/api/asset/index.d.ts +2 -0
  6. package/dist/dts/api/dashboard/extension.d.ts +186 -0
  7. package/dist/dts/api/dashboard/handler.d.ts +21 -0
  8. package/dist/dts/api/dashboard/index.d.ts +3 -0
  9. package/dist/dts/api/dashboard/packets.d.ts +73 -0
  10. package/dist/dts/api/endpoint/endpoint.d.ts +32 -0
  11. package/dist/dts/api/endpoint/extension.d.ts +23 -0
  12. package/dist/dts/api/endpoint/index.d.ts +2 -0
  13. package/dist/dts/api/endpoint/packets.d.ts +51 -0
  14. package/dist/dts/api/extension-registry.d.ts +8 -0
  15. package/dist/dts/api/extension.d.ts +11 -0
  16. package/dist/dts/api/http/extension.d.ts +174 -0
  17. package/dist/dts/api/http/index.d.ts +1 -0
  18. package/dist/dts/api/i18n/extension.d.ts +22 -0
  19. package/dist/dts/api/i18n/index.d.ts +1 -0
  20. package/dist/dts/api/index.d.ts +2 -0
  21. package/dist/dts/api/logger/extension.d.ts +25 -0
  22. package/dist/dts/api/logger/index.d.ts +1 -0
  23. package/dist/dts/api/logger/packets.d.ts +18 -0
  24. package/dist/dts/api/permission/extension.d.ts +18 -0
  25. package/dist/dts/api/permission/index.d.ts +1 -0
  26. package/dist/dts/api/permission/permission.d.ts +25 -0
  27. package/dist/dts/api/plugin/extension.d.ts +43 -0
  28. package/dist/dts/api/plugin/index.d.ts +2 -0
  29. package/dist/dts/api/plugin/package-info.d.ts +84 -0
  30. package/dist/dts/api/registry/extension.d.ts +26 -0
  31. package/dist/dts/api/registry/index.d.ts +2 -0
  32. package/dist/dts/api/registry/packets.d.ts +20 -0
  33. package/dist/dts/api/registry/registry.d.ts +44 -0
  34. package/dist/dts/api/server/extension.d.ts +47 -0
  35. package/dist/dts/api/server/index.d.ts +1 -0
  36. package/dist/dts/api/session/extension.d.ts +51 -0
  37. package/dist/dts/api/session/index.d.ts +1 -0
  38. package/dist/dts/api/signal/extension.d.ts +22 -0
  39. package/dist/dts/api/signal/index.d.ts +1 -0
  40. package/dist/dts/api/signal/packets.d.ts +21 -0
  41. package/dist/dts/api/signal/signal.d.ts +33 -0
  42. package/dist/dts/api/table/extension.d.ts +29 -0
  43. package/dist/dts/api/table/index.d.ts +2 -0
  44. package/dist/dts/api/table/packets.d.ts +65 -0
  45. package/dist/dts/api/table/table.d.ts +76 -0
  46. package/dist/dts/app.d.ts +44 -37
  47. package/dist/dts/const.d.ts +0 -1
  48. package/dist/dts/errors.d.ts +18 -13
  49. package/dist/dts/event/index.d.ts +6 -0
  50. package/dist/dts/helper.d.ts +13 -0
  51. package/dist/dts/identifier.d.ts +45 -39
  52. package/dist/dts/index.d.ts +37 -7
  53. package/dist/dts/localization/index.d.ts +2 -3
  54. package/dist/dts/localization/locale.d.ts +732 -733
  55. package/dist/dts/localization/localization.d.ts +3 -6
  56. package/dist/dts/lock.d.ts +6 -0
  57. package/dist/dts/network/connection.d.ts +13 -13
  58. package/dist/dts/network/encryption.d.ts +38 -0
  59. package/dist/dts/network/frame-transport.d.ts +22 -0
  60. package/dist/dts/network/index.d.ts +5 -4
  61. package/dist/dts/network/network.d.ts +52 -51
  62. package/dist/dts/network/packet/index.d.ts +2 -3
  63. package/dist/dts/network/packet/packet-types.d.ts +73 -52
  64. package/dist/dts/network/packet/packet.d.ts +26 -22
  65. package/dist/dts/network/websocket-transport.d.ts +24 -0
  66. package/dist/dts/omu.d.ts +60 -49
  67. package/dist/dts/serialize/bytebuffer.d.ts +71 -0
  68. package/dist/dts/serialize/index.d.ts +2 -0
  69. package/dist/dts/serialize/serializer.d.ts +38 -0
  70. package/dist/dts/token.d.ts +11 -10
  71. package/dist/dts/version.d.ts +1 -2
  72. package/dist/esm/address.js +4 -2
  73. package/dist/esm/api/asset/extension.js +877 -0
  74. package/dist/esm/api/asset/index.js +875 -0
  75. package/dist/esm/api/dashboard/extension.js +1281 -0
  76. package/dist/esm/api/dashboard/handler.js +4 -0
  77. package/dist/esm/api/dashboard/index.js +1279 -0
  78. package/dist/esm/api/dashboard/packets.js +413 -0
  79. package/dist/esm/api/endpoint/endpoint.js +380 -0
  80. package/dist/esm/api/endpoint/extension.js +1087 -0
  81. package/dist/esm/api/endpoint/index.js +380 -0
  82. package/dist/esm/api/endpoint/packets.js +790 -0
  83. package/dist/esm/api/extension-registry.js +23 -0
  84. package/dist/esm/api/extension.js +275 -0
  85. package/dist/esm/api/http/extension.js +1426 -0
  86. package/dist/esm/api/http/index.js +1312 -0
  87. package/dist/esm/api/i18n/extension.js +1237 -0
  88. package/dist/esm/api/i18n/index.js +1235 -0
  89. package/dist/esm/api/index.js +292 -0
  90. package/dist/esm/api/logger/extension.js +847 -0
  91. package/dist/esm/api/logger/index.js +843 -0
  92. package/dist/esm/api/logger/packets.js +664 -0
  93. package/dist/esm/api/permission/extension.js +529 -0
  94. package/dist/esm/api/permission/index.js +291 -0
  95. package/dist/esm/api/permission/permission.js +291 -0
  96. package/dist/esm/api/plugin/extension.js +528 -0
  97. package/dist/esm/api/plugin/index.js +526 -0
  98. package/dist/esm/api/plugin/package-info.js +4 -0
  99. package/dist/esm/api/registry/extension.js +1170 -0
  100. package/dist/esm/api/registry/index.js +1169 -0
  101. package/dist/esm/api/registry/packets.js +685 -0
  102. package/dist/esm/api/registry/registry.js +380 -0
  103. package/dist/esm/api/server/extension.js +2009 -0
  104. package/dist/esm/api/server/index.js +1987 -0
  105. package/dist/esm/api/session/extension.js +2111 -0
  106. package/dist/esm/api/session/index.js +2111 -0
  107. package/dist/esm/api/signal/extension.js +1022 -0
  108. package/dist/esm/api/signal/index.js +376 -0
  109. package/dist/esm/api/signal/packets.js +681 -0
  110. package/dist/esm/api/signal/signal.js +376 -0
  111. package/dist/esm/api/table/extension.js +1544 -0
  112. package/dist/esm/api/table/index.js +1543 -0
  113. package/dist/esm/api/table/packets.js +895 -0
  114. package/dist/esm/api/table/table.js +380 -0
  115. package/dist/esm/app.js +259 -40
  116. package/dist/esm/const.js +11 -3
  117. package/dist/esm/errors.js +533 -40
  118. package/dist/esm/event/index.js +22 -0
  119. package/dist/esm/helper.js +15 -0
  120. package/dist/esm/identifier.js +244 -139
  121. package/dist/esm/index.js +4837 -6
  122. package/dist/esm/localization/index.js +742 -2
  123. package/dist/esm/localization/locale.js +741 -735
  124. package/dist/esm/localization/localization.js +4 -2
  125. package/dist/esm/lock.js +46 -0
  126. package/dist/esm/network/connection.js +288 -27
  127. package/dist/esm/network/encryption.js +977 -0
  128. package/dist/esm/network/frame-transport.js +525 -0
  129. package/dist/esm/network/index.js +1614 -2
  130. package/dist/esm/network/network.js +1337 -195
  131. package/dist/esm/network/packet/index.js +482 -2
  132. package/dist/esm/network/packet/packet-types.js +478 -80
  133. package/dist/esm/network/packet/packet.js +125 -16
  134. package/dist/esm/network/websocket-transport.js +487 -0
  135. package/dist/esm/omu.js +4621 -91
  136. package/dist/esm/serialize/bytebuffer.js +378 -0
  137. package/dist/esm/serialize/index.js +465 -0
  138. package/dist/esm/serialize/serializer.js +97 -0
  139. package/dist/esm/token.js +42 -18
  140. package/dist/esm/version.js +9 -2
  141. package/package.json +26 -33
  142. package/src/address.ts +1 -0
  143. package/src/api/asset/extension.ts +159 -0
  144. package/src/api/asset/index.ts +6 -0
  145. package/src/api/dashboard/extension.ts +614 -0
  146. package/src/api/dashboard/handler.ts +23 -0
  147. package/src/api/dashboard/index.ts +36 -0
  148. package/src/api/dashboard/packets.ts +126 -0
  149. package/src/api/endpoint/endpoint.ts +56 -0
  150. package/src/api/endpoint/extension.ts +133 -0
  151. package/src/api/endpoint/index.ts +3 -0
  152. package/src/api/endpoint/packets.ts +176 -0
  153. package/src/api/extension-registry.ts +17 -0
  154. package/src/{extension → api}/extension.ts +3 -4
  155. package/src/api/http/extension.ts +752 -0
  156. package/src/api/http/index.ts +2 -0
  157. package/src/{extension/i18n/i18n-extension.ts → api/i18n/extension.ts} +9 -10
  158. package/src/api/i18n/index.ts +2 -0
  159. package/src/{extension/logger/logger-extension.ts → api/logger/extension.ts} +16 -17
  160. package/src/api/logger/index.ts +4 -0
  161. package/src/{extension → api}/logger/packets.ts +3 -3
  162. package/src/{extension/permission/permission-extension.ts → api/permission/extension.ts} +24 -23
  163. package/src/api/permission/index.ts +2 -0
  164. package/src/{extension → api}/permission/permission.ts +8 -11
  165. package/src/{extension/plugin/plugin-extension.ts → api/plugin/extension.ts} +32 -19
  166. package/src/api/plugin/index.ts +3 -0
  167. package/src/{extension/registry/registry-extension.ts → api/registry/extension.ts} +76 -47
  168. package/src/api/registry/index.ts +3 -0
  169. package/src/api/registry/packets.ts +64 -0
  170. package/src/api/registry/registry.ts +73 -0
  171. package/src/api/server/extension.ts +126 -0
  172. package/src/api/server/index.ts +11 -0
  173. package/src/api/session/extension.ts +196 -0
  174. package/src/api/session/index.ts +7 -0
  175. package/src/{extension/signal/signal-extension.ts → api/signal/extension.ts} +42 -35
  176. package/src/api/signal/index.ts +1 -0
  177. package/src/api/signal/packets.ts +61 -0
  178. package/src/api/signal/signal.ts +67 -0
  179. package/src/{extension/table/table-extension.ts → api/table/extension.ts} +111 -154
  180. package/src/api/table/index.ts +3 -0
  181. package/src/{extension → api}/table/packets.ts +28 -27
  182. package/src/{extension → api}/table/table.ts +24 -18
  183. package/src/app.ts +43 -25
  184. package/src/const.ts +2 -2
  185. package/src/errors.ts +12 -0
  186. package/src/helper.ts +16 -0
  187. package/src/identifier.ts +59 -4
  188. package/src/index.ts +86 -5
  189. package/src/localization/index.ts +2 -2
  190. package/src/lock.ts +43 -0
  191. package/src/network/connection.ts +7 -5
  192. package/src/network/encryption.ts +221 -0
  193. package/src/network/frame-transport.ts +186 -0
  194. package/src/network/index.ts +4 -1
  195. package/src/network/network.ts +138 -90
  196. package/src/network/packet/index.ts +3 -2
  197. package/src/network/packet/packet-types.ts +79 -36
  198. package/src/network/packet/packet.ts +20 -11
  199. package/src/network/websocket-transport.ts +123 -0
  200. package/src/omu.ts +56 -30
  201. package/src/serialize/bytebuffer.ts +424 -0
  202. package/src/serialize/index.ts +2 -0
  203. package/src/serialize/serializer.ts +149 -0
  204. package/src/token.ts +28 -14
  205. package/src/version.ts +1 -1
  206. package/tsconfig.json +8 -2
  207. package/tsconfig.tsbuildinfo +1 -0
  208. package/LICENSE +0 -21
  209. package/dist/dts/address.d.ts.map +0 -1
  210. package/dist/dts/app.d.ts.map +0 -1
  211. package/dist/dts/bytebuffer.d.ts +0 -49
  212. package/dist/dts/bytebuffer.d.ts.map +0 -1
  213. package/dist/dts/client.d.ts +0 -48
  214. package/dist/dts/client.d.ts.map +0 -1
  215. package/dist/dts/const.d.ts.map +0 -1
  216. package/dist/dts/errors.d.ts.map +0 -1
  217. package/dist/dts/event-emitter.d.ts +0 -7
  218. package/dist/dts/event-emitter.d.ts.map +0 -1
  219. package/dist/dts/extension/asset/asset-extension.d.ts +0 -24
  220. package/dist/dts/extension/asset/asset-extension.d.ts.map +0 -1
  221. package/dist/dts/extension/asset/index.d.ts +0 -2
  222. package/dist/dts/extension/asset/index.d.ts.map +0 -1
  223. package/dist/dts/extension/dashboard/dashboard-extension.d.ts +0 -29
  224. package/dist/dts/extension/dashboard/dashboard-extension.d.ts.map +0 -1
  225. package/dist/dts/extension/dashboard/dashboard.d.ts +0 -10
  226. package/dist/dts/extension/dashboard/dashboard.d.ts.map +0 -1
  227. package/dist/dts/extension/dashboard/index.d.ts +0 -3
  228. package/dist/dts/extension/dashboard/index.d.ts.map +0 -1
  229. package/dist/dts/extension/dashboard/packets.d.ts +0 -41
  230. package/dist/dts/extension/dashboard/packets.d.ts.map +0 -1
  231. package/dist/dts/extension/endpoint/endpoint-extension.d.ts +0 -16
  232. package/dist/dts/extension/endpoint/endpoint-extension.d.ts.map +0 -1
  233. package/dist/dts/extension/endpoint/endpoint.d.ts +0 -22
  234. package/dist/dts/extension/endpoint/endpoint.d.ts.map +0 -1
  235. package/dist/dts/extension/endpoint/index.d.ts +0 -3
  236. package/dist/dts/extension/endpoint/index.d.ts.map +0 -1
  237. package/dist/dts/extension/endpoint/packets.d.ts +0 -24
  238. package/dist/dts/extension/endpoint/packets.d.ts.map +0 -1
  239. package/dist/dts/extension/extension-registry.d.ts +0 -12
  240. package/dist/dts/extension/extension-registry.d.ts.map +0 -1
  241. package/dist/dts/extension/extension.d.ts +0 -13
  242. package/dist/dts/extension/extension.d.ts.map +0 -1
  243. package/dist/dts/extension/i18n/i18n-extension.d.ts +0 -21
  244. package/dist/dts/extension/i18n/i18n-extension.d.ts.map +0 -1
  245. package/dist/dts/extension/i18n/index.d.ts +0 -2
  246. package/dist/dts/extension/i18n/index.d.ts.map +0 -1
  247. package/dist/dts/extension/index.d.ts +0 -3
  248. package/dist/dts/extension/index.d.ts.map +0 -1
  249. package/dist/dts/extension/logger/index.d.ts +0 -2
  250. package/dist/dts/extension/logger/index.d.ts.map +0 -1
  251. package/dist/dts/extension/logger/logger-extension.d.ts +0 -25
  252. package/dist/dts/extension/logger/logger-extension.d.ts.map +0 -1
  253. package/dist/dts/extension/logger/packets.d.ts +0 -19
  254. package/dist/dts/extension/logger/packets.d.ts.map +0 -1
  255. package/dist/dts/extension/permission/index.d.ts +0 -3
  256. package/dist/dts/extension/permission/index.d.ts.map +0 -1
  257. package/dist/dts/extension/permission/permission-extension.d.ts +0 -18
  258. package/dist/dts/extension/permission/permission-extension.d.ts.map +0 -1
  259. package/dist/dts/extension/permission/permission.d.ts +0 -28
  260. package/dist/dts/extension/permission/permission.d.ts.map +0 -1
  261. package/dist/dts/extension/plugin/index.d.ts +0 -2
  262. package/dist/dts/extension/plugin/index.d.ts.map +0 -1
  263. package/dist/dts/extension/plugin/package-info.d.ts +0 -85
  264. package/dist/dts/extension/plugin/package-info.d.ts.map +0 -1
  265. package/dist/dts/extension/plugin/plugin-extension.d.ts +0 -34
  266. package/dist/dts/extension/plugin/plugin-extension.d.ts.map +0 -1
  267. package/dist/dts/extension/registry/index.d.ts +0 -3
  268. package/dist/dts/extension/registry/index.d.ts.map +0 -1
  269. package/dist/dts/extension/registry/packets.d.ts +0 -17
  270. package/dist/dts/extension/registry/packets.d.ts.map +0 -1
  271. package/dist/dts/extension/registry/registry-extension.d.ts +0 -19
  272. package/dist/dts/extension/registry/registry-extension.d.ts.map +0 -1
  273. package/dist/dts/extension/registry/registry.d.ts +0 -40
  274. package/dist/dts/extension/registry/registry.d.ts.map +0 -1
  275. package/dist/dts/extension/server/index.d.ts +0 -2
  276. package/dist/dts/extension/server/index.d.ts.map +0 -1
  277. package/dist/dts/extension/server/server-extension.d.ts +0 -41
  278. package/dist/dts/extension/server/server-extension.d.ts.map +0 -1
  279. package/dist/dts/extension/signal/index.d.ts +0 -3
  280. package/dist/dts/extension/signal/index.d.ts.map +0 -1
  281. package/dist/dts/extension/signal/packets.d.ts +0 -17
  282. package/dist/dts/extension/signal/packets.d.ts.map +0 -1
  283. package/dist/dts/extension/signal/signal-extension.d.ts +0 -18
  284. package/dist/dts/extension/signal/signal-extension.d.ts.map +0 -1
  285. package/dist/dts/extension/signal/signal.d.ts +0 -33
  286. package/dist/dts/extension/signal/signal.d.ts.map +0 -1
  287. package/dist/dts/extension/table/index.d.ts +0 -3
  288. package/dist/dts/extension/table/index.d.ts.map +0 -1
  289. package/dist/dts/extension/table/packets.d.ts +0 -66
  290. package/dist/dts/extension/table/packets.d.ts.map +0 -1
  291. package/dist/dts/extension/table/table-extension.d.ts +0 -31
  292. package/dist/dts/extension/table/table-extension.d.ts.map +0 -1
  293. package/dist/dts/extension/table/table.d.ts +0 -79
  294. package/dist/dts/extension/table/table.d.ts.map +0 -1
  295. package/dist/dts/identifier.d.ts.map +0 -1
  296. package/dist/dts/index.d.ts.map +0 -1
  297. package/dist/dts/interface.d.ts +0 -7
  298. package/dist/dts/interface.d.ts.map +0 -1
  299. package/dist/dts/localization/index.d.ts.map +0 -1
  300. package/dist/dts/localization/locale.d.ts.map +0 -1
  301. package/dist/dts/localization/localization.d.ts.map +0 -1
  302. package/dist/dts/model.d.ts +0 -5
  303. package/dist/dts/model.d.ts.map +0 -1
  304. package/dist/dts/network/connection.d.ts.map +0 -1
  305. package/dist/dts/network/index.d.ts.map +0 -1
  306. package/dist/dts/network/network.d.ts.map +0 -1
  307. package/dist/dts/network/packet/index.d.ts.map +0 -1
  308. package/dist/dts/network/packet/packet-types.d.ts.map +0 -1
  309. package/dist/dts/network/packet/packet.d.ts.map +0 -1
  310. package/dist/dts/network/websocket-connection.d.ts +0 -20
  311. package/dist/dts/network/websocket-connection.d.ts.map +0 -1
  312. package/dist/dts/omu.d.ts.map +0 -1
  313. package/dist/dts/serializer.d.ts +0 -22
  314. package/dist/dts/serializer.d.ts.map +0 -1
  315. package/dist/dts/token.d.ts.map +0 -1
  316. package/dist/dts/version.d.ts.map +0 -1
  317. package/dist/esm/address.js.map +0 -1
  318. package/dist/esm/app.js.map +0 -1
  319. package/dist/esm/bytebuffer.js +0 -191
  320. package/dist/esm/bytebuffer.js.map +0 -1
  321. package/dist/esm/client.js +0 -2
  322. package/dist/esm/client.js.map +0 -1
  323. package/dist/esm/const.js.map +0 -1
  324. package/dist/esm/errors.js.map +0 -1
  325. package/dist/esm/event-emitter.js +0 -15
  326. package/dist/esm/event-emitter.js.map +0 -1
  327. package/dist/esm/extension/asset/asset-extension.js +0 -104
  328. package/dist/esm/extension/asset/asset-extension.js.map +0 -1
  329. package/dist/esm/extension/asset/index.js +0 -2
  330. package/dist/esm/extension/asset/index.js.map +0 -1
  331. package/dist/esm/extension/dashboard/dashboard-extension.js +0 -186
  332. package/dist/esm/extension/dashboard/dashboard-extension.js.map +0 -1
  333. package/dist/esm/extension/dashboard/dashboard.js +0 -2
  334. package/dist/esm/extension/dashboard/dashboard.js.map +0 -1
  335. package/dist/esm/extension/dashboard/index.js +0 -2
  336. package/dist/esm/extension/dashboard/index.js.map +0 -1
  337. package/dist/esm/extension/dashboard/packets.js +0 -96
  338. package/dist/esm/extension/dashboard/packets.js.map +0 -1
  339. package/dist/esm/extension/endpoint/endpoint-extension.js +0 -86
  340. package/dist/esm/extension/endpoint/endpoint-extension.js.map +0 -1
  341. package/dist/esm/extension/endpoint/endpoint.js +0 -22
  342. package/dist/esm/extension/endpoint/endpoint.js.map +0 -1
  343. package/dist/esm/extension/endpoint/index.js +0 -2
  344. package/dist/esm/extension/endpoint/index.js.map +0 -1
  345. package/dist/esm/extension/endpoint/packets.js +0 -77
  346. package/dist/esm/extension/endpoint/packets.js.map +0 -1
  347. package/dist/esm/extension/extension-registry.js +0 -34
  348. package/dist/esm/extension/extension-registry.js.map +0 -1
  349. package/dist/esm/extension/extension.js +0 -16
  350. package/dist/esm/extension/extension.js.map +0 -1
  351. package/dist/esm/extension/i18n/i18n-extension.js +0 -68
  352. package/dist/esm/extension/i18n/i18n-extension.js.map +0 -1
  353. package/dist/esm/extension/i18n/index.js +0 -2
  354. package/dist/esm/extension/i18n/index.js.map +0 -1
  355. package/dist/esm/extension/index.js +0 -3
  356. package/dist/esm/extension/index.js.map +0 -1
  357. package/dist/esm/extension/logger/index.js +0 -2
  358. package/dist/esm/extension/logger/index.js.map +0 -1
  359. package/dist/esm/extension/logger/logger-extension.js +0 -60
  360. package/dist/esm/extension/logger/logger-extension.js.map +0 -1
  361. package/dist/esm/extension/logger/packets.js +0 -33
  362. package/dist/esm/extension/logger/packets.js.map +0 -1
  363. package/dist/esm/extension/permission/index.js +0 -3
  364. package/dist/esm/extension/permission/index.js.map +0 -1
  365. package/dist/esm/extension/permission/permission-extension.js +0 -74
  366. package/dist/esm/extension/permission/permission-extension.js.map +0 -1
  367. package/dist/esm/extension/permission/permission.js +0 -28
  368. package/dist/esm/extension/permission/permission.js.map +0 -1
  369. package/dist/esm/extension/plugin/index.js +0 -2
  370. package/dist/esm/extension/plugin/index.js.map +0 -1
  371. package/dist/esm/extension/plugin/package-info.js +0 -2
  372. package/dist/esm/extension/plugin/package-info.js.map +0 -1
  373. package/dist/esm/extension/plugin/plugin-extension.js +0 -63
  374. package/dist/esm/extension/plugin/plugin-extension.js.map +0 -1
  375. package/dist/esm/extension/registry/index.js +0 -3
  376. package/dist/esm/extension/registry/index.js.map +0 -1
  377. package/dist/esm/extension/registry/packets.js +0 -48
  378. package/dist/esm/extension/registry/packets.js.map +0 -1
  379. package/dist/esm/extension/registry/registry-extension.js +0 -134
  380. package/dist/esm/extension/registry/registry-extension.js.map +0 -1
  381. package/dist/esm/extension/registry/registry.js +0 -55
  382. package/dist/esm/extension/registry/registry.js.map +0 -1
  383. package/dist/esm/extension/server/index.js +0 -2
  384. package/dist/esm/extension/server/index.js.map +0 -1
  385. package/dist/esm/extension/server/server-extension.js +0 -138
  386. package/dist/esm/extension/server/server-extension.js.map +0 -1
  387. package/dist/esm/extension/signal/index.js +0 -3
  388. package/dist/esm/extension/signal/index.js.map +0 -1
  389. package/dist/esm/extension/signal/packets.js +0 -44
  390. package/dist/esm/extension/signal/packets.js.map +0 -1
  391. package/dist/esm/extension/signal/signal-extension.js +0 -95
  392. package/dist/esm/extension/signal/signal-extension.js.map +0 -1
  393. package/dist/esm/extension/signal/signal.js +0 -53
  394. package/dist/esm/extension/signal/signal.js.map +0 -1
  395. package/dist/esm/extension/table/index.js +0 -3
  396. package/dist/esm/extension/table/index.js.map +0 -1
  397. package/dist/esm/extension/table/packets.js +0 -252
  398. package/dist/esm/extension/table/packets.js.map +0 -1
  399. package/dist/esm/extension/table/table-extension.js +0 -454
  400. package/dist/esm/extension/table/table-extension.js.map +0 -1
  401. package/dist/esm/extension/table/table.js +0 -20
  402. package/dist/esm/extension/table/table.js.map +0 -1
  403. package/dist/esm/identifier.js.map +0 -1
  404. package/dist/esm/index.js.map +0 -1
  405. package/dist/esm/interface.js +0 -2
  406. package/dist/esm/interface.js.map +0 -1
  407. package/dist/esm/localization/index.js.map +0 -1
  408. package/dist/esm/localization/locale.js.map +0 -1
  409. package/dist/esm/localization/localization.js.map +0 -1
  410. package/dist/esm/model.js +0 -2
  411. package/dist/esm/model.js.map +0 -1
  412. package/dist/esm/network/connection.js.map +0 -1
  413. package/dist/esm/network/index.js.map +0 -1
  414. package/dist/esm/network/network.js.map +0 -1
  415. package/dist/esm/network/packet/index.js.map +0 -1
  416. package/dist/esm/network/packet/packet-types.js.map +0 -1
  417. package/dist/esm/network/packet/packet.js.map +0 -1
  418. package/dist/esm/network/websocket-connection.js +0 -95
  419. package/dist/esm/network/websocket-connection.js.map +0 -1
  420. package/dist/esm/omu.js.map +0 -1
  421. package/dist/esm/serializer.js +0 -55
  422. package/dist/esm/serializer.js.map +0 -1
  423. package/dist/esm/token.js.map +0 -1
  424. package/dist/esm/version.js.map +0 -1
  425. package/eslint.config.js +0 -6
  426. package/src/bytebuffer.ts +0 -222
  427. package/src/client.ts +0 -53
  428. package/src/extension/asset/asset-extension.ts +0 -148
  429. package/src/extension/asset/index.ts +0 -6
  430. package/src/extension/dashboard/dashboard-extension.ts +0 -238
  431. package/src/extension/dashboard/dashboard.ts +0 -11
  432. package/src/extension/dashboard/index.ts +0 -9
  433. package/src/extension/dashboard/packets.ts +0 -98
  434. package/src/extension/endpoint/endpoint-extension.ts +0 -125
  435. package/src/extension/endpoint/endpoint.ts +0 -58
  436. package/src/extension/endpoint/index.ts +0 -3
  437. package/src/extension/endpoint/packets.ts +0 -78
  438. package/src/extension/extension-registry.ts +0 -39
  439. package/src/extension/i18n/index.ts +0 -2
  440. package/src/extension/logger/index.ts +0 -5
  441. package/src/extension/permission/index.ts +0 -3
  442. package/src/extension/plugin/index.ts +0 -4
  443. package/src/extension/registry/index.ts +0 -3
  444. package/src/extension/registry/packets.ts +0 -50
  445. package/src/extension/registry/registry.ts +0 -98
  446. package/src/extension/server/index.ts +0 -6
  447. package/src/extension/server/server-extension.ts +0 -173
  448. package/src/extension/signal/index.ts +0 -3
  449. package/src/extension/signal/packets.ts +0 -46
  450. package/src/extension/signal/signal.ts +0 -89
  451. package/src/extension/table/index.ts +0 -3
  452. package/src/interface.ts +0 -8
  453. package/src/model.ts +0 -4
  454. package/src/network/websocket-connection.ts +0 -109
  455. package/src/serializer.ts +0 -89
  456. /package/src/{extension → api}/index.ts +0 -0
  457. /package/src/{extension → api}/plugin/package-info.ts +0 -0
  458. /package/src/{event-emitter.ts → event/index.ts} +0 -0
@@ -0,0 +1,752 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
2
+ import { textDecoder, textEncoder } from '../../const';
3
+ import { Identifier } from '../../identifier';
4
+ import { PacketType } from '../../network/packet';
5
+ import { Omu } from '../../omu';
6
+ import { ByteReader, ByteWriter, JsonType } from '../../serialize';
7
+ import { Extension, ExtensionType } from '../extension';
8
+
9
+ export const HTTP_EXTENSION_TYPE: ExtensionType<HttpExtension> = new ExtensionType(
10
+ 'http',
11
+ (omu: Omu) => new HttpExtension(omu),
12
+ );
13
+
14
+ export const HTTP_REQUEST_PERMISSION_ID: Identifier = HTTP_EXTENSION_TYPE.join('request');
15
+
16
+ type RequestHandle = {
17
+ id: string;
18
+ };
19
+
20
+ type HttpRequest = RequestHandle & {
21
+ header: Record<string, string>;
22
+ method: string;
23
+ redirect: RequestRedirect;
24
+ url: string;
25
+ };
26
+
27
+ const REQUEST_CREATE = PacketType.createJson<HttpRequest>(HTTP_EXTENSION_TYPE, {
28
+ name: 'request_create',
29
+ });
30
+
31
+ class DataChunk<T extends JsonType> {
32
+ constructor(
33
+ public readonly meta: T,
34
+ public readonly body: Uint8Array,
35
+ ) { }
36
+
37
+ public static serialize<T extends JsonType>(data: DataChunk<T>): Uint8Array {
38
+ const writer = new ByteWriter();
39
+ writer.writeJSON(data.meta);
40
+ writer.writeUint8Array(data.body);
41
+ return writer.finish();
42
+ }
43
+
44
+ public static deserialize<T extends JsonType>(data: Uint8Array): DataChunk<T> {
45
+ const reader = ByteReader.fromUint8Array(data);
46
+ const meta = reader.readJSON<T>();
47
+ const body = reader.readUint8Array();
48
+ return new DataChunk(meta, body);
49
+ }
50
+ }
51
+
52
+ const REQUEST_SEND = PacketType.createSerialized<DataChunk<RequestHandle>>(HTTP_EXTENSION_TYPE, {
53
+ name: 'request_send',
54
+ serializer: DataChunk,
55
+ });
56
+
57
+ type HttpRequestClose = RequestHandle;
58
+
59
+ const REQUEST_CLOSE = PacketType.createJson<HttpRequestClose>(HTTP_EXTENSION_TYPE, {
60
+ name: 'request_close',
61
+ });
62
+
63
+ type HttpResponse = RequestHandle & {
64
+ header: Record<string, string>;
65
+ status: number;
66
+ statusText: string;
67
+ url: string;
68
+ history: HttpResponse[];
69
+ redirected: boolean;
70
+ };
71
+
72
+ const RESPONSE_CREATE = PacketType.createJson<HttpResponse>(HTTP_EXTENSION_TYPE, {
73
+ name: 'response_create',
74
+ });
75
+
76
+ const RESPONSE_CHUNK = PacketType.createSerialized<DataChunk<RequestHandle>>(HTTP_EXTENSION_TYPE, {
77
+ name: 'response_chunk',
78
+ serializer: DataChunk,
79
+ });
80
+
81
+ const RESPONSE_CLOSE = PacketType.createJson<RequestHandle>(HTTP_EXTENSION_TYPE, {
82
+ name: 'response_close',
83
+ });
84
+
85
+ type HandleStateReceiving = {
86
+ type: 'receiving';
87
+ receive(data: Uint8Array): void;
88
+ close(): void;
89
+ };
90
+
91
+ type HandleStateCreated = {
92
+ type: 'created';
93
+ setResponse(response: HttpResponse): void;
94
+ };
95
+
96
+ type HandleState = HandleStateCreated | HandleStateReceiving;
97
+
98
+ type WSData = string | ArrayBufferLike | Blob | ArrayBufferView;
99
+
100
+ export const WSMsgType = {
101
+ CONTINUATION: 0x0,
102
+ TEXT: 0x1,
103
+ BINARY: 0x2,
104
+ PING: 0x9,
105
+ PONG: 0xA,
106
+ CLOSE: 0x8,
107
+ } as const;
108
+
109
+ export const WSCloseCode = {
110
+ OK: 1000,
111
+ GOING_AWAY: 1001,
112
+ PROTOCOL_ERROR: 1002,
113
+ UNSUPPORTED_DATA: 1003,
114
+ ABNORMAL_CLOSURE: 1006,
115
+ INVALID_TEXT: 1007,
116
+ POLICY_VIOLATION: 1008,
117
+ MESSAGE_TOO_BIG: 1009,
118
+ MANDATORY_EXTENSION: 1010,
119
+ INTERNAL_ERROR: 1011,
120
+ SERVICE_RESTART: 1012,
121
+ TRY_AGAIN_LATER: 1013,
122
+ BAD_GATEWAY: 1014,
123
+ } as const;
124
+
125
+ type WebSocketOpen = RequestHandle & {
126
+ url: string;
127
+ protocol?: string | null;
128
+ };
129
+ type WebSocketClose = RequestHandle & {
130
+ code?: number;
131
+ reason?: string | null;
132
+ };
133
+
134
+ type WebSocketHandle = {
135
+ ws: OmuWS;
136
+ open: (response: WebSocketOpen) => void;
137
+ dispatch: (data: DataChunk<WSDataMeta>) => void;
138
+ close: (response: WebSocketClose) => void;
139
+ error: (response: WebSocketError) => void;
140
+ };
141
+
142
+ type WSDataMeta = {
143
+ id: string;
144
+ type:
145
+ | typeof WSMsgType.TEXT
146
+ | typeof WSMsgType.BINARY
147
+ | typeof WSMsgType.PING
148
+ | typeof WSMsgType.PONG;
149
+ };
150
+
151
+ type WSHandleState = {
152
+ type: 'created' | 'receiving';
153
+ handle: WebSocketHandle;
154
+ };
155
+
156
+ const WEBSOCKET_CREATE = PacketType.createJson<HttpRequest>(HTTP_EXTENSION_TYPE, {
157
+ name: 'ws_create',
158
+ });
159
+
160
+ const WEBSOCKET_OPEN = PacketType.createJson<WebSocketOpen>(HTTP_EXTENSION_TYPE, {
161
+ name: 'ws_open',
162
+ });
163
+
164
+ const WEBSOCKET_DATA = PacketType.createSerialized<DataChunk<WSDataMeta>>(HTTP_EXTENSION_TYPE, {
165
+ name: 'ws_data',
166
+ serializer: DataChunk,
167
+ });
168
+
169
+ const WEBSOCKET_CLOSE = PacketType.createJson<WebSocketClose>(HTTP_EXTENSION_TYPE, {
170
+ name: 'ws_close',
171
+ });
172
+
173
+ type WebSocketError = RequestHandle & {
174
+ type: 'ConnectionRefused';
175
+ reason?: string | null;
176
+ };
177
+
178
+ const WEBSOCKET_ERROR = PacketType.createJson<WebSocketError>(HTTP_EXTENSION_TYPE, {
179
+ name: 'ws_error',
180
+ });
181
+
182
+ function createFuture<T>(): {
183
+ promise: Promise<T>;
184
+ resolve: (value: T) => void;
185
+ reject: (reason?: unknown) => void;
186
+ } {
187
+ let resolve: ((value: T) => void) | undefined = undefined;
188
+ let reject: ((reason?: unknown) => void) | undefined = undefined;
189
+ const promise = new Promise<T>((res, rej) => {
190
+ resolve = res;
191
+ reject = rej;
192
+ });
193
+ if (!resolve || !reject) throw new Error('Failed to create future');
194
+ return {
195
+ promise,
196
+ resolve,
197
+ reject,
198
+ };
199
+ }
200
+
201
+ type WSSendTask = {
202
+ id: string;
203
+ data: WSData;
204
+ };
205
+
206
+ export class HttpExtension implements Extension {
207
+ public readonly type: ExtensionType<Extension> = HTTP_EXTENSION_TYPE;
208
+ private requestCount: number = 0;
209
+
210
+ private readonly httpHandles: Record<string, HandleState | undefined> = {};
211
+ private readonly wsHandles: Record<string, WSHandleState> = {};
212
+ private readonly wsSendQueue: WSSendTask[] = [];
213
+ private wsSendWaitResolve: () => void = () => {};
214
+
215
+ constructor(
216
+ private readonly omu: Omu,
217
+ ) {
218
+ omu.network.registerPacket(
219
+ REQUEST_CREATE,
220
+ REQUEST_SEND,
221
+ REQUEST_CLOSE,
222
+ RESPONSE_CREATE,
223
+ RESPONSE_CHUNK,
224
+ RESPONSE_CLOSE,
225
+ WEBSOCKET_CLOSE,
226
+ WEBSOCKET_CREATE,
227
+ WEBSOCKET_DATA,
228
+ WEBSOCKET_OPEN,
229
+ WEBSOCKET_ERROR,
230
+ );
231
+ omu.network.addPacketHandler(RESPONSE_CREATE, (packet) => {
232
+ const handle = this.httpHandles[packet.id];
233
+ if (!handle) {
234
+ console.warn('Received response for unknown request', packet.id);
235
+ return;
236
+ }
237
+ if (handle.type !== 'created') {
238
+ console.warn('Received response for already handled request', packet.id);
239
+ return;
240
+ }
241
+ handle.setResponse(packet);
242
+ });
243
+ omu.network.addPacketHandler(RESPONSE_CHUNK, (packet) => {
244
+ const handle = this.httpHandles[packet.meta.id];
245
+ if (!handle) {
246
+ console.warn('Received response for unknown request', packet.meta.id);
247
+ return;
248
+ }
249
+ if (handle.type !== 'receiving') {
250
+ console.warn('Received chunk for non-receiving request', packet.meta.id);
251
+ return;
252
+ }
253
+ handle.receive(packet.body);
254
+ });
255
+ omu.network.addPacketHandler(RESPONSE_CLOSE, (packet) => {
256
+ const handle = this.httpHandles[packet.id];
257
+ if (!handle) {
258
+ console.warn('Received response for unknown request', packet.id);
259
+ return;
260
+ }
261
+ if (handle.type !== 'receiving') {
262
+ console.warn('Received chunk for non-receiving request', packet.id);
263
+ return;
264
+ }
265
+ handle.close();
266
+ delete this.httpHandles[packet.id];
267
+ });
268
+ omu.network.addPacketHandler(WEBSOCKET_OPEN, (packet) => {
269
+ const handle = this.wsHandles[packet.id];
270
+ if (!handle) {
271
+ console.warn('Received response for unknown socket', packet.id);
272
+ return;
273
+ }
274
+ if (handle.type !== 'created') {
275
+ console.warn('Received response for already handled socket', packet.id);
276
+ return;
277
+ }
278
+ handle.handle.open(packet);
279
+ handle.type = 'receiving';
280
+ });
281
+ omu.network.addPacketHandler(WEBSOCKET_DATA, (packet) => {
282
+ const handle = this.wsHandles[packet.meta.id];
283
+ if (!handle) {
284
+ console.warn('Received response for unknown socket', packet.meta.id);
285
+ return;
286
+ }
287
+ if (handle.type !== 'receiving') {
288
+ console.warn('Received chunk for non-receiving socket', packet.meta.id);
289
+ return;
290
+ }
291
+ handle.handle.dispatch(packet);
292
+ });
293
+ omu.network.addPacketHandler(WEBSOCKET_CLOSE, (packet) => {
294
+ const handle = this.wsHandles[packet.id];
295
+ if (!handle) {
296
+ console.warn('Received response for unknown socket', packet.id);
297
+ return;
298
+ }
299
+ handle.handle.close(packet);
300
+ delete this.httpHandles[packet.id];
301
+ });
302
+ omu.network.addPacketHandler(WEBSOCKET_ERROR, (packet) => {
303
+ const handle = this.wsHandles[packet.id];
304
+ if (!handle) {
305
+ console.warn('Received response for unknown socket', packet.id);
306
+ return;
307
+ }
308
+ handle.handle.error(packet);
309
+ delete this.httpHandles[packet.id];
310
+ });
311
+ omu.event.ready.listen(() => {
312
+ this.wsSendLoop();
313
+ });
314
+ }
315
+
316
+ private async wsSendLoop() {
317
+ while (this.omu.running) {
318
+ const send = this.wsSendQueue.shift();
319
+ if (send) {
320
+ const array = await toUint8Array(send.data);
321
+ const type = typeof send.data === 'string' ? WSMsgType.TEXT : WSMsgType.BINARY;
322
+ this.omu.send(WEBSOCKET_DATA, new DataChunk({ id: send.id, type }, array));
323
+ } else {
324
+ await new Promise<void>((resolve) => {
325
+ this.wsSendWaitResolve = resolve;
326
+ });
327
+ }
328
+ }
329
+ }
330
+
331
+ private generateHeaders(request: Request, init?: RequestInit): Record<string, string> {
332
+ const headers: Record<string, string> = {};
333
+ const keys: Record<string, string> = {};
334
+ const set = (key: string, value: string) => {
335
+ const lowerKey = key.toLowerCase();
336
+ const originalKey = keys[lowerKey];
337
+ if (originalKey) {
338
+ delete headers[originalKey];
339
+ }
340
+ headers[key] = value;
341
+ keys[lowerKey] = key;
342
+ };
343
+ request.headers.forEach((value, key) => {
344
+ set(key, value);
345
+ });
346
+ if (init?.headers) {
347
+ if (init.headers instanceof Headers) {
348
+ init.headers.forEach((value, key) => {
349
+ set(key, value);
350
+ });
351
+ } else if (Array.isArray(init.headers)) {
352
+ for (const [key, value] of init.headers) {
353
+ set(key, value);
354
+ }
355
+ } else {
356
+ for (const key in init.headers) {
357
+ const value = init.headers[key];
358
+ set(key, value);
359
+ }
360
+ }
361
+ }
362
+ return headers;
363
+ }
364
+
365
+ private generateId(): Identifier {
366
+ return this.omu.app.id.join(`${performance.timeOrigin}-${this.requestCount++}`);
367
+ }
368
+
369
+ public async request(input: string | URL | globalThis.Request, init?: RequestInit): Promise<{ response: HttpResponse; stream: ReadableStream }> {
370
+ const request = new Request(input, init);
371
+ const id = this.generateId().key();
372
+ this.omu.send(REQUEST_CREATE, {
373
+ id,
374
+ header: this.generateHeaders(request, init),
375
+ method: request.method,
376
+ redirect: request.redirect,
377
+ url: request.url,
378
+ });
379
+ if (request.body) {
380
+ const reader = request.body.getReader();
381
+ while (true) {
382
+ const result = await reader.read();
383
+ if (result.done) {
384
+ break;
385
+ }
386
+ this.omu.send(REQUEST_SEND, {
387
+ meta: { id },
388
+ body: result.value,
389
+ });
390
+ }
391
+ }
392
+ this.omu.send(REQUEST_CLOSE, { id });
393
+ const chunks: Uint8Array[] = [];
394
+ const responseFuture = createFuture<HttpResponse>();
395
+ let chunkEvent = createFuture<boolean>();
396
+ const setResponse = (response: HttpResponse) => {
397
+ responseFuture.resolve(response);
398
+ this.httpHandles[id] = {
399
+ type: 'receiving',
400
+ receive(data: Uint8Array<ArrayBufferLike>) {
401
+ chunks.push(data);
402
+ chunkEvent.resolve(true);
403
+ chunkEvent = createFuture<boolean>();
404
+ },
405
+ close() {
406
+ chunkEvent.resolve(false);
407
+ },
408
+ };
409
+ };
410
+ this.httpHandles[id] = {
411
+ type: 'created',
412
+ setResponse,
413
+ };
414
+ const response = await responseFuture.promise;
415
+ return {
416
+ response,
417
+ stream: new ReadableStream<Uint8Array>({
418
+ async start(controller) {
419
+ while (await chunkEvent.promise) {
420
+ const chunk = chunks.shift();
421
+ if (!chunk) break;
422
+ controller.enqueue(chunk);
423
+ }
424
+ controller.close();
425
+ },
426
+ }),
427
+ };
428
+ }
429
+
430
+ public async fetch(input: string | URL | globalThis.Request, init?: RequestInit): Promise<OmuResponse> {
431
+ const { response, stream } = await this.request(input, init);
432
+ return new OmuResponse(
433
+ new Headers(response.header),
434
+ response.status >= 200 && response.status < 300,
435
+ response.redirected,
436
+ response.status,
437
+ response.statusText,
438
+ 'basic',
439
+ response.url,
440
+ stream,
441
+ false,
442
+ );
443
+ }
444
+
445
+ public async ws(input: string | URL | globalThis.Request, options?: {
446
+ method?: string;
447
+ autoclose?: boolean;
448
+ autoping?: boolean;
449
+ params?: Record<string, string>;
450
+ headers?: Record<string, string>;
451
+ }): Promise<OmuWS> {
452
+ const request = new Request(input, options);
453
+ const id = this.generateId();
454
+ const handle = OmuWS.create(
455
+ this.omu,
456
+ id,
457
+ (data) => {
458
+ this.wsSendQueue.push({
459
+ id: id.key(),
460
+ data,
461
+ });
462
+ this.wsSendWaitResolve();
463
+ },
464
+ () => {
465
+ delete this.wsHandles[id.key()];
466
+ },
467
+ );
468
+ this.wsHandles[id.key()] = {
469
+ type: 'created',
470
+ handle,
471
+ };
472
+ this.omu.send(WEBSOCKET_CREATE, {
473
+ id: id.key(),
474
+ header: this.generateHeaders(request, options),
475
+ method: request.method,
476
+ redirect: request.redirect,
477
+ url: request.url,
478
+ });
479
+ return handle.ws;
480
+ }
481
+ }
482
+
483
+ class OmuResponse implements Response {
484
+ constructor(
485
+ public readonly headers: Headers,
486
+ public readonly ok: boolean,
487
+ public readonly redirected: boolean,
488
+ public readonly status: number,
489
+ public readonly statusText: string,
490
+ public readonly type: ResponseType,
491
+ public readonly url: string,
492
+ public readonly body: ReadableStream<Uint8Array<ArrayBuffer>> | null,
493
+ public readonly bodyUsed: boolean,
494
+ ) {}
495
+
496
+ clone(): OmuResponse {
497
+ return new OmuResponse(
498
+ this.headers,
499
+ this.ok,
500
+ this.redirected,
501
+ this.status,
502
+ this.statusText,
503
+ this.type,
504
+ this.url,
505
+ this.body,
506
+ this.bodyUsed,
507
+ );
508
+ }
509
+ async arrayBuffer(): Promise<ArrayBuffer> {
510
+ return await new Response(this.body).arrayBuffer();
511
+ }
512
+ blob(): Promise<Blob> {
513
+ return new Response(this.body).blob();
514
+ }
515
+ bytes(): Promise<Uint8Array<ArrayBuffer>> {
516
+ return new Response(this.body).arrayBuffer().then((buf) => new Uint8Array(buf));
517
+ }
518
+ formData(): Promise<FormData> {
519
+ return new Response(this.body).formData();
520
+ }
521
+ json(): Promise<any> {
522
+ return new Response(this.body).json();
523
+ }
524
+ text(): Promise<string> {
525
+ return new Response(this.body).text();
526
+ }
527
+ }
528
+
529
+ type EventListenerMap<T> = {
530
+ [K in keyof T]: ((event: T[K]) => unknown)[]
531
+ };
532
+
533
+ export type WSMsg = {
534
+ type: 'open';
535
+ data: WebSocketOpen;
536
+ } | {
537
+ type: 'error';
538
+ data: WebSocketError;
539
+ } | {
540
+ type: 'text';
541
+ data: string;
542
+ } | {
543
+ type: 'binary';
544
+ data: Uint8Array;
545
+ } | {
546
+ type: 'close';
547
+ data: WebSocketClose;
548
+ };
549
+
550
+ export class OmuWS {
551
+ constructor(
552
+ protected readonly omu: Omu,
553
+ protected readonly id: Identifier,
554
+ protected readonly addQueue: (data: WSData) => void,
555
+ protected readonly dispose: () => void,
556
+ protected readonly receiveQueue: WSMsg[] = [],
557
+ private receiveResolve: (() => void) | undefined = undefined,
558
+ private status: 'connecting' | 'open' | 'closed' = 'connecting',
559
+ ) { }
560
+
561
+ public static create(omu: Omu, id: Identifier, addQueue: (data: WSData) => void, dispose: () => void): WebSocketHandle {
562
+ const ws = new OmuWS(omu, id, addQueue, dispose);
563
+ return {
564
+ ws,
565
+ open: (response) => {
566
+ ws.receiveQueue.push({
567
+ type: 'open',
568
+ data: response,
569
+ });
570
+ ws.receiveResolve?.();
571
+ },
572
+ dispatch: (data: DataChunk<WSDataMeta>): void => {
573
+ if (data.meta.type === WSMsgType.BINARY) {
574
+ ws.receiveQueue.push({
575
+ type: 'binary',
576
+ data: data.body,
577
+ });
578
+ } else {
579
+ ws.receiveQueue.push({
580
+ type: 'text',
581
+ data: textDecoder.decode(data.body),
582
+ });
583
+ }
584
+ ws.receiveResolve?.();
585
+ },
586
+ close: (response) => {
587
+ ws.receiveQueue.push({
588
+ type: 'close',
589
+ data: response,
590
+ });
591
+ ws.receiveResolve?.();
592
+ },
593
+ error: (response) => {
594
+ ws.receiveQueue.push({
595
+ type: 'error',
596
+ data: response,
597
+ });
598
+ ws.receiveResolve?.();
599
+ },
600
+ };
601
+ }
602
+
603
+ public send(data: WSData): void {
604
+ this.addQueue(data);
605
+ }
606
+
607
+ public close(code?: number, reason?: string): void {
608
+ this.omu.send(WEBSOCKET_CLOSE, {
609
+ id: this.id.key(),
610
+ code,
611
+ reason,
612
+ });
613
+ this.dispose();
614
+ }
615
+
616
+ public async receive(): Promise<WSMsg> {
617
+ if (this.receiveResolve) {
618
+ throw new Error('Already receiving from another async call');
619
+ }
620
+ while (this.status !== 'closed') {
621
+ const data = this.receiveQueue.shift();
622
+ if (!data) {
623
+ await new Promise<void>((resolve) => this.receiveResolve = resolve);
624
+ continue;
625
+ }
626
+ if (data.type === 'close') {
627
+ this.status = 'closed';
628
+ }
629
+ if (data.type === 'open') {
630
+ this.status = 'open';
631
+ }
632
+ this.receiveResolve = undefined;
633
+ return data;
634
+ }
635
+ throw new Error('Receiving on already closed socket');
636
+ }
637
+
638
+ protocol: string = '';
639
+ url: string = '';
640
+ }
641
+
642
+ export class OmuWebSocket implements WebSocket {
643
+ public CONNECTING = 0 as const;
644
+ public OPEN = 1 as const;
645
+ public CLOSING = 2 as const;
646
+ public CLOSED = 3 as const;
647
+
648
+ binaryType: BinaryType = 'blob';
649
+ bufferedAmount: number = 0;
650
+ extensions: string = '';
651
+ onclose: ((this: WebSocket, ev: CloseEvent) => any) | null = null;
652
+ onerror: ((this: WebSocket, ev: Event) => any) | null = null;
653
+ onmessage: ((this: WebSocket, ev: MessageEvent) => any) | null = null;
654
+ onopen: ((this: WebSocket, ev: Event) => any) | null = null;
655
+ protocol: string = '';
656
+ readyState: 0 | 2 | 1 | 3 = 0;
657
+ url: string = '';
658
+
659
+ constructor(
660
+ protected readonly ws: OmuWS,
661
+ private readonly eventListeners: EventListenerMap<WebSocketEventMap> = {
662
+ close: [],
663
+ error: [],
664
+ message: [],
665
+ open: [],
666
+ },
667
+ ) {
668
+ this.receiveLoop();
669
+ }
670
+
671
+ private async receiveLoop() {
672
+ while (this.readyState === WebSocket.CLOSED) {
673
+ const { data, type } = await this.ws.receive();
674
+ switch (type) {
675
+ case 'close':
676
+ this.dispatchEvent(new CloseEvent('close', {
677
+ code: data.code,
678
+ reason: data.reason ?? undefined,
679
+ }));
680
+ break;
681
+ case 'open':
682
+ this.url = data.url;
683
+ this.protocol = data.protocol ?? '';
684
+ this.dispatchEvent(new Event('open', {}));
685
+ break;
686
+ case 'error':
687
+ this.dispatchEvent(new ErrorEvent('error', {
688
+ error: data.type,
689
+ message: data.reason ?? undefined,
690
+ }));
691
+ break;
692
+ case 'text':
693
+ case 'binary':
694
+ this.dispatchEvent(new MessageEvent('message', {
695
+ data,
696
+ }));
697
+ break;
698
+ }
699
+ }
700
+ }
701
+
702
+ dispatchEvent(event: Event): boolean {
703
+ const listeners = this.eventListeners[event.type];
704
+ for (const listener of listeners) {
705
+ listener(event);
706
+ }
707
+ if (event.type === 'open') {
708
+ this.onopen?.(event as MessageEvent);
709
+ }
710
+ if (event.type === 'error') {
711
+ this.onerror?.(event);
712
+ }
713
+ if (event.type === 'message') {
714
+ this.onmessage?.(event as MessageEvent);
715
+ }
716
+ if (event.type === 'close') {
717
+ this.onclose?.(event as CloseEvent);
718
+ }
719
+ return true;
720
+ }
721
+
722
+ send(data: string | ArrayBufferLike | Blob | ArrayBufferView): void {
723
+ this.ws.send(data);
724
+ }
725
+
726
+ close(code?: number, reason?: string): void {
727
+ this.ws.close(code, reason);
728
+ }
729
+
730
+ addEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any): void {
731
+ this.eventListeners[type].push(listener);
732
+ }
733
+
734
+ removeEventListener<K extends keyof WebSocketEventMap>(type: K, listener: (this: WebSocket, ev: WebSocketEventMap[K]) => any): void {
735
+ const listeners = this.eventListeners[type];
736
+ const index = listeners.indexOf(listener);
737
+ if (index !== -1) {
738
+ listeners.splice(index, 1);
739
+ }
740
+ }
741
+ }
742
+
743
+ async function toUint8Array(data: string | ArrayBufferLike | Blob | ArrayBufferView): Promise<Uint8Array<ArrayBufferLike>> {
744
+ if (typeof data === 'string') {
745
+ return textEncoder.encode(data);
746
+ } else if (data instanceof Blob) {
747
+ const arrayBuffer = await data.arrayBuffer();
748
+ return new Uint8Array(arrayBuffer);
749
+ } else {
750
+ return new Uint8Array(data as ArrayBufferLike);
751
+ }
752
+ }