import { SDK } from '@meetkai/mka1'
const mka1 = new SDK({ bearerAuth: 'Bearer YOUR_API_KEY' })
// Etapa 1 — Alice cria uma `conversation` e se torna `owner`
const conv = await mka1.llm.conversations.create(
{ metadata: { project: 'acme' } },
{ headers: { 'X-On-Behalf-Of': 'user_alice' } }
)
const resourceId = conv.id
// Etapa 2 — Alice concede o papel `reader` a Bob
await mka1.permissions.llm.grant(
{
resourceType: 'conversation',
resourceId,
userId: 'user_bob',
role: 'reader',
},
{ headers: { 'X-On-Behalf-Of': 'user_alice' } }
)
// Etapa 3 — Verificar as permissões de Bob
// Bob tem o papel `reader` -> permitido
const bobReader = await mka1.permissions.llm.check(
{
resourceType: 'conversation',
resourceId,
role: 'reader',
},
{ headers: { 'X-On-Behalf-Of': 'user_bob' } }
)
console.log('Bob reader:', bobReader.allowed) // true
// Bob NÃO tem o papel `writer` -> negado
const bobWriter = await mka1.permissions.llm.check(
{
resourceType: 'conversation',
resourceId,
role: 'writer',
},
{ headers: { 'X-On-Behalf-Of': 'user_bob' } }
)
console.log('Bob writer:', bobWriter.allowed) // false
// Etapa 4 — Bob tenta conceder (falha com 403)
try {
await mka1.permissions.llm.grant(
{
resourceType: 'conversation',
resourceId,
userId: 'user_charlie',
role: 'reader',
},
{ headers: { 'X-On-Behalf-Of': 'user_bob' } }
)
} catch (err) {
console.log('Bob grant rejeitado:', err.statusCode) // 403
}
// Etapa 5 — Alice revoga o acesso de Bob
await mka1.permissions.llm.revoke(
{
resourceType: 'conversation',
resourceId,
userId: 'user_bob',
role: 'reader',
},
{ headers: { 'X-On-Behalf-Of': 'user_alice' } }
)
// Etapa 6 — Verificar que Bob agora é negado
const bobAfterRevoke = await mka1.permissions.llm.check(
{
resourceType: 'conversation',
resourceId,
role: 'reader',
},
{ headers: { 'X-On-Behalf-Of': 'user_bob' } }
)
console.log('Bob após revogação:', bobAfterRevoke.allowed) // false