Metadata
Documente todos os campos obrigatórios e opcionais do arquivo metadata.json de uma presença Nowly.
Campos Obrigatórios
Toda presença precisa de:
| Campo | Tipo | Descrição | Padrão |
|---|---|---|---|
name* | string | Nome de exibição do serviço ou plataforma. | - |
author* | object | Autor principal, exibido primeiro na biblioteca e nas imagens OG. | - |
description* | object | Descrições curtas localizadas, indexadas por localidade. | - |
url* | string[] | Domínios ou padrões de URL compatíveis para correspondência de páginas. | - |
color* | string | Cor da marca em formato hexadecimal, usada pela UI e embeds. | - |
category* | string | Uma de streaming, music, video, social, gaming, tools, ai, learning, creator ou other. | - |
Exemplo
{
"name": "YouTube",
"author": {
"name": "Nowly Developer",
"github": "example"
},
"url": ["youtube.com", "www.youtube.com"],
"color": "#FF0033",
"category": "streaming",
"description": {
"en-US": "Watch and share videos on YouTube."
}
}Autor e Colaboradores
author- Mantenedor principal, exibido primeiro na biblioteca e nas imagens OG.contributors- Outras pessoas que ajudaram com a presença.
Os nomes de usuário do GitHub (a chave github) são usados para resolver avatares.
Descrições e Recursos
description- Texto curto do marketplace, indexado por localidade.longDescription- Descrição expandida para páginas de detalhes.features- Lista localizada de comportamentos suportados (ex.: suporte a botões, teclas de mídia).
Suporte nativo do Discord
Algumas plataformas já aparecem no Discord quando o usuário vincula sua conta (o Spotify é o exemplo mais comum). Defina essa flag opcional para que a biblioteca possa explicar que o Nowly ainda é útil sem essa vinculação.
| Campo | Tipo | Descrição | Padrão |
|---|---|---|---|
discordNative | boolean | True quando o Discord já mostra essa plataforma se o usuário vincular sua conta. Opcional. O padrão é false. | - |
{
"name": "Spotify",
"discordNative": true
}Isso apenas exibe uma nota informativa na página da biblioteca e na extensão (loja e detalhes de presenças instaladas). Não bloqueia a instalação.
Correspondência de URL
url- Domínios ou padrões de URL compatíveis para correspondência de páginas.regExp- Correspondência baseada em regex para padrões de URL complexos.
Use regExp apenas quando a correspondência simples por url não for suficiente. Prefira listas explícitas de domínios.
Contexto de Execução
Dois campos opcionais controlam como e quando o script da sua presença é executado no navegador.
| Campo | Tipo | Descrição | Padrão |
|---|---|---|---|
world | "main" | "isolated" | Contexto de execução. O padrão é isolated. | - |
runAt | "document_start" | "document_end" | "document_idle" | Quando o script é injetado. O padrão é document_idle. | - |
Por padrão, uma presença roda no contexto isolated: ela compartilha o DOM da página, mas não o contexto JavaScript da página. Esse é o padrão seguro e funciona para quase todas as presenças.
Defina "world": "main" quando sua presença precisar do contexto da página, especificamente para:
- ler globais da página (ex.: um objeto player que o site expõe em
window); - fazer um
fetchautenticado de mesma origem que precise carregar os cookies de sessão do usuário (ex.: uma API interna de metadados do site).
{
"name": "Netflix",
"url": ["netflix.com", "www.netflix.com"],
"world": "main",
"color": "#E50914",
"category": "streaming",
"description": {
"en-US": "Watch movies and series on Netflix."
}
}Um fetch feito a partir do contexto isolated não é tratado como uma requisição de primeira parte, então chamadas autenticadas falham silenciosamente. Se sua presença depende da API autenticada do site, você deve definir "world": "main".
A declaração vive inteiramente em metadata.json - a extensão a lê no momento do registro. Nenhuma alteração na extensão é necessária para adicionar uma nova presença com contexto de página.
Categoria
As categorias permitidas são streaming, music, video, social, gaming, tools, ai, learning, creator e other.