Torna o registry de satélites (PluginPair) o gatekeeper do ext-api, em vez de
uma única EXT_MASTER_KEY global:
- satellites.ts: serviço + router /api/ext/v1/satellites (listar/provisionar/
revogar/rotacionar), montado fora do authMiddleware com gate de chave mestra.
- apikey-auth: resolvePairKey aceita a chave do satélite (nwk_) no REST e no WS,
resolvendo o tenant do par; checa revoke no banco a cada request (revoke
instantâneo) + throttle de lastSeenAt.
- Chave mestra e ApiKey por-tenant seguem funcionando (não-quebra).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Satélite confiável acessa a conta de qualquer email via EXT_MASTER_KEY:
- apikey-auth: helpers isMasterKey/resolveMasterEmail resolvem o tenant pelo
User.email; middleware REST refatorado para usá-los.
- ws-bridge: handshake do /api/ext/v1/stream trata a chave mestra + x-nw-email
(antes só tabela apiKey → o túnel WS tomava 401).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>