This commit is contained in:
Raven Scott
2026-05-20 21:02:45 -04:00
parent 1f3f4b24a2
commit 14d0980b4f
734 changed files with 682 additions and 746 deletions
@@ -0,0 +1,57 @@
require('bare-process/global')
const test = require('brittle')
const { CapabilityManager, createCapability, verifyCapability } = require('../index.js')
const crypto = require('bare-crypto')
const b4a = require('b4a')
const { setTimeout } = require('bare-timers')
test('creates and verifies capability', async (t) => {
const issuer = new CapabilityManager()
const subjectKeyPair = require('hypercore-crypto').keyPair()
const { cap } = issuer.issue(subjectKeyPair.publicKey, 'test://resource', ['read'])
t.ok(cap.signature, 'has signature')
t.is(cap.resource, 'test://resource')
const valid = issuer.verify(cap)
t.ok(valid, 'capability verifies correctly')
})
test('rejects expired and revoked caps', async (t) => {
const issuer = new CapabilityManager()
const subject = require('hypercore-crypto').keyPair().publicKey
const { cap } = issuer.issue(subject, 'temp://data', ['write'], 10) // very short TTL
// Wait for expiry (simulated)
await new Promise(r => setTimeout(r, 20))
const stillValid = issuer.verify(cap)
t.is(stillValid, false, 'expired cap rejected')
})
test('delegation works', async (t) => {
const alice = new CapabilityManager()
const bobPub = require('hypercore-crypto').keyPair().publicKey
const charliePub = require('hypercore-crypto').keyPair().publicKey
const { cap } = alice.issue(bobPub, 'shared://project', ['read'])
const delegated = await alice.delegate(cap, charliePub)
t.ok(delegated.cap, 'delegated cap created')
t.is(delegated.cap.subject, b4a.toString(charliePub, 'hex'))
t.ok(delegated.cap.parentSignature, 'delegation has parentSignature proof')
t.ok(delegated.cap.delegator, 'has delegator')
// Verify delegated cap works
const validDelegated = alice.verify(delegated.cap)
t.ok(validDelegated, 'delegated capability verifies correctly with chain proof')
})
console.log('hyper-p2p-capabilities tests completed successfully')
test('hyper-p2p-capabilities: manager lifecycle', async (t) => {
const m = new CapabilityManager()
t.ok(m.keyPair)
t.pass()
})