@gradio/client 0.8.2 → 0.9.1
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/CHANGELOG.md +16 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/index.js +158 -8
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +167 -8
- package/src/types.ts +1 -1
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,21 @@
|
|
1
1
|
# @gradio/client
|
2
2
|
|
3
|
+
## 0.9.1
|
4
|
+
|
5
|
+
### Fixes
|
6
|
+
|
7
|
+
- [#6693](https://github.com/gradio-app/gradio/pull/6693) [`34f9431`](https://github.com/gradio-app/gradio/commit/34f943101bf7dd6b8a8974a6131c1ed7c4a0dac0) - Python client properly handles hearbeat and log messages. Also handles responses longer than 65k. Thanks [@freddyaboulton](https://github.com/freddyaboulton)!
|
8
|
+
|
9
|
+
## 0.9.0
|
10
|
+
|
11
|
+
### Features
|
12
|
+
|
13
|
+
- [#6398](https://github.com/gradio-app/gradio/pull/6398) [`67ddd40`](https://github.com/gradio-app/gradio/commit/67ddd40b4b70d3a37cb1637c33620f8d197dbee0) - Lite v4. Thanks [@whitphx](https://github.com/whitphx)!
|
14
|
+
|
15
|
+
### Fixes
|
16
|
+
|
17
|
+
- [#6556](https://github.com/gradio-app/gradio/pull/6556) [`d76bcaa`](https://github.com/gradio-app/gradio/commit/d76bcaaaf0734aaf49a680f94ea9d4d22a602e70) - Fix api event drops. Thanks [@aliabid94](https://github.com/aliabid94)!
|
18
|
+
|
3
19
|
## 0.8.2
|
4
20
|
|
5
21
|
### Features
|
package/dist/client.d.ts
CHANGED
@@ -34,7 +34,7 @@ interface Client {
|
|
34
34
|
}) => Promise<client_return>;
|
35
35
|
handle_blob: (endpoint: string, data: unknown[], api_info: ApiInfo<JsApiData>, token?: `hf_${string}`) => Promise<unknown[]>;
|
36
36
|
}
|
37
|
-
export declare function api_factory(fetch_implementation: typeof fetch,
|
37
|
+
export declare function api_factory(fetch_implementation: typeof fetch, EventSource_factory: (url: URL) => EventSource): Client;
|
38
38
|
export declare const post_data: (url: string, body: unknown, token?: `hf_${string}`) => Promise<[PostResponse, number]>, upload_files: (root: string, files: File[], token?: `hf_${string}`, upload_id?: string) => Promise<UploadResponse>, client: (app_reference: string, options: {
|
39
39
|
hf_token?: `hf_${string}`;
|
40
40
|
status_callback?: SpaceStatusCallback;
|
package/dist/client.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
@@ -326,7 +326,7 @@ async function duplicate(app_reference, options) {
|
|
326
326
|
throw new Error(e);
|
327
327
|
}
|
328
328
|
}
|
329
|
-
function api_factory(fetch_implementation,
|
329
|
+
function api_factory(fetch_implementation, EventSource_factory) {
|
330
330
|
return { post_data: post_data2, upload_files: upload_files2, client: client2, handle_blob: handle_blob2 };
|
331
331
|
async function post_data2(url, body, token) {
|
332
332
|
const headers = { "Content-Type": "application/json" };
|
@@ -342,8 +342,16 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
342
342
|
} catch (e) {
|
343
343
|
return [{ error: BROKEN_CONNECTION_MSG }, 500];
|
344
344
|
}
|
345
|
-
|
346
|
-
|
345
|
+
let output;
|
346
|
+
let status;
|
347
|
+
try {
|
348
|
+
output = await response.json();
|
349
|
+
status = response.status;
|
350
|
+
} catch (e) {
|
351
|
+
output = { error: `Could not parse server response: ${e}` };
|
352
|
+
status = 500;
|
353
|
+
}
|
354
|
+
return [output, status];
|
347
355
|
}
|
348
356
|
async function upload_files2(root, files, token, upload_id) {
|
349
357
|
const headers = {};
|
@@ -391,6 +399,9 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
391
399
|
const { ws_protocol, http_protocol, host, space_id } = await process_endpoint(app_reference, hf_token);
|
392
400
|
const session_hash = Math.random().toString(36).substring(2);
|
393
401
|
const last_status = {};
|
402
|
+
let stream_open = false;
|
403
|
+
let event_stream = null;
|
404
|
+
const event_callbacks = {};
|
394
405
|
let config;
|
395
406
|
let api_map = {};
|
396
407
|
let jwt = false;
|
@@ -523,7 +534,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
523
534
|
}
|
524
535
|
let websocket;
|
525
536
|
let eventSource;
|
526
|
-
let protocol = config.protocol ?? "
|
537
|
+
let protocol = config.protocol ?? "ws";
|
527
538
|
const _endpoint = typeof endpoint === "number" ? "/predict" : endpoint;
|
528
539
|
let payload;
|
529
540
|
let event_id = null;
|
@@ -620,7 +631,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
620
631
|
if (jwt) {
|
621
632
|
url.searchParams.set("__sign", jwt);
|
622
633
|
}
|
623
|
-
websocket =
|
634
|
+
websocket = new WebSocket(url);
|
624
635
|
websocket.onclose = (evt) => {
|
625
636
|
if (!evt.wasClean) {
|
626
637
|
fire_event({
|
@@ -711,7 +722,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
711
722
|
() => websocket.send(JSON.stringify({ hash: session_hash }))
|
712
723
|
);
|
713
724
|
}
|
714
|
-
} else {
|
725
|
+
} else if (protocol == "sse") {
|
715
726
|
fire_event({
|
716
727
|
type: "status",
|
717
728
|
stage: "pending",
|
@@ -731,7 +742,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
731
742
|
true
|
732
743
|
)}/queue/join?${url_params ? url_params + "&" : ""}${params}`
|
733
744
|
);
|
734
|
-
eventSource =
|
745
|
+
eventSource = EventSource_factory(url);
|
735
746
|
eventSource.onmessage = async function(event) {
|
736
747
|
const _data = JSON.parse(event.data);
|
737
748
|
const { type, status, data: data2 } = handle_message(
|
@@ -824,6 +835,123 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
824
835
|
}
|
825
836
|
}
|
826
837
|
};
|
838
|
+
} else if (protocol == "sse_v1") {
|
839
|
+
fire_event({
|
840
|
+
type: "status",
|
841
|
+
stage: "pending",
|
842
|
+
queue: true,
|
843
|
+
endpoint: _endpoint,
|
844
|
+
fn_index,
|
845
|
+
time: /* @__PURE__ */ new Date()
|
846
|
+
});
|
847
|
+
post_data2(
|
848
|
+
`${http_protocol}//${resolve_root(
|
849
|
+
host,
|
850
|
+
config.path,
|
851
|
+
true
|
852
|
+
)}/queue/join?${url_params}`,
|
853
|
+
{
|
854
|
+
...payload,
|
855
|
+
session_hash
|
856
|
+
},
|
857
|
+
hf_token
|
858
|
+
).then(([response, status]) => {
|
859
|
+
if (status === 503) {
|
860
|
+
fire_event({
|
861
|
+
type: "status",
|
862
|
+
stage: "error",
|
863
|
+
message: QUEUE_FULL_MSG,
|
864
|
+
queue: true,
|
865
|
+
endpoint: _endpoint,
|
866
|
+
fn_index,
|
867
|
+
time: /* @__PURE__ */ new Date()
|
868
|
+
});
|
869
|
+
} else if (status !== 200) {
|
870
|
+
fire_event({
|
871
|
+
type: "status",
|
872
|
+
stage: "error",
|
873
|
+
message: BROKEN_CONNECTION_MSG,
|
874
|
+
queue: true,
|
875
|
+
endpoint: _endpoint,
|
876
|
+
fn_index,
|
877
|
+
time: /* @__PURE__ */ new Date()
|
878
|
+
});
|
879
|
+
} else {
|
880
|
+
event_id = response.event_id;
|
881
|
+
if (!stream_open) {
|
882
|
+
open_stream();
|
883
|
+
}
|
884
|
+
let callback = async function(_data) {
|
885
|
+
const { type, status: status2, data: data2 } = handle_message(
|
886
|
+
_data,
|
887
|
+
last_status[fn_index]
|
888
|
+
);
|
889
|
+
if (type === "update" && status2 && !complete) {
|
890
|
+
fire_event({
|
891
|
+
type: "status",
|
892
|
+
endpoint: _endpoint,
|
893
|
+
fn_index,
|
894
|
+
time: /* @__PURE__ */ new Date(),
|
895
|
+
...status2
|
896
|
+
});
|
897
|
+
} else if (type === "complete") {
|
898
|
+
complete = status2;
|
899
|
+
} else if (type === "log") {
|
900
|
+
fire_event({
|
901
|
+
type: "log",
|
902
|
+
log: data2.log,
|
903
|
+
level: data2.level,
|
904
|
+
endpoint: _endpoint,
|
905
|
+
fn_index
|
906
|
+
});
|
907
|
+
} else if (type === "generating") {
|
908
|
+
fire_event({
|
909
|
+
type: "status",
|
910
|
+
time: /* @__PURE__ */ new Date(),
|
911
|
+
...status2,
|
912
|
+
stage: status2 == null ? void 0 : status2.stage,
|
913
|
+
queue: true,
|
914
|
+
endpoint: _endpoint,
|
915
|
+
fn_index
|
916
|
+
});
|
917
|
+
}
|
918
|
+
if (data2) {
|
919
|
+
fire_event({
|
920
|
+
type: "data",
|
921
|
+
time: /* @__PURE__ */ new Date(),
|
922
|
+
data: transform_files ? transform_output(
|
923
|
+
data2.data,
|
924
|
+
api_info,
|
925
|
+
config.root,
|
926
|
+
config.root_url
|
927
|
+
) : data2.data,
|
928
|
+
endpoint: _endpoint,
|
929
|
+
fn_index
|
930
|
+
});
|
931
|
+
if (complete) {
|
932
|
+
fire_event({
|
933
|
+
type: "status",
|
934
|
+
time: /* @__PURE__ */ new Date(),
|
935
|
+
...complete,
|
936
|
+
stage: status2 == null ? void 0 : status2.stage,
|
937
|
+
queue: true,
|
938
|
+
endpoint: _endpoint,
|
939
|
+
fn_index
|
940
|
+
});
|
941
|
+
}
|
942
|
+
}
|
943
|
+
if (status2.stage === "complete" || status2.stage === "error") {
|
944
|
+
if (event_callbacks[event_id]) {
|
945
|
+
delete event_callbacks[event_id];
|
946
|
+
if (Object.keys(event_callbacks).length === 0) {
|
947
|
+
close_stream();
|
948
|
+
}
|
949
|
+
}
|
950
|
+
}
|
951
|
+
};
|
952
|
+
event_callbacks[event_id] = callback;
|
953
|
+
}
|
954
|
+
});
|
827
955
|
}
|
828
956
|
});
|
829
957
|
function fire_event(event) {
|
@@ -905,6 +1033,28 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
905
1033
|
destroy
|
906
1034
|
};
|
907
1035
|
}
|
1036
|
+
function open_stream() {
|
1037
|
+
stream_open = true;
|
1038
|
+
let params = new URLSearchParams({
|
1039
|
+
session_hash
|
1040
|
+
}).toString();
|
1041
|
+
let url = new URL(
|
1042
|
+
`${http_protocol}//${resolve_root(
|
1043
|
+
host,
|
1044
|
+
config.path,
|
1045
|
+
true
|
1046
|
+
)}/queue/data?${params}`
|
1047
|
+
);
|
1048
|
+
event_stream = new EventSource(url);
|
1049
|
+
event_stream.onmessage = async function(event) {
|
1050
|
+
let _data = JSON.parse(event.data);
|
1051
|
+
await event_callbacks[_data.event_id](_data);
|
1052
|
+
};
|
1053
|
+
}
|
1054
|
+
function close_stream() {
|
1055
|
+
stream_open = false;
|
1056
|
+
event_stream == null ? void 0 : event_stream.close();
|
1057
|
+
}
|
908
1058
|
async function component_server(component_id, fn_name, data) {
|
909
1059
|
var _a;
|
910
1060
|
const headers = { "Content-Type": "application/json" };
|
@@ -1016,7 +1166,7 @@ function api_factory(fetch_implementation, WebSocket_factory) {
|
|
1016
1166
|
}
|
1017
1167
|
const { post_data, upload_files, client, handle_blob } = api_factory(
|
1018
1168
|
fetch,
|
1019
|
-
(...args) => new
|
1169
|
+
(...args) => new EventSource(...args)
|
1020
1170
|
);
|
1021
1171
|
function transform_output(data, api_info, root_url, remote_url) {
|
1022
1172
|
return data.map((d, i) => {
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACtB,aAAa,EAAE,OAAO,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,GAAG,EAAE,CAAC;IAClB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,QAAQ,GAAG,WAAW,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
@@ -178,7 +178,7 @@ interface Client {
|
|
178
178
|
|
179
179
|
export function api_factory(
|
180
180
|
fetch_implementation: typeof fetch,
|
181
|
-
|
181
|
+
EventSource_factory: (url: URL) => EventSource
|
182
182
|
): Client {
|
183
183
|
return { post_data, upload_files, client, handle_blob };
|
184
184
|
|
@@ -203,8 +203,16 @@ export function api_factory(
|
|
203
203
|
} catch (e) {
|
204
204
|
return [{ error: BROKEN_CONNECTION_MSG }, 500];
|
205
205
|
}
|
206
|
-
|
207
|
-
|
206
|
+
let output: PostResponse;
|
207
|
+
let status: int;
|
208
|
+
try {
|
209
|
+
output = await response.json();
|
210
|
+
status = response.status;
|
211
|
+
} catch (e) {
|
212
|
+
output = { error: `Could not parse server response: ${e}` };
|
213
|
+
status = 500;
|
214
|
+
}
|
215
|
+
return [output, status];
|
208
216
|
}
|
209
217
|
|
210
218
|
async function upload_files(
|
@@ -278,6 +286,9 @@ export function api_factory(
|
|
278
286
|
|
279
287
|
const session_hash = Math.random().toString(36).substring(2);
|
280
288
|
const last_status: Record<string, Status["stage"]> = {};
|
289
|
+
let stream_open = false;
|
290
|
+
let event_stream: EventSource | null = null;
|
291
|
+
const event_callbacks: Record<string, () => Promise<void>> = {};
|
281
292
|
let config: Config;
|
282
293
|
let api_map: Record<string, number> = {};
|
283
294
|
|
@@ -437,7 +448,7 @@ export function api_factory(
|
|
437
448
|
|
438
449
|
let websocket: WebSocket;
|
439
450
|
let eventSource: EventSource;
|
440
|
-
let protocol = config.protocol ?? "
|
451
|
+
let protocol = config.protocol ?? "ws";
|
441
452
|
|
442
453
|
const _endpoint = typeof endpoint === "number" ? "/predict" : endpoint;
|
443
454
|
let payload: Payload;
|
@@ -546,7 +557,7 @@ export function api_factory(
|
|
546
557
|
url.searchParams.set("__sign", jwt);
|
547
558
|
}
|
548
559
|
|
549
|
-
websocket =
|
560
|
+
websocket = new WebSocket(url);
|
550
561
|
|
551
562
|
websocket.onclose = (evt) => {
|
552
563
|
if (!evt.wasClean) {
|
@@ -646,7 +657,7 @@ export function api_factory(
|
|
646
657
|
websocket.send(JSON.stringify({ hash: session_hash }))
|
647
658
|
);
|
648
659
|
}
|
649
|
-
} else {
|
660
|
+
} else if (protocol == "sse") {
|
650
661
|
fire_event({
|
651
662
|
type: "status",
|
652
663
|
stage: "pending",
|
@@ -667,7 +678,7 @@ export function api_factory(
|
|
667
678
|
)}/queue/join?${url_params ? url_params + "&" : ""}${params}`
|
668
679
|
);
|
669
680
|
|
670
|
-
eventSource =
|
681
|
+
eventSource = EventSource_factory(url);
|
671
682
|
|
672
683
|
eventSource.onmessage = async function (event) {
|
673
684
|
const _data = JSON.parse(event.data);
|
@@ -766,6 +777,130 @@ export function api_factory(
|
|
766
777
|
}
|
767
778
|
}
|
768
779
|
};
|
780
|
+
} else if (protocol == "sse_v1") {
|
781
|
+
fire_event({
|
782
|
+
type: "status",
|
783
|
+
stage: "pending",
|
784
|
+
queue: true,
|
785
|
+
endpoint: _endpoint,
|
786
|
+
fn_index,
|
787
|
+
time: new Date()
|
788
|
+
});
|
789
|
+
|
790
|
+
post_data(
|
791
|
+
`${http_protocol}//${resolve_root(
|
792
|
+
host,
|
793
|
+
config.path,
|
794
|
+
true
|
795
|
+
)}/queue/join?${url_params}`,
|
796
|
+
{
|
797
|
+
...payload,
|
798
|
+
session_hash
|
799
|
+
},
|
800
|
+
hf_token
|
801
|
+
).then(([response, status]) => {
|
802
|
+
if (status === 503) {
|
803
|
+
fire_event({
|
804
|
+
type: "status",
|
805
|
+
stage: "error",
|
806
|
+
message: QUEUE_FULL_MSG,
|
807
|
+
queue: true,
|
808
|
+
endpoint: _endpoint,
|
809
|
+
fn_index,
|
810
|
+
time: new Date()
|
811
|
+
});
|
812
|
+
} else if (status !== 200) {
|
813
|
+
fire_event({
|
814
|
+
type: "status",
|
815
|
+
stage: "error",
|
816
|
+
message: BROKEN_CONNECTION_MSG,
|
817
|
+
queue: true,
|
818
|
+
endpoint: _endpoint,
|
819
|
+
fn_index,
|
820
|
+
time: new Date()
|
821
|
+
});
|
822
|
+
} else {
|
823
|
+
event_id = response.event_id as string;
|
824
|
+
if (!stream_open) {
|
825
|
+
open_stream();
|
826
|
+
}
|
827
|
+
let callback = async function (_data: object): void {
|
828
|
+
const { type, status, data } = handle_message(
|
829
|
+
_data,
|
830
|
+
last_status[fn_index]
|
831
|
+
);
|
832
|
+
|
833
|
+
if (type === "update" && status && !complete) {
|
834
|
+
// call 'status' listeners
|
835
|
+
fire_event({
|
836
|
+
type: "status",
|
837
|
+
endpoint: _endpoint,
|
838
|
+
fn_index,
|
839
|
+
time: new Date(),
|
840
|
+
...status
|
841
|
+
});
|
842
|
+
} else if (type === "complete") {
|
843
|
+
complete = status;
|
844
|
+
} else if (type === "log") {
|
845
|
+
fire_event({
|
846
|
+
type: "log",
|
847
|
+
log: data.log,
|
848
|
+
level: data.level,
|
849
|
+
endpoint: _endpoint,
|
850
|
+
fn_index
|
851
|
+
});
|
852
|
+
} else if (type === "generating") {
|
853
|
+
fire_event({
|
854
|
+
type: "status",
|
855
|
+
time: new Date(),
|
856
|
+
...status,
|
857
|
+
stage: status?.stage!,
|
858
|
+
queue: true,
|
859
|
+
endpoint: _endpoint,
|
860
|
+
fn_index
|
861
|
+
});
|
862
|
+
}
|
863
|
+
if (data) {
|
864
|
+
fire_event({
|
865
|
+
type: "data",
|
866
|
+
time: new Date(),
|
867
|
+
data: transform_files
|
868
|
+
? transform_output(
|
869
|
+
data.data,
|
870
|
+
api_info,
|
871
|
+
config.root,
|
872
|
+
config.root_url
|
873
|
+
)
|
874
|
+
: data.data,
|
875
|
+
endpoint: _endpoint,
|
876
|
+
fn_index
|
877
|
+
});
|
878
|
+
|
879
|
+
if (complete) {
|
880
|
+
fire_event({
|
881
|
+
type: "status",
|
882
|
+
time: new Date(),
|
883
|
+
...complete,
|
884
|
+
stage: status?.stage!,
|
885
|
+
queue: true,
|
886
|
+
endpoint: _endpoint,
|
887
|
+
fn_index
|
888
|
+
});
|
889
|
+
}
|
890
|
+
}
|
891
|
+
|
892
|
+
if (status.stage === "complete" || status.stage === "error") {
|
893
|
+
if (event_callbacks[event_id]) {
|
894
|
+
delete event_callbacks[event_id];
|
895
|
+
if (Object.keys(event_callbacks).length === 0) {
|
896
|
+
close_stream();
|
897
|
+
}
|
898
|
+
}
|
899
|
+
}
|
900
|
+
};
|
901
|
+
event_callbacks[event_id] = callback;
|
902
|
+
}
|
903
|
+
});
|
769
904
|
}
|
770
905
|
});
|
771
906
|
|
@@ -864,6 +999,30 @@ export function api_factory(
|
|
864
999
|
};
|
865
1000
|
}
|
866
1001
|
|
1002
|
+
function open_stream(): void {
|
1003
|
+
stream_open = true;
|
1004
|
+
let params = new URLSearchParams({
|
1005
|
+
session_hash: session_hash
|
1006
|
+
}).toString();
|
1007
|
+
let url = new URL(
|
1008
|
+
`${http_protocol}//${resolve_root(
|
1009
|
+
host,
|
1010
|
+
config.path,
|
1011
|
+
true
|
1012
|
+
)}/queue/data?${params}`
|
1013
|
+
);
|
1014
|
+
event_stream = new EventSource(url);
|
1015
|
+
event_stream.onmessage = async function (event) {
|
1016
|
+
let _data = JSON.parse(event.data);
|
1017
|
+
await event_callbacks[_data.event_id](_data);
|
1018
|
+
};
|
1019
|
+
}
|
1020
|
+
|
1021
|
+
function close_stream(): void {
|
1022
|
+
stream_open = false;
|
1023
|
+
event_stream?.close();
|
1024
|
+
}
|
1025
|
+
|
867
1026
|
async function component_server(
|
868
1027
|
component_id: number,
|
869
1028
|
fn_name: string,
|
@@ -1007,7 +1166,7 @@ export function api_factory(
|
|
1007
1166
|
|
1008
1167
|
export const { post_data, upload_files, client, handle_blob } = api_factory(
|
1009
1168
|
fetch,
|
1010
|
-
(...args) => new
|
1169
|
+
(...args) => new EventSource(...args)
|
1011
1170
|
);
|
1012
1171
|
|
1013
1172
|
function transform_output(
|