UNPKG

@authduo/authduo

Version:

Free User-sovereign Authentication for the World

70 lines 2.18 kB
import { Bytename, deep, Hex, hexId } from "@benev/slate"; import { Token } from "./jwt/token.js"; import { Keypair } from "./keypair.js"; export class Passport { keypairData; name; created; constructor(keypairData, name, created) { this.keypairData = keypairData; this.name = name; this.created = created; } get thumbprint() { return this.keypairData.thumbprint; } static async generate() { const keypair = await Keypair.generate(); const keypairData = await keypair.toData(); const thumbBytes = Hex.bytes(keypair.thumbprint).slice(0, 5); const name = Bytename.string(thumbBytes, "Xxxxxx Xxxxxxxxx "); const created = Date.now(); return new this(keypairData, name, created); } static fromData(data) { const { keypair, name, created } = data; return new this(keypair, name, created); } toData() { return deep.clone({ keypair: this.keypairData, name: this.name, created: this.created, }); } async getKeypair() { return await Keypair.fromData(this.keypairData); } async signLoginTokens(o) { const passportKeypair = await this.getKeypair(); const loginKeypair = await Keypair.generate(); const exp = Token.fromJsTime(o.expiresAt); const name = this.name; const iss = o.issuer; const aud = o.audience; const jti = hexId(); const proofToken = await passportKeypair.sign({ exp, iss, aud, jti, data: { loginPubkey: await loginKeypair.toPubkey().toData(), passportPubkey: await passportKeypair.toPubkey().toData(), }, }); const keysToken = await passportKeypair.sign({ sub: this.thumbprint, exp, iss, aud, jti, data: { name, loginKeypair: await loginKeypair.toData(), }, }); return { proofToken, keysToken }; } } //# sourceMappingURL=passport.js.map