diff --git a/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts b/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts index d8f18252..df8ec521 100644 --- a/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts +++ b/backend/services/admin-service/src/infrastructure/parsers/package-parser.service.ts @@ -1,6 +1,9 @@ import { Injectable, Logger } from '@nestjs/common' import * as unzipper from 'unzipper' import * as bplist from 'bplist-parser' +import * as fs from 'fs/promises' +import * as path from 'path' +import * as os from 'os' import { Platform } from '@/domain/enums/platform.enum' // eslint-disable-next-line @typescript-eslint/no-require-imports @@ -33,8 +36,16 @@ export class PackageParserService { } private async parseApk(buffer: Buffer): Promise { + // adbkit-apkreader only supports file paths, not buffers + // So we need to write buffer to a temp file first + const tempFile = path.join(os.tmpdir(), `apk-parse-${Date.now()}.apk`) + try { - const reader = await ApkReader.open(buffer) + // Write buffer to temp file + await fs.writeFile(tempFile, buffer) + + // Open APK from file path + const reader = await ApkReader.open(tempFile) const manifest = await reader.readManifest() return { @@ -47,6 +58,13 @@ export class PackageParserService { } catch (error) { this.logger.error(`Failed to parse APK: ${error.message}`) throw error + } finally { + // Clean up temp file + try { + await fs.unlink(tempFile) + } catch { + // Ignore cleanup errors + } } }