Zero-config GraphQL multi-tenant e global para Express, gerado dinamicamente a partir do Scriba SDK.
Este projeto cria schemas GraphQL automaticamente com base nos tenants, tabelas, campos e relações definidos no Scriba — sem precisar escrever resolvers manualmente.
- 🚀 Zero configuração: schemas GraphQL gerados automaticamente
- 🧩 Multi-tenant por request (header, subdomínio, etc.)
- 🌍 Schema global para acessar todos os tenants
- 🔍 Filtros avançados (
eq,ne,gt,lt,in,contains, etc.) - 📄 Paginação (
limiteoffset) - 🔗 Relações automáticas
- 🧠 Cache de schema com LRU
- 🧪 GraphiQL habilitado
npm install scriba-graphqlDependências principais:
expressgraphqlexpress-graphqlscriba-sdk
const Scriba = require("scriba-sdk").default
const scriba = new Scriba([
{ id: "ipsum", path: "./database/ipsum.db", schema: "./schema.prisma" },
{ id: "llms", path: "./database/llms.db", schema: "./llms.prisma" }
])Cada request resolve automaticamente o tenant com base no header (ou outra lógica).
const express = require("express")
const { createMultiTenantGraphQL } = require("scriba-graphql")
const app = express()
app.use(
"/graphql",
createMultiTenantGraphQL({
tenantResolver: req => req.headers["x-tenant-id"],
scribaInstance: scriba
})
)
app.listen(3000, () =>
console.log("GraphQL em http://localhost:3000/graphql")
)x-tenant-id: ipsumconst { createGlobalGraphQL } = require("scriba-graphql")
app.use(
"/global",
createGlobalGraphQL({ scribaInstance: scriba })
)Acesse:
http://localhost:3000/global
Cada tenant vira um namespace no GraphQL:
query {
ipsum {
users {
id
name
age
}
}
}Para cada tabela:
- singular → retorna 1 registro
- plural → retorna lista
query {
ipsum {
user(where: { id: { eq: 1 } }) {
name
}
users(
where: { age: { gte: 18 } }
limit: 10
offset: 0
) {
id
name
age
}
}
}eq,negt,gtelt,ltein,nin
eq,necontainsstartsWithendsWithin,nin
Relações definidas no Scriba são expostas automaticamente:
query {
ipsum {
users {
name
invoices {
total
}
}
}
}Os schemas são:
- Gerados uma única vez por tenant
- Armazenados em LRU Cache
- Evitam custo de reconstrução por request
node test.jsDepois acesse:
http://localhost:3000/graphqlhttp://localhost:3000/global
.
├─ index.js # Core GraphQL generator
├─ test.js # Exemplo de uso
├─ package.json
├─ johankit.yml
└─ database/
- Node.js ≥ 16
- Scriba SDK ≥ 1.0
- Express ≥ 4
- Mutations automáticas (create/update/delete)
- Autorização por tenant / tabela
- Subscriptions
- Custom scalars
- Hooks de lifecycle
MIT © João Santana