@omujs/omu 0.9.48 → 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 (276) hide show
  1. package/dist/address.js +1 -0
  2. package/dist/address.js.map +7 -0
  3. package/dist/api/asset/extension.d.ts +25 -0
  4. package/dist/api/asset/extension.js +2 -0
  5. package/dist/api/asset/extension.js.map +7 -0
  6. package/dist/api/asset/index.d.ts +2 -0
  7. package/dist/api/asset/index.js +2 -0
  8. package/dist/api/asset/index.js.map +7 -0
  9. package/dist/api/dashboard/extension.d.ts +181 -0
  10. package/dist/api/dashboard/extension.js +2 -0
  11. package/dist/api/dashboard/extension.js.map +7 -0
  12. package/{src/api/dashboard/handler.ts → dist/api/dashboard/handler.d.ts} +3 -5
  13. package/dist/api/dashboard/handler.js +1 -0
  14. package/dist/api/dashboard/handler.js.map +7 -0
  15. package/dist/api/dashboard/index.d.ts +3 -0
  16. package/dist/api/dashboard/index.js +2 -0
  17. package/dist/api/dashboard/index.js.map +7 -0
  18. package/dist/api/dashboard/packets.d.ts +63 -0
  19. package/dist/api/dashboard/packets.js +2 -0
  20. package/dist/api/dashboard/packets.js.map +7 -0
  21. package/dist/api/endpoint/endpoint.d.ts +21 -0
  22. package/dist/api/endpoint/endpoint.js +2 -0
  23. package/dist/api/endpoint/endpoint.js.map +7 -0
  24. package/dist/api/endpoint/extension.d.ts +17 -0
  25. package/dist/api/endpoint/extension.js +2 -0
  26. package/dist/api/endpoint/extension.js.map +7 -0
  27. package/{src/api/endpoint/index.ts → dist/api/endpoint/index.d.ts} +0 -1
  28. package/dist/api/endpoint/index.js +2 -0
  29. package/dist/api/endpoint/index.js.map +7 -0
  30. package/dist/api/endpoint/packets.d.ts +51 -0
  31. package/dist/api/endpoint/packets.js +2 -0
  32. package/dist/api/endpoint/packets.js.map +7 -0
  33. package/dist/api/extension-registry.d.ts +8 -0
  34. package/dist/api/extension-registry.js +2 -0
  35. package/dist/api/extension-registry.js.map +7 -0
  36. package/dist/api/extension.d.ts +11 -0
  37. package/dist/api/extension.js +2 -0
  38. package/dist/api/extension.js.map +7 -0
  39. package/dist/api/http/extension.d.ts +41 -0
  40. package/dist/api/http/extension.js +2 -0
  41. package/dist/api/http/extension.js.map +7 -0
  42. package/dist/api/http/http.d.ts +36 -0
  43. package/dist/api/http/http.js +2 -0
  44. package/dist/api/http/http.js.map +7 -0
  45. package/{src/api/http/index.ts → dist/api/http/index.d.ts} +0 -1
  46. package/dist/api/http/index.js +2 -0
  47. package/dist/api/http/index.js.map +7 -0
  48. package/dist/api/http/websocket.d.ts +125 -0
  49. package/dist/api/http/websocket.js +2 -0
  50. package/dist/api/http/websocket.js.map +7 -0
  51. package/dist/api/i18n/extension.d.ts +19 -0
  52. package/dist/api/i18n/extension.js +2 -0
  53. package/dist/api/i18n/extension.js.map +7 -0
  54. package/{src/api/i18n/index.ts → dist/api/i18n/index.d.ts} +0 -1
  55. package/dist/api/i18n/index.js +2 -0
  56. package/dist/api/i18n/index.js.map +7 -0
  57. package/dist/api/index.d.ts +2 -0
  58. package/dist/api/index.js +2 -0
  59. package/dist/api/index.js.map +7 -0
  60. package/dist/api/logger/extension.d.ts +25 -0
  61. package/dist/api/logger/extension.js +2 -0
  62. package/dist/api/logger/extension.js.map +7 -0
  63. package/dist/api/logger/index.d.ts +1 -0
  64. package/dist/api/logger/index.js +2 -0
  65. package/dist/api/logger/index.js.map +7 -0
  66. package/dist/api/logger/packets.d.ts +18 -0
  67. package/dist/api/logger/packets.js +2 -0
  68. package/dist/api/logger/packets.js.map +7 -0
  69. package/dist/api/permission/extension.d.ts +19 -0
  70. package/dist/api/permission/extension.js +2 -0
  71. package/dist/api/permission/extension.js.map +7 -0
  72. package/{src/api/permission/index.ts → dist/api/permission/index.d.ts} +0 -1
  73. package/dist/api/permission/index.js +2 -0
  74. package/dist/api/permission/index.js.map +7 -0
  75. package/dist/api/permission/permission.d.ts +25 -0
  76. package/dist/api/permission/permission.js +2 -0
  77. package/dist/api/permission/permission.js.map +7 -0
  78. package/dist/api/plugin/extension.d.ts +43 -0
  79. package/dist/api/plugin/extension.js +2 -0
  80. package/dist/api/plugin/extension.js.map +7 -0
  81. package/{src/api/plugin/index.ts → dist/api/plugin/index.d.ts} +0 -1
  82. package/dist/api/plugin/index.js +2 -0
  83. package/dist/api/plugin/index.js.map +7 -0
  84. package/{src/api/plugin/package-info.ts → dist/api/plugin/package-info.d.ts} +0 -7
  85. package/dist/api/plugin/package-info.js +1 -0
  86. package/dist/api/plugin/package-info.js.map +7 -0
  87. package/dist/api/registry/extension.d.ts +23 -0
  88. package/dist/api/registry/extension.js +2 -0
  89. package/dist/api/registry/extension.js.map +7 -0
  90. package/{src/api/registry/index.ts → dist/api/registry/index.d.ts} +0 -1
  91. package/dist/api/registry/index.js +2 -0
  92. package/dist/api/registry/index.js.map +7 -0
  93. package/dist/api/registry/packets.d.ts +20 -0
  94. package/dist/api/registry/packets.js +2 -0
  95. package/dist/api/registry/packets.js.map +7 -0
  96. package/{src/api/registry/registry.ts → dist/api/registry/registry.d.ts} +11 -53
  97. package/dist/api/registry/registry.js +2 -0
  98. package/dist/api/registry/registry.js.map +7 -0
  99. package/dist/api/server/extension.d.ts +61 -0
  100. package/dist/api/server/extension.js +2 -0
  101. package/dist/api/server/extension.js.map +7 -0
  102. package/dist/api/server/index.d.ts +1 -0
  103. package/dist/api/server/index.js +2 -0
  104. package/dist/api/server/index.js.map +7 -0
  105. package/dist/api/session/extension.d.ts +52 -0
  106. package/dist/api/session/extension.js +2 -0
  107. package/dist/api/session/extension.js.map +7 -0
  108. package/dist/api/session/index.d.ts +1 -0
  109. package/dist/api/session/index.js +2 -0
  110. package/dist/api/session/index.js.map +7 -0
  111. package/dist/api/signal/extension.d.ts +19 -0
  112. package/dist/api/signal/extension.js +2 -0
  113. package/dist/api/signal/extension.js.map +7 -0
  114. package/dist/api/signal/index.d.ts +1 -0
  115. package/dist/api/signal/index.js +2 -0
  116. package/dist/api/signal/index.js.map +7 -0
  117. package/dist/api/signal/packets.d.ts +21 -0
  118. package/dist/api/signal/packets.js +2 -0
  119. package/dist/api/signal/packets.js.map +7 -0
  120. package/dist/api/signal/signal.d.ts +33 -0
  121. package/dist/api/signal/signal.js +2 -0
  122. package/dist/api/signal/signal.js.map +7 -0
  123. package/dist/api/table/extension.d.ts +26 -0
  124. package/dist/api/table/extension.js +2 -0
  125. package/dist/api/table/extension.js.map +7 -0
  126. package/{src/api/table/index.ts → dist/api/table/index.d.ts} +0 -1
  127. package/dist/api/table/index.js +2 -0
  128. package/dist/api/table/index.js.map +7 -0
  129. package/dist/api/table/packets.d.ts +65 -0
  130. package/dist/api/table/packets.js +2 -0
  131. package/dist/api/table/packets.js.map +7 -0
  132. package/dist/api/table/table.d.ts +75 -0
  133. package/dist/api/table/table.js +2 -0
  134. package/dist/api/table/table.js.map +7 -0
  135. package/dist/app.d.ts +49 -0
  136. package/dist/app.js +2 -0
  137. package/dist/app.js.map +7 -0
  138. package/dist/const.d.ts +2 -0
  139. package/dist/const.js +2 -0
  140. package/dist/const.js.map +7 -0
  141. package/dist/errors.d.ts +36 -0
  142. package/dist/errors.js +2 -0
  143. package/dist/errors.js.map +7 -0
  144. package/dist/event/index.d.ts +6 -0
  145. package/dist/event/index.js +2 -0
  146. package/dist/event/index.js.map +7 -0
  147. package/dist/helper.d.ts +10 -0
  148. package/dist/helper.js +2 -0
  149. package/dist/helper.js.map +7 -0
  150. package/dist/identifier.d.ts +51 -0
  151. package/dist/identifier.js +2 -0
  152. package/dist/identifier.js.map +7 -0
  153. package/dist/index.d.ts +36 -0
  154. package/dist/index.js +2 -0
  155. package/dist/index.js.map +7 -0
  156. package/{src/localization/index.ts → dist/localization/index.d.ts} +0 -1
  157. package/dist/localization/index.js +2 -0
  158. package/dist/localization/index.js.map +7 -0
  159. package/dist/localization/locale.d.ts +735 -0
  160. package/dist/localization/locale.js +2 -0
  161. package/dist/localization/locale.js.map +7 -0
  162. package/{src/localization/localization.ts → dist/localization/localization.d.ts} +0 -2
  163. package/dist/localization/localization.js +1 -0
  164. package/dist/localization/localization.js.map +7 -0
  165. package/dist/lock.d.ts +6 -0
  166. package/dist/lock.js +2 -0
  167. package/dist/lock.js.map +7 -0
  168. package/dist/network/connection.d.ts +17 -0
  169. package/dist/network/connection.js +2 -0
  170. package/dist/network/connection.js.map +7 -0
  171. package/dist/network/encryption.d.ts +38 -0
  172. package/dist/network/encryption.js +2 -0
  173. package/dist/network/encryption.js.map +7 -0
  174. package/dist/network/frame-transport.d.ts +22 -0
  175. package/dist/network/frame-transport.js +2 -0
  176. package/dist/network/frame-transport.js.map +7 -0
  177. package/{src/network/index.ts → dist/network/index.d.ts} +0 -1
  178. package/dist/network/index.js +2 -0
  179. package/dist/network/index.js.map +7 -0
  180. package/dist/network/network.d.ts +59 -0
  181. package/dist/network/network.js +2 -0
  182. package/dist/network/network.js.map +7 -0
  183. package/{src/network/packet/index.ts → dist/network/packet/index.d.ts} +0 -1
  184. package/dist/network/packet/index.js +2 -0
  185. package/dist/network/packet/index.js.map +7 -0
  186. package/dist/network/packet/packet-types.d.ts +84 -0
  187. package/dist/network/packet/packet-types.js +2 -0
  188. package/dist/network/packet/packet-types.js.map +7 -0
  189. package/dist/network/packet/packet.d.ts +25 -0
  190. package/dist/network/packet/packet.js +2 -0
  191. package/dist/network/packet/packet.js.map +7 -0
  192. package/dist/network/websocket-transport.d.ts +24 -0
  193. package/dist/network/websocket-transport.js +2 -0
  194. package/dist/network/websocket-transport.js.map +7 -0
  195. package/dist/omu.d.ts +61 -0
  196. package/dist/omu.js +2 -0
  197. package/dist/omu.js.map +7 -0
  198. package/dist/result.d.ts +26 -0
  199. package/dist/result.js +2 -0
  200. package/dist/result.js.map +7 -0
  201. package/dist/serialize/bytebuffer.d.ts +73 -0
  202. package/dist/serialize/bytebuffer.js +2 -0
  203. package/dist/serialize/bytebuffer.js.map +7 -0
  204. package/dist/serialize/index.d.ts +2 -0
  205. package/dist/serialize/index.js +2 -0
  206. package/dist/serialize/index.js.map +7 -0
  207. package/dist/serialize/serializer.d.ts +26 -0
  208. package/dist/serialize/serializer.js +2 -0
  209. package/dist/serialize/serializer.js.map +7 -0
  210. package/dist/token.d.ts +14 -0
  211. package/dist/token.js +2 -0
  212. package/dist/token.js.map +7 -0
  213. package/dist/version.d.ts +2 -0
  214. package/dist/version.js +2 -0
  215. package/dist/version.js.map +7 -0
  216. package/package.json +12 -9
  217. package/CHANGELOG.md +0 -1845
  218. package/src/api/asset/extension.ts +0 -193
  219. package/src/api/asset/index.ts +0 -5
  220. package/src/api/dashboard/extension.ts +0 -651
  221. package/src/api/dashboard/index.ts +0 -38
  222. package/src/api/dashboard/packets.ts +0 -126
  223. package/src/api/endpoint/endpoint.ts +0 -56
  224. package/src/api/endpoint/extension.ts +0 -133
  225. package/src/api/endpoint/packets.ts +0 -176
  226. package/src/api/extension-registry.ts +0 -17
  227. package/src/api/extension.ts +0 -19
  228. package/src/api/http/extension.ts +0 -401
  229. package/src/api/http/http.ts +0 -79
  230. package/src/api/http/websocket.ts +0 -283
  231. package/src/api/i18n/extension.ts +0 -65
  232. package/src/api/index.ts +0 -3
  233. package/src/api/logger/extension.ts +0 -75
  234. package/src/api/logger/index.ts +0 -4
  235. package/src/api/logger/packets.ts +0 -38
  236. package/src/api/permission/extension.ts +0 -107
  237. package/src/api/permission/permission.ts +0 -53
  238. package/src/api/plugin/extension.ts +0 -100
  239. package/src/api/registry/extension.ts +0 -326
  240. package/src/api/registry/packets.ts +0 -64
  241. package/src/api/server/extension.ts +0 -155
  242. package/src/api/server/index.ts +0 -11
  243. package/src/api/session/extension.ts +0 -205
  244. package/src/api/session/index.ts +0 -7
  245. package/src/api/signal/extension.ts +0 -125
  246. package/src/api/signal/index.ts +0 -1
  247. package/src/api/signal/packets.ts +0 -61
  248. package/src/api/signal/signal.ts +0 -67
  249. package/src/api/table/extension.ts +0 -554
  250. package/src/api/table/packets.ts +0 -252
  251. package/src/api/table/table.ts +0 -113
  252. package/src/app.ts +0 -95
  253. package/src/const.ts +0 -2
  254. package/src/errors.ts +0 -70
  255. package/src/event/index.ts +0 -18
  256. package/src/helper.ts +0 -16
  257. package/src/identifier.ts +0 -256
  258. package/src/index.ts +0 -87
  259. package/src/localization/locale.ts +0 -737
  260. package/src/lock.ts +0 -43
  261. package/src/network/connection.ts +0 -45
  262. package/src/network/encryption.ts +0 -221
  263. package/src/network/frame-transport.ts +0 -186
  264. package/src/network/network.ts +0 -322
  265. package/src/network/packet/packet-types.ts +0 -164
  266. package/src/network/packet/packet.ts +0 -55
  267. package/src/network/websocket-transport.ts +0 -123
  268. package/src/omu.ts +0 -156
  269. package/src/result.ts +0 -78
  270. package/src/serialize/bytebuffer.ts +0 -432
  271. package/src/serialize/index.ts +0 -2
  272. package/src/serialize/serializer.ts +0 -149
  273. package/src/token.ts +0 -39
  274. package/src/version.ts +0 -2
  275. package/tsconfig.json +0 -18
  276. /package/{src/address.ts → dist/address.d.ts} +0 -0
