Ir al contenido

CORS Proxy

Hacé fetch de APIs externas desde el JavaScript de tu artifact sin errores CORS. ShareOut hace el proxy de la solicitud del lado del servidor y reenvía la respuesta.

const sdk = await ShareOut.create();
// Proxy por artifact (recomendado)
const proxyUrl = `https://shareout.site/v1/data/${sdk.artifactId}/proxy`;
const response = await fetch(`${proxyUrl}?url=${encodeURIComponent('https://api.weather.gov/points/39.7456,-104.9910')}`);
const data = await response.json();
EscenarioSolución
API sin headers CORSUsá el proxy
APIs públicas (clima, crypto, etc.)Usá el proxy
API que ya envía headers CORSfetch directo
Tu propia APIAgregá headers CORS en tu servidor

Proxy por artifact (límites de tasa aislados, configurable):

GET https://shareout.site/v1/data/{artifactId}/proxy?url=<url-codificada>

Proxy global (límite de tasa compartido por IP, sin config):

GET https://shareout.site/api/proxy?url=<url-codificada>
// Proxy global — más simple, no necesitás contexto de artifact
const response = await fetch(
`https://shareout.site/api/proxy?url=${encodeURIComponent('https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd')}`
);
RestricciónValor
MétodoSolo GET
Límite de tasa100 solicitudes/min por artifact
Tamaño de respuestaMáximo 10 MB
Timeout10 segundos
TTL de caché5 min por defecto
// Leer configuración actual
const config = await fetch(`/v1/data/${artifactId}/proxy/config`, {
headers: { 'Authorization': `Bearer ${token}` },
}).then(r => r.json());
// Actualizar configuración
await fetch(`/v1/data/${artifactId}/proxy/config`, {
method: 'PUT',
headers: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
enabled: true,
allowed_hosts: ['api.weather.gov', 'api.coingecko.com'],
blocked_hosts: ['internal.company.com'],
cache_ttl: 600,
max_requests_per_minute: 50,
}),
});
CampoTipoPor defectoDescripción
enabledbooleantrueHabilitar o deshabilitar el proxy para este artifact
allowed_hostsstring[]nullLista de hosts permitidos — null significa cualquier host
blocked_hostsstring[]nullLista de hosts bloqueados
cache_ttlnumber300TTL de caché en segundos (0–3600)
max_requests_per_minutenumber100Límite de tasa (1–1000)
HeaderDescripción
X-Proxy-CacheHIT o MISS
X-RateLimit-RemainingSolicitudes restantes en la ventana actual

Bloqueado automáticamente:

  • IPs internas: 127.0.0.1, localhost, 10.x, 192.168.x, 169.254.x
  • Esquemas: file://, javascript:, data:
  • Los headers Set-Cookie son eliminados de las respuestas
CódigoSignificado
BLOCKED_DESTINATIONIP interna o esquema no permitido
HOST_NOT_ALLOWEDHost no está en allowed_hosts
PROXY_RATE_LIMITEDSe superó el límite de tasa
FILE_TOO_LARGELa respuesta supera los 10 MB
PROXY_ERRORFalló la solicitud al servidor de origen