From 564cecd2f0211a5ec9076db62b68286eb8bea59f Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Tue, 8 Apr 2025 19:48:20 +0000 Subject: [PATCH] fix s3path incorrectly includes bucketid --- packages/server/package.json | 2 +- .../server/services/marketplace/package.json | 16 +- .../routes/extensions/publish/put.js | 209 +++++++++--------- 3 files changed, 117 insertions(+), 110 deletions(-) diff --git a/packages/server/package.json b/packages/server/package.json index 1381fa0d..e004a640 100755 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,6 +1,6 @@ { "name": "@comty/server", - "version": "1.30.2@alpha", + "version": "1.30.3@alpha", "license": "ComtyLicense", "private": true, "workspaces": [ diff --git a/packages/server/services/marketplace/package.json b/packages/server/services/marketplace/package.json index fe9965a2..cff27833 100755 --- a/packages/server/services/marketplace/package.json +++ b/packages/server/services/marketplace/package.json @@ -1,11 +1,9 @@ { - "name": "marketplace", - "version": "0.60.2", - "dependencies": { - "@octokit/rest": "^19.0.7", - "7zip-min": "^1.4.4", - "backblaze-b2": "^1.7.0", - "sucrase": "^3.32.0", - "uglify-js": "^3.17.4" - } + "name": "marketplace", + "dependencies": { + "7zip-min": "^1.4.4", + "backblaze-b2": "^1.7.0", + "sucrase": "^3.32.0", + "uglify-js": "^3.17.4" + } } diff --git a/packages/server/services/marketplace/routes/extensions/publish/put.js b/packages/server/services/marketplace/routes/extensions/publish/put.js index 89d24acf..18337084 100644 --- a/packages/server/services/marketplace/routes/extensions/publish/put.js +++ b/packages/server/services/marketplace/routes/extensions/publish/put.js @@ -5,129 +5,138 @@ import path from "node:path" import sevenzip from "7zip-min" async function uploadFolderToB2(bucketId, folderPath, b2Directory) { - try { - const uploadFiles = async (dir) => { - const files = fs.readdirSync(dir) + try { + const uploadFiles = async (dir) => { + const files = fs.readdirSync(dir) - for (const file of files) { - const fullPath = path.join(dir, file) - const stats = fs.statSync(fullPath) + for (const file of files) { + const fullPath = path.join(dir, file) + const stats = fs.statSync(fullPath) - if (stats.isDirectory()) { - await uploadFiles(fullPath) - } else { - const fileData = fs.readFileSync(fullPath) - const b2FileName = path.join(b2Directory, path.relative(folderPath, fullPath)).replace(/\\/g, '/') + if (stats.isDirectory()) { + await uploadFiles(fullPath) + } else { + const fileData = fs.readFileSync(fullPath) + const b2FileName = path + .join(b2Directory, path.relative(folderPath, fullPath)) + .replace(/\\/g, "/") - console.log(`Uploading ${b2FileName}...`) + console.log(`Uploading ${b2FileName}...`) - const uploadUrl = await b2.getUploadUrl({ - bucketId: bucketId, - }) + const uploadUrl = await b2.getUploadUrl({ + bucketId: bucketId, + }) - await b2.uploadFile({ - uploadUrl: uploadUrl.data.uploadUrl, - uploadAuthToken: uploadUrl.data.authorizationToken, - fileName: b2FileName, - data: fileData, - }) + await b2.uploadFile({ + uploadUrl: uploadUrl.data.uploadUrl, + uploadAuthToken: uploadUrl.data.authorizationToken, + fileName: b2FileName, + data: fileData, + }) - console.log(`Uploaded ${b2FileName}`) - } - } - } + console.log(`Uploaded ${b2FileName}`) + } + } + } - await uploadFiles(folderPath) - console.log('All files uploaded successfully.') - } catch (error) { - console.error('Error uploading folder:', error) - } + await uploadFiles(folderPath) + console.log("All files uploaded successfully.") + } catch (error) { + console.error("Error uploading folder:", error) + } } export default { - middlewares: ["withAuthentication"], - fn: async (req, res) => { - let { pkg } = req.headers + middlewares: ["withAuthentication"], + fn: async (req, res) => { + let { pkg } = req.headers - if (!pkg) { - throw new OperationError(400, "Missing package") - } + if (!pkg) { + throw new OperationError(400, "Missing package") + } - if (!req.auth) { - throw new OperationError(401, "Unauthorized") - } + if (!req.auth) { + throw new OperationError(401, "Unauthorized") + } - pkg = JSON.parse(pkg) + pkg = JSON.parse(pkg) - const { user_id } = req.auth.session - const registryId = `${user_id}/${pkg.name}@${pkg.version}` - const s3Path = `${process.env.B2_BUCKET_ID}/extensions/${pkg.name}/${pkg.version}` - const assetsUrl = `https://${process.env.B2_CDN_ENDPOINT}/${process.env.B2_BUCKET}/${s3Path}` + const { user_id } = req.auth.session + const registryId = `${user_id}/${pkg.name}@${pkg.version}` + const s3Path = `extensions/${pkg.name}/${pkg.version}` - const workPath = path.resolve(global.cache.constructor.cachePath, String(Date.now()), registryId) - const pkgPath = path.resolve(workPath, "pkg") - const bundlePath = path.resolve(workPath, "bundle.7z") + const workPath = path.resolve( + global.cache.constructor.cachePath, + String(Date.now()), + registryId, + ) + const pkgPath = path.resolve(workPath, "pkg") + const bundlePath = path.resolve(workPath, "bundle.7z") - // console.log({ - // user_id, - // pkg, - // registryId, - // s3Path, - // workPath, - // bundlePath - // }) + // console.log({ + // user_id, + // pkg, + // registryId, + // s3Path, + // workPath, + // bundlePath + // }) - let extensionRegistry = await Extension.findOne({ - user_id: user_id, - registryId: registryId, - version: pkg.version - }) + let extensionRegistry = await Extension.findOne({ + user_id: user_id, + registryId: registryId, + version: pkg.version, + }) - if (extensionRegistry) { - throw new OperationError(400, "Extension already exists") - } + if (extensionRegistry) { + throw new OperationError(400, "Extension already exists") + } - try { - if (!fs.existsSync(workPath)) { - await fs.promises.mkdir(workPath, { recursive: true }) - } + try { + if (!fs.existsSync(workPath)) { + await fs.promises.mkdir(workPath, { recursive: true }) + } - // read multipart form - await req.multipart(async (field) => { - await field.write(bundlePath) - }) + // read multipart form + await req.multipart(async (field) => { + await field.write(bundlePath) + }) - await new Promise((resolve, reject) => { - sevenzip.unpack(bundlePath, pkgPath, (error) => { - if (error) { - fs.promises.rm(workPath, { recursive: true, force: true }) - reject(error) - } else { - resolve() - } - }) - }) + await new Promise((resolve, reject) => { + sevenzip.unpack(bundlePath, pkgPath, (error) => { + if (error) { + fs.promises.rm(workPath, { + recursive: true, + force: true, + }) + reject(error) + } else { + resolve() + } + }) + }) - await uploadFolderToB2(process.env.B2_BUCKET_ID, pkgPath, s3Path) + await uploadFolderToB2(process.env.B2_BUCKET_ID, pkgPath, s3Path) - fs.promises.rm(workPath, { recursive: true, force: true }) + fs.promises.rm(workPath, { recursive: true, force: true }) + const assetsUrl = `https://${process.env.B2_CDN_ENDPOINT}/${process.env.B2_BUCKET}/${s3Path}` - extensionRegistry = await Extension.create({ - user_id: user_id, - name: pkg.name, - version: pkg.version, - registryId: registryId, - assetsUrl: assetsUrl, - srcUrl: `${assetsUrl}/src`, - packageUrl: `${assetsUrl}/package.json`, - created_at: Date.now(), - }) + extensionRegistry = await Extension.create({ + user_id: user_id, + name: pkg.name, + version: pkg.version, + registryId: registryId, + assetsUrl: assetsUrl, + srcUrl: `${assetsUrl}/src`, + packageUrl: `${assetsUrl}/package.json`, + created_at: Date.now(), + }) - return extensionRegistry - } catch (error) { - fs.promises.rm(workPath, { recursive: true, force: true }) - throw error - } - } -} \ No newline at end of file + return extensionRegistry + } catch (error) { + fs.promises.rm(workPath, { recursive: true, force: true }) + throw error + } + }, +}