microboard-temp 0.5.67 → 0.5.69

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.
@@ -41394,6 +41394,52 @@ var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).the
41394
41394
  });
41395
41395
  });
41396
41396
 
41397
+ // src/api/MediaHelpers.ts
41398
+ var uploadMediaToStorage = async (hash, videoBlob, accessToken, boardId, type) => {
41399
+ try {
41400
+ const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
41401
+ method: "POST",
41402
+ headers: {
41403
+ "Content-Type": "application/json",
41404
+ Authorization: `Bearer ${accessToken}`
41405
+ },
41406
+ body: JSON.stringify({
41407
+ fileSize: videoBlob.size,
41408
+ boardId,
41409
+ hash
41410
+ })
41411
+ });
41412
+ if (!generateUrlResponse.ok) {
41413
+ conf.hooks.onUploadMediaError(generateUrlResponse, type);
41414
+ throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
41415
+ }
41416
+ const data = await generateUrlResponse.json();
41417
+ if (data.mediaUrl) {
41418
+ console.log("Media already exists, skipping upload.");
41419
+ return data.mediaUrl;
41420
+ }
41421
+ const { uploadUrl, promisedMediaUrl } = data;
41422
+ if (!uploadUrl || !promisedMediaUrl) {
41423
+ throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
41424
+ }
41425
+ const uploadResponse = await fetch(uploadUrl, {
41426
+ method: "PUT",
41427
+ headers: {
41428
+ "Content-Type": videoBlob.type
41429
+ },
41430
+ body: videoBlob
41431
+ });
41432
+ if (!uploadResponse.ok) {
41433
+ console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
41434
+ throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
41435
+ }
41436
+ return promisedMediaUrl;
41437
+ } catch (error) {
41438
+ console.error("Media upload process error:", error);
41439
+ throw error;
41440
+ }
41441
+ };
41442
+
41397
41443
  // src/Items/Video/VideoHelpers.ts
