Metadatos
Documenta cada campo obligatorio y opcional del archivo metadata.json de una presencia de Nowly.
Campos obligatorios
Cada presencia necesita:
| Campo | Tipo | Descripción | Predeterminado |
|---|---|---|---|
name* | string | Nombre visible del servicio o plataforma. | - |
author* | object | Autor principal mostrado primero en la biblioteca e imágenes OG. | - |
description* | object | Descripciones cortas localizadas por idioma. | - |
url* | string[] | Dominios o patrones de URL compatibles para la coincidencia de páginas. | - |
color* | string | Color de marca en formato hex, usado por la interfaz y los embeds. | - |
category* | string | Uno de streaming, music, video, social, gaming, tools, ai, learning, creator u other. | - |
Ejemplo
{
"name": "YouTube",
"author": {
"name": "Desarrollador de Nowly",
"github": "ejemplo"
},
"url": ["youtube.com", "www.youtube.com"],
"color": "#FF0033",
"category": "streaming",
"description": {
"en-US": "Watch and share videos on YouTube."
}
}Autor y colaboradores
author- Mantenedor principal, mostrado primero en la biblioteca e imágenes OG.contributors- Personas adicionales que ayudaron con la presencia.
Los nombres de usuario de GitHub (la clave github) se usan para resolver avatares.
Descripciones y características
description- Texto corto para la biblioteca, organizado por idioma.longDescription- Descripción ampliada para páginas de detalle.features- Lista localizada de comportamientos compatibles (p. ej. botones, teclas multimedia).
Compatibilidad nativa de Discord
Algunas plataformas ya aparecen en Discord si el usuario vincula su cuenta (Spotify es el ejemplo habitual). Esta bandera opcional permite explicar que Nowly sigue siendo útil sin esa vinculación.
| Campo | Tipo | Descripción | Predeterminado |
|---|---|---|---|
discordNative | boolean | True cuando Discord ya muestra esta plataforma si el usuario vincula su cuenta. Opcional. False por defecto. | - |
{
"name": "Spotify",
"discordNative": true
}Solo muestra una nota informativa en la página de la biblioteca y en la extensión (tienda y detalle de una presencia instalada). No bloquea la instalación.
Coincidencia de URL
url- Dominios o patrones de URL compatibles para la coincidencia de páginas.regExp- Coincidencia basada en expresiones regulares para patrones de URL complejos.
Usa regExp solo cuando la coincidencia simple de url no sea suficiente. Prefiere listas de dominios explícitas.
Contexto de ejecución
Dos campos opcionales controlan cómo y cuándo se ejecuta el script de tu presencia en el navegador.
| Campo | Tipo | Descripción | Predeterminado |
|---|---|---|---|
world | "main" | "isolated" | Mundo de ejecución. Por defecto: isolated. | - |
runAt | "document_start" | "document_end" | "document_idle" | Cuándo se inyecta el script. Por defecto: document_idle. | - |
Por defecto, una presencia se ejecuta en el mundo isolated: comparte el DOM de la página pero no su contexto de JavaScript. Es el valor por defecto seguro y funciona para casi todas las presencias.
Establece "world": "main" cuando tu presencia necesite el contexto de la página, en concreto:
- leer variables globales de la página (p. ej. un objeto reproductor que el sitio expone en
window); - realizar un
fetchautenticado del mismo origen que deba enviar las cookies de sesión del usuario (p. ej. la API interna de metadatos de un sitio).
{
"name": "Netflix",
"url": ["netflix.com", "www.netflix.com"],
"world": "main",
"color": "#E50914",
"category": "streaming",
"description": {
"en-US": "Watch movies and series on Netflix."
}
}Un fetch desde el mundo aislado no se trata como una solicitud de origen propio: las llamadas autenticadas fallan en silencio. Si tu presencia depende de la API con sesión iniciada del sitio, debes establecer "world": "main".
La declaración reside por completo en metadata.json - la extensión la lee en el momento del registro. No hace falta cambiar la extensión para añadir una nueva presencia en contexto de página.
Categoría
Las categorías permitidas son streaming, music, video, social, gaming, tools, ai, learning, creator y other.