@ouidesigner/ouider-network 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # OUID Network
2
+
3
+ `ouid-network` installs a modular network API on the default `OUID` bridge.
4
+
5
+ ```ts
6
+ import 'ouid-network'
7
+
8
+ const res = await OUID.network.request({ url: 'https://example.com/api' })
9
+ const file = await OUID.network.download({ url: 'https://example.com/file.zip' })
10
+
11
+ await OUID.network.request({
12
+ url: 'https://example.com/api',
13
+ onHeadersReceived: ({ statusCode, headers }) => console.log(statusCode, headers)
14
+ })
15
+
16
+ await OUID.network.upload({
17
+ url: 'https://example.com/upload',
18
+ fields: { owner: 'mini-app' },
19
+ files: [{ fieldName: 'file', path: file.path }]
20
+ })
21
+
22
+ const ws = OUID.network.websocket('wss://example.com/socket')
23
+ const offMessage = await ws.onMessage((data) => console.log(data))
24
+ await ws.connect()
25
+ await offMessage()
26
+
27
+ const udp = await OUID.network.udp.open({ localPort: 9000 })
28
+ if (udp) {
29
+ await OUID.network.udp.onMessage(udp.socketId, ({ data, host, port }) => console.log(host, port, data))
30
+ await OUID.network.udp.listen(udp.socketId)
31
+ }
32
+ ```
33
+
34
+ HTTP, UDP, TCP, file transfer, and mDNS require the native `OUIDNetwork` module. WebSocket uses the host WebView `WebSocket` object through `ODOM.OObject`, matching the existing Toubani transport approach.
@@ -0,0 +1,251 @@
1
+ import { HostEventCallback } from 'ouider';
2
+
3
+ type NetworkPromise<T> = Promise<T | null>;
4
+ interface NetworkBridge {
5
+ call<T = any>(name: string, ...args: any[]): NetworkPromise<T>;
6
+ newObject(ctr: string, ...args: any[]): Promise<any>;
7
+ dettachEventListener(cbId: string): Promise<void>;
8
+ onHostEvent<T = any>(event: string, callback: HostEventCallback<T>): Promise<() => Promise<void>>;
9
+ }
10
+ type NetworkHeaders = Record<string, string>;
11
+ interface HttpRequestOptions {
12
+ requestId?: string;
13
+ url: string;
14
+ method?: string;
15
+ headers?: NetworkHeaders;
16
+ body?: any;
17
+ responseType?: 'text' | 'json' | 'base64';
18
+ timeoutMs?: number;
19
+ onHeadersReceived?: NetworkEventCallback<HeadersReceivedEvent>;
20
+ }
21
+ interface HttpResponse<T = any> {
22
+ status: string;
23
+ statusCode: number;
24
+ headers: Record<string, string[]>;
25
+ body?: T;
26
+ data?: T;
27
+ }
28
+ interface DownloadOptions extends HttpRequestOptions {
29
+ destinationPath?: string;
30
+ onProgress?: NetworkEventCallback<TransferProgressEvent>;
31
+ }
32
+ interface DownloadResult {
33
+ status: string;
34
+ statusCode: number;
35
+ path: string;
36
+ uri?: string;
37
+ size: number;
38
+ headers?: Record<string, string[]>;
39
+ }
40
+ interface UploadFile {
41
+ fieldName?: string;
42
+ fileName?: string;
43
+ mimeType?: string;
44
+ path?: string;
45
+ uri?: string;
46
+ base64?: string;
47
+ data?: string | ArrayBuffer | Uint8Array;
48
+ }
49
+ interface UploadOptions extends HttpRequestOptions {
50
+ fields?: Record<string, any>;
51
+ files?: UploadFile[];
52
+ file?: UploadFile;
53
+ onProgress?: NetworkEventCallback<TransferProgressEvent>;
54
+ }
55
+ interface UdpOpenOptions {
56
+ host?: string;
57
+ port?: number;
58
+ localPort?: number;
59
+ broadcast?: boolean;
60
+ timeoutMs?: number;
61
+ }
62
+ interface SocketIdResult {
63
+ status: string;
64
+ socketId: string;
65
+ localPort?: number;
66
+ }
67
+ interface UdpSendOptions {
68
+ socketId: string;
69
+ host?: string;
70
+ port?: number;
71
+ data: string | ArrayBuffer | Uint8Array;
72
+ encoding?: 'utf8' | 'base64';
73
+ }
74
+ interface UdpReceiveOptions {
75
+ socketId: string;
76
+ maxBytes?: number;
77
+ timeoutMs?: number;
78
+ encoding?: 'utf8' | 'base64';
79
+ }
80
+ interface SocketListenOptions {
81
+ maxBytes?: number;
82
+ encoding?: 'utf8' | 'base64';
83
+ }
84
+ interface SocketReceiveResult {
85
+ status: string;
86
+ data: string;
87
+ base64?: string;
88
+ host?: string;
89
+ port?: number;
90
+ bytesRead: number;
91
+ }
92
+ interface TcpConnectOptions {
93
+ host: string;
94
+ port: number;
95
+ timeoutMs?: number;
96
+ }
97
+ interface TcpSendOptions {
98
+ socketId: string;
99
+ data: string | ArrayBuffer | Uint8Array;
100
+ encoding?: 'utf8' | 'base64';
101
+ }
102
+ interface TcpReadOptions {
103
+ socketId: string;
104
+ maxBytes?: number;
105
+ timeoutMs?: number;
106
+ encoding?: 'utf8' | 'base64';
107
+ }
108
+ type NetworkEventCallback<T> = (data: T) => void;
109
+ type NetworkEventName = 'ouid.network.headersReceived' | 'ouid.network.downloadProgress' | 'ouid.network.uploadProgress' | 'ouid.network.udp.message' | 'ouid.network.udp.error' | 'ouid.network.udp.close' | 'ouid.network.tcp.open' | 'ouid.network.tcp.message' | 'ouid.network.tcp.error' | 'ouid.network.tcp.close';
110
+ interface HeadersReceivedEvent {
111
+ requestId: string;
112
+ url?: string;
113
+ statusCode: number;
114
+ headers: Record<string, string[]>;
115
+ }
116
+ interface TransferProgressEvent {
117
+ requestId: string;
118
+ url?: string;
119
+ bytesTransferred: number;
120
+ totalBytes?: number;
121
+ }
122
+ interface SocketMessageEvent extends SocketReceiveResult {
123
+ socketId: string;
124
+ }
125
+ interface SocketErrorEvent {
126
+ socketId: string;
127
+ code?: string;
128
+ message: string;
129
+ }
130
+ interface SocketCloseEvent {
131
+ socketId: string;
132
+ }
133
+ interface MdnsBrowseOptions {
134
+ serviceType: string;
135
+ domain?: string;
136
+ timeoutMs?: number;
137
+ }
138
+ interface MdnsService {
139
+ name: string;
140
+ type?: string;
141
+ domain?: string;
142
+ host?: string;
143
+ port?: number;
144
+ addresses?: string[];
145
+ attributes?: Record<string, string>;
146
+ }
147
+ interface MdnsBrowseResult {
148
+ status: string;
149
+ services: MdnsService[];
150
+ }
151
+ interface MdnsRegisterOptions {
152
+ name: string;
153
+ serviceType: string;
154
+ port: number;
155
+ domain?: string;
156
+ attributes?: Record<string, string>;
157
+ }
158
+ interface MdnsRegisterResult {
159
+ status: string;
160
+ serviceId: string;
161
+ service: MdnsService;
162
+ }
163
+ interface WebSocketTransport {
164
+ connect(): Promise<void>;
165
+ send(data: string | ArrayBuffer | Uint8Array): Promise<void>;
166
+ close(code?: number, reason?: string): Promise<void>;
167
+ isConnected(): boolean;
168
+ onOpen(callback: () => void): void;
169
+ onMessage(callback: (data: any) => void): Promise<() => Promise<void>>;
170
+ onClose(callback: (event?: any) => void): void;
171
+ onError(callback: (error: any) => void): void;
172
+ }
173
+ interface OUIDNetworkModule {
174
+ request<T = any>(options: HttpRequestOptions): NetworkPromise<HttpResponse<T>>;
175
+ download(options: DownloadOptions | string): NetworkPromise<DownloadResult>;
176
+ upload<T = any>(options: UploadOptions): NetworkPromise<HttpResponse<T>>;
177
+ websocket(url: string, protocols?: string | string[]): WebSocketTransport;
178
+ on<T = any>(event: NetworkEventName | string, callback: NetworkEventCallback<T>): Promise<() => Promise<void>>;
179
+ onHeadersReceived(callback: NetworkEventCallback<HeadersReceivedEvent>, requestId?: string): Promise<() => Promise<void>>;
180
+ http: {
181
+ request<T = any>(options: HttpRequestOptions): NetworkPromise<HttpResponse<T>>;
182
+ download(options: DownloadOptions | string): NetworkPromise<DownloadResult>;
183
+ upload<T = any>(options: UploadOptions): NetworkPromise<HttpResponse<T>>;
184
+ onHeadersReceived(callback: NetworkEventCallback<HeadersReceivedEvent>, requestId?: string): Promise<() => Promise<void>>;
185
+ };
186
+ udp: {
187
+ open(options?: UdpOpenOptions): NetworkPromise<SocketIdResult>;
188
+ send(options: UdpSendOptions): NetworkPromise<{
189
+ status: string;
190
+ bytesSent: number;
191
+ }>;
192
+ receive(options: UdpReceiveOptions): NetworkPromise<SocketReceiveResult>;
193
+ listen(socketId: string, options?: SocketListenOptions): NetworkPromise<{
194
+ status: string;
195
+ socketId: string;
196
+ }>;
197
+ unlisten(socketId: string): NetworkPromise<{
198
+ status: string;
199
+ socketId: string;
200
+ }>;
201
+ onMessage(socketId: string, callback: NetworkEventCallback<SocketMessageEvent>): Promise<() => Promise<void>>;
202
+ onError(socketId: string, callback: NetworkEventCallback<SocketErrorEvent>): Promise<() => Promise<void>>;
203
+ onClose(socketId: string, callback: NetworkEventCallback<SocketCloseEvent>): Promise<() => Promise<void>>;
204
+ close(socketId: string): NetworkPromise<{
205
+ status: string;
206
+ socketId: string;
207
+ }>;
208
+ };
209
+ tcp: {
210
+ connect(options: TcpConnectOptions): NetworkPromise<SocketIdResult>;
211
+ send(options: TcpSendOptions): NetworkPromise<{
212
+ status: string;
213
+ bytesSent: number;
214
+ }>;
215
+ read(options: TcpReadOptions): NetworkPromise<SocketReceiveResult>;
216
+ listen(socketId: string, options?: SocketListenOptions): NetworkPromise<{
217
+ status: string;
218
+ socketId: string;
219
+ }>;
220
+ unlisten(socketId: string): NetworkPromise<{
221
+ status: string;
222
+ socketId: string;
223
+ }>;
224
+ onOpen(socketId: string, callback: NetworkEventCallback<SocketIdResult>): Promise<() => Promise<void>>;
225
+ onMessage(socketId: string, callback: NetworkEventCallback<SocketMessageEvent>): Promise<() => Promise<void>>;
226
+ onError(socketId: string, callback: NetworkEventCallback<SocketErrorEvent>): Promise<() => Promise<void>>;
227
+ onClose(socketId: string, callback: NetworkEventCallback<SocketCloseEvent>): Promise<() => Promise<void>>;
228
+ close(socketId: string): NetworkPromise<{
229
+ status: string;
230
+ socketId: string;
231
+ }>;
232
+ };
233
+ mdns: {
234
+ browse(options: MdnsBrowseOptions): NetworkPromise<MdnsBrowseResult>;
235
+ register(options: MdnsRegisterOptions): NetworkPromise<MdnsRegisterResult>;
236
+ stop(serviceId: string): NetworkPromise<{
237
+ status: string;
238
+ serviceId: string;
239
+ }>;
240
+ };
241
+ }
242
+ declare function createOUIDNetwork(bridge?: NetworkBridge): OUIDNetworkModule;
243
+ declare function installOUIDNetwork(bridge?: NetworkBridge): OUIDNetworkModule;
244
+ declare const OUIDNetwork: OUIDNetworkModule;
245
+ declare module 'ouider' {
246
+ interface OUIDBridge {
247
+ network: OUIDNetworkModule;
248
+ }
249
+ }
250
+
251
+ export { type DownloadOptions, type DownloadResult, type HeadersReceivedEvent, type HttpRequestOptions, type HttpResponse, type MdnsBrowseOptions, type MdnsBrowseResult, type MdnsRegisterOptions, type MdnsRegisterResult, type MdnsService, type NetworkBridge, type NetworkEventCallback, type NetworkEventName, type NetworkHeaders, type NetworkPromise, OUIDNetwork, type OUIDNetworkModule, type SocketCloseEvent, type SocketErrorEvent, type SocketIdResult, type SocketListenOptions, type SocketMessageEvent, type SocketReceiveResult, type TcpConnectOptions, type TcpReadOptions, type TcpSendOptions, type TransferProgressEvent, type UdpOpenOptions, type UdpReceiveOptions, type UdpSendOptions, type UploadFile, type UploadOptions, type WebSocketTransport, createOUIDNetwork, installOUIDNetwork };
@@ -0,0 +1,251 @@
1
+ import { HostEventCallback } from 'ouider';
2
+
3
+ type NetworkPromise<T> = Promise<T | null>;
4
+ interface NetworkBridge {
5
+ call<T = any>(name: string, ...args: any[]): NetworkPromise<T>;
6
+ newObject(ctr: string, ...args: any[]): Promise<any>;
7
+ dettachEventListener(cbId: string): Promise<void>;
8
+ onHostEvent<T = any>(event: string, callback: HostEventCallback<T>): Promise<() => Promise<void>>;
9
+ }
10
+ type NetworkHeaders = Record<string, string>;
11
+ interface HttpRequestOptions {
12
+ requestId?: string;
13
+ url: string;
14
+ method?: string;
15
+ headers?: NetworkHeaders;
16
+ body?: any;
17
+ responseType?: 'text' | 'json' | 'base64';
18
+ timeoutMs?: number;
19
+ onHeadersReceived?: NetworkEventCallback<HeadersReceivedEvent>;
20
+ }
21
+ interface HttpResponse<T = any> {
22
+ status: string;
23
+ statusCode: number;
24
+ headers: Record<string, string[]>;
25
+ body?: T;
26
+ data?: T;
27
+ }
28
+ interface DownloadOptions extends HttpRequestOptions {
29
+ destinationPath?: string;
30
+ onProgress?: NetworkEventCallback<TransferProgressEvent>;
31
+ }
32
+ interface DownloadResult {
33
+ status: string;
34
+ statusCode: number;
35
+ path: string;
36
+ uri?: string;
37
+ size: number;
38
+ headers?: Record<string, string[]>;
39
+ }
40
+ interface UploadFile {
41
+ fieldName?: string;
42
+ fileName?: string;
43
+ mimeType?: string;
44
+ path?: string;
45
+ uri?: string;
46
+ base64?: string;
47
+ data?: string | ArrayBuffer | Uint8Array;
48
+ }
49
+ interface UploadOptions extends HttpRequestOptions {
50
+ fields?: Record<string, any>;
51
+ files?: UploadFile[];
52
+ file?: UploadFile;
53
+ onProgress?: NetworkEventCallback<TransferProgressEvent>;
54
+ }
55
+ interface UdpOpenOptions {
56
+ host?: string;
57
+ port?: number;
58
+ localPort?: number;
59
+ broadcast?: boolean;
60
+ timeoutMs?: number;
61
+ }
62
+ interface SocketIdResult {
63
+ status: string;
64
+ socketId: string;
65
+ localPort?: number;
66
+ }
67
+ interface UdpSendOptions {
68
+ socketId: string;
69
+ host?: string;
70
+ port?: number;
71
+ data: string | ArrayBuffer | Uint8Array;
72
+ encoding?: 'utf8' | 'base64';
73
+ }
74
+ interface UdpReceiveOptions {
75
+ socketId: string;
76
+ maxBytes?: number;
77
+ timeoutMs?: number;
78
+ encoding?: 'utf8' | 'base64';
79
+ }
80
+ interface SocketListenOptions {
81
+ maxBytes?: number;
82
+ encoding?: 'utf8' | 'base64';
83
+ }
84
+ interface SocketReceiveResult {
85
+ status: string;
86
+ data: string;
87
+ base64?: string;
88
+ host?: string;
89
+ port?: number;
90
+ bytesRead: number;
91
+ }
92
+ interface TcpConnectOptions {
93
+ host: string;
94
+ port: number;
95
+ timeoutMs?: number;
96
+ }
97
+ interface TcpSendOptions {
98
+ socketId: string;
99
+ data: string | ArrayBuffer | Uint8Array;
100
+ encoding?: 'utf8' | 'base64';
101
+ }
102
+ interface TcpReadOptions {
103
+ socketId: string;
104
+ maxBytes?: number;
105
+ timeoutMs?: number;
106
+ encoding?: 'utf8' | 'base64';
107
+ }
108
+ type NetworkEventCallback<T> = (data: T) => void;
109
+ type NetworkEventName = 'ouid.network.headersReceived' | 'ouid.network.downloadProgress' | 'ouid.network.uploadProgress' | 'ouid.network.udp.message' | 'ouid.network.udp.error' | 'ouid.network.udp.close' | 'ouid.network.tcp.open' | 'ouid.network.tcp.message' | 'ouid.network.tcp.error' | 'ouid.network.tcp.close';
110
+ interface HeadersReceivedEvent {
111
+ requestId: string;
112
+ url?: string;
113
+ statusCode: number;
114
+ headers: Record<string, string[]>;
115
+ }
116
+ interface TransferProgressEvent {
117
+ requestId: string;
118
+ url?: string;
119
+ bytesTransferred: number;
120
+ totalBytes?: number;
121
+ }
122
+ interface SocketMessageEvent extends SocketReceiveResult {
123
+ socketId: string;
124
+ }
125
+ interface SocketErrorEvent {
126
+ socketId: string;
127
+ code?: string;
128
+ message: string;
129
+ }
130
+ interface SocketCloseEvent {
131
+ socketId: string;
132
+ }
133
+ interface MdnsBrowseOptions {
134
+ serviceType: string;
135
+ domain?: string;
136
+ timeoutMs?: number;
137
+ }
138
+ interface MdnsService {
139
+ name: string;
140
+ type?: string;
141
+ domain?: string;
142
+ host?: string;
143
+ port?: number;
144
+ addresses?: string[];
145
+ attributes?: Record<string, string>;
146
+ }
147
+ interface MdnsBrowseResult {
148
+ status: string;
149
+ services: MdnsService[];
150
+ }
151
+ interface MdnsRegisterOptions {
152
+ name: string;
153
+ serviceType: string;
154
+ port: number;
155
+ domain?: string;
156
+ attributes?: Record<string, string>;
157
+ }
158
+ interface MdnsRegisterResult {
159
+ status: string;
160
+ serviceId: string;
161
+ service: MdnsService;
162
+ }
163
+ interface WebSocketTransport {
164
+ connect(): Promise<void>;
165
+ send(data: string | ArrayBuffer | Uint8Array): Promise<void>;
166
+ close(code?: number, reason?: string): Promise<void>;
167
+ isConnected(): boolean;
168
+ onOpen(callback: () => void): void;
169
+ onMessage(callback: (data: any) => void): Promise<() => Promise<void>>;
170
+ onClose(callback: (event?: any) => void): void;
171
+ onError(callback: (error: any) => void): void;
172
+ }
173
+ interface OUIDNetworkModule {
174
+ request<T = any>(options: HttpRequestOptions): NetworkPromise<HttpResponse<T>>;
175
+ download(options: DownloadOptions | string): NetworkPromise<DownloadResult>;
176
+ upload<T = any>(options: UploadOptions): NetworkPromise<HttpResponse<T>>;
177
+ websocket(url: string, protocols?: string | string[]): WebSocketTransport;
178
+ on<T = any>(event: NetworkEventName | string, callback: NetworkEventCallback<T>): Promise<() => Promise<void>>;
179
+ onHeadersReceived(callback: NetworkEventCallback<HeadersReceivedEvent>, requestId?: string): Promise<() => Promise<void>>;
180
+ http: {
181
+ request<T = any>(options: HttpRequestOptions): NetworkPromise<HttpResponse<T>>;
182
+ download(options: DownloadOptions | string): NetworkPromise<DownloadResult>;
183
+ upload<T = any>(options: UploadOptions): NetworkPromise<HttpResponse<T>>;
184
+ onHeadersReceived(callback: NetworkEventCallback<HeadersReceivedEvent>, requestId?: string): Promise<() => Promise<void>>;
185
+ };
186
+ udp: {
187
+ open(options?: UdpOpenOptions): NetworkPromise<SocketIdResult>;
188
+ send(options: UdpSendOptions): NetworkPromise<{
189
+ status: string;
190
+ bytesSent: number;
191
+ }>;
192
+ receive(options: UdpReceiveOptions): NetworkPromise<SocketReceiveResult>;
193
+ listen(socketId: string, options?: SocketListenOptions): NetworkPromise<{
194
+ status: string;
195
+ socketId: string;
196
+ }>;
197
+ unlisten(socketId: string): NetworkPromise<{
198
+ status: string;
199
+ socketId: string;
200
+ }>;
201
+ onMessage(socketId: string, callback: NetworkEventCallback<SocketMessageEvent>): Promise<() => Promise<void>>;
202
+ onError(socketId: string, callback: NetworkEventCallback<SocketErrorEvent>): Promise<() => Promise<void>>;
203
+ onClose(socketId: string, callback: NetworkEventCallback<SocketCloseEvent>): Promise<() => Promise<void>>;
204
+ close(socketId: string): NetworkPromise<{
205
+ status: string;
206
+ socketId: string;
207
+ }>;
208
+ };
209
+ tcp: {
210
+ connect(options: TcpConnectOptions): NetworkPromise<SocketIdResult>;
211
+ send(options: TcpSendOptions): NetworkPromise<{
212
+ status: string;
213
+ bytesSent: number;
214
+ }>;
215
+ read(options: TcpReadOptions): NetworkPromise<SocketReceiveResult>;
216
+ listen(socketId: string, options?: SocketListenOptions): NetworkPromise<{
217
+ status: string;
218
+ socketId: string;
219
+ }>;
220
+ unlisten(socketId: string): NetworkPromise<{
221
+ status: string;
222
+ socketId: string;
223
+ }>;
224
+ onOpen(socketId: string, callback: NetworkEventCallback<SocketIdResult>): Promise<() => Promise<void>>;
225
+ onMessage(socketId: string, callback: NetworkEventCallback<SocketMessageEvent>): Promise<() => Promise<void>>;
226
+ onError(socketId: string, callback: NetworkEventCallback<SocketErrorEvent>): Promise<() => Promise<void>>;
227
+ onClose(socketId: string, callback: NetworkEventCallback<SocketCloseEvent>): Promise<() => Promise<void>>;
228
+ close(socketId: string): NetworkPromise<{
229
+ status: string;
230
+ socketId: string;
231
+ }>;
232
+ };
233
+ mdns: {
234
+ browse(options: MdnsBrowseOptions): NetworkPromise<MdnsBrowseResult>;
235
+ register(options: MdnsRegisterOptions): NetworkPromise<MdnsRegisterResult>;
236
+ stop(serviceId: string): NetworkPromise<{
237
+ status: string;
238
+ serviceId: string;
239
+ }>;
240
+ };
241
+ }
242
+ declare function createOUIDNetwork(bridge?: NetworkBridge): OUIDNetworkModule;
243
+ declare function installOUIDNetwork(bridge?: NetworkBridge): OUIDNetworkModule;
244
+ declare const OUIDNetwork: OUIDNetworkModule;
245
+ declare module 'ouider' {
246
+ interface OUIDBridge {
247
+ network: OUIDNetworkModule;
248
+ }
249
+ }
250
+
251
+ export { type DownloadOptions, type DownloadResult, type HeadersReceivedEvent, type HttpRequestOptions, type HttpResponse, type MdnsBrowseOptions, type MdnsBrowseResult, type MdnsRegisterOptions, type MdnsRegisterResult, type MdnsService, type NetworkBridge, type NetworkEventCallback, type NetworkEventName, type NetworkHeaders, type NetworkPromise, OUIDNetwork, type OUIDNetworkModule, type SocketCloseEvent, type SocketErrorEvent, type SocketIdResult, type SocketListenOptions, type SocketMessageEvent, type SocketReceiveResult, type TcpConnectOptions, type TcpReadOptions, type TcpSendOptions, type TransferProgressEvent, type UdpOpenOptions, type UdpReceiveOptions, type UdpSendOptions, type UploadFile, type UploadOptions, type WebSocketTransport, createOUIDNetwork, installOUIDNetwork };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ 'use strict';var ouider=require('ouider');function a(e,r,n,o){return e.call(r,n,o)}function y(e){return typeof e=="string"?{url:e}:e}function h(){return `net_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`}function k(e){var r;return {...e,requestId:(r=e.requestId)!=null?r:h()}}async function l(e,r,n,o,c){return e.onHostEvent(r,d=>{n&&o!=null&&(d==null?void 0:d[n])!==o||c(d);})}function p(e,r){if(typeof e=="string")return r==="base64"?{base64:e,encoding:"base64"}:{data:e,encoding:"utf8"};let n=e instanceof Uint8Array?e:new Uint8Array(e);return {base64:I(n),encoding:"base64"}}function w(e){if(e.data==null||typeof e.data=="string")return e;let r=p(e.data,"base64"),{data:n,...o}=e;return {...o,base64:r.base64}}function P(e){var r;return {...e,file:e.file?w(e.file):void 0,files:(r=e.files)==null?void 0:r.map(w)}}function I(e){var o,c;let r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n="";for(let d=0;d<e.length;d+=3){let t=e[d],s=(o=e[d+1])!=null?o:0,i=(c=e[d+2])!=null?c:0,u=t<<16|s<<8|i;n+=r[u>>18&63],n+=r[u>>12&63],n+=d+1<e.length?r[u>>6&63]:"=",n+=d+2<e.length?r[u&63]:"=";}return n}var v=class{constructor(r,n,o){this.bridge=r;this.url=n;this.protocols=o;this.opened=false;this.socket=null;this.listenerIds=[];this.openHandlers=[];this.messageHandlers=[];this.closeHandlers=[];this.errorHandlers=[];}async connect(){if(this.socket){let n=await this.socket.getProperty("readyState");if(n===0||n===1)return;await this.cleanup();}let r=this.protocols===void 0?[this.url]:[this.url,this.protocols];this.socket=ouider.ODOM.OObject.toInstance(await this.bridge.newObject("WebSocket",...r)),this.listenerIds.push(await this.socket.addEventListener("open",()=>{this.opened=true,this.openHandlers.forEach(n=>n());})),this.listenerIds.push(await this.socket.addEventListener("message",n=>{this.messageHandlers.forEach(o=>{var c;return o((c=n==null?void 0:n.data)!=null?c:n)});})),this.listenerIds.push(await this.socket.addEventListener("close",n=>{this.opened=false,this.closeHandlers.forEach(o=>o(n));})),this.listenerIds.push(await this.socket.addEventListener("error",n=>{this.errorHandlers.forEach(o=>o(n));})),await new Promise((n,o)=>{let c=()=>{s(),n();},d=i=>{s(),o(i);},t=i=>{s(),o(i);},s=()=>{this.openHandlers=this.openHandlers.filter(i=>i!==c),this.errorHandlers=this.errorHandlers.filter(i=>i!==d),this.closeHandlers=this.closeHandlers.filter(i=>i!==t);};this.onOpen(c),this.onError(d),this.onClose(t);});}async send(r){var o;if(!this.socket)return;let n=typeof r=="string"?r:(o=p(r,"base64").base64)!=null?o:"";await this.socket.invoke("send",n);}async close(r,n){this.socket&&await this.socket.invoke("close",r,n),await this.cleanup();}isConnected(){return this.opened}onOpen(r){this.openHandlers.push(r);}async onMessage(r){return this.messageHandlers.push(r),async()=>{this.messageHandlers=this.messageHandlers.filter(n=>n!==r);}}onClose(r){this.closeHandlers.push(r);}onError(r){this.errorHandlers.push(r);}async cleanup(){let r=this.socket;this.socket=null,this.opened=false,await Promise.all(this.listenerIds.map(n=>this.bridge.dettachEventListener(n))),this.listenerIds=[],r==null||r.release();}};function R(e=ouider.OUID){let r=async t=>{let s=k(t),i=t.onHeadersReceived?await l(e,"ouid.network.headersReceived","requestId",s.requestId,t.onHeadersReceived):void 0;try{return await a(e,"network","request",g(s))}finally{await(i==null?void 0:i());}},n=async t=>{let s=k(y(t)),i=s.onHeadersReceived?await l(e,"ouid.network.headersReceived","requestId",s.requestId,s.onHeadersReceived):void 0,u=s.onProgress?await l(e,"ouid.network.downloadProgress","requestId",s.requestId,s.onProgress):void 0;try{return await a(e,"network","download",g(s))}finally{await(i==null?void 0:i()),await(u==null?void 0:u());}},o=async t=>{let s=k(P(t)),i=s.onHeadersReceived?await l(e,"ouid.network.headersReceived","requestId",s.requestId,s.onHeadersReceived):void 0,u=s.onProgress?await l(e,"ouid.network.uploadProgress","requestId",s.requestId,s.onProgress):void 0;try{return await a(e,"network","upload",g(s))}finally{await(i==null?void 0:i()),await(u==null?void 0:u());}},c=(t,s)=>l(e,"ouid.network.headersReceived","requestId",s,t);return {request:r,download:n,upload:o,websocket:(t,s)=>new v(e,t,s),on:(t,s)=>e.onHostEvent(t,i=>s(i)),onHeadersReceived:c,http:{request:r,download:n,upload:o,onHeadersReceived:c},udp:{open:t=>a(e,"udp","open",t!=null?t:{}),send:t=>a(e,"udp","send",{...t,...p(t.data,t.encoding)}),receive:t=>a(e,"udp","receive",t),listen:(t,s)=>a(e,"udp","listen",{socketId:t,...s}),unlisten:t=>a(e,"udp","unlisten",{socketId:t}),onMessage:(t,s)=>l(e,"ouid.network.udp.message","socketId",t,s),onError:(t,s)=>l(e,"ouid.network.udp.error","socketId",t,s),onClose:(t,s)=>l(e,"ouid.network.udp.close","socketId",t,s),close:t=>a(e,"udp","close",{socketId:t})},tcp:{connect:t=>a(e,"tcp","connect",t),send:t=>a(e,"tcp","send",{...t,...p(t.data,t.encoding)}),read:t=>a(e,"tcp","read",t),listen:(t,s)=>a(e,"tcp","listen",{socketId:t,...s}),unlisten:t=>a(e,"tcp","unlisten",{socketId:t}),onOpen:(t,s)=>l(e,"ouid.network.tcp.open","socketId",t,s),onMessage:(t,s)=>l(e,"ouid.network.tcp.message","socketId",t,s),onError:(t,s)=>l(e,"ouid.network.tcp.error","socketId",t,s),onClose:(t,s)=>l(e,"ouid.network.tcp.close","socketId",t,s),close:t=>a(e,"tcp","close",{socketId:t})},mdns:{browse:t=>a(e,"mdns","browse",t),register:t=>a(e,"mdns","register",t),stop:t=>a(e,"mdns","stop",{serviceId:t})}}}function g(e){let{onHeadersReceived:r,onProgress:n,...o}=e;return o}function b(e=ouider.OUID){let r=R(e);return Object.defineProperty(e,"network",{value:r,configurable:true,enumerable:false,writable:true}),r}var O=b();exports.OUIDNetwork=O;exports.createOUIDNetwork=R;exports.installOUIDNetwork=b;
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import {OUID,ODOM}from'ouider';function a(e,r,n,o){return e.call(r,n,o)}function y(e){return typeof e=="string"?{url:e}:e}function h(){return `net_${Date.now().toString(36)}_${Math.random().toString(36).slice(2)}`}function k(e){var r;return {...e,requestId:(r=e.requestId)!=null?r:h()}}async function l(e,r,n,o,c){return e.onHostEvent(r,d=>{n&&o!=null&&(d==null?void 0:d[n])!==o||c(d);})}function p(e,r){if(typeof e=="string")return r==="base64"?{base64:e,encoding:"base64"}:{data:e,encoding:"utf8"};let n=e instanceof Uint8Array?e:new Uint8Array(e);return {base64:I(n),encoding:"base64"}}function w(e){if(e.data==null||typeof e.data=="string")return e;let r=p(e.data,"base64"),{data:n,...o}=e;return {...o,base64:r.base64}}function P(e){var r;return {...e,file:e.file?w(e.file):void 0,files:(r=e.files)==null?void 0:r.map(w)}}function I(e){var o,c;let r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",n="";for(let d=0;d<e.length;d+=3){let t=e[d],s=(o=e[d+1])!=null?o:0,i=(c=e[d+2])!=null?c:0,u=t<<16|s<<8|i;n+=r[u>>18&63],n+=r[u>>12&63],n+=d+1<e.length?r[u>>6&63]:"=",n+=d+2<e.length?r[u&63]:"=";}return n}var v=class{constructor(r,n,o){this.bridge=r;this.url=n;this.protocols=o;this.opened=false;this.socket=null;this.listenerIds=[];this.openHandlers=[];this.messageHandlers=[];this.closeHandlers=[];this.errorHandlers=[];}async connect(){if(this.socket){let n=await this.socket.getProperty("readyState");if(n===0||n===1)return;await this.cleanup();}let r=this.protocols===void 0?[this.url]:[this.url,this.protocols];this.socket=ODOM.OObject.toInstance(await this.bridge.newObject("WebSocket",...r)),this.listenerIds.push(await this.socket.addEventListener("open",()=>{this.opened=true,this.openHandlers.forEach(n=>n());})),this.listenerIds.push(await this.socket.addEventListener("message",n=>{this.messageHandlers.forEach(o=>{var c;return o((c=n==null?void 0:n.data)!=null?c:n)});})),this.listenerIds.push(await this.socket.addEventListener("close",n=>{this.opened=false,this.closeHandlers.forEach(o=>o(n));})),this.listenerIds.push(await this.socket.addEventListener("error",n=>{this.errorHandlers.forEach(o=>o(n));})),await new Promise((n,o)=>{let c=()=>{s(),n();},d=i=>{s(),o(i);},t=i=>{s(),o(i);},s=()=>{this.openHandlers=this.openHandlers.filter(i=>i!==c),this.errorHandlers=this.errorHandlers.filter(i=>i!==d),this.closeHandlers=this.closeHandlers.filter(i=>i!==t);};this.onOpen(c),this.onError(d),this.onClose(t);});}async send(r){var o;if(!this.socket)return;let n=typeof r=="string"?r:(o=p(r,"base64").base64)!=null?o:"";await this.socket.invoke("send",n);}async close(r,n){this.socket&&await this.socket.invoke("close",r,n),await this.cleanup();}isConnected(){return this.opened}onOpen(r){this.openHandlers.push(r);}async onMessage(r){return this.messageHandlers.push(r),async()=>{this.messageHandlers=this.messageHandlers.filter(n=>n!==r);}}onClose(r){this.closeHandlers.push(r);}onError(r){this.errorHandlers.push(r);}async cleanup(){let r=this.socket;this.socket=null,this.opened=false,await Promise.all(this.listenerIds.map(n=>this.bridge.dettachEventListener(n))),this.listenerIds=[],r==null||r.release();}};function R(e=OUID){let r=async t=>{let s=k(t),i=t.onHeadersReceived?await l(e,"ouid.network.headersReceived","requestId",s.requestId,t.onHeadersReceived):void 0;try{return await a(e,"network","request",g(s))}finally{await(i==null?void 0:i());}},n=async t=>{let s=k(y(t)),i=s.onHeadersReceived?await l(e,"ouid.network.headersReceived","requestId",s.requestId,s.onHeadersReceived):void 0,u=s.onProgress?await l(e,"ouid.network.downloadProgress","requestId",s.requestId,s.onProgress):void 0;try{return await a(e,"network","download",g(s))}finally{await(i==null?void 0:i()),await(u==null?void 0:u());}},o=async t=>{let s=k(P(t)),i=s.onHeadersReceived?await l(e,"ouid.network.headersReceived","requestId",s.requestId,s.onHeadersReceived):void 0,u=s.onProgress?await l(e,"ouid.network.uploadProgress","requestId",s.requestId,s.onProgress):void 0;try{return await a(e,"network","upload",g(s))}finally{await(i==null?void 0:i()),await(u==null?void 0:u());}},c=(t,s)=>l(e,"ouid.network.headersReceived","requestId",s,t);return {request:r,download:n,upload:o,websocket:(t,s)=>new v(e,t,s),on:(t,s)=>e.onHostEvent(t,i=>s(i)),onHeadersReceived:c,http:{request:r,download:n,upload:o,onHeadersReceived:c},udp:{open:t=>a(e,"udp","open",t!=null?t:{}),send:t=>a(e,"udp","send",{...t,...p(t.data,t.encoding)}),receive:t=>a(e,"udp","receive",t),listen:(t,s)=>a(e,"udp","listen",{socketId:t,...s}),unlisten:t=>a(e,"udp","unlisten",{socketId:t}),onMessage:(t,s)=>l(e,"ouid.network.udp.message","socketId",t,s),onError:(t,s)=>l(e,"ouid.network.udp.error","socketId",t,s),onClose:(t,s)=>l(e,"ouid.network.udp.close","socketId",t,s),close:t=>a(e,"udp","close",{socketId:t})},tcp:{connect:t=>a(e,"tcp","connect",t),send:t=>a(e,"tcp","send",{...t,...p(t.data,t.encoding)}),read:t=>a(e,"tcp","read",t),listen:(t,s)=>a(e,"tcp","listen",{socketId:t,...s}),unlisten:t=>a(e,"tcp","unlisten",{socketId:t}),onOpen:(t,s)=>l(e,"ouid.network.tcp.open","socketId",t,s),onMessage:(t,s)=>l(e,"ouid.network.tcp.message","socketId",t,s),onError:(t,s)=>l(e,"ouid.network.tcp.error","socketId",t,s),onClose:(t,s)=>l(e,"ouid.network.tcp.close","socketId",t,s),close:t=>a(e,"tcp","close",{socketId:t})},mdns:{browse:t=>a(e,"mdns","browse",t),register:t=>a(e,"mdns","register",t),stop:t=>a(e,"mdns","stop",{serviceId:t})}}}function g(e){let{onHeadersReceived:r,onProgress:n,...o}=e;return o}function b(e=OUID){let r=R(e);return Object.defineProperty(e,"network",{value:r,configurable:true,enumerable:false,writable:true}),r}var O=b();export{O as OUIDNetwork,R as createOUIDNetwork,b as installOUIDNetwork};
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@ouidesigner/ouider-network",
3
+ "version": "0.1.0",
4
+ "description": "Optional native and WebView-backed network APIs for OUID.",
5
+ "main": "dist/index.js",
6
+ "scripts": {
7
+ "clean": "rm -rf dist",
8
+ "build": "npm run clean && tsup",
9
+ "test": "npm run build"
10
+ },
11
+ "keywords": [
12
+ "ouider",
13
+ "ouid",
14
+ "network",
15
+ "bridge"
16
+ ],
17
+ "author": "",
18
+ "license": "MIT",
19
+ "type": "commonjs",
20
+ "peerDependencies": {
21
+ "ouider": "^0.2.6"
22
+ },
23
+ "devDependencies": {
24
+ "@types/node": "^24.10.1",
25
+ "tsup": "^8.5.1",
26
+ "typescript": "^5.9.2"
27
+ },
28
+ "exports": {
29
+ ".": {
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.mjs",
32
+ "require": "./dist/index.js"
33
+ }
34
+ },
35
+ "types": "dist/index.d.ts",
36
+ "files": [
37
+ "/dist"
38
+ ],
39
+ "sideEffects": true,
40
+ "publishConfig": {
41
+ "access": "public"
42
+ }
43
+ }