@e280/authlocal
Version:
User-sovereign login system for everybody
45 lines (35 loc) • 1.33 kB
text/typescript
import {Science, test, expect} from "@e280/science"
import identityTest from "./trust/concepts/identity/identity.test.js"
import {Login} from "./trust/concepts/session/login.js"
import {verifyClaim} from "./trust/concepts/claim/verify.js"
import {generateSession} from "./trust/concepts/session/session.js"
import {generateIdentity} from "./trust/concepts/identity/identity.js"
const expiresAt = Date.now() + 999_000
const appOrigin = "https://example.e280.org"
const authorityOrigin = "https://authlocal.org"
async function setupLogin() {
const identity = await generateIdentity()
const session = await generateSession({identity, expiresAt, appOrigin, authorityOrigin})
const login = await Login.verify({session, appOrigins: [appOrigin]})
expect(login.nametag.id).is(identity.id)
expect(login.session.secret).is(session.secret)
return login
}
await Science.run({
"login": test(async() => {
await setupLogin()
}),
"claims": Science.suite({
"sign/verify": test(async() => {
const login = await setupLogin()
const claimToken = await login.signClaim({
claim: "hello",
expiresAt,
})
const {claim, proof} = await verifyClaim<string>({claimToken, appOrigins: [appOrigin]})
expect(proof.nametag.id).is(login.nametag.id)
expect(claim).is("hello")
}),
}),
identity: identityTest,
})