@mml-io/mml-web-client 0.0.0-experimental-b3c5d2f-20250916 → 0.0.0-experimental-d5193f3-20250916

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/build/index.js CHANGED
@@ -78,13 +78,44 @@
78
78
  }
79
79
  return node;
80
80
  }
81
- function encodeConnectUsers(connectUsersMessage, writer) {
81
+ function getNetworkedDOMProtocolSubProtocol_v0_2Subversion(protocol) {
82
+ return protocolSubVersionMap[protocol] ?? null;
83
+ }
84
+ function getNetworkedDOMProtocolSubProtocol_v0_2SubversionOrThrow(protocol) {
85
+ const subversion = getNetworkedDOMProtocolSubProtocol_v0_2Subversion(protocol);
86
+ if (subversion === null) {
87
+ throw new Error(`Unrecognized networked-dom-v0.2 protocol subversion: ${protocol}`);
88
+ }
89
+ return subversion;
90
+ }
91
+ function isNetworkedDOMProtocolSubProtocol_v0_2(protocol) {
92
+ return networkedDOMProtocolSubProtocol_v0_2_SubVersionsList.includes(protocol);
93
+ }
94
+ function protocolSubversionHasConnectionTokens(protocolSubversion) {
95
+ return protocolSubversion >= 1;
96
+ }
97
+ function encodeConnectUsers(connectUsersMessage, writer, protocolSubversion) {
82
98
  const connectionIdsLength = connectUsersMessage.connectionIds.length;
83
99
  writer.writeUint8(ConnectUsersMessageType);
84
100
  writer.writeUVarint(connectionIdsLength);
85
101
  for (let i = 0; i < connectionIdsLength; i++) {
86
102
  writer.writeUVarint(connectUsersMessage.connectionIds[i]);
87
103
  }
104
+ if (protocolSubversionHasConnectionTokens(protocolSubversion)) {
105
+ if (connectUsersMessage.connectionTokens.length !== connectionIdsLength) {
106
+ throw new Error(
107
+ `connectionTokens length (${connectUsersMessage.connectionTokens.length}) does not match connectionIds length (${connectionIdsLength})`
108
+ );
109
+ }
110
+ for (let i = 0; i < connectionIdsLength; i++) {
111
+ const token = connectUsersMessage.connectionTokens[i];
112
+ if (token === null || token === void 0) {
113
+ writer.writeUVarint(0);
114
+ } else {
115
+ writer.writeLengthPrefixedString(token);
116
+ }
117
+ }
118
+ }
88
119
  }
89
120
  function encodeDisconnectUsers(disconnectUsersMessage, writer) {
90
121
  const connectionIdsLength = disconnectUsersMessage.connectionIds.length;
@@ -276,11 +307,11 @@
276
307
  }
277
308
  return messages;
278
309
  }
