{"version":3,"sources":["../src/oauth-client.web.ts","../src/index.web.ts"],"sourcesContent":["import type { OAuthClient, OAuthConfig, OAuthResult, OAuthCallbackParams } from './types'\n\nexport class WebOAuthClient<T = OAuthResult> implements OAuthClient<T> {\n  private config: OAuthConfig<T>\n\n  constructor(config: OAuthConfig<T>) {\n    this.config = config\n  }\n\n  async authorize(): Promise<T> {\n    const state = this.generateState()\n\n    // Check if we're already in a callback\n    const callbackParams = this.checkForCallback()\n\n    if (callbackParams) {\n      if (callbackParams.error) {\n        throw new Error(`OAuth error: ${callbackParams.error}`)\n      }\n\n      // Clean up URL\n      window.history.replaceState({}, document.title, window.location.pathname)\n\n      // Transform callback params if transformer provided, otherwise return as-is\n      if (this.config.transformCallback) {\n        return this.config.transformCallback(callbackParams)\n      }\n\n      // Default behavior: return all callback params as T\n      return callbackParams as T\n    }\n\n    // Build OAuth URL and redirect\n    const oauthUrl = this.buildOAuthUrl(state)\n    window.location.href = oauthUrl\n\n    // This won't be reached due to redirect\n    throw new Error('Authorization flow initiated')\n  }\n\n  private checkForCallback(): OAuthCallbackParams | null {\n    const urlParams = new URLSearchParams(window.location.search)\n    const params: OAuthCallbackParams = {}\n\n    // Collect all query parameters\n    urlParams.forEach((value, key) => {\n      params[key] = value\n    })\n\n    // Return null if no parameters found\n    if (Object.keys(params).length === 0) {\n      return null\n    }\n\n    return params\n  }\n\n  private buildOAuthUrl(state: string): string {\n    const url = new URL(this.config.oauthUrl)\n    \n    url.searchParams.set('redirect_uri', this.config.redirectUrl)\n    url.searchParams.set('state', state)\n\n    // Add additional parameters\n    if (this.config.additionalParameters) {\n      Object.entries(this.config.additionalParameters).forEach(([key, value]) => {\n        url.searchParams.set(key, value)\n      })\n    }\n\n    return url.toString()\n  }\n\n  private generateState(): string {\n    // Generate random state for CSRF protection\n    let result = ''\n    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~'\n    for (let i = 0; i < 32; i++) {\n      result += chars.charAt(Math.floor(Math.random() * chars.length))\n    }\n    return result\n  }\n}","export * from './types'\n\nimport type { OAuthConfig, OAuthClient, OAuthResult } from './types'\nimport { WebOAuthClient } from './oauth-client.web'\n\nexport function createOAuthClient<T = OAuthResult>(config: OAuthConfig<T>): OAuthClient<T> {\n  return new WebOAuthClient<T>(config)\n}\n\nexport { WebOAuthClient }"],"mappings":";AAEO,IAAM,iBAAN,MAAgE;AAAA,EAGrE,YAAY,QAAwB;AAClC,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,MAAM,YAAwB;AAC5B,UAAM,QAAQ,KAAK,cAAc;AAGjC,UAAM,iBAAiB,KAAK,iBAAiB;AAE7C,QAAI,gBAAgB;AAClB,UAAI,eAAe,OAAO;AACxB,cAAM,IAAI,MAAM,gBAAgB,eAAe,KAAK,EAAE;AAAA,MACxD;AAGA,aAAO,QAAQ,aAAa,CAAC,GAAG,SAAS,OAAO,OAAO,SAAS,QAAQ;AAGxE,UAAI,KAAK,OAAO,mBAAmB;AACjC,eAAO,KAAK,OAAO,kBAAkB,cAAc;AAAA,MACrD;AAGA,aAAO;AAAA,IACT;AAGA,UAAM,WAAW,KAAK,cAAc,KAAK;AACzC,WAAO,SAAS,OAAO;AAGvB,UAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AAAA,EAEQ,mBAA+C;AACrD,UAAM,YAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC5D,UAAM,SAA8B,CAAC;AAGrC,cAAU,QAAQ,CAAC,OAAO,QAAQ;AAChC,aAAO,GAAG,IAAI;AAAA,IAChB,CAAC;AAGD,QAAI,OAAO,KAAK,MAAM,EAAE,WAAW,GAAG;AACpC,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,cAAc,OAAuB;AAC3C,UAAM,MAAM,IAAI,IAAI,KAAK,OAAO,QAAQ;AAExC,QAAI,aAAa,IAAI,gBAAgB,KAAK,OAAO,WAAW;AAC5D,QAAI,aAAa,IAAI,SAAS,KAAK;AAGnC,QAAI,KAAK,OAAO,sBAAsB;AACpC,aAAO,QAAQ,KAAK,OAAO,oBAAoB,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACzE,YAAI,aAAa,IAAI,KAAK,KAAK;AAAA,MACjC,CAAC;AAAA,IACH;AAEA,WAAO,IAAI,SAAS;AAAA,EACtB;AAAA,EAEQ,gBAAwB;AAE9B,QAAI,SAAS;AACb,UAAM,QAAQ;AACd,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,gBAAU,MAAM,OAAO,KAAK,MAAM,KAAK,OAAO,IAAI,MAAM,MAAM,CAAC;AAAA,IACjE;AACA,WAAO;AAAA,EACT;AACF;;;AC7EO,SAAS,kBAAmC,QAAwC;AACzF,SAAO,IAAI,eAAkB,MAAM;AACrC;","names":[]}