48 lines
1.2 KiB
TypeScript
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')
|