Saltar al contenido principal

Use npm install

Instala paquetes npm como dayjs o lodash en la carpeta Application Support de Proxyman y úsalos en Proxyman Scripting con require().

Usar paquetes npm en Proxyman Scripting​

Proxyman Scripting admite require() para paquetes npm compatibles instalados en la carpeta Application Support de Proxyman. Así, un script puede reutilizar utilidades populares de JavaScript en lugar de escribir a mano la lógica habitual.

Esta función mantiene la misma palabra clave require() que Proxyman ya usa para las librerías integradas y los addons de usuario. Las importaciones existentes, como @libs, @addons, @users, los archivos JSON, los archivos de texto y los archivos locales, siguen funcionando.

Instalar un paquete​

Abre Terminal e instala los paquetes en la carpeta Application Support de Proxyman:

  • Instala dayjs
$ cd "$HOME/Library/Application Support/com.proxyman.NSProxy"
$ npm install --prefix . dayjs --ignore-scripts --no-audit --no-fund

Después de la instalación, el paquete debería estar en:

~/Library/Application Support/com.proxyman.NSProxy/node_modules

Usar un paquete en un script​

Usa el nombre del paquete con require():

const dayjs = require("dayjs");

async function onRequest(context, url, request) {
const formattedDate = dayjs("2026-05-05T13:00:00Z").format("YYYY-MM-DD");
request.headers["X-Proxyman-Dayjs"] = formattedDate;
return request;
}

Ejemplos​

Dar formato a una fecha con dayjs​

Instalar:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . dayjs --ignore-scripts --no-audit --no-fund

Script:

const dayjs = require("dayjs");

async function onRequest(context, url, request) {
request.headers["X-Request-Date"] = dayjs().format("YYYY-MM-DD");
return request;
}

Normalizar texto con lodash​

Instalar:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . lodash --ignore-scripts --no-audit --no-fund

Script:

const _ = require("lodash");

async function onRequest(context, url, request) {
const label = _.kebabCase("Hello Proxyman Scripts");
request.headers["X-Proxyman-Label"] = label;
return request;
}

Validar entradas con validator​

Instalar:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . validator --ignore-scripts --no-audit --no-fund

Script:

const validator = require("validator");

async function onRequest(context, url, request) {
const email = new URL(url).searchParams.get("email") || "";
request.headers["X-Email-Is-Valid"] = validator.isEmail(email) ? "true" : "false";
return request;
}

Crear slugs con slugify​

Instalar:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . slugify --ignore-scripts --no-audit --no-fund

Script:

const slugify = require("slugify");

async function onRequest(context, url, request) {
const title = new URL(url).searchParams.get("title") || "Hello Proxyman";
request.headers["X-Proxyman-Slug"] = slugify(title, { lower: true });
return request;
}

Codificar datos con js-base64​

Instalar:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . js-base64 --ignore-scripts --no-audit --no-fund

Script:

const { Base64 } = require("js-base64");

async function onResponse(context, url, request, response) {
response.headers["X-Proxyman-Encoded"] = Base64.encode("Proxyman");
return response;
}

Decodificar entidades HTML con he​

Instalar:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . he --ignore-scripts --no-audit --no-fund

Script:

const he = require("he");

async function onResponse(context, url, request, response) {
response.headers["X-Decoded-Title"] = he.decode("Proxyman & Scripting");
return response;
}

Compatibilidad​

Proxyman ejecuta los scripts con JavaScriptCore, no con Node.js. Los paquetes npm funcionan mejor cuando son JavaScript puro y compatibles con CommonJS.

Compatible:

  • Paquetes CommonJS cargados con require("package-name")
  • Puntos de entrada del paquete definidos en package.json, como main y exports simples
  • Importaciones relativas dentro de los paquetes instalados, como require("./helper")
  • Archivos JSON requeridos por los paquetes

No compatible:

  • Módulos integrados de Node.js como fs, path, crypto, http o child_process
  • Addons nativos .node
  • Paquetes que necesitan un entorno completo de Node.js
  • Paquetes solo ESM que no pueden cargarse con require() de CommonJS

Librerías nativas de Node.js​

Proxyman Scripting no se ejecuta dentro del entorno de Node.js. Solo usa Node/npm como herramienta para instalar paquetes y, después, carga los archivos JavaScript compatibles con JavaScriptCore.

Por eso, las librerías nativas de Node.js no son compatibles:

  • require("fs"), require("path"), require("crypto") y otros módulos integrados de Node.js están bloqueados.
  • require("node:fs") y las subrutas integradas, como require("fs/promises"), están bloqueadas.
  • Los addons nativos de C/C++ compilados como archivos .node están bloqueados.
  • Los paquetes que llaman a APIs específicas de Node, como process.dlopen, APIs del sistema de archivos, sockets de red o procesos hijos, no funcionarán.

Ejemplos de paquetes que normalmente no funcionan en Proxyman Scripting:

  • sharp
  • sqlite3
  • bcrypt
  • canvas
  • puppeteer
  • Paquetes que requieren fs, path, crypto, http, https, net o child_process

En su lugar, usa paquetes de JavaScript puro o paquetes que ofrezcan una build de CommonJS compatible con el navegador.

Solución de problemas​

Si require("dayjs") u otro paquete devuelve undefined, comprueba que el paquete esté instalado en la carpeta esperada:

ls "$HOME/Library/Application Support/com.proxyman.NSProxy/node_modules"

Si falta node_modules, vuelve a instalarlo con --prefix .:

cd "$HOME/Library/Application Support/com.proxyman.NSProxy" && npm install --prefix . dayjs --ignore-scripts --no-audit --no-fund

La opción --prefix . es importante, porque de lo contrario npm podría subir hasta un package.json superior e instalar los paquetes fuera de la carpeta de Proxyman.