@@ -1,401 +0,0 @@
1
-
2
- import { textEncoder } from '../../const';
3
- import { Identifier } from '../../identifier';
4
- import { PacketType } from '../../network/packet';
5
- import { Omu } from '../../omu';
6
- import { Extension, ExtensionType } from '../extension';
7
- import { DataChunk, HttpRequest, OmuResponse, RequestHandle } from './http';
8
- import { OmuWS, WebSocketClose, WebSocketError, WebSocketOpen, WSData, WSDataMeta, WSHandleState, WSMsgType } from './websocket';
9
-
10
- export const HTTP_EXTENSION_TYPE: ExtensionType<HttpExtension> = new ExtensionType(
11
- 'http',
12
- (omu: Omu) => new HttpExtension(omu),
13
- );
14
-
15
- export const HTTP_REQUEST_PERMISSION_ID: Identifier = HTTP_EXTENSION_TYPE.join('request');
16
-
17
- const REQUEST_CREATE = PacketType.createJson<HttpRequest>(HTTP_EXTENSION_TYPE, {
18
- name: 'request_create',
19
- });
20
-
21
- const REQUEST_SEND = PacketType.createSerialized<DataChunk<RequestHandle>>(HTTP_EXTENSION_TYPE, {
22
- name: 'request_send',
23
- serializer: DataChunk,
24
- });
25
-
26
- type HttpRequestClose = RequestHandle;
27
-
28
- const REQUEST_CLOSE = PacketType.createJson<HttpRequestClose>(HTTP_EXTENSION_TYPE, {
29
- name: 'request_close',
30
- });
31
-
32
- type HttpResponse = RequestHandle & {
33
- header: Record<string, string>;
34
- status: number;
35
- statusText: string;
36
- url: string;
37
- history: HttpResponse[];
38
- redirected: boolean;
39
- };
40
-
41
- const RESPONSE_CREATE = PacketType.createJson<HttpResponse>(HTTP_EXTENSION_TYPE, {
42
- name: 'response_create',
43
- });
44
-
45
- const RESPONSE_CHUNK = PacketType.createSerialized<DataChunk<RequestHandle>>(HTTP_EXTENSION_TYPE, {
46
- name: 'response_chunk',
47
- serializer: DataChunk,
48
- });
49
-
50
- const RESPONSE_CLOSE = PacketType.createJson<RequestHandle>(HTTP_EXTENSION_TYPE, {
51
- name: 'response_close',
52
- });
53
-
54
- type HandleStateReceiving = {
55
- type: 'receiving';
56
- receive(data: Uint8Array): void;
57
- close(): void;
58
- };
59
-
60
- type HandleStateCreated = {
61
- type: 'created';
62
- setResponse(response: HttpResponse): void;
63
- };
64
-
65
- type HandleState = HandleStateCreated | HandleStateReceiving;
66
-
67
- const WEBSOCKET_CREATE = PacketType.createJson<HttpRequest>(HTTP_EXTENSION_TYPE, {
68
- name: 'ws_create',
69
- });
70
-
71
- const WEBSOCKET_OPEN = PacketType.createJson<WebSocketOpen>(HTTP_EXTENSION_TYPE, {
72
- name: 'ws_open',
73
- });
74
-
75
- const WEBSOCKET_DATA = PacketType.createSerialized<DataChunk<WSDataMeta>>(HTTP_EXTENSION_TYPE, {
76
- name: 'ws_data',
77
- serializer: DataChunk,
78
- });
79
-
80
- const WEBSOCKET_CLOSE = PacketType.createJson<WebSocketClose>(HTTP_EXTENSION_TYPE, {
81
- name: 'ws_close',
82
- });
83
-
84
- const WEBSOCKET_ERROR = PacketType.createJson<WebSocketError>(HTTP_EXTENSION_TYPE, {
85
- name: 'ws_error',
86
- });
87
-
88
- function createFuture<T>(): {
89
- promise: Promise<T>;
90
- resolve: (value: T) => void;
91
- reject: (reason?: unknown) => void;
92
- } {
93
- let resolve: ((value: T) => void) | undefined = undefined;
94
- let reject: ((reason?: unknown) => void) | undefined = undefined;
95
- const promise = new Promise<T>((res, rej) => {
96
- resolve = res;
97
- reject = rej;
98
- });
99
- if (!resolve || !reject) throw new Error('Failed to create future');
100
- return {
101
- promise,
102
- resolve,
103
- reject,
104
- };
105
- }
106
-
107
- type WSSendTask = {
108
- id: string;
109
- data: WSData;
110
- };
111
-
112
- export class HttpExtension implements Extension {
113
- public readonly type: ExtensionType<Extension> = HTTP_EXTENSION_TYPE;
114
- private requestCount: number = 0;
115
-
116
- private readonly httpHandles: Record<string, HandleState | undefined> = {};
117
- private readonly wsHandles: Record<string, WSHandleState> = {};
118
- private readonly wsSendQueue: WSSendTask[] = [];
119
- private wsSendWaitResolve: () => void = () => {};
120
-
121
- constructor(
122
- private readonly omu: Omu,
123
- ) {
124
- omu.network.registerPacket(
125
- REQUEST_CREATE,
126
- REQUEST_SEND,
127
- REQUEST_CLOSE,
128
- RESPONSE_CREATE,
129
- RESPONSE_CHUNK,
130
- RESPONSE_CLOSE,
131
- WEBSOCKET_CLOSE,
132
- WEBSOCKET_CREATE,
133
- WEBSOCKET_DATA,
134
- WEBSOCKET_OPEN,
135
- WEBSOCKET_ERROR,
136
- );
137
- omu.network.addPacketHandler(RESPONSE_CREATE, (packet) => {
138
- const handle = this.httpHandles[packet.id];
139
- if (!handle) {
140
- console.warn('Received response for unknown request', packet.id);
141
- return;
142
- }
143
- if (handle.type !== 'created') {
144
- console.warn('Received response for already handled request', packet.id);
145
- return;
146
- }
147
- handle.setResponse(packet);
148
- });
149
- omu.network.addPacketHandler(RESPONSE_CHUNK, (packet) => {
150
- const handle = this.httpHandles[packet.meta.id];
151
- if (!handle) {
152
- console.warn('Received response for unknown request', packet.meta.id);
153
- return;
154
- }
155
- if (handle.type !== 'receiving') {
156
- console.warn('Received chunk for non-receiving request', packet.meta.id);
157
- return;
158
- }
159
- handle.receive(packet.body);
160
- });
161
- omu.network.addPacketHandler(RESPONSE_CLOSE, (packet) => {
162
- const handle = this.httpHandles[packet.id];
163
- if (!handle) {
164
- console.warn('Received response for unknown request', packet.id);
165
- return;
166
- }
167
- if (handle.type !== 'receiving') {
168
- console.warn('Received chunk for non-receiving request', packet.id);
169
- return;
170
- }
171
- handle.close();
172
- delete this.httpHandles[packet.id];
173
- });
174
- omu.network.addPacketHandler(WEBSOCKET_OPEN, (packet) => {
175
- const handle = this.wsHandles[packet.id];
176
- if (!handle) {
177
- console.warn('Received response for unknown socket', packet.id);
178
- return;
179
- }
180
- if (handle.type !== 'created') {
181
- console.warn('Received response for already handled socket', packet.id);
182
- return;
183
- }
184
- handle.handle.open(packet);
185
- handle.type = 'receiving';
186
- });
187
- omu.network.addPacketHandler(WEBSOCKET_DATA, (packet) => {
188
- const handle = this.wsHandles[packet.meta.id];
189
- if (!handle) {
190
- console.warn('Received response for unknown socket', packet.meta.id);
191
- return;
192
- }
193
- if (handle.type !== 'receiving') {
194
- console.warn('Received chunk for non-receiving socket', packet.meta.id);
195
- return;
196
- }
197
- handle.handle.dispatch(packet);
198
- });
199
- omu.network.addPacketHandler(WEBSOCKET_CLOSE, (packet) => {
200
- const handle = this.wsHandles[packet.id];
201
- if (!handle) {
202
- console.warn('Received response for unknown socket', packet.id);
203
- return;
204
- }
205
- handle.handle.close(packet);
206
- delete this.httpHandles[packet.id];
207
- });
208
- omu.network.addPacketHandler(WEBSOCKET_ERROR, (packet) => {
209
- const handle = this.wsHandles[packet.id];
210
- if (!handle) {
211
- console.warn('Received response for unknown socket', packet.id);
212
- return;
213
- }
214
- handle.handle.error(packet);
215
- delete this.httpHandles[packet.id];
216
- });
217
- omu.event.ready.listen(() => {
218
- this.wsSendLoop();
219
- });
220
- }
221
-
222
- private async wsSendLoop() {
223
- while (this.omu.running) {
224
- const send = this.wsSendQueue.shift();
225
- if (send) {
226
- const array = await toUint8Array(send.data);
227
- const type = typeof send.data === 'string' ? WSMsgType.TEXT : WSMsgType.BINARY;
228
- this.omu.send(WEBSOCKET_DATA, new DataChunk({ id: send.id, type }, array));
229
- } else {
230
- await new Promise<void>((resolve) => {
231
- this.wsSendWaitResolve = resolve;
232
- });
233
- }
234
- }
235
- }
236
-
237
- private generateHeaders(request: Request, init?: RequestInit): Record<string, string> {
238
- const headers: Record<string, string> = {};
239
- const keys: Record<string, string> = {};
240
- const set = (key: string, value: string) => {
241
- const lowerKey = key.toLowerCase();
242
- const originalKey = keys[lowerKey];
243
- if (originalKey) {
244
- delete headers[originalKey];
245
- }
246
- headers[key] = value;
247
- keys[lowerKey] = key;
248
- };
249
- request.headers.forEach((value, key) => {
250
- set(key, value);
251
- });
252
- if (init?.headers) {
253
- if (init.headers instanceof Headers) {
254
- init.headers.forEach((value, key) => {
255
- set(key, value);
256
- });
257
- } else if (Array.isArray(init.headers)) {
258
- for (const [key, value] of init.headers) {
259
- set(key, value);
260
- }
261
- } else {
262
- for (const key in init.headers) {
263
- const value = init.headers[key];
264
- set(key, value);
265
- }
266
- }
267
- }
268
- return headers;
269
- }
270
-
271
- private generateId(): Identifier {
272
- return this.omu.app.id.join(`${performance.timeOrigin}-${this.requestCount++}`);
273
- }
274
-
275
- public async request(input: string | URL | globalThis.Request, init?: RequestInit): Promise<{ response: HttpResponse; stream: ReadableStream }> {
276
- const request = new Request(input, init);
277
- const id = this.generateId().key();
278
- this.omu.send(REQUEST_CREATE, {
279
- id,
280
- header: this.generateHeaders(request, init),
281
- method: request.method,
282
- redirect: request.redirect,
283
- url: request.url,
284
- });
285
- if (request.body) {
286
- const reader = request.body.getReader();
287
- while (true) {
288
- const result = await reader.read();
289
- if (result.done) {
290
- break;
291
- }
292
- this.omu.send(REQUEST_SEND, {
293
- meta: { id },
294
- body: result.value,
295
- });
296
- }
297
- }
298
- this.omu.send(REQUEST_CLOSE, { id });
299
- const chunks: Uint8Array[] = [];
300
- const responseFuture = createFuture<HttpResponse>();
301
- let chunkEvent = createFuture<boolean>();
302
- const setResponse = (response: HttpResponse) => {
303
- responseFuture.resolve(response);
304
- this.httpHandles[id] = {
305
- type: 'receiving',
306
- receive(data: Uint8Array<ArrayBufferLike>) {
307
- chunks.push(data);
308
- chunkEvent.resolve(true);
309
- chunkEvent = createFuture<boolean>();
310
- },
311
- close() {
312
- chunkEvent.resolve(false);
313
- },
314
- };
315
- };
316
- this.httpHandles[id] = {
317
- type: 'created',
318
- setResponse,
319
- };
320
- const response = await responseFuture.promise;
321
- return {
322
- response,
323
- stream: new ReadableStream<Uint8Array>({
324
- async start(controller) {
325
- while (await chunkEvent.promise) {
326
- const chunk = chunks.shift();
327
- if (!chunk) break;
328
- controller.enqueue(chunk);
329
- }
330
- controller.close();
331
- },
332
- }),
333
- };
334
- }
335
-
336
- public async fetch(input: string | URL | globalThis.Request, init?: RequestInit): Promise<OmuResponse> {
337
- const { response, stream } = await this.request(input, init);
338
- return new OmuResponse(
339
- new Headers(response.header),
340
- response.status >= 200 && response.status < 300,
341
- response.redirected,
342
- response.status,
343
- response.statusText,
344
- 'basic',
345
- response.url,
346
- stream,
347
- false,
348
- );
349
- }
350
-
351
- public async ws(input: string | URL | globalThis.Request, options?: {
352
- method?: string;
353
- autoclose?: boolean;
354
- autoping?: boolean;
355
- params?: Record<string, string>;
356
- headers?: Record<string, string>;
357
- }): Promise<OmuWS> {
358
- const request = new Request(input, options);
359
- const id = this.generateId();
360
- const handle = OmuWS.create({
361
- addQueue: (data) => {
362
- this.wsSendQueue.push({
363
- id: id.key(),
364
- data,
365
- });
366
- this.wsSendWaitResolve();
367
- },
368
- dispose: (options: { code?: number; reason?: string }) => {
369
- this.omu.send(WEBSOCKET_CLOSE, {
370
- id: id.key(),
371
- code: options.code,
372
- reason: options.reason,
373
- });
374
- delete this.wsHandles[id.key()];
375
- },
376
- });
377
- this.wsHandles[id.key()] = {
378
- type: 'created',
379
- handle,
380
- };
381
- this.omu.send(WEBSOCKET_CREATE, {
382
- id: id.key(),
383
- header: this.generateHeaders(request, options),
384
- method: request.method,
385
- redirect: request.redirect,
386
- url: request.url,
387
- });
388
- return handle.ws;
389
- }
390
- }
391
-
392
- async function toUint8Array(data: string | ArrayBufferLike | Blob | ArrayBufferView): Promise<Uint8Array<ArrayBufferLike>> {
393
- if (typeof data === 'string') {
394
- return textEncoder.encode(data);
395
- } else if (data instanceof Blob) {
396
- const arrayBuffer = await data.arrayBuffer();
397
- return new Uint8Array(arrayBuffer);
398
- } else {
399
- return new Uint8Array(data as ArrayBufferLike);
400
- }
401
- }
@@ -1,79 +0,0 @@
1
- import { ByteReader, ByteWriter, JsonType } from '../../serialize';
2
-
3
- export type RequestHandle = {
4
- id: string;
5
- };
6
-
7
- export type HttpRequest = RequestHandle & {
8
- header: Record<string, string>;
9
- method: string;
10
- redirect: RequestRedirect;
11
- url: string;
12
- };
13
-
14
- export class DataChunk<T extends JsonType> {
15
- constructor(
16
- public readonly meta: T,
17
- public readonly body: Uint8Array,
18
- ) { }
19
-
20
- public static serialize<T extends JsonType>(data: DataChunk<T>): Uint8Array {
21
- const writer = new ByteWriter();
22
- writer.writeJSON(data.meta);
23
- writer.writeUint8Array(data.body);
24
- return writer.finish();
25
- }
26
-
27
- public static deserialize<T extends JsonType>(data: Uint8Array): DataChunk<T> {
28
- const reader = ByteReader.fromUint8Array(data);
29
- const meta = reader.readJSON<T>();
30
- const body = reader.readUint8Array();
31
- return new DataChunk(meta, body);
32
- }
33
- }
34
-
35
- export class OmuResponse implements Response {
36
- constructor(
37
- public readonly headers: Headers,
38
- public readonly ok: boolean,
39
- public readonly redirected: boolean,
40
- public readonly status: number,
41
- public readonly statusText: string,
42
- public readonly type: ResponseType,
43
- public readonly url: string,
44
- public readonly body: ReadableStream<Uint8Array<ArrayBuffer>> | null,
45
- public readonly bodyUsed: boolean,
46
- ) {}
47
-
48
- clone(): OmuResponse {
49
- return new OmuResponse(
50
- this.headers,
51
- this.ok,
52
- this.redirected,
53
- this.status,
54
- this.statusText,
55
- this.type,
56
- this.url,
57
- this.body,
58
- this.bodyUsed,
59
- );
60
- }
61
- async arrayBuffer(): Promise<ArrayBuffer> {
62
- return await new Response(this.body).arrayBuffer();
63
- }
64
- blob(): Promise<Blob> {
65
- return new Response(this.body).blob();
66
- }
67
- bytes(): Promise<Uint8Array<ArrayBuffer>> {
68
- return new Response(this.body).arrayBuffer().then((buf) => new Uint8Array(buf));
69
- }
70
- formData(): Promise<FormData> {
71
- return new Response(this.body).formData();
72
- }
73
- json(): Promise<any> {
74
- return new Response(this.body).json();
75
- }
76
- text(): Promise<string> {
77
- return new Response(this.body).text();
78
- }
79
- }