@m3r/sdk 0.5.0
O objeto ctx
Único contrato da extensão. Quatro canais, identidade, logger e catálogo — sem token e sem SQL.
defineExtension entrega um objeto: ctx. É o único caminho até o Core. Não existe process.env de tenant, não existe import de farmus-api, não existe repositório.
Não registre IP nem tables.ensure no index. Padrões.
activate é awaited antes do runtime marcar a extensão como running. deactivate é awaited (com timeout) antes do processo sair. Não registre listener em deactivate.
Mapa
| Campo | Papel | Pode recusar save? |
|---|---|---|
ctx.m3r | A extensão chama o Core (hoje: vendas). | Não. |
ctx.events | O Core avisou depois do commit. | Não. |
ctx.entryPoints | O Core consulta no meio da tela ou do save. | Sim, em BEFORE_* / ACTION. |
ctx.ext | Tabela, tela, menu e relatório declarativos. | Não. O ERP pinta. |
ctx.logger | Log estruturado no host. | — |
ctx.subscriptions | Dispose automático dos on(). | — |
ctx.capabilities | SDK_CATALOG 0.5.0 congelado. | — |
identidade / runtime | extensionId, tenant, executionId, modo. | — |
Não existem ctx.auth, ctx.storage nem ctx.fetch. A credencial RUN fica no transport do host. KV próprio é ctx.ext.records.
O que pode
- Registrar IPs e eventos no
activatee jogar o disposable emctx.subscriptions. - Chamar
ctx.m3r.sales.*com os scopes declarados nom3r.json. - Declarar tabela/tela/menu/relatório e gravar linhas na sua tabela.
- Ler
ctx.capabilitiespara saber o que esta versão fecha.
O que não pode
- Importar TypeORM,
pg,farmus-apiou montar HTTP com token. - Desenhar React para o ERP.
- Escrever SQL, inclusive na tabela da extensão.
- Inventar código de IP, evento, scope,
menuKeyou tipo de coluna.
Typo falha no TypeScript, no ctx.*.on(...) (SdkValidationError) e no m3r validate.
