@muhgholy/next-drive 4.13.0 → 4.15.0

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.
@@ -4,7 +4,7 @@ var formidable = require('formidable');
4
4
  var path = require('path');
5
5
  var fs = require('fs');
6
6
  var os3 = require('os');
7
- var crypto2 = require('crypto');
7
+ var crypto3 = require('crypto');
8
8
  var mongoose = require('mongoose');
9
9
  var sharp2 = require('sharp');
10
10
  var zod = require('zod');
@@ -17,7 +17,7 @@ var formidable__default = /*#__PURE__*/_interopDefault(formidable);
17
17
  var path__default = /*#__PURE__*/_interopDefault(path);
18
18
  var fs__default = /*#__PURE__*/_interopDefault(fs);
19
19
  var os3__default = /*#__PURE__*/_interopDefault(os3);
20
- var crypto2__default = /*#__PURE__*/_interopDefault(crypto2);
20
+ var crypto3__default = /*#__PURE__*/_interopDefault(crypto3);
21
21
  var mongoose__default = /*#__PURE__*/_interopDefault(mongoose);
22
22
  var sharp2__default = /*#__PURE__*/_interopDefault(sharp2);
23
23
  var ffmpeg__default = /*#__PURE__*/_interopDefault(ffmpeg);
@@ -364,7 +364,7 @@ var validateMimeType = (mime, allowedTypes) => {
364
364
  });
365
365
  };
