Plugins sandboxed são isolados por padrão. Para fazer algo além de ler e escrever seu próprio KV e armazenamento, um plugin precisa declarar uma capacidade em seu manifesto.
Declarar capacidades
{
"slug": "plugin-hello",
"capabilities": ["content:read", "network:request"],
"allowedHosts": ["api.example.com"]
}
Referência de capacidades
| Capacidade | Concede acesso a |
|---|---|
content:read | ctx.content.get(), ctx.content.list() |
content:write | ctx.content.create(), ctx.content.update(), ctx.content.delete() |
taxonomies:read | ctx.taxonomies.getAll(), ctx.taxonomies.getTerms() |
media:read | ctx.media.get(), ctx.media.list() |
media:write | ctx.media.getUploadUrl(), ctx.media.upload(), ctx.media.delete() |
network:request | ctx.http.fetch() — restrito a allowedHosts |
network:request:unrestricted | ctx.http.fetch() sem restrição de host |
users:read | ctx.users.get(), ctx.users.getByEmail(), ctx.users.list() |
email:send | ctx.email.send() |
O que o sandbox impõe
- Controle de capacidades.
- Escopo de storage e KV.
- Isolamento de rede.
- Sem bindings do host.
- Limites de recursos.
O que o sandbox não impõe
- Comportamento dentro de uma capacidade concedida.
- Confiança do operador em Node.js.
- Canais laterais.
Consentimento de capacidades
Na instalação, EmDash exibe um diálogo de consentimento.
Validação em tempo de build
Veja Bundling e publicação.