41398
41444
  var uploadVideoToStorage = async (hash, videoBlob, accessToken, boardId) => {
41399
41445
  return new Promise((resolve2, reject) => {
@@ -41456,7 +41502,7 @@ var prepareVideo = (file, accessToken, boardId) => {
41456
41502
  video.onseeked = null;
41457
41503
  prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
41458
41504
  fileTosha256(file).then((hash) => {
41459
- uploadVideoToStorage(hash, file, accessToken, boardId).then((url) => {
41505
+ uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
41460
41506
  resolve2({
41461
41507
  url,
41462
41508
  previewUrl: imageData.storageLink
@@ -41654,7 +41700,7 @@ class AudioItem extends BaseItem {
41654
41700
  this.transformation.deserialize(data.transformation);
41655
41701
  }
41656
41702
  if (data.url) {
41657
- this.setUrl(data.url);
41703
+ this.url = data.url;
41658
41704
  }
41659
41705
  if (data.extension) {
41660
41706
  this.extension = data.extension;
@@ -41757,37 +41803,13 @@ class AudioItem extends BaseItem {
41757
41803
  }
41758
41804
  }
41759
41805
  // src/Items/Audio/AudioHelpers.ts
41760
- var uploadAudioToStorage = async (hash, audioBlob, accessToken, boardId) => {
41761
- return new Promise((resolve2, reject) => {
41762
- fetch(`${window.location.origin}/api/v1/media/audio/${boardId}`, {
41763
- method: "POST",
41764
- headers: {
41765
- "Content-Type": audioBlob.type,
41766
- "x-audio-id": hash,
41767
- Authorization: `Bearer ${accessToken}`
41768
- },
41769
- body: audioBlob
41770
- }).then(async (response) => {
41771
- if (response.status !== 200) {
41772
- return conf.hooks.onUploadMediaError(response, "audio");
41773
- }
41774
- return response.json();
41775
- }).then((data) => {
41776
- console.log(data);
41777
- resolve2(data.src);
41778
- }).catch((error) => {
41779
- console.error("Media storage error:", error);
41780
- reject(error);
41781
- });
41782
- });
41783
- };
41784
41806
  var prepareAudio = (file, accessToken, boardId) => {
41785
41807
  return new Promise((resolve2, reject) => {
41786
41808
  const audio = document.createElement("audio");
41787
41809
  audio.src = URL.createObjectURL(file);
41788
41810
  audio.onloadedmetadata = () => {
41789
41811
  fileTosha256(file).then((hash) => {
41790
- uploadAudioToStorage(hash, file, accessToken, boardId).then((url) => {
41812
+ uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
41791
41813
  resolve2(url);
41792
41814
  }).catch(reject);
41793
41815
  }).catch(() => {
package/dist/cjs/index.js CHANGED
@@ -41394,6 +41394,52 @@ var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).the
41394
41394
  });
41395
41395
  });
41396
41396
 
41397
+ // src/api/MediaHelpers.ts
41398
+ var uploadMediaToStorage = async (hash, videoBlob, accessToken, boardId, type) => {
41399
+ try {
41400
+ const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
41401
+ method: "POST",
41402
+ headers: {
41403
+ "Content-Type": "application/json",
41404
+ Authorization: `Bearer ${accessToken}`
41405
+ },
41406
+ body: JSON.stringify({
41407
+ fileSize: videoBlob.size,
41408
+ boardId,
41409
+ hash
41410
+ })
41411
+ });
41412
+ if (!generateUrlResponse.ok) {
41413
+ conf.hooks.onUploadMediaError(generateUrlResponse, type);
41414
+ throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
41415
+ }
41416
+ const data = await generateUrlResponse.json();
41417
+ if (data.mediaUrl) {
41418
+ console.log("Media already exists, skipping upload.");
41419
+ return data.mediaUrl;
41420
+ }
41421
+ const { uploadUrl, promisedMediaUrl } = data;
41422
+ if (!uploadUrl || !promisedMediaUrl) {
41423
+ throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
41424
+ }
41425
+ const uploadResponse = await fetch(uploadUrl, {
41426
+ method: "PUT",
41427
+ headers: {
41428
+ "Content-Type": videoBlob.type
41429
+ },
41430
+ body: videoBlob
41431
+ });
41432
+ if (!uploadResponse.ok) {
41433
+ console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
41434
+ throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
41435
+ }
41436
+ return promisedMediaUrl;
41437
+ } catch (error) {
41438
+ console.error("Media upload process error:", error);
41439
+ throw error;
41440
+ }
41441
+ };
41442
+
41397
41443
  // src/Items/Video/VideoHelpers.ts
41398
41444
  var uploadVideoToStorage = async (hash, videoBlob, accessToken, boardId) => {
41399
41445
  return new Promise((resolve2, reject) => {
@@ -41456,7 +41502,7 @@ var prepareVideo = (file, accessToken, boardId) => {
41456
41502
  video.onseeked = null;
41457
41503
  prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
41458
41504
  fileTosha256(file).then((hash) => {
41459
- uploadVideoToStorage(hash, file, accessToken, boardId).then((url) => {
41505
+ uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
41460
41506
  resolve2({
41461
41507
  url,
41462
41508
  previewUrl: imageData.storageLink
@@ -41654,7 +41700,7 @@ class AudioItem extends BaseItem {
41654
41700
  this.transformation.deserialize(data.transformation);
41655
41701
  }
41656
41702
  if (data.url) {
41657
- this.setUrl(data.url);
41703
+ this.url = data.url;
41658
41704
  }
41659
41705
  if (data.extension) {
41660
41706
  this.extension = data.extension;
@@ -41757,37 +41803,13 @@ class AudioItem extends BaseItem {
41757
41803
  }
41758
41804
  }
41759
41805
  // src/Items/Audio/AudioHelpers.ts
41760
- var uploadAudioToStorage = async (hash, audioBlob, accessToken, boardId) => {
41761
- return new Promise((resolve2, reject) => {
41762
- fetch(`${window.location.origin}/api/v1/media/audio/${boardId}`, {
41763
- method: "POST",
41764
- headers: {
41765
- "Content-Type": audioBlob.type,
41766
- "x-audio-id": hash,
41767
- Authorization: `Bearer ${accessToken}`
41768
- },
41769
- body: audioBlob
41770
- }).then(async (response) => {
41771
- if (response.status !== 200) {
41772
- return conf.hooks.onUploadMediaError(response, "audio");
41773
- }
41774
- return response.json();
41775
- }).then((data) => {
41776
- console.log(data);
41777
- resolve2(data.src);
41778
- }).catch((error) => {
41779
- console.error("Media storage error:", error);
41780
- reject(error);
41781
- });
41782
- });
41783
- };
41784
41806
  var prepareAudio = (file, accessToken, boardId) => {
41785
41807
  return new Promise((resolve2, reject) => {
41786
41808
  const audio = document.createElement("audio");
41787
41809
  audio.src = URL.createObjectURL(file);
41788
41810
  audio.onloadedmetadata = () => {
41789
41811
  fileTosha256(file).then((hash) => {
41790
- uploadAudioToStorage(hash, file, accessToken, boardId).then((url) => {
41812
+ uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
41791
41813
  resolve2(url);
41792
41814
  }).catch(reject);
41793
41815
  }).catch(() => {
package/dist/cjs/node.js CHANGED
@@ -43867,6 +43867,52 @@ var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).the
43867
43867
  });
43868
43868
  });
43869
43869
 
43870
+ // src/api/MediaHelpers.ts
43871
+ var uploadMediaToStorage = async (hash, videoBlob, accessToken, boardId, type) => {
43872
+ try {
43873
+ const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
43874
+ method: "POST",
43875
+ headers: {
43876
+ "Content-Type": "application/json",
43877
+ Authorization: `Bearer ${accessToken}`
43878
+ },
43879
+ body: JSON.stringify({
43880
+ fileSize: videoBlob.size,
43881
+ boardId,
43882
+ hash
43883
+ })
43884
+ });
43885
+ if (!generateUrlResponse.ok) {
43886
+ conf.hooks.onUploadMediaError(generateUrlResponse, type);
43887
+ throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
43888
+ }
43889
+ const data = await generateUrlResponse.json();
43890
+ if (data.mediaUrl) {
43891
+ console.log("Media already exists, skipping upload.");
43892
+ return data.mediaUrl;
43893
+ }
43894
+ const { uploadUrl, promisedMediaUrl } = data;
43895
+ if (!uploadUrl || !promisedMediaUrl) {
43896
+ throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
43897
+ }
43898
+ const uploadResponse = await fetch(uploadUrl, {
43899
+ method: "PUT",
43900
+ headers: {
43901
+ "Content-Type": videoBlob.type
43902
+ },
43903
+ body: videoBlob
43904
+ });
43905
+ if (!uploadResponse.ok) {
43906
+ console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
43907
+ throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
43908
+ }
43909
+ return promisedMediaUrl;
43910
+ } catch (error) {
43911
+ console.error("Media upload process error:", error);
43912
+ throw error;
43913
+ }
43914
+ };
43915
+
43870
43916
  // src/Items/Video/VideoHelpers.ts
43871
43917
  var uploadVideoToStorage = async (hash, videoBlob, accessToken, boardId) => {
43872
43918
  return new Promise((resolve2, reject) => {
@@ -43929,7 +43975,7 @@ var prepareVideo = (file, accessToken, boardId) => {
43929
43975
  video.onseeked = null;
43930
43976
  prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
43931
43977
  fileTosha256(file).then((hash) => {
43932
- uploadVideoToStorage(hash, file, accessToken, boardId).then((url) => {
43978
+ uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
43933
43979
  resolve2({
43934
43980
  url,
43935
43981
  previewUrl: imageData.storageLink
@@ -44127,7 +44173,7 @@ class AudioItem extends BaseItem {
44127
44173
  this.transformation.deserialize(data.transformation);
44128
44174
  }
44129
44175
  if (data.url) {
44130
- this.setUrl(data.url);
44176
+ this.url = data.url;
44131
44177
  }
44132
44178
  if (data.extension) {
44133
44179
  this.extension = data.extension;
@@ -44230,37 +44276,13 @@ class AudioItem extends BaseItem {
44230
44276
  }
44231
44277
  }
44232
44278
  // src/Items/Audio/AudioHelpers.ts
44233
- var uploadAudioToStorage = async (hash, audioBlob, accessToken, boardId) => {
44234
- return new Promise((resolve2, reject) => {
44235
- fetch(`${window.location.origin}/api/v1/media/audio/${boardId}`, {
44236
- method: "POST",
44237
- headers: {
44238
- "Content-Type": audioBlob.type,
44239
- "x-audio-id": hash,
44240
- Authorization: `Bearer ${accessToken}`
44241
- },
44242
- body: audioBlob
44243
- }).then(async (response) => {
44244
- if (response.status !== 200) {
44245
- return conf.hooks.onUploadMediaError(response, "audio");
44246
- }
44247
- return response.json();
44248
- }).then((data) => {
44249
- console.log(data);
44250
- resolve2(data.src);
44251
- }).catch((error) => {
44252
- console.error("Media storage error:", error);
44253
- reject(error);
44254
- });
44255
- });
44256
- };
44257
44279
  var prepareAudio = (file, accessToken, boardId) => {
44258
44280
  return new Promise((resolve2, reject) => {
44259
44281
  const audio = document.createElement("audio");
44260
44282
  audio.src = URL.createObjectURL(file);
44261
44283
  audio.onloadedmetadata = () => {
44262
44284
  fileTosha256(file).then((hash) => {
44263
- uploadAudioToStorage(hash, file, accessToken, boardId).then((url) => {
44285
+ uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
44264
44286
  resolve2(url);
44265
44287
  }).catch(reject);
44266
44288
  }).catch(() => {
@@ -41240,6 +41240,52 @@ var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).the
41240
41240
  });
41241
41241
  });
41242
41242
 
41243
+ // src/api/MediaHelpers.ts
41244
+ var uploadMediaToStorage = async (hash, videoBlob, accessToken, boardId, type) => {
41245
+ try {
41246
+ const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
41247
+ method: "POST",
41248
+ headers: {
41249
+ "Content-Type": "application/json",
41250
+ Authorization: `Bearer ${accessToken}`
41251
+ },
41252
+ body: JSON.stringify({
41253
+ fileSize: videoBlob.size,
41254
+ boardId,
41255
+ hash
41256
+ })
41257
+ });
41258
+ if (!generateUrlResponse.ok) {
41259
+ conf.hooks.onUploadMediaError(generateUrlResponse, type);
41260
+ throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
41261
+ }
41262
+ const data = await generateUrlResponse.json();
41263
+ if (data.mediaUrl) {
41264
+ console.log("Media already exists, skipping upload.");
41265
+ return data.mediaUrl;
41266
+ }
41267
+ const { uploadUrl, promisedMediaUrl } = data;
41268
+ if (!uploadUrl || !promisedMediaUrl) {
41269
+ throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
41270
+ }
41271
+ const uploadResponse = await fetch(uploadUrl, {
41272
+ method: "PUT",
41273
+ headers: {
41274
+ "Content-Type": videoBlob.type
41275
+ },
41276
+ body: videoBlob
41277
+ });
41278
+ if (!uploadResponse.ok) {
41279
+ console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
41280
+ throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
41281
+ }
41282
+ return promisedMediaUrl;
41283
+ } catch (error) {
41284
+ console.error("Media upload process error:", error);
41285
+ throw error;
41286
+ }
41287
+ };
41288
+
41243
41289
  // src/Items/Video/VideoHelpers.ts
41244
41290
  var uploadVideoToStorage = async (hash, videoBlob, accessToken, boardId) => {
41245
41291
  return new Promise((resolve2, reject) => {
@@ -41302,7 +41348,7 @@ var prepareVideo = (file, accessToken, boardId) => {
41302
41348
  video.onseeked = null;
41303
41349
  prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
41304
41350
  fileTosha256(file).then((hash) => {
41305
- uploadVideoToStorage(hash, file, accessToken, boardId).then((url) => {
41351
+ uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
41306
41352
  resolve2({
41307
41353
  url,
41308
41354
  previewUrl: imageData.storageLink
@@ -41500,7 +41546,7 @@ class AudioItem extends BaseItem {
41500
41546
  this.transformation.deserialize(data.transformation);
41501
41547
  }
41502
41548
  if (data.url) {
41503
- this.setUrl(data.url);
41549
+ this.url = data.url;
41504
41550
  }
41505
41551
  if (data.extension) {
41506
41552
  this.extension = data.extension;
@@ -41603,37 +41649,13 @@ class AudioItem extends BaseItem {
41603
41649
  }
41604
41650
  }
41605
41651
  // src/Items/Audio/AudioHelpers.ts
41606
- var uploadAudioToStorage = async (hash, audioBlob, accessToken, boardId) => {
41607
- return new Promise((resolve2, reject) => {
41608
- fetch(`${window.location.origin}/api/v1/media/audio/${boardId}`, {
41609
- method: "POST",
41610
- headers: {
41611
- "Content-Type": audioBlob.type,
41612
- "x-audio-id": hash,
41613
- Authorization: `Bearer ${accessToken}`
41614
- },
41615
- body: audioBlob
41616
- }).then(async (response) => {
41617
- if (response.status !== 200) {
41618
- return conf.hooks.onUploadMediaError(response, "audio");
41619
- }
41620
- return response.json();
41621
- }).then((data) => {
41622
- console.log(data);
41623
- resolve2(data.src);
41624
- }).catch((error) => {
41625
- console.error("Media storage error:", error);
41626
- reject(error);
41627
- });
41628
- });
41629
- };
41630
41652
  var prepareAudio = (file, accessToken, boardId) => {
41631
41653
  return new Promise((resolve2, reject) => {
41632
41654
  const audio = document.createElement("audio");
41633
41655
  audio.src = URL.createObjectURL(file);
41634
41656
  audio.onloadedmetadata = () => {
41635
41657
  fileTosha256(file).then((hash) => {
41636
- uploadAudioToStorage(hash, file, accessToken, boardId).then((url) => {
41658
+ uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
41637
41659
  resolve2(url);
41638
41660
  }).catch(reject);
41639
41661
  }).catch(() => {
package/dist/esm/index.js CHANGED
@@ -41233,6 +41233,52 @@ var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).the
41233
41233
  });
41234
41234
  });
41235
41235
 
41236
+ // src/api/MediaHelpers.ts
41237
+ var uploadMediaToStorage = async (hash, videoBlob, accessToken, boardId, type) => {
41238
+ try {
41239
+ const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
41240
+ method: "POST",
41241
+ headers: {
41242
+ "Content-Type": "application/json",
41243
+ Authorization: `Bearer ${accessToken}`
41244
+ },
41245
+ body: JSON.stringify({
41246
+ fileSize: videoBlob.size,
41247
+ boardId,
41248
+ hash
41249
+ })
41250
+ });
41251
+ if (!generateUrlResponse.ok) {
41252
+ conf.hooks.onUploadMediaError(generateUrlResponse, type);
41253
+ throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
41254
+ }
41255
+ const data = await generateUrlResponse.json();
41256
+ if (data.mediaUrl) {
41257
+ console.log("Media already exists, skipping upload.");
41258
+ return data.mediaUrl;
41259
+ }
41260
+ const { uploadUrl, promisedMediaUrl } = data;
41261
+ if (!uploadUrl || !promisedMediaUrl) {
41262
+ throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
41263
+ }
41264
+ const uploadResponse = await fetch(uploadUrl, {
41265
+ method: "PUT",
41266
+ headers: {
41267
+ "Content-Type": videoBlob.type
41268
+ },
41269
+ body: videoBlob
41270
+ });
41271
+ if (!uploadResponse.ok) {
41272
+ console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
41273
+ throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
41274
+ }
41275
+ return promisedMediaUrl;
41276
+ } catch (error) {
41277
+ console.error("Media upload process error:", error);
41278
+ throw error;
41279
+ }
41280
+ };
41281
+
41236
41282
  // src/Items/Video/VideoHelpers.ts
41237
41283
  var uploadVideoToStorage = async (hash, videoBlob, accessToken, boardId) => {
41238
41284
  return new Promise((resolve2, reject) => {
@@ -41295,7 +41341,7 @@ var prepareVideo = (file, accessToken, boardId) => {
41295
41341
  video.onseeked = null;
41296
41342
  prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
41297
41343
  fileTosha256(file).then((hash) => {
41298
- uploadVideoToStorage(hash, file, accessToken, boardId).then((url) => {
41344
+ uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
41299
41345
  resolve2({
41300
41346
  url,
41301
41347
  previewUrl: imageData.storageLink
@@ -41493,7 +41539,7 @@ class AudioItem extends BaseItem {
41493
41539
  this.transformation.deserialize(data.transformation);
41494
41540
  }
41495
41541
  if (data.url) {
41496
- this.setUrl(data.url);
41542
+ this.url = data.url;
41497
41543
  }
41498
41544
  if (data.extension) {
41499
41545
  this.extension = data.extension;
@@ -41596,37 +41642,13 @@ class AudioItem extends BaseItem {
41596
41642
  }
41597
41643
  }
41598
41644
  // src/Items/Audio/AudioHelpers.ts
41599
- var uploadAudioToStorage = async (hash, audioBlob, accessToken, boardId) => {
41600
- return new Promise((resolve2, reject) => {
41601
- fetch(`${window.location.origin}/api/v1/media/audio/${boardId}`, {
41602
- method: "POST",
41603
- headers: {
41604
- "Content-Type": audioBlob.type,
41605
- "x-audio-id": hash,
41606
- Authorization: `Bearer ${accessToken}`
41607
- },
41608
- body: audioBlob
41609
- }).then(async (response) => {
41610
- if (response.status !== 200) {
41611
- return conf.hooks.onUploadMediaError(response, "audio");
41612
- }
41613
- return response.json();
41614
- }).then((data) => {
41615
- console.log(data);
41616
- resolve2(data.src);
41617
- }).catch((error) => {
41618
- console.error("Media storage error:", error);
41619
- reject(error);
41620
- });
41621
- });
41622
- };
41623
41645
  var prepareAudio = (file, accessToken, boardId) => {
41624
41646
  return new Promise((resolve2, reject) => {
41625
41647
  const audio = document.createElement("audio");
41626
41648
  audio.src = URL.createObjectURL(file);
41627
41649
  audio.onloadedmetadata = () => {
41628
41650
  fileTosha256(file).then((hash) => {
41629
- uploadAudioToStorage(hash, file, accessToken, boardId).then((url) => {
41651
+ uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
41630
41652
  resolve2(url);
41631
41653
  }).catch(reject);
41632
41654
  }).catch(() => {
package/dist/esm/node.js CHANGED
@@ -43701,6 +43701,52 @@ var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).the
43701
43701
  });
43702
43702
  });
43703
43703
 
43704
+ // src/api/MediaHelpers.ts
43705
+ var uploadMediaToStorage = async (hash, videoBlob, accessToken, boardId, type) => {
43706
+ try {
43707
+ const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
43708
+ method: "POST",
43709
+ headers: {
43710
+ "Content-Type": "application/json",
43711
+ Authorization: `Bearer ${accessToken}`
43712
+ },
43713
+ body: JSON.stringify({
43714
+ fileSize: videoBlob.size,
43715
+ boardId,
43716
+ hash
43717
+ })
43718
+ });
43719
+ if (!generateUrlResponse.ok) {
43720
+ conf.hooks.onUploadMediaError(generateUrlResponse, type);
43721
+ throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
43722
+ }
43723
+ const data = await generateUrlResponse.json();
43724
+ if (data.mediaUrl) {
43725
+ console.log("Media already exists, skipping upload.");
43726
+ return data.mediaUrl;
43727
+ }
43728
+ const { uploadUrl, promisedMediaUrl } = data;
43729
+ if (!uploadUrl || !promisedMediaUrl) {
43730
+ throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
43731
+ }
43732
+ const uploadResponse = await fetch(uploadUrl, {
43733
+ method: "PUT",
43734
+ headers: {
43735
+ "Content-Type": videoBlob.type
43736
+ },
43737
+ body: videoBlob
43738
+ });
43739
+ if (!uploadResponse.ok) {
43740
+ console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
43741
+ throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
43742
+ }
43743
+ return promisedMediaUrl;
43744
+ } catch (error) {
43745
+ console.error("Media upload process error:", error);
43746
+ throw error;
43747
+ }
43748
+ };
43749
+
43704
43750
  // src/Items/Video/VideoHelpers.ts
43705
43751
  var uploadVideoToStorage = async (hash, videoBlob, accessToken, boardId) => {
43706
43752
  return new Promise((resolve2, reject) => {
@@ -43763,7 +43809,7 @@ var prepareVideo = (file, accessToken, boardId) => {
43763
43809
  video.onseeked = null;
43764
43810
  prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
43765
43811
  fileTosha256(file).then((hash) => {
43766
- uploadVideoToStorage(hash, file, accessToken, boardId).then((url) => {
43812
+ uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
43767
43813
  resolve2({
43768
43814
  url,
43769
43815
  previewUrl: imageData.storageLink
@@ -43961,7 +44007,7 @@ class AudioItem extends BaseItem {
43961
44007
  this.transformation.deserialize(data.transformation);
43962
44008
  }
43963
44009
  if (data.url) {
43964
- this.setUrl(data.url);
44010
+ this.url = data.url;
43965
44011
  }
43966
44012
  if (data.extension) {
43967
44013
  this.extension = data.extension;
@@ -44064,37 +44110,13 @@ class AudioItem extends BaseItem {
44064
44110
  }
44065
44111
  }
44066
44112
  // src/Items/Audio/AudioHelpers.ts
44067
- var uploadAudioToStorage = async (hash, audioBlob, accessToken, boardId) => {
44068
- return new Promise((resolve2, reject) => {
44069
- fetch(`${window.location.origin}/api/v1/media/audio/${boardId}`, {
44070
- method: "POST",
44071
- headers: {
44072
- "Content-Type": audioBlob.type,
44073
- "x-audio-id": hash,
44074
- Authorization: `Bearer ${accessToken}`
44075
- },
44076
- body: audioBlob
44077
- }).then(async (response) => {
44078
- if (response.status !== 200) {
44079
- return conf.hooks.onUploadMediaError(response, "audio");
44080
- }
44081
- return response.json();
44082
- }).then((data) => {
44083
- console.log(data);
44084
- resolve2(data.src);
44085
- }).catch((error) => {
44086
- console.error("Media storage error:", error);
44087
- reject(error);
44088
- });
44089
- });
44090
- };
44091
44113
  var prepareAudio = (file, accessToken, boardId) => {
44092
44114
  return new Promise((resolve2, reject) => {
44093
44115
  const audio = document.createElement("audio");
44094
44116
  audio.src = URL.createObjectURL(file);
44095
44117
  audio.onloadedmetadata = () => {
44096
44118
  fileTosha256(file).then((hash) => {
44097
- uploadAudioToStorage(hash, file, accessToken, boardId).then((url) => {
44119
+ uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
44098
44120
  resolve2(url);
44099
44121
  }).catch(reject);
44100
44122
  }).catch(() => {
@@ -0,0 +1 @@
1
+ export declare const uploadMediaToStorage: (hash: string, videoBlob: Blob, accessToken: string | null, boardId: string, type: "video" | "audio" | "image") => Promise<string>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "microboard-temp",
3
- "version": "0.5.67",
3
+ "version": "0.5.69",
4
4
  "description": "A flexible interactive whiteboard library",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",