Skip to content

fix(cache): use readable origin keys instead of truncated base64#17

Merged
indexzero merged 1 commit intomainfrom
fix/origin-cache
Feb 1, 2026
Merged

fix(cache): use readable origin keys instead of truncated base64#17
indexzero merged 1 commit intomainfrom
fix/origin-cache

Conversation

@indexzero
Copy link
Copy Markdown
Owner

@indexzero indexzero commented Feb 1, 2026

The previous scheme encoded origins as the first 8 characters of base64 (full URL), which caused all HTTPS registries to collide on "aHR0cHM6" (the base64 of "https://").

New scheme produces readable, collision-resistant keys:

  • Format: [http~]hostname[~port][pathsegments]
  • Segments truncated: <=5 chars kept whole, else first 3 + last 2
  • HTTPS implicit, only http~ prefix for HTTP origins
  • npm alias preserved for registry.npmjs.com/org, replicate.npmjs.com

Examples:

  https://registry.npmjs.com         -> npm
  https://packages.example.com/js    -> paces.exale.com~js
  http://localhost:4873              -> http~locst~4873
  https://host.jfrog.io/art/api/npm  -> host.jfrog.io~art~api~npm

Backward compatibility:

  • Old base64 keys (without . or ~) decode to legacy:...
  • No migration needed; old cache entries become orphans

The previous scheme encoded origins as the first 8 characters of
base64(full URL), which caused all HTTPS registries to collide on
"aHR0cHM6" (the base64 of "https://").

New scheme produces readable, collision-resistant keys:
- Format: [http~]hostname[~port][~path~segments]
- Segments truncated: <=5 chars kept whole, else first 3 + last 2
- HTTPS implicit, only http~ prefix for HTTP origins
- npm alias preserved for registry.npmjs.com/org, replicate.npmjs.com

Examples:
  https://registry.npmjs.com         -> npm
  https://packages.example.com/js    -> paces.exale.com~js
  http://localhost:4873              -> http~locst~4873
  https://host.jfrog.io/art/api/npm  -> host.jfrog.io~art~api~npm

Backward compatibility:
- Old base64 keys (without . or ~) decode to <legacy:...>
- No migration needed; old cache entries become orphans

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@indexzero indexzero merged commit a41c75c into main Feb 1, 2026
1 check passed
@indexzero indexzero deleted the fix/origin-cache branch February 2, 2026 04:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant