import { SDK } from '@meetkai/mka1'
const mka1 = new SDK({ bearerAuth: 'Bearer YOUR_API_KEY' })
// Paso 1 — Alice crea una conversación (ella se convierte en la propietaria)
const conv = await mka1.llm.conversations.create(
{ metadata: { project: 'acme' } },
{ headers: { 'X-On-Behalf-Of': 'user_alice' } }
)
const resourceId = conv.id
// Paso 2 — Alice otorga acceso de lector a Bob
await mka1.permissions.llm.grant(
{
resourceType: 'conversation',
resourceId,
userId: 'user_bob',
role: 'reader',
},
{ headers: { 'X-On-Behalf-Of': 'user_alice' } }
)
// Paso 3 — Comprobar los permisos de Bob
// Bob tiene acceso de lector → 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 NO tiene acceso de escritor → denegado
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
// Paso 4 — Bob intenta otorgar (falla con 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 rejected:', err.statusCode) // 403
}
// Paso 5 — Alice revoca el acceso de Bob
await mka1.permissions.llm.revoke(
{
resourceType: 'conversation',
resourceId,
userId: 'user_bob',
role: 'reader',
},
{ headers: { 'X-On-Behalf-Of': 'user_alice' } }
)
// Paso 6 — Verificar que Bob ahora está denegado
const bobAfterRevoke = await mka1.permissions.llm.check(
{
resourceType: 'conversation',
resourceId,
role: 'reader',
},
{ headers: { 'X-On-Behalf-Of': 'user_bob' } }
)
console.log('Bob after revoke:', bobAfterRevoke.allowed) // false