UNPKG

@e280/authlocal

Version:

User-sovereign login system for everybody

201 lines (177 loc) 5.86 kB
import {deep} from "@e280/stz" import {Science, test, expect} from "@e280/science" import {Identity} from "./types.js" import {SeedChecksumError, seedPack, seedRecover} from "./seed.js" function scrutinizeIdentity(identity: Identity) { expect(typeof identity.label).is("string") expect(identity.label).ok() expect(identity.id.length).is(64) expect(identity.secret.length).is(64) } async function readSeeds(seed: string) { const promises = seedRecover(seed) return Promise.all(promises) } const sampleIdentities: Identity[] = [ {"label":"ligrex.nolwyd","id":"6f58d836a227dd44459f4f4ce98fd75758cf858eb88eebe63cc5e0522f88a267","secret":"dc738b54ddd700d4295147104a20e0a2ab29999135fbdf6cdb2a2c3d89452c84"}, {"label":"dalryd.motryn","id":"25cc5293e75ca31a5eb8052e021fb9799579cd46de6e5909980fe44bc2b3aa07","secret":"539534b1c307985d4fa0586541916873b2fa169f2081173afa21bdf3e5ee539d"}, {"label":"larrev.wacdus","id":"e18b0c81de6199111814356eceb051eea1916dce1a0ca494a52f0446e88afd84","secret":"b85e894541f6464276434aede306b0dc822d68a601a14da37fff6222c9dc369d"}, ] export default Science.suite({ "dehydrate": test(async() => { const [identity] = sampleIdentities const text = await seedPack(identity) expect(text.length).gt(100) }), "dehydrate+hydrate": test(async() => { const text = await seedPack(...sampleIdentities) const identities = await readSeeds(text) expect(identities.length).is(sampleIdentities.length) for (const identity of identities) scrutinizeIdentity(identity) sampleIdentities.forEach((sample, index) => { const identity = identities.at(index)! expect(deep.equal(sample, identity)).ok() }) }), "hydrate": Science.suite({ "simple": test(async() => { const identities = await readSeeds(`"fadpec.tabnel" pachul.migryd.ripren.ritret misreg.tarnep.rabnul.panhep lonfyr.larler.sigwep.filmeg dotreg.filtyp.nosnus.siptev divder`) expect(identities.length).is(1) scrutinizeIdentity(identities[0]) }), "minimal": test(async() => { const identities = await readSeeds(`""pachulmigrydriprenritretmisregtarneprabnulpanheplonfyrlarlersigwepfilmegdotregfiltypnosnussiptevdivder`) expect(identities.length).is(1) scrutinizeIdentity(identities[0]) }), "multiline": test(async() => { const identities = await readSeeds(` "minref.lagner" midsen.picmyn.widrep.baclut somreg.sivler.havrun.tapfeb ticpem.hanlev.topbec.lorreb sipsyp.sarred.dassyn.barlug pitber `) expect(identities.length).is(1) scrutinizeIdentity(identities[0]) }), "polluted": test(async() => { const identities = await readSeeds(` "🤖 Robocop 5000.,,'" $midsen_picmyn widrep.baclut somreg@sivler#havrun&tapfeb TICPEMHANLEV TOPBEC::LOR--REB sipsyp//sarreddassynbarlug pitber `) expect(identities.length).is(1) scrutinizeIdentity(identities[0]) }), "multiples": test(async() => { const identities = await readSeeds(` "minref.lagner" midsen.picmyn.widrep.baclut somreg.sivler.havrun.tapfeb ticpem.hanlev.topbec.lorreb sipsyp.sarred.dassyn.barlug pitber "Johnny Johnson" rovmes.fiddyl.dottev.halryc mosfeb.dopryl.faldex.molwyl havtuc.satbyt.lartyc.fotfeb navhes.sivdyt.bornyt.togpex sanmus `) expect(identities.length).is(2) scrutinizeIdentity(identities[0]) scrutinizeIdentity(identities[1]) }), "multiples, jumbled": test(async() => { const identities = await readSeeds(` "minref.lagner" midsen.picmyn.widrep.baclut somreg.sivler.havrun.tapfeb ticpem.hanlev.topbec.lorreb sipsyp.sarred.dassyn.barlug pitber "Johnny Johnson" rovmes.fiddyl.dottev.halryc mosfeb.dopryl.faldex.molwyl havtuc.satbyt.lartyc.fotfeb navhes.sivdyt.bornyt.togpex sanmus `) expect(identities.length).is(2) scrutinizeIdentity(identities[0]) scrutinizeIdentity(identities[1]) }), "no label": test(async() => { const identities = await readSeeds(` "" rovmes.fiddyl.dottev.halryc mosfeb.dopryl.faldex.molwyl havtuc.satbyt.lartyc.fotfeb navhes.sivdyt.bornyt.togpex sanmus `) scrutinizeIdentity(identities[0]) expect(identities[0].label.length).gt(0) }), "invalid": Science.suite({ "empty": test(async() => { const identities = await readSeeds(``) expect(identities.length).is(0) }), "missing endquote": test(async() => { const identities = await readSeeds(` "minref.lagner midsen.picmyn.widrep.baclut somreg.sivler.havrun.tapfeb ticpem.hanlev.topbec.lorreb sipsyp.sarred.dassyn.barlug pitber `) expect(identities.length).is(0) }), "missing startquote": test(async() => { const identities = await readSeeds(` minref.lagner" midsen.picmyn.widrep.baclut somreg.sivler.havrun.tapfeb ticpem.hanlev.topbec.lorreb sipsyp.sarred.dassyn.barlug pitber `) expect(identities.length).is(0) }), "missing quotes": test(async() => { const identities = await readSeeds(` minref.lagner midsen.picmyn.widrep.baclut somreg.sivler.havrun.tapfeb ticpem.hanlev.topbec.lorreb sipsyp.sarred.dassyn.barlug pitber `) expect(identities.length).is(0) }), "missing label": test(async() => { const identities = await readSeeds(` midsen.picmyn.widrep.baclut somreg.sivler.havrun.tapfeb ticpem.hanlev.topbec.lorreb sipsyp.sarred.dassyn.barlug pitber `) expect(identities.length).is(0) }), "failed checksum": test(async() => { expect(async() => await readSeeds(` "minref.lagner" midsen.picmyn.widrep.baclut somreg.sivler.havrun.tapfeb ticpem.hanlev.topbec.lorreb sipsyp.sarred.dassyn.barlug midsen `)).throwsAsync(SeedChecksumError) }), }), }), })