code.view: false no manifesto, oculta as variáveis que são suas com env_hidden e envia um link de uso: o cliente vê uma prévia, preenche as próprias respostas e recebe um app que inicia, para, gera logs e snapshots como qualquer outro, com o código lacrado. Neste tutorial você entrega um bot a um cliente dessa forma.
A plataforma aplica o lacre na própria API, em toda rota que lê ou altera arquivos e código, e não só no dashboard. Isso não torna o seu código secreto para quem controla a máquina em que ele roda nem para a equipe da Vertra, e não protege você de uma falha no seu próprio código que sirva arquivos. Leia Permissões para a lista completa de garantias.
Antes de começar
Um template de código privado funcionando, como o do primeiro tutorial. Templates abertos e fechados têm a mesma estrutura, então você só muda as permissões.
Um plano que possa criar templates privados (veja Planos e limites).
Uma segunda conta na qual você consiga entrar. É a única forma de ver a prévia e o app fechado exatamente como o cliente vê.
O que o cliente pode e não pode fazer
Os bancos de dados nunca são fechados: o cliente tem acesso total aos dados deles, como teria em qualquer banco de dados que possui. Mantenha tudo o que precisa ficar fora do alcance do cliente no seu próprio código e nas suas variáveis, não no banco de dados.
Passo a passo
1
Decida o que é seu e o que é do cliente
Divida a configuração em duas. O que o cliente fornece (o token de Discord dele) vira uma pergunta. O que você fornece (uma chave de um serviço que você paga, ou uma licença) vira uma variável oculta: injetada no app, nunca devolvida pela API e nunca mostrada no painel. Neste tutorial o bot lê
VENDOR_API_KEY, que é sua.2
Escreva o manifesto fechado
Parta do manifesto do primeiro tutorial e mude três coisas: defina
code.view como false, adicione a variável oculta e deixe de fora tudo o que um template fechado não pode permitir.vertracloud.template.yaml
permissions.code.view: falseé o que fecha o template. A plataforma deriva o resto: sem variáveis livres, sem edição de comandos, sem terminal, sem salvar como template, sem desvincular, sem deploy de código.env_hiddenlista chaves deenv. O valor é escrito no manifesto só para que a plataforma possa guardá-lo; depois que o template é criado, o manifesto armazenado não o carrega mais.- O que você deve deixar de fora.
code.edit: true,env.add: true,commands.edit: trueeshare.full_copy: truesão recusados em um template fechado cominvalid_permissions, porque cada um devolveria o código ou os segredos dele. Não os liste de forma alguma. - Os placeholders continuam funcionando. As respostas do cliente e os segredos gerados entram no app normalmente; o código que você oculta é a única coisa que o cliente não pode ler.
Código fechado e
env_hidden só existem em templates privados, e env_hidden apenas em um fechado (caso contrário, o validador dá o erro invalid_permissions). Um template do catálogo público sempre mostra o código, e o catálogo recusa code.view: false e env_hidden com forbidden_in_public.3
Valide
code: { view: false, edit: true } e o achado será permissions.code.edit com o código invalid_permissions (“A closed template cannot let users edit its code”). Remova a linha edit de novo.4
Crie o template
null.5
Crie o link de uso
Um link de uso dá ao cliente o direito de criar apps a partir do template, com a cópia própria da imagem quando o template usa uma. Para um cliente, deixe-o de uso único e de curta duração:A CLI imprime o token uma única vez. Copie-o e envie ao cliente na hora; depois você só consegue ver o final dele e revogá-lo. No painel, o equivalente é Templates, My templates, o template, Share links, Create link.Também existe um link de cópia completa, que dá ao destinatário um template próprio com código e imagem. Ele não está disponível aqui: um link de cópia completa mostra o código, então, em um template fechado, o painel diz “Unavailable: closed template” e a API recusa a combinação do manifesto com
invalid_permissions.6
Saiba o que o cliente vê
O link abre uma página de prévia antes de qualquer coisa ser criada. O cliente vê o autor, a versão, o que será criado (serviços, memória mínima, plano exigido, vagas de imagem), um selo Not verified by Vertra e este aviso:
Closed code. The values you fill in (for example, your OpenAI key) go to code you cannot see. You are trusting the author.O cliente então entra na conta, escolhe onde criar o app e responde às perguntas. A prévia tem um botão Report para quem achar o template abusivo. No app, o cliente vê a marca Closed template e a explicação de que o código pertence ao autor e de quais ações continuam abertas.Seja honesto com o seu cliente sobre a confiança envolvida: o aviso acima é mostrado a ele por design.
7
Atualize e revogue
Para corrigir algo, aumente Revogar impede novas criações e deixa de oferecer atualizações. O que o cliente já criou continua rodando: pertence a ele, e você nunca poderá parar, excluir nem ler nada na conta dele.
version e execute vertra template create --template support-bot --changelog "Describe the change". O cliente vê New version available e se atualiza quando quiser, com um snapshot de segurança feito antes; uma atualização nunca é automática. Quando o contrato com o cliente terminar, revogue o link:Solução de problemas
Próximos passos
- Templates fechados para quem os usa: o lado do cliente desta mesma página.
- Receba um template por link: a prévia, a cópia da imagem e o fluxo de denúncia.
- Links de compartilhamento: links de uso versus links de cópia completa, limites e revogação.
- Permissões: todas as combinações e o que cada uma bloqueia.
- Boas práticas: onde guardar dados em um template fechado.
- Próximo tutorial: de um template privado ao catálogo público.