Skip to content

Plugin Upload API Issue #4

@sebastianjnuwu

Description

@sebastianjnuwu
{
"error": "Cannot read properties of undefined (reading 'changelogs')"
}
import axios from 'axios';
import $form_data from 'form-data';
import { createReadStream } from 'node:fs';

const login = async (email, password) => {
  
    const response = await axios.post('https://acode.app/api/login', { email, password }).catch((err) => {
      console.log(err.response.data);
      return;
    });

    const token = response?.headers['set-cookie'][0].split(';')[0].split('=')[1];
    
    if (!token) return null;
    
    return token;
};

const upload = async (_token) => {
 
  const form = new $form_data();
  form.append('plugin', createReadStream('.acode/plugin.zip'));

  const response = await axios.put('https://acode.app/api/plugin', form, {
      headers: {
        ...form.getHeaders(),
        'Cookie': `token=${_token}`,
      },
    }).catch((err) => {
      console.log(err.response.data);
      return;
    });
    
    console.log(response);
    
};

const publish = async () => {

  const _token = await login(process.env.ACODE_EMAIL, process.env.ACODE_PASSWORD);

  if (_token) {
    await upload(_token); 
  }
};

publish();
{
  "id": "sebastianjnuwu.symbols.icons",
  "name": "Symbols Icons",
  "main": "main.js",
  "version": "1.0.5",
  "license": "Apache-2.0",
  "readme": "readme.md",
  "minVersionCode": 289,
  "icon": "icon.png",
  "files": [],
  "price": "160",
  "changelogs": "changelogs.md",
  "keywords": [
    "icons",
    "symbols",
    "symbols-icons",
    "acode",
    "ui-icons",
    "developer-tools",
    "custom-icons",
    "design-assets",
    "code-editor",
    "productivity"
  ],
  "contributors": [],
  "author": {
    "name": "sebastianjnuwu",
    "email": "sebastianjnuwu@gmail.com",
    "url": "https://github.com/sebastianjnuwu/acode-plugins/tree/acode/packages/symbols-icons",
    "github": "sebastianjnuwu"
  }
}
import path from "node:path";
import colors from "colors";
import fs from "node:fs";
import jszip from "jszip";
import { performance } from "node:perf_hooks";

const zip = new jszip();

/**
 * Paths
 */
const ChangePath = path.join("./changelogs.md");
const iconPath = path.join("./icon.png");
const jsonPath = path.join("./plugin.json");
const buildFolder = path.join("./.acode/build");
const zipOutput = path.join("./.acode/plugin.zip");
let readmePath = path.join("./readme.md");

if (!fs.existsSync(readmePath)) {
  readmePath = path.join("./README.md");
}

/**
 * Adiciona arquivos essenciais ao ZIP.
 */
try {
  zip.file("changelogs.md", fs.readFileSync(ChangePath));
  zip.file("icon.png", fs.readFileSync(iconPath));
  zip.file("plugin.json", fs.readFileSync(jsonPath));
  zip.file("readme.md", fs.readFileSync(readmePath));
  console.log(colors.green("• Essential files added to the ZIP."));
} catch (err) {
  console.error(colors.red(`• Error adding essential files: ${err.message}`));
  process.exit(1);
}

/**
 * Lê arquivos do diretório build.
 */
async function loadFile(root, folder) {
  if (!fs.existsSync(folder)) {
    console.error(colors.red(`• Build folder does not exist: ${folder}`));
    process.exit(1);
  }

  try {
    const distFiles = fs.readdirSync(folder);
    console.log(colors.cyan(`• Reading files from folder: ${folder}`));

    for (const file of distFiles) {
      const filePath = path.join(folder, file);
      const stat = fs.statSync(filePath);

      if (stat.isDirectory()) {
        zip.folder(file);
        await loadFile(path.join(root, file), filePath);
        continue;
      }

      zip.file(path.join(root, file), fs.readFileSync(filePath));
      console.log(colors.green(`• File added: ${filePath} (${stat.size} bytes)`));
    }
  } catch (err) {
    console.error(colors.red(`• Error reading files: ${err.message}`));
    process.exit(1);
  }
}

/**
 * Gera o arquivo ZIP.
 */
(async () => {
  console.time("Total process time");
  const startTime = performance.now();

  try {
    console.log(colors.blue("• Starting to load files..."));
    await loadFile("", buildFolder);

    zip
      .generateNodeStream({ type: "nodebuffer", streamFiles: true })
      .pipe(fs.createWriteStream(zipOutput))
      .on("finish", () => {
        const endTime = performance.now();
        console.log(colors.brightGreen(`• ZIP file created at: ${zipOutput}`));
        console.log(colors.green(`• Total time: ${(endTime - startTime) / 1000} seconds.`));
        console.timeEnd("Total process time");
      })
      .on("error", (err) => {
        console.error(colors.red(`• Error writing ZIP: ${err.message}`));
      });
  } catch (err) {
    console.error(colors.red(`• Unexpected error: ${err.message}`));
    process.exit(1);
  }
})();

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions