diff --git a/detector.luau b/detector.luau index dc7ab41..32984cc 100644 --- a/detector.luau +++ b/detector.luau @@ -2,6 +2,7 @@ local process = require("@lune/process") local fs = require("@lune/fs") local roblox = require("@lune/roblox") local stdio = require("@lune/stdio") +local download_models = require("./download_models") local args = process.args @@ -79,6 +80,16 @@ while i <= #args do directoryMode = true directoryPath = args[i + 1] i = i + 2 + elseif arg == "--asset" or arg == "--a" then + if i + 1 > #args and not process.env.OPEN_CLOUD_API_KEY then + stdio.write(stdio.color("red")) + stdio.write("Error: --asset (or --a) flag requires an asset ID and a valid Open Cloud API Key.\n") + stdio.write(stdio.color("reset")) + process.exit(1) + end + downloadAssetMode = true + downloadAssetId = args[i+1] + i = i+2 else -- regular file argument if not directoryMode then @@ -123,6 +134,17 @@ if directoryMode then end end +if downloadAssetMode then + local assetContents = download_models.downloadModel(downloadAssetId) + if assetContents then + table.insert(filesToProcess, assetContents) + else + stdio.write(stdio.color("yellow")) + stdio.write(`Warning: Asset fetch for asset with id: {downloadAssetId} failed. Is your Open Cloud key valid and does it have assetdelivery scope?\n`) + stdio.write(stdio.color("reset")) + end +end + if #filesToProcess == 0 then stdio.write(stdio.color("red")) stdio.write("Error: No files to process.\n") @@ -176,9 +198,9 @@ if outputFile then end -- print summary - stdio.write("\nFiles containing a Workspace instance:\n") - for _, file in pairs(filesWithWorkspace) do - stdio.write(stdio.color("green")) - stdio.write(` {file}\n`) - stdio.write(stdio.color("reset")) - end \ No newline at end of file +stdio.write("\nFiles containing a Workspace instance:\n") +for _, file in pairs(filesWithWorkspace) do + stdio.write(stdio.color("green")) + stdio.write(` {file}\n`) + stdio.write(stdio.color("reset")) +end \ No newline at end of file diff --git a/download_models.luau b/download_models.luau new file mode 100644 index 0000000..f3525a1 --- /dev/null +++ b/download_models.luau @@ -0,0 +1,24 @@ +local fs = require("@lune/fs") +local net = require("@lune/net") +local process = require("@lune/process") + +-- should be an open cloud api key with assetdelivery scope +local OPEN_CLOUD_API_KEY = process.env.OPEN_CLOUD_API_KEY +local BASE_API_URL = "https://apis.roblox.com/asset-delivery-api/v1/assetId/" + +local download_models = {} + +function download_models.downloadModel(assetId: number, fileName: string?): string? + local response = net.request({ + url = BASE_API_URL .. assetId, + method = "GET", + headers = {["x-api-key"] = OPEN_CLOUD_API_KEY} + }) + if response.ok then + return response.body + else + return nil + end +end + +return download_models \ No newline at end of file