@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.

src/index.ts
import { defineExtension } from "@m3r/sdk";
import { registerVendas } from "./vendas/register";

export default defineExtension({
  async activate(ctx) {
    ctx.logger.info("up", { executionId: ctx.executionId, sdk: ctx.runtime.sdkVersion });
    await registerVendas(ctx);
  },
  async deactivate(ctx) {
    ctx.logger.info("stop");
  }
});

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

CampoPapelPode recusar save?
ctx.m3rA extensão chama o Core (hoje: vendas).Não.
ctx.eventsO Core avisou depois do commit.Não.
ctx.entryPointsO Core consulta no meio da tela ou do save.Sim, em BEFORE_* / ACTION.
ctx.extTabela, tela, menu e relatório declarativos.Não. O ERP pinta.
ctx.loggerLog estruturado no host.—
ctx.subscriptionsDispose automático dos on().—
ctx.capabilitiesSDK_CATALOG 0.5.0 congelado.—
identidade / runtimeextensionId, 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 activate e jogar o disposable em ctx.subscriptions.
  • Chamar ctx.m3r.sales.* com os scopes declarados no m3r.json.
  • Declarar tabela/tela/menu/relatório e gravar linhas na sua tabela.
  • Ler ctx.capabilities para saber o que esta versão fecha.

O que não pode

  • Importar TypeORM, pg, farmus-api ou montar HTTP com token.
  • Desenhar React para o ERP.
  • Escrever SQL, inclusive na tabela da extensão.
  • Inventar código de IP, evento, scope, menuKey ou tipo de coluna.

Typo falha no TypeScript, no ctx.*.on(...) (SdkValidationError) e no m3r validate.