@arcanejs/toolkit 8.0.0 → 9.0.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.
Files changed (71) hide show
  1. package/dist/backend/components/base.d.mts +2 -1
  2. package/dist/backend/components/base.d.ts +2 -1
  3. package/dist/backend/components/base.js +2 -2
  4. package/dist/backend/components/base.mjs +1 -1
  5. package/dist/backend/components/button.d.mts +2 -1
  6. package/dist/backend/components/button.d.ts +2 -1
  7. package/dist/backend/components/button.js +3 -3
  8. package/dist/backend/components/button.mjs +2 -2
  9. package/dist/backend/components/group.d.mts +2 -1
  10. package/dist/backend/components/group.d.ts +2 -1
  11. package/dist/backend/components/group.js +3 -3
  12. package/dist/backend/components/group.mjs +2 -2
  13. package/dist/backend/components/label.d.mts +2 -1
  14. package/dist/backend/components/label.d.ts +2 -1
  15. package/dist/backend/components/label.js +3 -3
  16. package/dist/backend/components/label.mjs +2 -2
  17. package/dist/backend/components/rect.d.mts +2 -1
  18. package/dist/backend/components/rect.d.ts +2 -1
  19. package/dist/backend/components/rect.js +3 -3
  20. package/dist/backend/components/rect.mjs +2 -2
  21. package/dist/backend/components/slider-button.d.mts +2 -1
  22. package/dist/backend/components/slider-button.d.ts +2 -1
  23. package/dist/backend/components/slider-button.js +3 -3
  24. package/dist/backend/components/slider-button.mjs +2 -2
  25. package/dist/backend/components/switch.d.mts +2 -1
  26. package/dist/backend/components/switch.d.ts +2 -1
  27. package/dist/backend/components/switch.js +3 -3
  28. package/dist/backend/components/switch.mjs +2 -2
  29. package/dist/backend/components/tabs.d.mts +2 -1
  30. package/dist/backend/components/tabs.d.ts +2 -1
  31. package/dist/backend/components/tabs.js +3 -3
  32. package/dist/backend/components/tabs.mjs +2 -2
  33. package/dist/backend/components/text-input.d.mts +2 -1
  34. package/dist/backend/components/text-input.d.ts +2 -1
  35. package/dist/backend/components/text-input.js +3 -3
  36. package/dist/backend/components/text-input.mjs +2 -2
  37. package/dist/backend/components/timeline.d.mts +2 -1
  38. package/dist/backend/components/timeline.d.ts +2 -1
  39. package/dist/backend/components/timeline.js +3 -3
  40. package/dist/backend/components/timeline.mjs +2 -2
  41. package/dist/{chunk-IV3AE3CW.js → chunk-2R23ER4K.js} +3 -3
  42. package/dist/{chunk-R5OA7LLZ.mjs → chunk-5K7DK7CW.mjs} +1 -1
  43. package/dist/{chunk-RJLYYTZ6.mjs → chunk-7WTSYZOS.mjs} +1 -1
  44. package/dist/{chunk-2K4UT5QB.js → chunk-AYMITMVR.js} +3 -3
  45. package/dist/{chunk-K6V55JTG.mjs → chunk-KO24S32V.mjs} +1 -1
  46. package/dist/{chunk-XSKWLJOQ.js → chunk-KRGLXKY2.js} +4 -4
  47. package/dist/{chunk-JHWFQLLE.mjs → chunk-MNEFCU3M.mjs} +1 -1
  48. package/dist/{chunk-TF7N4O5G.js → chunk-NEFCI6N6.js} +2 -2
  49. package/dist/{chunk-TULW7CRV.mjs → chunk-NJW4ZG4X.mjs} +1 -1
  50. package/dist/{chunk-MHSAHTVN.mjs → chunk-QBZB56TQ.mjs} +1 -1
  51. package/dist/{chunk-UHEZQR2Q.js → chunk-QHCNKTKW.js} +2 -2
  52. package/dist/{chunk-4AGKM5NT.js → chunk-RELZ3VTJ.js} +3 -3
  53. package/dist/{chunk-7MQHRTBE.mjs → chunk-RGLKNCJ3.mjs} +1 -1
  54. package/dist/{chunk-A3RWE7HZ.js → chunk-SPYBETRJ.js} +3 -3
  55. package/dist/{chunk-GONHNB6V.mjs → chunk-UTTTCTUQ.mjs} +26 -5
  56. package/dist/{chunk-GXJ3JRRK.mjs → chunk-VD6S32ED.mjs} +1 -1
  57. package/dist/{chunk-5B65Q7RL.js → chunk-VTNAO4KC.js} +2 -2
  58. package/dist/{chunk-6PS3Q66F.mjs → chunk-Y3NPWW27.mjs} +1 -1
  59. package/dist/{chunk-CVY55KAR.js → chunk-Y5FC42KD.js} +3 -3
  60. package/dist/{chunk-WN3GXVUE.js → chunk-YNOJTE3G.js} +26 -5
  61. package/dist/frontend/entrypoint.js +42 -1
  62. package/dist/frontend/entrypoint.js.map +2 -2
  63. package/dist/frontend/index.js +69 -12
  64. package/dist/frontend/index.mjs +69 -12
  65. package/dist/index.d.mts +3 -2
  66. package/dist/index.d.ts +3 -2
  67. package/dist/index.js +190 -64
  68. package/dist/index.mjs +161 -35
  69. package/dist/{toolkit-Bglbv3ix.d.ts → toolkit-0nxr5FpP.d.ts} +116 -93
  70. package/dist/{toolkit-BPqxbDbk.d.mts → toolkit-BYE-VOhF.d.mts} +116 -93
  71. package/package.json +16 -16
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class; var _class2;
2
2
 
