SquareCloudBlobError
Toda falha da API lança um SquareCloudBlobError.
O que não é um SquareCloudBlobError
- Erros de rede não são encapsulados. Quando uma requisição não recebe uma resposta completa (falha de DNS, conexão reiniciada, um corpo cortado no meio da leitura), o erro original do
fetché lançado como está, após eventuais novas tentativas. - Erros de arquivo. No Node.js, um caminho de
put()que não pode ser aberto lança umErrorsimples (Cannot open file: <path>, erro original emcause). No navegador, um caminho falha com o erro da importação denode:fs. - Um
@aws-sdk/client-s3ausente.s3()lança o erro de importação do módulo.
UNKNOWN_ERROR
UNKNOWN_ERROR é o único código que o próprio SDK cria. Ele é usado quando a resposta não tem código de erro: um corpo que não é JSON (uma página de erro de proxy, por exemplo) ou uma resposta 2xx sem status: "success". status continua contendo o status HTTP real.
Falhas por objeto
As operações em lote informam as falhas no resultado em vez de lançar erro:update(): cada resultado temok: falsee umcode.delete([ids]): objetos inexistentes vão paranot_found, outras falhas parafailed.
Códigos de erro
BlobErrorCode é a lista de códigos própria da API de Blob Storage. Não é a mesma lista de códigos de erro da API principal da Square Cloud. Para o status HTTP e o significado de cada código, veja a referência de erros da API de Blob.
Globais
Globais
ACCESS_DENIED, RATE_LIMITED, MISSING_SCOPE, RESOURCE_NOT_ALLOWED, UPLOAD_TOKEN_NOT_ALLOWED, UPLOAD_TOKEN_USED, PREFIX_NOT_ALLOWED, PERMISSION_DENIED, ACCOUNT_BLOCKED, UPGRADE_REQUIRED, STORAGE_QUOTA_EXCEEDED, PRIVATE_STORAGE_UNAVAILABLE, PUBLIC_STORAGE_UNAVAILABLE, TOO_MANY_CONCURRENT_UPLOADS, UPLOAD_FAILED, INTERNAL_SERVER_ERROR, NOT_FOUNDRATE_LIMIT está depreciado: o serviço não o envia mais (veja RATE_LIMITED), mas ele continua no tipo.Objetos
Objetos
OBJECT_NOT_FOUND, OBJECT_ALREADY_EXISTS, OBJECT_IS_LEGACY, CHECKSUM_MISMATCH, INVALID_CONTENT_TYPE, FILE_TOO_LARGE, FILE_TOO_SMALL, BLOCKED_FILE_TYPE, INVALID_FILE_TYPE, FILE_TYPE_NOT_ALLOWED, NOTHING_TO_UPDATE, VISIBILITY_CHANGE_FAILED, UPDATE_FAILED, DELETE_FAILED, TOO_MANY_OBJECTS, SAME_OBJECT, INVALID_DESTINATION, COPY_FAILED, PREFIX_REQUIRED, INVALID_CONTINUATION_TOKENUploads multipart (em partes)
Uploads multipart (em partes)
TOO_MANY_CONCURRENT_CHUNKS, TOO_MANY_OPEN_UPLOADS, INVALID_UPLOAD_TOKEN, UPLOAD_NOT_FOUND, NO_CHUNKS_UPLOADED, EMPTY_CHUNK, INVALID_CHUNK_PART, CHUNK_TOO_SMALL, CHUNK_TOO_LARGERegras, tokens de upload, compartilhamentos e S3
Regras, tokens de upload, compartilhamentos e S3
TOO_MANY_RULES, DUPLICATE_RULE_PREFIX, INVALID_RULES, UPLOAD_TOKEN_TOO_LARGE, TOO_MANY_SHARES, SHARE_NOT_FOUND, INVALID_SHARE, API_KEY_REQUIRED, LEGACY_API_KEYValidação (400)
Validação (400)
Qualquer código
INVALID_*, como INVALID_OBJECT, INVALID_OBJECT_NAME ou INVALID_RULE_PREFIX. Os erros de regras trazem o prefix problemático em error.extra.SDK
SDK
UNKNOWN_ERROR: a resposta não tinha código de erro (veja acima).BlobErrorCode também aceita qualquer outra string, então um código que o serviço adicionar no futuro continua passando na checagem de tipos.
Política de novas tentativas
O SDK só tenta novamente o que é seguro repetir: chamadasGET e partes de uploads multipart (cada número de parte pode ser enviado de novo).
Uma chamada repetível é tentada novamente em caso de:
- um erro de rede (incluindo um corpo cortado no meio da leitura);
- qualquer resposta
5xx; TOO_MANY_CONCURRENT_CHUNKSem uma parte de multipart: o servidor recusa a parte antes de lê-la, então ela é enviada novamente dentro do mesmo limite de tentativas.
4xx, incluindo 429. RATE_LIMITED pode ser um bloqueio da conta que dura cerca de 30 minutos, então o SDK deixa a decisão com você.
Backoff
Antes da nova tentativan (começando em 0), o SDK espera:
maxRetries: 2, uma chamada faz no máximo 3 tentativas.
Repetindo escritas por conta própria
Uma escrita que falha com um erro de rede ou um5xx pode ou não ter sido aplicada. Repita-a apenas quando for seguro para você, por exemplo um put() com o mesmo name e overwrite: true.
Timeouts
Não há timeout no cliente nem forma de cancelar uma chamada: uma requisição dura o tempo que ofetch esperar.
