{"_id":"@authduo/authduo","_rev":"12-42e3ca974f67a6a89ac8cd5f60ab64fa","name":"@authduo/authduo","dist-tags":{"latest":"0.2.0-7"},"versions":{"0.0.0":{"name":"@authduo/authduo","version":"0.0.0","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.0.0","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"1bf35591e3956c5bfc8177f4bcff7b18dc2235d1","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.0.0.tgz","fileCount":318,"integrity":"sha512-BChzE8DEGkxdyPzxKGndWxdM5bGatH1XMGYaRf1Iy4Z5PGw4eVSSmlZEjdXcqqH8i2KG4absJhAf6dbmp0XpQQ==","signatures":[{"sig":"MEQCID4AOAMjfpPYZo8ptVsoA8Jg5Tk9KUK1FrBhqcO7EfkSAiAUIEOzGjCcNMrPl8fi99qbxRO9s8w6Pn/hNtwBpq6f2w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":322332},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"ab79118f48e8fa0c6ae127ac83523d8ec78887ee","scripts":{"test":"exit 0","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.10.0","dependencies":{"@benev/slate":"^0.2.8"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.0.0_1729636092130_0.943158268219394","host":"s3://npm-registry-packages"}},"0.0.1":{"name":"@authduo/authduo","version":"0.0.1","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.0.1","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"d302774530e64f25af8ad89aa75546749c055dd3","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.0.1.tgz","fileCount":330,"integrity":"sha512-ABlQ8c/rgj6OgT0Iiq2yLt9ZAG3bEy9UvIT4TOT/s2d5Gmfdm9UGfmEmyvz7RBx7CvwQAXX/1rNloWTjh/yfYQ==","signatures":[{"sig":"MEUCICPegir3lDlgVS8YKpBKjVXMLtls0VBwhKFzdgrt1Ce+AiEA1NvIk/lZAfoyxzrJYs1t9itdV0Wmmy0CLNWdSxzz8kc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":328216},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"23b2a948bc618cdfe5b830ae7e1366bee05f3820","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.10.0","dependencies":{"@benev/slate":"^0.2.8"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.0.1_1729707325054_0.7407084023277304","host":"s3://npm-registry-packages"}},"0.0.2":{"name":"@authduo/authduo","version":"0.0.2","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.0.2","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"9555e0d7b2168ad2b7d03d88d247c9cbde24e933","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.0.2.tgz","fileCount":330,"integrity":"sha512-cvLSNDoUbIEuHLJpPmNEuLDCmwfJ8Gi6BuJgiNEE3gWsKiLwoLWSKj4lceIrtSu7PiqeHk5XMcBnj8bqn6jgIw==","signatures":[{"sig":"MEUCIQD4RgBLGypd08FLZjGc59eHZVbWPmlsLaO+08zDPah7bgIgcaL61klVlGv4+Lrv+I9szGqD5aKvcm+5Wm+nHilF3+k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":328250},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"132c129987436e3d188886061a97ac55e99ab7e7","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.10.0","dependencies":{"@benev/slate":"^0.2.8"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.0.2_1729728333014_0.33732575359791195","host":"s3://npm-registry-packages"}},"0.0.3":{"name":"@authduo/authduo","version":"0.0.3","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.0.3","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"c57eec6fd36345c144fb905ae335a67efbb1f3a9","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.0.3.tgz","fileCount":342,"integrity":"sha512-/0iQFd+KrQkY/0fz1KyJf8PllErw2X+wKquJmqrZd6ScQTnj2fnt4iMwnc4b16mh5gs+OKLinHgyuKvHFHfAtw==","signatures":[{"sig":"MEUCIQDqrgXDv6DKxDwHVDLTrv4PwRYArYSwtsnuzY/zR+gOewIgEBhNIG0z/83M4rD3Th3mdDwQ1KeYtB0WvxSGc+cKeAo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":350208},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"3a02cbd9fdcc4cabc51607112beadc839bb71606","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.10.0","dependencies":{"renraku":"^0.3.0-0","@benev/slate":"^0.2.8"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.0.3_1729839413562_0.9787367760336985","host":"s3://npm-registry-packages"}},"0.1.0":{"name":"@authduo/authduo","version":"0.1.0","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.1.0","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"7c183047893732977186c51edd29db54bf0bee8a","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.1.0.tgz","fileCount":374,"integrity":"sha512-d8qy62G0HZ50vpA+Zv+APpQ03mS2mgdv8MlDXgE1i6R52wEtRyJYc9ddVCO21lY7HfF9U3cNNPREsKTfFbbrcw==","signatures":[{"sig":"MEQCIDYgNpRuan4Cd1FRrVwq9ATZBM/CpmDsSBdFi0CVYYqqAiBY4Zx/H7mAYzc23mjXKRuFoRR96punNwKcl/moJRdLTw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":381771},"main":"x/index.js","type":"module","types":"./x/index.d.ts","exports":{".":{"deno":"./x/server.js","node":"./x/server.js","browser":"./x/index.js","default":"./x/index.js"}},"gitHead":"fdb28996e5ed8efd7bf5ebcc88f2c27de8605410","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.10.0","dependencies":{"renraku":"^0.3.0-0","@benev/slate":"^0.2.8"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.1.0_1729978776605_0.8997359745851836","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"@authduo/authduo","version":"0.1.1","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.1.1","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"54bc583337d3fc9907b572a209aa1cac9b065d10","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.1.1.tgz","fileCount":374,"integrity":"sha512-VwrTFEeDk9xFKwKGE/AJItCdgT5mFEFagMxcH/+sq9yYZuvt/ye9+7uk5XnpBLbDI//TvWiUHBpOkQjrUcWq2g==","signatures":[{"sig":"MEUCIDMuyYZQC+Wn/EySEmY8jpvSxckKPtgUKs1a+4Zq1Tz9AiEA9MOgjhMKyQm0fu/C4tPw6hiZtlcngp0kaeyAmxbrk/g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":382535},"main":"x/index.js","type":"module","types":"./x/index.d.ts","exports":{".":{"deno":"./x/server.js","node":"./x/server.js","browser":"./x/index.js","default":"./x/index.js"}},"gitHead":"ca35f74e9caa34a49b9b3dbbda67594fe22ca5fe","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.10.0","dependencies":{"renraku":"^0.3.0-0","@benev/slate":"^0.2.8"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.1.1_1730005686756_0.6399367368112152","host":"s3://npm-registry-packages"}},"0.2.0-0":{"name":"@authduo/authduo","version":"0.2.0-0","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.2.0-0","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"a9e80dda3533acf1d370e88cd62d223f0f3bd54a","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.2.0-0.tgz","fileCount":338,"integrity":"sha512-O7lKzkqqd9GPzi0ql5sTU03no4/OcUw8ZquJXvH4B06FujXfXOwoFreKLWvSBWT+aOLi9rBfN965VMdCRf3tTg==","signatures":[{"sig":"MEQCIFvdFBam3LStR1+8R9xch0k7219+OWbM/cy9HMVhQtFpAiAaQOhOvYI4DwjP48YRxd2jyXB+vxtaJjUJ2X+uY22v1g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":384082},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"3786024411bf2a301b9e9e728eea5563c8b3ddec","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v","devlinks-slate":"rm -rf node_modules/@benev/slate && ln -s \"$(realpath ../../@benev/slate)\" node_modules/@benev/slate"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.11.0","dependencies":{"renraku":"^0.4.2","@benev/slate":"^0.2.17"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.2.0-0_1731758002869_0.8948332438866029","host":"s3://npm-registry-packages"}},"0.2.0-2":{"name":"@authduo/authduo","version":"0.2.0-2","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.2.0-2","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"a1bf34f3e4e27a9c06b332f845d5271c01807abb","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.2.0-2.tgz","fileCount":338,"integrity":"sha512-wUiR5eB4ijORLP6lYKImWaVKDys2hk5+ZkWBoCG7txZADWohtA3AkUR1P6HdWTEu/YEs6YffVlUb0q1PXozGbg==","signatures":[{"sig":"MEUCIQDo4URmILhtmWC5STnF1ajNzg79yLdkTV3OZ0YEd+O1cQIgSiaoXyVLcSDMXUUMiXJpqmeO24cL5hMxk3G8n+wJa1g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":384296},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"27d0c5b308534bdec2c949f6159ddbf9e1894bbb","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v","devlinks-slate":"rm -rf node_modules/@benev/slate && ln -s \"$(realpath ../../@benev/slate)\" node_modules/@benev/slate"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.11.0","dependencies":{"renraku":"^0.4.2","@benev/slate":"^0.2.17"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.2.0-2_1731796277828_0.9790887377423998","host":"s3://npm-registry-packages"}},"0.2.0-3":{"name":"@authduo/authduo","version":"0.2.0-3","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.2.0-3","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"d61820ce70099862e19c5fee4d2a41bfb00fb932","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.2.0-3.tgz","fileCount":338,"integrity":"sha512-jsUy7Mx6NC7GKMreg41EHtfazzNJlxmr4/eh7J+1GuPcTBpT7bZeUpjylwmRfancFfm959rgk4R9Pba/AsFYIA==","signatures":[{"sig":"MEQCIEDqK7nmEdu7sKYVUVsQj3qJAjeo5yF0FrBq4UG0I02dAiAQ/wYe5USc56hXtUIP03PG7u7KF6ziHkwsumQOyzDjlA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":384335},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"fa8817c6c3cc1f45dcb298da197981e4ab6bd0e4","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v","devlinks-slate":"rm -rf node_modules/@benev/slate && ln -s \"$(realpath ../../@benev/slate)\" node_modules/@benev/slate"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.11.0","dependencies":{"renraku":"^0.4.2","@benev/slate":"^0.3.0-0"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.6.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.2.0-3_1731833637780_0.6775081763194295","host":"s3://npm-registry-packages"}},"0.2.0-4":{"name":"@authduo/authduo","version":"0.2.0-4","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.2.0-4","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"685727b41cc43663a5ac0e6b42ecf60dbfe40333","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.2.0-4.tgz","fileCount":366,"integrity":"sha512-J/RQH9fiHNN0FWsqG1MbWkTLqPXvgaNkBNlxxaYrSqh63AhwkVcbCyg57uMuBVGfak0b8wZci3J+UY7lOmtelg==","signatures":[{"sig":"MEUCIDSlUonOKDaCcNowa9n9vGdxRsaf69N60x7K+s2Ek/OJAiEA1JulBjuymGfjIo8aC1vQQXRrxxw/OjCgqUbzJrNsz3U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":403161},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"440132f070f120361685112ab1bf5da1f13f423d","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v","devlinks-slate":"rm -rf node_modules/@benev/slate && ln -s \"$(realpath ../../@benev/slate)\" node_modules/@benev/slate"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.11.0","dependencies":{"renraku":"^0.4.2","@benev/slate":"^0.3.0-1"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.7.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.2.0-4_1732412431740_0.3672095366847432","host":"s3://npm-registry-packages"}},"0.2.0-5":{"name":"@authduo/authduo","version":"0.2.0-5","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.2.0-5","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"85ae4cd454f0c2eb9bc3670928bc08e73f138cd5","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.2.0-5.tgz","fileCount":370,"integrity":"sha512-2t3eGnmbvuS7twpoqXhvQy2NhMlBdF8SeyllSCvdkdV3axo9rP9zOGlRNxRbXxD+WOibZS4CSRr6j863KiiFoA==","signatures":[{"sig":"MEYCIQC/DpWfO4/NQuU0X758x2Ao16ztXHt9AcK2UeQLUfbbKQIhAPkAYbR6lh8PHCmbdUhOMNLY0cRPzjOewoGIe9HSuKAu","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":415505},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"c90c33a1ff8c9a9476f1383453df20ce620d34b9","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v","devlinks-slate":"rm -rf node_modules/@benev/slate && ln -s \"$(realpath ../../@benev/slate)\" node_modules/@benev/slate"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.11.0","dependencies":{"renraku":"^0.4.2","@benev/slate":"^0.3.0-1"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.7.2","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.3"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.2.0-5_1732930216155_0.37526496863601344","host":"s3://npm-registry-packages"}},"0.2.0-6":{"name":"@authduo/authduo","version":"0.2.0-6","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","_id":"@authduo/authduo@0.2.0-6","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"dist":{"shasum":"97a03bde35809d68796a345773dd504173f5e628","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.2.0-6.tgz","fileCount":370,"integrity":"sha512-VpwGGKEbBRRFb0W6pvuyYl5+Rnhh01Q2JiMhAomE/B2cp7lo7EqbWdSgGY3m9AMjqXl/Pu+PMzRcG6zLAQAK5g==","signatures":[{"sig":"MEQCIFl8TRmzvlX2aqjfO68WlSxPGuO0PkdJCI1fMdjCs4z/AiAh/rkaTSCinXMcO2SaSWMSlFfCyzXpDaJxrgDFNwWbtw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":419150},"main":"x/index.js","type":"module","types":"./x/index.d.ts","gitHead":"460151938460525a74de998dff4fc0cba06377ca","scripts":{"test":"cynic node x/tests.test.js","build":"rm -rf x && run-s build-code build-ssg links","links":"run-s links-s links-assets","start":"run-p start-http start-turtle","links-s":"ln -s \"$(realpath s)\" x/s","build-ssg":"turtle ssg --in=s,x --out=x","build-code":"turtle build --out=x","start-http":"http-server x","links-assets":"ln -s \"$(realpath assets)\" x/assets","start-turtle":"turtle watch --in=s,x --out=x -v","devlinks-slate":"rm -rf node_modules/@benev/slate && ln -s \"$(realpath ../../@benev/slate)\" node_modules/@benev/slate"},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"_npmVersion":"10.9.0","description":"Free User-sovereign Authentication for the World","directories":{},"_nodeVersion":"22.12.0","dependencies":{"renraku":"^0.4.3","@benev/slate":"^0.3.0-3"},"_hasShrinkwrap":false,"devDependencies":{"cynic":"^0.2.1","typescript":"^5.7.3","http-server":"^14.1.1","npm-run-all":"^4.1.5","@benev/turtle":"^0.6.5"},"_npmOperationalInternal":{"tmp":"tmp/authduo_0.2.0-6_1736420355143_0.1764477984047581","host":"s3://npm-registry-packages-npm-production"}},"0.2.0-7":{"name":"@authduo/authduo","version":"0.2.0-7","description":"Free User-sovereign Authentication for the World","main":"x/index.js","type":"module","scripts":{"build":"rm -rf x && run-s build-code build-ssg links","build-code":"turtle build --out=x","build-ssg":"turtle ssg --in=s,x --out=x","start":"run-p start-http start-turtle","start-http":"http-server x","start-turtle":"turtle watch --in=s,x --out=x -v","links":"run-s links-s links-assets","links-s":"ln -s \"$(realpath s)\" x/s","links-assets":"ln -s \"$(realpath assets)\" x/assets","devlinks-slate":"rm -rf node_modules/@benev/slate && ln -s \"$(realpath ../../@benev/slate)\" node_modules/@benev/slate","test":"cynic node x/tests.test.js"},"dependencies":{"@benev/slate":"^0.3.0-3","renraku":"^0.4.3"},"devDependencies":{"@benev/turtle":"^0.6.5","cynic":"^0.2.1","http-server":"^14.1.1","npm-run-all":"^4.1.5","typescript":"^5.7.3"},"license":"MIT","author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"_id":"@authduo/authduo@0.2.0-7","gitHead":"2cdd995d7f759d6a5e0be8fe4aa8f7134ee1508c","types":"./x/index.d.ts","_nodeVersion":"22.12.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-9HIzS4A3v3x/GGkaBRlayfixsyurH8enUhca/Zu/1CC+23mLUFznzU7Wsrl34j8h7zGDPX1+1iGEB3LoyGjWiQ==","shasum":"2b34acd68a5cb9a2a8c4d317e3dbf84cf1feff00","tarball":"https://registry.npmjs.org/@authduo/authduo/-/authduo-0.2.0-7.tgz","fileCount":370,"unpackedSize":419123,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBmldjmEsJV5XJySzvNPWcA8TKtvoU4/YazgmnjZEUjAAiEAsSEb3qwEQiWDtN111QxTFJPui5OnmgVp+T1UKhpFPPM="}]},"_npmUser":{"name":"chasemoskal","email":"chasemoskal@gmail.com"},"directories":{},"maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/authduo_0.2.0-7_1736420785339_0.4577438853511091"},"_hasShrinkwrap":false}},"time":{"created":"2024-10-22T22:28:12.024Z","modified":"2025-01-09T11:06:25.710Z","0.0.0":"2024-10-22T22:28:12.311Z","0.0.1":"2024-10-23T18:15:25.361Z","0.0.2":"2024-10-24T00:05:33.219Z","0.0.3":"2024-10-25T06:56:53.827Z","0.1.0":"2024-10-26T21:39:36.844Z","0.1.1":"2024-10-27T05:08:06.982Z","0.2.0-0":"2024-11-16T11:53:23.050Z","0.2.0-2":"2024-11-16T22:31:18.075Z","0.2.0-3":"2024-11-17T08:53:57.974Z","0.2.0-4":"2024-11-24T01:40:31.947Z","0.2.0-5":"2024-11-30T01:30:16.376Z","0.2.0-6":"2025-01-09T10:59:15.397Z","0.2.0-7":"2025-01-09T11:06:25.525Z"},"author":{"name":"Chase Moskal","email":"chasemoskal@gmail.com"},"license":"MIT","keywords":["auth","zero-cost","privacy-focused","user-sovereign","clientside","federated","decentralized","protocol","free","open-source","foss"],"description":"Free User-sovereign Authentication for the World","maintainers":[{"name":"chasemoskal","email":"chasemoskal@gmail.com"}],"readme":"\n![Authduo.org](https://i.imgur.com/Pr6ILnz.png)\n\n# 🗽 [Authduo.org](https://authduo.org/) – Free Auth for Everybody\n\n[Authduo.org](https://authduo.org/) is an app where users can create and manage digital login passports.\n\nYou can add a *\"Login with Authduo\"* button to your website, allowing users to login using an Authduo passport.\n\n✨ **No emails** – users can remain anonymous  \n🔑 **No passwords** – passports are cryptographic keypairs  \n🗿 **No databases** – everything is stored locally on the user's device  \n\n🗽 **User-sovereign** – users can directly download their passport files  \n🥷 **Privacy-focused** – no tracking, except for whatever github pages does  \n💖 **Free and open-source** – zero cost at worldwide scale  \n\n📱 **Clientside** – statically hosted on github pages, no api servers  \n🏛️ **Federated** – your app can get login tokens from an authduo.org popup  \n📜 **Protocol** – permissionless integration, you can do it your way  \n\n🥧 **Easy as pie** – setup your app with an easy snippet  \n🥞 **Easy as pancakes** – logins are fast and painless for users  \n\n> ***Pre-release:** Authduo is an unfinished prototype, use at your own risk.*\n\n<br/>\n\n## 🪪 [Authduo.org](https://authduo.org/) Login Button\n\nTry out the login button at the [Federated Test Page](https://authduo.org/federated/)\n\n### 😎 Easy HTML Installation\n\n*Choose this installation method if you don't know any better.*\n\n1. **Insert this in your `<head>`:**\n    ```html\n    <script type=\"module\" src=\"https://authduo.org/install.bundle.min.js\"></script>\n\n    <script type=\"module\">\n      document.querySelector(\"auth-button\").auth.onChange(login => {\n        if (login) console.log(\"logged in\", login)\n        else console.log(\"logged out\")\n      })\n    </script>\n    ```\n    - Customize that second script to handle logins/logouts your way.\n    - When the user logs in, the `login` object looks like this:\n      ```js\n      login.name // Cetdok Pizafoaba\n      login.thumbprint // \"0d196fc3...\"\n      login.expiry // 1731740481065\n      ```\n    - When the user logs out, `login` is `null`.\n1. **Put these elements in your `<body>`:**\n    ```html\n    <auth-user></auth-user>\n    <auth-button></auth-button>\n    ```\n    - This provides a nice little status/button ui for users to login or logout.\n    - The login state is automatically stored in `localStorage`.\n\n### 🧐 Sophisticated Installation for App Devs\n\n*Choose this installation method if you're familiar with npm, package.json, typescript – stuff like that.*\n\n1. **Install the npm package**\n    ```sh\n    npm i @authduo/authduo\n    ```\n1. **Register components and listen for auth changes.** `main.ts`\n    ```ts\n    import {Auth, components, register_to_dom} from \"@authduo/authduo\"\n\n    register_to_dom(components)\n\n    const auth = Auth.get()\n\n    auth.onChange(login => {\n      if (login) console.log(\"logged in\", login)\n      else console.log(\"logged out\")\n    })\n    ```\n1. **Throw down some elements.** `index.html`\n    ```html\n    <auth-user></auth-user>\n    <auth-button></auth-button>\n    ```\n\n<br/>\n\n## 💁 [Authduo.org](https://authduo.org/) is for convenience, not vendor lock-in\n- You can fork Authduo to make your own passport management app, and users can take their passport files there instead\n- You can point the login button to your own fork:\n  ```html\n  <auth-button src=\"https://authduo.org/\"></auth-button>\n  ```\n  - Just swap `https://authduo.org/` with your own url\n  - This is what \"decentralized\", \"user-sovereign\", and \"protocol\" is all about\n\n<br/>\n\n## 🌠 The More You Know, about [Authduo.org](https://authduo.org/)\n\n### What if my users lose their passports?\n- They'll just generate new passports.\n- If you associate important services to your users' passports, you should provide a recovery mechanism so users can re-associate those services with new passports.\n\n### Opt-in services for casual user experience\n- While Authduo's core must stay lean to retain user-sovereignty and privacy, we can still build optional services which allow users to trade a little sovereignty for some conveniences:\n  - Username and password logins\n  - Email-based recovery\n  - OTP/QR codes to easily transfer passports across devices\n  - Two-factor auth\n\n<br/>\n\n## 🛠️ More advanced integration examples\n\n### Programmatically trigger a login\n- You can use `auth.popup` to trigger a login, but you should do this in reaction to a user input event, otherwise the browser will block the popup.\n  ```js\n  import {auth} from \"@authduo/authduo\"\n\n  myButton.onclick = async() => {\n    const login = await auth.popup(\"https://authduo.org/\")\n    if (login) console.log(\"logged in\", login)\n  }\n  ```\n\n### Understanding the Authduo flow and tokens\n\n![](https://i.imgur.com/18xwaeU.png)\n\n- When a user on your app clicks to login, this opens an Authduo.org popup for them to login.\n- The authduo signs some tokens with your user's passport keypair, and sends them back to your application.\n- Your app receives a `Login` object, which has some useful things:\n  - `login.proof.token` -- this is a `Proof` token and it's public, so you can send it around anywhere so your user can prove their identity\n  - `login.keys.signClaimToken(~)` -- you can use this to sign arbitrary data into a token, which is verifiably signed on behalf of the user's passport\n\n#### Example of signing and verifying claim tokens\n\n- **Sign a fresh claim token.**\n  ```js\n  import {Future} from \"@authduo/authduo\"\n\n  const idToken = await login.keys.signClaimToken({\n    expiresAt: Future.hours(24),\n\n    // you can pack any abitrary data you want into this token\n    data: {\n      username: \"Rec Doamge\",\n      avatarId: \"d15aea1a\",\n\n      // perhaps we want to scope this claim to a specific game session,\n      // so that it cannot be stolen by other users and reused in other\n      // game sessions.\n      gameSessionId: \"9c22b17e\",\n    },\n  })\n  ```\n- **Send this *idToken* along with the user's *proofToken.***\n  ```js\n  await sendElsewhere(login.proof.token, idToken)\n  ```\n  - Each `login` object comes with a proof token that is required to verify any claim tokens.\n- **Verify the proof and claim**\n  ```js\n  import {Proof, Claim} from \"@authduo/authduo\"\n\n  receiveElsewhere(async(proofToken, idToken) => {\n\n    // the origin of your site that triggered the authduo popup\n    const allowedAudiences = [\"https://example.benev.gg\"]\n\n    // verifying the proof\n    const proof = await Proof.verify(proofToken, {allowedAudiences})\n\n    // proving the claim\n    const claim = await Claim.verify(proof, idToken)\n\n    // here's that data you packed into the claim\n    console.log(claim.data.username) // \"Rec Doamge\"\n    console.log(claim.data.avatarId) // \"d15aea1a\"\n    console.log(claim.data.gameSessionId) // \"9c22b17e\"\n\n    // user passport public thumbprint, the true user identifier\n    console.log(claim.thumbprint) // \"a32e638e...\"\n    console.log(proof.thumbprint) // \"a32e638e...\"\n  })\n  ```\n  - The same proof can be used to verify multiple claims from the same login.\n\n<br/>\n\n## 💖 [Authduo](https://authduo.org/) is free and open source\n- I built Authduo because I wanted free user-centric auth to power https://benevolent.games/\n- Got questions or feedback? Don't hesitate to open a github issue or discussion anytime.\n- My name is Chase Moskal, ping me on discord: https://discord.gg/BnZx2utdev\n\n","readmeFilename":"readme.md"}