{"_id":"@aauth/interaction-code","_rev":"2-d478e95bebb05655e5837147d38621b9","name":"@aauth/interaction-code","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@aauth/interaction-code","version":"0.1.0","keywords":["aauth","interaction-code","crockford","base32"],"author":{"name":"Dick Hardt","email":"dick.hardt@hello.coop"},"license":"MIT","_id":"@aauth/interaction-code@0.1.0","maintainers":[{"name":"dickhardt","email":"dickhardt@gmail.com"},{"name":"rohanharikr","email":"rohanharikumar80@gmail.com"}],"homepage":"https://github.com/aauth-dev/packages-js#readme","bugs":{"url":"https://github.com/aauth-dev/packages-js/issues"},"dist":{"shasum":"196cde0ce1c9a268e54242becb020b91e056c54e","tarball":"https://registry.npmjs.org/@aauth/interaction-code/-/interaction-code-0.1.0.tgz","fileCount":10,"integrity":"sha512-We7ee7C2RQhmUHKUHW8UQfAQ7SqHL/XHwfPM/X3PQO7W0uNheDy1B0yA6RHJiM/LhJBpfy9ePGnt9P4a5vGT3A==","signatures":[{"sig":"MEUCIQCL2u51/89dcFY1vckOsuif5YUOCEZdkkJdACfqid4X2wIgGNnkNIvjgAH+usxlskQHMz3L4mEghFFYB6UnTJ4QIug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10606},"type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"gitHead":"d26458761764e47b08b93427629e2a02ede83bc8","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"dickhardt","email":"dickhardt@gmail.com"},"repository":{"url":"git+https://github.com/aauth-dev/packages-js.git","type":"git","directory":"interaction-code"},"_npmVersion":"11.16.0","description":"AAuth interaction code generation and canonicalization (Crockford base32, spec §2.6)","directories":{},"_nodeVersion":"22.22.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^20.0.0"},"_npmOperationalInternal":{"tmp":"tmp/interaction-code_0.1.0_1781539421701_0.10404785503419278","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aauth/interaction-code","version":"0.1.1","description":"AAuth interaction code generation and canonicalization (Crockford base32, spec §2.6)","type":"module","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"scripts":{"build":"tsc","prepublishOnly":"npm run build"},"keywords":["aauth","interaction-code","crockford","base32"],"author":{"name":"Dick Hardt","email":"dick.hardt@hello.coop"},"license":"MIT","publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/aauth-dev/packages-js.git","directory":"interaction-code"},"devDependencies":{"@types/node":"^20.0.0","typescript":"^5.0.0"},"gitHead":"d6a0ef656983f28bb515be8146670d61d1436881","_id":"@aauth/interaction-code@0.1.1","bugs":{"url":"https://github.com/aauth-dev/packages-js/issues"},"homepage":"https://github.com/aauth-dev/packages-js#readme","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-vDsQC+8wpduPv1HPRMWV+qWEXey7rB+FGfct8E5ZWMUKuMhWUbAuK/GoDlqgSsu1PPn3V0ExF0yeLjfXrsGsxg==","shasum":"d09bcdd946d34e21bb2619c640b774d4403aa823","tarball":"https://registry.npmjs.org/@aauth/interaction-code/-/interaction-code-0.1.1.tgz","fileCount":10,"unpackedSize":10606,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@aauth%2finteraction-code@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBpdlYUeUqp9vuSivdwamtgWz/tOqNkSVSACGNx5NDMXAiEAn60GTO3vR5wc9lyyG6EKCK5ruChhjwzRoe/xNi3K5g4="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a08f47de-89b6-4328-892b-c9bda74f3b84"}},"directories":{},"maintainers":[{"name":"dickhardt","email":"dickhardt@gmail.com"},{"name":"rohanharikr","email":"rohanharikumar80@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/interaction-code_0.1.1_1781539813154_0.829697778648576"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-15T16:03:41.536Z","modified":"2026-06-15T16:10:13.632Z","0.1.0":"2026-06-15T16:03:41.839Z","0.1.1":"2026-06-15T16:10:13.290Z"},"bugs":{"url":"https://github.com/aauth-dev/packages-js/issues"},"author":{"name":"Dick Hardt","email":"dick.hardt@hello.coop"},"license":"MIT","homepage":"https://github.com/aauth-dev/packages-js#readme","keywords":["aauth","interaction-code","crockford","base32"],"repository":{"type":"git","url":"git+https://github.com/aauth-dev/packages-js.git","directory":"interaction-code"},"description":"AAuth interaction code generation and canonicalization (Crockford base32, spec §2.6)","maintainers":[{"name":"dickhardt","email":"dickhardt@gmail.com"},{"name":"rohanharikr","email":"rohanharikumar80@gmail.com"}],"readme":"# @aauth/interaction-code\n\nAAuth interaction code generation and canonicalization, implementing the Crockford base32 format specified in `draft-hardt-oauth-aauth-protocol §2.6`.\n\n## Install\n\n```\nnpm install @aauth/interaction-code\n```\n\n## API\n\n### `generateCode(): string`\n\nGenerates an 8-symbol Crockford base32 interaction code (40 bits of entropy) in canonical `XXXX-XXXX` form. The returned value is ready to use as a storage key.\n\n```typescript\nimport { generateCode } from '@aauth/interaction-code'\n\nconst code = generateCode()  // e.g. \"A1B2-C3D4\"\nstore.set(code, pendingData)\n```\n\n### `canonicalizeCode(input: string): string`\n\nCanonicalizes user-presented input to `XXXX-XXXX` form for storage lookup. Handles:\n- Hyphens in any position (stripped, then reinserted at position 4)\n- Lowercase input (uppercased)\n- Crockford decode aliases: `I`/`L` → `1`, `O` → `0`\n\n```typescript\nimport { canonicalizeCode } from '@aauth/interaction-code'\n\n// All of these look up the same stored record:\nstore.get(canonicalizeCode('a1b2c3d4'))    // → 'A1B2-C3D4'\nstore.get(canonicalizeCode('A1B2-C3D4'))  // → 'A1B2-C3D4'\nstore.get(canonicalizeCode('a1b2-c3d4'))  // → 'A1B2-C3D4'\n```\n\n### `CROCKFORD32: string`\n\nThe Crockford base32 alphabet: `0123456789ABCDEFGHJKMNPQRSTVWXYZ` (omits I, L, O, U).\n\n## Code format\n\n- **Alphabet:** Crockford base32 (32 symbols, no visually ambiguous characters)\n- **Entropy:** 40 bits (5 random bytes → 8 × 5-bit symbols)\n- **Display:** `XXXX-XXXX` — hyphen at position 4 for human readability only\n- **Storage:** `XXXX-XXXX` — canonical form includes hyphen\n- **Lookup:** call `canonicalizeCode(userInput)` before comparing\n","readmeFilename":"README.md"}