279
- function encodeClientMessage(message, writer) {
310
+ function encodeClientMessage(message, writer, protocolSubversion) {
280
311
  const type2 = message.type;
281
312
  switch (type2) {
282
313
  case "connectUsers":
283
- return encodeConnectUsers(message, writer);
314
+ return encodeConnectUsers(message, writer, protocolSubversion);
284
315
  case "disconnectUsers":
285
316
  return encodeDisconnectUsers(message, writer);
286
317
  case "event":
@@ -291,7 +322,7 @@
291
322
  throw new Error(`Unknown message type: ${type2}`);
292
323
  }
293
324
  }
294
- var networkedDOMProtocolSubProtocol_v0_1, textDecoder, BufferReader, textEncoder, BufferWriter, networkedDOMProtocolSubProtocol_v0_2, SnapshotMessageType, BatchStartMessageType, DocumentTimeMessageType, ChildrenAddedMessageType, ChildrenRemovedMessageType, AttributesChangedMessageType, ChangeVisibleToMessageType, ChangeHiddenFromMessageType, TextChangedMessageType, BatchEndMessageType, PingMessageType, WarningMessageType, ErrorMessageType, ConnectUsersMessageType, DisconnectUsersMessageType, EventMessageType, PongMessageType, batchEndMessage, batchStartMessage;
325
+ var networkedDOMProtocolSubProtocol_v0_1, textDecoder, BufferReader, textEncoder, BufferWriter, networkedDOMProtocolSubProtocol_v0_2, networkedDOMProtocolSubProtocol_v0_2_1, networkedDOMProtocolSubProtocol_v0_2_SubVersionsList, protocolSubVersionMap, SnapshotMessageType, BatchStartMessageType, DocumentTimeMessageType, ChildrenAddedMessageType, ChildrenRemovedMessageType, AttributesChangedMessageType, ChangeVisibleToMessageType, ChangeHiddenFromMessageType, TextChangedMessageType, BatchEndMessageType, PingMessageType, WarningMessageType, ErrorMessageType, ConnectUsersMessageType, DisconnectUsersMessageType, EventMessageType, PongMessageType, batchEndMessage, batchStartMessage;
295
326
  var init_build = __esm({
296
327
  "../networked-dom-protocol/build/index.js"() {
297
328
  networkedDOMProtocolSubProtocol_v0_1 = "networked-dom-v0.1";
@@ -519,6 +550,15 @@
519
550
  }
520
551
  };
521
552
  networkedDOMProtocolSubProtocol_v0_2 = "networked-dom-v0.2";
553
+ networkedDOMProtocolSubProtocol_v0_2_1 = "networked-dom-v0.2.1";
554
+ networkedDOMProtocolSubProtocol_v0_2_SubVersionsList = [
555
+ networkedDOMProtocolSubProtocol_v0_2_1,
556
+ networkedDOMProtocolSubProtocol_v0_2
557
+ ];
558
+ protocolSubVersionMap = {
559
+ [networkedDOMProtocolSubProtocol_v0_2]: 0,
560
+ [networkedDOMProtocolSubProtocol_v0_2_1]: 1
561
+ };
522
562
  SnapshotMessageType = 1;
523
563
  BatchStartMessageType = 2;
524
564
  DocumentTimeMessageType = 3;
@@ -1120,7 +1160,14 @@
1120
1160
  this.batchMode = false;
1121
1161
  this.batchMessages = [];
1122
1162
  this.websocket.binaryType = "arraybuffer";
1123
- this.send({ type: "connectUsers", connectionIds: [connectionId] });
1163
+ this.protocolSubversion = getNetworkedDOMProtocolSubProtocol_v0_2SubversionOrThrow(
1164
+ websocket.protocol
1165
+ );
1166
+ this.send({
1167
+ type: "connectUsers",
1168
+ connectionIds: [connectionId],
1169
+ connectionTokens: [this.options.connectionToken ?? null]
1170
+ });
1124
1171
  }
1125
1172
  handleEvent(element, event) {
1126
1173
  const nodeId = this.elementToId.get(element);
@@ -1144,7 +1191,7 @@
1144
1191
  }
1145
1192
  send(message) {
1146
1193
  const writer = new BufferWriter(256);
1147
- encodeClientMessage(message, writer);
1194
+ encodeClientMessage(message, writer, this.protocolSubversion);
1148
1195
  this.websocket.send(writer.getBuffer());
1149
1196
  }
1150
1197
  clearContents() {
@@ -1513,7 +1560,7 @@
1513
1560
  }
1514
1561
  static createWebSocket(url) {
1515
1562
  return new WebSocket(url, [
1516
- networkedDOMProtocolSubProtocol_v0_2,
1563
+ ...networkedDOMProtocolSubProtocol_v0_2_SubVersionsList,
1517
1564
  networkedDOMProtocolSubProtocol_v0_1
1518
1565
  ]);
1519
1566
  }
@@ -1536,7 +1583,7 @@
1536
1583
  websocket.addEventListener("open", () => {
1537
1584
  clearTimeout(timeoutId);
1538
1585
  this.websocket = websocket;
1539
- const isV02 = websocket.protocol === networkedDOMProtocolSubProtocol_v0_2;
1586
+ const isV02 = isNetworkedDOMProtocolSubProtocol_v0_2(websocket.protocol);
1540
1587
  let websocketAdapter;
1541
1588
  if (isV02) {
1542
1589
  websocketAdapter = new NetworkedDOMWebsocketV02Adapter(
@@ -2121,6 +2168,12 @@
2121
2168
  scene22.removeChatProbe(chatProbe);
2122
2169
  }
2123
2170
  },
2171
+ getOverlayElement() {
2172
+ if (scene22.getOverlayElement) {
2173
+ return scene22.getOverlayElement();
2174
+ }
2175
+ return null;
2176
+ },
2124
2177
  hasGraphicsAdapter() {
2125
2178
  return scene22.hasGraphicsAdapter();
2126
2179
  },
@@ -8010,7 +8063,7 @@
8010
8063
  }
8011
8064
  }
8012
8065
  };
