Como os amigos já disseram, não há problema dessas chaves estarem "visíveis" no código público, desde que suas regras de segurança estejam em dia. permitindo apenas que usuário autenticados possam consumir os documentos, ou ainda, criar um token para o usuário com setCustomUserClaims e criar mais uma camada de segurança pra usuário logados.

Corrigindo o que o outro amigo disse, não é possível bloquear ou permitir determinados domínios de consumir o Firestore. o Firebase conta exclusivamente com as regras de segurança.

Use o teste de regras dentro do firebase para se certificar que suas regras funcionam.

Você pode pré determinar o bloqueio de leitura e escrita para todos os documentos, e depois só ir permitindo o que você quer que um usuário logado ou com um determinado token possa ler ou escrever.

Exemplo que bloqueia todos os documentos para usuários não logados:

service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth != null; } } }

Para determinadas ações, como criaçao de usuário, e outros tipos de gerenciamento e processamento. É necessario criar funções no Firebase Functions.

Para integrações de plataformas de pagamentos por exemplo, que utilizam token. Em aplicações SPA como no React por exemplo. As plataformas de pagamentos oferecem dois token, o público e o privado. Com o público só é possível usar para ações que não são sensíveis a segurança. Para outras ações como receber webhooks e processar dados do pagamento é preciso criar uma função no Cloud Functions.

Seguindo essas regras a risca e implementando da maneira correta, não tem o que se preocupar.