O que faz
Recebe um conjunto de plataformas de financiamento e produz um plano: quais superfícies mostrar,
em que ordem, com qual rótulo e portão. Referencia cada plataforma por um
identificador canônico (ex.: patreon: fedpromptly) e nunca armazena ou emite um
URL de checkout ao vivo, ID de cliente, chave publicável, ID de botão de compra ou ID de comerciante.
Pré-requisitos
bashejqnoPATHreferences/funding-links.jsonpresentereferences/embeds.mdpresente (por que nenhum HTML de embed é armazenado aqui)
Verificar ambiente
Execute antes de qualquer outra coisa:
command -v jq && command -v bash
Se algum estiver faltando, pare e relate: MISSING_DEP: jq.
Passo a passo
-
Confirme que os dados de referência estão presentes:
test -f references/funding-links.json -
Para cada identificador de plataforma, consulte sua entrada de plano:
bash scripts/classify.sh "patreon:fedpromptly" -
Monte o plano nesta ordem (recorrentes primeiro, únicas por último):
- GitHub Sponsors
- Patreon
- Ko-fi
- Buy Me a Coffee
- PayPal Subscription
- Stripe
- Crypto (NOWPayments)
-
Para cada entrada emita:
label,handle,class,gateedisclosure(se houver). Nunca emita um URL, chave ou ID. -
Se um usuário fornecer um URL de checkout ao vivo, não o planeje. Resolva-o para o identificador canônico, planeje isso e relate
RESOLVED: <url> -> <handle>.
Nunca presuma
- Nunca emita um ID de cliente, chave publicável, ID de botão de compra ou ID de comerciante em um plano. O plano referencia plataformas apenas por identificador canônico.
- Nunca coloque um URL de checkout ao vivo no plano. Apenas páginas de destino canônicas.
- Nunca presuma que o Patreon está aposentado só porque está ausente de uma determinada página.
Reconcilie com
references/funding-links.jsonantes de emitir. - Nunca bloqueie um botão de pagamento por trás de uma verificação de idade. Pagamento não é conteúdo com restrição de idade; se houver conteúdo adulto, bloqueie o conteúdo no lado do servidor, não o botão.
- Nunca renderize HTML. O plano são dados.
- Nunca armazene um ID de widget, ID de botão de compra ou token de botão de imagem. Veja
references/embeds.mdpara saber por que o embed de cada plataforma fica fora do repositório.
Saída
Um plano de financiamento: lista ordenada de {label, handle, class, gate, disclosure}.
Sem URLs, sem chaves, sem IDs, sem HTML.
Tratamento de falhas
classify.shretornaUnknown→ relateUNCLASSIFIED: <handle>, pare.- Uma credencial ativa é detectada em qualquer arquivo rastreado → relate
CREDENTIAL_LEAK: <path>, pare. references/funding-links.jsonausente → relateMISSING_REF, pare.