3
3
 
4
- var _chunkWN3GXVUEjs = require('./chunk-WN3GXVUE.js');
4
+ var _chunkYNOJTE3Gjs = require('./chunk-YNOJTE3G.js');
5
5
 
6
6
  // src/backend/components/group.ts
7
7
  var _core = require('@arcanejs/protocol/core'); var proto = _interopRequireWildcard(_core);
@@ -13,7 +13,7 @@ var DEFAULT_PROPS = {
13
13
  title: null,
14
14
  labels: null
15
15
  };
16
- var GroupHeader = (_class = class extends _chunkWN3GXVUEjs.BaseParent {constructor(...args) { super(...args); _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
16
+ var GroupHeader = (_class = class extends _chunkYNOJTE3Gjs.BaseParent {constructor(...args) { super(...args); _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
17
17
  __init() {this.validateChildren = () => {
18
18
  }}
19
19
  /** @hidden */
@@ -24,9 +24,9 @@ var GroupHeader = (_class = class extends _chunkWN3GXVUEjs.BaseParent {construct
24
24
  children: this.getChildren().map((c) => c.getProtoInfo(idMap, context))
25
25
  })}
26
26
  }, _class);
27
- var Group = (_class2 = class extends _chunkWN3GXVUEjs.BaseParent {
27
+ var Group = (_class2 = class extends _chunkYNOJTE3Gjs.BaseParent {
28
28
  /** @hidden */
29
- __init3() {this.events = new (0, _chunkWN3GXVUEjs.EventEmitter)()}
29
+ __init3() {this.events = new (0, _chunkYNOJTE3Gjs.EventEmitter)()}
30
30
  constructor(props) {
31
31
  super(DEFAULT_PROPS, props, {
32
32
  onPropsUpdated: (oldProps) => this.events.processPropChanges(
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Base
3
- } from "./chunk-GONHNB6V.mjs";
3
+ } from "./chunk-UTTTCTUQ.mjs";
4
4
 
5
5
  // src/backend/components/label.ts
6
6
  var Label = class extends Base {
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
2
2
 
3
- var _chunkWN3GXVUEjs = require('./chunk-WN3GXVUE.js');
3
+ var _chunkYNOJTE3Gjs = require('./chunk-YNOJTE3G.js');
4
4
 
5
5
  // src/backend/components/label.ts
6
- var Label = class extends _chunkWN3GXVUEjs.Base {
6
+ var Label = class extends _chunkYNOJTE3Gjs.Base {
7
7
  constructor(props) {
8
8
  super({ text: null }, props);
9
9
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  BaseParent,
3
3
  EventEmitter
4
- } from "./chunk-GONHNB6V.mjs";
4
+ } from "./chunk-UTTTCTUQ.mjs";
5
5
 
6
6
  // src/backend/components/group.ts
7
7
  import * as proto from "@arcanejs/protocol/core";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Base,
3
3
  EventEmitter
4
- } from "./chunk-GONHNB6V.mjs";
4
+ } from "./chunk-UTTTCTUQ.mjs";
5
5
 
6
6
  // src/backend/components/switch.ts
7
7
  import * as proto from "@arcanejs/protocol/core";
@@ -1,6 +1,6 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class;
2
2
 
3
- var _chunkWN3GXVUEjs = require('./chunk-WN3GXVUE.js');
3
+ var _chunkYNOJTE3Gjs = require('./chunk-YNOJTE3G.js');
4
4
 
5
5
  // src/backend/components/timeline.ts
6
6
  var DEFAULT_PROPS = {
@@ -13,7 +13,7 @@ var DEFAULT_PROPS = {
13
13
  subtitles: null,
14
14
  source: null
15
15
  };
16
- var Timeline = (_class = class extends _chunkWN3GXVUEjs.Base {
16
+ var Timeline = (_class = class extends _chunkYNOJTE3Gjs.Base {
17
17
  constructor(props) {
18
18
  super(DEFAULT_PROPS, props);_class.prototype.__init.call(this);;
19
19
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class;
2
2
 
3
3
 
4
- var _chunkWN3GXVUEjs = require('./chunk-WN3GXVUE.js');
4
+ var _chunkYNOJTE3Gjs = require('./chunk-YNOJTE3G.js');
5
5
 
6
6
  // src/backend/components/button.ts
7
7
  var _core = require('@arcanejs/protocol/core'); var proto = _interopRequireWildcard(_core);
@@ -12,9 +12,9 @@ var DEFAULT_PROPS = {
12
12
  error: null,
13
13
  onClick: null
14
14
  };
15
- var Button = (_class = class extends _chunkWN3GXVUEjs.Base {
15
+ var Button = (_class = class extends _chunkYNOJTE3Gjs.Base {
16
16
  /** @hidden */
17
- __init() {this.events = new (0, _chunkWN3GXVUEjs.EventEmitter)()}
17
+ __init() {this.events = new (0, _chunkYNOJTE3Gjs.EventEmitter)()}
18
18
  constructor(props) {
19
19
  super(DEFAULT_PROPS, props, {
20
20
  onPropsUpdated: (oldProps) => this.events.processPropChanges(
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Base,
3
3
  EventEmitter
4
- } from "./chunk-GONHNB6V.mjs";
4
+ } from "./chunk-UTTTCTUQ.mjs";
5
5
 
6
6
  // src/backend/components/button.ts
7
7
  import * as proto from "@arcanejs/protocol/core";
@@ -1,9 +1,9 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); var _class; var _class2;
2
2
 
3
- var _chunkWN3GXVUEjs = require('./chunk-WN3GXVUE.js');
3
+ var _chunkYNOJTE3Gjs = require('./chunk-YNOJTE3G.js');
4
4
 
5
5
  // src/backend/components/tabs.ts
6
- var Tab = (_class = class extends _chunkWN3GXVUEjs.BaseParent {constructor(...args) { super(...args); _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
6
+ var Tab = (_class = class extends _chunkYNOJTE3Gjs.BaseParent {constructor(...args) { super(...args); _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
7
7
  __init() {this.validateChildren = (children) => {
8
8
  if (children.length > 1) {
9
9
  throw new Error("Tab can only have one child");
@@ -18,7 +18,7 @@ var Tab = (_class = class extends _chunkWN3GXVUEjs.BaseParent {constructor(...ar
18
18
  child: this.getChildren().slice(0, 1).map((c) => c.getProtoInfo(idMap, context))[0]
19
19
  })}
20
20
  }, _class);
21
- var Tabs = (_class2 = class extends _chunkWN3GXVUEjs.BaseParent {
21
+ var Tabs = (_class2 = class extends _chunkYNOJTE3Gjs.BaseParent {
22
22
  __init3() {this.validateChildren = (children) => {
23
23
  for (const child of children) {
24
24
  if (!(child instanceof Tab)) {
@@ -73,9 +73,30 @@ var Base = class {
73
73
  handleMessage(_message, _connection) {
74
74
  }
75
75
  /** @hidden */
76
+ handleAnyCall(message, _connection) {
77
+ switch (message.type) {
78
+ case "component-call-upload":
79
+ return this.handleCallUpload(message, _connection);
80
+ case "component-call-download":
81
+ return this.handleCallDownload(message, _connection);
82
+ case "component-call":
83
+ return this.handleCall(message, _connection);
84
+ }
85
+ }
86
+ /** @hidden */
76
87
  handleCall(_call, _connection) {
77
88
  return Promise.reject(new Error(`Component does not handle calls`));
78
89
  }
90
+ /** @hidden */
91
+ handleCallUpload(_call, _connection) {
92
+ return Promise.reject(new Error(`Component does not handle call uploads`));
93
+ }
94
+ /** @hidden */
95
+ handleCallDownload(_call, _connection) {
96
+ return Promise.reject(
97
+ new Error(`Component does not handle call downloads`)
98
+ );
99
+ }
79
100
  routeMessage(_idMap, _message, _connection) {
80
101
  }
81
102
  routeCall(_idMap, _call, _connection, _callbacks) {
@@ -142,11 +163,11 @@ var BaseParent = class extends Base {
142
163
  }
143
164
  async routeCall(idMap, call, connection, callbacks) {
144
165
  if (idMap.getId(this) === call.componentKey) {
145
- this.handleCall(call, connection).then(callbacks.resolve).catch(callbacks.reject);
166
+ this.handleAnyCall(call, connection).then(callbacks.resolve).catch(callbacks.reject);
146
167
  } else {
147
168
  for (const c of this.children) {
148
169
  if (idMap.getId(c) === call.componentKey) {
149
- c.handleCall(call, connection).then(callbacks.resolve).catch(callbacks.reject);
170
+ c.handleAnyCall(call, connection).then(callbacks.resolve).catch(callbacks.reject);
150
171
  } else {
151
172
  c.routeCall(idMap, call, connection, callbacks);
152
173
  }
@@ -204,10 +225,10 @@ var EventEmitter = class {
204
225
  const result = await this.emit(type, ...args);
205
226
  if (result.length > 1) {
206
227
  throw new Error(`Multiple listeners for call: ${String(type)}`);
207
- } else if (result[0]) {
208
- return result[0];
209
- } else {
228
+ } else if (result.length === 0) {
210
229
  throw new Error(`No listeners for call: ${String(type)}`);
230
+ } else {
231
+ return result[0];
211
232
  }
212
233
  };
213
234
  /**
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  Base,
3
3
  EventEmitter
4
- } from "./chunk-GONHNB6V.mjs";
4
+ } from "./chunk-UTTTCTUQ.mjs";
5
5
 
6
6
  // src/backend/components/text-input.ts
7
7
  import * as proto from "@arcanejs/protocol/core";
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
- var _chunkWN3GXVUEjs = require('./chunk-WN3GXVUE.js');
3
+ var _chunkYNOJTE3Gjs = require('./chunk-YNOJTE3G.js');
4
4
 
5
5
  // src/backend/components/rect.ts
6
6
  var DEFAULT_PROPS = {
7
7
  color: "rgba(0, 0, 0, 0)"
8
8
  };
9
- var Rect = class extends _chunkWN3GXVUEjs.Base {
9
+ var Rect = class extends _chunkYNOJTE3Gjs.Base {
10
10
  constructor(props) {
11
11
  super(DEFAULT_PROPS, props);
12
12
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Base
3
- } from "./chunk-GONHNB6V.mjs";
3
+ } from "./chunk-UTTTCTUQ.mjs";
4
4
 
5
5
  // src/backend/components/timeline.ts
6
6
  var DEFAULT_PROPS = {
@@ -1,7 +1,7 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } var _class;
2
2
 
3
3
 
4
- var _chunkWN3GXVUEjs = require('./chunk-WN3GXVUE.js');
4
+ var _chunkYNOJTE3Gjs = require('./chunk-YNOJTE3G.js');
5
5
 
6
6
  // src/backend/components/slider-button.ts
7
7
  var _core = require('@arcanejs/protocol/core'); var proto = _interopRequireWildcard(_core);
@@ -10,9 +10,9 @@ var DEFAULT_PROPS = {
10
10
  max: 255,
11
11
  step: 5
12
12
  };
13
- var SliderButton = (_class = class extends _chunkWN3GXVUEjs.Base {
13
+ var SliderButton = (_class = class extends _chunkYNOJTE3Gjs.Base {
14
14
  /** @hidden */
15
- __init() {this.events = new (0, _chunkWN3GXVUEjs.EventEmitter)()}
15
+ __init() {this.events = new (0, _chunkYNOJTE3Gjs.EventEmitter)()}
16
16
  /**
17
17
  * Manually manage the state of the slider,
18
18
  * to support both controlled and uncontrolled inputs.
@@ -73,9 +73,30 @@ var Base = (_class = class {
73
73
  handleMessage(_message, _connection) {
74
74
  }
75
75
  /** @hidden */
76
+ handleAnyCall(message, _connection) {
77
+ switch (message.type) {
78
+ case "component-call-upload":
79
+ return this.handleCallUpload(message, _connection);
80
+ case "component-call-download":
81
+ return this.handleCallDownload(message, _connection);
82
+ case "component-call":
83
+ return this.handleCall(message, _connection);
84
+ }
85
+ }
86
+ /** @hidden */
76
87
  handleCall(_call, _connection) {
77
88
  return Promise.reject(new Error(`Component does not handle calls`));
78
89
  }
90
+ /** @hidden */
91
+ handleCallUpload(_call, _connection) {
92
+ return Promise.reject(new Error(`Component does not handle call uploads`));
93
+ }
94
+ /** @hidden */
95
+ handleCallDownload(_call, _connection) {
96
+ return Promise.reject(
97
+ new Error(`Component does not handle call downloads`)
98
+ );
99
+ }
79
100
  routeMessage(_idMap, _message, _connection) {
80
101
  }
81
102
  routeCall(_idMap, _call, _connection, _callbacks) {
@@ -142,11 +163,11 @@ var BaseParent = (_class2 = class extends Base {constructor(...args2) { super(..
142
163
  }
143
164
  async routeCall(idMap, call, connection, callbacks) {
144
165
  if (idMap.getId(this) === call.componentKey) {
145
- this.handleCall(call, connection).then(callbacks.resolve).catch(callbacks.reject);
166
+ this.handleAnyCall(call, connection).then(callbacks.resolve).catch(callbacks.reject);
146
167
  } else {
147
168
  for (const c of this.children) {
148
169
  if (idMap.getId(c) === call.componentKey) {
149
- c.handleCall(call, connection).then(callbacks.resolve).catch(callbacks.reject);
170
+ c.handleAnyCall(call, connection).then(callbacks.resolve).catch(callbacks.reject);
150
171
  } else {
151
172
  c.routeCall(idMap, call, connection, callbacks);
152
173
  }
@@ -204,10 +225,10 @@ var EventEmitter = (_class3 = class {constructor() { _class3.prototype.__init13.
204
225
  const result = await this.emit(type, ...args);
205
226
  if (result.length > 1) {
206
227
  throw new Error(`Multiple listeners for call: ${String(type)}`);
207
- } else if (result[0]) {
208
- return result[0];
209
- } else {
228
+ } else if (result.length === 0) {
210
229
  throw new Error(`No listeners for call: ${String(type)}`);
230
+ } else {
231
+ return result[0];
211
232
  }
212
233
  }}
213
234
  /**
@@ -26840,6 +26840,13 @@
26840
26840
  nextId: 1,
26841
26841
  pings: /* @__PURE__ */ new Map()
26842
26842
  });
26843
+ const notificationListeners = (0, import_react15.useRef)(/* @__PURE__ */ new Set());
26844
+ const addNotificationListener = (0, import_react15.useCallback)((listener) => {
26845
+ notificationListeners.current.add(listener);
26846
+ }, []);
26847
+ const removeNotificationListener = (0, import_react15.useCallback)((listener_0) => {
26848
+ notificationListeners.current.delete(listener_0);
26849
+ }, []);
26843
26850
  const preparedRenderers = (0, import_react15.useMemo)(() => {
26844
26851
  const prepared = {};
26845
26852
  for (const renderer of renderers) {
@@ -26883,6 +26890,12 @@
26883
26890
  }
26884
26891
  return;
26885
26892
  }
26893
+ case "notification": {
26894
+ for (const listener_1 of notificationListeners.current) {
26895
+ listener_1(msg);
26896
+ }
26897
+ return;
26898
+ }
26886
26899
  case "pong": {
26887
26900
  const ping = pings.current.pings.get(msg.pingId);
26888
26901
  if (!ping) {
@@ -26953,7 +26966,7 @@
26953
26966
  const sendMessage = (0, import_react15.useCallback)(async (msg_0) => {
26954
26967
  (await (socket.current || initializeWebsocket())).send(JSON.stringify(msg_0));
26955
26968
  }, []);
26956
- const call_0 = (0, import_react15.useCallback)(async (msg_1) => {
26969
+ const callHandler = (0, import_react15.useCallback)(async (msg_1) => {
26957
26970
  const requestId = calls.current.nextId++;
26958
26971
  const sendMsg = {
26959
26972
  ...msg_1,
@@ -26968,6 +26981,30 @@
26968
26981
  });
26969
26982
  return promise;
26970
26983
  }, []);
26984
+ const call_0 = (0, import_react15.useCallback)(async (msg_2) => callHandler(msg_2), []);
26985
+ const upload = (0, import_react15.useCallback)(async (msg_3, data) => {
26986
+ const uploadId = await callHandler(msg_3);
26987
+ const uploadUrl = new URL(`upload/${uploadId}`, window.location.href);
26988
+ const result = await fetch(uploadUrl.href, {
26989
+ method: "POST",
26990
+ body: data
26991
+ });
26992
+ if (!result.ok) {
26993
+ throw new Error(`Upload failed with status ${result.status}`);
26994
+ }
26995
+ }, []);
26996
+ const download = (0, import_react15.useCallback)(async (msg_4) => {
26997
+ const downloadId = await callHandler(msg_4);
26998
+ const downloadUrl = new URL(`download/${downloadId}`, window.location.href);
26999
+ const result_0 = await fetch(downloadUrl.href);
27000
+ if (!result_0.ok) {
27001
+ throw new Error(`Download failed with status ${result_0.status}`);
27002
+ }
27003
+ if (!result_0.body) {
27004
+ throw new Error("Download response has no body");
27005
+ }
27006
+ return result_0.body;
27007
+ }, []);
26971
27008
  (0, import_react15.useEffect)(() => {
26972
27009
  initializeWebsocket();
26973
27010
  }, [initializeWebsocket]);
@@ -27005,6 +27042,10 @@
27005
27042
  sendMessage,
27006
27043
  renderComponent,
27007
27044
  call: call_0,
27045
+ upload,
27046
+ download,
27047
+ addNotificationListener,
27048
+ removeNotificationListener,
27008
27049
  connectionUuid: connection.state === "connected" ? connection.uuid : null,
27009
27050
  connection,
27010
27051
  timeDifferenceMs: bestPing?.timeDifferenceMs ?? null,