Atualize para o SDK 0.6 e as novas regras de funções
Uma lista de verificação para projetos que chamam Edge Functions do JavaScript SDK, com os segredos que você pode precisar para alternar.
1. O que mudou
Instale a nova versão:
A versão tem uma alteração de segurança e várias correções na forma como os erros e as respostas são relatados. A mudança de segurança também está nas funções service: ela se aplica ao seu projeto assim que o serviço for atualizado, qualquer que seja a versão do SDK que você usar.
2. Mudanças significativas
As chamadas de gerenciamento agora precisam de uma chave service_role
functions.list(), get(), listJobs(), getJob(), enqueueJob(), listCronJobs(), createCronJob() e deleteCronJob() retornam 403 para uma chave pública ou um usuário conectado. Antes, list() e get() retornavam o código-fonte e as variáveis de cada função para qualquer pessoa que possuísse a chave pública. Consulte o modelo de segurança.
Retorne apenas o que seu front end precisa (nomes, por exemplo), nunca a definição completa.
Um corpo que não pode ser JSON é recusado
invoke(name, { body: new Blob(…) }), e o mesmo com ArrayBuffer, arrays digitados, FormData, URLSearchParams ou ReadableStream, agora retorna o código de erro invalid_body. Antes, a função recebia {} e nenhum erro era reportado. Codifique dados binários (base64) ou carregue-os no armazenamento e envie seu caminho.
O próprio 502, 503 ou 504 de uma função é um FunctionsHttpError
Antes, esses status eram sempre classificados como FunctionsRelayError, mesmo quando seu código os retornava. Agora FunctionsRelayError significa que a plataforma falhou. Se você tentou novamente em FunctionsRelayError, verifique se sua lógica de nova tentativa ainda corresponde: consulte erros, tempos limite e novas tentativas.
FunctionDef é mais preciso
env_vars é Record<string, string> (era Record<string, unknown>) e permissions é adicionado. O código que lê esses campos continua funcionando; o código que atribuiu valores de outro tipo não é mais compilado.
3. Correções de comportamento
| Antes | Agora |
|---|---|
Uma função retornando 500 com texto produziu a mensagem "null" | A mensagem é o texto que sua função retornou |
Uma função retornando 200 com texto produzido { data: null, error: null } | data é o texto |
Uma resposta binária no modo padrão produziu { data: null, error: null } | error.code é invalid_response e a mensagem sugere responseType |
responseType: 'text' com um erro JSON { "error": "…" } mostrou HTTP 503 | A mensagem é lida no JSON, como no modo padrão |
'text', 'blob' e 'arrayBuffer' não tiveram tempo limite padrão | O tempo limite do cliente (30 s) se aplica |
| Um nome de função foi inserido no URL não codificado | Está codificado: a/../b permanece dentro de seu caminho |
delaySecs em um trabalho foi ignorado: o trabalho foi executado imediatamente | O trabalho aguarda sua data |
Novas exportações: FunctionsHttpError, FunctionsRelayError, isRelayStatus e FunctionsResponseType vêm de @aurabase/aurabase-js e também de @aurabase/functions. Se você os importou de @aurabase/functions, isso continua funcionando; com o pnpm você não precisa mais desse pacote como dependência direta.
Em @aurabase/auth, o tipo de email no resultado de getClaims() agora é string | null, que é o que o serviço retorna para um usuário sem endereço de e-mail.
CLI. aura functions deploy não apaga mais os segredos de uma função que já existe. aura functions invoke --data recusa JSON inválido em vez de enviar {}. aura functions download funciona para funções Deno. aura functions serve escuta na porta que anuncia. aura studio abre o Studio na porta 3000.
4. Gire os segredos expostos
Se o seu projeto fosse executado em uma versão de serviço anterior a essa alteração, qualquer detentor de sua chave pública poderia ler o código e as variáveis de suas funções. Suponha que eles foram lidos:
- Liste suas funções com uma tecla
service_rolee abra as variáveis de cada uma. - Alterne todos os segredos que eles contêm: chaves de pagamento, segredos de webhook, tokens de terceiros.
- Remova os segredos que foram escritos diretamente em
index.tse mova-os para variáveis. - Verifique os trabalhos e as regras de alerta do projeto para entradas que você não criou.
5. Lista de verificação
- Pesquise seu código por
functions.list(,functions.get(,listJobs(,getJob(,enqueueJob(,createCronJob(,deleteCronJob(elistCronJobs(em código executado em um navegador ou com uma chave pública. - Procure valores
body:que não sejam JSON simples. - Verifique a lógica de nova tentativa que depende de
FunctionsRelayError. - Gire os segredos conforme descrito acima.
- Atualize a CLI.