Files
incudal/server/scripts/test-agent-auth.ts
2026-06-20 14:26:29 +08:00

48 lines
1.2 KiB
TypeScript

import assert from 'node:assert/strict'
import {
createAgentBodyHash,
createAgentSignature,
generateAgentSecret,
isAgentTimestampFresh,
stableStringifyAgentBody,
verifyAgentSignature
} from '../src/lib/agent-auth.js'
const bodyA = {
version: '0.1.0',
resources: {
memory: 1024,
cpu: 8
},
capabilities: ['heartbeat', 'report']
}
const bodyB = {
capabilities: ['heartbeat', 'report'],
resources: {
cpu: 8,
memory: 1024
},
version: '0.1.0'
}
assert.equal(stableStringifyAgentBody(bodyA), stableStringifyAgentBody(bodyB))
assert.equal(createAgentBodyHash(bodyA), createAgentBodyHash(bodyB))
const secret = generateAgentSecret()
const payload = {
method: 'POST',
path: '/api/agent/heartbeat',
timestamp: String(Date.now()),
nonce: 'nonce-123456',
bodyHash: createAgentBodyHash(bodyA)
}
const signature = createAgentSignature(secret, payload)
assert.equal(verifyAgentSignature(secret, payload, signature), true)
assert.equal(verifyAgentSignature(secret, { ...payload, path: '/api/agent/report' }, signature), false)
assert.equal(isAgentTimestampFresh(payload.timestamp), true)
assert.equal(isAgentTimestampFresh(String(Date.now() - 10 * 60 * 1000)), false)
console.log('agent-auth self-test passed')