{"_id":"@2fapi/client-sdk","_rev":"3-0d9c43ca33ac8bf6fa75f49d6cfae604","name":"@2fapi/client-sdk","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@2fapi/client-sdk","version":"1.0.0","keywords":["zkproof","authentication","client-sdk","wasm","ristretto255"],"author":{"name":"Continuum Identity","email":"contact@continuum-identity.com"},"license":"Apache-2.0","_id":"@2fapi/client-sdk@1.0.0","maintainers":[{"name":"plu9in","email":"plu9in@gmail.com"}],"homepage":"https://gitlab.continuum-identity.com/continuum-identity/2fapi","dist":{"shasum":"8870cb612cd75702a6a9dddcf9fdef5fb645ba93","tarball":"https://registry.npmjs.org/@2fapi/client-sdk/-/client-sdk-1.0.0.tgz","fileCount":247,"integrity":"sha512-suPae/JQ2Su786XRDLkUnWKs6zj2Uv1ZasWGiRKIXZ6hEUVMNjMH44MPLP9NA8jAQNgr+0xeI0gmMFO0EkrQwQ==","signatures":[{"sig":"MEYCIQDW2w/77041sf++itubCcEMfb0Pu7F7U3pQa7Jiz+AGQgIhAM+Mrbc91M2pK0hsEcMVFrb9vuTcYoGje3nH+W9r67lC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":314707},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"e7376810e36ac1b77bdacb32bad86f65adec9e14","scripts":{"build":"tsc","clean":"rm -rf dist"},"_npmUser":{"name":"plu9in","email":"plu9in@gmail.com"},"repository":{"url":"https://gitlab.continuum-identity.com/continuum-identity/2fapi.git","type":"git","directory":"packages/client-sdk"},"_npmVersion":"11.5.1","description":"2FApi Client SDK — Generate ZK proofs for API authentication","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@2fapi/protocol-spec":"^1.0.0"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/client-sdk_1.0.0_1774611562752_0.18615609105965647","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@2fapi/client-sdk","version":"1.0.1","keywords":["zkproof","authentication","client-sdk","wasm","ristretto255"],"author":{"name":"Continuum Identity","email":"contact@continuum-identity.com"},"license":"Apache-2.0","_id":"@2fapi/client-sdk@1.0.1","maintainers":[{"name":"plu9in","email":"plu9in@gmail.com"}],"homepage":"https://github.com/gthstepsecurity/2fapi-sdk","bugs":{"url":"https://github.com/gthstepsecurity/2fapi-sdk/issues"},"dist":{"shasum":"740001a41dabf3e92615f8fd74deb864150e78fc","tarball":"https://registry.npmjs.org/@2fapi/client-sdk/-/client-sdk-1.0.1.tgz","fileCount":211,"integrity":"sha512-ipzrqNkKZhMz3OvmklJXfneECdj8GtfB9LSX7qW1DA3rx2a+Zh51FTrMDjnIQoYI5DqDqUbRw9kN/PxLFODHbA==","signatures":[{"sig":"MEYCIQDFldP7wQlCXs+m1AcfSV/nzLcWsoz4IUs6XywD8W5yaAIhAMLuQcMvdx6lCrpBQKN9PQbLyPva2Di5a1MzDXkmz0xU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":266029},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"f69b56cd90e3551c3693dab3cc57b15129ea3eba","scripts":{"build":"tsc","clean":"rm -rf dist"},"_npmUser":{"name":"plu9in","email":"plu9in@gmail.com"},"repository":{"url":"git+https://github.com/gthstepsecurity/2fapi-sdk.git","type":"git","directory":"packages/client-sdk"},"_npmVersion":"11.5.1","description":"2FApi Client SDK — Generate ZK proofs for API authentication","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@2fapi/protocol-spec":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^6.0.2","@types/node":"^25.5.0"},"_npmOperationalInternal":{"tmp":"tmp/client-sdk_1.0.1_1774613393974_0.6365618928125893","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@2fapi/client-sdk","version":"1.1.0","description":"Continuum Ghost Client SDK — Generate ZK proofs for API authentication","license":"Apache-2.0","author":{"name":"Continuum Identity","email":"contact@continuum-identity.com"},"homepage":"https://github.com/gthstepsecurity/2fapi-sdk","repository":{"type":"git","url":"git+https://github.com/gthstepsecurity/2fapi-sdk.git","directory":"packages/client-sdk"},"keywords":["zkproof","authentication","client-sdk","wasm","ristretto255"],"type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","dependencies":{"@2fapi/protocol-spec":"^1.0.0"},"scripts":{"build":"tsc","clean":"rm -rf dist"},"devDependencies":{"@types/node":"^25.5.0","typescript":"^6.0.2"},"_id":"@2fapi/client-sdk@1.1.0","gitHead":"7a7a349ed6306306a840db2c7ae3ee939ce3a292","bugs":{"url":"https://github.com/gthstepsecurity/2fapi-sdk/issues"},"_nodeVersion":"22.17.0","_npmVersion":"11.5.1","dist":{"integrity":"sha512-JLqWSDYRYqsFqHc1XeIn463p3SuAHkP2+kVLYNCAvdui5vuCq0QxuFTM24MayIrqBK0XDp7zip1DBlRL0aOqpQ==","shasum":"47005f68471d58cbd8cd2a1c3705a485b5a6d695","tarball":"https://registry.npmjs.org/@2fapi/client-sdk/-/client-sdk-1.1.0.tgz","fileCount":211,"unpackedSize":266133,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDsZBH2O5VisKo4t2m8Cp/I3ASbPS9HJRvIe42tmW9CaAIgDG6eSa7HGR+NKkODiBMwoPJN/Q4kjtQuYTM6UjgzI4Q="}]},"_npmUser":{"name":"plu9in","email":"plu9in@gmail.com"},"directories":{},"maintainers":[{"name":"plu9in","email":"plu9in@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/client-sdk_1.1.0_1774618750708_0.23098711399037586"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-27T11:39:22.653Z","modified":"2026-03-27T13:39:11.018Z","1.0.0":"2026-03-27T11:39:22.888Z","1.0.1":"2026-03-27T12:09:54.150Z","1.1.0":"2026-03-27T13:39:10.865Z"},"bugs":{"url":"https://github.com/gthstepsecurity/2fapi-sdk/issues"},"author":{"name":"Continuum Identity","email":"contact@continuum-identity.com"},"license":"Apache-2.0","homepage":"https://github.com/gthstepsecurity/2fapi-sdk","keywords":["zkproof","authentication","client-sdk","wasm","ristretto255"],"repository":{"type":"git","url":"git+https://github.com/gthstepsecurity/2fapi-sdk.git","directory":"packages/client-sdk"},"description":"Continuum Ghost Client SDK — Generate ZK proofs for API authentication","maintainers":[{"name":"plu9in","email":"plu9in@gmail.com"}],"readme":"# @2fapi/client-sdk\n\n> Generate Zero-Knowledge Proofs for API authentication. Prove you know the secret. Never reveal it.\n\nPart of the **Continuum Ghost** authentication platform — *The Secret That Doesn't Exist*.\n\n## Installation\n\n```bash\nnpm install @2fapi/client-sdk\n```\n\n## Quick Start\n\n```typescript\nimport { setCryptoModule, generateCommitment, generateProof } from \"@2fapi/client-sdk\";\nimport * as crypto from \"@2fapi/crypto-native\"; // or @2fapi/crypto-wasm for browser\n\n// 1. Load the crypto backend (once at startup)\nsetCryptoModule(crypto);\n\n// 2. Generate a commitment (during registration)\nconst secret = crypto.randomScalar();\nconst blindingFactor = crypto.randomScalar();\nconst commitment = generateCommitment(secret, blindingFactor);\n\n// 3. Register with the server\nawait fetch(\"https://auth.example.com/v1/clients\", {\n  method: \"POST\",\n  headers: { \"Content-Type\": \"application/json\" },\n  body: JSON.stringify({\n    clientIdentifier: \"my-service\",\n    commitment: Buffer.from(commitment).toString(\"base64\"),\n    proofOfPossession: Buffer.from(proofOfPossession).toString(\"base64\"),\n  }),\n});\n\n// 4. Authenticate (each session)\nconst challenge = await requestChallenge(\"my-service\");\n\nconst proof = generateProof({\n  secret,\n  blindingFactor,\n  commitment,\n  nonce: challenge.nonce,\n  channelBinding: tlsExporterValue,\n  clientIdentifier: \"my-service\",\n});\n\nconst token = await verifyAndGetToken(\"my-service\", challenge.id, proof);\n// Use token.accessToken for API calls\n```\n\n## How It Works\n\n1. **Registration** (once): Client generates secret + blinding factor, computes Pedersen commitment `C = s·G + r·H`, sends C to server\n2. **Challenge** (each auth): Client requests a fresh nonce from the server\n3. **Proof** (each auth): Client generates a Sigma proof bound to the nonce\n4. **Verification**: Server verifies the proof against the stored commitment — without ever learning the secret\n\nThe server **never stores any secret**. A database breach reveals only commitments — mathematically useless without the client's secret.\n\n## License\n\nApache-2.0 — Free for any use.\n","readmeFilename":"README.md"}