# Referência de eventos, RPC e contratos

Histórico, consultas, provedores versionados e limites de comunicação entre aplicações.

Use eventos para notificar fatos, RPC para aguardar uma resposta e contratos para compartilhar métodos versionados. Os três mecanismos operam dentro do runtime: uma solicitação RPC não cria transporte HTTP por si só.

<span id="receptores-y-retorno"></span>

<span class="section-anchor" id="section-1"></span>

## Receptores e retorno

O callback de evento recebe `WuEvent`; um handler RPC recebe o payload e um segundo argumento de correlação, identidade e cancelamento. Um contrato entrega um proxy vivo para os métodos do provedor. Consulte [comunicação](/pt/docs/framework/communication/) para os primeiros exemplos de `emit`, `on`, `request`, `handle`, `provide` e `consume`.

`wu.handle(channel, handler, options)` preserva `version`, `allow` e `replace`. Dentro do lifecycle, `context.wu.handle` também adiciona a identidade e os grants da app; use essa facade para handlers de uma microapp.

<span id="vida-del-proveedor"></span>

<span class="section-anchor" id="section-2"></span>

## Vida do provedor

```js
const release = wu.eventBus.handle('catalog:lookup', ({ productId }) => {
  return { productId, available: true };
}, { version: '1.0.0' });

const product = await wu.request('catalog:lookup', { productId: 'p-42' }, {
  version: '^1.0.0', timeout: 2500,
});
console.log(product.available);
release();
```

Um provedor é liberado quando seu proprietário deixa de estar disponível. Rejeitar ou cancelar a espera não desfaz um efeito já executado; o handler deve cooperar com `context.signal`. O histórico e o replay servem para observação, não para repetir operações de negócio.

<span class="section-anchor" id="section-3"></span>

## wu.hasHandler / eventBus.hasHandler

Verifica se existe um provedor RPC ativo para um canal.

`wu.hasHandler(channel: string): boolean`

- **Parâmetros:** channel: nome exato do canal.
- **Retorno:** Booleano de presença.
- **Erros:** A presença não garante que sua identidade esteja autorizada nem que a versão corresponda.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Não instala novos recursos.

```js
if (wu.hasHandler('catalog:lookup')) console.log('Proveedor disponible');
```

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-4"></span>

## wu.eventBus.history

Lê o histórico de envelopes mantido pelo barramento.

`wu.eventBus.history: WuEvent[]`

- **Parâmetros:** Getter sem argumentos; exclui emissões history:false.
- **Retorno:** Snapshot de eventos; limite padrão de 100.
- **Erros:** Não inclui necessariamente todo o histórico da sessão.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Não instala novos recursos.

```js
console.table(wu.eventBus.history.map(event => ({ name: event.name, app: event.appName })));
```

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-5"></span>

## wu.eventBus.replay

Entrega ao callback os eventos históricos correspondentes.

`wu.eventBus.replay(pattern, callback): void`

- **Parâmetros:** Padrão e callback de envelope WuEvent.
- **Retorno:** void; não publica os eventos novamente no barramento.
- **Erros:** Não executa handlers RPC novamente nem recupera efeitos externos.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Não deixa uma inscrição; use on para receber eventos futuros.

```js
wu.eventBus.replay('catalog:*', event => console.log(event.data));
```

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-6"></span>

## wu.eventBus.clearHistory

Remove eventos do histórico, mantendo listeners e provedores.

`wu.eventBus.clearHistory(pattern?): void`

- **Parâmetros:** Padrão opcional; omiti-lo esvazia todo o histórico.
- **Retorno:** void.
- **Erros:** Não apaga projeções que um consumidor já salvou.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Não instala novos recursos.

```js
wu.eventBus.clearHistory('catalog:*');
```

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-7"></span>

## wu.eventBus.getStats

Lê métricas de eventos, inscrições e provedores do barramento.

`wu.eventBus.getStats(): object`

- **Parâmetros:** Sem argumentos.
- **Retorno:** Objeto de contadores e configuração.
- **Erros:** Não mede a aceitação dos eventos pelo negócio.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Não instala novos recursos.

```js
console.log(wu.eventBus.getStats());
```

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-8"></span>

## wu.eventBus.matchesWildcard

Verifica um padrão de evento sem registrar uma inscrição.

`wu.eventBus.matchesWildcard(eventName, pattern): boolean`

- **Parâmetros:** Nome do evento primeiro, padrão depois.
- **Retorno:** Booleano.
- **Erros:** Uma correspondência não concede permissão para usar esse recurso.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Não instala novos recursos.

```js
console.log(wu.eventBus.matchesWildcard('catalog:selected', 'catalog:*'));
```

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-9"></span>

## wu.contracts.has

Consulta a presença e a compatibilidade semver de um contrato.

`wu.contracts.has(name: string, range?: string): boolean`

- **Parâmetros:** Nome e intervalo; * por padrão.
- **Retorno:** boolean
- **Erros:** Verifique o resultado; não comprova a disponibilidade de serviços externos.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Não instala novos recursos.

```js
console.log(wu.contracts.has('formatters', '^1.0.0'));
```

Referência: `src/core/wu-contracts.js`.

<span class="section-anchor" id="section-10"></span>

