OverviewFilesCommitsIssuesDocsReleasesPeers

godot-keet / tests / test-extractors.mjs

76 lines · javascript ref:
/**
 * test-extractors.mjs — Debug which keet-core APIs work for graph extractors
 */
import Pipe from 'bare-pipe'
import FramedStream from 'framed-stream'
import b4a from 'b4a'

let rpcId = 0
const pipe = new Pipe('/tmp/keet-daemon.sock')
const framed = new FramedStream(pipe)
const pending = new Map()

framed.on('data', buf => {
  const msg = JSON.parse(b4a.toString(buf))
  const cb = pending.get(msg.id)
  if (cb) { pending.delete(msg.id); cb(msg) }
})

function call (method, params = {}) {
  return new Promise((resolve, reject) => {
    const id = ++rpcId
    const timeout = setTimeout(() => { pending.delete(id); reject(new Error('timeout: ' + method)) }, 10000)
    pending.set(id, msg => {
      clearTimeout(timeout)
      if (msg.ok !== undefined && msg.data !== undefined) msg.result = msg.data
      if (msg.error) reject(new Error(msg.error.message || String(msg.error)))
      else resolve(msg.result)
    })
    framed.write(b4a.from(JSON.stringify({ jsonrpc: '2.0', id, method, params })))
  })
}

const rooms = await call('rooms')
console.log(`Total rooms: ${rooms.length}\n`)

// Test first 3 non-DM rooms
let tested = 0
for (const r of rooms) {
  if (tested >= 3) break
  const rid = r.roomId || r.id
  const title = r.title || '(untitled)'

  console.log(`--- ${title} (${rid.slice(0, 12)}...) ---`)

  // Test members
  try {
    const members = await call('members', { roomId: rid })
    const list = Array.isArray(members) ? members : (members?.members || members?.data || [])
    console.log(`  members: ${list.length}`)
    if (list.length > 0) {
      const m = list[0]
      console.log(`    first: ${JSON.stringify({id: m.id, memberId: m.memberId, role: m.role, status: m.status}).slice(0, 120)}`)
    }
  } catch (err) {
    console.log(`  members: ERROR — ${err.message}`)
  }

  // Test chat messages
  try {
    const msgs = await call('messages', { roomId: rid, limit: 1 })
    const list = Array.isArray(msgs) ? msgs : (msgs?.messages || msgs?.data || [])
    console.log(`  messages: ${list.length}`)
    if (list.length > 0) {
      const msg = list[0]
      console.log(`    first: ts=${msg.timestamp || msg.ts || 'none'}, keys=${Object.keys(msg).join(',')}`)
    }
  } catch (err) {
    console.log(`  messages: ERROR — ${err.message}`)
  }

  tested++
}

pipe.destroy()
setTimeout(() => Bare.exit(0), 500)