{"_id":"@daflan/keyward-recovery-core","_rev":"4-964c87228934ccf0ffb5bb5980b1dd1e","name":"@daflan/keyward-recovery-core","dist-tags":{"latest":"0.0.13"},"versions":{"0.0.10":{"name":"@daflan/keyward-recovery-core","version":"0.0.10","license":"MIT","_id":"@daflan/keyward-recovery-core@0.0.10","maintainers":[{"name":"mashadow","email":"mashadow@outlook.com"}],"homepage":"https://github.com/daflan-org/keyward#readme","bugs":{"url":"https://github.com/daflan-org/keyward/issues"},"dist":{"shasum":"9e41ffda08360e96c61d9c898337200873346e52","tarball":"https://registry.npmjs.org/@daflan/keyward-recovery-core/-/keyward-recovery-core-0.0.10.tgz","fileCount":8,"integrity":"sha512-s1QpFnVCOM6bNPrAgvVVmiyP7J9TO2HckHT2iSxXPFzK/Awocqo7Fxr2+jXXfXJa2f1LR2Aoa0/ZugUYnLw7XQ==","signatures":[{"sig":"MEYCIQDO0Tgj4WJHri0gw2f7GhE1GOvOcnbyphr/UGOkkY2c7wIhAI3znE3++Rux8jJe3sCLBxjmvQD0/z5feZdjr/rnYe3o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daflan%2fkeyward-recovery-core@0.0.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64981},"main":"dist/index.cjs","type":"module","_from":"file:package.tgz","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"biome check src/","test":"vitest run --passWithNoTests","build":"tsup","clean":"rm -rf dist","lint:fix":"biome check --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mashadow","email":"mashadow@outlook.com"},"_resolved":"/home/runner/work/keyward/keyward/packages/recovery-core/package.tgz","_integrity":"sha512-s1QpFnVCOM6bNPrAgvVVmiyP7J9TO2HckHT2iSxXPFzK/Awocqo7Fxr2+jXXfXJa2f1LR2Aoa0/ZugUYnLw7XQ==","repository":{"url":"git+https://github.com/daflan-org/keyward.git","type":"git","directory":"packages/recovery-core"},"_npmVersion":"10.9.8","description":"Recoverable secrets for Keyward: multi-recipient envelope + passkey-PRF recovery (platform-agnostic core)","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.4","typescript":"^6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/keyward-recovery-core_0.0.10_1785439320899_0.7295180331463711","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@daflan/keyward-recovery-core","version":"0.0.11","license":"MIT","_id":"@daflan/keyward-recovery-core@0.0.11","maintainers":[{"name":"mashadow","email":"mashadow@outlook.com"}],"homepage":"https://github.com/daflan-org/keyward#readme","bugs":{"url":"https://github.com/daflan-org/keyward/issues"},"dist":{"shasum":"548d9495a7678494cbd051ac1bccca7a81ae52f6","tarball":"https://registry.npmjs.org/@daflan/keyward-recovery-core/-/keyward-recovery-core-0.0.11.tgz","fileCount":8,"integrity":"sha512-SrhIZLCYIUA3qhnVmycT9ydX6yGunTCr1+IySwcvN6L3o4qKcX0ARfcB+5d7Qs380hnj6tJLAqHYkl7sY5nDYw==","signatures":[{"sig":"MEQCIG22vtkXGeDdWKD0mUUyxxFd9j46WL+S6YHiLKRXirOKAiAeKgm2jHc1gjc6Uqed+vH6z2SM40g11C3wPz/Z+EK7GQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daflan%2fkeyward-recovery-core@0.0.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64981},"main":"dist/index.cjs","type":"module","_from":"file:package.tgz","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"biome check src/","test":"vitest run --passWithNoTests","build":"tsup","clean":"rm -rf dist","lint:fix":"biome check --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mashadow","email":"mashadow@outlook.com"},"_resolved":"/home/runner/work/keyward/keyward/packages/recovery-core/package.tgz","_integrity":"sha512-SrhIZLCYIUA3qhnVmycT9ydX6yGunTCr1+IySwcvN6L3o4qKcX0ARfcB+5d7Qs380hnj6tJLAqHYkl7sY5nDYw==","repository":{"url":"git+https://github.com/daflan-org/keyward.git","type":"git","directory":"packages/recovery-core"},"_npmVersion":"10.9.8","description":"Recoverable secrets for Keyward: multi-recipient envelope + passkey-PRF recovery (platform-agnostic core)","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.4","typescript":"^6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/keyward-recovery-core_0.0.11_1785446284462_0.848099673107076","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@daflan/keyward-recovery-core","version":"0.0.12","license":"MIT","_id":"@daflan/keyward-recovery-core@0.0.12","maintainers":[{"name":"mashadow","email":"mashadow@outlook.com"}],"homepage":"https://github.com/daflan-org/keyward#readme","bugs":{"url":"https://github.com/daflan-org/keyward/issues"},"dist":{"shasum":"103912227b8d1a71c23c9195769249995aea6d4d","tarball":"https://registry.npmjs.org/@daflan/keyward-recovery-core/-/keyward-recovery-core-0.0.12.tgz","fileCount":8,"integrity":"sha512-Cplh1T0/6dvyuPOF6t2s+O5mmFBU0XDXRkhFzVB0XWyJqBhP3Jo50lM3OXJQsynS4/N2tY+zCBwYDFdK9pBEig==","signatures":[{"sig":"MEYCIQDDmWshKRLUfy7f8zXu/O2CtnZBRKVdbYdSGKiWkgIDkAIhAILA5OjB5qwb1RFyQrA6MEOwavaVS3rRSTZV/+9Bz4ay","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daflan%2fkeyward-recovery-core@0.0.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":64981},"main":"dist/index.cjs","type":"module","_from":"file:package.tgz","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"scripts":{"lint":"biome check src/","test":"vitest run --passWithNoTests","build":"tsup","clean":"rm -rf dist","lint:fix":"biome check --write src/","typecheck":"tsc --noEmit"},"_npmUser":{"name":"mashadow","email":"mashadow@outlook.com"},"_resolved":"/home/runner/work/keyward/keyward/packages/recovery-core/package.tgz","_integrity":"sha512-Cplh1T0/6dvyuPOF6t2s+O5mmFBU0XDXRkhFzVB0XWyJqBhP3Jo50lM3OXJQsynS4/N2tY+zCBwYDFdK9pBEig==","repository":{"url":"git+https://github.com/daflan-org/keyward.git","type":"git","directory":"packages/recovery-core"},"_npmVersion":"10.9.8","description":"Recoverable secrets for Keyward: multi-recipient envelope + passkey-PRF recovery (platform-agnostic core)","directories":{},"_nodeVersion":"22.23.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","vitest":"^4.1.4","typescript":"^6.0.2"},"_npmOperationalInternal":{"tmp":"tmp/keyward-recovery-core_0.0.12_1785450239429_0.302523084992425","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@daflan/keyward-recovery-core","version":"0.0.13","description":"Recoverable secrets for Keyward: multi-recipient envelope + passkey-PRF recovery (platform-agnostic core)","license":"MIT","repository":{"type":"git","url":"git+https://github.com/daflan-org/keyward.git","directory":"packages/recovery-core"},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","publishConfig":{"access":"public"},"scripts":{"build":"tsup","test":"vitest run --passWithNoTests","lint":"biome check src/","lint:fix":"biome check --write src/","typecheck":"tsc --noEmit","clean":"rm -rf dist"},"devDependencies":{"tsup":"^8.5.1","typescript":"^6.0.2","vitest":"^4.1.4"},"dependencies":{"hash-wasm":"^4.12.0"},"_id":"@daflan/keyward-recovery-core@0.0.13","bugs":{"url":"https://github.com/daflan-org/keyward/issues"},"homepage":"https://github.com/daflan-org/keyward#readme","_integrity":"sha512-6FV7+B1B/iPn8bM6mDw/uKuhaublYGbWab9OLGkoZVSTngKwRfcKsck9NfwJXFM6HriAAUD7RvWD06iMn8QSEg==","_resolved":"/home/runner/work/keyward/keyward/packages/recovery-core/package.tgz","_from":"file:package.tgz","_nodeVersion":"22.23.1","_npmVersion":"10.9.8","dist":{"integrity":"sha512-6FV7+B1B/iPn8bM6mDw/uKuhaublYGbWab9OLGkoZVSTngKwRfcKsck9NfwJXFM6HriAAUD7RvWD06iMn8QSEg==","shasum":"5e7d1a8568e73270501c8ed2dae7503ef67dad28","tarball":"https://registry.npmjs.org/@daflan/keyward-recovery-core/-/keyward-recovery-core-0.0.13.tgz","fileCount":8,"unpackedSize":98613,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@daflan%2fkeyward-recovery-core@0.0.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDOYoPEQwaQ9LPDCi1+s8K3OUe2dAO2cJQllE3vL01UuAIgEL/Z6cMhzR1jZYom2mGBMR5KlQMz2wQQs4KCUaJ7Bts="}]},"_npmUser":{"name":"mashadow","email":"mashadow@outlook.com"},"directories":{},"maintainers":[{"name":"mashadow","email":"mashadow@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/keyward-recovery-core_0.0.13_1785461886438_0.7533173404994011"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-30T19:22:00.573Z","modified":"2026-07-31T01:38:06.981Z","0.0.10":"2026-07-30T19:22:01.058Z","0.0.11":"2026-07-30T21:18:04.595Z","0.0.12":"2026-07-30T22:23:59.560Z","0.0.13":"2026-07-31T01:38:06.646Z"},"bugs":{"url":"https://github.com/daflan-org/keyward/issues"},"license":"MIT","homepage":"https://github.com/daflan-org/keyward#readme","repository":{"type":"git","url":"git+https://github.com/daflan-org/keyward.git","directory":"packages/recovery-core"},"description":"Recoverable secrets for Keyward: multi-recipient envelope + passkey-PRF recovery (platform-agnostic core)","maintainers":[{"name":"mashadow","email":"mashadow@outlook.com"}],"readme":"# @daflan/keyward-recovery-core\n\nPlatform-agnostic core for **recoverable secrets**: a multi-recipient envelope plus\nthe passkey-PRF recovery orchestration. Native-free (WebCrypto only), so it is the\none security-critical surface that gets independently reviewed. Tracking: KW-29.\n\n## Model\n\n```\nDK   = random 256-bit                       // per secret\nblob = iv || AES-256-GCM(secret, DK)        // opaque, stored on the backend\nKEK  = HKDF-SHA256(prfOutput, info)         // per recipient\nwrap = iv || AES-256-GCM(DK, KEK)           // one per recovery anchor\n```\n\nAny single recipient (passkey-PRF, social re-seal, or an optional code) unwraps the\nData Key and opens the blob. A new device or ecosystem adds a recipient without\nre-sealing the secret.\n\n## Ports (supplied by the host)\n\n- `NativePrf` — passkey WebAuthn PRF I/O. Implemented by `@daflan/keyward-recovery`\n  (the Capacitor bridge). `challenge` may be client-random: PRF-as-KEK needs no\n  server-side WebAuthn verification.\n- `EnvelopeTransport` — the opaque-blob store. The consuming app supplies its own\n  backend adapter (multi-tenant). A hosted \"Keyward Cloud\" adapter can be added later.\n\n## Usage (shape)\n\n```ts\nimport { Recoverable } from '@daflan/keyward-recovery-core';\n\nconst recoverable = new Recoverable({ native, transport, rpId: 'app.example.com' });\n\n// enroll\nawait recoverable.set('family.key', familyKeyBytes, {\n  userId, userName, recipients: [{ kind: 'passkey' }],\n});\n\n// new device\nconst familyKey = await recoverable.recover('family.key');\n```\n\n## Consumer prerequisites\n\nThe consuming app owns the RP-ID domain and hosts the passkey association files\n(`apple-app-site-association`, `assetlinks.json`). Keyward stays domain-agnostic and\ntakes `rpId` as a parameter.\n\n## Status\n\nScaffold (KW-29). v1 recipients: passkey-PRF + social. The code (Argon2id) recipient\nkind is reserved in the format but deferred so this package stays WebCrypto-only.\n\n## License\n\n[MIT](../../LICENSE)\n","readmeFilename":"README.md"}