8013
- RemoteDocument = class extends MElement {
8066
+ RemoteDocument = class extends TransformableElement {
8014
8067
  constructor() {
8015
8068
  super();
8016
8069
  this.scene = null;
@@ -9314,17 +9367,22 @@
9314
9367
  }
9315
9368
  overriddenHandler(element, event);
9316
9369
  };
9370
+ const loadingProgressManager = new LoadingProgressManager();
9371
+ const wrappedScene = createWrappedScene(this.options.mmlScene, loadingProgressManager);
9317
9372
  const src = this.options.url;
9318
9373
  this.remoteDocumentWrapper = new RemoteDocumentWrapper(
9319
9374
  src,
9320
9375
  this.options.windowTarget,
9321
- this.options.mmlScene,
9376
+ wrappedScene,
9322
9377
  eventHandler
9323
9378
  );
9324
9379
  this.options.targetForWrappers.append(this.remoteDocumentWrapper.remoteDocument);
9325
- let loadingProgressManager;
9380
+ let sceneLoadingProgressManager = null;
9326
9381
  if (this.options.mmlScene.getLoadingProgressManager) {
9327
- loadingProgressManager = this.options.mmlScene.getLoadingProgressManager();
9382
+ sceneLoadingProgressManager = this.options.mmlScene.getLoadingProgressManager();
9383
+ loadingProgressManager.addProgressCallback(() => {
9384
+ sceneLoadingProgressManager == null ? void 0 : sceneLoadingProgressManager.updateDocumentProgress(this);
9385
+ });
9328
9386
  }
9329
9387
  const isWebsocket = src.startsWith("ws://") || src.startsWith("wss://");
9330
9388
  if (isWebsocket) {
@@ -9336,15 +9394,22 @@
9336
9394
  this.remoteDocumentWrapper.setDocumentTime(time2);
9337
9395
  },
9338
9396
  (status) => {
9339
- if (status === NetworkedDOMWebsocketStatus.Connected) {
9340
- loadingProgressManager == null ? void 0 : loadingProgressManager.setInitialLoad(true);
9397
+ if (status === NetworkedDOMWebsocketStatus.Reconnecting) {
9398
+ this.remoteDocumentWrapper.remoteDocument.showError(true);
9399
+ loadingProgressManager.setInitialLoad(new Error("Failed to connect"));
9400
+ } else if (status === NetworkedDOMWebsocketStatus.Connected) {
9401
+ this.remoteDocumentWrapper.remoteDocument.showError(false);
9402
+ loadingProgressManager.setInitialLoad(true);
9403
+ } else {
9404
+ this.remoteDocumentWrapper.remoteDocument.showError(false);
9341
9405
  }
9342
9406
  this.options.statusUpdated(status);
9343
9407
  },
9344
9408
  {
9345
9409
  tagPrefix: "m-",
9346
9410
  // If overlays are allowed, allow SVG elements to populate them
9347
- allowSVGElements: this.options.allowOverlay
9411
+ allowSVGElements: this.options.allowOverlay,
9412
+ connectionToken: this.options.connectionToken ?? null
9348
9413
  }
9349
9414
  );
9350
9415
  this.websocket = websocket;
@@ -9361,12 +9426,15 @@
9361
9426
  overriddenHandler = () => {
9362
9427
  };
9363
9428
  }
9429
+ sceneLoadingProgressManager == null ? void 0 : sceneLoadingProgressManager.addLoadingDocument(this, this.options.url, loadingProgressManager);
9364
9430
  }
9365
9431
  dispose() {
9432
+ var _a2, _b2, _c;
9366
9433
  if (this.websocket) {
9367
9434
  this.websocket.stop();
9368
9435
  this.websocket = null;
9369
9436
  }
9437
+ (_c = (_b2 = (_a2 = this.options.mmlScene).getLoadingProgressManager) == null ? void 0 : _b2.call(_a2)) == null ? void 0 : _c.removeLoadingDocument(this);
9370
9438
  this.remoteDocumentWrapper.remoteDocument.remove();
9371
9439
  }
9372
9440
  };
@@ -114235,6 +114303,7 @@ void main() {
114235
114303
  const urlSearchParams = new URLSearchParams(window.location.search);
114236
114304
  const useIframe = scriptUrl.searchParams.get("iframe") === "true" || urlSearchParams.get("iframe") === "true";
114237
114305
  const allowOverlay = scriptUrl.searchParams.get("allowOverlay") === "true" || urlSearchParams.get("allowOverlay") === "true";
114306
+ const connectionToken = urlSearchParams.get("token") ?? null;
114238
114307
  const fullScreenMMLSceneOptions = {
114239
114308
  allowOverlay
114240
114309
  };
@@ -114262,6 +114331,7 @@ void main() {
114262
114331
  const statusUI = new StatusUI();
114263
114332
  const mmlNetworkSource = MMLNetworkSource.create({
114264
114333
  url,
114334
+ connectionToken,
114265
114335
  mmlScene: fullScreenMMLScene,
114266
114336
  statusUpdated: (status) => {
114267
114337
  if (status === NetworkedDOMWebsocketStatus.Connected) {