@omujs/omu 0.9.47 → 0.9.49

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 (202) hide show
  1. package/dist/dts/api/asset/extension.d.ts +25 -0
  2. package/dist/dts/api/asset/index.d.ts +2 -0
  3. package/dist/dts/api/dashboard/extension.d.ts +183 -0
  4. package/{src/api/dashboard/handler.ts → dist/dts/api/dashboard/handler.d.ts} +0 -2
  5. package/dist/dts/api/dashboard/index.d.ts +3 -0
  6. package/dist/dts/api/dashboard/packets.d.ts +73 -0
  7. package/dist/dts/api/endpoint/endpoint.d.ts +21 -0
  8. package/dist/dts/api/endpoint/extension.d.ts +17 -0
  9. package/{src/api/endpoint/index.ts → dist/dts/api/endpoint/index.d.ts} +0 -1
  10. package/dist/dts/api/endpoint/packets.d.ts +51 -0
  11. package/dist/dts/api/extension-registry.d.ts +8 -0
  12. package/dist/dts/api/extension.d.ts +11 -0
  13. package/dist/dts/api/http/extension.d.ts +41 -0
  14. package/dist/dts/api/http/http.d.ts +36 -0
  15. package/{src/api/http/index.ts → dist/dts/api/http/index.d.ts} +0 -1
  16. package/dist/dts/api/http/websocket.d.ts +125 -0
  17. package/dist/dts/api/i18n/extension.d.ts +19 -0
  18. package/{src/api/i18n/index.ts → dist/dts/api/i18n/index.d.ts} +0 -1
  19. package/{src/api/index.ts → dist/dts/api/index.d.ts} +0 -1
  20. package/dist/dts/api/logger/extension.d.ts +25 -0
  21. package/dist/dts/api/logger/index.d.ts +1 -0
  22. package/dist/dts/api/logger/packets.d.ts +18 -0
  23. package/dist/dts/api/permission/extension.d.ts +19 -0
  24. package/{src/api/permission/index.ts → dist/dts/api/permission/index.d.ts} +0 -1
  25. package/dist/dts/api/permission/permission.d.ts +25 -0
  26. package/dist/dts/api/plugin/extension.d.ts +43 -0
  27. package/{src/api/plugin/index.ts → dist/dts/api/plugin/index.d.ts} +0 -1
  28. package/{src/api/plugin/package-info.ts → dist/dts/api/plugin/package-info.d.ts} +0 -7
  29. package/dist/dts/api/registry/extension.d.ts +23 -0
  30. package/{src/api/registry/index.ts → dist/dts/api/registry/index.d.ts} +0 -1
  31. package/dist/dts/api/registry/packets.d.ts +20 -0
  32. package/{src/api/registry/registry.ts → dist/dts/api/registry/registry.d.ts} +11 -53
  33. package/dist/dts/api/server/extension.d.ts +61 -0
  34. package/dist/dts/api/server/index.d.ts +1 -0
  35. package/dist/dts/api/session/extension.d.ts +52 -0
  36. package/dist/dts/api/session/index.d.ts +1 -0
  37. package/dist/dts/api/signal/extension.d.ts +19 -0
  38. package/dist/dts/api/signal/packets.d.ts +21 -0
  39. package/dist/dts/api/signal/signal.d.ts +33 -0
  40. package/dist/dts/api/table/extension.d.ts +26 -0
  41. package/{src/api/table/index.ts → dist/dts/api/table/index.d.ts} +0 -1
  42. package/dist/dts/api/table/packets.d.ts +65 -0
  43. package/dist/dts/api/table/table.d.ts +75 -0
  44. package/dist/dts/app.d.ts +49 -0
  45. package/dist/dts/const.d.ts +2 -0
  46. package/dist/dts/errors.d.ts +36 -0
  47. package/dist/dts/event/index.d.ts +6 -0
  48. package/dist/dts/helper.d.ts +10 -0
  49. package/dist/dts/identifier.d.ts +51 -0
  50. package/dist/dts/index.d.ts +36 -0
  51. package/{src/localization/index.ts → dist/dts/localization/index.d.ts} +0 -1
  52. package/dist/dts/localization/locale.d.ts +735 -0
  53. package/{src/localization/localization.ts → dist/dts/localization/localization.d.ts} +0 -2
  54. package/dist/dts/lock.d.ts +6 -0
  55. package/dist/dts/network/connection.d.ts +17 -0
  56. package/dist/dts/network/encryption.d.ts +38 -0
  57. package/dist/dts/network/frame-transport.d.ts +22 -0
  58. package/{src/network/index.ts → dist/dts/network/index.d.ts} +0 -1
  59. package/dist/dts/network/network.d.ts +59 -0
  60. package/{src/network/packet/index.ts → dist/dts/network/packet/index.d.ts} +0 -1
  61. package/dist/dts/network/packet/packet-types.d.ts +84 -0
  62. package/dist/dts/network/packet/packet.d.ts +25 -0
  63. package/dist/dts/network/websocket-transport.d.ts +24 -0
  64. package/dist/dts/omu.d.ts +61 -0
  65. package/dist/dts/result.d.ts +26 -0
  66. package/dist/dts/serialize/bytebuffer.d.ts +73 -0
  67. package/dist/dts/serialize/serializer.d.ts +26 -0
  68. package/dist/dts/token.d.ts +14 -0
  69. package/dist/dts/version.d.ts +2 -0
  70. package/dist/esm/address.js +4 -0
  71. package/dist/esm/api/asset/extension.js +911 -0
  72. package/dist/esm/api/asset/index.js +909 -0
  73. package/dist/esm/api/dashboard/extension.js +1362 -0
  74. package/dist/esm/api/dashboard/handler.js +4 -0
  75. package/dist/esm/api/dashboard/index.js +1361 -0
  76. package/dist/esm/api/dashboard/packets.js +419 -0
  77. package/dist/esm/api/endpoint/endpoint.js +383 -0
  78. package/dist/esm/api/endpoint/extension.js +1096 -0
  79. package/dist/esm/api/endpoint/index.js +383 -0
  80. package/dist/esm/api/endpoint/packets.js +799 -0
  81. package/dist/esm/api/extension-registry.js +23 -0
  82. package/dist/esm/api/extension.js +278 -0
  83. package/dist/esm/api/http/extension.js +1420 -0
  84. package/dist/esm/api/http/http.js +448 -0
  85. package/dist/esm/api/http/index.js +1419 -0
  86. package/dist/esm/api/http/websocket.js +220 -0
  87. package/dist/esm/api/i18n/extension.js +1339 -0
  88. package/dist/esm/api/i18n/index.js +1337 -0
  89. package/dist/esm/api/index.js +295 -0
  90. package/dist/esm/api/logger/extension.js +856 -0
  91. package/dist/esm/api/logger/index.js +852 -0
  92. package/dist/esm/api/logger/packets.js +673 -0
  93. package/dist/esm/api/permission/extension.js +535 -0
  94. package/dist/esm/api/permission/index.js +294 -0
  95. package/dist/esm/api/permission/permission.js +294 -0
  96. package/dist/esm/api/plugin/extension.js +531 -0
  97. package/dist/esm/api/plugin/index.js +529 -0
  98. package/dist/esm/api/plugin/package-info.js +4 -0
  99. package/dist/esm/api/registry/extension.js +1286 -0
  100. package/dist/esm/api/registry/index.js +1285 -0
  101. package/dist/esm/api/registry/packets.js +694 -0
  102. package/dist/esm/api/registry/registry.js +383 -0
  103. package/dist/esm/api/server/extension.js +2140 -0
  104. package/dist/esm/api/server/index.js +2118 -0
  105. package/dist/esm/api/session/extension.js +2235 -0
  106. package/dist/esm/api/session/index.js +2235 -0
  107. package/dist/esm/api/signal/extension.js +1031 -0
  108. package/dist/esm/api/signal/index.js +379 -0
  109. package/dist/esm/api/signal/packets.js +690 -0
  110. package/dist/esm/api/signal/signal.js +379 -0
  111. package/dist/esm/api/table/extension.js +1553 -0
  112. package/dist/esm/api/table/index.js +1552 -0
  113. package/dist/esm/api/table/packets.js +904 -0
  114. package/dist/esm/api/table/table.js +383 -0
  115. package/dist/esm/app.js +264 -0
  116. package/dist/esm/const.js +11 -0
  117. package/dist/esm/errors.js +548 -0
  118. package/dist/esm/event/index.js +22 -0
  119. package/dist/esm/helper.js +15 -0
  120. package/dist/esm/identifier.js +266 -0
  121. package/dist/esm/index.js +5186 -0
  122. package/dist/esm/localization/index.js +742 -0
  123. package/dist/esm/localization/locale.js +742 -0
  124. package/dist/esm/localization/localization.js +4 -0
  125. package/dist/esm/lock.js +46 -0
  126. package/dist/esm/network/connection.js +293 -0
  127. package/dist/esm/network/encryption.js +986 -0
  128. package/dist/esm/network/frame-transport.js +531 -0
  129. package/dist/esm/network/index.js +1627 -0
  130. package/dist/esm/network/network.js +1368 -0
  131. package/dist/esm/network/packet/index.js +485 -0
  132. package/dist/esm/network/packet/packet-types.js +486 -0
  133. package/dist/esm/network/packet/packet.js +126 -0
  134. package/dist/esm/network/websocket-transport.js +493 -0
  135. package/dist/esm/omu.js +4945 -0
  136. package/dist/esm/result.js +68 -0
  137. package/dist/esm/serialize/bytebuffer.js +384 -0
  138. package/dist/esm/serialize/index.js +471 -0
  139. package/dist/esm/serialize/serializer.js +97 -0
  140. package/dist/esm/token.js +42 -0
  141. package/dist/esm/version.js +11 -0
  142. package/dist/tsconfig.tsbuildinfo +1 -0
  143. package/package.json +4 -1
  144. package/CHANGELOG.md +0 -1837
  145. package/src/api/asset/extension.ts +0 -193
  146. package/src/api/asset/index.ts +0 -5
  147. package/src/api/dashboard/extension.ts +0 -651
  148. package/src/api/dashboard/index.ts +0 -38
  149. package/src/api/dashboard/packets.ts +0 -126
  150. package/src/api/endpoint/endpoint.ts +0 -56
  151. package/src/api/endpoint/extension.ts +0 -133
  152. package/src/api/endpoint/packets.ts +0 -176
  153. package/src/api/extension-registry.ts +0 -17
  154. package/src/api/extension.ts +0 -19
  155. package/src/api/http/extension.ts +0 -401
  156. package/src/api/http/http.ts +0 -79
  157. package/src/api/http/websocket.ts +0 -283
  158. package/src/api/i18n/extension.ts +0 -65
  159. package/src/api/logger/extension.ts +0 -75
  160. package/src/api/logger/index.ts +0 -4
  161. package/src/api/logger/packets.ts +0 -38
  162. package/src/api/permission/extension.ts +0 -107
  163. package/src/api/permission/permission.ts +0 -53
  164. package/src/api/plugin/extension.ts +0 -100
  165. package/src/api/registry/extension.ts +0 -326
  166. package/src/api/registry/packets.ts +0 -64
  167. package/src/api/server/extension.ts +0 -155
  168. package/src/api/server/index.ts +0 -11
  169. package/src/api/session/extension.ts +0 -205
  170. package/src/api/session/index.ts +0 -7
  171. package/src/api/signal/extension.ts +0 -125
  172. package/src/api/signal/packets.ts +0 -61
  173. package/src/api/signal/signal.ts +0 -67
  174. package/src/api/table/extension.ts +0 -554
  175. package/src/api/table/packets.ts +0 -252
  176. package/src/api/table/table.ts +0 -113
  177. package/src/app.ts +0 -95
  178. package/src/const.ts +0 -2
  179. package/src/errors.ts +0 -70
  180. package/src/event/index.ts +0 -18
  181. package/src/helper.ts +0 -16
  182. package/src/identifier.ts +0 -256
  183. package/src/index.ts +0 -87
  184. package/src/localization/locale.ts +0 -737
  185. package/src/lock.ts +0 -43
  186. package/src/network/connection.ts +0 -45
  187. package/src/network/encryption.ts +0 -221
  188. package/src/network/frame-transport.ts +0 -186
  189. package/src/network/network.ts +0 -322
  190. package/src/network/packet/packet-types.ts +0 -164
  191. package/src/network/packet/packet.ts +0 -55
  192. package/src/network/websocket-transport.ts +0 -123
  193. package/src/omu.ts +0 -156
  194. package/src/result.ts +0 -78
  195. package/src/serialize/bytebuffer.ts +0 -432
  196. package/src/serialize/serializer.ts +0 -149
  197. package/src/token.ts +0 -39
  198. package/src/version.ts +0 -2
  199. package/tsconfig.json +0 -18
  200. /package/{src/address.ts → dist/dts/address.d.ts} +0 -0
  201. /package/{src/api/signal/index.ts → dist/dts/api/signal/index.d.ts} +0 -0
  202. /package/{src/serialize/index.ts → dist/dts/serialize/index.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
- }