Límites de tarifas
Chastify limita la velocidad del tráfico de la API de extensión para proteger las sesiones de bloqueo, el almacenamiento, los dispositivos y los sistemas de notificación.
Se aplican límites de velocidad tanto al tráfico del puente iframe enrutado a través de Chastify como a las llamadas al backend realizadas con claves de API para desarrolladores.
Cubos de extensión actuales
| Cubo | Límite | Puntos finales típicos |
|---|---|---|
| Lectura | 300/min | session.get, state.get, metadata.get, lecturas de archivos, estado de acción regular |
| Escritura | 120/min | Escrituras de estado del backend, actualizaciones de metadatos, configuración de acciones regulares, creación de ejecución verificada por el servidor |
| Cargar | 10/min | Carga de archivos de ejecución y configuración |
| Acción | 30/min | Bloquear acciones, comandos de dispositivo, registros personalizados, notificaciones personalizadas, liquidación de resultados verificados por el servidor |
| Token | 30/min | Generación de token de autenticación/lanzamiento de sesión Iframe |
Los límites se evalúan en un intervalo de un minuto.
Estos son los valores predeterminados de la plataforma. Los administradores/propietarios del sitio Chastify pueden configurar anulaciones por extensión para extensiones oficiales o con un volumen de solicitudes excepcionalmente alto. Las anulaciones se almacenan en la configuración de la aplicación de la extensión y se guardan brevemente en caché en Redis para una búsqueda rápida de la ruta de la solicitud.
Los límites de carga y acción son intencionadamente más estrictos que los de lectura/estado. Las cargas consumen almacenamiento y ancho de banda. Las acciones pueden afectar al estado de bloqueo, los dispositivos, las notificaciones y el historial visible para el usuario.
Cómo se cuentan las llaves
Las claves de limitación de velocidad incluyen:
- ID de usuario autenticado Chastify cuando la interfaz de usuario de primera parte llama a un punto final
- ID de clave API de desarrollador cuando su backend llama a los puntos finales de sesión de extensión
- Dirección IP para rutas anónimas o no autenticadas
- el objetivo
sessionIdolockIdcuando esté disponible
Esto significa que una sesión de extensión ruidosa no debería consumir todo el presupuesto global de la API de extensiones.
Comportamiento recomendado del cliente
Tu iframe o backend debe tratar 429 Too Many Requests como una condición normal que permite reintentos.
Utilice un retroceso exponencial para fallos repetidos:
async function callWithBackoff<T>(fn: () => Promise<T>, attempts = 4): Promise<T> {
let delayMs = 500;
for (let attempt = 1; attempt <= attempts; attempt += 1) {
try {
return await fn();
} catch (error: any) {
const status = error?.status ?? error?.response?.status;
if (status !== 429 || attempt === attempts) throw error;
await new Promise((resolve) => setTimeout(resolve, delayMs));
delayMs *= 2;
}
}
throw new Error("request_failed");
}
Guía de puente Iframe
Para clientes de puente iframe:
- Almacene en caché los resultados de
session.getdurante la vida útil de la página, a menos que necesite datos de bloqueo actualizados. - Almacena localmente los cambios transitorios de la interfaz de usuario y envía los cambios de confianza a tu servidor backend.
- Evite realizar sondeos rápidos. Prefiera lecturas iniciadas por el usuario o intervalos de actualización lentos.
Ejemplo de guardado en el backend con retardo:
let saveTimer: number | undefined;
function scheduleStateSave(data: Record<string, unknown>) {
window.clearTimeout(saveTimer);
saveTimer = window.setTimeout(() => {
fetch("/your-extension-backend/state", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(data),
}).catch(console.error);
}, 500);
}
Guía de extensión de backend
Para llamadas al backend con una clave API de desarrollador:
- Mantenga las acciones privilegiadas verificadas por el servidor y activadas por el usuario.
- Utilice
PUT/PATCH /api/extensions/sessions/:sessionId/stateúnicamente desde su backend con credenciales de API de desarrollador. - No vuelva a intentar las acciones de bloqueo a ciegas si el primer intento pudo haber tenido éxito.
- Hacer que el asentamiento del juego/desafío sea idempotente con un ID de ejecución.
- Solo se permitirá la carga de archivos cuando el usuario envíe un archivo explícitamente.
- Almacene sus propios registros externos si necesita telemetría de alta frecuencia.
Nunca aumente los límites de acciones para compensar las llamadas al navegador no verificadas. El código iframe del navegador no es confiable. Las mutaciones sensibles deben ser validadas por su backend antes de llamar a Chastify.
¿Qué categoría debo esperar?
Ejemplos comunes:
GET /api/extensions/sessions/:sessionIdutiliza el depósito de lectura.GET /api/extensions/sessions/:sessionId/stateutiliza el depósito de lectura.PUT/PATCH /api/extensions/sessions/:sessionId/stateutiliza el depósito de escritura.POST /api/extensions/sessions/:sessionId/filesutiliza el bucket de carga.POST /api/extensions/sessions/:sessionId/actionutiliza el cubo de acciones.POST /api/extensions/sessions/:sessionId/device-commandutiliza el cubo de acciones.POST /api/extensions/sessions/:sessionId/logs/customutiliza el cubo de acciones.POST /api/extensions/sessions/:sessionId/notifications/customutiliza el cubo de acciones.GET /api/extensions/sessions/:sessionId/authutiliza el depósito de tokens.
Cubos granulares del futuro
Las categorías actuales son amplias. Chastify podría subdividirlas aún más a medida que crezca la API para desarrolladores, por ejemplo:
state.writemetadata.writelock.actionnotifications.customdevice.commandfiles.upload
Los administradores/propietarios del sitio Chastify pueden aumentar los límites por extensión cuando una extensión oficial o aprobada de alto volumen tenga una necesidad legítima. Diseñe los clientes de manera que el manejo de 429 sea genérico y no dependa de nombres de bucket exactos ni de valores predeterminados fijos de la plataforma.