microboard-temp 0.5.68 → 0.5.70
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/dist/cjs/browser.js +60 -32
- package/dist/cjs/index.js +60 -32
- package/dist/cjs/node.js +60 -32
- package/dist/esm/browser.js +60 -32
- package/dist/esm/index.js +60 -32
- package/dist/esm/node.js +60 -32
- package/dist/types/Items/Image/ImageHelpers.d.ts +5 -0
- package/dist/types/api/MediaHelpers.d.ts +1 -0
- package/package.json +1 -1
package/dist/cjs/browser.js
CHANGED
|
@@ -678,6 +678,7 @@ __export(exports_browser, {
|
|
|
678
678
|
getPlaceholderImage: () => getPlaceholderImage,
|
|
679
679
|
getHotkeyLabel: () => getHotkeyLabel,
|
|
680
680
|
getControlPointData: () => getControlPointData,
|
|
681
|
+
getBlobFromDataURL: () => getBlobFromDataURL,
|
|
681
682
|
forceNumberIntoInterval: () => forceNumberIntoInterval,
|
|
682
683
|
fileTosha256: () => fileTosha256,
|
|
683
684
|
exportBoardSnapshot: () => exportBoardSnapshot,
|
|
@@ -41289,14 +41290,56 @@ async function fileTosha256(file) {
|
|
|
41289
41290
|
return hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
41290
41291
|
}
|
|
41291
41292
|
|
|
41293
|
+
// src/api/MediaHelpers.ts
|
|
41294
|
+
var uploadMediaToStorage = async (hash, blob, accessToken, boardId, type) => {
|
|
41295
|
+
try {
|
|
41296
|
+
const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
|
|
41297
|
+
method: "POST",
|
|
41298
|
+
headers: {
|
|
41299
|
+
"Content-Type": "application/json",
|
|
41300
|
+
Authorization: `Bearer ${accessToken}`
|
|
41301
|
+
},
|
|
41302
|
+
body: JSON.stringify({
|
|
41303
|
+
fileSize: blob.size,
|
|
41304
|
+
boardId,
|
|
41305
|
+
hash
|
|
41306
|
+
})
|
|
41307
|
+
});
|
|
41308
|
+
if (!generateUrlResponse.ok) {
|
|
41309
|
+
conf.hooks.onUploadMediaError(generateUrlResponse, type);
|
|
41310
|
+
throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
|
|
41311
|
+
}
|
|
41312
|
+
const data = await generateUrlResponse.json();
|
|
41313
|
+
if (data.mediaUrl) {
|
|
41314
|
+
console.log("Media already exists, skipping upload.");
|
|
41315
|
+
return data.mediaUrl;
|
|
41316
|
+
}
|
|
41317
|
+
const { uploadUrl, promisedMediaUrl } = data;
|
|
41318
|
+
if (!uploadUrl || !promisedMediaUrl) {
|
|
41319
|
+
throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
|
|
41320
|
+
}
|
|
41321
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
41322
|
+
method: "PUT",
|
|
41323
|
+
headers: {
|
|
41324
|
+
"Content-Type": blob.type
|
|
41325
|
+
},
|
|
41326
|
+
body: blob
|
|
41327
|
+
});
|
|
41328
|
+
if (!uploadResponse.ok) {
|
|
41329
|
+
console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
|
|
41330
|
+
throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
|
|
41331
|
+
}
|
|
41332
|
+
return promisedMediaUrl;
|
|
41333
|
+
} catch (error) {
|
|
41334
|
+
console.error("Media upload process error:", error);
|
|
41335
|
+
throw error;
|
|
41336
|
+
}
|
|
41337
|
+
};
|
|
41338
|
+
|
|
41292
41339
|
// src/Items/Image/ImageHelpers.ts
|
|
41293
41340
|
var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
41294
41341
|
return new Promise((resolve2, reject) => {
|
|
41295
|
-
const
|
|
41296
|
-
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
41297
|
-
const binaryString = window.atob(base64String);
|
|
41298
|
-
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
41299
|
-
const blob = new Blob([bytes], { type: mimeType });
|
|
41342
|
+
const { blob, mimeType } = getBlobFromDataURL(dataURL);
|
|
41300
41343
|
fetch(`${window?.location.origin}/api/v1/media/image/${boardId}`, {
|
|
41301
41344
|
method: "POST",
|
|
41302
41345
|
headers: {
|
|
@@ -41318,6 +41361,14 @@ var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
|
41318
41361
|
});
|
|
41319
41362
|
});
|
|
41320
41363
|
};
|
|
41364
|
+
var getBlobFromDataURL = (dataURL) => {
|
|
41365
|
+
const base64String = dataURL.split(",")[1];
|
|
41366
|
+
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
41367
|
+
const binaryString = window.atob(base64String);
|
|
41368
|
+
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
41369
|
+
const blob = new Blob([bytes], { type: mimeType });
|
|
41370
|
+
return { blob, base64String, mimeType };
|
|
41371
|
+
};
|
|
41321
41372
|
var resizeAndConvertToPng = async (inp) => {
|
|
41322
41373
|
return new Promise((resolve2, reject) => {
|
|
41323
41374
|
if (typeof inp !== "string") {
|
|
@@ -41385,7 +41436,8 @@ var resizeAndConvertToPng = async (inp) => {
|
|
|
41385
41436
|
});
|
|
41386
41437
|
};
|
|
41387
41438
|
var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash }) => {
|
|
41388
|
-
|
|
41439
|
+
const { blob } = getBlobFromDataURL(dataURL);
|
|
41440
|
+
return uploadMediaToStorage(hash, blob, accessToken, boardId, "image").then((src) => {
|
|
41389
41441
|
return {
|
|
41390
41442
|
imageDimension: { width: width2, height: height2 },
|
|
41391
41443
|
base64: dataURL,
|
|
@@ -41456,7 +41508,7 @@ var prepareVideo = (file, accessToken, boardId) => {
|
|
|
41456
41508
|
video.onseeked = null;
|
|
41457
41509
|
prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
|
|
41458
41510
|
fileTosha256(file).then((hash) => {
|
|
41459
|
-
|
|
41511
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
|
|
41460
41512
|
resolve2({
|
|
41461
41513
|
url,
|
|
41462
41514
|
previewUrl: imageData.storageLink
|
|
@@ -41757,37 +41809,13 @@ class AudioItem extends BaseItem {
|
|
|
41757
41809
|
}
|
|
41758
41810
|
}
|
|
41759
41811
|
// 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
41812
|
var prepareAudio = (file, accessToken, boardId) => {
|
|
41785
41813
|
return new Promise((resolve2, reject) => {
|
|
41786
41814
|
const audio = document.createElement("audio");
|
|
41787
41815
|
audio.src = URL.createObjectURL(file);
|
|
41788
41816
|
audio.onloadedmetadata = () => {
|
|
41789
41817
|
fileTosha256(file).then((hash) => {
|
|
41790
|
-
|
|
41818
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
|
|
41791
41819
|
resolve2(url);
|
|
41792
41820
|
}).catch(reject);
|
|
41793
41821
|
}).catch(() => {
|
package/dist/cjs/index.js
CHANGED
|
@@ -678,6 +678,7 @@ __export(exports_src, {
|
|
|
678
678
|
getPlaceholderImage: () => getPlaceholderImage,
|
|
679
679
|
getHotkeyLabel: () => getHotkeyLabel,
|
|
680
680
|
getControlPointData: () => getControlPointData,
|
|
681
|
+
getBlobFromDataURL: () => getBlobFromDataURL,
|
|
681
682
|
forceNumberIntoInterval: () => forceNumberIntoInterval,
|
|
682
683
|
fileTosha256: () => fileTosha256,
|
|
683
684
|
exportBoardSnapshot: () => exportBoardSnapshot,
|
|
@@ -41289,14 +41290,56 @@ async function fileTosha256(file) {
|
|
|
41289
41290
|
return hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
41290
41291
|
}
|
|
41291
41292
|
|
|
41293
|
+
// src/api/MediaHelpers.ts
|
|
41294
|
+
var uploadMediaToStorage = async (hash, blob, accessToken, boardId, type) => {
|
|
41295
|
+
try {
|
|
41296
|
+
const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
|
|
41297
|
+
method: "POST",
|
|
41298
|
+
headers: {
|
|
41299
|
+
"Content-Type": "application/json",
|
|
41300
|
+
Authorization: `Bearer ${accessToken}`
|
|
41301
|
+
},
|
|
41302
|
+
body: JSON.stringify({
|
|
41303
|
+
fileSize: blob.size,
|
|
41304
|
+
boardId,
|
|
41305
|
+
hash
|
|
41306
|
+
})
|
|
41307
|
+
});
|
|
41308
|
+
if (!generateUrlResponse.ok) {
|
|
41309
|
+
conf.hooks.onUploadMediaError(generateUrlResponse, type);
|
|
41310
|
+
throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
|
|
41311
|
+
}
|
|
41312
|
+
const data = await generateUrlResponse.json();
|
|
41313
|
+
if (data.mediaUrl) {
|
|
41314
|
+
console.log("Media already exists, skipping upload.");
|
|
41315
|
+
return data.mediaUrl;
|
|
41316
|
+
}
|
|
41317
|
+
const { uploadUrl, promisedMediaUrl } = data;
|
|
41318
|
+
if (!uploadUrl || !promisedMediaUrl) {
|
|
41319
|
+
throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
|
|
41320
|
+
}
|
|
41321
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
41322
|
+
method: "PUT",
|
|
41323
|
+
headers: {
|
|
41324
|
+
"Content-Type": blob.type
|
|
41325
|
+
},
|
|
41326
|
+
body: blob
|
|
41327
|
+
});
|
|
41328
|
+
if (!uploadResponse.ok) {
|
|
41329
|
+
console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
|
|
41330
|
+
throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
|
|
41331
|
+
}
|
|
41332
|
+
return promisedMediaUrl;
|
|
41333
|
+
} catch (error) {
|
|
41334
|
+
console.error("Media upload process error:", error);
|
|
41335
|
+
throw error;
|
|
41336
|
+
}
|
|
41337
|
+
};
|
|
41338
|
+
|
|
41292
41339
|
// src/Items/Image/ImageHelpers.ts
|
|
41293
41340
|
var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
41294
41341
|
return new Promise((resolve2, reject) => {
|
|
41295
|
-
const
|
|
41296
|
-
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
41297
|
-
const binaryString = window.atob(base64String);
|
|
41298
|
-
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
41299
|
-
const blob = new Blob([bytes], { type: mimeType });
|
|
41342
|
+
const { blob, mimeType } = getBlobFromDataURL(dataURL);
|
|
41300
41343
|
fetch(`${window?.location.origin}/api/v1/media/image/${boardId}`, {
|
|
41301
41344
|
method: "POST",
|
|
41302
41345
|
headers: {
|
|
@@ -41318,6 +41361,14 @@ var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
|
41318
41361
|
});
|
|
41319
41362
|
});
|
|
41320
41363
|
};
|
|
41364
|
+
var getBlobFromDataURL = (dataURL) => {
|
|
41365
|
+
const base64String = dataURL.split(",")[1];
|
|
41366
|
+
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
41367
|
+
const binaryString = window.atob(base64String);
|
|
41368
|
+
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
41369
|
+
const blob = new Blob([bytes], { type: mimeType });
|
|
41370
|
+
return { blob, base64String, mimeType };
|
|
41371
|
+
};
|
|
41321
41372
|
var resizeAndConvertToPng = async (inp) => {
|
|
41322
41373
|
return new Promise((resolve2, reject) => {
|
|
41323
41374
|
if (typeof inp !== "string") {
|
|
@@ -41385,7 +41436,8 @@ var resizeAndConvertToPng = async (inp) => {
|
|
|
41385
41436
|
});
|
|
41386
41437
|
};
|
|
41387
41438
|
var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash }) => {
|
|
41388
|
-
|
|
41439
|
+
const { blob } = getBlobFromDataURL(dataURL);
|
|
41440
|
+
return uploadMediaToStorage(hash, blob, accessToken, boardId, "image").then((src) => {
|
|
41389
41441
|
return {
|
|
41390
41442
|
imageDimension: { width: width2, height: height2 },
|
|
41391
41443
|
base64: dataURL,
|
|
@@ -41456,7 +41508,7 @@ var prepareVideo = (file, accessToken, boardId) => {
|
|
|
41456
41508
|
video.onseeked = null;
|
|
41457
41509
|
prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
|
|
41458
41510
|
fileTosha256(file).then((hash) => {
|
|
41459
|
-
|
|
41511
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
|
|
41460
41512
|
resolve2({
|
|
41461
41513
|
url,
|
|
41462
41514
|
previewUrl: imageData.storageLink
|
|
@@ -41757,37 +41809,13 @@ class AudioItem extends BaseItem {
|
|
|
41757
41809
|
}
|
|
41758
41810
|
}
|
|
41759
41811
|
// 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
41812
|
var prepareAudio = (file, accessToken, boardId) => {
|
|
41785
41813
|
return new Promise((resolve2, reject) => {
|
|
41786
41814
|
const audio = document.createElement("audio");
|
|
41787
41815
|
audio.src = URL.createObjectURL(file);
|
|
41788
41816
|
audio.onloadedmetadata = () => {
|
|
41789
41817
|
fileTosha256(file).then((hash) => {
|
|
41790
|
-
|
|
41818
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
|
|
41791
41819
|
resolve2(url);
|
|
41792
41820
|
}).catch(reject);
|
|
41793
41821
|
}).catch(() => {
|
package/dist/cjs/node.js
CHANGED
|
@@ -1715,6 +1715,7 @@ __export(exports_node, {
|
|
|
1715
1715
|
getPlaceholderImage: () => getPlaceholderImage,
|
|
1716
1716
|
getHotkeyLabel: () => getHotkeyLabel,
|
|
1717
1717
|
getControlPointData: () => getControlPointData,
|
|
1718
|
+
getBlobFromDataURL: () => getBlobFromDataURL,
|
|
1718
1719
|
forceNumberIntoInterval: () => forceNumberIntoInterval,
|
|
1719
1720
|
fileTosha256: () => fileTosha256,
|
|
1720
1721
|
exportBoardSnapshot: () => exportBoardSnapshot,
|
|
@@ -43762,14 +43763,56 @@ async function fileTosha256(file) {
|
|
|
43762
43763
|
return hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
43763
43764
|
}
|
|
43764
43765
|
|
|
43766
|
+
// src/api/MediaHelpers.ts
|
|
43767
|
+
var uploadMediaToStorage = async (hash, blob, accessToken, boardId, type) => {
|
|
43768
|
+
try {
|
|
43769
|
+
const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
|
|
43770
|
+
method: "POST",
|
|
43771
|
+
headers: {
|
|
43772
|
+
"Content-Type": "application/json",
|
|
43773
|
+
Authorization: `Bearer ${accessToken}`
|
|
43774
|
+
},
|
|
43775
|
+
body: JSON.stringify({
|
|
43776
|
+
fileSize: blob.size,
|
|
43777
|
+
boardId,
|
|
43778
|
+
hash
|
|
43779
|
+
})
|
|
43780
|
+
});
|
|
43781
|
+
if (!generateUrlResponse.ok) {
|
|
43782
|
+
conf.hooks.onUploadMediaError(generateUrlResponse, type);
|
|
43783
|
+
throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
|
|
43784
|
+
}
|
|
43785
|
+
const data = await generateUrlResponse.json();
|
|
43786
|
+
if (data.mediaUrl) {
|
|
43787
|
+
console.log("Media already exists, skipping upload.");
|
|
43788
|
+
return data.mediaUrl;
|
|
43789
|
+
}
|
|
43790
|
+
const { uploadUrl, promisedMediaUrl } = data;
|
|
43791
|
+
if (!uploadUrl || !promisedMediaUrl) {
|
|
43792
|
+
throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
|
|
43793
|
+
}
|
|
43794
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
43795
|
+
method: "PUT",
|
|
43796
|
+
headers: {
|
|
43797
|
+
"Content-Type": blob.type
|
|
43798
|
+
},
|
|
43799
|
+
body: blob
|
|
43800
|
+
});
|
|
43801
|
+
if (!uploadResponse.ok) {
|
|
43802
|
+
console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
|
|
43803
|
+
throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
|
|
43804
|
+
}
|
|
43805
|
+
return promisedMediaUrl;
|
|
43806
|
+
} catch (error) {
|
|
43807
|
+
console.error("Media upload process error:", error);
|
|
43808
|
+
throw error;
|
|
43809
|
+
}
|
|
43810
|
+
};
|
|
43811
|
+
|
|
43765
43812
|
// src/Items/Image/ImageHelpers.ts
|
|
43766
43813
|
var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
43767
43814
|
return new Promise((resolve2, reject) => {
|
|
43768
|
-
const
|
|
43769
|
-
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
43770
|
-
const binaryString = window.atob(base64String);
|
|
43771
|
-
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
43772
|
-
const blob = new Blob([bytes], { type: mimeType });
|
|
43815
|
+
const { blob, mimeType } = getBlobFromDataURL(dataURL);
|
|
43773
43816
|
fetch(`${window?.location.origin}/api/v1/media/image/${boardId}`, {
|
|
43774
43817
|
method: "POST",
|
|
43775
43818
|
headers: {
|
|
@@ -43791,6 +43834,14 @@ var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
|
43791
43834
|
});
|
|
43792
43835
|
});
|
|
43793
43836
|
};
|
|
43837
|
+
var getBlobFromDataURL = (dataURL) => {
|
|
43838
|
+
const base64String = dataURL.split(",")[1];
|
|
43839
|
+
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
43840
|
+
const binaryString = window.atob(base64String);
|
|
43841
|
+
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
43842
|
+
const blob = new Blob([bytes], { type: mimeType });
|
|
43843
|
+
return { blob, base64String, mimeType };
|
|
43844
|
+
};
|
|
43794
43845
|
var resizeAndConvertToPng = async (inp) => {
|
|
43795
43846
|
return new Promise((resolve2, reject) => {
|
|
43796
43847
|
if (typeof inp !== "string") {
|
|
@@ -43858,7 +43909,8 @@ var resizeAndConvertToPng = async (inp) => {
|
|
|
43858
43909
|
});
|
|
43859
43910
|
};
|
|
43860
43911
|
var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash }) => {
|
|
43861
|
-
|
|
43912
|
+
const { blob } = getBlobFromDataURL(dataURL);
|
|
43913
|
+
return uploadMediaToStorage(hash, blob, accessToken, boardId, "image").then((src) => {
|
|
43862
43914
|
return {
|
|
43863
43915
|
imageDimension: { width: width2, height: height2 },
|
|
43864
43916
|
base64: dataURL,
|
|
@@ -43929,7 +43981,7 @@ var prepareVideo = (file, accessToken, boardId) => {
|
|
|
43929
43981
|
video.onseeked = null;
|
|
43930
43982
|
prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
|
|
43931
43983
|
fileTosha256(file).then((hash) => {
|
|
43932
|
-
|
|
43984
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
|
|
43933
43985
|
resolve2({
|
|
43934
43986
|
url,
|
|
43935
43987
|
previewUrl: imageData.storageLink
|
|
@@ -44230,37 +44282,13 @@ class AudioItem extends BaseItem {
|
|
|
44230
44282
|
}
|
|
44231
44283
|
}
|
|
44232
44284
|
// 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
44285
|
var prepareAudio = (file, accessToken, boardId) => {
|
|
44258
44286
|
return new Promise((resolve2, reject) => {
|
|
44259
44287
|
const audio = document.createElement("audio");
|
|
44260
44288
|
audio.src = URL.createObjectURL(file);
|
|
44261
44289
|
audio.onloadedmetadata = () => {
|
|
44262
44290
|
fileTosha256(file).then((hash) => {
|
|
44263
|
-
|
|
44291
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
|
|
44264
44292
|
resolve2(url);
|
|
44265
44293
|
}).catch(reject);
|
|
44266
44294
|
}).catch(() => {
|
package/dist/esm/browser.js
CHANGED
|
@@ -41135,14 +41135,56 @@ async function fileTosha256(file) {
|
|
|
41135
41135
|
return hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
41136
41136
|
}
|
|
41137
41137
|
|
|
41138
|
+
// src/api/MediaHelpers.ts
|
|
41139
|
+
var uploadMediaToStorage = async (hash, blob, accessToken, boardId, type) => {
|
|
41140
|
+
try {
|
|
41141
|
+
const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
|
|
41142
|
+
method: "POST",
|
|
41143
|
+
headers: {
|
|
41144
|
+
"Content-Type": "application/json",
|
|
41145
|
+
Authorization: `Bearer ${accessToken}`
|
|
41146
|
+
},
|
|
41147
|
+
body: JSON.stringify({
|
|
41148
|
+
fileSize: blob.size,
|
|
41149
|
+
boardId,
|
|
41150
|
+
hash
|
|
41151
|
+
})
|
|
41152
|
+
});
|
|
41153
|
+
if (!generateUrlResponse.ok) {
|
|
41154
|
+
conf.hooks.onUploadMediaError(generateUrlResponse, type);
|
|
41155
|
+
throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
|
|
41156
|
+
}
|
|
41157
|
+
const data = await generateUrlResponse.json();
|
|
41158
|
+
if (data.mediaUrl) {
|
|
41159
|
+
console.log("Media already exists, skipping upload.");
|
|
41160
|
+
return data.mediaUrl;
|
|
41161
|
+
}
|
|
41162
|
+
const { uploadUrl, promisedMediaUrl } = data;
|
|
41163
|
+
if (!uploadUrl || !promisedMediaUrl) {
|
|
41164
|
+
throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
|
|
41165
|
+
}
|
|
41166
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
41167
|
+
method: "PUT",
|
|
41168
|
+
headers: {
|
|
41169
|
+
"Content-Type": blob.type
|
|
41170
|
+
},
|
|
41171
|
+
body: blob
|
|
41172
|
+
});
|
|
41173
|
+
if (!uploadResponse.ok) {
|
|
41174
|
+
console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
|
|
41175
|
+
throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
|
|
41176
|
+
}
|
|
41177
|
+
return promisedMediaUrl;
|
|
41178
|
+
} catch (error) {
|
|
41179
|
+
console.error("Media upload process error:", error);
|
|
41180
|
+
throw error;
|
|
41181
|
+
}
|
|
41182
|
+
};
|
|
41183
|
+
|
|
41138
41184
|
// src/Items/Image/ImageHelpers.ts
|
|
41139
41185
|
var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
41140
41186
|
return new Promise((resolve2, reject) => {
|
|
41141
|
-
const
|
|
41142
|
-
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
41143
|
-
const binaryString = window.atob(base64String);
|
|
41144
|
-
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
41145
|
-
const blob = new Blob([bytes], { type: mimeType });
|
|
41187
|
+
const { blob, mimeType } = getBlobFromDataURL(dataURL);
|
|
41146
41188
|
fetch(`${window?.location.origin}/api/v1/media/image/${boardId}`, {
|
|
41147
41189
|
method: "POST",
|
|
41148
41190
|
headers: {
|
|
@@ -41164,6 +41206,14 @@ var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
|
41164
41206
|
});
|
|
41165
41207
|
});
|
|
41166
41208
|
};
|
|
41209
|
+
var getBlobFromDataURL = (dataURL) => {
|
|
41210
|
+
const base64String = dataURL.split(",")[1];
|
|
41211
|
+
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
41212
|
+
const binaryString = window.atob(base64String);
|
|
41213
|
+
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
41214
|
+
const blob = new Blob([bytes], { type: mimeType });
|
|
41215
|
+
return { blob, base64String, mimeType };
|
|
41216
|
+
};
|
|
41167
41217
|
var resizeAndConvertToPng = async (inp) => {
|
|
41168
41218
|
return new Promise((resolve2, reject) => {
|
|
41169
41219
|
if (typeof inp !== "string") {
|
|
@@ -41231,7 +41281,8 @@ var resizeAndConvertToPng = async (inp) => {
|
|
|
41231
41281
|
});
|
|
41232
41282
|
};
|
|
41233
41283
|
var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash }) => {
|
|
41234
|
-
|
|
41284
|
+
const { blob } = getBlobFromDataURL(dataURL);
|
|
41285
|
+
return uploadMediaToStorage(hash, blob, accessToken, boardId, "image").then((src) => {
|
|
41235
41286
|
return {
|
|
41236
41287
|
imageDimension: { width: width2, height: height2 },
|
|
41237
41288
|
base64: dataURL,
|
|
@@ -41302,7 +41353,7 @@ var prepareVideo = (file, accessToken, boardId) => {
|
|
|
41302
41353
|
video.onseeked = null;
|
|
41303
41354
|
prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
|
|
41304
41355
|
fileTosha256(file).then((hash) => {
|
|
41305
|
-
|
|
41356
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
|
|
41306
41357
|
resolve2({
|
|
41307
41358
|
url,
|
|
41308
41359
|
previewUrl: imageData.storageLink
|
|
@@ -41603,37 +41654,13 @@ class AudioItem extends BaseItem {
|
|
|
41603
41654
|
}
|
|
41604
41655
|
}
|
|
41605
41656
|
// 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
41657
|
var prepareAudio = (file, accessToken, boardId) => {
|
|
41631
41658
|
return new Promise((resolve2, reject) => {
|
|
41632
41659
|
const audio = document.createElement("audio");
|
|
41633
41660
|
audio.src = URL.createObjectURL(file);
|
|
41634
41661
|
audio.onloadedmetadata = () => {
|
|
41635
41662
|
fileTosha256(file).then((hash) => {
|
|
41636
|
-
|
|
41663
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
|
|
41637
41664
|
resolve2(url);
|
|
41638
41665
|
}).catch(reject);
|
|
41639
41666
|
}).catch(() => {
|
|
@@ -57068,6 +57095,7 @@ export {
|
|
|
57068
57095
|
getPlaceholderImage,
|
|
57069
57096
|
getHotkeyLabel,
|
|
57070
57097
|
getControlPointData,
|
|
57098
|
+
getBlobFromDataURL,
|
|
57071
57099
|
forceNumberIntoInterval,
|
|
57072
57100
|
fileTosha256,
|
|
57073
57101
|
exportBoardSnapshot,
|
package/dist/esm/index.js
CHANGED
|
@@ -41128,14 +41128,56 @@ async function fileTosha256(file) {
|
|
|
41128
41128
|
return hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
41129
41129
|
}
|
|
41130
41130
|
|
|
41131
|
+
// src/api/MediaHelpers.ts
|
|
41132
|
+
var uploadMediaToStorage = async (hash, blob, accessToken, boardId, type) => {
|
|
41133
|
+
try {
|
|
41134
|
+
const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
|
|
41135
|
+
method: "POST",
|
|
41136
|
+
headers: {
|
|
41137
|
+
"Content-Type": "application/json",
|
|
41138
|
+
Authorization: `Bearer ${accessToken}`
|
|
41139
|
+
},
|
|
41140
|
+
body: JSON.stringify({
|
|
41141
|
+
fileSize: blob.size,
|
|
41142
|
+
boardId,
|
|
41143
|
+
hash
|
|
41144
|
+
})
|
|
41145
|
+
});
|
|
41146
|
+
if (!generateUrlResponse.ok) {
|
|
41147
|
+
conf.hooks.onUploadMediaError(generateUrlResponse, type);
|
|
41148
|
+
throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
|
|
41149
|
+
}
|
|
41150
|
+
const data = await generateUrlResponse.json();
|
|
41151
|
+
if (data.mediaUrl) {
|
|
41152
|
+
console.log("Media already exists, skipping upload.");
|
|
41153
|
+
return data.mediaUrl;
|
|
41154
|
+
}
|
|
41155
|
+
const { uploadUrl, promisedMediaUrl } = data;
|
|
41156
|
+
if (!uploadUrl || !promisedMediaUrl) {
|
|
41157
|
+
throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
|
|
41158
|
+
}
|
|
41159
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
41160
|
+
method: "PUT",
|
|
41161
|
+
headers: {
|
|
41162
|
+
"Content-Type": blob.type
|
|
41163
|
+
},
|
|
41164
|
+
body: blob
|
|
41165
|
+
});
|
|
41166
|
+
if (!uploadResponse.ok) {
|
|
41167
|
+
console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
|
|
41168
|
+
throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
|
|
41169
|
+
}
|
|
41170
|
+
return promisedMediaUrl;
|
|
41171
|
+
} catch (error) {
|
|
41172
|
+
console.error("Media upload process error:", error);
|
|
41173
|
+
throw error;
|
|
41174
|
+
}
|
|
41175
|
+
};
|
|
41176
|
+
|
|
41131
41177
|
// src/Items/Image/ImageHelpers.ts
|
|
41132
41178
|
var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
41133
41179
|
return new Promise((resolve2, reject) => {
|
|
41134
|
-
const
|
|
41135
|
-
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
41136
|
-
const binaryString = window.atob(base64String);
|
|
41137
|
-
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
41138
|
-
const blob = new Blob([bytes], { type: mimeType });
|
|
41180
|
+
const { blob, mimeType } = getBlobFromDataURL(dataURL);
|
|
41139
41181
|
fetch(`${window?.location.origin}/api/v1/media/image/${boardId}`, {
|
|
41140
41182
|
method: "POST",
|
|
41141
41183
|
headers: {
|
|
@@ -41157,6 +41199,14 @@ var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
|
41157
41199
|
});
|
|
41158
41200
|
});
|
|
41159
41201
|
};
|
|
41202
|
+
var getBlobFromDataURL = (dataURL) => {
|
|
41203
|
+
const base64String = dataURL.split(",")[1];
|
|
41204
|
+
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
41205
|
+
const binaryString = window.atob(base64String);
|
|
41206
|
+
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
41207
|
+
const blob = new Blob([bytes], { type: mimeType });
|
|
41208
|
+
return { blob, base64String, mimeType };
|
|
41209
|
+
};
|
|
41160
41210
|
var resizeAndConvertToPng = async (inp) => {
|
|
41161
41211
|
return new Promise((resolve2, reject) => {
|
|
41162
41212
|
if (typeof inp !== "string") {
|
|
@@ -41224,7 +41274,8 @@ var resizeAndConvertToPng = async (inp) => {
|
|
|
41224
41274
|
});
|
|
41225
41275
|
};
|
|
41226
41276
|
var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash }) => {
|
|
41227
|
-
|
|
41277
|
+
const { blob } = getBlobFromDataURL(dataURL);
|
|
41278
|
+
return uploadMediaToStorage(hash, blob, accessToken, boardId, "image").then((src) => {
|
|
41228
41279
|
return {
|
|
41229
41280
|
imageDimension: { width: width2, height: height2 },
|
|
41230
41281
|
base64: dataURL,
|
|
@@ -41295,7 +41346,7 @@ var prepareVideo = (file, accessToken, boardId) => {
|
|
|
41295
41346
|
video.onseeked = null;
|
|
41296
41347
|
prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
|
|
41297
41348
|
fileTosha256(file).then((hash) => {
|
|
41298
|
-
|
|
41349
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
|
|
41299
41350
|
resolve2({
|
|
41300
41351
|
url,
|
|
41301
41352
|
previewUrl: imageData.storageLink
|
|
@@ -41596,37 +41647,13 @@ class AudioItem extends BaseItem {
|
|
|
41596
41647
|
}
|
|
41597
41648
|
}
|
|
41598
41649
|
// 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
41650
|
var prepareAudio = (file, accessToken, boardId) => {
|
|
41624
41651
|
return new Promise((resolve2, reject) => {
|
|
41625
41652
|
const audio = document.createElement("audio");
|
|
41626
41653
|
audio.src = URL.createObjectURL(file);
|
|
41627
41654
|
audio.onloadedmetadata = () => {
|
|
41628
41655
|
fileTosha256(file).then((hash) => {
|
|
41629
|
-
|
|
41656
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
|
|
41630
41657
|
resolve2(url);
|
|
41631
41658
|
}).catch(reject);
|
|
41632
41659
|
}).catch(() => {
|
|
@@ -56966,6 +56993,7 @@ export {
|
|
|
56966
56993
|
getPlaceholderImage,
|
|
56967
56994
|
getHotkeyLabel,
|
|
56968
56995
|
getControlPointData,
|
|
56996
|
+
getBlobFromDataURL,
|
|
56969
56997
|
forceNumberIntoInterval,
|
|
56970
56998
|
fileTosha256,
|
|
56971
56999
|
exportBoardSnapshot,
|
package/dist/esm/node.js
CHANGED
|
@@ -43596,14 +43596,56 @@ async function fileTosha256(file) {
|
|
|
43596
43596
|
return hashArray.map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
43597
43597
|
}
|
|
43598
43598
|
|
|
43599
|
+
// src/api/MediaHelpers.ts
|
|
43600
|
+
var uploadMediaToStorage = async (hash, blob, accessToken, boardId, type) => {
|
|
43601
|
+
try {
|
|
43602
|
+
const generateUrlResponse = await fetch(`${window.location.origin}/api/v1/media/generate-upload-url`, {
|
|
43603
|
+
method: "POST",
|
|
43604
|
+
headers: {
|
|
43605
|
+
"Content-Type": "application/json",
|
|
43606
|
+
Authorization: `Bearer ${accessToken}`
|
|
43607
|
+
},
|
|
43608
|
+
body: JSON.stringify({
|
|
43609
|
+
fileSize: blob.size,
|
|
43610
|
+
boardId,
|
|
43611
|
+
hash
|
|
43612
|
+
})
|
|
43613
|
+
});
|
|
43614
|
+
if (!generateUrlResponse.ok) {
|
|
43615
|
+
conf.hooks.onUploadMediaError(generateUrlResponse, type);
|
|
43616
|
+
throw new Error(`Failed to get presigned URL. Status: ${generateUrlResponse.status}`);
|
|
43617
|
+
}
|
|
43618
|
+
const data = await generateUrlResponse.json();
|
|
43619
|
+
if (data.mediaUrl) {
|
|
43620
|
+
console.log("Media already exists, skipping upload.");
|
|
43621
|
+
return data.mediaUrl;
|
|
43622
|
+
}
|
|
43623
|
+
const { uploadUrl, promisedMediaUrl } = data;
|
|
43624
|
+
if (!uploadUrl || !promisedMediaUrl) {
|
|
43625
|
+
throw new Error("Server did not provide an uploadUrl or promisedMediaUrl in the response.");
|
|
43626
|
+
}
|
|
43627
|
+
const uploadResponse = await fetch(uploadUrl, {
|
|
43628
|
+
method: "PUT",
|
|
43629
|
+
headers: {
|
|
43630
|
+
"Content-Type": blob.type
|
|
43631
|
+
},
|
|
43632
|
+
body: blob
|
|
43633
|
+
});
|
|
43634
|
+
if (!uploadResponse.ok) {
|
|
43635
|
+
console.error("Direct upload to storage failed:", uploadResponse.status, uploadResponse.statusText);
|
|
43636
|
+
throw new Error(`Direct upload to storage failed. Status: ${uploadResponse.status}`);
|
|
43637
|
+
}
|
|
43638
|
+
return promisedMediaUrl;
|
|
43639
|
+
} catch (error) {
|
|
43640
|
+
console.error("Media upload process error:", error);
|
|
43641
|
+
throw error;
|
|
43642
|
+
}
|
|
43643
|
+
};
|
|
43644
|
+
|
|
43599
43645
|
// src/Items/Image/ImageHelpers.ts
|
|
43600
43646
|
var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
43601
43647
|
return new Promise((resolve2, reject) => {
|
|
43602
|
-
const
|
|
43603
|
-
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
43604
|
-
const binaryString = window.atob(base64String);
|
|
43605
|
-
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
43606
|
-
const blob = new Blob([bytes], { type: mimeType });
|
|
43648
|
+
const { blob, mimeType } = getBlobFromDataURL(dataURL);
|
|
43607
43649
|
fetch(`${window?.location.origin}/api/v1/media/image/${boardId}`, {
|
|
43608
43650
|
method: "POST",
|
|
43609
43651
|
headers: {
|
|
@@ -43625,6 +43667,14 @@ var uploadToTheStorage = async (hash, dataURL, accessToken, boardId) => {
|
|
|
43625
43667
|
});
|
|
43626
43668
|
});
|
|
43627
43669
|
};
|
|
43670
|
+
var getBlobFromDataURL = (dataURL) => {
|
|
43671
|
+
const base64String = dataURL.split(",")[1];
|
|
43672
|
+
const mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0];
|
|
43673
|
+
const binaryString = window.atob(base64String);
|
|
43674
|
+
const bytes = Uint8Array.from(binaryString, (char) => char.charCodeAt(0));
|
|
43675
|
+
const blob = new Blob([bytes], { type: mimeType });
|
|
43676
|
+
return { blob, base64String, mimeType };
|
|
43677
|
+
};
|
|
43628
43678
|
var resizeAndConvertToPng = async (inp) => {
|
|
43629
43679
|
return new Promise((resolve2, reject) => {
|
|
43630
43680
|
if (typeof inp !== "string") {
|
|
@@ -43692,7 +43742,8 @@ var resizeAndConvertToPng = async (inp) => {
|
|
|
43692
43742
|
});
|
|
43693
43743
|
};
|
|
43694
43744
|
var prepareImage = (inp, accessToken, boardId) => resizeAndConvertToPng(inp).then(({ width: width2, height: height2, dataURL, hash }) => {
|
|
43695
|
-
|
|
43745
|
+
const { blob } = getBlobFromDataURL(dataURL);
|
|
43746
|
+
return uploadMediaToStorage(hash, blob, accessToken, boardId, "image").then((src) => {
|
|
43696
43747
|
return {
|
|
43697
43748
|
imageDimension: { width: width2, height: height2 },
|
|
43698
43749
|
base64: dataURL,
|
|
@@ -43763,7 +43814,7 @@ var prepareVideo = (file, accessToken, boardId) => {
|
|
|
43763
43814
|
video.onseeked = null;
|
|
43764
43815
|
prepareImage(captureFrame(0.1, video)?.src, accessToken, boardId).then((imageData) => {
|
|
43765
43816
|
fileTosha256(file).then((hash) => {
|
|
43766
|
-
|
|
43817
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "video").then((url) => {
|
|
43767
43818
|
resolve2({
|
|
43768
43819
|
url,
|
|
43769
43820
|
previewUrl: imageData.storageLink
|
|
@@ -44064,37 +44115,13 @@ class AudioItem extends BaseItem {
|
|
|
44064
44115
|
}
|
|
44065
44116
|
}
|
|
44066
44117
|
// 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
44118
|
var prepareAudio = (file, accessToken, boardId) => {
|
|
44092
44119
|
return new Promise((resolve2, reject) => {
|
|
44093
44120
|
const audio = document.createElement("audio");
|
|
44094
44121
|
audio.src = URL.createObjectURL(file);
|
|
44095
44122
|
audio.onloadedmetadata = () => {
|
|
44096
44123
|
fileTosha256(file).then((hash) => {
|
|
44097
|
-
|
|
44124
|
+
uploadMediaToStorage(hash, file, accessToken, boardId, "audio").then((url) => {
|
|
44098
44125
|
resolve2(url);
|
|
44099
44126
|
}).catch(reject);
|
|
44100
44127
|
}).catch(() => {
|
|
@@ -59601,6 +59628,7 @@ export {
|
|
|
59601
59628
|
getPlaceholderImage,
|
|
59602
59629
|
getHotkeyLabel,
|
|
59603
59630
|
getControlPointData,
|
|
59631
|
+
getBlobFromDataURL,
|
|
59604
59632
|
forceNumberIntoInterval,
|
|
59605
59633
|
fileTosha256,
|
|
59606
59634
|
exportBoardSnapshot,
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { ImageConstructorData } from './Image';
|
|
2
2
|
export declare const uploadToTheStorage: (hash: string, dataURL: string, accessToken: string | null, boardId: string) => Promise<string>;
|
|
3
|
+
export declare const getBlobFromDataURL: (dataURL: string) => {
|
|
4
|
+
blob: Blob;
|
|
5
|
+
base64String: string;
|
|
6
|
+
mimeType: string;
|
|
7
|
+
};
|
|
3
8
|
export declare const resizeAndConvertToPng: (inp: string | ArrayBuffer | null | undefined) => Promise<{
|
|
4
9
|
dataURL: string;
|
|
5
10
|
width: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const uploadMediaToStorage: (hash: string, blob: Blob, accessToken: string | null, boardId: string, type: "video" | "audio" | "image") => Promise<string>;
|