UNPKG

humanifyjs

Version:

> Deobfuscate Javascript code using LLMs ("AI")

56 lines (55 loc) 2.07 kB
import OpenAI from "openai"; import { visitAllIdentifiers } from "../local-llm-rename/visit-all-identifiers.js"; import { showPercentage } from "../../progress.js"; import { verbose } from "../../verbose.js"; export function openaiRename({ apiKey, model }) { const client = new OpenAI({ apiKey }); return async (code) => { return await visitAllIdentifiers(code, async (name, surroundingCode) => { var _a; verbose.log(`Renaming ${name}`); verbose.log("Context: ", surroundingCode); const response = await client.chat.completions.create(toRenamePrompt(name, surroundingCode, model)); const result = (_a = response.choices[0].message) === null || _a === void 0 ? void 0 : _a.content; if (!result) { throw new Error("Failed to rename", { cause: response }); } const renamed = JSON.parse(result).newName; verbose.log(`Renamed to ${renamed}`); return renamed; }, showPercentage); }; } function toRenamePrompt(name, surroundingCode, model) { return { model, messages: [ { role: "system", content: `Rename Javascript variables/function \`${name}\` to have descriptive name based on their usage in the code."` }, { role: "user", content: surroundingCode } ], response_format: { type: "json_schema", json_schema: { strict: true, name: "rename", schema: { type: "object", properties: { newName: { type: "string", description: `The new name for the variable/function called \`${name}\`` } }, required: ["newName"], additionalProperties: false } } } }; }