366
366
  var computeFileHash = (filePath) => new Promise((resolve, reject) => {
367
- const hash = crypto2__default.default.createHash("sha256");
367
+ const hash = crypto3__default.default.createHash("sha256");
368
368
  const stream = fs__default.default.createReadStream(filePath);
369
369
  stream.on("data", (data) => hash.update(data));
370
370
  stream.on("end", () => resolve(hash.digest("hex")));
@@ -1286,7 +1286,7 @@ var driveGetUrl = (fileId, options) => {
1286
1286
  } else {
1287
1287
  expiryTimestamp = Math.floor(Date.now() / 1e3) + expiresIn;
1288
1288
  }
1289
- const signature = crypto2__default.default.createHmac("sha256", secret).update(`${fileId}:${expiryTimestamp}`).digest("hex");
1289
+ const signature = crypto3__default.default.createHmac("sha256", secret).update(`${fileId}:${expiryTimestamp}`).digest("hex");
1290
1290
  const token = Buffer.from(`${expiryTimestamp}:${signature}`).toString("base64url");
1291
1291
  return `/api/drive?action=serve&id=${fileId}&token=${token}`;
1292
1292
  };
@@ -1552,7 +1552,7 @@ var driveUpload = async (source, key, options) => {
1552
1552
  if (!fs__default.default.existsSync(tempDir)) {
1553
1553
  fs__default.default.mkdirSync(tempDir, { recursive: true });
1554
1554
  }
1555
- tempFilePath = path__default.default.join(tempDir, `upload-${crypto2__default.default.randomUUID()}.tmp`);
1555
+ tempFilePath = path__default.default.join(tempDir, `upload-${crypto3__default.default.randomUUID()}.tmp`);
1556
1556
  fs__default.default.writeFileSync(tempFilePath, source);
1557
1557
  sourceFilePath = tempFilePath;
1558
1558
  fileSize = source.length;
@@ -1561,7 +1561,7 @@ var driveUpload = async (source, key, options) => {
1561
1561
  if (!fs__default.default.existsSync(tempDir)) {
1562
1562
  fs__default.default.mkdirSync(tempDir, { recursive: true });
1563
1563
  }
1564
- tempFilePath = path__default.default.join(tempDir, `upload-${crypto2__default.default.randomUUID()}.tmp`);
1564
+ tempFilePath = path__default.default.join(tempDir, `upload-${crypto3__default.default.randomUUID()}.tmp`);
1565
1565
  const writeStream = fs__default.default.createWriteStream(tempFilePath);
1566
1566
  await new Promise((resolve, reject) => {
1567
1567
  source.pipe(writeStream);
@@ -1750,7 +1750,7 @@ var driveAPIHandler = async (req, res) => {
1750
1750
  return res.status(401).json({ status: 401, message: "Token expired" });
1751
1751
  }
1752
1752
  const { secret } = config.security.signedUrls;
1753
- const expectedSignature = crypto2__default.default.createHmac("sha256", secret).update(`${id}:${expiry}`).digest("hex");
1753
+ const expectedSignature = crypto3__default.default.createHmac("sha256", secret).update(`${id}:${expiry}`).digest("hex");
1754
1754
  if (signature !== expectedSignature) {
1755
1755
  return res.status(401).json({ status: 401, message: "Invalid token" });
1756
1756
  }
@@ -2024,7 +2024,15 @@ var driveAPIHandler = async (req, res) => {
2024
2024
  }
2025
2025
  if (afterId) query._id = { $lt: afterId };
2026
2026
  const items = await drive_default.find(query, {}, { sort: { order: 1, _id: -1 }, limit });
2027
- const plainItems = await Promise.all(items.map((item) => item.toClient()));
2027
+ let plainItems = await Promise.all(items.map((item) => item.toClient()));
2028
+ if (config.security?.signedUrls?.enabled) {
2029
+ const { secret, expiresIn } = config.security.signedUrls;
2030
+ plainItems = plainItems.map((item) => {
2031
+ const expiryTimestamp = Math.floor(Date.now() / 1e3) + expiresIn;
2032
+ const signature = crypto3__default.default.createHmac("sha256", secret).update(`${item.id}:${expiryTimestamp}`).digest("hex");
2033
+ return { ...item, token: Buffer.from(`${expiryTimestamp}:${signature}`).toString("base64url") };
2034
+ });
2035
+ }
2028
2036
  res.status(200).json({ status: 200, message: "Items retrieved", data: { items: plainItems, hasMore: items.length === limit } });
2029
2037
  return;
2030
2038
  }
@@ -2051,7 +2059,15 @@ var driveAPIHandler = async (req, res) => {
2051
2059
  }
2052
2060
  if (folderId && folderId !== "root") query.parentId = folderId;
2053
2061
  const items = await drive_default.find(query, {}, { limit, sort: { createdAt: -1 } });
2054
- const plainItems = await Promise.all(items.map((i) => i.toClient()));
2062
+ let plainItems = await Promise.all(items.map((i) => i.toClient()));
2063
+ if (config.security?.signedUrls?.enabled) {
2064
+ const { secret, expiresIn } = config.security.signedUrls;
2065
+ plainItems = plainItems.map((item) => {
2066
+ const expiryTimestamp = Math.floor(Date.now() / 1e3) + expiresIn;
2067
+ const signature = crypto3__default.default.createHmac("sha256", secret).update(`${item.id}:${expiryTimestamp}`).digest("hex");
2068
+ return { ...item, token: Buffer.from(`${expiryTimestamp}:${signature}`).toString("base64url") };
2069
+ });
2070
+ }
2055
2071
  return res.status(200).json({ status: 200, message: "Results", data: { items: plainItems } });
2056
2072
  }
2057
2073
  // ** 3. UPLOAD **
@@ -2109,7 +2125,7 @@ var driveAPIHandler = async (req, res) => {
2109
2125
  return res.status(413).json({ status: 413, message: "Storage quota exceeded" });
2110
2126
  }
2111
2127
  }
2112
- currentUploadId = crypto2__default.default.randomUUID();
2128
+ currentUploadId = crypto3__default.default.randomUUID();
2113
2129
  const uploadDir = path__default.default.join(tempBaseDir, currentUploadId);
2114
2130
  fs__default.default.mkdirSync(uploadDir, { recursive: true });
2115
2131
  const metadata = {
@@ -2311,7 +2327,15 @@ var driveAPIHandler = async (req, res) => {
2311
2327
  trashedAt: { $ne: null }
2312
2328
  };
2313
2329
  const items = await drive_default.find(query, {}, { sort: { trashedAt: -1 } });
2314
- const plainItems = await Promise.all(items.map((item) => item.toClient()));
2330
+ let plainItems = await Promise.all(items.map((item) => item.toClient()));
2331
+ if (config.security?.signedUrls?.enabled) {
2332
+ const { secret, expiresIn } = config.security.signedUrls;
2333
+ plainItems = plainItems.map((item) => {
2334
+ const expiryTimestamp = Math.floor(Date.now() / 1e3) + expiresIn;
2335
+ const signature = crypto3__default.default.createHmac("sha256", secret).update(`${item.id}:${expiryTimestamp}`).digest("hex");
2336
+ return { ...item, token: Buffer.from(`${expiryTimestamp}:${signature}`).toString("base64url") };
2337
+ });
2338
+ }
2315
2339
  return res.status(200).json({
2316
2340
  status: 200,
2317
2341
  message: "Trash items",
@@ -2398,5 +2422,5 @@ exports.driveReadFile = driveReadFile;
2398
2422
  exports.driveUpload = driveUpload;
2399
2423
  exports.getDriveConfig = getDriveConfig;
2400
2424
  exports.getDriveInformation = getDriveInformation;
2401
- //# sourceMappingURL=chunk-MUA7R3H5.cjs.map
2402
- //# sourceMappingURL=chunk-MUA7R3H5.cjs.map
2425
+ //# sourceMappingURL=chunk-2DGLSDQ7.cjs.map
2426
+ //# sourceMappingURL=chunk-2DGLSDQ7.cjs.map