Pular para o conteúdo
Decoding Chat API

Temas

Um tema é uma folha de estilo CSS personalizada armazenada sob um código curto, e qualquer pessoa com o código pode buscá-la. A API HTTP expõe uma operação, que armazena um tema. O Media Proxy serve a folha de estilo armazenada de volta através de Obter CSS do tema.

A rota é apenas para usuários. Um token de bot e uma credencial bearer OAuth2 são ambos rejeitados com 403 ACCESS_DENIED.

Um identificador de tema possui 16 caracteres hexadecimais minúsculos que correspondem a ^[a-f0-9]{16}$. Enviar um CSS idêntico duas vezes cria dois temas independentes.

{
"id": "3f0a91c7d2b84e65"
}

A codificação UTF-8 de um documento enviado não pode exceder 8388608 bytes, e o documento tem pelo menos um caractere de comprimento. Ambos os limites são constantes fixas da instância.

LimiteValor
CSS codificado1 28388608 bytes
CSS enviado3pelo menos 1 caractere

1 O limite de 8 MiB é inclusivo, então um documento cuja codificação UTF-8 é de exatamente 8388608 bytes é armazenado e um byte a mais é rejeitado com 400 FILE_SIZE_TOO_LARGE

2 Medido sobre a codificação UTF-8, portanto um documento de caracteres multi-byte pode ser mais curto que 8388608 caracteres e ainda assim ser rejeitado

3 Medido em caracteres da string enviada

Uma conta não possui cota de tema. O bucket de limite de taxa theme:share:create é o único limite sobre quantos temas uma conta cria, e nenhuma rota aqui verifica uma chave de limite de instância.

O filtro de conteúdo de toda a instância examina o documento enviado antes da rota ser executada. Ele verifica um valor css de pelo menos 3 caracteres contra a lista de bloqueio de frases da instância e a lista de bloqueio de URLs da instância. Uma correspondência em qualquer uma delas retorna 403 CONTENT_BLOCKED. Um valor mais curto nunca é examinado.

O Decoding Chat verifica um corpo sob qualquer tipo de conteúdo, exceto multipart/form-data e application/x-www-form-urlencoded. O filtro também ignora um corpo que não é analisado como JSON. A rota analisa o corpo a partir do texto da requisição original e não lê nenhum tipo de conteúdo, de modo que um documento JSON enviado sob qualquer formato de corpo da requisição é armazenado sem passar pelas listas de bloqueio.

A triagem precede o bucket de limite de taxa, a verificação de credencial e o esquema da requisição, portanto, um documento bloqueado retorna CONTENT_BLOCKED mesmo quando a requisição não possui credencial.

Nada mais inspeciona o documento. O Decoding Chat armazena o CSS exatamente como foi enviado e nunca o analisa, valida, minimiza ou reescreve.

POST/v1/users/@me/themes

Armazena um documento CSS personalizado e retorna 201 com o identificador de tema criado. Apenas para usuários, e nenhuma permissão é necessária.

CampoTipoDescrição
css1 2stringO texto CSS para armazenar e compartilhar (pelo menos 1 caractere)

1 Armazenado exatamente como foi enviado, limitado pelo teto UTF-8 de 8388608 bytes descrito em Limites de documento

2 Uma string vazia é rejeitada com o código de validação INVALID_FORMAT

Um corpo que é analisado como JSON mas não é um objeto, como uma string, um número, um array ou null, retorna o mesmo código no caminho root.

CampoTipoDescrição
idstringO identificador de tema

O objeto possui o identificador e nada mais.

StatusCorpoCondição
201corpo da respostaO documento foi armazenado
400resposta de erroO documento codificado excede o tamanho limite e a requisição retorna FILE_SIZE_TOO_LARGE
403resposta de erroO chamador é um bot ou apresenta uma credencial bearer e a requisição retorna ACCESS_DENIED
403resposta de erroA conta tem uma ação pendente necessária e a requisição retorna ACCOUNT_SUSPICIOUS_ACTIVITY
403resposta de erroO documento é bloqueado pela moderação de conteúdo e a requisição retorna CONTENT_BLOCKED

O Decoding Chat armazena a codificação UTF-8 do documento enviado com o tipo de conteúdo text/css; charset=utf-8. O Decoding Chat termina de armazenar o documento antes de retornar o identificador.

O Media Proxy serve o documento a partir de /themes/{id}.css.

20 requisições por minuto para cada usuário autenticado, no bucket theme:share:create.