FT-SAP-METADATA-SANDBOX-GUARD-V1· 1.0.0Integrações
SAP: header sap-client em sandbox vs on-premise
sap-client header só vai em SAP on-premise / private cloud. Sandbox (sandbox.api.sap.com / *.api.sap.com) rejeita com 401 — tenant é fixo pelo API key. Tanto execução de query quanto $metadata fetch respeitam essa regra agora.
Atualizado em 8/6/2026
SAP: header sap-client
Quando o Lefia manda
O Lefia adiciona o header HTTP
sap-client na request OData só quando:
clientNumberestá configurado na conexão, E- A
baseUrlNÃO é da família SAP Business Hub sandbox.
Por quê
Sandbox/API gateway oficial da SAP (
sandbox.api.sap.com ou *.api.sap.com) rejeitam o header com 401 Unauthorized — o tenant é fixo pelo API key, e mandar sap-client ali é tratado como tentativa de cross-tenant.On-premise / private cloud SAP usa
sap-client normalmente pra indicar o mandante (cliente lógico).Detecção
Helper
isSapSandboxUrl(baseUrl) em src/lib/sap/url-helpers.ts:
sandbox.api.sap.com→ sandbox.api.sap.com→ sandbox.*.api.sap.com→ sandbox (qualquer subdomain).- Resto → on-premise / private cloud (manda o header se houver clientNumber).
Onde se aplica
odata-client.buildHeaders(execução de query)odata-metadata.buildHeaders($metadata fetch)
Os dois usam o mesmo helper desde o fix do Codex review pós-#207.
Tickets
- #154 fix original em odata-client.
- PR #53 propagou pra odata-metadata.
Histórico de versões
- 1.0.0
Codex review post-#207: odata-metadata.ts agora respeita isSapSandboxUrl() (mesmo guard do odata-client). Sem isso, $metadata fetch quebraria com 401 em sandbox.api.sap.com / *.api.sap.com quando clientNumber setado. Helper movido pra src/lib/sap/url-helpers.ts (compartilhado entre os 2 clientes). 8 testes novos cobrindo subdomain, case-insensitive, URL inválida, "api.sap.com" em PATH não-falsifica positivo. PR #53.
5/17/2026 · new