@net-protocol/storage 0.1.2 → 0.1.4
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/README.md +29 -0
- package/dist/index.d.mts +51 -1
- package/dist/index.d.ts +51 -1
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +105 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -2065,6 +2065,110 @@ var StorageClient = class {
|
|
|
2065
2065
|
}
|
|
2066
2066
|
};
|
|
2067
2067
|
|
|
2068
|
-
|
|
2068
|
+
// src/utils/fileUtils.ts
|
|
2069
|
+
var PDF_MAGIC_BYTES = "JVBERi";
|
|
2070
|
+
var PNG_MAGIC_BYTES = "iVBORw0KGgo";
|
|
2071
|
+
var JPEG_MAGIC_BYTES = "/9j/";
|
|
2072
|
+
var GIF_MAGIC_BYTES = "R0lGODlh";
|
|
2073
|
+
var WEBP_MAGIC_BYTES = "UklGRi";
|
|
2074
|
+
var ZIP_MAGIC_BYTES = "UEsDB";
|
|
2075
|
+
function fileToDataUri(file) {
|
|
2076
|
+
return new Promise((resolve, reject) => {
|
|
2077
|
+
const reader = new FileReader();
|
|
2078
|
+
reader.onloadend = () => {
|
|
2079
|
+
const result = reader.result;
|
|
2080
|
+
if (typeof result === "string") {
|
|
2081
|
+
resolve(result);
|
|
2082
|
+
} else {
|
|
2083
|
+
reject(new Error("FileReader did not return a string result"));
|
|
2084
|
+
}
|
|
2085
|
+
};
|
|
2086
|
+
reader.onerror = () => {
|
|
2087
|
+
reject(new Error("Failed to read file"));
|
|
2088
|
+
};
|
|
2089
|
+
reader.readAsDataURL(file);
|
|
2090
|
+
});
|
|
2091
|
+
}
|
|
2092
|
+
function detectFileTypeFromBase64(base64Data) {
|
|
2093
|
+
if (!base64Data || base64Data.length === 0) {
|
|
2094
|
+
return void 0;
|
|
2095
|
+
}
|
|
2096
|
+
try {
|
|
2097
|
+
if (base64Data.startsWith(PDF_MAGIC_BYTES)) {
|
|
2098
|
+
return "application/pdf";
|
|
2099
|
+
}
|
|
2100
|
+
if (base64Data.startsWith(PNG_MAGIC_BYTES)) {
|
|
2101
|
+
return "image/png";
|
|
2102
|
+
}
|
|
2103
|
+
if (base64Data.startsWith(JPEG_MAGIC_BYTES)) {
|
|
2104
|
+
return "image/jpeg";
|
|
2105
|
+
}
|
|
2106
|
+
if (base64Data.startsWith(GIF_MAGIC_BYTES)) {
|
|
2107
|
+
return "image/gif";
|
|
2108
|
+
}
|
|
2109
|
+
if (base64Data.startsWith(WEBP_MAGIC_BYTES) && base64Data.length >= 20) {
|
|
2110
|
+
try {
|
|
2111
|
+
const decoded = atob(base64Data.substring(0, 20));
|
|
2112
|
+
if (decoded.includes("WEBP")) {
|
|
2113
|
+
return "image/webp";
|
|
2114
|
+
}
|
|
2115
|
+
} catch {
|
|
2116
|
+
}
|
|
2117
|
+
}
|
|
2118
|
+
if (base64Data.length > 10) {
|
|
2119
|
+
try {
|
|
2120
|
+
const decoded = atob(base64Data.substring(0, Math.min(200, base64Data.length)));
|
|
2121
|
+
if (decoded.includes("<svg") || decoded.includes("<SVG")) {
|
|
2122
|
+
return "image/svg+xml";
|
|
2123
|
+
}
|
|
2124
|
+
} catch {
|
|
2125
|
+
}
|
|
2126
|
+
}
|
|
2127
|
+
if (base64Data.length > 10) {
|
|
2128
|
+
try {
|
|
2129
|
+
const decoded = atob(base64Data.substring(0, Math.min(200, base64Data.length)));
|
|
2130
|
+
const lowerDecoded = decoded.toLowerCase();
|
|
2131
|
+
if (lowerDecoded.includes("<html") || lowerDecoded.includes("<!doctype")) {
|
|
2132
|
+
return "text/html";
|
|
2133
|
+
}
|
|
2134
|
+
} catch {
|
|
2135
|
+
}
|
|
2136
|
+
}
|
|
2137
|
+
if (base64Data.startsWith("SUQz") || base64Data.startsWith("/9s=")) {
|
|
2138
|
+
return "audio/mpeg";
|
|
2139
|
+
}
|
|
2140
|
+
if (base64Data.length > 20) {
|
|
2141
|
+
try {
|
|
2142
|
+
const decoded = atob(base64Data.substring(0, Math.min(50, base64Data.length)));
|
|
2143
|
+
if (decoded.includes("ftyp")) {
|
|
2144
|
+
return "video/mp4";
|
|
2145
|
+
}
|
|
2146
|
+
} catch {
|
|
2147
|
+
}
|
|
2148
|
+
}
|
|
2149
|
+
if (base64Data.startsWith(ZIP_MAGIC_BYTES)) {
|
|
2150
|
+
return "application/zip";
|
|
2151
|
+
}
|
|
2152
|
+
if (base64Data.length > 2) {
|
|
2153
|
+
try {
|
|
2154
|
+
const decoded = atob(base64Data.substring(0, Math.min(10, base64Data.length)));
|
|
2155
|
+
const trimmed = decoded.trim();
|
|
2156
|
+
if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
|
|
2157
|
+
return "application/json";
|
|
2158
|
+
}
|
|
2159
|
+
} catch {
|
|
2160
|
+
}
|
|
2161
|
+
}
|
|
2162
|
+
return void 0;
|
|
2163
|
+
} catch (error) {
|
|
2164
|
+
return void 0;
|
|
2165
|
+
}
|
|
2166
|
+
}
|
|
2167
|
+
function base64ToDataUri(base64Data) {
|
|
2168
|
+
const mimeType = detectFileTypeFromBase64(base64Data) || "application/octet-stream";
|
|
2169
|
+
return `data:${mimeType};base64,${base64Data}`;
|
|
2170
|
+
}
|
|
2171
|
+
|
|
2172
|
+
export { CHUNKED_STORAGE_CONTRACT, CHUNKED_STORAGE_READER_CONTRACT, CONCURRENT_XML_FETCHES, MAX_XML_DEPTH, SAFE_STORAGE_READER_CONTRACT, STORAGE_CONTRACT, STORAGE_ROUTER_CONTRACT, StorageClient, assembleChunks, base64ToDataUri, chunkData, chunkDataForStorage, computeTopLevelHash, containsXmlReferences, detectFileTypeFromBase64, detectStorageType, encodeStorageKeyForUrl, fileToDataUri, formatStorageKeyForDisplay, generateStorageEmbedTag, generateXmlMetadata, generateXmlMetadataWithSource, getChunkCount, getReferenceKey, getStorageKeyBytes, parseNetReferences, processDataForStorage, resolveOperator, resolveXmlRecursive, shouldSuggestXmlStorage, useBulkStorage, useStorage, useStorageForOperator, useStorageForOperatorAndKey, useStorageFromRouter, useStorageTotalWrites, useXmlStorage, validateDataSize };
|
|
2069
2173
|
//# sourceMappingURL=index.mjs.map
|
|
2070
2174
|
//# sourceMappingURL=index.mjs.map
|