···55The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7788+## [5.0.1] - 2026-02-15
99+1010+### Added
1111+1212+- **Identity on IssuerMismatchError**: `handle` and `did` properties are now
1313+ set on `IssuerMismatchError` when thrown from `callback()`, allowing callers
1414+ to re-authorize through the correct auth server transparently.
1515+816## [5.0.0] - 2026-02-15
9171018### Breaking
+1-1
deno.json
···11{
22 "name": "@tijs/oauth-client-deno",
33- "version": "5.0.0",
33+ "version": "5.0.1",
44 "description": "AT Protocol OAuth client for Deno - handle-focused alternative to @atproto/oauth-client-node with Web Crypto API compatibility",
55 "license": "MIT",
66 "repository": {
+11-1
src/client.ts
···367367368368 // CRITICAL: Verify the auth server is authoritative for this DID
369369 // Prevents a malicious auth server from claiming to be another user
370370- await this.verifyIssuer(tokenDid, pkceData.authServer, pkceData.issuer, pdsUrl);
370370+ try {
371371+ await this.verifyIssuer(tokenDid, pkceData.authServer, pkceData.issuer, pdsUrl);
372372+ } catch (verifyError) {
373373+ if (verifyError instanceof IssuerMismatchError) {
374374+ // Attach resolved identity so callers can re-authorize via the correct server
375375+ verifyError.handle = handle;
376376+ verifyError.did = did;
377377+ throw verifyError;
378378+ }
379379+ throw verifyError;
380380+ }
371381372382 // Create session
373383 const sessionData: SessionData = {
+5
src/errors.ts
···474474 * a malicious auth server from issuing tokens for a different user.
475475 */
476476export class IssuerMismatchError extends OAuthError {
477477+ /** The resolved handle of the user (available when discovered during callback) */
478478+ public handle?: string;
479479+ /** The resolved DID of the user (available when discovered during callback) */
480480+ public did?: string;
481481+477482 constructor(
478483 public readonly expected: string,
479484 public readonly actual: string,