microboard-temp 0.13.79 → 0.13.81

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.
@@ -3638,6 +3638,8 @@ var init_Settings = __esm(() => {
3638
3638
  getDPI: () => 1,
3639
3639
  reactEditorFocus: () => {},
3640
3640
  reactEditorToSlatePoint: () => null,
3641
+ onAuthInvalid: async () => false,
3642
+ onAuthTerminalFailure: () => {},
3641
3643
  planNames: {
3642
3644
  basic: "Basic",
3643
3645
  plus: "Plus",
@@ -6183,11 +6185,12 @@ function getSnapshotFromList(list, board) {
6183
6185
  const snapshot = {
6184
6186
  events: list.getConfirmedRecords().map((record) => record.event),
6185
6187
  items: board.serialize(),
6186
- lastIndex: list.getLastIndex()
6188
+ lastIndex: getLastIndexFromList(list)
6187
6189
  };
6188
6190
  list.applyUnconfirmed();
6189
6191
  return snapshot;
6190
6192
  }
6193
+ var init_getSnapshotFromList = () => {};
6191
6194
 
6192
6195
  // src/Events/Log/EventsLog.ts
6193
6196
  class EventsLog {
@@ -6276,6 +6279,7 @@ var init_EventsLog = __esm(() => {
6276
6279
  init_getUndoRecordFromList();
6277
6280
  init_getUnpublishedEventFromList();
6278
6281
  init_insertEventsFromOtherConnectionsIntoList();
6282
+ init_getSnapshotFromList();
6279
6283
  });
6280
6284
 
6281
6285
  // src/Events/Log/index.ts
@@ -14432,6 +14436,11 @@ class Events {
14432
14436
  getOpKey(op) {
14433
14437
  return op.method;
14434
14438
  }
14439
+ refreshIdentity() {
14440
+ const sessionId = this.getSessionId();
14441
+ const authorUserId = this.getAuthorUserId();
14442
+ this.log.refreshUnconfirmedIdentity(sessionId, authorUserId);
14443
+ }
14435
14444
  getSessionId() {
14436
14445
  return getConnectionSessionId(this.connection);
14437
14446
  }
@@ -31871,7 +31880,32 @@ var init_setLink = __esm(() => {
31871
31880
 
31872
31881
  // src/Items/RichText/editorHelpers/common/getSelectionMarks.ts
31873
31882
  function getSelectionMarks(editor) {
31874
- return import_slate42.Editor.marks(editor);
31883
+ const marks = import_slate42.Editor.marks(editor);
31884
+ if (!editor.selection) {
31885
+ return marks;
31886
+ }
31887
+ if (!import_slate42.Range.isExpanded(editor.selection) || marks && Object.keys(marks).length > 0) {
31888
+ return marks;
31889
+ }
31890
+ const textEntries = Array.from(import_slate42.Editor.nodes(editor, {
31891
+ at: editor.selection,
31892
+ match: (node) => import_slate42.Text.isText(node)
31893
+ }));
31894
+ const [firstEntry, ...restEntries] = textEntries;
31895
+ if (!firstEntry) {
31896
+ return marks;
31897
+ }
31898
+ const { text: _firstText, ...firstMarks } = firstEntry[0];
31899
+ const commonMarks = { ...firstMarks };
31900
+ for (const [node] of restEntries) {
31901
+ const { text: _text, ...nodeMarks } = node;
31902
+ for (const key of Object.keys(commonMarks)) {
31903
+ if (commonMarks[key] !== nodeMarks[key]) {
31904
+ delete commonMarks[key];
31905
+ }
31906
+ }
31907
+ }
31908
+ return commonMarks;
31875
31909
  }
31876
31910
  var import_slate42;
31877
31911
  var init_getSelectionMarks = __esm(() => {
@@ -39494,7 +39528,14 @@ function setSelectionFontSize(editor, isAutosize, fontSize, selectionContext) {
39494
39528
  shouldUpdateElement = true;
39495
39529
  }
39496
39530
  } else {
39497
- import_slate53.Editor.addMark(editor, "fontSize", size);
39531
+ if (editor.selection && import_slate53.Range.isExpanded(editor.selection)) {
39532
+ import_slate53.Transforms.setNodes(editor, { fontSize: size }, {
39533
+ match: (n) => import_slate53.Text.isText(n),
39534
+ split: true
39535
+ });
39536
+ } else {
39537
+ import_slate53.Editor.addMark(editor, "fontSize", size);
39538
+ }
39498
39539
  }
39499
39540
  }
39500
39541
  if (selectionContext === "EditTextUnderPointer") {
@@ -39574,7 +39615,14 @@ function setSelectionFontColor(editor, format, selectionContext) {
39574
39615
  return;
39575
39616
  }
39576
39617
  if (marks.fontColor !== format) {
39577
- import_slate55.Editor.addMark(editor, "fontColor", format);
39618
+ if (editor.selection && import_slate55.Range.isExpanded(editor.selection)) {
39619
+ import_slate55.Transforms.setNodes(editor, { fontColor: format }, {
39620
+ match: (n) => import_slate55.Text.isText(n),
39621
+ split: true
39622
+ });
39623
+ } else {
39624
+ import_slate55.Editor.addMark(editor, "fontColor", format);
39625
+ }
39578
39626
  }
39579
39627
  if (selectionContext === "EditTextUnderPointer") {
39580
39628
  try {
@@ -40125,7 +40173,14 @@ function applySelectionFontColor(editor, fontColor) {
40125
40173
  if (!marks) {
40126
40174
  return;
40127
40175
  }
40128
- import_slate57.Editor.addMark(editor, "fontColor", fontColor);
40176
+ if (editor.selection && import_slate57.Range.isExpanded(editor.selection)) {
40177
+ import_slate57.Transforms.setNodes(editor, { fontColor }, {
40178
+ match: (n) => import_slate57.Text.isText(n),
40179
+ split: true
40180
+ });
40181
+ } else {
40182
+ import_slate57.Editor.addMark(editor, "fontColor", fontColor);
40183
+ }
40129
40184
  }
40130
40185
  var import_slate57;
40131
40186
  var init_applySelectionFontColor = __esm(() => {
@@ -40153,7 +40208,14 @@ function applySelectionFontSize(editor, fontSize, selectionContext) {
40153
40208
  focus: import_slate58.Editor.end(editor, [])
40154
40209
  });
40155
40210
  }
40156
- import_slate58.Editor.addMark(editor, "fontSize", size);
40211
+ if (editor.selection && import_slate58.Range.isExpanded(editor.selection)) {
40212
+ import_slate58.Transforms.setNodes(editor, { fontSize: size }, {
40213
+ match: (n) => import_slate58.Text.isText(n),
40214
+ split: true
40215
+ });
40216
+ } else {
40217
+ import_slate58.Editor.addMark(editor, "fontSize", size);
40218
+ }
40157
40219
  if (selectionContext === "EditTextUnderPointer") {}
40158
40220
  }
40159
40221
  var import_slate58;
@@ -41821,6 +41883,35 @@ var init_Audio = __esm(() => {
41821
41883
  };
41822
41884
  });
41823
41885
 
41886
+ // src/api/AuthRequest.ts
41887
+ async function authenticatedFetch(url2, init2 = {}, boardId) {
41888
+ const getAuthInit = (originalInit) => {
41889
+ const token = conf.getAccessToken();
41890
+ if (!token) {
41891
+ return originalInit;
41892
+ }
41893
+ const headers = new Headers(originalInit.headers);
41894
+ headers.set("Authorization", `Bearer ${token}`);
41895
+ return { ...originalInit, headers };
41896
+ };
41897
+ let response = await fetch(url2, getAuthInit(init2));
41898
+ if (response.status === 401) {
41899
+ const body = await response.clone().json().catch(() => ({}));
41900
+ if (body.code === "AUTH_INVALID_ACCESS_TOKEN") {
41901
+ const refreshed = await conf.onAuthInvalid(boardId);
41902
+ if (refreshed) {
41903
+ response = await fetch(url2, getAuthInit(init2));
41904
+ } else {
41905
+ conf.onAuthTerminalFailure(boardId, body.code);
41906
+ }
41907
+ }
41908
+ }
41909
+ return response;
41910
+ }
41911
+ var init_AuthRequest = __esm(() => {
41912
+ init_Settings();
41913
+ });
41914
+
41824
41915
  // src/api/MediaHelpers.ts
41825
41916
  function getAccessTypeFromUrl(url2) {
41826
41917
  try {
@@ -41838,15 +41929,14 @@ function getAccessTypeFromUrl(url2) {
41838
41929
  }
41839
41930
  return null;
41840
41931
  }
41841
- var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
41842
- const response = await fetch(`${baseUrl || ""}/svg/${boardId}`, {
41932
+ var uploadSvgDirectly = async (blob, boardId, baseUrl) => {
41933
+ const response = await authenticatedFetch(`${baseUrl || ""}/svg/${boardId}`, {
41843
41934
  method: "POST",
41844
41935
  headers: {
41845
- "Content-Type": "image/svg+xml",
41846
- Authorization: `Bearer ${accessToken}`
41936
+ "Content-Type": "image/svg+xml"
41847
41937
  },
41848
41938
  body: blob
41849
- });
41939
+ }, boardId);
41850
41940
  if (!response.ok) {
41851
41941
  conf.hooks.onUploadMediaError(response, "image");
41852
41942
  throw new Error(`Failed to upload SVG. Status: ${response.status}`);
@@ -41856,19 +41946,18 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
41856
41946
  throw new Error("Server did not provide a key for the uploaded SVG.");
41857
41947
  }
41858
41948
  return data.url;
41859
- }, uploadWithPresignedUrl = async (blob, accessToken, boardId, type, baseUrl) => {
41860
- const generateUrlResponse = await fetch(`${baseUrl || ""}/media/upload`, {
41949
+ }, uploadWithPresignedUrl = async (blob, boardId, type, baseUrl) => {
41950
+ const generateUrlResponse = await authenticatedFetch(`${baseUrl || ""}/media/upload`, {
41861
41951
  method: "POST",
41862
41952
  headers: {
41863
- "Content-Type": "application/json",
41864
- Authorization: `Bearer ${accessToken}`
41953
+ "Content-Type": "application/json"
41865
41954
  },
41866
41955
  body: JSON.stringify({
41867
41956
  fileSize: blob.size,
41868
41957
  fileType: blob.type,
41869
41958
  boardId
41870
41959
  })
41871
- });
41960
+ }, boardId);
41872
41961
  if (!generateUrlResponse.ok) {
41873
41962
  conf.hooks.onUploadMediaError(generateUrlResponse, type);
41874
41963
  throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
@@ -41890,18 +41979,18 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
41890
41979
  throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
41891
41980
  }
41892
41981
  return url2;
41893
- }, uploadMediaToStorage = async (blob, accessToken, boardId, type, baseUrl) => {
41982
+ }, uploadMediaToStorage = async (blob, boardId, type, baseUrl) => {
41894
41983
  try {
41895
41984
  if (blob.type === "image/svg+xml") {
41896
- return await uploadSvgDirectly(blob, accessToken, boardId, baseUrl);
41985
+ return await uploadSvgDirectly(blob, boardId, baseUrl);
41897
41986
  } else {
41898
- return await uploadWithPresignedUrl(blob, accessToken, boardId, type, baseUrl);
41987
+ return await uploadWithPresignedUrl(blob, boardId, type, baseUrl);
41899
41988
  }
41900
41989
  } catch (error48) {
41901
41990
  console.error("Media upload process error:", error48);
41902
41991
  throw error48;
41903
41992
  }
41904
- }, getMediaSignedUrl = async (url2, accessToken) => {
41993
+ }, getMediaSignedUrl = async (url2) => {
41905
41994
  const accessType = getAccessTypeFromUrl(url2);
41906
41995
  if (!accessType) {
41907
41996
  return null;
@@ -41909,15 +41998,9 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
41909
41998
  if (accessType === "anonymous") {
41910
41999
  return url2;
41911
42000
  }
41912
- if (!accessToken) {
41913
- return null;
41914
- }
41915
42001
  try {
41916
- const response = await fetch(url2, {
41917
- method: "GET",
41918
- headers: {
41919
- Authorization: `Bearer ${accessToken}`
41920
- }
42002
+ const response = await authenticatedFetch(url2, {
42003
+ method: "GET"
41921
42004
  });
41922
42005
  if (!response.ok) {
41923
42006
  console.error("Failed to get media signed url:", response.status, response.statusText);
@@ -41932,15 +42015,16 @@ var uploadSvgDirectly = async (blob, accessToken, boardId, baseUrl) => {
41932
42015
  };
41933
42016
  var init_MediaHelpers = __esm(() => {
41934
42017
  init_Settings();
42018
+ init_AuthRequest();
41935
42019
  });
41936
42020
 
41937
42021
  // src/Items/Audio/AudioHelpers.ts
41938
- var prepareAudio = (file2, accessToken, boardId, baseUrl) => {
42022
+ var prepareAudio = (file2, boardId, baseUrl) => {
41939
42023
  return new Promise((resolve, reject) => {
41940
42024
  const audio = document.createElement("audio");
41941
42025
  audio.src = URL.createObjectURL(file2);
41942
42026
  audio.onloadedmetadata = () => {
41943
- uploadMediaToStorage(file2, accessToken, boardId, "audio", baseUrl).then((url2) => {
42027
+ uploadMediaToStorage(file2, boardId, "audio", baseUrl).then((url2) => {
41944
42028
  resolve(url2);
41945
42029
  }).catch(reject);
41946
42030
  };
@@ -60467,7 +60551,7 @@ var init_Video = __esm(() => {
60467
60551
  async setPreviewUrl(url2) {
60468
60552
  if (this.isStorageUrl) {
60469
60553
  try {
60470
- this.preview.src = await getMediaSignedUrl(url2, this.board.getAccount()?.accessToken || null) || "";
60554
+ this.preview.src = await getMediaSignedUrl(url2) || "";
60471
60555
  } catch (err) {
60472
60556
  console.error(err);
60473
60557
  this.onError();
@@ -60827,9 +60911,9 @@ var getBlobFromDataURL = (dataURL) => {
60827
60911
  };
60828
60912
  }
60829
60913
  });
60830
- }, prepareImage = (inp, accessToken, boardId, baseUrl) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash: hash2 }) => {
60914
+ }, prepareImage = (inp, boardId, baseUrl) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash: hash2 }) => {
60831
60915
  const { blob, mimeType } = getBlobFromDataURL(dataURL);
60832
- return uploadMediaToStorage(blob, accessToken, boardId, "image", baseUrl).then((src) => {
60916
+ return uploadMediaToStorage(blob, boardId, "image", baseUrl).then((src) => {
60833
60917
  return {
60834
60918
  imageDimension: { width: width2, height: height2 },
60835
60919
  base64: dataURL,
@@ -60870,15 +60954,15 @@ var getVideoMetadata = (file2) => {
60870
60954
  board.selection.add(boardVideo);
60871
60955
  onLoadCb(boardVideo);
60872
60956
  });
60873
- }, prepareVideo = (file2, accessToken, boardId, baseUrl) => {
60957
+ }, prepareVideo = (file2, boardId, baseUrl) => {
60874
60958
  return new Promise((resolve2, reject) => {
60875
60959
  const video = document.createElement("video");
60876
60960
  video.src = URL.createObjectURL(file2);
60877
60961
  video.onloadedmetadata = () => {
60878
60962
  video.onseeked = () => {
60879
60963
  video.onseeked = null;
60880
- prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId, baseUrl).then((imageData) => {
60881
- uploadMediaToStorage(file2, accessToken, boardId, "video", baseUrl).then((url2) => {
60964
+ prepareImage(captureFrame(0.1, video)?.src, boardId, baseUrl).then((imageData) => {
60965
+ uploadMediaToStorage(file2, boardId, "video", baseUrl).then((url2) => {
60882
60966
  resolve2({
60883
60967
  url: url2,
60884
60968
  previewUrl: imageData.storageLink
@@ -66866,8 +66950,8 @@ var init_Card = __esm(() => {
66866
66950
  async createImages() {
66867
66951
  this.face = conf.documentFactory.createElement("img");
66868
66952
  this.backside = conf.documentFactory.createElement("img");
66869
- this.face.src = await getMediaSignedUrl(this.faceUrl, this.board.getAccount()?.accessToken || null) || "";
66870
- this.backside.src = await getMediaSignedUrl(this.backsideUrl, this.board.getAccount()?.accessToken || null) || "";
66953
+ this.face.src = await getMediaSignedUrl(this.faceUrl) || "";
66954
+ this.backside.src = await getMediaSignedUrl(this.backsideUrl) || "";
66871
66955
  this.face.onload = () => {
66872
66956
  this.subject.publish(this);
66873
66957
  };
@@ -67568,7 +67652,7 @@ var init_Dice = __esm(() => {
67568
67652
  this.renderValues[index2] = value;
67569
67653
  } else {
67570
67654
  const image2 = conf.documentFactory.createElement("img");
67571
- image2.src = await getMediaSignedUrl(value, this.board.getAccount()?.accessToken || null) || "";
67655
+ image2.src = await getMediaSignedUrl(value) || "";
67572
67656
  this.renderValues[index2] = image2;
67573
67657
  image2.onload = () => {
67574
67658
  this.subject.publish(this);
@@ -68023,7 +68107,7 @@ var init_Screen = __esm(() => {
68023
68107
  this.backgroundUrl = url2 || "";
68024
68108
  if (url2) {
68025
68109
  this.backgroundImage = conf.documentFactory.createElement("img");
68026
- this.backgroundImage.src = await getMediaSignedUrl(url2, this.board.getAccount()?.accessToken || null) || "";
68110
+ this.backgroundImage.src = await getMediaSignedUrl(url2) || "";
68027
68111
  this.applyBackgroundColor("none");
68028
68112
  this.backgroundImage.onload = () => {
68029
68113
  this.subject.publish(this);
@@ -69885,7 +69969,7 @@ var init_Image = __esm(() => {
69885
69969
  }
69886
69970
  async setStorageLink(link2) {
69887
69971
  this.storageLink = link2;
69888
- this.signedUrl = await getMediaSignedUrl(link2, this.board.getAccount()?.accessToken || null) || "";
69972
+ this.signedUrl = await getMediaSignedUrl(link2) || "";
69889
69973
  if (!this.signedUrl) {
69890
69974
  const canvas = conf.documentFactory.createElement("canvas");
69891
69975
  canvas.width = 100;
@@ -70306,7 +70390,7 @@ function handleAudioGenerate(response, board) {
70306
70390
  }
70307
70391
  function handleImageGenerate(response, board) {
70308
70392
  if (response.status === "completed" && response.base64) {
70309
- prepareImage(response.base64, conf.getAccessToken(), board.getBoardId()).then((imageData) => {
70393
+ prepareImage(response.base64, board.getBoardId()).then((imageData) => {
70310
70394
  const placeholderId = board.aiImagePlaceholder?.getId();
70311
70395
  if (placeholderId) {
70312
70396
  const placeholderNode = board.items.getById(placeholderId);