## wu.contracts.list

Lista os provedores de contratos ativos.

`wu.contracts.list(): Array<{name,version,app}>`

- **Parâmetros:** Sem argumentos.
- **Retorno:** Array<{name,version,app}>
- **Erros:** Verifique o resultado; não comprova a disponibilidade de serviços externos.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Não instala novos recursos.

```js
console.table(wu.contracts.list());
```

Referência: `src/core/wu-contracts.js`.

<span class="section-anchor" id="section-11"></span>

## wu.contracts.revoke

Remove um provedor por nome do registro do host.

`wu.contracts.revoke(name: string): boolean`

- **Parâmetros:** Nome exato; false quando não existe.
- **Retorno:** boolean
- **Erros:** Verifique o resultado; não comprova a disponibilidade de serviços externos.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Invalida o acesso posterior dos proxies consumidores.

```js
wu.contracts.revoke('formatters');
```

Referência: `src/core/wu-contracts.js`.

<span class="section-anchor" id="section-12"></span>

## wu.contracts.cleanup

Revoga todos os provedores desta instância de contratos.

`wu.contracts.cleanup(): void`

- **Parâmetros:** Sem argumentos.
- **Retorno:** void
- **Erros:** Verifique o resultado; não comprova a disponibilidade de serviços externos.
- **Permissões:** Host; a fachada com escopo não expõe administração global.
- **Limpeza:** Afeta todos os consumidores do registro.

```js
wu.contracts.cleanup();
```

Referência: `src/core/wu-contracts.js`.

<span class="section-anchor" id="section-13"></span>

## WuEventBus.tap

Observa eventos do barramento para instrumentação do host.

`bus.tap(callback): () => void`

- **Parâmetros:** Callback de eventos; não é um listener de aplicação com escopo.
- **Retorno:** Função para cancelar o tap.
- **Erros:** Um valor que não seja função produz uma limpeza vazia.
- **Permissões:** A instância independente pertence ao host que a cria; não modifica a fachada do barramento do singleton WU.
- **Limpeza:** Mantenha e execute o disposer: removeAll não apaga taps.

```js
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
const stop = bus.tap(event => console.log(event));
stop();
```

Estes métodos pertencem a uma instância independente de WuEventBus. A fachada wu.eventBus não os expõe.

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-14"></span>

## WuEventBus.configure

Atualiza a configuração do barramento e reduz o histórico se maxHistory mudar.

`bus.configure(config): void`

- **Parâmetros:** maxHistory, enableReplay, enableWildcards, logEvents, strictMode e validateOrigin.
- **Retorno:** void.
- **Erros:** maxHistory deve ser um inteiro seguro não negativo; lança RangeError caso contrário.
- **Permissões:** A instância independente pertence ao host que a cria; não modifica a fachada do barramento do singleton WU.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

```js
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
bus.configure({ maxHistory: 100 });
```

Estes métodos pertencem a uma instância independente de WuEventBus. A fachada wu.eventBus não os expõe.

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-15"></span>

## WuEventBus.enableStrictMode

Ativa controles estritos do barramento para novas operações.

`bus.enableStrictMode(): void`

- **Parâmetros:** Sem argumentos.
- **Retorno:** void.
- **Erros:** A chamada altera apenas a configuração; operações posteriores podem falhar na validação.
- **Permissões:** A instância independente pertence ao host que a cria; não modifica a fachada do barramento do singleton WU.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

```js
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
bus.enableStrictMode();
```

Estes métodos pertencem a uma instância independente de WuEventBus. A fachada wu.eventBus não os expõe.

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-16"></span>

## WuEventBus.disableStrictMode

Desativa a flag strictMode do barramento.

`bus.disableStrictMode(): void`

- **Parâmetros:** Sem argumentos.
- **Retorno:** void.
- **Erros:** A chamada não retorna um diagnóstico das inscrições existentes.
- **Permissões:** A instância independente pertence ao host que a cria; não modifica a fachada do barramento do singleton WU.
- **Limpeza:** O proprietário do runtime administra os recursos e suas funções de limpeza.

```js
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
bus.disableStrictMode();
```

Estes métodos pertencem a uma instância independente de WuEventBus. A fachada wu.eventBus não os expõe. É uma decisão do host, não um mecanismo para contornar as concessões da fachada com escopo.

Referência: `src/core/wu-event-bus.js`.

<span class="section-anchor" id="section-17"></span>

## WuEventBus.removeAll

Remove listeners e handlers RPC e rejeita solicitações pendentes.

`bus.removeAll(): void`

- **Parâmetros:** Sem argumentos.
- **Retorno:** void.
- **Erros:** As solicitações pendentes são rejeitadas com WU_RPC_BUS_CLEARED.
- **Permissões:** A instância independente pertence ao host que a cria; não modifica a fachada do barramento do singleton WU.
- **Limpeza:** Não esvazia o histórico nem os taps; use clearHistory e os canceladores de taps separadamente.

```js
import { WuEventBus } from 'wu-framework';
const bus = new WuEventBus();
bus.removeAll();
```

Estes métodos pertencem a uma instância independente de WuEventBus. A fachada wu.eventBus não os expõe.

Referência: `src/core/wu-event-bus.js`.