@omujs/omu 0.9.49 → 0.9.50

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 (294) hide show
  1. package/dist/address.js +1 -0
  2. package/dist/address.js.map +7 -0
  3. package/dist/api/asset/extension.js +2 -0
  4. package/dist/api/asset/extension.js.map +7 -0
  5. package/dist/api/asset/index.js +2 -0
  6. package/dist/api/asset/index.js.map +7 -0
  7. package/dist/{dts/api → api}/dashboard/extension.d.ts +1 -3
  8. package/dist/api/dashboard/extension.js +2 -0
  9. package/dist/api/dashboard/extension.js.map +7 -0
  10. package/dist/{dts/api → api}/dashboard/handler.d.ts +3 -3
  11. package/dist/api/dashboard/handler.js +1 -0
  12. package/dist/api/dashboard/handler.js.map +7 -0
  13. package/dist/api/dashboard/index.d.ts +3 -0
  14. package/dist/api/dashboard/index.js +2 -0
  15. package/dist/api/dashboard/index.js.map +7 -0
  16. package/dist/{dts/api → api}/dashboard/packets.d.ts +2 -12
  17. package/dist/api/dashboard/packets.js +2 -0
  18. package/dist/api/dashboard/packets.js.map +7 -0
  19. package/dist/{dts/api → api}/endpoint/endpoint.d.ts +2 -2
  20. package/dist/api/endpoint/endpoint.js +2 -0
  21. package/dist/api/endpoint/endpoint.js.map +7 -0
  22. package/dist/api/endpoint/extension.js +2 -0
  23. package/dist/api/endpoint/extension.js.map +7 -0
  24. package/dist/api/endpoint/index.js +2 -0
  25. package/dist/api/endpoint/index.js.map +7 -0
  26. package/dist/api/endpoint/packets.js +2 -0
  27. package/dist/api/endpoint/packets.js.map +7 -0
  28. package/dist/api/extension-registry.js +2 -0
  29. package/dist/api/extension-registry.js.map +7 -0
  30. package/dist/api/extension.js +2 -0
  31. package/dist/api/extension.js.map +7 -0
  32. package/dist/api/http/extension.js +2 -0
  33. package/dist/api/http/extension.js.map +7 -0
  34. package/dist/api/http/http.js +2 -0
  35. package/dist/api/http/http.js.map +7 -0
  36. package/dist/api/http/index.js +2 -0
  37. package/dist/api/http/index.js.map +7 -0
  38. package/dist/api/http/websocket.js +2 -0
  39. package/dist/api/http/websocket.js.map +7 -0
  40. package/dist/api/i18n/extension.js +2 -0
  41. package/dist/api/i18n/extension.js.map +7 -0
  42. package/dist/api/i18n/index.js +2 -0
  43. package/dist/api/i18n/index.js.map +7 -0
  44. package/dist/api/index.d.ts +2 -0
  45. package/dist/api/index.js +2 -0
  46. package/dist/api/index.js.map +7 -0
  47. package/dist/api/logger/extension.js +2 -0
  48. package/dist/api/logger/extension.js.map +7 -0
  49. package/dist/api/logger/index.js +2 -0
  50. package/dist/api/logger/index.js.map +7 -0
  51. package/dist/api/logger/packets.js +2 -0
  52. package/dist/api/logger/packets.js.map +7 -0
  53. package/dist/api/permission/extension.js +2 -0
  54. package/dist/api/permission/extension.js.map +7 -0
  55. package/dist/api/permission/index.js +2 -0
  56. package/dist/api/permission/index.js.map +7 -0
  57. package/dist/{dts/api → api}/permission/permission.d.ts +1 -1
  58. package/dist/api/permission/permission.js +2 -0
  59. package/dist/api/permission/permission.js.map +7 -0
  60. package/dist/api/plugin/extension.js +2 -0
  61. package/dist/api/plugin/extension.js.map +7 -0
  62. package/dist/api/plugin/index.js +2 -0
  63. package/dist/api/plugin/index.js.map +7 -0
  64. package/dist/api/plugin/package-info.js +1 -0
  65. package/dist/api/plugin/package-info.js.map +7 -0
  66. package/dist/{dts/api → api}/registry/extension.d.ts +1 -1
  67. package/dist/api/registry/extension.js +2 -0
  68. package/dist/api/registry/extension.js.map +7 -0
  69. package/dist/api/registry/index.js +2 -0
  70. package/dist/api/registry/index.js.map +7 -0
  71. package/dist/api/registry/packets.js +2 -0
  72. package/dist/api/registry/packets.js.map +7 -0
  73. package/dist/{dts/api → api}/registry/registry.d.ts +2 -2
  74. package/dist/api/registry/registry.js +2 -0
  75. package/dist/api/registry/registry.js.map +7 -0
  76. package/dist/api/server/extension.js +2 -0
  77. package/dist/api/server/extension.js.map +7 -0
  78. package/dist/api/server/index.js +2 -0
  79. package/dist/api/server/index.js.map +7 -0
  80. package/dist/api/session/extension.js +2 -0
  81. package/dist/api/session/extension.js.map +7 -0
  82. package/dist/api/session/index.js +2 -0
  83. package/dist/api/session/index.js.map +7 -0
  84. package/dist/api/signal/extension.js +2 -0
  85. package/dist/api/signal/extension.js.map +7 -0
  86. package/dist/api/signal/index.d.ts +1 -0
  87. package/dist/api/signal/index.js +2 -0
  88. package/dist/api/signal/index.js.map +7 -0
  89. package/dist/api/signal/packets.js +2 -0
  90. package/dist/api/signal/packets.js.map +7 -0
  91. package/dist/{dts/api → api}/signal/signal.d.ts +2 -2
  92. package/dist/api/signal/signal.js +2 -0
  93. package/dist/api/signal/signal.js.map +7 -0
  94. package/dist/api/table/extension.js +2 -0
  95. package/dist/api/table/extension.js.map +7 -0
  96. package/dist/api/table/index.js +2 -0
  97. package/dist/api/table/index.js.map +7 -0
  98. package/dist/api/table/packets.js +2 -0
  99. package/dist/api/table/packets.js.map +7 -0
  100. package/dist/{dts/api → api}/table/table.d.ts +3 -3
  101. package/dist/api/table/table.js +2 -0
  102. package/dist/api/table/table.js.map +7 -0
  103. package/dist/app.js +2 -0
  104. package/dist/app.js.map +7 -0
  105. package/dist/const.js +2 -0
  106. package/dist/const.js.map +7 -0
  107. package/dist/errors.js +2 -0
  108. package/dist/errors.js.map +7 -0
  109. package/dist/event/index.js +2 -0
  110. package/dist/event/index.js.map +7 -0
  111. package/dist/helper.js +2 -0
  112. package/dist/helper.js.map +7 -0
  113. package/dist/identifier.js +2 -0
  114. package/dist/identifier.js.map +7 -0
  115. package/dist/{dts/index.d.ts → index.d.ts} +3 -3
  116. package/dist/index.js +2 -0
  117. package/dist/index.js.map +7 -0
  118. package/dist/localization/index.js +2 -0
  119. package/dist/localization/index.js.map +7 -0
  120. package/dist/localization/locale.js +2 -0
  121. package/dist/localization/locale.js.map +7 -0
  122. package/dist/localization/localization.js +1 -0
  123. package/dist/localization/localization.js.map +7 -0
  124. package/dist/lock.js +2 -0
  125. package/dist/lock.js.map +7 -0
  126. package/dist/network/connection.js +2 -0
  127. package/dist/network/connection.js.map +7 -0
  128. package/dist/network/encryption.js +2 -0
  129. package/dist/network/encryption.js.map +7 -0
  130. package/dist/network/frame-transport.js +2 -0
  131. package/dist/network/frame-transport.js.map +7 -0
  132. package/dist/network/index.js +2 -0
  133. package/dist/network/index.js.map +7 -0
  134. package/dist/network/network.js +2 -0
  135. package/dist/network/network.js.map +7 -0
  136. package/dist/network/packet/index.js +2 -0
  137. package/dist/network/packet/index.js.map +7 -0
  138. package/dist/network/packet/packet-types.js +2 -0
  139. package/dist/network/packet/packet-types.js.map +7 -0
  140. package/dist/{dts/network → network}/packet/packet.d.ts +2 -2
  141. package/dist/network/packet/packet.js +2 -0
  142. package/dist/network/packet/packet.js.map +7 -0
  143. package/dist/network/websocket-transport.js +2 -0
  144. package/dist/network/websocket-transport.js.map +7 -0
  145. package/dist/omu.js +2 -0
  146. package/dist/omu.js.map +7 -0
  147. package/dist/result.js +2 -0
  148. package/dist/result.js.map +7 -0
  149. package/dist/serialize/bytebuffer.js +2 -0
  150. package/dist/serialize/bytebuffer.js.map +7 -0
  151. package/dist/serialize/index.d.ts +2 -0
  152. package/dist/serialize/index.js +2 -0
  153. package/dist/serialize/index.js.map +7 -0
  154. package/dist/serialize/serializer.js +2 -0
  155. package/dist/serialize/serializer.js.map +7 -0
  156. package/dist/token.js +2 -0
  157. package/dist/token.js.map +7 -0
  158. package/dist/{dts/version.d.ts → version.d.ts} +1 -1
  159. package/dist/version.js +2 -0
  160. package/dist/version.js.map +7 -0
  161. package/package.json +9 -9
  162. package/dist/dts/api/dashboard/index.d.ts +0 -3
  163. package/dist/dts/api/index.d.ts +0 -2
  164. package/dist/dts/api/signal/index.d.ts +0 -1
  165. package/dist/dts/serialize/index.d.ts +0 -2
  166. package/dist/esm/address.js +0 -4
  167. package/dist/esm/api/asset/extension.js +0 -911
  168. package/dist/esm/api/asset/index.js +0 -909
  169. package/dist/esm/api/dashboard/extension.js +0 -1362
  170. package/dist/esm/api/dashboard/handler.js +0 -4
  171. package/dist/esm/api/dashboard/index.js +0 -1361
  172. package/dist/esm/api/dashboard/packets.js +0 -419
  173. package/dist/esm/api/endpoint/endpoint.js +0 -383
  174. package/dist/esm/api/endpoint/extension.js +0 -1096
  175. package/dist/esm/api/endpoint/index.js +0 -383
  176. package/dist/esm/api/endpoint/packets.js +0 -799
  177. package/dist/esm/api/extension-registry.js +0 -23
  178. package/dist/esm/api/extension.js +0 -278
  179. package/dist/esm/api/http/extension.js +0 -1420
  180. package/dist/esm/api/http/http.js +0 -448
  181. package/dist/esm/api/http/index.js +0 -1419
  182. package/dist/esm/api/http/websocket.js +0 -220
  183. package/dist/esm/api/i18n/extension.js +0 -1339
  184. package/dist/esm/api/i18n/index.js +0 -1337
  185. package/dist/esm/api/index.js +0 -295
  186. package/dist/esm/api/logger/extension.js +0 -856
  187. package/dist/esm/api/logger/index.js +0 -852
  188. package/dist/esm/api/logger/packets.js +0 -673
  189. package/dist/esm/api/permission/extension.js +0 -535
  190. package/dist/esm/api/permission/index.js +0 -294
  191. package/dist/esm/api/permission/permission.js +0 -294
  192. package/dist/esm/api/plugin/extension.js +0 -531
  193. package/dist/esm/api/plugin/index.js +0 -529
  194. package/dist/esm/api/plugin/package-info.js +0 -4
  195. package/dist/esm/api/registry/extension.js +0 -1286
  196. package/dist/esm/api/registry/index.js +0 -1285
  197. package/dist/esm/api/registry/packets.js +0 -694
  198. package/dist/esm/api/registry/registry.js +0 -383
  199. package/dist/esm/api/server/extension.js +0 -2140
  200. package/dist/esm/api/server/index.js +0 -2118
  201. package/dist/esm/api/session/extension.js +0 -2235
  202. package/dist/esm/api/session/index.js +0 -2235
  203. package/dist/esm/api/signal/extension.js +0 -1031
  204. package/dist/esm/api/signal/index.js +0 -379
  205. package/dist/esm/api/signal/packets.js +0 -690
  206. package/dist/esm/api/signal/signal.js +0 -379
  207. package/dist/esm/api/table/extension.js +0 -1553
  208. package/dist/esm/api/table/index.js +0 -1552
  209. package/dist/esm/api/table/packets.js +0 -904
  210. package/dist/esm/api/table/table.js +0 -383
  211. package/dist/esm/app.js +0 -264
  212. package/dist/esm/const.js +0 -11
  213. package/dist/esm/errors.js +0 -548
  214. package/dist/esm/event/index.js +0 -22
  215. package/dist/esm/helper.js +0 -15
  216. package/dist/esm/identifier.js +0 -266
  217. package/dist/esm/index.js +0 -5186
  218. package/dist/esm/localization/index.js +0 -742
  219. package/dist/esm/localization/locale.js +0 -742
  220. package/dist/esm/localization/localization.js +0 -4
  221. package/dist/esm/lock.js +0 -46
  222. package/dist/esm/network/connection.js +0 -293
  223. package/dist/esm/network/encryption.js +0 -986
  224. package/dist/esm/network/frame-transport.js +0 -531
  225. package/dist/esm/network/index.js +0 -1627
  226. package/dist/esm/network/network.js +0 -1368
  227. package/dist/esm/network/packet/index.js +0 -485
  228. package/dist/esm/network/packet/packet-types.js +0 -486
  229. package/dist/esm/network/packet/packet.js +0 -126
  230. package/dist/esm/network/websocket-transport.js +0 -493
  231. package/dist/esm/omu.js +0 -4945
  232. package/dist/esm/result.js +0 -68
  233. package/dist/esm/serialize/bytebuffer.js +0 -384
  234. package/dist/esm/serialize/index.js +0 -471
  235. package/dist/esm/serialize/serializer.js +0 -97
  236. package/dist/esm/token.js +0 -42
  237. package/dist/esm/version.js +0 -11
  238. package/dist/tsconfig.tsbuildinfo +0 -1
  239. /package/dist/{dts/address.d.ts → address.d.ts} +0 -0
  240. /package/dist/{dts/api → api}/asset/extension.d.ts +0 -0
  241. /package/dist/{dts/api → api}/asset/index.d.ts +0 -0
  242. /package/dist/{dts/api → api}/endpoint/extension.d.ts +0 -0
  243. /package/dist/{dts/api → api}/endpoint/index.d.ts +0 -0
  244. /package/dist/{dts/api → api}/endpoint/packets.d.ts +0 -0
  245. /package/dist/{dts/api → api}/extension-registry.d.ts +0 -0
  246. /package/dist/{dts/api → api}/extension.d.ts +0 -0
  247. /package/dist/{dts/api → api}/http/extension.d.ts +0 -0
  248. /package/dist/{dts/api → api}/http/http.d.ts +0 -0
  249. /package/dist/{dts/api → api}/http/index.d.ts +0 -0
  250. /package/dist/{dts/api → api}/http/websocket.d.ts +0 -0
  251. /package/dist/{dts/api → api}/i18n/extension.d.ts +0 -0
  252. /package/dist/{dts/api → api}/i18n/index.d.ts +0 -0
  253. /package/dist/{dts/api → api}/logger/extension.d.ts +0 -0
  254. /package/dist/{dts/api → api}/logger/index.d.ts +0 -0
  255. /package/dist/{dts/api → api}/logger/packets.d.ts +0 -0
  256. /package/dist/{dts/api → api}/permission/extension.d.ts +0 -0
  257. /package/dist/{dts/api → api}/permission/index.d.ts +0 -0
  258. /package/dist/{dts/api → api}/plugin/extension.d.ts +0 -0
  259. /package/dist/{dts/api → api}/plugin/index.d.ts +0 -0
  260. /package/dist/{dts/api → api}/plugin/package-info.d.ts +0 -0
  261. /package/dist/{dts/api → api}/registry/index.d.ts +0 -0
  262. /package/dist/{dts/api → api}/registry/packets.d.ts +0 -0
  263. /package/dist/{dts/api → api}/server/extension.d.ts +0 -0
  264. /package/dist/{dts/api → api}/server/index.d.ts +0 -0
  265. /package/dist/{dts/api → api}/session/extension.d.ts +0 -0
  266. /package/dist/{dts/api → api}/session/index.d.ts +0 -0
  267. /package/dist/{dts/api → api}/signal/extension.d.ts +0 -0
  268. /package/dist/{dts/api → api}/signal/packets.d.ts +0 -0
  269. /package/dist/{dts/api → api}/table/extension.d.ts +0 -0
  270. /package/dist/{dts/api → api}/table/index.d.ts +0 -0
  271. /package/dist/{dts/api → api}/table/packets.d.ts +0 -0
  272. /package/dist/{dts/app.d.ts → app.d.ts} +0 -0
  273. /package/dist/{dts/const.d.ts → const.d.ts} +0 -0
  274. /package/dist/{dts/errors.d.ts → errors.d.ts} +0 -0
  275. /package/dist/{dts/event → event}/index.d.ts +0 -0
  276. /package/dist/{dts/helper.d.ts → helper.d.ts} +0 -0
  277. /package/dist/{dts/identifier.d.ts → identifier.d.ts} +0 -0
  278. /package/dist/{dts/localization → localization}/index.d.ts +0 -0
  279. /package/dist/{dts/localization → localization}/locale.d.ts +0 -0
  280. /package/dist/{dts/localization → localization}/localization.d.ts +0 -0
  281. /package/dist/{dts/lock.d.ts → lock.d.ts} +0 -0
  282. /package/dist/{dts/network → network}/connection.d.ts +0 -0
  283. /package/dist/{dts/network → network}/encryption.d.ts +0 -0
  284. /package/dist/{dts/network → network}/frame-transport.d.ts +0 -0
  285. /package/dist/{dts/network → network}/index.d.ts +0 -0
  286. /package/dist/{dts/network → network}/network.d.ts +0 -0
  287. /package/dist/{dts/network → network}/packet/index.d.ts +0 -0
  288. /package/dist/{dts/network → network}/packet/packet-types.d.ts +0 -0
  289. /package/dist/{dts/network → network}/websocket-transport.d.ts +0 -0
  290. /package/dist/{dts/omu.d.ts → omu.d.ts} +0 -0
  291. /package/dist/{dts/result.d.ts → result.d.ts} +0 -0
  292. /package/dist/{dts/serialize → serialize}/bytebuffer.d.ts +0 -0
  293. /package/dist/{dts/serialize → serialize}/serializer.d.ts +0 -0
  294. /package/dist/{dts/token.d.ts → token.d.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/localization/locale.ts"],
4
+ "sourcesContent": ["// Locale Identifiers - https://gist.github.com/ndbroadbent/588fefab8e0f1b459fcec8181b41b39c\nexport const LOCALE_NAMES = {\n 'af': 'Afrikaans',\n 'af-NA': 'Afrikaans (Namibia)',\n 'af-ZA': 'Afrikaans (South Africa)',\n 'agq': 'Aghem',\n 'agq-CM': 'Aghem (Cameroon)',\n 'ak': 'Akan',\n 'ak-GH': 'Akan (Ghana)',\n 'am': 'Amharic',\n 'am-ET': 'Amharic (Ethiopia)',\n 'ar': 'Arabic',\n 'ar-001': 'Arabic (World)',\n 'ar-AE': 'Arabic (United Arab Emirates)',\n 'ar-BH': 'Arabic (Bahrain)',\n 'ar-DJ': 'Arabic (Djibouti)',\n 'ar-DZ': 'Arabic (Algeria)',\n 'ar-EG': 'Arabic (Egypt)',\n 'ar-EH': 'Arabic (Western Sahara)',\n 'ar-ER': 'Arabic (Eritrea)',\n 'ar-IL': 'Arabic (Israel)',\n 'ar-IQ': 'Arabic (Iraq)',\n 'ar-JO': 'Arabic (Jordan)',\n 'ar-KM': 'Arabic (Comoros)',\n 'ar-KW': 'Arabic (Kuwait)',\n 'ar-LB': 'Arabic (Lebanon)',\n 'ar-LY': 'Arabic (Libya)',\n 'ar-MA': 'Arabic (Morocco)',\n 'ar-MR': 'Arabic (Mauritania)',\n 'ar-OM': 'Arabic (Oman)',\n 'ar-PS': 'Arabic (Palestinian Territories)',\n 'ar-QA': 'Arabic (Qatar)',\n 'ar-SA': 'Arabic (Saudi Arabia)',\n 'ar-SD': 'Arabic (Sudan)',\n 'ar-SO': 'Arabic (Somalia)',\n 'ar-SS': 'Arabic (South Sudan)',\n 'ar-SY': 'Arabic (Syria)',\n 'ar-TD': 'Arabic (Chad)',\n 'ar-TN': 'Arabic (Tunisia)',\n 'ar-YE': 'Arabic (Yemen)',\n 'as': 'Assamese',\n 'as-IN': 'Assamese (India)',\n 'asa': 'Asu',\n 'asa-TZ': 'Asu (Tanzania)',\n 'az': 'Azerbaijani',\n 'az-Cyrl': 'Azerbaijani (Cyrillic)',\n 'az-Cyrl-AZ': 'Azerbaijani (Cyrillic, Azerbaijan)',\n 'az-Latn': 'Azerbaijani (Latin)',\n 'az-Latn-AZ': 'Azerbaijani (Latin, Azerbaijan)',\n 'bas': 'Basaa',\n 'bas-CM': 'Basaa (Cameroon)',\n 'be': 'Belarusian',\n 'be-BY': 'Belarusian (Belarus)',\n 'bem': 'Bemba',\n 'bem-ZM': 'Bemba (Zambia)',\n 'bez': 'Bena',\n 'bez-TZ': 'Bena (Tanzania)',\n 'bg': 'Bulgarian',\n 'bg-BG': 'Bulgarian (Bulgaria)',\n 'bm': 'Bambara',\n 'bm-Latn': 'Bambara (Latin)',\n 'bm-Latn-ML': 'Bambara (Latin, Mali)',\n 'bn': 'Bengali',\n 'bn-BD': 'Bengali (Bangladesh)',\n 'bn-IN': 'Bengali (India)',\n 'bo': 'Tibetan',\n 'bo-CN': 'Tibetan (China)',\n 'bo-IN': 'Tibetan (India)',\n 'br': 'Breton',\n 'br-FR': 'Breton (France)',\n 'brx': 'Bodo',\n 'brx-IN': 'Bodo (India)',\n 'bs': 'Bosnian',\n 'bs-Cyrl': 'Bosnian (Cyrillic)',\n 'bs-Cyrl-BA': 'Bosnian (Cyrillic, Bosnia & Herzegovina)',\n 'bs-Latn': 'Bosnian (Latin)',\n 'bs-Latn-BA': 'Bosnian (Latin, Bosnia & Herzegovina)',\n 'ca': 'Catalan',\n 'ca-AD': 'Catalan (Andorra)',\n 'ca-ES': 'Catalan (Spain)',\n 'ca-FR': 'Catalan (France)',\n 'ca-IT': 'Catalan (Italy)',\n 'cgg': 'Chiga',\n 'cgg-UG': 'Chiga (Uganda)',\n 'chr': 'Cherokee',\n 'chr-US': 'Cherokee (United States)',\n 'ckb': 'Central Kurdish',\n 'ckb-IQ': 'Central Kurdish (Iraq)',\n 'ckb-IR': 'Central Kurdish (Iran)',\n 'cs': 'Czech',\n 'cs-CZ': 'Czech (Czech Republic)',\n 'cy': 'Welsh',\n 'cy-GB': 'Welsh (United Kingdom)',\n 'da': 'Danish',\n 'da-DK': 'Danish (Denmark)',\n 'da-GL': 'Danish (Greenland)',\n 'dav': 'Taita',\n 'dav-KE': 'Taita (Kenya)',\n 'de': 'German',\n 'de-AT': 'German (Austria)',\n 'de-BE': 'German (Belgium)',\n 'de-CH': 'German (Switzerland)',\n 'de-DE': 'German (Germany)',\n 'de-LI': 'German (Liechtenstein)',\n 'de-LU': 'German (Luxembourg)',\n 'dje': 'Zarma',\n 'dje-NE': 'Zarma (Niger)',\n 'dsb': 'Lower Sorbian',\n 'dsb-DE': 'Lower Sorbian (Germany)',\n 'dua': 'Duala',\n 'dua-CM': 'Duala (Cameroon)',\n 'dyo': 'Jola-Fonyi',\n 'dyo-SN': 'Jola-Fonyi (Senegal)',\n 'dz': 'Dzongkha',\n 'dz-BT': 'Dzongkha (Bhutan)',\n 'ebu': 'Embu',\n 'ebu-KE': 'Embu (Kenya)',\n 'ee': 'Ewe',\n 'ee-GH': 'Ewe (Ghana)',\n 'ee-TG': 'Ewe (Togo)',\n 'el': 'Greek',\n 'el-CY': 'Greek (Cyprus)',\n 'el-GR': 'Greek (Greece)',\n 'en': 'English',\n 'en-001': 'English (World)',\n 'en-150': 'English (Europe)',\n 'en-AD': 'English (Andorra)',\n 'en-AG': 'English (Antigua & Barbuda)',\n 'en-AI': 'English (Anguilla)',\n 'en-AL': 'English (Albania)',\n 'en-AS': 'English (American Samoa)',\n 'en-AT': 'English (Austria)',\n 'en-AU': 'English (Australia)',\n 'en-BA': 'English (Bosnia & Herzegovina)',\n 'en-BB': 'English (Barbados)',\n 'en-BE': 'English (Belgium)',\n 'en-BM': 'English (Bermuda)',\n 'en-BS': 'English (Bahamas)',\n 'en-BW': 'English (Botswana)',\n 'en-BZ': 'English (Belize)',\n 'en-CA': 'English (Canada)',\n 'en-CC': 'English (Cocos [Keeling] Islands)',\n 'en-CH': 'English (Switzerland)',\n 'en-CK': 'English (Cook Islands)',\n 'en-CM': 'English (Cameroon)',\n 'en-CX': 'English (Christmas Island)',\n 'en-CY': 'English (Cyprus)',\n 'en-CZ': 'English (Czech Republic)',\n 'en-DE': 'English (Germany)',\n 'en-DG': 'English (Diego Garcia)',\n 'en-DK': 'English (Denmark)',\n 'en-DM': 'English (Dominica)',\n 'en-EE': 'English (Estonia)',\n 'en-ER': 'English (Eritrea)',\n 'en-ES': 'English (Spain)',\n 'en-FI': 'English (Finland)',\n 'en-FJ': 'English (Fiji)',\n 'en-FK': 'English (Falkland Islands)',\n 'en-FM': 'English (Micronesia)',\n 'en-FR': 'English (France)',\n 'en-GB': 'English (United Kingdom)',\n 'en-GD': 'English (Grenada)',\n 'en-GG': 'English (Guernsey)',\n 'en-GH': 'English (Ghana)',\n 'en-GI': 'English (Gibraltar)',\n 'en-GM': 'English (Gambia)',\n 'en-GR': 'English (Greece)',\n 'en-GU': 'English (Guam)',\n 'en-GY': 'English (Guyana)',\n 'en-HK': 'English (Hong Kong SAR China)',\n 'en-HR': 'English (Croatia)',\n 'en-HU': 'English (Hungary)',\n 'en-IE': 'English (Ireland)',\n 'en-IL': 'English (Israel)',\n 'en-IM': 'English (Isle of Man)',\n 'en-IN': 'English (India)',\n 'en-IO': 'English (British Indian Ocean Territory)',\n 'en-IS': 'English (Iceland)',\n 'en-IT': 'English (Italy)',\n 'en-JE': 'English (Jersey)',\n 'en-JM': 'English (Jamaica)',\n 'en-KE': 'English (Kenya)',\n 'en-KI': 'English (Kiribati)',\n 'en-KN': 'English (St. Kitts & Nevis)',\n 'en-KY': 'English (Cayman Islands)',\n 'en-LC': 'English (St. Lucia)',\n 'en-LR': 'English (Liberia)',\n 'en-LS': 'English (Lesotho)',\n 'en-LT': 'English (Lithuania)',\n 'en-LU': 'English (Luxembourg)',\n 'en-LV': 'English (Latvia)',\n 'en-ME': 'English (Montenegro)',\n 'en-MG': 'English (Madagascar)',\n 'en-MH': 'English (Marshall Islands)',\n 'en-MO': 'English (Macau SAR China)',\n 'en-MP': 'English (Northern Mariana Islands)',\n 'en-MS': 'English (Montserrat)',\n 'en-MT': 'English (Malta)',\n 'en-MU': 'English (Mauritius)',\n 'en-MW': 'English (Malawi)',\n 'en-MY': 'English (Malaysia)',\n 'en-NA': 'English (Namibia)',\n 'en-NF': 'English (Norfolk Island)',\n 'en-NG': 'English (Nigeria)',\n 'en-NL': 'English (Netherlands)',\n 'en-NO': 'English (Norway)',\n 'en-NR': 'English (Nauru)',\n 'en-NU': 'English (Niue)',\n 'en-NZ': 'English (New Zealand)',\n 'en-PG': 'English (Papua New Guinea)',\n 'en-PH': 'English (Philippines)',\n 'en-PK': 'English (Pakistan)',\n 'en-PL': 'English (Poland)',\n 'en-PN': 'English (Pitcairn Islands)',\n 'en-PR': 'English (Puerto Rico)',\n 'en-PT': 'English (Portugal)',\n 'en-PW': 'English (Palau)',\n 'en-RO': 'English (Romania)',\n 'en-RU': 'English (Russia)',\n 'en-RW': 'English (Rwanda)',\n 'en-SB': 'English (Solomon Islands)',\n 'en-SC': 'English (Seychelles)',\n 'en-SD': 'English (Sudan)',\n 'en-SE': 'English (Sweden)',\n 'en-SG': 'English (Singapore)',\n 'en-SH': 'English (St. Helena)',\n 'en-SI': 'English (Slovenia)',\n 'en-SK': 'English (Slovakia)',\n 'en-SL': 'English (Sierra Leone)',\n 'en-SS': 'English (South Sudan)',\n 'en-SX': 'English (Sint Maarten)',\n 'en-SZ': 'English (Swaziland)',\n 'en-TC': 'English (Turks & Caicos Islands)',\n 'en-TK': 'English (Tokelau)',\n 'en-TO': 'English (Tonga)',\n 'en-TR': 'English (Turkey)',\n 'en-TT': 'English (Trinidad & Tobago)',\n 'en-TV': 'English (Tuvalu)',\n 'en-TZ': 'English (Tanzania)',\n 'en-UG': 'English (Uganda)',\n 'en-UM': 'English (U.S. Outlying Islands)',\n 'en-US': 'English (United States)',\n 'en-US-POSIX': 'English (United States, Computer)',\n 'en-VC': 'English (St. Vincent & Grenadines)',\n 'en-VG': 'English (British Virgin Islands)',\n 'en-VI': 'English (U.S. Virgin Islands)',\n 'en-VU': 'English (Vanuatu)',\n 'en-WS': 'English (Samoa)',\n 'en-ZA': 'English (South Africa)',\n 'en-ZM': 'English (Zambia)',\n 'en-ZW': 'English (Zimbabwe)',\n 'eo': 'Esperanto',\n 'es': 'Spanish',\n 'es-419': 'Spanish (Latin America)',\n 'es-AR': 'Spanish (Argentina)',\n 'es-BO': 'Spanish (Bolivia)',\n 'es-CL': 'Spanish (Chile)',\n 'es-CO': 'Spanish (Colombia)',\n 'es-CR': 'Spanish (Costa Rica)',\n 'es-CU': 'Spanish (Cuba)',\n 'es-DO': 'Spanish (Dominican Republic)',\n 'es-EA': 'Spanish (Ceuta & Melilla)',\n 'es-EC': 'Spanish (Ecuador)',\n 'es-ES': 'Spanish (Spain)',\n 'es-GQ': 'Spanish (Equatorial Guinea)',\n 'es-GT': 'Spanish (Guatemala)',\n 'es-HN': 'Spanish (Honduras)',\n 'es-IC': 'Spanish (Canary Islands)',\n 'es-MX': 'Spanish (Mexico)',\n 'es-NI': 'Spanish (Nicaragua)',\n 'es-PA': 'Spanish (Panama)',\n 'es-PE': 'Spanish (Peru)',\n 'es-PH': 'Spanish (Philippines)',\n 'es-PR': 'Spanish (Puerto Rico)',\n 'es-PY': 'Spanish (Paraguay)',\n 'es-SV': 'Spanish (El Salvador)',\n 'es-US': 'Spanish (United States)',\n 'es-UY': 'Spanish (Uruguay)',\n 'es-VE': 'Spanish (Venezuela)',\n 'et': 'Estonian',\n 'et-EE': 'Estonian (Estonia)',\n 'eu': 'Basque',\n 'eu-ES': 'Basque (Spain)',\n 'ewo': 'Ewondo',\n 'ewo-CM': 'Ewondo (Cameroon)',\n 'fa': 'Persian',\n 'fa-AF': 'Persian (Afghanistan)',\n 'fa-IR': 'Persian (Iran)',\n 'ff': 'Fulah',\n 'ff-CM': 'Fulah (Cameroon)',\n 'ff-GN': 'Fulah (Guinea)',\n 'ff-MR': 'Fulah (Mauritania)',\n 'ff-SN': 'Fulah (Senegal)',\n 'fi': 'Finnish',\n 'fi-FI': 'Finnish (Finland)',\n 'fil': 'Filipino',\n 'fil-PH': 'Filipino (Philippines)',\n 'fo': 'Faroese',\n 'fo-FO': 'Faroese (Faroe Islands)',\n 'fr': 'French',\n 'fr-BE': 'French (Belgium)',\n 'fr-BF': 'French (Burkina Faso)',\n 'fr-BI': 'French (Burundi)',\n 'fr-BJ': 'French (Benin)',\n 'fr-BL': 'French (St. Barth\u00E9lemy)',\n 'fr-CA': 'French (Canada)',\n 'fr-CD': 'French (Congo - Kinshasa)',\n 'fr-CF': 'French (Central African Republic)',\n 'fr-CG': 'French (Congo - Brazzaville)',\n 'fr-CH': 'French (Switzerland)',\n 'fr-CI': 'French (C\u00F4te d\u2019Ivoire)',\n 'fr-CM': 'French (Cameroon)',\n 'fr-DJ': 'French (Djibouti)',\n 'fr-DZ': 'French (Algeria)',\n 'fr-FR': 'French (France)',\n 'fr-GA': 'French (Gabon)',\n 'fr-GF': 'French (French Guiana)',\n 'fr-GN': 'French (Guinea)',\n 'fr-GP': 'French (Guadeloupe)',\n 'fr-GQ': 'French (Equatorial Guinea)',\n 'fr-HT': 'French (Haiti)',\n 'fr-KM': 'French (Comoros)',\n 'fr-LU': 'French (Luxembourg)',\n 'fr-MA': 'French (Morocco)',\n 'fr-MC': 'French (Monaco)',\n 'fr-MF': 'French (St. Martin)',\n 'fr-MG': 'French (Madagascar)',\n 'fr-ML': 'French (Mali)',\n 'fr-MQ': 'French (Martinique)',\n 'fr-MR': 'French (Mauritania)',\n 'fr-MU': 'French (Mauritius)',\n 'fr-NC': 'French (New Caledonia)',\n 'fr-NE': 'French (Niger)',\n 'fr-PF': 'French (French Polynesia)',\n 'fr-PM': 'French (St. Pierre & Miquelon)',\n 'fr-RE': 'French (R\u00E9union)',\n 'fr-RW': 'French (Rwanda)',\n 'fr-SC': 'French (Seychelles)',\n 'fr-SN': 'French (Senegal)',\n 'fr-SY': 'French (Syria)',\n 'fr-TD': 'French (Chad)',\n 'fr-TG': 'French (Togo)',\n 'fr-TN': 'French (Tunisia)',\n 'fr-VU': 'French (Vanuatu)',\n 'fr-WF': 'French (Wallis & Futuna)',\n 'fr-YT': 'French (Mayotte)',\n 'fur': 'Friulian',\n 'fur-IT': 'Friulian (Italy)',\n 'fy': 'Western Frisian',\n 'fy-NL': 'Western Frisian (Netherlands)',\n 'ga': 'Irish',\n 'ga-IE': 'Irish (Ireland)',\n 'gd': 'Scottish Gaelic',\n 'gd-GB': 'Scottish Gaelic (United Kingdom)',\n 'gl': 'Galician',\n 'gl-ES': 'Galician (Spain)',\n 'gsw': 'Swiss German',\n 'gsw-CH': 'Swiss German (Switzerland)',\n 'gsw-FR': 'Swiss German (France)',\n 'gsw-LI': 'Swiss German (Liechtenstein)',\n 'gu': 'Gujarati',\n 'gu-IN': 'Gujarati (India)',\n 'guz': 'Gusii',\n 'guz-KE': 'Gusii (Kenya)',\n 'gv': 'Manx',\n 'gv-IM': 'Manx (Isle of Man)',\n 'ha': 'Hausa',\n 'ha-Latn': 'Hausa (Latin)',\n 'ha-Latn-GH': 'Hausa (Latin, Ghana)',\n 'ha-Latn-NE': 'Hausa (Latin, Niger)',\n 'ha-Latn-NG': 'Hausa (Latin, Nigeria)',\n 'haw': 'Hawaiian',\n 'haw-US': 'Hawaiian (United States)',\n 'he': 'Hebrew',\n 'he-IL': 'Hebrew (Israel)',\n 'hi': 'Hindi',\n 'hi-IN': 'Hindi (India)',\n 'hr': 'Croatian',\n 'hr-BA': 'Croatian (Bosnia & Herzegovina)',\n 'hr-HR': 'Croatian (Croatia)',\n 'hsb': 'Upper Sorbian',\n 'hsb-DE': 'Upper Sorbian (Germany)',\n 'hu': 'Hungarian',\n 'hu-HU': 'Hungarian (Hungary)',\n 'hy': 'Armenian',\n 'hy-AM': 'Armenian (Armenia)',\n 'id': 'Indonesian',\n 'id-ID': 'Indonesian (Indonesia)',\n 'ig': 'Igbo',\n 'ig-NG': 'Igbo (Nigeria)',\n 'ii': 'Sichuan Yi',\n 'ii-CN': 'Sichuan Yi (China)',\n 'is': 'Icelandic',\n 'is-IS': 'Icelandic (Iceland)',\n 'it': 'Italian',\n 'it-CH': 'Italian (Switzerland)',\n 'it-IT': 'Italian (Italy)',\n 'it-SM': 'Italian (San Marino)',\n 'iu': 'Inuktitut',\n 'iu-Cans': 'Inuktitut (Unified Canadian Aboriginal Syllabics)',\n 'iu-Cans-CA': 'Inuktitut (Unified Canadian Aboriginal Syllabics, Canada)',\n 'ja': 'Japanese',\n 'ja-JP': 'Japanese (Japan)',\n 'jgo': 'Ngomba',\n 'jgo-CM': 'Ngomba (Cameroon)',\n 'jmc': 'Machame',\n 'jmc-TZ': 'Machame (Tanzania)',\n 'ka': 'Georgian',\n 'ka-GE': 'Georgian (Georgia)',\n 'kab': 'Kabyle',\n 'kab-DZ': 'Kabyle (Algeria)',\n 'kam': 'Kamba',\n 'kam-KE': 'Kamba (Kenya)',\n 'kde': 'Makonde',\n 'kde-TZ': 'Makonde (Tanzania)',\n 'kea': 'Kabuverdianu',\n 'kea-CV': 'Kabuverdianu (Cape Verde)',\n 'khq': 'Koyra Chiini',\n 'khq-ML': 'Koyra Chiini (Mali)',\n 'ki': 'Kikuyu',\n 'ki-KE': 'Kikuyu (Kenya)',\n 'kk': 'Kazakh',\n 'kk-Cyrl': 'Kazakh (Cyrillic)',\n 'kk-Cyrl-KZ': 'Kazakh (Cyrillic, Kazakhstan)',\n 'kkj': 'Kako',\n 'kkj-CM': 'Kako (Cameroon)',\n 'kl': 'Kalaallisut',\n 'kl-GL': 'Kalaallisut (Greenland)',\n 'kln': 'Kalenjin',\n 'kln-KE': 'Kalenjin (Kenya)',\n 'km': 'Khmer',\n 'km-KH': 'Khmer (Cambodia)',\n 'kn': 'Kannada',\n 'kn-IN': 'Kannada (India)',\n 'ko': 'Korean',\n 'ko-KP': 'Korean (North Korea)',\n 'ko-KR': 'Korean (South Korea)',\n 'kok': 'Konkani',\n 'kok-IN': 'Konkani (India)',\n 'ks': 'Kashmiri',\n 'ks-Arab': 'Kashmiri (Arabic)',\n 'ks-Arab-IN': 'Kashmiri (Arabic, India)',\n 'ksb': 'Shambala',\n 'ksb-TZ': 'Shambala (Tanzania)',\n 'ksf': 'Bafia',\n 'ksf-CM': 'Bafia (Cameroon)',\n 'ksh': 'Colognian',\n 'ksh-DE': 'Colognian (Germany)',\n 'kw': 'Cornish',\n 'kw-GB': 'Cornish (United Kingdom)',\n 'ky': 'Kyrgyz',\n 'ky-Cyrl': 'Kyrgyz (Cyrillic)',\n 'ky-Cyrl-KG': 'Kyrgyz (Cyrillic, Kyrgyzstan)',\n 'lag': 'Langi',\n 'lag-TZ': 'Langi (Tanzania)',\n 'lb': 'Luxembourgish',\n 'lb-LU': 'Luxembourgish (Luxembourg)',\n 'lg': 'Ganda',\n 'lg-UG': 'Ganda (Uganda)',\n 'lkt': 'Lakota',\n 'lkt-US': 'Lakota (United States)',\n 'ln': 'Lingala',\n 'ln-AO': 'Lingala (Angola)',\n 'ln-CD': 'Lingala (Congo - Kinshasa)',\n 'ln-CF': 'Lingala (Central African Republic)',\n 'ln-CG': 'Lingala (Congo - Brazzaville)',\n 'lo': 'Lao',\n 'lo-LA': 'Lao (Laos)',\n 'localeIdentifier': 'Description',\n 'lt': 'Lithuanian',\n 'lt-LT': 'Lithuanian (Lithuania)',\n 'lu': 'Luba-Katanga',\n 'lu-CD': 'Luba-Katanga (Congo - Kinshasa)',\n 'luo': 'Luo',\n 'luo-KE': 'Luo (Kenya)',\n 'luy': 'Luyia',\n 'luy-KE': 'Luyia (Kenya)',\n 'lv': 'Latvian',\n 'lv-LV': 'Latvian (Latvia)',\n 'mas': 'Masai',\n 'mas-KE': 'Masai (Kenya)',\n 'mas-TZ': 'Masai (Tanzania)',\n 'mer': 'Meru',\n 'mer-KE': 'Meru (Kenya)',\n 'mfe': 'Morisyen',\n 'mfe-MU': 'Morisyen (Mauritius)',\n 'mg': 'Malagasy',\n 'mg-MG': 'Malagasy (Madagascar)',\n 'mgh': 'Makhuwa-Meetto',\n 'mgh-MZ': 'Makhuwa-Meetto (Mozambique)',\n 'mgo': 'Meta\u02BC',\n 'mgo-CM': 'Meta\u02BC (Cameroon)',\n 'mk': 'Macedonian',\n 'mk-MK': 'Macedonian (Macedonia)',\n 'ml': 'Malayalam',\n 'ml-IN': 'Malayalam (India)',\n 'mn': 'Mongolian',\n 'mn-Cyrl': 'Mongolian (Cyrillic)',\n 'mn-Cyrl-MN': 'Mongolian (Cyrillic, Mongolia)',\n 'mr': 'Marathi',\n 'mr-IN': 'Marathi (India)',\n 'ms': 'Malay',\n 'ms-Arab': 'Malay (Arabic)',\n 'ms-Arab-BN': 'Malay (Arabic, Brunei)',\n 'ms-Arab-MY': 'Malay (Arabic, Malaysia)',\n 'ms-Latn': 'Malay (Latin)',\n 'ms-Latn-BN': 'Malay (Latin, Brunei)',\n 'ms-Latn-MY': 'Malay (Latin, Malaysia)',\n 'ms-Latn-SG': 'Malay (Latin, Singapore)',\n 'mt': 'Maltese',\n 'mt-MT': 'Maltese (Malta)',\n 'mua': 'Mundang',\n 'mua-CM': 'Mundang (Cameroon)',\n 'my': 'Burmese',\n 'my-MM': 'Burmese (Myanmar [Burma])',\n 'naq': 'Nama',\n 'naq-NA': 'Nama (Namibia)',\n 'nb': 'Norwegian Bokm\u00E5l',\n 'nb-NO': 'Norwegian Bokm\u00E5l (Norway)',\n 'nb-SJ': 'Norwegian Bokm\u00E5l (Svalbard & Jan Mayen)',\n 'nd': 'North Ndebele',\n 'nd-ZW': 'North Ndebele (Zimbabwe)',\n 'ne': 'Nepali',\n 'ne-IN': 'Nepali (India)',\n 'ne-NP': 'Nepali (Nepal)',\n 'nl': 'Dutch',\n 'nl-AW': 'Dutch (Aruba)',\n 'nl-BE': 'Dutch (Belgium)',\n 'nl-BQ': 'Dutch (Caribbean Netherlands)',\n 'nl-CW': 'Dutch (Cura\u00E7ao)',\n 'nl-NL': 'Dutch (Netherlands)',\n 'nl-SR': 'Dutch (Suriname)',\n 'nl-SX': 'Dutch (Sint Maarten)',\n 'nmg': 'Kwasio',\n 'nmg-CM': 'Kwasio (Cameroon)',\n 'nn': 'Norwegian Nynorsk',\n 'nn-NO': 'Norwegian Nynorsk (Norway)',\n 'nnh': 'Ngiemboon',\n 'nnh-CM': 'Ngiemboon (Cameroon)',\n 'nus': 'Nuer',\n 'nus-SD': 'Nuer (Sudan)',\n 'nyn': 'Nyankole',\n 'nyn-UG': 'Nyankole (Uganda)',\n 'om': 'Oromo',\n 'om-ET': 'Oromo (Ethiopia)',\n 'om-KE': 'Oromo (Kenya)',\n 'or': 'Oriya',\n 'or-IN': 'Oriya (India)',\n 'os': 'Ossetic',\n 'os-GE': 'Ossetic (Georgia)',\n 'os-RU': 'Ossetic (Russia)',\n 'pa': 'Punjabi',\n 'pa-Arab': 'Punjabi (Arabic)',\n 'pa-Arab-PK': 'Punjabi (Arabic, Pakistan)',\n 'pa-Guru': 'Punjabi (Gurmukhi)',\n 'pa-Guru-IN': 'Punjabi (Gurmukhi, India)',\n 'pl': 'Polish',\n 'pl-PL': 'Polish (Poland)',\n 'ps': 'Pashto',\n 'ps-AF': 'Pashto (Afghanistan)',\n 'pt': 'Portuguese',\n 'pt-AO': 'Portuguese (Angola)',\n 'pt-BR': 'Portuguese (Brazil)',\n 'pt-CV': 'Portuguese (Cape Verde)',\n 'pt-GW': 'Portuguese (Guinea-Bissau)',\n 'pt-MO': 'Portuguese (Macau SAR China)',\n 'pt-MZ': 'Portuguese (Mozambique)',\n 'pt-PT': 'Portuguese (Portugal)',\n 'pt-ST': 'Portuguese (S\u00E3o Tom\u00E9 & Pr\u00EDncipe)',\n 'pt-TL': 'Portuguese (Timor-Leste)',\n 'qu': 'Quechua',\n 'qu-BO': 'Quechua (Bolivia)',\n 'qu-EC': 'Quechua (Ecuador)',\n 'qu-PE': 'Quechua (Peru)',\n 'rm': 'Romansh',\n 'rm-CH': 'Romansh (Switzerland)',\n 'rn': 'Rundi',\n 'rn-BI': 'Rundi (Burundi)',\n 'ro': 'Romanian',\n 'ro-MD': 'Romanian (Moldova)',\n 'ro-RO': 'Romanian (Romania)',\n 'rof': 'Rombo',\n 'rof-TZ': 'Rombo (Tanzania)',\n 'ru': 'Russian',\n 'ru-BY': 'Russian (Belarus)',\n 'ru-KG': 'Russian (Kyrgyzstan)',\n 'ru-KZ': 'Russian (Kazakhstan)',\n 'ru-MD': 'Russian (Moldova)',\n 'ru-RU': 'Russian (Russia)',\n 'ru-UA': 'Russian (Ukraine)',\n 'rw': 'Kinyarwanda',\n 'rw-RW': 'Kinyarwanda (Rwanda)',\n 'rwk': 'Rwa',\n 'rwk-TZ': 'Rwa (Tanzania)',\n 'sah': 'Sakha',\n 'sah-RU': 'Sakha (Russia)',\n 'saq': 'Samburu',\n 'saq-KE': 'Samburu (Kenya)',\n 'sbp': 'Sangu',\n 'sbp-TZ': 'Sangu (Tanzania)',\n 'se': 'Northern Sami',\n 'se-FI': 'Northern Sami (Finland)',\n 'se-NO': 'Northern Sami (Norway)',\n 'se-SE': 'Northern Sami (Sweden)',\n 'seh': 'Sena',\n 'seh-MZ': 'Sena (Mozambique)',\n 'ses': 'Koyraboro Senni',\n 'ses-ML': 'Koyraboro Senni (Mali)',\n 'sg': 'Sango',\n 'sg-CF': 'Sango (Central African Republic)',\n 'shi': 'Tachelhit',\n 'shi-Latn': 'Tachelhit (Latin)',\n 'shi-Latn-MA': 'Tachelhit (Latin, Morocco)',\n 'shi-Tfng': 'Tachelhit (Tifinagh)',\n 'shi-Tfng-MA': 'Tachelhit (Tifinagh, Morocco)',\n 'si': 'Sinhala',\n 'si-LK': 'Sinhala (Sri Lanka)',\n 'sk': 'Slovak',\n 'sk-SK': 'Slovak (Slovakia)',\n 'sl': 'Slovenian',\n 'sl-SI': 'Slovenian (Slovenia)',\n 'smn': 'Inari Sami',\n 'smn-FI': 'Inari Sami (Finland)',\n 'sn': 'Shona',\n 'sn-ZW': 'Shona (Zimbabwe)',\n 'so': 'Somali',\n 'so-DJ': 'Somali (Djibouti)',\n 'so-ET': 'Somali (Ethiopia)',\n 'so-KE': 'Somali (Kenya)',\n 'so-SO': 'Somali (Somalia)',\n 'sq': 'Albanian',\n 'sq-AL': 'Albanian (Albania)',\n 'sq-MK': 'Albanian (Macedonia)',\n 'sq-XK': 'Albanian (Kosovo)',\n 'sr': 'Serbian',\n 'sr-Cyrl': 'Serbian (Cyrillic)',\n 'sr-Cyrl-BA': 'Serbian (Cyrillic, Bosnia & Herzegovina)',\n 'sr-Cyrl-ME': 'Serbian (Cyrillic, Montenegro)',\n 'sr-Cyrl-RS': 'Serbian (Cyrillic, Serbia)',\n 'sr-Cyrl-XK': 'Serbian (Cyrillic, Kosovo)',\n 'sr-Latn': 'Serbian (Latin)',\n 'sr-Latn-BA': 'Serbian (Latin, Bosnia & Herzegovina)',\n 'sr-Latn-ME': 'Serbian (Latin, Montenegro)',\n 'sr-Latn-RS': 'Serbian (Latin, Serbia)',\n 'sr-Latn-XK': 'Serbian (Latin, Kosovo)',\n 'sv': 'Swedish',\n 'sv-AX': 'Swedish (\u00C5land Islands)',\n 'sv-FI': 'Swedish (Finland)',\n 'sv-SE': 'Swedish (Sweden)',\n 'sw': 'Swahili',\n 'sw-CD': 'Swahili (Congo - Kinshasa)',\n 'sw-KE': 'Swahili (Kenya)',\n 'sw-TZ': 'Swahili (Tanzania)',\n 'sw-UG': 'Swahili (Uganda)',\n 'ta': 'Tamil',\n 'ta-IN': 'Tamil (India)',\n 'ta-LK': 'Tamil (Sri Lanka)',\n 'ta-MY': 'Tamil (Malaysia)',\n 'ta-SG': 'Tamil (Singapore)',\n 'te': 'Telugu',\n 'te-IN': 'Telugu (India)',\n 'teo': 'Teso',\n 'teo-KE': 'Teso (Kenya)',\n 'teo-UG': 'Teso (Uganda)',\n 'tg': 'Tajik',\n 'tg-Cyrl': 'Tajik (Cyrillic)',\n 'tg-Cyrl-TJ': 'Tajik (Cyrillic, Tajikistan)',\n 'th': 'Thai',\n 'th-TH': 'Thai (Thailand)',\n 'ti': 'Tigrinya',\n 'ti-ER': 'Tigrinya (Eritrea)',\n 'ti-ET': 'Tigrinya (Ethiopia)',\n 'tk': 'Turkmen',\n 'tk-Latn': 'Turkmen (Latin)',\n 'tk-Latn-TM': 'Turkmen (Latin, Turkmenistan)',\n 'to': 'Tongan',\n 'to-TO': 'Tongan (Tonga)',\n 'tr': 'Turkish',\n 'tr-CY': 'Turkish (Cyprus)',\n 'tr-TR': 'Turkish (Turkey)',\n 'twq': 'Tasawaq',\n 'twq-NE': 'Tasawaq (Niger)',\n 'tzm': 'Central Atlas Tamazight',\n 'tzm-Latn': 'Central Atlas Tamazight (Latin)',\n 'tzm-Latn-MA': 'Central Atlas Tamazight (Latin, Morocco)',\n 'ug': 'Uyghur',\n 'ug-Arab': 'Uyghur (Arabic)',\n 'ug-Arab-CN': 'Uyghur (Arabic, China)',\n 'uk': 'Ukrainian',\n 'uk-UA': 'Ukrainian (Ukraine)',\n 'ur': 'Urdu',\n 'ur-IN': 'Urdu (India)',\n 'ur-PK': 'Urdu (Pakistan)',\n 'uz': 'Uzbek',\n 'uz-Arab': 'Uzbek (Arabic)',\n 'uz-Arab-AF': 'Uzbek (Arabic, Afghanistan)',\n 'uz-Cyrl': 'Uzbek (Cyrillic)',\n 'uz-Cyrl-UZ': 'Uzbek (Cyrillic, Uzbekistan)',\n 'uz-Latn': 'Uzbek (Latin)',\n 'uz-Latn-UZ': 'Uzbek (Latin, Uzbekistan)',\n 'vai': 'Vai',\n 'vai-Latn': 'Vai (Latin)',\n 'vai-Latn-LR': 'Vai (Latin, Liberia)',\n 'vai-Vaii': 'Vai (Vai)',\n 'vai-Vaii-LR': 'Vai (Vai, Liberia)',\n 'vi': 'Vietnamese',\n 'vi-VN': 'Vietnamese (Vietnam)',\n 'vun': 'Vunjo',\n 'vun-TZ': 'Vunjo (Tanzania)',\n 'wae': 'Walser',\n 'wae-CH': 'Walser (Switzerland)',\n 'xog': 'Soga',\n 'xog-UG': 'Soga (Uganda)',\n 'yav': 'Yangben',\n 'yav-CM': 'Yangben (Cameroon)',\n 'yi': 'Yiddish',\n 'yi-001': 'Yiddish (World)',\n 'yo': 'Yoruba',\n 'yo-BJ': 'Yoruba (Benin)',\n 'yo-NG': 'Yoruba (Nigeria)',\n 'zgh': 'Standard Moroccan Tamazight',\n 'zgh-MA': 'Standard Moroccan Tamazight (Morocco)',\n 'zh': 'Chinese',\n 'zh-Hans': 'Chinese (Simplified)',\n 'zh-Hans-CN': 'Chinese (Simplified, China)',\n 'zh-Hans-HK': 'Chinese (Simplified, Hong Kong SAR China)',\n 'zh-Hans-MO': 'Chinese (Simplified, Macau SAR China)',\n 'zh-Hans-SG': 'Chinese (Simplified, Singapore)',\n 'zh-Hant': 'Chinese (Traditional)',\n 'zh-Hant-HK': 'Chinese (Traditional, Hong Kong SAR China)',\n 'zh-Hant-MO': 'Chinese (Traditional, Macau SAR China)',\n 'zh-Hant-TW': 'Chinese (Traditional, Taiwan)',\n 'zu': 'Zulu',\n 'zu-ZA': 'Zulu (South Africa)',\n};\n\nexport type Locale = keyof typeof LOCALE_NAMES;\n"],
5
+ "mappings": "AACO,MAAMA,EAAe,CACxB,GAAM,YACN,QAAS,sBACT,QAAS,2BACT,IAAO,QACP,SAAU,mBACV,GAAM,OACN,QAAS,eACT,GAAM,UACN,QAAS,qBACT,GAAM,SACN,SAAU,iBACV,QAAS,gCACT,QAAS,mBACT,QAAS,oBACT,QAAS,mBACT,QAAS,iBACT,QAAS,0BACT,QAAS,mBACT,QAAS,kBACT,QAAS,gBACT,QAAS,kBACT,QAAS,mBACT,QAAS,kBACT,QAAS,mBACT,QAAS,iBACT,QAAS,mBACT,QAAS,sBACT,QAAS,gBACT,QAAS,mCACT,QAAS,iBACT,QAAS,wBACT,QAAS,iBACT,QAAS,mBACT,QAAS,uBACT,QAAS,iBACT,QAAS,gBACT,QAAS,mBACT,QAAS,iBACT,GAAM,WACN,QAAS,mBACT,IAAO,MACP,SAAU,iBACV,GAAM,cACN,UAAW,yBACX,aAAc,qCACd,UAAW,sBACX,aAAc,kCACd,IAAO,QACP,SAAU,mBACV,GAAM,aACN,QAAS,uBACT,IAAO,QACP,SAAU,iBACV,IAAO,OACP,SAAU,kBACV,GAAM,YACN,QAAS,uBACT,GAAM,UACN,UAAW,kBACX,aAAc,wBACd,GAAM,UACN,QAAS,uBACT,QAAS,kBACT,GAAM,UACN,QAAS,kBACT,QAAS,kBACT,GAAM,SACN,QAAS,kBACT,IAAO,OACP,SAAU,eACV,GAAM,UACN,UAAW,qBACX,aAAc,2CACd,UAAW,kBACX,aAAc,wCACd,GAAM,UACN,QAAS,oBACT,QAAS,kBACT,QAAS,mBACT,QAAS,kBACT,IAAO,QACP,SAAU,iBACV,IAAO,WACP,SAAU,2BACV,IAAO,kBACP,SAAU,yBACV,SAAU,yBACV,GAAM,QACN,QAAS,yBACT,GAAM,QACN,QAAS,yBACT,GAAM,SACN,QAAS,mBACT,QAAS,qBACT,IAAO,QACP,SAAU,gBACV,GAAM,SACN,QAAS,mBACT,QAAS,mBACT,QAAS,uBACT,QAAS,mBACT,QAAS,yBACT,QAAS,sBACT,IAAO,QACP,SAAU,gBACV,IAAO,gBACP,SAAU,0BACV,IAAO,QACP,SAAU,mBACV,IAAO,aACP,SAAU,uBACV,GAAM,WACN,QAAS,oBACT,IAAO,OACP,SAAU,eACV,GAAM,MACN,QAAS,cACT,QAAS,aACT,GAAM,QACN,QAAS,iBACT,QAAS,iBACT,GAAM,UACN,SAAU,kBACV,SAAU,mBACV,QAAS,oBACT,QAAS,8BACT,QAAS,qBACT,QAAS,oBACT,QAAS,2BACT,QAAS,oBACT,QAAS,sBACT,QAAS,iCACT,QAAS,qBACT,QAAS,oBACT,QAAS,oBACT,QAAS,oBACT,QAAS,qBACT,QAAS,mBACT,QAAS,mBACT,QAAS,oCACT,QAAS,wBACT,QAAS,yBACT,QAAS,qBACT,QAAS,6BACT,QAAS,mBACT,QAAS,2BACT,QAAS,oBACT,QAAS,yBACT,QAAS,oBACT,QAAS,qBACT,QAAS,oBACT,QAAS,oBACT,QAAS,kBACT,QAAS,oBACT,QAAS,iBACT,QAAS,6BACT,QAAS,uBACT,QAAS,mBACT,QAAS,2BACT,QAAS,oBACT,QAAS,qBACT,QAAS,kBACT,QAAS,sBACT,QAAS,mBACT,QAAS,mBACT,QAAS,iBACT,QAAS,mBACT,QAAS,gCACT,QAAS,oBACT,QAAS,oBACT,QAAS,oBACT,QAAS,mBACT,QAAS,wBACT,QAAS,kBACT,QAAS,2CACT,QAAS,oBACT,QAAS,kBACT,QAAS,mBACT,QAAS,oBACT,QAAS,kBACT,QAAS,qBACT,QAAS,8BACT,QAAS,2BACT,QAAS,sBACT,QAAS,oBACT,QAAS,oBACT,QAAS,sBACT,QAAS,uBACT,QAAS,mBACT,QAAS,uBACT,QAAS,uBACT,QAAS,6BACT,QAAS,4BACT,QAAS,qCACT,QAAS,uBACT,QAAS,kBACT,QAAS,sBACT,QAAS,mBACT,QAAS,qBACT,QAAS,oBACT,QAAS,2BACT,QAAS,oBACT,QAAS,wBACT,QAAS,mBACT,QAAS,kBACT,QAAS,iBACT,QAAS,wBACT,QAAS,6BACT,QAAS,wBACT,QAAS,qBACT,QAAS,mBACT,QAAS,6BACT,QAAS,wBACT,QAAS,qBACT,QAAS,kBACT,QAAS,oBACT,QAAS,mBACT,QAAS,mBACT,QAAS,4BACT,QAAS,uBACT,QAAS,kBACT,QAAS,mBACT,QAAS,sBACT,QAAS,uBACT,QAAS,qBACT,QAAS,qBACT,QAAS,yBACT,QAAS,wBACT,QAAS,yBACT,QAAS,sBACT,QAAS,mCACT,QAAS,oBACT,QAAS,kBACT,QAAS,mBACT,QAAS,8BACT,QAAS,mBACT,QAAS,qBACT,QAAS,mBACT,QAAS,kCACT,QAAS,0BACT,cAAe,oCACf,QAAS,qCACT,QAAS,mCACT,QAAS,gCACT,QAAS,oBACT,QAAS,kBACT,QAAS,yBACT,QAAS,mBACT,QAAS,qBACT,GAAM,YACN,GAAM,UACN,SAAU,0BACV,QAAS,sBACT,QAAS,oBACT,QAAS,kBACT,QAAS,qBACT,QAAS,uBACT,QAAS,iBACT,QAAS,+BACT,QAAS,4BACT,QAAS,oBACT,QAAS,kBACT,QAAS,8BACT,QAAS,sBACT,QAAS,qBACT,QAAS,2BACT,QAAS,mBACT,QAAS,sBACT,QAAS,mBACT,QAAS,iBACT,QAAS,wBACT,QAAS,wBACT,QAAS,qBACT,QAAS,wBACT,QAAS,0BACT,QAAS,oBACT,QAAS,sBACT,GAAM,WACN,QAAS,qBACT,GAAM,SACN,QAAS,iBACT,IAAO,SACP,SAAU,oBACV,GAAM,UACN,QAAS,wBACT,QAAS,iBACT,GAAM,QACN,QAAS,mBACT,QAAS,iBACT,QAAS,qBACT,QAAS,kBACT,GAAM,UACN,QAAS,oBACT,IAAO,WACP,SAAU,yBACV,GAAM,UACN,QAAS,0BACT,GAAM,SACN,QAAS,mBACT,QAAS,wBACT,QAAS,mBACT,QAAS,iBACT,QAAS,6BACT,QAAS,kBACT,QAAS,4BACT,QAAS,oCACT,QAAS,+BACT,QAAS,uBACT,QAAS,iCACT,QAAS,oBACT,QAAS,oBACT,QAAS,mBACT,QAAS,kBACT,QAAS,iBACT,QAAS,yBACT,QAAS,kBACT,QAAS,sBACT,QAAS,6BACT,QAAS,iBACT,QAAS,mBACT,QAAS,sBACT,QAAS,mBACT,QAAS,kBACT,QAAS,sBACT,QAAS,sBACT,QAAS,gBACT,QAAS,sBACT,QAAS,sBACT,QAAS,qBACT,QAAS,yBACT,QAAS,iBACT,QAAS,4BACT,QAAS,iCACT,QAAS,sBACT,QAAS,kBACT,QAAS,sBACT,QAAS,mBACT,QAAS,iBACT,QAAS,gBACT,QAAS,gBACT,QAAS,mBACT,QAAS,mBACT,QAAS,2BACT,QAAS,mBACT,IAAO,WACP,SAAU,mBACV,GAAM,kBACN,QAAS,gCACT,GAAM,QACN,QAAS,kBACT,GAAM,kBACN,QAAS,mCACT,GAAM,WACN,QAAS,mBACT,IAAO,eACP,SAAU,6BACV,SAAU,wBACV,SAAU,+BACV,GAAM,WACN,QAAS,mBACT,IAAO,QACP,SAAU,gBACV,GAAM,OACN,QAAS,qBACT,GAAM,QACN,UAAW,gBACX,aAAc,uBACd,aAAc,uBACd,aAAc,yBACd,IAAO,WACP,SAAU,2BACV,GAAM,SACN,QAAS,kBACT,GAAM,QACN,QAAS,gBACT,GAAM,WACN,QAAS,kCACT,QAAS,qBACT,IAAO,gBACP,SAAU,0BACV,GAAM,YACN,QAAS,sBACT,GAAM,WACN,QAAS,qBACT,GAAM,aACN,QAAS,yBACT,GAAM,OACN,QAAS,iBACT,GAAM,aACN,QAAS,qBACT,GAAM,YACN,QAAS,sBACT,GAAM,UACN,QAAS,wBACT,QAAS,kBACT,QAAS,uBACT,GAAM,YACN,UAAW,oDACX,aAAc,4DACd,GAAM,WACN,QAAS,mBACT,IAAO,SACP,SAAU,oBACV,IAAO,UACP,SAAU,qBACV,GAAM,WACN,QAAS,qBACT,IAAO,SACP,SAAU,mBACV,IAAO,QACP,SAAU,gBACV,IAAO,UACP,SAAU,qBACV,IAAO,eACP,SAAU,4BACV,IAAO,eACP,SAAU,sBACV,GAAM,SACN,QAAS,iBACT,GAAM,SACN,UAAW,oBACX,aAAc,gCACd,IAAO,OACP,SAAU,kBACV,GAAM,cACN,QAAS,0BACT,IAAO,WACP,SAAU,mBACV,GAAM,QACN,QAAS,mBACT,GAAM,UACN,QAAS,kBACT,GAAM,SACN,QAAS,uBACT,QAAS,uBACT,IAAO,UACP,SAAU,kBACV,GAAM,WACN,UAAW,oBACX,aAAc,2BACd,IAAO,WACP,SAAU,sBACV,IAAO,QACP,SAAU,mBACV,IAAO,YACP,SAAU,sBACV,GAAM,UACN,QAAS,2BACT,GAAM,SACN,UAAW,oBACX,aAAc,gCACd,IAAO,QACP,SAAU,mBACV,GAAM,gBACN,QAAS,6BACT,GAAM,QACN,QAAS,iBACT,IAAO,SACP,SAAU,yBACV,GAAM,UACN,QAAS,mBACT,QAAS,6BACT,QAAS,qCACT,QAAS,gCACT,GAAM,MACN,QAAS,aACT,iBAAoB,cACpB,GAAM,aACN,QAAS,yBACT,GAAM,eACN,QAAS,kCACT,IAAO,MACP,SAAU,cACV,IAAO,QACP,SAAU,gBACV,GAAM,UACN,QAAS,mBACT,IAAO,QACP,SAAU,gBACV,SAAU,mBACV,IAAO,OACP,SAAU,eACV,IAAO,WACP,SAAU,uBACV,GAAM,WACN,QAAS,wBACT,IAAO,iBACP,SAAU,8BACV,IAAO,aACP,SAAU,wBACV,GAAM,aACN,QAAS,yBACT,GAAM,YACN,QAAS,oBACT,GAAM,YACN,UAAW,uBACX,aAAc,iCACd,GAAM,UACN,QAAS,kBACT,GAAM,QACN,UAAW,iBACX,aAAc,yBACd,aAAc,2BACd,UAAW,gBACX,aAAc,wBACd,aAAc,0BACd,aAAc,2BACd,GAAM,UACN,QAAS,kBACT,IAAO,UACP,SAAU,qBACV,GAAM,UACN,QAAS,4BACT,IAAO,OACP,SAAU,iBACV,GAAM,sBACN,QAAS,+BACT,QAAS,6CACT,GAAM,gBACN,QAAS,2BACT,GAAM,SACN,QAAS,iBACT,QAAS,iBACT,GAAM,QACN,QAAS,gBACT,QAAS,kBACT,QAAS,gCACT,QAAS,qBACT,QAAS,sBACT,QAAS,mBACT,QAAS,uBACT,IAAO,SACP,SAAU,oBACV,GAAM,oBACN,QAAS,6BACT,IAAO,YACP,SAAU,uBACV,IAAO,OACP,SAAU,eACV,IAAO,WACP,SAAU,oBACV,GAAM,QACN,QAAS,mBACT,QAAS,gBACT,GAAM,QACN,QAAS,gBACT,GAAM,UACN,QAAS,oBACT,QAAS,mBACT,GAAM,UACN,UAAW,mBACX,aAAc,6BACd,UAAW,qBACX,aAAc,4BACd,GAAM,SACN,QAAS,kBACT,GAAM,SACN,QAAS,uBACT,GAAM,aACN,QAAS,sBACT,QAAS,sBACT,QAAS,0BACT,QAAS,6BACT,QAAS,+BACT,QAAS,0BACT,QAAS,wBACT,QAAS,4CACT,QAAS,2BACT,GAAM,UACN,QAAS,oBACT,QAAS,oBACT,QAAS,iBACT,GAAM,UACN,QAAS,wBACT,GAAM,QACN,QAAS,kBACT,GAAM,WACN,QAAS,qBACT,QAAS,qBACT,IAAO,QACP,SAAU,mBACV,GAAM,UACN,QAAS,oBACT,QAAS,uBACT,QAAS,uBACT,QAAS,oBACT,QAAS,mBACT,QAAS,oBACT,GAAM,cACN,QAAS,uBACT,IAAO,MACP,SAAU,iBACV,IAAO,QACP,SAAU,iBACV,IAAO,UACP,SAAU,kBACV,IAAO,QACP,SAAU,mBACV,GAAM,gBACN,QAAS,0BACT,QAAS,yBACT,QAAS,yBACT,IAAO,OACP,SAAU,oBACV,IAAO,kBACP,SAAU,yBACV,GAAM,QACN,QAAS,mCACT,IAAO,YACP,WAAY,oBACZ,cAAe,6BACf,WAAY,uBACZ,cAAe,gCACf,GAAM,UACN,QAAS,sBACT,GAAM,SACN,QAAS,oBACT,GAAM,YACN,QAAS,uBACT,IAAO,aACP,SAAU,uBACV,GAAM,QACN,QAAS,mBACT,GAAM,SACN,QAAS,oBACT,QAAS,oBACT,QAAS,iBACT,QAAS,mBACT,GAAM,WACN,QAAS,qBACT,QAAS,uBACT,QAAS,oBACT,GAAM,UACN,UAAW,qBACX,aAAc,2CACd,aAAc,iCACd,aAAc,6BACd,aAAc,6BACd,UAAW,kBACX,aAAc,wCACd,aAAc,8BACd,aAAc,0BACd,aAAc,0BACd,GAAM,UACN,QAAS,6BACT,QAAS,oBACT,QAAS,mBACT,GAAM,UACN,QAAS,6BACT,QAAS,kBACT,QAAS,qBACT,QAAS,mBACT,GAAM,QACN,QAAS,gBACT,QAAS,oBACT,QAAS,mBACT,QAAS,oBACT,GAAM,SACN,QAAS,iBACT,IAAO,OACP,SAAU,eACV,SAAU,gBACV,GAAM,QACN,UAAW,mBACX,aAAc,+BACd,GAAM,OACN,QAAS,kBACT,GAAM,WACN,QAAS,qBACT,QAAS,sBACT,GAAM,UACN,UAAW,kBACX,aAAc,gCACd,GAAM,SACN,QAAS,iBACT,GAAM,UACN,QAAS,mBACT,QAAS,mBACT,IAAO,UACP,SAAU,kBACV,IAAO,0BACP,WAAY,kCACZ,cAAe,2CACf,GAAM,SACN,UAAW,kBACX,aAAc,yBACd,GAAM,YACN,QAAS,sBACT,GAAM,OACN,QAAS,eACT,QAAS,kBACT,GAAM,QACN,UAAW,iBACX,aAAc,8BACd,UAAW,mBACX,aAAc,+BACd,UAAW,gBACX,aAAc,4BACd,IAAO,MACP,WAAY,cACZ,cAAe,uBACf,WAAY,YACZ,cAAe,qBACf,GAAM,aACN,QAAS,uBACT,IAAO,QACP,SAAU,mBACV,IAAO,SACP,SAAU,uBACV,IAAO,OACP,SAAU,gBACV,IAAO,UACP,SAAU,qBACV,GAAM,UACN,SAAU,kBACV,GAAM,SACN,QAAS,iBACT,QAAS,mBACT,IAAO,8BACP,SAAU,wCACV,GAAM,UACN,UAAW,uBACX,aAAc,8BACd,aAAc,4CACd,aAAc,wCACd,aAAc,kCACd,UAAW,wBACX,aAAc,6CACd,aAAc,yCACd,aAAc,gCACd,GAAM,OACN,QAAS,qBACb",
6
+ "names": ["LOCALE_NAMES"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=localization.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
package/dist/lock.js ADDED
@@ -0,0 +1,2 @@
1
+ class h{tasks=[];waiter=null;wait(){return this.waiter?this.waiter:(this.waiter=new Promise(t=>{(async()=>{for(;this.tasks.length>0;){const s=this.tasks.shift();s&&await s()}this.waiter=null,t()})()}),this.waiter)}async use(t){const i=new Promise((s,a)=>{const e=async()=>{const r=t();try{s(await r)}catch(o){a(o)}};this.tasks.push(e)});return await this.wait(),i}}export{h as Lock};
2
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/lock.ts"],
4
+ "sourcesContent": ["\ntype Task = () => Promise<void>;\n\nexport class Lock {\n private tasks: (Task)[] = [];\n private waiter: Promise<void> | null = null;\n\n private wait(): Promise<void> {\n if (this.waiter) {\n return this.waiter;\n }\n this.waiter = new Promise<void>((resolve) => {\n const runTasks = async () => {\n while (this.tasks.length > 0) {\n const task = this.tasks.shift();\n if (task) {\n await task();\n }\n }\n this.waiter = null;\n resolve();\n };\n runTasks();\n });\n return this.waiter;\n }\n\n public async use<T>(callback: () => Promise<T>): Promise<T> {\n const promise = new Promise<T>((resolve, reject) => {\n const task = async () => {\n const promise = callback();\n try {\n resolve(await promise);\n } catch (reason) {\n reject(reason);\n }\n };\n this.tasks.push(task);\n });\n await this.wait();\n return promise;\n }\n}\n"],
5
+ "mappings": "AAGO,MAAMA,CAAK,CACN,MAAkB,CAAC,EACnB,OAA+B,KAE/B,MAAsB,CAC1B,OAAI,KAAK,OACE,KAAK,QAEhB,KAAK,OAAS,IAAI,QAAeC,GAAY,EACxB,SAAY,CACzB,KAAO,KAAK,MAAM,OAAS,GAAG,CAC1B,MAAMC,EAAO,KAAK,MAAM,MAAM,EAC1BA,GACA,MAAMA,EAAK,CAEnB,CACA,KAAK,OAAS,KACdD,EAAQ,CACZ,GACS,CACb,CAAC,EACM,KAAK,OAChB,CAEA,MAAa,IAAOE,EAAwC,CACxD,MAAMC,EAAU,IAAI,QAAW,CAACH,EAASI,IAAW,CAChD,MAAMH,EAAO,SAAY,CACrB,MAAME,EAAUD,EAAS,EACzB,GAAI,CACAF,EAAQ,MAAMG,CAAO,CACzB,OAASE,EAAQ,CACbD,EAAOC,CAAM,CACjB,CACJ,EACA,KAAK,MAAM,KAAKJ,CAAI,CACxB,CAAC,EACD,aAAM,KAAK,KAAK,EACTE,CACX,CACJ",
6
+ "names": ["Lock", "resolve", "task", "callback", "promise", "reject", "reason"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{Identifier as i,IdentifierMap as r}from"../identifier";class n{packetMap=new r;register(...e){for(const t of e){if(this.packetMap.has(t.id))throw new Error(`Packet id ${t.id.key()} already registered`);this.packetMap.set(t.id,t)}}serialize(e){return{type:e.type.id.key(),data:e.type.serializer.serialize(e.data)}}deserialize(e){const t=i.fromKey(e.type),a=this.packetMap.get(t);if(!a)throw new Error(`Packet type ${e.type} not registered`);return{type:a,data:a.serializer.deserialize(e.data)}}}export{n as PacketMapper};
2
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/network/connection.ts"],
4
+ "sourcesContent": ["import { Identifier, IdentifierMap } from '../identifier';\nimport type { Serializable } from '../serialize';\n\nimport type { Packet, PacketData, PacketType } from './packet';\n\nexport class PacketMapper implements Serializable<Packet, PacketData> {\n private readonly packetMap = new IdentifierMap<PacketType<unknown>>();\n\n public register(...packetTypes: PacketType<unknown>[]): void {\n for (const type of packetTypes) {\n if (this.packetMap.has(type.id)) {\n throw new Error(`Packet id ${type.id.key()} already registered`);\n }\n this.packetMap.set(type.id, type);\n }\n }\n\n serialize(packet: Packet): PacketData {\n return {\n type: packet.type.id.key(),\n data: packet.type.serializer.serialize(packet.data),\n };\n }\n\n deserialize(data: PacketData): Packet {\n const identifier = Identifier.fromKey(data.type);\n const type = this.packetMap.get(identifier);\n if (!type) throw new Error(`Packet type ${data.type} not registered`);\n return {\n type,\n data: type.serializer.deserialize(data.data),\n };\n }\n}\n\nexport interface Transport {\n connect(): Promise<Connection>;\n}\n\nexport interface Connection {\n send(packet: Packet, serializer: Serializable<Packet, PacketData>): void;\n receive(serializer: Serializable<Packet, PacketData>): Promise<Packet | null>;\n close(): void;\n closed: boolean;\n}\n"],
5
+ "mappings": "AAAA,OAAS,cAAAA,EAAY,iBAAAC,MAAqB,gBAKnC,MAAMC,CAAyD,CACjD,UAAY,IAAID,EAE1B,YAAYE,EAA0C,CACzD,UAAWC,KAAQD,EAAa,CAC5B,GAAI,KAAK,UAAU,IAAIC,EAAK,EAAE,EAC1B,MAAM,IAAI,MAAM,aAAaA,EAAK,GAAG,IAAI,CAAC,qBAAqB,EAEnE,KAAK,UAAU,IAAIA,EAAK,GAAIA,CAAI,CACpC,CACJ,CAEA,UAAUC,EAA4B,CAClC,MAAO,CACH,KAAMA,EAAO,KAAK,GAAG,IAAI,EACzB,KAAMA,EAAO,KAAK,WAAW,UAAUA,EAAO,IAAI,CACtD,CACJ,CAEA,YAAYC,EAA0B,CAClC,MAAMC,EAAaP,EAAW,QAAQM,EAAK,IAAI,EACzCF,EAAO,KAAK,UAAU,IAAIG,CAAU,EAC1C,GAAI,CAACH,EAAM,MAAM,IAAI,MAAM,eAAeE,EAAK,IAAI,iBAAiB,EACpE,MAAO,CACH,KAAAF,EACA,KAAMA,EAAK,WAAW,YAAYE,EAAK,IAAI,CAC/C,CACJ,CACJ",
6
+ "names": ["Identifier", "IdentifierMap", "PacketMapper", "packetTypes", "type", "packet", "data", "identifier"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{textDecoder as m,textEncoder as b}from"../const";import{ByteReader as s,ByteWriter as o}from"../serialize";import{PACKET_TYPES as f}from"./packet/packet-types";function p(t){return t.toBase64().replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function u(t){for(t=t.replace(/-/g,"+").replace(/_/g,"/");t.length%4;)t+="=";return Uint8Array.fromBase64(t)}function i(t){const e=new ArrayBuffer(t.length);return new Uint8Array(e).set(t),e}const S=typeof crypto<"u"&&!!crypto.subtle;class l{constructor(e,r){this.privateKey=e;this.publicKey=r}static async new(){const{privateKey:e,publicKey:r}=await crypto.subtle.generateKey({name:"RSA-OAEP",modulusLength:4096,publicExponent:new Uint8Array([1,0,1]),hash:"SHA-256"},!0,["encrypt","decrypt"]);return new l(e,r)}async toRequest(){const e=await crypto.subtle.exportKey("jwk",this.publicKey);if(!e.e)throw new Error("Key export failed: missing exponent");if(!e.n)throw new Error("Key export failed: missing modulus");return{e:e.e,n:e.n}}async decrypt(e){return await crypto.subtle.decrypt({name:"RSA-OAEP"},this.privateKey,e)}async decryptString(e){const r=await crypto.subtle.decrypt({name:"RSA-OAEP"},this.privateKey,i(u(e)));return m.decode(r)}}class A{constructor(e){this.publicKey=e}static async new(e){const r=await crypto.subtle.importKey("jwk",{alg:"RSA-OAEP-256",ext:!0,key_ops:["encrypt"],kty:"RSA",e:e.e.replace(/=+$/,""),n:e.n.replace(/=+$/,"")},{name:"RSA-OAEP",hash:"SHA-256"},!0,["encrypt"]);return new A(r)}async encrypt(e){return await crypto.subtle.encrypt({name:"RSA-OAEP"},this.publicKey,e)}async encryptString(e){const r=await crypto.subtle.encrypt({name:"RSA-OAEP"},this.publicKey,b.encode(e));return p(new Uint8Array(r))}}class y{constructor(e,r){this.key=e;this.iv=r}static async new(){const e=await crypto.subtle.generateKey({name:"AES-CBC",length:128},!0,["encrypt","decrypt"]),r=crypto.getRandomValues(new Uint8Array(16));return new y(e,r.buffer)}static async deserialize(e,r){const n=await r.decrypt(i(u(e))),a=s.fromArrayBuffer(n),c=a.readUint8Array(),d=a.readUint8Array(),w=await crypto.subtle.importKey("raw",i(c),"AES-CBC",!1,["encrypt","decrypt"]);return new y(w,i(d))}async serialize(e){const r=new o,n=await crypto.subtle.exportKey("raw",this.key);r.writeUint8Array(new Uint8Array(n)),r.writeUint8Array(new Uint8Array(this.iv));const a=await e.encrypt(i(r.finish()));return p(new Uint8Array(a))}async encrypt(e){const r=new o;r.writeString(e.type),r.writeUint8Array(e.data);const n=await crypto.subtle.encrypt({name:"AES-CBC",iv:this.iv,length:16},this.key,i(r.finish()));return f.ENCRYPTED_PACKET.new(new Uint8Array(n))}async decrypt(e){const r=await crypto.subtle.decrypt({name:"AES-CBC",iv:this.iv,length:16},this.key,i(e.data)),n=s.fromArrayBuffer(r),a=n.readString(),c=n.readUint8Array();return{type:a,data:c}}}export{y as AES,l as Decryptor,S as ENCRYPTION_AVAILABLE,A as Encryptor};
2
+ //# sourceMappingURL=encryption.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/network/encryption.ts"],
4
+ "sourcesContent": ["import { textDecoder, textEncoder } from '../const';\nimport { ByteReader, ByteWriter } from '../serialize';\nimport { Packet, PacketData } from './packet';\nimport { PACKET_TYPES } from './packet/packet-types';\n\nfunction base64UrlEncode(buffer: Uint8Array): string {\n return buffer\n .toBase64()\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n}\n\nfunction base64UrlDecode(data: string): Uint8Array {\n data = data.replace(/-/g, '+').replace(/_/g, '/');\n while (data.length % 4) {\n data += '=';\n }\n return Uint8Array.fromBase64(data);\n}\n\nfunction convertUint8ArrayToArrayBuffer(u8: Uint8Array): ArrayBuffer {\n const buf = new ArrayBuffer(u8.length);\n const view = new Uint8Array(buf);\n view.set(u8);\n return buf;\n}\n\ntype RSANumbers = {\n e: string;\n n: string;\n};\n\nexport type EncryptionResponse = {\n kind: 'v1';\n rsa: RSANumbers;\n aes: string;\n};\n\nexport const ENCRYPTION_AVAILABLE: boolean = typeof crypto !== 'undefined' && !!crypto.subtle;\n\nexport class Decryptor {\n private constructor(\n private readonly privateKey: CryptoKey,\n private readonly publicKey: CryptoKey,\n ) {}\n\n public static async new(): Promise<Decryptor> {\n const { privateKey, publicKey } = await crypto.subtle.generateKey(\n {\n name: 'RSA-OAEP',\n modulusLength: 4096,\n publicExponent: new Uint8Array([1, 0, 1]),\n hash: 'SHA-256',\n },\n true,\n ['encrypt', 'decrypt'],\n );\n\n return new Decryptor(privateKey, publicKey);\n }\n\n public async toRequest(): Promise<RSANumbers> {\n const key = await crypto.subtle.exportKey('jwk', this.publicKey);\n if (!key.e) throw new Error('Key export failed: missing exponent');\n if (!key.n) throw new Error('Key export failed: missing modulus');\n return {\n e: key.e,\n n: key.n,\n };\n }\n\n public async decrypt(data: ArrayBuffer): Promise<ArrayBuffer> {\n const decrypted = await crypto.subtle.decrypt(\n { name: 'RSA-OAEP' },\n this.privateKey,\n data,\n );\n return decrypted;\n }\n\n public async decryptString(data: string): Promise<string> {\n const decrypted = await crypto.subtle.decrypt(\n { name: 'RSA-OAEP' },\n this.privateKey,\n convertUint8ArrayToArrayBuffer(base64UrlDecode(data)),\n );\n return textDecoder.decode(decrypted);\n }\n}\n\nexport class Encryptor {\n private constructor(\n private readonly publicKey: CryptoKey,\n ) {}\n\n public static async new(request: RSANumbers): Promise<Encryptor> {\n const publicKey = await crypto.subtle.importKey(\n 'jwk',\n {\n alg: 'RSA-OAEP-256',\n ext: true,\n key_ops: ['encrypt'],\n kty: 'RSA',\n e: request.e.replace(/=+$/, ''),\n n: request.n.replace(/=+$/, ''),\n },\n {\n name: 'RSA-OAEP',\n hash: 'SHA-256',\n },\n true,\n ['encrypt'],\n );\n return new Encryptor(publicKey);\n }\n\n public async encrypt(data: ArrayBuffer): Promise<ArrayBuffer> {\n return await crypto.subtle.encrypt(\n {\n name: 'RSA-OAEP',\n },\n this.publicKey,\n data,\n );\n }\n\n public async encryptString(data: string): Promise<string> {\n const encrypted = await crypto.subtle.encrypt(\n {\n name: 'RSA-OAEP',\n },\n this.publicKey,\n textEncoder.encode(data),\n );\n return base64UrlEncode(new Uint8Array(encrypted));\n }\n}\n\nexport class AES {\n private constructor(\n private readonly key: CryptoKey,\n private readonly iv: ArrayBuffer,\n ) {}\n\n public static async new(): Promise<AES> {\n const key = await crypto.subtle.generateKey(\n {\n name: 'AES-CBC',\n length: 128,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n const iv = crypto.getRandomValues(new Uint8Array(16));\n return new AES(key, iv.buffer);\n }\n\n public static async deserialize(aes: string, decryptor: Decryptor): Promise<AES> {\n const decrypted = await decryptor.decrypt(convertUint8ArrayToArrayBuffer(base64UrlDecode(aes)));\n const reader = ByteReader.fromArrayBuffer(decrypted);\n const key = reader.readUint8Array();\n const iv = reader.readUint8Array();\n\n const key_encoded = await crypto.subtle.importKey(\n 'raw',\n convertUint8ArrayToArrayBuffer(key),\n 'AES-CBC',\n false,\n ['encrypt', 'decrypt'],\n );\n return new AES(\n key_encoded,\n convertUint8ArrayToArrayBuffer(iv),\n );\n }\n\n public async serialize(encryptor: Encryptor): Promise<string> {\n const writer = new ByteWriter();\n const rawKey = await crypto.subtle.exportKey('raw', this.key);\n writer.writeUint8Array(new Uint8Array(rawKey));\n writer.writeUint8Array(new Uint8Array(this.iv));\n const encrypted = await encryptor.encrypt(convertUint8ArrayToArrayBuffer(writer.finish()));\n return base64UrlEncode(new Uint8Array(encrypted));\n }\n\n public async encrypt(data: PacketData): Promise<Packet> {\n const writer = new ByteWriter();\n writer.writeString(data.type);\n writer.writeUint8Array(data.data);\n const encrypted = await crypto.subtle.encrypt(\n {\n name: 'AES-CBC',\n iv: this.iv,\n length: 16,\n },\n this.key,\n convertUint8ArrayToArrayBuffer(writer.finish()),\n );\n return PACKET_TYPES.ENCRYPTED_PACKET.new(new Uint8Array(encrypted));\n }\n\n public async decrypt(packet: Packet<Uint8Array>): Promise<PacketData> {\n const decrypted = await crypto.subtle.decrypt(\n {\n name: 'AES-CBC',\n iv: this.iv,\n length: 16,\n },\n this.key,\n convertUint8ArrayToArrayBuffer(packet.data),\n );\n const reader = ByteReader.fromArrayBuffer(decrypted);\n const type = reader.readString();\n const data = reader.readUint8Array();\n return {\n type,\n data,\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["textDecoder", "textEncoder", "ByteReader", "ByteWriter", "PACKET_TYPES", "base64UrlEncode", "buffer", "base64UrlDecode", "data", "convertUint8ArrayToArrayBuffer", "u8", "buf", "ENCRYPTION_AVAILABLE", "Decryptor", "privateKey", "publicKey", "key", "decrypted", "Encryptor", "request", "encrypted", "AES", "iv", "aes", "decryptor", "reader", "key_encoded", "encryptor", "writer", "rawKey", "packet", "type"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{ByteReader as o,ByteWriter as s}from"../serialize";const a="omuapps-frame";class p{connect(){return r.create()}}class r{constructor(t){this.connectedWaiter=t;this.connected=!1,window.addEventListener("message",e=>{if(e.data===null||typeof e.data!="object"||!("type_key"in e.data)||e.data.type_key!==a)return;const i=e.data;i.type==="syn"&&(this.origin=e.origin),e.origin===this.origin&&this.handleCommand(i)})}connected;origin=null;packetQueue=[];sendQueue=[];receiveWaiter=null;static create(){return new Promise(t=>{const e=new r(()=>t(e));e.postCommand({type:"connect",payload:{}})})}handleCommand(t){const{type:e,payload:i}=t;switch(e){case"syn":this.origin=i.origin,this.postCommand({type:"syn",payload:{origin:window.origin}});break;case"connect":this.connected=!0,this.connectedWaiter&&(this.connectedWaiter(),this.connectedWaiter=null);break;case"disconnect":this.connected=!1;break;case"receive":{const n=o.fromUint8Array(i);this.packetQueue.push({type:n.readString(),data:n.readUint8Array()}),n.finish(),this.receiveWaiter&&this.receiveWaiter();break}case"error":throw new Error(i);case"send":break;default:throw new Error(`Unknown command type: ${e}`)}}postCommand(t){if(t.type_key=a,!this.origin){this.sendQueue.push(t);return}for(const e of this.sendQueue)window.parent.postMessage(e,this.origin);this.sendQueue.length=0,window.parent.postMessage(t,this.origin)}async receive(t){if(this.receiveWaiter)throw new Error("Already receiving");if(!this.connected)return null;for(;this.packetQueue.length===0&&this.connected;)await new Promise(i=>{this.receiveWaiter=()=>i()});if(!this.connected)return null;const e=t.deserialize(this.packetQueue.shift());return this.receiveWaiter=null,e}get closed(){return!this.connected}close(){this.connected&&this.postCommand({type:"disconnect",payload:{}}),this.connected=!1,this.receiveWaiter&&(this.receiveWaiter(),this.receiveWaiter=null)}send(t,e){if(!this.connected)throw new Error("Not connected");const i=e.serialize(t),n=new s;n.writeString(i.type),n.writeUint8Array(i.data),this.postCommand({type:"send",payload:n.finish()})}}export{r as FrameConnection,p as FrameTransport};
2
+ //# sourceMappingURL=frame-transport.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/network/frame-transport.ts"],
4
+ "sourcesContent": ["\nimport type { Serializable } from '../serialize';\nimport { ByteReader, ByteWriter } from '../serialize';\n\nimport type { Connection, Transport } from './connection.js';\nimport type { Packet, PacketData } from './packet/packet.js';\n\nconst FRAME_TYPE_KEY = 'omuapps-frame';\n\ntype Command = ({\n type: 'syn';\n payload: {\n origin: string;\n };\n} | {\n type: 'connect';\n payload: object;\n} | {\n type: 'disconnect';\n payload: object;\n} | {\n type: 'send';\n payload: Uint8Array;\n} | {\n type: 'receive';\n payload: Uint8Array;\n} | {\n type: 'error';\n payload: string;\n}) & {\n type_key?: string;\n};\n\nexport class FrameTransport implements Transport {\n public connect(): Promise<FrameConnection> {\n return FrameConnection.create();\n }\n}\n\nexport class FrameConnection implements Connection {\n public connected: boolean;\n private origin: string | null = null;\n private readonly packetQueue: Array<PacketData> = [];\n private readonly sendQueue: Array<Command> = [];\n private receiveWaiter: (() => void) | null = null;\n\n constructor(\n private connectedWaiter: (() => void) | null,\n ) {\n this.connected = false;\n window.addEventListener('message', (event) => {\n if (event.data === null || typeof event.data !== 'object') {\n return;\n }\n if (!('type_key' in event.data) || event.data.type_key !== FRAME_TYPE_KEY) {\n return;\n }\n const command = event.data as Command;\n if (command.type === 'syn') {\n this.origin = event.origin;\n }\n if (event.origin !== this.origin) {\n return;\n }\n this.handleCommand(command);\n });\n }\n\n public static create(): Promise<FrameConnection> {\n return new Promise<FrameConnection>((resolve) => {\n const connection = new FrameConnection((): void => resolve(connection));\n connection.postCommand({\n type: 'connect',\n payload: {},\n });\n });\n }\n\n private handleCommand(command: Command): void {\n const { type, payload } = command;\n switch (type) {\n case 'syn':\n this.origin = payload.origin;\n this.postCommand({\n type: 'syn',\n payload: {\n origin: window.origin,\n },\n });\n break;\n case 'connect':\n this.connected = true;\n if (this.connectedWaiter) {\n this.connectedWaiter();\n this.connectedWaiter = null;\n }\n break;\n case 'disconnect':\n this.connected = false;\n break;\n case 'receive': {\n const reader = ByteReader.fromUint8Array(payload);\n this.packetQueue.push({\n type: reader.readString(),\n data: reader.readUint8Array(),\n });\n reader.finish();\n if (this.receiveWaiter) {\n this.receiveWaiter();\n }\n break;\n }\n case 'error':\n throw new Error(payload);\n case 'send':\n break;\n default:\n throw new Error(`Unknown command type: ${type}`);\n }\n }\n\n private postCommand(command: Command): void {\n command.type_key = FRAME_TYPE_KEY;\n if (!this.origin) {\n this.sendQueue.push(command);\n return;\n }\n for (const queuedCommand of this.sendQueue) {\n window.parent.postMessage(queuedCommand, this.origin);\n }\n this.sendQueue.length = 0;\n window.parent.postMessage(command, this.origin);\n }\n\n public async receive(serializer: Serializable<Packet<unknown>, PacketData>): Promise<Packet | null> {\n if (this.receiveWaiter) {\n throw new Error('Already receiving');\n }\n if (!this.connected) {\n return null;\n }\n while (this.packetQueue.length === 0 && this.connected) {\n await new Promise<void>((resolve) => {\n this.receiveWaiter = (): void => resolve();\n });\n }\n if (!this.connected) {\n return null;\n }\n const packet = serializer.deserialize(this.packetQueue.shift()!);\n this.receiveWaiter = null;\n return packet;\n }\n\n get closed(): boolean {\n return !this.connected;\n }\n\n close(): void {\n if (this.connected) {\n this.postCommand({\n type: 'disconnect',\n payload: {},\n });\n }\n this.connected = false;\n if (this.receiveWaiter) {\n this.receiveWaiter();\n this.receiveWaiter = null;\n }\n }\n\n send(packet: Packet, serializer: Serializable<Packet<unknown>, PacketData>): void {\n if (!this.connected) {\n throw new Error('Not connected');\n }\n const packetData = serializer.serialize(packet);\n const writer = new ByteWriter();\n writer.writeString(packetData.type);\n writer.writeUint8Array(packetData.data);\n this.postCommand({\n type: 'send',\n payload: writer.finish(),\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ByteReader", "ByteWriter", "FRAME_TYPE_KEY", "FrameTransport", "FrameConnection", "connectedWaiter", "event", "command", "resolve", "connection", "type", "payload", "reader", "queuedCommand", "serializer", "packet", "packetData", "writer"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{FrameTransport as e}from"./frame-transport.js";import{Network as p}from"./network.js";import{WebsocketTransport as n}from"./websocket-transport.js";export{e as FrameTransport,p as Network,n as WebsocketTransport};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/network/index.ts"],
4
+ "sourcesContent": ["export type { Address } from '../address.js';\nexport type { Connection } from './connection.js';\nexport { FrameTransport } from './frame-transport.js';\nexport { Network, type NetworkStatus } from './network.js';\nexport { WebsocketTransport } from './websocket-transport.js';\n\n"],
5
+ "mappings": "AAEA,OAAS,kBAAAA,MAAsB,uBAC/B,OAAS,WAAAC,MAAmC,eAC5C,OAAS,sBAAAC,MAA0B",
6
+ "names": ["FrameTransport", "Network", "WebsocketTransport"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{AnotherConnection as l,AppRemoved as m,DisconnectReason as w,InternalError as k,InvalidOrigin as E,InvalidPacket as h,InvalidToken as y,InvalidVersion as v,PermissionDenied as f,ServerRestart as T}from"../errors.js";import{EventEmitter as d}from"../event";import{IdentifierMap as P}from"../identifier";import{VERSION as R}from"../version.js";import{PacketMapper as S}from"./connection.js";import{AES as N,Decryptor as A,ENCRYPTION_AVAILABLE as C,Encryptor as D}from"./encryption.js";import{ConnectPacket as I,DisconnectType as t,PACKET_TYPES as s}from"./packet/packet-types.js";class j{constructor(e,i,n,r,a,c){this.omu=e;this.address=i;this.tokenProvider=n;this.transport=r;this.connection=a;this.aes=c;this.registerPacket(s.SERVER_META,s.CONNECT,s.DISCONNECT,s.TOKEN,s.READY,s.ENCRYPTED_PACKET),this.addPacketHandler(s.DISCONNECT,async o=>{if(o.type===t.SHUTDOWN||o.type===t.CLOSE){this.setStatus({type:"disconnected"});return}const u={[t.ANOTHER_CONNECTION]:l,[t.PERMISSION_DENIED]:f,[t.APP_REMOVED]:m,[t.INVALID_TOKEN]:y,[t.INVALID_ORIGIN]:E,[t.INVALID_VERSION]:v,[t.INTERNAL_ERROR]:k,[t.INVALID_PACKET]:h,[t.INVALID_PACKET_TYPE]:h,[t.INVALID_PACKET_DATA]:h,[t.SERVER_RESTART]:T,[t.CLOSE]:void 0,[t.SHUTDOWN]:void 0}[o.type];u&&(this.reason=new u(o.message??""))}),this.addPacketHandler(s.READY,()=>{if(this.status.type==="ready")throw new Error("Received READY packet when already ready");this.setStatus({type:"ready"}),this.attempt=0})}status={type:"disconnected"};event={connected:new d,disconnected:new d,packet:new d,status:new d};tasks=[];packetMapper=new S;packetHandlers=new P;listenTask=void 0;reason=void 0;attempt=0;setConnection(e){if(this.status.type!=="disconnected")throw new Error("Cannot change connection while connected");this.connection=e}registerPacket(...e){this.packetMapper.register(...e);for(const i of e)this.packetHandlers.set(i.id,{type:i,event:new d})}addPacketHandler(e,i){const n=this.packetHandlers.get(e.id);if(!n)throw new Error(`Packet type ${e.id.key()} not registered`);n.event.listen(i)}async scheduleReconnect(e){const i=Math.min(3e4,2e3*(Math.pow(1.5,e)-1)+2e3),n=new Date;let r=!1;const a={type:"reconnecting",attempt:e,timeout:i,date:n,cancel:()=>{r=!0}};if(await this.setStatus(a),r)return!1;const c=a.timeout-(new Date().getTime()-n.getTime());return await new Promise(o=>setTimeout(o,c)),!0}async connect(e=!0){if(!this.isState("disconnected"))throw new Error(`Cannot connect while ${this.status.type}`);if(this.listenTask)throw new Error("Cannot connect while already connecting");for(this.attempt=0;this.omu.running;){this.attempt++;try{this.aes=void 0,this.connection=await this.transport.connect(),await this.setStatus({type:"connecting"});const n=await this.connection.receive(this.packetMapper);if(!n)throw new Error("Connection closed before receiving server meta");if(!s.SERVER_META.match(n))throw new Error("First packet received was not server meta");const{data:r}=n;this.address.hash=r.hash;let a=await this.tokenProvider.get(this.address,this.omu.app);if(!a)throw new y(`No token available for app ${this.omu.app.id.key()} at ${this.address.host}:${this.address.port}:${this.address.hash}`);let c;if(this.omu.app.type==="remote"&&C&&r.encryption){const o=await A.new(),p=await D.new(r.encryption.rsa);a&&(a=await p.encryptString(a)),this.aes=await N.new(),c={kind:"v1",rsa:await o.toRequest(),aes:await this.aes.serialize(p)}}this.connection.send({type:s.CONNECT,data:new I({app:this.omu.app,protocol:{version:R},encryption:c,token:a})},this.packetMapper),this.listenTask=this.listen(),await this.setStatus({type:"connected"}),await this.event.connected.emit(),this.dispatchTasks().then(()=>{this.send({type:s.READY,data:null})}),await this.listenTask}catch(n){if(n instanceof w&&(this.reason=n),!e)throw n}finally{this.event.disconnected.emit(this.reason),this.status.type!=="disconnected"&&this.status.type!=="reconnecting"&&this.setStatus({type:"disconnected",attempt:this.attempt,reason:this.reason}),this.connection?.close(),this.connection=void 0,this.listenTask=void 0}if(this.reason&&![t.SHUTDOWN,t.SERVER_RESTART].includes(this.reason.type)||(this.reason=void 0,!e)||!await this.scheduleReconnect(this.attempt))break}await this.setStatus({type:"disconnected",reason:this.reason}),this.connection?.close(),this.connection=void 0}isState(e){return this.status.type===e}async send(e){if(!this.connection)throw new Error("No connection established");if(this.aes){const i=this.packetMapper.serialize(e);e=await this.aes.encrypt(i)}this.connection.send(e,this.packetMapper)}async listen(){for(;this.connection;){const e=await this.connection.receive(this.packetMapper);if(!e)break;await this.dispatchPacket(e)}}async dispatchPacket(e){if(s.ENCRYPTED_PACKET.match(e)){if(!this.aes)throw new Error("Received encrypted packet before encryption was established");const n=await this.aes.decrypt(e);e=this.packetMapper.deserialize(n)}await this.event.packet.emit(e);const i=this.packetHandlers.get(e.type.id);i&&await i.event.emit(e.data)}addTask(e){if(this.omu.running)throw new Error("Cannot add task after client is ready");this.tasks.push(e)}removeTask(e){this.tasks.splice(this.tasks.indexOf(e),1)}async dispatchTasks(){for(const e of this.tasks)await e()}async setStatus(e){if(this.status===e)throw new Error(`Cannot set status to ${e} when already ${e}`);this.status=e,await this.event.status.emit(e)}close(){this.setStatus({type:"disconnected"}),this.attempt=0}}export{j as Network};
2
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/network/network.ts"],
4
+ "sourcesContent": ["import type { Address } from '../address.js';\nimport {\n AnotherConnection, AppRemoved, DisconnectReason, InternalError,\n InvalidOrigin,\n InvalidPacket,\n InvalidToken,\n InvalidVersion,\n PermissionDenied,\n ServerRestart,\n} from '../errors.js';\nimport { EventEmitter } from '../event';\nimport { IdentifierMap } from '../identifier';\nimport { Omu } from '../omu.js';\nimport type { SessioTokenProvider } from '../token.js';\nimport { VERSION } from '../version.js';\n\nimport type { Connection, Transport } from './connection.js';\nimport { PacketMapper } from './connection.js';\nimport { AES, Decryptor, ENCRYPTION_AVAILABLE, EncryptionResponse, Encryptor } from './encryption.js';\nimport { ConnectPacket, DisconnectType, PACKET_TYPES } from './packet/packet-types.js';\nimport type { Packet, PacketType } from './packet/packet.js';\n\ntype PacketHandler<T> = {\n readonly type: PacketType<T>;\n event: EventEmitter<[T]>;\n};\n\ntype StatusType<T> = {\n type: T;\n};\n\nexport type NetworkStatus = StatusType<'connecting'> | StatusType<'connected'> | StatusType<'ready'> | {\n type: 'disconnected';\n attempt?: number;\n reason?: DisconnectReason;\n} | {\n type: 'reconnecting';\n attempt: number;\n timeout: number;\n date: Date;\n cancel: () => void;\n};\n\nexport class Network {\n public status: NetworkStatus = { type: 'disconnected' };\n public readonly event: { connected: EventEmitter<[]>; disconnected: EventEmitter<[DisconnectReason | undefined]>; packet: EventEmitter<[Packet<unknown>]>; status: EventEmitter<[NetworkStatus]> } = {\n connected: new EventEmitter(),\n disconnected: new EventEmitter(),\n packet: new EventEmitter(),\n status: new EventEmitter(),\n };\n private readonly tasks: Array<() => Promise<void> | void> = [];\n private readonly packetMapper = new PacketMapper();\n private readonly packetHandlers = new IdentifierMap<PacketHandler<unknown>>();\n private listenTask: Promise<void> | undefined = undefined;\n public reason: DisconnectReason | undefined = undefined;\n private attempt = 0;\n\n constructor(\n private readonly omu: Omu,\n public address: Address,\n private readonly tokenProvider: SessioTokenProvider,\n private transport: Transport,\n private connection?: Connection | undefined,\n private aes?: AES | undefined,\n ) {\n this.registerPacket(\n PACKET_TYPES.SERVER_META,\n PACKET_TYPES.CONNECT,\n PACKET_TYPES.DISCONNECT,\n PACKET_TYPES.TOKEN,\n PACKET_TYPES.READY,\n PACKET_TYPES.ENCRYPTED_PACKET,\n );\n this.addPacketHandler(PACKET_TYPES.DISCONNECT, async (reason) => {\n if (reason.type === DisconnectType.SHUTDOWN\n || reason.type === DisconnectType.CLOSE) {\n this.setStatus({ type: 'disconnected' });\n return;\n }\n const ERROR_MAP = {\n [DisconnectType.ANOTHER_CONNECTION]: AnotherConnection,\n [DisconnectType.PERMISSION_DENIED]: PermissionDenied,\n [DisconnectType.APP_REMOVED]: AppRemoved,\n [DisconnectType.INVALID_TOKEN]: InvalidToken,\n [DisconnectType.INVALID_ORIGIN]: InvalidOrigin,\n [DisconnectType.INVALID_VERSION]: InvalidVersion,\n [DisconnectType.INTERNAL_ERROR]: InternalError,\n [DisconnectType.INVALID_PACKET]: InvalidPacket,\n [DisconnectType.INVALID_PACKET_TYPE]: InvalidPacket,\n [DisconnectType.INVALID_PACKET_DATA]: InvalidPacket,\n [DisconnectType.SERVER_RESTART]: ServerRestart,\n [DisconnectType.CLOSE]: undefined,\n [DisconnectType.SHUTDOWN]: undefined,\n };\n const error = ERROR_MAP[reason.type];\n if (error) {\n this.reason = new error(reason.message ?? '');\n }\n });\n this.addPacketHandler(PACKET_TYPES.READY, () => {\n if (this.status.type === 'ready') {\n throw new Error('Received READY packet when already ready');\n }\n this.setStatus({ type: 'ready' });\n this.attempt = 0;\n });\n }\n\n public setConnection(connection: Connection): void {\n if (this.status.type !== 'disconnected') {\n throw new Error('Cannot change connection while connected');\n }\n this.connection = connection;\n }\n\n public registerPacket(...packetTypes: PacketType<unknown>[]): void {\n this.packetMapper.register(...packetTypes);\n for (const type of packetTypes) {\n this.packetHandlers.set(type.id, {\n type,\n event: new EventEmitter(),\n });\n }\n }\n\n public addPacketHandler<T>(type: PacketType<T>, handler: (packet: T) => void): void {\n const listeners = this.packetHandlers.get(type.id) as PacketHandler<unknown> | undefined;\n if (!listeners) {\n throw new Error(`Packet type ${type.id.key()} not registered`);\n }\n listeners.event.listen(handler as (packet: unknown) => void);\n }\n\n private async scheduleReconnect(attempt: number): Promise<boolean> {\n const timeout = Math.min(30000, 2000 * (Math.pow(1.5, attempt) - 1) + 2000);\n const date = new Date();\n let cancelled = false;\n const status: Extract<NetworkStatus, { type: 'reconnecting' }> = {\n type: 'reconnecting',\n attempt,\n timeout,\n date,\n cancel: () => {cancelled = true;},\n };\n await this.setStatus(status);\n if (cancelled) {\n return false;\n }\n const remaining = status.timeout - (new Date().getTime() - date.getTime());\n await new Promise((resolve) => setTimeout(resolve, remaining));\n return true;\n }\n\n public async connect(reconnect = true): Promise<void> {\n if (!this.isState('disconnected')) {\n throw new Error(`Cannot connect while ${this.status.type}`);\n }\n if (this.listenTask) {\n throw new Error('Cannot connect while already connecting');\n }\n\n this.attempt = 0;\n while (this.omu.running) {\n this.attempt++;\n try {\n this.aes = undefined;\n this.connection = await this.transport.connect();\n await this.setStatus({ type: 'connecting' });\n const metaReceived = await this.connection.receive(this.packetMapper);\n if (!metaReceived) {\n throw new Error('Connection closed before receiving server meta');\n }\n if (!PACKET_TYPES.SERVER_META.match(metaReceived)) {\n throw new Error('First packet received was not server meta');\n }\n const { data: meta } = metaReceived;\n this.address.hash = meta.hash;\n let token = await this.tokenProvider.get(this.address, this.omu.app);\n if (!token) {\n throw new InvalidToken(`No token available for app ${this.omu.app.id.key()} at ${this.address.host}:${this.address.port}:${this.address.hash}`);\n }\n let encryptionResp: EncryptionResponse | undefined = undefined;\n if (this.omu.app.type === 'remote' && ENCRYPTION_AVAILABLE && meta.encryption) {\n const decryptor = await Decryptor.new();\n const encryptor = await Encryptor.new(meta.encryption.rsa);\n if (token) {\n token = await encryptor.encryptString(token);\n }\n this.aes = await AES.new();\n encryptionResp = {\n kind: 'v1',\n rsa: await decryptor.toRequest(),\n aes: await this.aes.serialize(encryptor),\n };\n }\n this.connection.send({\n type: PACKET_TYPES.CONNECT,\n data: new ConnectPacket({\n app: this.omu.app,\n protocol: { version: VERSION },\n encryption: encryptionResp,\n token,\n }),\n }, this.packetMapper);\n this.listenTask = this.listen();\n await this.setStatus({ type: 'connected' });\n await this.event.connected.emit();\n this.dispatchTasks().then(() => {\n this.send({\n type: PACKET_TYPES.READY,\n data: null,\n });\n });\n await this.listenTask;\n } catch (error) {\n if (error instanceof DisconnectReason) {\n this.reason = error;\n }\n if (!reconnect) {\n throw error;\n }\n } finally {\n this.event.disconnected.emit(this.reason);\n if (this.status.type !== 'disconnected' && this.status.type !== 'reconnecting') {\n this.setStatus({ type: 'disconnected', attempt: this.attempt, reason: this.reason });\n }\n this.connection?.close();\n this.connection = undefined;\n this.listenTask = undefined;\n }\n if (this.reason && ![\n DisconnectType.SHUTDOWN,\n DisconnectType.SERVER_RESTART,\n ].includes(this.reason.type)) {\n break;\n }\n this.reason = undefined;\n if (!reconnect) {\n break;\n }\n const shouldReconnect = await this.scheduleReconnect(this.attempt);\n if (!shouldReconnect) {\n break;\n }\n }\n await this.setStatus({ type: 'disconnected', reason: this.reason });\n this.connection?.close();\n this.connection = undefined;\n }\n\n private isState(state: NetworkStatus['type']): boolean {\n return this.status.type === state;\n }\n\n public async send(packet: Packet): Promise<void> {\n if (!this.connection) {\n throw new Error('No connection established');\n }\n if (this.aes) {\n const serialized = this.packetMapper.serialize(packet);\n packet = await this.aes.encrypt(serialized);\n }\n this.connection.send(packet, this.packetMapper);\n }\n\n private async listen(): Promise<void> {\n while (this.connection) {\n const packet = await this.connection.receive(this.packetMapper);\n if (!packet) {\n break;\n }\n await this.dispatchPacket(packet);\n }\n }\n\n private async dispatchPacket(packet: Packet): Promise<void> {\n if (PACKET_TYPES.ENCRYPTED_PACKET.match(packet)) {\n if (!this.aes) {\n throw new Error('Received encrypted packet before encryption was established');\n }\n const decrypted = await this.aes.decrypt(packet);\n packet = this.packetMapper.deserialize(decrypted);\n }\n await this.event.packet.emit(packet);\n const packetHandler = this.packetHandlers.get(packet.type.id);\n if (!packetHandler) {\n return;\n }\n await packetHandler.event.emit(packet.data);\n }\n\n public addTask(task: () => Promise<void> | void): void {\n if (this.omu.running) {\n throw new Error('Cannot add task after client is ready');\n }\n this.tasks.push(task);\n }\n\n public removeTask(task: () => Promise<void> | void): void {\n this.tasks.splice(this.tasks.indexOf(task), 1);\n }\n\n private async dispatchTasks(): Promise<void> {\n for (const task of this.tasks) {\n await task();\n }\n }\n\n private async setStatus(status: NetworkStatus): Promise<void> {\n if (this.status === status) {\n throw new Error(`Cannot set status to ${status} when already ${status}`);\n }\n this.status = status;\n await this.event.status.emit(status);\n }\n\n public close(): void {\n this.setStatus({ type: 'disconnected' });\n this.attempt = 0;\n }\n}\n"],
5
+ "mappings": "AACA,OACI,qBAAAA,EAAmB,cAAAC,EAAY,oBAAAC,EAAkB,iBAAAC,EACjD,iBAAAC,EACA,iBAAAC,EACA,gBAAAC,EACA,kBAAAC,EACA,oBAAAC,EACA,iBAAAC,MACG,eACP,OAAS,gBAAAC,MAAoB,WAC7B,OAAS,iBAAAC,MAAqB,gBAG9B,OAAS,WAAAC,MAAe,gBAGxB,OAAS,gBAAAC,MAAoB,kBAC7B,OAAS,OAAAC,EAAK,aAAAC,EAAW,wBAAAC,EAA0C,aAAAC,MAAiB,kBACpF,OAAS,iBAAAC,EAAe,kBAAAC,EAAgB,gBAAAC,MAAoB,2BAwBrD,MAAMC,CAAQ,CAejB,YACqBC,EACVC,EACUC,EACTC,EACAC,EACAC,EACV,CANmB,SAAAL,EACV,aAAAC,EACU,mBAAAC,EACT,eAAAC,EACA,gBAAAC,EACA,SAAAC,EAER,KAAK,eACDP,EAAa,YACbA,EAAa,QACbA,EAAa,WACbA,EAAa,MACbA,EAAa,MACbA,EAAa,gBACjB,EACA,KAAK,iBAAiBA,EAAa,WAAY,MAAOQ,GAAW,CAC7D,GAAIA,EAAO,OAAST,EAAe,UAC5BS,EAAO,OAAST,EAAe,MAAO,CACzC,KAAK,UAAU,CAAE,KAAM,cAAe,CAAC,EACvC,MACJ,CAgBA,MAAMU,EAfY,CACd,CAACV,EAAe,kBAAkB,EAAGnB,EACrC,CAACmB,EAAe,iBAAiB,EAAGX,EACpC,CAACW,EAAe,WAAW,EAAGlB,EAC9B,CAACkB,EAAe,aAAa,EAAGb,EAChC,CAACa,EAAe,cAAc,EAAGf,EACjC,CAACe,EAAe,eAAe,EAAGZ,EAClC,CAACY,EAAe,cAAc,EAAGhB,EACjC,CAACgB,EAAe,cAAc,EAAGd,EACjC,CAACc,EAAe,mBAAmB,EAAGd,EACtC,CAACc,EAAe,mBAAmB,EAAGd,EACtC,CAACc,EAAe,cAAc,EAAGV,EACjC,CAACU,EAAe,KAAK,EAAG,OACxB,CAACA,EAAe,QAAQ,EAAG,MAC/B,EACwBS,EAAO,IAAI,EAC/BC,IACA,KAAK,OAAS,IAAIA,EAAMD,EAAO,SAAW,EAAE,EAEpD,CAAC,EACD,KAAK,iBAAiBR,EAAa,MAAO,IAAM,CAC5C,GAAI,KAAK,OAAO,OAAS,QACrB,MAAM,IAAI,MAAM,0CAA0C,EAE9D,KAAK,UAAU,CAAE,KAAM,OAAQ,CAAC,EAChC,KAAK,QAAU,CACnB,CAAC,CACL,CA/DO,OAAwB,CAAE,KAAM,cAAe,EACtC,MAAqL,CACjM,UAAW,IAAIV,EACf,aAAc,IAAIA,EAClB,OAAQ,IAAIA,EACZ,OAAQ,IAAIA,CAChB,EACiB,MAA2C,CAAC,EAC5C,aAAe,IAAIG,EACnB,eAAiB,IAAIF,EAC9B,WAAwC,OACzC,OAAuC,OACtC,QAAU,EAqDX,cAAce,EAA8B,CAC/C,GAAI,KAAK,OAAO,OAAS,eACrB,MAAM,IAAI,MAAM,0CAA0C,EAE9D,KAAK,WAAaA,CACtB,CAEO,kBAAkBI,EAA0C,CAC/D,KAAK,aAAa,SAAS,GAAGA,CAAW,EACzC,UAAWC,KAAQD,EACf,KAAK,eAAe,IAAIC,EAAK,GAAI,CAC7B,KAAAA,EACA,MAAO,IAAIrB,CACf,CAAC,CAET,CAEO,iBAAoBqB,EAAqBC,EAAoC,CAChF,MAAMC,EAAY,KAAK,eAAe,IAAIF,EAAK,EAAE,EACjD,GAAI,CAACE,EACD,MAAM,IAAI,MAAM,eAAeF,EAAK,GAAG,IAAI,CAAC,iBAAiB,EAEjEE,EAAU,MAAM,OAAOD,CAAoC,CAC/D,CAEA,MAAc,kBAAkBE,EAAmC,CAC/D,MAAMC,EAAU,KAAK,IAAI,IAAO,KAAQ,KAAK,IAAI,IAAKD,CAAO,EAAI,GAAK,GAAI,EACpEE,EAAO,IAAI,KACjB,IAAIC,EAAY,GAChB,MAAMC,EAA2D,CAC7D,KAAM,eACN,QAAAJ,EACA,QAAAC,EACA,KAAAC,EACA,OAAQ,IAAM,CAACC,EAAY,EAAK,CACpC,EAEA,GADA,MAAM,KAAK,UAAUC,CAAM,EACvBD,EACA,MAAO,GAEX,MAAME,EAAYD,EAAO,SAAW,IAAI,KAAK,EAAE,QAAQ,EAAIF,EAAK,QAAQ,GACxE,aAAM,IAAI,QAASI,GAAY,WAAWA,EAASD,CAAS,CAAC,EACtD,EACX,CAEA,MAAa,QAAQE,EAAY,GAAqB,CAClD,GAAI,CAAC,KAAK,QAAQ,cAAc,EAC5B,MAAM,IAAI,MAAM,wBAAwB,KAAK,OAAO,IAAI,EAAE,EAE9D,GAAI,KAAK,WACL,MAAM,IAAI,MAAM,yCAAyC,EAI7D,IADA,KAAK,QAAU,EACR,KAAK,IAAI,SAAS,CACrB,KAAK,UACL,GAAI,CACA,KAAK,IAAM,OACX,KAAK,WAAa,MAAM,KAAK,UAAU,QAAQ,EAC/C,MAAM,KAAK,UAAU,CAAE,KAAM,YAAa,CAAC,EAC3C,MAAMC,EAAe,MAAM,KAAK,WAAW,QAAQ,KAAK,YAAY,EACpE,GAAI,CAACA,EACD,MAAM,IAAI,MAAM,gDAAgD,EAEpE,GAAI,CAACtB,EAAa,YAAY,MAAMsB,CAAY,EAC5C,MAAM,IAAI,MAAM,2CAA2C,EAE/D,KAAM,CAAE,KAAMC,CAAK,EAAID,EACvB,KAAK,QAAQ,KAAOC,EAAK,KACzB,IAAIC,EAAQ,MAAM,KAAK,cAAc,IAAI,KAAK,QAAS,KAAK,IAAI,GAAG,EACnE,GAAI,CAACA,EACD,MAAM,IAAItC,EAAa,8BAA8B,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ,IAAI,EAAE,EAElJ,IAAIuC,EACJ,GAAI,KAAK,IAAI,IAAI,OAAS,UAAY7B,GAAwB2B,EAAK,WAAY,CAC3E,MAAMG,EAAY,MAAM/B,EAAU,IAAI,EAChCgC,EAAY,MAAM9B,EAAU,IAAI0B,EAAK,WAAW,GAAG,EACrDC,IACAA,EAAQ,MAAMG,EAAU,cAAcH,CAAK,GAE/C,KAAK,IAAM,MAAM9B,EAAI,IAAI,EACzB+B,EAAiB,CACb,KAAM,KACN,IAAK,MAAMC,EAAU,UAAU,EAC/B,IAAK,MAAM,KAAK,IAAI,UAAUC,CAAS,CAC3C,CACJ,CACA,KAAK,WAAW,KAAK,CACjB,KAAM3B,EAAa,QACnB,KAAM,IAAIF,EAAc,CACpB,IAAK,KAAK,IAAI,IACd,SAAU,CAAE,QAASN,CAAQ,EAC7B,WAAYiC,EACZ,MAAAD,CACJ,CAAC,CACL,EAAG,KAAK,YAAY,EACpB,KAAK,WAAa,KAAK,OAAO,EAC9B,MAAM,KAAK,UAAU,CAAE,KAAM,WAAY,CAAC,EAC1C,MAAM,KAAK,MAAM,UAAU,KAAK,EAChC,KAAK,cAAc,EAAE,KAAK,IAAM,CAC5B,KAAK,KAAK,CACN,KAAMxB,EAAa,MACnB,KAAM,IACV,CAAC,CACL,CAAC,EACD,MAAM,KAAK,UACf,OAASS,EAAO,CAIZ,GAHIA,aAAiB3B,IACjB,KAAK,OAAS2B,GAEd,CAACY,EACD,MAAMZ,CAEd,QAAE,CACE,KAAK,MAAM,aAAa,KAAK,KAAK,MAAM,EACpC,KAAK,OAAO,OAAS,gBAAkB,KAAK,OAAO,OAAS,gBAC5D,KAAK,UAAU,CAAE,KAAM,eAAgB,QAAS,KAAK,QAAS,OAAQ,KAAK,MAAO,CAAC,EAEvF,KAAK,YAAY,MAAM,EACvB,KAAK,WAAa,OAClB,KAAK,WAAa,MACtB,CAYA,GAXI,KAAK,QAAU,CAAC,CAChBV,EAAe,SACfA,EAAe,cACnB,EAAE,SAAS,KAAK,OAAO,IAAI,IAG3B,KAAK,OAAS,OACV,CAACsB,IAID,CADoB,MAAM,KAAK,kBAAkB,KAAK,OAAO,EAE7D,KAER,CACA,MAAM,KAAK,UAAU,CAAE,KAAM,eAAgB,OAAQ,KAAK,MAAO,CAAC,EAClE,KAAK,YAAY,MAAM,EACvB,KAAK,WAAa,MACtB,CAEQ,QAAQO,EAAuC,CACnD,OAAO,KAAK,OAAO,OAASA,CAChC,CAEA,MAAa,KAAKC,EAA+B,CAC7C,GAAI,CAAC,KAAK,WACN,MAAM,IAAI,MAAM,2BAA2B,EAE/C,GAAI,KAAK,IAAK,CACV,MAAMC,EAAa,KAAK,aAAa,UAAUD,CAAM,EACrDA,EAAS,MAAM,KAAK,IAAI,QAAQC,CAAU,CAC9C,CACA,KAAK,WAAW,KAAKD,EAAQ,KAAK,YAAY,CAClD,CAEA,MAAc,QAAwB,CAClC,KAAO,KAAK,YAAY,CACpB,MAAMA,EAAS,MAAM,KAAK,WAAW,QAAQ,KAAK,YAAY,EAC9D,GAAI,CAACA,EACD,MAEJ,MAAM,KAAK,eAAeA,CAAM,CACpC,CACJ,CAEA,MAAc,eAAeA,EAA+B,CACxD,GAAI7B,EAAa,iBAAiB,MAAM6B,CAAM,EAAG,CAC7C,GAAI,CAAC,KAAK,IACN,MAAM,IAAI,MAAM,6DAA6D,EAEjF,MAAME,EAAY,MAAM,KAAK,IAAI,QAAQF,CAAM,EAC/CA,EAAS,KAAK,aAAa,YAAYE,CAAS,CACpD,CACA,MAAM,KAAK,MAAM,OAAO,KAAKF,CAAM,EACnC,MAAMG,EAAgB,KAAK,eAAe,IAAIH,EAAO,KAAK,EAAE,EACvDG,GAGL,MAAMA,EAAc,MAAM,KAAKH,EAAO,IAAI,CAC9C,CAEO,QAAQI,EAAwC,CACnD,GAAI,KAAK,IAAI,QACT,MAAM,IAAI,MAAM,uCAAuC,EAE3D,KAAK,MAAM,KAAKA,CAAI,CACxB,CAEO,WAAWA,EAAwC,CACtD,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQA,CAAI,EAAG,CAAC,CACjD,CAEA,MAAc,eAA+B,CACzC,UAAWA,KAAQ,KAAK,MACpB,MAAMA,EAAK,CAEnB,CAEA,MAAc,UAAUf,EAAsC,CAC1D,GAAI,KAAK,SAAWA,EAChB,MAAM,IAAI,MAAM,wBAAwBA,CAAM,iBAAiBA,CAAM,EAAE,EAE3E,KAAK,OAASA,EACd,MAAM,KAAK,MAAM,OAAO,KAAKA,CAAM,CACvC,CAEO,OAAc,CACjB,KAAK,UAAU,CAAE,KAAM,cAAe,CAAC,EACvC,KAAK,QAAU,CACnB,CACJ",
6
+ "names": ["AnotherConnection", "AppRemoved", "DisconnectReason", "InternalError", "InvalidOrigin", "InvalidPacket", "InvalidToken", "InvalidVersion", "PermissionDenied", "ServerRestart", "EventEmitter", "IdentifierMap", "VERSION", "PacketMapper", "AES", "Decryptor", "ENCRYPTION_AVAILABLE", "Encryptor", "ConnectPacket", "DisconnectType", "PACKET_TYPES", "Network", "omu", "address", "tokenProvider", "transport", "connection", "aes", "reason", "error", "packetTypes", "type", "handler", "listeners", "attempt", "timeout", "date", "cancelled", "status", "remaining", "resolve", "reconnect", "metaReceived", "meta", "token", "encryptionResp", "decryptor", "encryptor", "state", "packet", "serialized", "decrypted", "packetHandler", "task"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{DisconnectPacket as c,DisconnectType as a}from"./packet-types.js";import{PacketType as p}from"./packet.js";export{c as DisconnectPacket,a as DisconnectType,p as PacketType};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/network/packet/index.ts"],
4
+ "sourcesContent": ["export { DisconnectPacket, DisconnectType } from './packet-types.js';\nexport { PacketType, type Packet, type PacketData } from './packet.js';\n\n"],
5
+ "mappings": "AAAA,OAAS,oBAAAA,EAAkB,kBAAAC,MAAsB,oBACjD,OAAS,cAAAC,MAAgD",
6
+ "names": ["DisconnectPacket", "DisconnectType", "PacketType"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{App as s}from"../../app.js";import{Identifier as c}from"../../identifier";import{Serializer as p}from"../../serialize/serializer.js";import{PacketType as t}from"./packet.js";const o=new c("core","packet");class i{protocol;app;token;encryption;constructor(e){this.protocol=e.protocol,this.app=e.app,this.token=e.token,this.encryption=e.encryption??null}static deserialize(e){return new i({protocol:e.protocol,app:s.deserialize(e.app),encryption:e.encryption,token:e.token})}static serialize(e){return{protocol:e.protocol,app:s.serialize(e.app),encryption:e.encryption,token:e.token}}}var a=(n=>(n.INVALID_TOKEN="invalid_token",n.INVALID_ORIGIN="invalid_origin",n.INVALID_VERSION="invalid_version",n.INVALID_PACKET_TYPE="invalid_packet_type",n.INVALID_PACKET_DATA="invalid_packet_data",n.INVALID_PACKET="invalid_packet",n.INTERNAL_ERROR="internal_error",n.ANOTHER_CONNECTION="another_connection",n.PERMISSION_DENIED="permission_denied",n.APP_REMOVED="app_removed",n.SERVER_RESTART="server_restart",n.SHUTDOWN="shutdown",n.CLOSE="close",n))(a||{});class r{type;message;constructor(e){this.type=e.type,this.message=e.message??null}static serialize(e){return e.toJson()}static deserialize(e){return r.fromJson(e)}static fromJson(e){return new r({type:e.type,message:e.message})}toJson(){return{type:this.type,message:this.message}}}const y={SERVER_META:t.createJson(o,{name:"server_meta"}),CONNECT:t.createJson(o,{name:"connect",serializer:i}),DISCONNECT:t.createJson(o,{name:"disconnect",serializer:r}),TOKEN:t.createJson(o,{name:"token"}),READY:t.createJson(o,{name:"ready"}),ENCRYPTED_PACKET:t.createSerialized(o,{name:"e",serializer:p.noop()})};export{i as ConnectPacket,r as DisconnectPacket,a as DisconnectType,y as PACKET_TYPES};
2
+ //# sourceMappingURL=packet-types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/network/packet/packet-types.ts"],
4
+ "sourcesContent": ["import type { AppJson } from '../../app.js';\nimport { App } from '../../app.js';\nimport { Identifier } from '../../identifier';\nimport { Serializer } from '../../serialize/serializer.js';\nimport { PacketType } from './packet.js';\n\nconst IDENTIFIER = new Identifier('core', 'packet');\n\ntype ProtocolInfo = {\n version: string;\n};\n\ntype RSANumbers = {\n e: string;\n n: string;\n};\n\ntype EncryptionRequest = {\n kind: 'v1';\n rsa: RSANumbers;\n};\n\ntype EncryptionResponse = {\n kind: 'v1';\n rsa: RSANumbers;\n aes: string;\n};\n\nexport type ServerMeta = {\n protocol: ProtocolInfo;\n encryption: EncryptionRequest | null;\n hash: string | undefined;\n};\n\ntype ConnectPacketJson = {\n protocol: ProtocolInfo;\n app: AppJson;\n token: string;\n encryption: EncryptionResponse | null;\n};\n\nexport class ConnectPacket {\n public readonly protocol: ProtocolInfo;\n public readonly app: App;\n public readonly token: string;\n public readonly encryption: EncryptionResponse | null;\n\n constructor(options: {\n protocol: ProtocolInfo;\n app: App;\n token: string;\n encryption?: EncryptionResponse | null;\n }) {\n this.protocol = options.protocol;\n this.app = options.app;\n this.token = options.token;\n this.encryption = options.encryption ?? null;\n }\n\n public static deserialize(data: ConnectPacketJson): ConnectPacket {\n return new ConnectPacket({\n protocol: data.protocol,\n app: App.deserialize(data.app),\n encryption: data.encryption,\n token: data.token,\n });\n }\n\n public static serialize(data: ConnectPacket): ConnectPacketJson {\n return {\n protocol: data.protocol,\n app: App.serialize(data.app),\n encryption: data.encryption,\n token: data.token,\n };\n }\n}\n\nexport enum DisconnectType {\n INVALID_TOKEN = 'invalid_token',\n INVALID_ORIGIN = 'invalid_origin',\n INVALID_VERSION = 'invalid_version',\n INVALID_PACKET_TYPE = 'invalid_packet_type',\n INVALID_PACKET_DATA = 'invalid_packet_data',\n INVALID_PACKET = 'invalid_packet',\n INTERNAL_ERROR = 'internal_error',\n ANOTHER_CONNECTION = 'another_connection',\n PERMISSION_DENIED = 'permission_denied',\n APP_REMOVED = 'app_removed',\n SERVER_RESTART = 'server_restart',\n SHUTDOWN = 'shutdown',\n CLOSE = 'close',\n}\n\ntype DisconnectPacketJson = {\n type: DisconnectType;\n message: string | null;\n};\n\nexport class DisconnectPacket {\n public readonly type: DisconnectType;\n public readonly message: string | null;\n\n constructor(options: {\n type: DisconnectType;\n message?: string | null;\n }) {\n this.type = options.type;\n this.message = options.message ?? null;\n }\n\n public static serialize(data: DisconnectPacket): DisconnectPacketJson {\n return data.toJson();\n }\n\n public static deserialize(data: DisconnectPacketJson): DisconnectPacket {\n return DisconnectPacket.fromJson(data);\n }\n\n static fromJson(data: DisconnectPacketJson): DisconnectPacket {\n return new DisconnectPacket({\n type: data.type,\n message: data.message,\n });\n }\n\n toJson(): DisconnectPacketJson {\n return {\n type: this.type,\n message: this.message,\n };\n }\n}\n\nexport const PACKET_TYPES: {\n SERVER_META: PacketType<ServerMeta>;\n CONNECT: PacketType<ConnectPacket>;\n DISCONNECT: PacketType<DisconnectPacket>;\n TOKEN: PacketType<string>;\n READY: PacketType<undefined>;\n ENCRYPTED_PACKET: PacketType<Uint8Array>;\n} = {\n SERVER_META: PacketType.createJson<ServerMeta>(IDENTIFIER, {\n name: 'server_meta',\n }),\n CONNECT: PacketType.createJson<ConnectPacket>(IDENTIFIER, {\n name: 'connect',\n serializer: ConnectPacket,\n }),\n DISCONNECT: PacketType.createJson<DisconnectPacket>(IDENTIFIER, {\n name: 'disconnect',\n serializer: DisconnectPacket,\n }),\n TOKEN: PacketType.createJson<string>(IDENTIFIER, {\n name: 'token',\n }),\n READY: PacketType.createJson<undefined>(IDENTIFIER, {\n name: 'ready',\n }),\n ENCRYPTED_PACKET: PacketType.createSerialized<Uint8Array>(IDENTIFIER, {\n name: 'e',\n serializer: Serializer.noop(),\n }),\n};\n"],
5
+ "mappings": "AACA,OAAS,OAAAA,MAAW,eACpB,OAAS,cAAAC,MAAkB,mBAC3B,OAAS,cAAAC,MAAkB,gCAC3B,OAAS,cAAAC,MAAkB,cAE3B,MAAMC,EAAa,IAAIH,EAAW,OAAQ,QAAQ,EAmC3C,MAAMI,CAAc,CACP,SACA,IACA,MACA,WAEhB,YAAYC,EAKT,CACC,KAAK,SAAWA,EAAQ,SACxB,KAAK,IAAMA,EAAQ,IACnB,KAAK,MAAQA,EAAQ,MACrB,KAAK,WAAaA,EAAQ,YAAc,IAC5C,CAEA,OAAc,YAAYC,EAAwC,CAC9D,OAAO,IAAIF,EAAc,CACrB,SAAUE,EAAK,SACf,IAAKP,EAAI,YAAYO,EAAK,GAAG,EAC7B,WAAYA,EAAK,WACjB,MAAOA,EAAK,KAChB,CAAC,CACL,CAEA,OAAc,UAAUA,EAAwC,CAC5D,MAAO,CACH,SAAUA,EAAK,SACf,IAAKP,EAAI,UAAUO,EAAK,GAAG,EAC3B,WAAYA,EAAK,WACjB,MAAOA,EAAK,KAChB,CACJ,CACJ,CAEO,IAAKC,OACRA,EAAA,cAAgB,gBAChBA,EAAA,eAAiB,iBACjBA,EAAA,gBAAkB,kBAClBA,EAAA,oBAAsB,sBACtBA,EAAA,oBAAsB,sBACtBA,EAAA,eAAiB,iBACjBA,EAAA,eAAiB,iBACjBA,EAAA,mBAAqB,qBACrBA,EAAA,kBAAoB,oBACpBA,EAAA,YAAc,cACdA,EAAA,eAAiB,iBACjBA,EAAA,SAAW,WACXA,EAAA,MAAQ,QAbAA,OAAA,IAqBL,MAAMC,CAAiB,CACV,KACA,QAEhB,YAAYH,EAGT,CACC,KAAK,KAAOA,EAAQ,KACpB,KAAK,QAAUA,EAAQ,SAAW,IACtC,CAEA,OAAc,UAAUC,EAA8C,CAClE,OAAOA,EAAK,OAAO,CACvB,CAEA,OAAc,YAAYA,EAA8C,CACpE,OAAOE,EAAiB,SAASF,CAAI,CACzC,CAEA,OAAO,SAASA,EAA8C,CAC1D,OAAO,IAAIE,EAAiB,CACxB,KAAMF,EAAK,KACX,QAASA,EAAK,OAClB,CAAC,CACL,CAEA,QAA+B,CAC3B,MAAO,CACH,KAAM,KAAK,KACX,QAAS,KAAK,OAClB,CACJ,CACJ,CAEO,MAAMG,EAOT,CACA,YAAaP,EAAW,WAAuBC,EAAY,CACvD,KAAM,aACV,CAAC,EACD,QAASD,EAAW,WAA0BC,EAAY,CACtD,KAAM,UACN,WAAYC,CAChB,CAAC,EACD,WAAYF,EAAW,WAA6BC,EAAY,CAC5D,KAAM,aACN,WAAYK,CAChB,CAAC,EACD,MAAON,EAAW,WAAmBC,EAAY,CAC7C,KAAM,OACV,CAAC,EACD,MAAOD,EAAW,WAAsBC,EAAY,CAChD,KAAM,OACV,CAAC,EACD,iBAAkBD,EAAW,iBAA6BC,EAAY,CAClE,KAAM,IACN,WAAYF,EAAW,KAAK,CAChC,CAAC,CACL",
6
+ "names": ["App", "Identifier", "Serializer", "PacketType", "IDENTIFIER", "ConnectPacket", "options", "data", "DisconnectType", "DisconnectPacket", "PACKET_TYPES"]
7
+ }
@@ -14,11 +14,11 @@ export declare class PacketType<T> {
14
14
  constructor(id: Identifier, serializer: Serializable<T, Uint8Array>);
15
15
  new(data: T): Packet<T>;
16
16
  match(packet: Packet): packet is Packet<T>;
17
- static createJson<T, D extends JsonType = JsonType>(identifier: Identifier, { name, serializer, }: {
17
+ static createJson<T, D extends JsonType = JsonType>(identifier: Identifier, { name, serializer }: {
18
18
  name: string;
19
19
  serializer?: Serializable<T, D>;
20
20
  }): PacketType<T>;
21
- static createSerialized<T>(identifier: Identifier, { name, serializer, }: {
21
+ static createSerialized<T>(identifier: Identifier, { name, serializer }: {
22
22
  name: string;
23
23
  serializer: Serializable<T, Uint8Array>;
24
24
  }): PacketType<T>;
@@ -0,0 +1,2 @@
1
+ import{Serializer as i}from"../../serialize";class a{constructor(e,r){this.id=e;this.serializer=r}new(e){return{type:this,data:e}}match(e){return e.type===this}static createJson(e,{name:r,serializer:t}){return new a(e.join(r),i.pipe(t??i.noop(),i.json()))}static createSerialized(e,{name:r,serializer:t}){return new a(e.join(r),t)}}export{a as PacketType};
2
+ //# sourceMappingURL=packet.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/network/packet/packet.ts"],
4
+ "sourcesContent": ["import type { Identifier } from '../../identifier';\nimport { JsonType, type Serializable, Serializer } from '../../serialize';\n\nexport type PacketData = {\n readonly type: string;\n readonly data: Uint8Array;\n};\n\nexport type Packet<T = unknown> = {\n readonly type: PacketType<T>;\n readonly data: T;\n};\n\nexport class PacketType<T> {\n constructor(\n public readonly id: Identifier,\n public readonly serializer: Serializable<T, Uint8Array>,\n ) { }\n\n public new(data: T): Packet<T> {\n return {\n type: this,\n data,\n };\n }\n public match(packet: Packet): packet is Packet<T> {\n return packet.type === this;\n }\n\n static createJson<T, D extends JsonType = JsonType>(identifier: Identifier, {\n name,\n serializer,\n }: {\n name: string;\n serializer?: Serializable<T, D>;\n }): PacketType<T> {\n return new PacketType<T>(\n identifier.join(name),\n Serializer.pipe<T, D, Uint8Array>(serializer ?? Serializer.noop(), Serializer.json()),\n );\n }\n\n static createSerialized<T>(identifier: Identifier, {\n name,\n serializer,\n }: {\n name: string;\n serializer: Serializable<T, Uint8Array>;\n }): PacketType<T> {\n return new PacketType(\n identifier.join(name),\n serializer,\n );\n }\n}\n"],
5
+ "mappings": "AACA,OAAsC,cAAAA,MAAkB,kBAYjD,MAAMC,CAAc,CACvB,YACoBC,EACAC,EAClB,CAFkB,QAAAD,EACA,gBAAAC,CAChB,CAEG,IAAIC,EAAoB,CAC3B,MAAO,CACH,KAAM,KACN,KAAAA,CACJ,CACJ,CACO,MAAMC,EAAqC,CAC9C,OAAOA,EAAO,OAAS,IAC3B,CAEA,OAAO,WAA6CC,EAAwB,CACxE,KAAAC,EACA,WAAAJ,CACJ,EAGkB,CACd,OAAO,IAAIF,EACPK,EAAW,KAAKC,CAAI,EACpBP,EAAW,KAAuBG,GAAcH,EAAW,KAAK,EAAGA,EAAW,KAAK,CAAC,CACxF,CACJ,CAEA,OAAO,iBAAoBM,EAAwB,CAC/C,KAAAC,EACA,WAAAJ,CACJ,EAGkB,CACd,OAAO,IAAIF,EACPK,EAAW,KAAKC,CAAI,EACpBJ,CACJ,CACJ,CACJ",
6
+ "names": ["Serializer", "PacketType", "id", "serializer", "data", "packet", "identifier", "name"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{ByteReader as o,ByteWriter as n}from"../serialize";class d{constructor(e){this.address=e}get wsEndpoint(){const e=this.address.secure?"wss":"ws",{host:t,port:i}=this.address;return`${e}://${t}:${i}/ws`}connect(){const e=new WebSocket(this.wsEndpoint);return s.fromSocket(e)}}class s{constructor(e){this.socket=e}packetQueue=[];receiveWaiter=null;readingPromise=null;beingClosed=!1;static fromSocket(e){const t=new s(e);return new Promise((i,r)=>{e.onerror=r,e.onclose=()=>{t.beingClosed=!0,t.receiveWaiter&&(t.receiveWaiter(),t.receiveWaiter=null)},e.onmessage=a=>{t.readingPromise=t.onMessage(a).finally(()=>{t.readingPromise=null})},e.onopen=()=>{i(t)}})}async onMessage(e){if(typeof e.data=="string")throw new Error("Received string data");const t=await o.fromBlob(e.data),i={type:t.readString(),data:t.readUint8Array()};this.packetQueue.push(i),t.finish(),this.receiveWaiter&&this.receiveWaiter()}async receive(e){if(this.receiveWaiter)throw new Error("Already receiving");for(;this.packetQueue.length===0&&!this.beingClosed;)await new Promise(i=>{this.receiveWaiter=i}),this.receiveWaiter=null;if(this.packetQueue.length===0&&this.beingClosed)return null;const t=this.packetQueue.shift();return e.deserialize(t)}get closed(){return!(this.readingPromise||this.packetQueue.length>0||this.receiveWaiter||this.socket.readyState!==WebSocket.CLOSED&&this.socket.readyState!==WebSocket.CLOSING)}close(){this.socket&&this.socket.close(),this.receiveWaiter&&(this.receiveWaiter(),this.receiveWaiter=null)}send(e,t){const i=t.serialize(e),r=new n;r.writeString(i.type),r.writeUint8Array(i.data),this.socket.send(r.finish())}}export{s as WebsocketConnection,d as WebsocketTransport};
2
+ //# sourceMappingURL=websocket-transport.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/network/websocket-transport.ts"],
4
+ "sourcesContent": ["import type { Address } from '../address.js';\nimport type { Serializable } from '../serialize';\nimport { ByteReader, ByteWriter } from '../serialize';\n\nimport type { Connection, Transport } from './connection.js';\nimport type { Packet, PacketData } from './packet/packet.js';\n\nexport class WebsocketTransport implements Transport {\n constructor(\n private readonly address: Address,\n ) { }\n\n private get wsEndpoint(): string {\n const protocol = this.address.secure ? 'wss' : 'ws';\n const { host, port } = this.address;\n return `${protocol}://${host}:${port}/ws`;\n }\n\n public connect(): Promise<Connection> {\n const socket = new WebSocket(this.wsEndpoint);\n return WebsocketConnection.fromSocket(socket);\n }\n}\n\nexport class WebsocketConnection implements Connection {\n private readonly packetQueue: Array<PacketData> = [];\n private receiveWaiter: (() => void) | null = null;\n private readingPromise: Promise<void> | null = null;\n private beingClosed: boolean = false;\n\n constructor(\n private socket: WebSocket,\n ) { }\n\n public static fromSocket(socket: WebSocket): Promise<WebsocketConnection> {\n const connection = new WebsocketConnection(socket);\n return new Promise((resolve, reject) => {\n socket.onerror = reject;\n socket.onclose = () => {\n connection.beingClosed = true;\n if (connection.receiveWaiter) {\n connection.receiveWaiter();\n connection.receiveWaiter = null;\n }\n };\n socket.onmessage = (event): void => {\n connection.readingPromise = connection.onMessage(event).finally(() => {\n connection.readingPromise = null;\n });\n };\n socket.onopen = (): void => {\n resolve(connection);\n };\n });\n }\n\n private async onMessage(event: MessageEvent<string | Blob>): Promise<void> {\n if (typeof event.data === 'string') {\n throw new Error('Received string data');\n }\n const reader = await ByteReader.fromBlob(event.data);\n const data = {\n type: reader.readString(),\n data: reader.readUint8Array(),\n };\n this.packetQueue.push(data);\n reader.finish();\n if (this.receiveWaiter) {\n this.receiveWaiter();\n }\n }\n\n public async receive(serializer: Serializable<Packet<unknown>, PacketData>): Promise<Packet | null> {\n if (this.receiveWaiter) {\n throw new Error('Already receiving');\n }\n while (this.packetQueue.length === 0 && !this.beingClosed) {\n await new Promise<void>((resolve) => {\n this.receiveWaiter = resolve;\n });\n this.receiveWaiter = null;\n }\n if (this.packetQueue.length === 0 && this.beingClosed) {\n return null;\n }\n const packetData = this.packetQueue.shift()!;\n return serializer.deserialize(packetData);\n }\n\n get closed(): boolean {\n if (this.readingPromise) {\n return false;\n }\n if (this.packetQueue.length > 0) {\n return false;\n }\n if (this.receiveWaiter) {\n return false;\n }\n if (this.socket.readyState !== WebSocket.CLOSED && this.socket.readyState !== WebSocket.CLOSING) {\n return false;\n }\n return true;\n }\n\n close(): void {\n if (this.socket) {\n this.socket.close();\n }\n if (this.receiveWaiter) {\n this.receiveWaiter();\n this.receiveWaiter = null;\n }\n }\n\n send(packet: Packet, serializer: Serializable<Packet<unknown>, PacketData>): void {\n const packetData = serializer.serialize(packet);\n const writer = new ByteWriter();\n writer.writeString(packetData.type);\n writer.writeUint8Array(packetData.data);\n this.socket.send(writer.finish());\n }\n}\n"],
5
+ "mappings": "AAEA,OAAS,cAAAA,EAAY,cAAAC,MAAkB,eAKhC,MAAMC,CAAwC,CACjD,YACqBC,EACnB,CADmB,aAAAA,CACjB,CAEJ,IAAY,YAAqB,CAC7B,MAAMC,EAAW,KAAK,QAAQ,OAAS,MAAQ,KACzC,CAAE,KAAAC,EAAM,KAAAC,CAAK,EAAI,KAAK,QAC5B,MAAO,GAAGF,CAAQ,MAAMC,CAAI,IAAIC,CAAI,KACxC,CAEO,SAA+B,CAClC,MAAMC,EAAS,IAAI,UAAU,KAAK,UAAU,EAC5C,OAAOC,EAAoB,WAAWD,CAAM,CAChD,CACJ,CAEO,MAAMC,CAA0C,CAMnD,YACYD,EACV,CADU,YAAAA,CACR,CAPa,YAAiC,CAAC,EAC3C,cAAqC,KACrC,eAAuC,KACvC,YAAuB,GAM/B,OAAc,WAAWA,EAAiD,CACtE,MAAME,EAAa,IAAID,EAAoBD,CAAM,EACjD,OAAO,IAAI,QAAQ,CAACG,EAASC,IAAW,CACpCJ,EAAO,QAAUI,EACjBJ,EAAO,QAAU,IAAM,CACnBE,EAAW,YAAc,GACrBA,EAAW,gBACXA,EAAW,cAAc,EACzBA,EAAW,cAAgB,KAEnC,EACAF,EAAO,UAAaK,GAAgB,CAChCH,EAAW,eAAiBA,EAAW,UAAUG,CAAK,EAAE,QAAQ,IAAM,CAClEH,EAAW,eAAiB,IAChC,CAAC,CACL,EACAF,EAAO,OAAS,IAAY,CACxBG,EAAQD,CAAU,CACtB,CACJ,CAAC,CACL,CAEA,MAAc,UAAUG,EAAmD,CACvE,GAAI,OAAOA,EAAM,MAAS,SACtB,MAAM,IAAI,MAAM,sBAAsB,EAE1C,MAAMC,EAAS,MAAMb,EAAW,SAASY,EAAM,IAAI,EAC7CE,EAAO,CACT,KAAMD,EAAO,WAAW,EACxB,KAAMA,EAAO,eAAe,CAChC,EACA,KAAK,YAAY,KAAKC,CAAI,EAC1BD,EAAO,OAAO,EACV,KAAK,eACL,KAAK,cAAc,CAE3B,CAEA,MAAa,QAAQE,EAA+E,CAChG,GAAI,KAAK,cACL,MAAM,IAAI,MAAM,mBAAmB,EAEvC,KAAO,KAAK,YAAY,SAAW,GAAK,CAAC,KAAK,aAC1C,MAAM,IAAI,QAAeL,GAAY,CACjC,KAAK,cAAgBA,CACzB,CAAC,EACD,KAAK,cAAgB,KAEzB,GAAI,KAAK,YAAY,SAAW,GAAK,KAAK,YACtC,OAAO,KAEX,MAAMM,EAAa,KAAK,YAAY,MAAM,EAC1C,OAAOD,EAAW,YAAYC,CAAU,CAC5C,CAEA,IAAI,QAAkB,CAUlB,MATI,OAAK,gBAGL,KAAK,YAAY,OAAS,GAG1B,KAAK,eAGL,KAAK,OAAO,aAAe,UAAU,QAAU,KAAK,OAAO,aAAe,UAAU,QAI5F,CAEA,OAAc,CACN,KAAK,QACL,KAAK,OAAO,MAAM,EAElB,KAAK,gBACL,KAAK,cAAc,EACnB,KAAK,cAAgB,KAE7B,CAEA,KAAKC,EAAgBF,EAA6D,CAC9E,MAAMC,EAAaD,EAAW,UAAUE,CAAM,EACxCC,EAAS,IAAIjB,EACnBiB,EAAO,YAAYF,EAAW,IAAI,EAClCE,EAAO,gBAAgBF,EAAW,IAAI,EACtC,KAAK,OAAO,KAAKE,EAAO,OAAO,CAAC,CACpC,CACJ",
6
+ "names": ["ByteReader", "ByteWriter", "WebsocketTransport", "address", "protocol", "host", "port", "socket", "WebsocketConnection", "connection", "resolve", "reject", "event", "reader", "data", "serializer", "packetData", "packet", "writer"]
7
+ }
package/dist/omu.js ADDED
@@ -0,0 +1,2 @@
1
+ import{ExtensionRegistry as i}from"./api";import{ASSET_EXTENSION_TYPE as r}from"./api/asset/extension";import{DASHBOARD_EXTENSION_TYPE as o}from"./api/dashboard/extension";import{ENDPOINT_EXTENSION_TYPE as a}from"./api/endpoint/extension";import{HTTP_EXTENSION_TYPE as E}from"./api/http/extension";import{I18N_EXTENSION_TYPE as d}from"./api/i18n/extension";import{LOGGER_EXTENSION_TYPE as p}from"./api/logger/extension.js";import{PERMISSION_EXTENSION_TYPE as h}from"./api/permission/extension";import{PLUGIN_EXTENSION_TYPE as l}from"./api/plugin/extension";import{REGISTRY_EXTENSION_TYPE as m}from"./api/registry/extension";import{SERVER_EXTENSION_TYPE as y}from"./api/server/extension";import{SESSION_EXTENSION_TYPE as T}from"./api/session";import{SIGNAL_EXTENSION_TYPE as x}from"./api/signal/extension";import{TABLE_EXTENSION_TYPE as g}from"./api/table/extension";import{EventEmitter as s}from"./event";import{Network as f}from"./network";import{PACKET_TYPES as c}from"./network/packet/packet-types.js";import{WebsocketTransport as N}from"./network/websocket-transport";import{BrowserSession as S}from"./token.js";class V{constructor(t,e){this.app=t;if(this.ready=!1,this.running=!1,typeof e?.token=="string"){const n=e?.token;this.token={get:()=>Promise.resolve(n)}}else this.token=e?.token??new S;this.address=e?.address??{host:"127.0.0.1",port:26423,secure:!1},this.network=new f(this,this.address,this.token,e?.transport??new N(this.address),e?.connection),this.network.event.disconnected.listen(()=>{this.ready=!1}),this.network.addPacketHandler(c.READY,()=>{if(this.ready)throw new Error("Received READY packet when already ready");this.ready=!0,this.event.ready.emit()}),this.extensions=new i(this),this.endpoints=this.extensions.register(a),this.plugins=this.extensions.register(l),this.permissions=this.extensions.register(h),this.tables=this.extensions.register(g),this.sessions=this.extensions.register(T),this.registries=this.extensions.register(m),this.dashboard=this.extensions.register(o),this.signals=this.extensions.register(x),this.assets=this.extensions.register(r),this.i18n=this.extensions.register(d),this.server=this.extensions.register(y),this.logger=this.extensions.register(p),this.http=this.extensions.register(E)}ready;running;event={started:new s,stopped:new s,ready:new s};token;address;sessions;network;endpoints;permissions;plugins;dashboard;extensions;tables;registries;signals;assets;i18n;server;logger;http;send(t,e){this.network.send({type:t,data:e})}async start(){if(this.running)throw new Error("Client already running");this.running=!0;const t=this.network.connect();this.event.started.emit(),await t}stop(){this.running=!1,this.ready=!1,this.network.close(),this.event.stopped.emit()}onReady(t){return this.ready&&t(),this.event.ready.listen(t)}async waitForReady(){if(!this.ready)return new Promise(t=>{let e=()=>{};e=this.event.ready.listen(()=>{e(),t()})})}}export{V as Omu};
2
+ //# sourceMappingURL=omu.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/omu.ts"],
4
+ "sourcesContent": ["import { ExtensionRegistry } from './api';\nimport { ASSET_EXTENSION_TYPE, type AssetExtension } from './api/asset/extension';\nimport { DASHBOARD_EXTENSION_TYPE, type DashboardExtension } from './api/dashboard/extension';\nimport { ENDPOINT_EXTENSION_TYPE, type EndpointExtension } from './api/endpoint/extension';\nimport { HTTP_EXTENSION_TYPE, HttpExtension } from './api/http/extension';\nimport { I18N_EXTENSION_TYPE, type I18nExtension } from './api/i18n/extension';\nimport { LOGGER_EXTENSION_TYPE, type LoggerExtension } from './api/logger/extension.js';\nimport { PERMISSION_EXTENSION_TYPE, type PermissionExtension } from './api/permission/extension';\nimport { PLUGIN_EXTENSION_TYPE, type PluginExtension } from './api/plugin/extension';\nimport { REGISTRY_EXTENSION_TYPE, type RegistryExtension } from './api/registry/extension';\nimport { SERVER_EXTENSION_TYPE, type ServerExtension } from './api/server/extension';\nimport { SESSION_EXTENSION_TYPE, SessionExtension } from './api/session';\nimport { SIGNAL_EXTENSION_TYPE, type SignalExtension } from './api/signal/extension';\nimport { TABLE_EXTENSION_TYPE, type TableExtension } from './api/table/extension';\nimport type { App } from './app.js';\nimport type { Unlisten } from './event';\nimport { EventEmitter } from './event';\nimport type { Address, Connection } from './network';\nimport { Network } from './network';\nimport { Transport } from './network/connection.js';\nimport { PACKET_TYPES } from './network/packet/packet-types.js';\nimport type { PacketType } from './network/packet/packet.js';\nimport { WebsocketTransport } from './network/websocket-transport';\nimport { BrowserSession, type SessioTokenProvider } from './token.js';\n\nexport type ClientEvents = {\n started: EventEmitter<[]>;\n stopped: EventEmitter<[]>;\n ready: EventEmitter<[]>;\n};\n\nexport class Omu {\n public ready: boolean;\n public running: boolean;\n readonly event: ClientEvents = {\n started: new EventEmitter(),\n stopped: new EventEmitter(),\n ready: new EventEmitter(),\n };\n readonly token: SessioTokenProvider;\n readonly address: Address;\n readonly sessions: SessionExtension;\n readonly network: Network;\n readonly endpoints: EndpointExtension;\n readonly permissions: PermissionExtension;\n readonly plugins: PluginExtension;\n readonly dashboard: DashboardExtension;\n readonly extensions: ExtensionRegistry;\n readonly tables: TableExtension;\n readonly registries: RegistryExtension;\n readonly signals: SignalExtension;\n readonly assets: AssetExtension;\n readonly i18n: I18nExtension;\n readonly server: ServerExtension;\n readonly logger: LoggerExtension;\n readonly http: HttpExtension;\n\n constructor(\n public readonly app: App,\n options?: {\n address?: Address;\n token?: SessioTokenProvider | string;\n transport?: Transport;\n connection?: Connection;\n },\n ) {\n this.ready = false;\n this.running = false;\n if (typeof options?.token === 'string') {\n const token = options?.token;\n this.token = {\n get: () => Promise.resolve(token),\n };\n } else {\n this.token = options?.token ?? new BrowserSession();\n }\n this.address = options?.address ?? {\n host: '127.0.0.1',\n port: 26423,\n secure: false,\n };\n this.network = new Network(\n this,\n this.address,\n this.token,\n options?.transport ?? new WebsocketTransport(this.address),\n options?.connection,\n );\n this.network.event.disconnected.listen(() => {\n this.ready = false;\n });\n this.network.addPacketHandler(PACKET_TYPES.READY, () => {\n if (this.ready) {\n throw new Error('Received READY packet when already ready');\n }\n this.ready = true;\n this.event.ready.emit();\n });\n this.extensions = new ExtensionRegistry(this);\n this.endpoints = this.extensions.register(ENDPOINT_EXTENSION_TYPE);\n this.plugins = this.extensions.register(PLUGIN_EXTENSION_TYPE);\n this.permissions = this.extensions.register(PERMISSION_EXTENSION_TYPE);\n this.tables = this.extensions.register(TABLE_EXTENSION_TYPE);\n this.sessions = this.extensions.register(SESSION_EXTENSION_TYPE);\n this.registries = this.extensions.register(REGISTRY_EXTENSION_TYPE);\n this.dashboard = this.extensions.register(DASHBOARD_EXTENSION_TYPE);\n this.signals = this.extensions.register(SIGNAL_EXTENSION_TYPE);\n this.assets = this.extensions.register(ASSET_EXTENSION_TYPE);\n this.i18n = this.extensions.register(I18N_EXTENSION_TYPE);\n this.server = this.extensions.register(SERVER_EXTENSION_TYPE);\n this.logger = this.extensions.register(LOGGER_EXTENSION_TYPE);\n this.http = this.extensions.register(HTTP_EXTENSION_TYPE);\n }\n\n public send<T>(packetType: PacketType<T>, data: T): void {\n this.network.send({\n type: packetType,\n data,\n });\n }\n\n public async start(): Promise<void> {\n if (this.running) {\n throw new Error('Client already running');\n }\n this.running = true;\n const connect = this.network.connect();\n this.event.started.emit();\n await connect;\n }\n\n public stop(): void {\n this.running = false;\n this.ready = false;\n this.network.close();\n this.event.stopped.emit();\n }\n\n public onReady(callback: () => void): Unlisten {\n if (this.ready) {\n callback();\n }\n return this.event.ready.listen(callback);\n }\n\n public async waitForReady(): Promise<void> {\n if (this.ready) return;\n return new Promise<void>((resolve) => {\n let unlisten = () => {};\n unlisten = this.event.ready.listen(() => {\n unlisten();\n resolve();\n });\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ExtensionRegistry", "ASSET_EXTENSION_TYPE", "DASHBOARD_EXTENSION_TYPE", "ENDPOINT_EXTENSION_TYPE", "HTTP_EXTENSION_TYPE", "I18N_EXTENSION_TYPE", "LOGGER_EXTENSION_TYPE", "PERMISSION_EXTENSION_TYPE", "PLUGIN_EXTENSION_TYPE", "REGISTRY_EXTENSION_TYPE", "SERVER_EXTENSION_TYPE", "SESSION_EXTENSION_TYPE", "SIGNAL_EXTENSION_TYPE", "TABLE_EXTENSION_TYPE", "EventEmitter", "Network", "PACKET_TYPES", "WebsocketTransport", "BrowserSession", "Omu", "app", "options", "token", "packetType", "data", "connect", "callback", "resolve", "unlisten"]
7
+ }
package/dist/result.js ADDED
@@ -0,0 +1,2 @@
1
+ async function n(r){try{return{data:await r,error:null}}catch(e){return{data:null,error:e}}}function i(r){return{data:r,error:null}}function a(r){return{data:null,error:r}}class s{constructor(e){this.promise=e}static create(){let e=()=>{},t=()=>{};const l=new Promise((o,u)=>{e=o,t=u});return{promise:new s(l),resolve:e,reject:t}}then(e,t){return this.promise.then(e,t)}catch(e){return this.promise.catch(e)}finally(e){return this.promise.finally(e)}[Symbol.toStringTag]="ResultPromise";async toResult(){try{return{data:await this.promise,error:null}}catch(e){return{data:null,error:e}}}}export{s as PromiseResult,a as failure,i as success,n as tryCatch};
2
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/result.ts"],
4
+ "sourcesContent": ["export type Success<T> = {\n data: T;\n error: null;\n};\n\nexport type Failure<E> = {\n data: null;\n error: E;\n};\n\nexport type Result<T, E = Error> = Success<T> | Failure<E>;\n\nexport async function tryCatch<T, E = Error>(\n promise: Promise<T>,\n): Promise<Result<T, E>> {\n try {\n const data = await promise;\n return { data, error: null };\n } catch (error) {\n return { data: null, error: error as E };\n }\n}\n\nexport function success<T>(data: T): Result<T> {\n return { data, error: null };\n}\n\nexport function failure<E>(error: E): Result<null, E> {\n return { data: null, error };\n}\n\nexport class PromiseResult<T, E = Error> implements Promise<T> {\n private constructor(\n private readonly promise: Promise<T>,\n ) {}\n\n public static create<T, E = Error>(): { promise: PromiseResult<T, E>; resolve: (value: T) => void; reject: (error: E) => void } {\n let resolve: (value: T) => void = () => {};\n let reject: (error: E) => void = () => {};\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return {\n promise: new PromiseResult<T, E>(promise),\n resolve,\n reject,\n };\n }\n\n then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null | undefined, onrejected?: ((reason: E) => TResult2 | PromiseLike<TResult2>) | null | undefined): Promise<TResult1 | TResult2> {\n return this.promise.then(onfulfilled, onrejected);\n }\n\n catch<TResult = never>(onrejected?: ((reason: E) => TResult | PromiseLike<TResult>) | null | undefined): Promise<T | TResult> {\n return this.promise.catch(onrejected);\n }\n\n finally(onfinally?: (() => void) | null | undefined): Promise<T> {\n return this.promise.finally(onfinally);\n }\n\n [Symbol.toStringTag]: string = 'ResultPromise';\n\n async toResult(): Promise<Result<T, E>> {\n try {\n return {\n data: await this.promise,\n error: null,\n };\n } catch (err) {\n return {\n data: null,\n error: err as E,\n };\n }\n }\n}\n"],
5
+ "mappings": "AAYA,eAAsBA,EAClBC,EACqB,CACrB,GAAI,CAEA,MAAO,CAAE,KADI,MAAMA,EACJ,MAAO,IAAK,CAC/B,OAASC,EAAO,CACZ,MAAO,CAAE,KAAM,KAAM,MAAOA,CAAW,CAC3C,CACJ,CAEO,SAASC,EAAWC,EAAoB,CAC3C,MAAO,CAAE,KAAAA,EAAM,MAAO,IAAK,CAC/B,CAEO,SAASC,EAAWH,EAA2B,CAClD,MAAO,CAAE,KAAM,KAAM,MAAAA,CAAM,CAC/B,CAEO,MAAMI,CAAkD,CACnD,YACaL,EACnB,CADmB,aAAAA,CAClB,CAEH,OAAc,QAAkH,CAC5H,IAAIM,EAA8B,IAAM,CAAC,EACrCC,EAA6B,IAAM,CAAC,EACxC,MAAMP,EAAU,IAAI,QAAW,CAACQ,EAAKC,IAAQ,CACzCH,EAAUE,EACVD,EAASE,CACb,CAAC,EACD,MAAO,CACH,QAAS,IAAIJ,EAAoBL,CAAO,EACxC,QAAAM,EACA,OAAAC,CACJ,CACJ,CAEA,KAAqCG,EAAmFC,EAAiH,CACrO,OAAO,KAAK,QAAQ,KAAKD,EAAaC,CAAU,CACpD,CAEA,MAAuBA,EAAuG,CAC1H,OAAO,KAAK,QAAQ,MAAMA,CAAU,CACxC,CAEA,QAAQC,EAAyD,CAC7D,OAAO,KAAK,QAAQ,QAAQA,CAAS,CACzC,CAEA,CAAC,OAAO,WAAW,EAAY,gBAE/B,MAAM,UAAkC,CACpC,GAAI,CACA,MAAO,CACH,KAAM,MAAM,KAAK,QACjB,MAAO,IACX,CACJ,OAASC,EAAK,CACV,MAAO,CACH,KAAM,KACN,MAAOA,CACX,CACJ,CACJ,CACJ",
6
+ "names": ["tryCatch", "promise", "error", "success", "data", "failure", "PromiseResult", "resolve", "reject", "res", "rej", "onfulfilled", "onrejected", "onfinally", "err"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{textDecoder as l,textEncoder as b}from"../const.js";class h{value;length;constructor(t){this.value=t.value??0,this.length=t.length??32}has(t){return(this.value&1<<t)!==0}get(t){return(this.value&1<<t)!==0}ifSet(t,e){if(this.has(t))return e()}set(t,e){e?this.value|=1<<t:this.value&=~(1<<t)}write(t){const e=new Uint8Array((this.length+7)/8);for(let i=0;i<e.length;i++)e[i]=this.value>>i*8&255;t.write(e)}static read(t,e){let i=0;for(let r=0;r<(e+7)/8;r++)i|=t.readUint8()<<r*8;return new h({value:i,length:e})}}function c(s,t){const e=s.getUint16(t)&32768?-1:1,i=(s.getUint16(t)&31744)>>10,r=s.getUint16(t)&1023;if(i===0&&r===0)return 0;if(i===31)return r===0?1/0*e:NaN;{const f=i-15,n=r/1024;return e*Math.pow(2,f)*(1+n)}}function w(s,t,e){if(e===0){s.setUint16(t,0);return}const i=e<0?1:0;if(e=Math.abs(e),!isFinite(e)){s.setUint16(t,31744|i<<15);return}const r=Math.floor(Math.log2(e)),f=e/Math.pow(2,r)-1,n=r+15,u=Math.round(f*1024);n<=0?s.setUint16(t,i<<15):n>=31?s.setUint16(t,31744|i<<15):s.setUint16(t,i<<15|n<<10|u)}class o{dataView;buffer;offset=0;finished=!1;constructor(t,e){this.offset=e??0,this.buffer=t??new ArrayBuffer(1024),this.dataView=new DataView(this.buffer)}static fromUint8Array(t){const e=new ArrayBuffer(t.byteLength);return new Uint8Array(e).set(new Uint8Array(t)),new o(e,t.byteLength)}allocate(t){if(this.offset+t>this.buffer.byteLength){const e=Math.max(this.buffer.byteLength*2,this.offset+t),i=new ArrayBuffer(e);new Uint8Array(i).set(new Uint8Array(this.buffer)),this.buffer=i,this.dataView=new DataView(this.buffer)}}write(t){if(this.finished)throw new Error("Buffer already finished");return this.allocate(t.length),new Uint8Array(this.buffer).set(t,this.offset),this.offset+=t.length,this}writeBoolean(t){return this.allocate(1),this.dataView.setInt8(this.offset,t?1:0),this.offset+=1,this}writeInt8(t){return this.allocate(1),this.dataView.setInt8(this.offset,t),this.offset+=1,this}writeUint8(t){return this.allocate(1),this.dataView.setUint8(this.offset,t),this.offset+=1,this}writeInt16(t){return this.allocate(2),this.dataView.setInt16(this.offset,t),this.offset+=2,this}writeUint16(t){return this.allocate(2),this.dataView.setUint16(this.offset,t),this.offset+=2,this}writeInt32(t){return this.allocate(4),this.dataView.setInt32(this.offset,t),this.offset+=4,this}writeUint32(t){return this.allocate(4),this.dataView.setUint32(this.offset,t),this.offset+=4,this}writeInt64(t){return this.allocate(8),this.dataView.setBigInt64(this.offset,t),this.offset+=8,this}writeUint64(t){return this.allocate(8),this.dataView.setBigUint64(this.offset,t),this.offset+=8,this}writeULEB128(t){if(t<0)throw new Error("Value must be non-negative");for(;t>127;)this.allocate(1),this.dataView.setUint8(this.offset,t&127|128),this.offset+=1,t>>=7;return this.allocate(1),this.dataView.setUint8(this.offset,t&127),this.offset+=1,this}writeFloat16(t){return this.allocate(2),w(this.dataView,this.offset,t),this.offset+=2,this}writeFloat32(t){return this.allocate(4),this.dataView.setFloat32(this.offset,t),this.offset+=4,this}writeFloat64(t){return this.allocate(4),this.dataView.setFloat64(this.offset,t),this.offset+=4,this}writeUint8Array(t){return this.writeULEB128(t.byteLength),this.write(t),this}writeString(t){return this.writeUint8Array(b.encode(t)),this}writeJSON(t){return this.writeString(JSON.stringify(t)),this}writeFlags(t){return t.write(this),this}finish(){if(this.finished)throw new Error("Buffer already finished");return this.finished=!0,new Uint8Array(this.buffer,0,this.offset)}toUint8Array(){return new Uint8Array(this.buffer,0,this.offset)}toArrayBuffer(){return this.buffer.slice(0,this.offset)}}class a{dataView;offset;finished;constructor(t){this.dataView=t,this.offset=0,this.finished=!1}static fromUint8Array(t){const e=new ArrayBuffer(t.byteLength);new Uint8Array(e).set(new Uint8Array(t));const r=new DataView(e);return new a(r)}static fromArrayBuffer(t){const e=new DataView(t);return new a(e)}static async fromBlob(t){const e=await t.arrayBuffer(),i=new DataView(e);return new a(i)}read(t){if(this.finished)throw new Error("Buffer already finished");if(t<0)throw new Error("Size must be positive");if(this.offset+t>this.dataView.byteLength)throw new Error("Buffer not fully read");const e=new Uint8Array(this.dataView.buffer.slice(this.offset,this.offset+t));return this.offset+=t,e}readBoolean(){const t=this.dataView.getInt8(this.offset);return this.offset+=1,t!==0}readInt8(){const t=this.dataView.getInt8(this.offset);return this.offset+=1,t}readUint8(){const t=this.dataView.getUint8(this.offset);return this.offset+=1,t}readInt16(){const t=this.dataView.getInt16(this.offset);return this.offset+=2,t}readUint16(){const t=this.dataView.getUint16(this.offset);return this.offset+=2,t}readInt32(){const t=this.dataView.getInt32(this.offset);return this.offset+=4,t}readUint32(){const t=this.dataView.getUint32(this.offset);return this.offset+=4,t}readInt64(){const t=this.dataView.getBigInt64(this.offset);return this.offset+=8,t}readUint64(){const t=this.dataView.getBigUint64(this.offset);return this.offset+=8,t}readULEB128(){let t=0,e=0,i;do{if(this.offset>=this.dataView.byteLength)throw new Error("Buffer not fully read");i=this.dataView.getUint8(this.offset),this.offset+=1,t|=(i&127)<<e,e+=7}while((i&128)!==0);return t}readFloat16(){const t=c(this.dataView,this.offset);return this.offset+=2,t}readFloat32(){const t=this.dataView.getFloat32(this.offset);return this.offset+=4,t}readFloat64(){const t=this.dataView.getFloat64(this.offset);return this.offset+=8,t}readUint8Array(){const t=this.readULEB128();return this.read(t)}readString(){const t=this.readUint8Array();return l.decode(t)}readJSON(){return JSON.parse(this.readString())}readFlags(t){return h.read(this,t)}finish(){if(this.finished)throw new Error("Buffer already finished");if(this.finished=!0,this.offset!==this.dataView.byteLength)throw new Error("Buffer not fully read")}}export{a as ByteReader,o as ByteWriter,h as Flags};
2
+ //# sourceMappingURL=bytebuffer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/serialize/bytebuffer.ts"],
4
+ "sourcesContent": ["import { textDecoder, textEncoder } from '../const.js';\nimport { JsonType } from './serializer.js';\n\nexport class Flags {\n private value: number;\n private length: number;\n\n constructor(options: { value?: number; length?: number }) {\n this.value = options.value ?? 0;\n this.length = options.length ?? 32;\n }\n\n public has(position: number): boolean {\n return (this.value & (1 << position)) !== 0;\n }\n\n public get(position: number): boolean {\n return (this.value & (1 << position)) !== 0;\n }\n\n public ifSet<T>(position: number, callback: () => T): T | undefined {\n if (this.has(position)) {\n return callback();\n }\n return undefined;\n }\n\n public set(position: number, value: boolean): void {\n if (value) {\n this.value |= 1 << position;\n } else {\n this.value &= ~(1 << position);\n }\n }\n\n public write(writer: ByteWriter): void {\n const bits = new Uint8Array((this.length + 7) / 8);\n for (let i = 0; i < bits.length; i++) {\n bits[i] = (this.value >> (i * 8)) & 0xff;\n }\n writer.write(bits);\n }\n\n public static read(reader: ByteReader, length: number): Flags {\n let value = 0;\n for (let i = 0; i < (length + 7) / 8; i++) {\n value |= reader.readUint8() << (i * 8);\n }\n return new Flags({ value, length });\n }\n}\n\nfunction readFloat16(dataView: DataView, offset: number): number {\n const sign = (dataView.getUint16(offset) & 0x8000) ? -1 : 1;\n const exponent = (dataView.getUint16(offset) & 0x7c00) >> 10;\n const mantissa = (dataView.getUint16(offset) & 0x03ff);\n if (exponent === 0 && mantissa === 0) {\n return 0;\n } else if (exponent === 0x1f) {\n return mantissa === 0 ? Infinity * sign : NaN;\n } else {\n const normalizedExponent = exponent - 15;\n const normalizedMantissa = mantissa / 1024;\n return sign * Math.pow(2, normalizedExponent) * (1 + normalizedMantissa);\n }\n}\n\nfunction writeFloat16(dataView: DataView, offset: number, value: number): void {\n if (value === 0) {\n dataView.setUint16(offset, 0);\n return;\n }\n const sign = value < 0 ? 1 : 0;\n value = Math.abs(value);\n if (!isFinite(value)) {\n dataView.setUint16(offset, 0x7c00 | (sign << 15));\n return;\n }\n const exponent = Math.floor(Math.log2(value));\n const mantissa = value / Math.pow(2, exponent) - 1;\n const normalizedExponent = exponent + 15;\n const normalizedMantissa = Math.round(mantissa * 1024);\n if (normalizedExponent <= 0) {\n dataView.setUint16(offset, sign << 15);\n } else if (normalizedExponent >= 0x1f) {\n dataView.setUint16(offset, 0x7c00 | (sign << 15));\n } else {\n dataView.setUint16(offset, (sign << 15) | (normalizedExponent << 10) | normalizedMantissa);\n }\n}\n\nexport class ByteWriter {\n private dataView: DataView;\n private buffer: ArrayBuffer;\n private offset = 0;\n private finished = false;\n\n constructor(init?: ArrayBuffer, offset?: number) {\n this.offset = offset ?? 0;\n this.buffer = init ?? new ArrayBuffer(1024);\n this.dataView = new DataView(this.buffer);\n }\n\n public static fromUint8Array(buffer: Uint8Array): ByteWriter {\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n const uint8Array = new Uint8Array(arrayBuffer);\n uint8Array.set(new Uint8Array(buffer));\n return new ByteWriter(arrayBuffer, buffer.byteLength);\n }\n\n private allocate(length: number): void {\n if (this.offset + length > this.buffer.byteLength) {\n const newByteLength = Math.max(this.buffer.byteLength * 2, this.offset + length);\n const newBuffer = new ArrayBuffer(newByteLength);\n new Uint8Array(newBuffer).set(new Uint8Array(this.buffer));\n this.buffer = newBuffer;\n this.dataView = new DataView(this.buffer);\n }\n }\n\n public write(data: Uint8Array): ByteWriter {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.allocate(data.length);\n new Uint8Array(this.buffer).set(data, this.offset);\n this.offset += data.length;\n return this;\n }\n\n public writeBoolean(value: boolean): ByteWriter {\n this.allocate(1);\n this.dataView.setInt8(this.offset, value ? 1 : 0);\n this.offset += 1;\n return this;\n }\n\n public writeInt8(value: number): ByteWriter {\n this.allocate(1);\n this.dataView.setInt8(this.offset, value);\n this.offset += 1;\n return this;\n }\n\n public writeUint8(value: number): ByteWriter {\n this.allocate(1);\n this.dataView.setUint8(this.offset, value);\n this.offset += 1;\n return this;\n }\n\n public writeInt16(value: number): ByteWriter {\n this.allocate(2);\n this.dataView.setInt16(this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeUint16(value: number): ByteWriter {\n this.allocate(2);\n this.dataView.setUint16(this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeInt32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setInt32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeUint32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setUint32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeInt64(value: bigint): ByteWriter {\n this.allocate(8);\n this.dataView.setBigInt64(this.offset, value);\n this.offset += 8;\n return this;\n }\n\n public writeUint64(value: bigint): ByteWriter {\n this.allocate(8);\n this.dataView.setBigUint64(this.offset, value);\n this.offset += 8;\n return this;\n }\n\n public writeULEB128(value: number): ByteWriter {\n // Unsigned LEB128\n if (value < 0) {\n throw new Error('Value must be non-negative');\n }\n while (value > 0x7f) {\n this.allocate(1);\n this.dataView.setUint8(this.offset, (value & 0x7f) | 0x80);\n this.offset += 1;\n value >>= 7;\n }\n this.allocate(1);\n this.dataView.setUint8(this.offset, value & 0x7f);\n this.offset += 1;\n return this;\n }\n\n public writeFloat16(value: number): ByteWriter {\n this.allocate(2);\n writeFloat16(this.dataView, this.offset, value);\n this.offset += 2;\n return this;\n }\n\n public writeFloat32(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setFloat32(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeFloat64(value: number): ByteWriter {\n this.allocate(4);\n this.dataView.setFloat64(this.offset, value);\n this.offset += 4;\n return this;\n }\n\n public writeUint8Array(value: Uint8Array): ByteWriter {\n this.writeULEB128(value.byteLength);\n this.write(value);\n return this;\n }\n\n public writeString(value: string): ByteWriter {\n this.writeUint8Array(textEncoder.encode(value));\n return this;\n }\n\n public writeJSON(value: JsonType): ByteWriter {\n this.writeString(JSON.stringify(value));\n return this;\n }\n\n public writeFlags(flags: Flags): ByteWriter {\n flags.write(this);\n return this;\n }\n\n public finish(): Uint8Array {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.finished = true;\n return new Uint8Array(this.buffer, 0, this.offset);\n }\n\n public toUint8Array(): Uint8Array {\n return new Uint8Array(this.buffer, 0, this.offset);\n }\n\n public toArrayBuffer(): ArrayBuffer {\n return this.buffer.slice(0, this.offset);\n }\n}\n\nexport class ByteReader {\n private dataView: DataView;\n private offset: number;\n private finished: boolean;\n\n private constructor(data: DataView) {\n this.dataView = data;\n this.offset = 0;\n this.finished = false;\n }\n\n public static fromUint8Array(buffer: Uint8Array): ByteReader {\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n const uint8Array = new Uint8Array(arrayBuffer);\n uint8Array.set(new Uint8Array(buffer));\n const dataView = new DataView(arrayBuffer);\n return new ByteReader(dataView);\n }\n\n public static fromArrayBuffer(buffer: ArrayBuffer): ByteReader {\n const dataView = new DataView(buffer);\n return new ByteReader(dataView);\n }\n\n public static async fromBlob(blob: Blob): Promise<ByteReader> {\n const arrayBuffer = await blob.arrayBuffer();\n const dataView = new DataView(arrayBuffer);\n return new ByteReader(dataView);\n }\n\n public read(size: number): Uint8Array {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n if (size < 0) {\n throw new Error('Size must be positive');\n }\n if (this.offset + size > this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n const value = new Uint8Array(this.dataView.buffer.slice(this.offset, this.offset + size));\n this.offset += size;\n return value;\n }\n\n public readBoolean(): boolean {\n const value = this.dataView.getInt8(this.offset);\n this.offset += 1;\n return value !== 0;\n }\n\n public readInt8(): number {\n const value = this.dataView.getInt8(this.offset);\n this.offset += 1;\n return value;\n }\n\n public readUint8(): number {\n const value = this.dataView.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n\n public readInt16(): number {\n const value = this.dataView.getInt16(this.offset);\n this.offset += 2;\n return value;\n }\n\n public readUint16(): number {\n const value = this.dataView.getUint16(this.offset);\n this.offset += 2;\n return value;\n }\n\n public readInt32(): number {\n const value = this.dataView.getInt32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readUint32(): number {\n const value = this.dataView.getUint32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readInt64(): bigint {\n const value = this.dataView.getBigInt64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readUint64(): bigint {\n const value = this.dataView.getBigUint64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readULEB128(): number {\n // Unsigned LEB128\n let value = 0;\n let shift = 0;\n let byte: number;\n do {\n if (this.offset >= this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n byte = this.dataView.getUint8(this.offset);\n this.offset += 1;\n value |= (byte & 0b01111111) << shift;\n shift += 7;\n }\n while ((byte & 0b10000000) !== 0);\n return value;\n }\n\n public readFloat16(): number {\n const value = readFloat16(this.dataView, this.offset);\n this.offset += 2;\n return value;\n }\n\n public readFloat32(): number {\n const value = this.dataView.getFloat32(this.offset);\n this.offset += 4;\n return value;\n }\n\n public readFloat64(): number {\n const value = this.dataView.getFloat64(this.offset);\n this.offset += 8;\n return value;\n }\n\n public readUint8Array(): Uint8Array {\n const length = this.readULEB128();\n return this.read(length);\n }\n\n public readString(): string {\n const byteArray = this.readUint8Array();\n return textDecoder.decode(byteArray);\n }\n\n public readJSON<T extends JsonType>(): T {\n return JSON.parse(this.readString());\n }\n\n public readFlags(length: number): Flags {\n return Flags.read(this, length);\n }\n\n public finish(): void {\n if (this.finished) {\n throw new Error('Buffer already finished');\n }\n this.finished = true;\n if (this.offset !== this.dataView.byteLength) {\n throw new Error('Buffer not fully read');\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["textDecoder", "textEncoder", "Flags", "options", "position", "callback", "value", "writer", "bits", "reader", "length", "i", "readFloat16", "dataView", "offset", "sign", "exponent", "mantissa", "normalizedExponent", "normalizedMantissa", "writeFloat16", "ByteWriter", "init", "buffer", "arrayBuffer", "newByteLength", "newBuffer", "data", "flags", "ByteReader", "blob", "size", "shift", "byte", "byteArray"]
7
+ }
@@ -0,0 +1,2 @@
1
+ export { ByteReader, ByteWriter, Flags } from './bytebuffer';
2
+ export { Serializer, type JsonType, type Serializable } from './serializer';