(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,87433,e=>{"use strict";var t=e.i(82568);class r extends t.WebPlugin{constructor(){super()}parseJwt(e){return JSON.parse(decodeURIComponent(atob(e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/")).split("").map(e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)).join("")))}async loadScript(e){return new Promise((t,r)=>{let o=document.createElement("script");o.src=e,o.async=!0,o.onload=()=>{t()},o.onerror=r,document.body.appendChild(o)})}}r.OAUTH_STATE_KEY="social_login_oauth_pending",e.s(["BaseSocialLogin",0,r])},77954,e=>{"use strict";let t=["access_denied","access denied","user_cancelled_authorize","user_cancelled","user cancelled","user canceled","login cancelled","login canceled","popup closed","window was closed"];function r(e){let t=Error(e);return t.code="USER_CANCELLED",t}e.s(["createUserCancelledError",0,r,"inferUserCancelledError",0,function(e){let o=e.toLowerCase();return t.some(e=>o.includes(e))?r(e):Error(e)}])},9413,85715,e=>{"use strict";var t=e.i(87433),r=e.i(77954);let o="social_login_oauth_pending",i="social_login_oauth_popup",n="social_login_oauth_delivered",a=new Set(["OAuth2Login","XLogin","Google Sign In","Authorization","TelegramLogin"]);function s(e){return`social_login_oauth_result_${e}`}function l(e,t){return"oauth2"===e?`oauth2_${t}`:"twitter"===e?`twitter_oauth_${t}`:"telegram"===e?`telegram_oauth_${t}`:`google_oauth_${t}`}function c(e){try{sessionStorage.removeItem(n),sessionStorage.setItem(i,e)}catch(e){}}function d(e,t,r){let o=s(t),i=l(e,t),n=null;try{n=new BroadcastChannel(i)}catch(e){}let a=e=>!((null==e?void 0:e.source)&&String(e.source).startsWith("angular"))&&((null==e?void 0:e.type)==="oauth-response"?(r.onResponse(e),!0):(null==e?void 0:e.type)==="oauth-error"&&(r.onError(e.error||"User cancelled the OAuth flow",e.code),!0)),c=e=>{e.origin===window.location.origin&&a(e.data)},d=e=>{if(e.key===o&&e.newValue)try{let t=JSON.parse(e.newValue);localStorage.removeItem(o),a(t)}catch(e){}};window.addEventListener("message",c),window.addEventListener("storage",d),n&&(n.onmessage=e=>{a(e.data)});let u=window.setInterval(()=>{try{let e=localStorage.getItem(o);if(!e)return;localStorage.removeItem(o);let t=JSON.parse(e);a(t)}catch(e){}},300);return()=>{window.removeEventListener("message",c),window.removeEventListener("storage",d),clearInterval(u),n&&n.close();try{localStorage.removeItem(o)}catch(e){}}}e.s(["OAUTH_STATE_KEY",0,o,"clearOAuthPopupMarker",0,function(){try{sessionStorage.removeItem(i)}catch(e){}},"deliverOAuthResult",0,function(e,t,r){try{if(sessionStorage.getItem(n))return;sessionStorage.setItem(n,"1")}catch(e){}try{window.opener&&window.opener.postMessage(r,window.location.origin)}catch(e){}if(t)try{let o=new BroadcastChannel(l(e,t));o.postMessage(r),o.close()}catch(e){}if(t)try{localStorage.setItem(s(t),JSON.stringify(Object.assign(Object.assign({},r),{_ts:Date.now()})))}catch(e){}},"listenForOAuthResult",0,d,"markOAuthPopup",0,c,"shouldAutoFinishOAuthRedirect",0,function(){return!!localStorage.getItem(o)&&!("u"0?(t.includes("https://www.googleapis.com/auth/userinfo.email")||t.push("https://www.googleapis.com/auth/userinfo.email"),t.includes("https://www.googleapis.com/auth/userinfo.profile")||t.push("https://www.googleapis.com/auth/userinfo.profile"),t.includes("openid")||t.push("openid")):t=["https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/userinfo.profile","openid"];let r=e.nonce||Math.random().toString(36).substring(2);return this.traditionalOAuth({scopes:t,nonce:r,hostedDomain:this.hostedDomain,prompt:e.prompt})}async logout(){if("offline"===this.loginType)return Promise.reject("Offline login doesn't store tokens. logout is not available");let e=this.getGoogleState();e&&await this.rawLogoutGoogle(e.accessToken)}async isLoggedIn(){if("offline"===this.loginType)return Promise.reject("Offline login doesn't store tokens. isLoggedIn is not available");let e=this.getGoogleState();if(!e)return{isLoggedIn:!1};try{let t=await this.accessTokenIsValid(e.accessToken),r=this.idTokenValid(e.idToken);if(t&&r)return{isLoggedIn:!0};try{await this.rawLogoutGoogle(e.accessToken,!1)}catch(e){console.error("Access token is not valid, but cannot logout",e)}return{isLoggedIn:!1}}catch(e){return Promise.reject(e)}}async getAuthorizationCode(){if("offline"===this.loginType)return Promise.reject("Offline login doesn't store tokens. getAuthorizationCode is not available");let e=this.getGoogleState();if(!e)throw Error("No Google authorization code available");try{let t=await this.accessTokenIsValid(e.accessToken),r=this.idTokenValid(e.idToken);if(t&&r)return{accessToken:e.accessToken,jwt:e.idToken};try{await this.rawLogoutGoogle(e.accessToken,!1)}catch(e){console.error("Access token is not valid, but cannot logout",e)}throw Error("No Google authorization code available")}catch(e){return Promise.reject(e)}}async refresh(){return"offline"===this.loginType?(console.warn(`[SocialLogin] ${u}`),Promise.reject(Error(u))):Promise.reject(Error("Google refresh is not implemented on web. Use login() again to obtain a new token."))}handleOAuthRedirect(e){let r=e.searchParams,o=r.get("error");if(o)return localStorage.removeItem(t.BaseSocialLogin.OAUTH_STATE_KEY),{error:r.get("error_description")||o};let i=r.get("code");if(i&&r.has("scope"))return{provider:"google",result:{serverAuthCode:i,responseType:"offline"}};let n=e.hash.substring(1);if(!n)return null;let a=new URLSearchParams(n),s=a.get("error");if(s)return localStorage.removeItem(t.BaseSocialLogin.OAUTH_STATE_KEY),{error:a.get("error_description")||s};let l=a.get("access_token"),c=a.get("id_token");if(l&&c){localStorage.removeItem(t.BaseSocialLogin.OAUTH_STATE_KEY);let e=this.parseJwt(c);return{provider:"google",result:{accessToken:{token:l},idToken:c,profile:{email:e.email||null,familyName:e.family_name||null,givenName:e.given_name||null,id:e.sub||null,name:e.name||null,imageUrl:e.picture||null},responseType:"online"}}}return null}async accessTokenIsValid(e){let t=`${this.GOOGLE_TOKEN_REQUEST_URL}?access_token=${encodeURIComponent(e)}`;try{let e,r,o=await fetch(t);if(!o.ok)return console.log(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response not successful. Status code: ${o.status}. Assuming that the token is not valid`),!1;let i=await o.text();if(!i)throw console.error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`),Error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`);try{e=JSON.parse(i)}catch(e){throw console.error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${e}`),Error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${e}`,{cause:e})}let n=e.expires_in;if(null==n)throw console.error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`),Error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`);try{if(r=parseInt(n,10),isNaN(r))throw Error("'expires_in' is not a valid integer")}catch(e){throw console.error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${n} is not a valid integer. Error: ${e}`),Error(`Invalid response from ${this.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${n} is not a valid integer. Error: ${e}`,{cause:e})}return r>5}catch(e){throw console.error(e),e}}idTokenValid(e){try{let t=this.parseJwt(e),r=Math.ceil(Date.now()/1e3)+5;return t.exp&&r{if(!f)return void t(Error("Failed to open popup"));let o=!1,n=!1,a=(e,t)=>{o||(o=!0,((e=!1)=>{if(clearInterval(s),clearTimeout(l),_&&(_(),_=null),e)try{f.close()}catch(e){}})(e),t())};_=d("google",i,{onResponse:r=>{if("online"===this.loginType){let{accessToken:o,idToken:i}=r;if(o&&i){let t=this.parseJwt(i);this.persistStateGoogle(o.token,i),a(!0,()=>{e({provider:"google",result:{accessToken:{token:o.token},idToken:i,profile:{email:t.email||null,familyName:t.family_name||null,givenName:t.given_name||null,id:t.sub||null,name:t.name||null,imageUrl:t.picture||null},responseType:"online"}})})}else a(!0,()=>{t(Error("Invalid OAuth response: missing accessToken or idToken"))})}else{let{serverAuthCode:o}=r;if(!o)return void a(!0,()=>{t(Error("Invalid OAuth response: missing serverAuthCode"))});a(!0,()=>{e({provider:"google",result:{responseType:"offline",serverAuthCode:o}})})}},onError:e=>{a(!0,()=>{t((0,r.inferUserCancelledError)(e))})}}),l=setTimeout(()=>{a(!0,()=>{t(Error("OAuth timeout"))})},3e5),s=setInterval(()=>{if(!n)try{f.closed&&a(!1,()=>{t((0,r.createUserCancelledError)("Popup closed"))})}catch(e){n=!0}},1e3)})}}e.s(["GoogleSocialLogin",0,g],9413)},60262,e=>{"use strict";let t="linkedin",r="capgo_social_login_linkedin_redirect";e.s(["LINKEDIN_PROVIDER_ID",0,t,"asLinkedInLoginResult",0,e=>({provider:"linkedin",result:e.result}),"buildLinkedInLoginOptions",0,(e={})=>{var r;let o=null!=(r=e.scope)?r:e.scopes,i=Object.assign(Object.assign(Object.assign({},e),{providerId:t}),void 0===o?{}:{scope:o});return"redirect"!==i.flow||i.state||(i.state=[...crypto.getRandomValues(new Uint8Array(16))].map(e=>e.toString(16).padStart(2,"0")).join("")),i},"buildLinkedInOAuthConfig",0,e=>{var t,r,o,i,n,a,s,l,c,d;let u=(d=null!=(t=e.scope)?t:e.scopes)?Array.isArray(d)?d.filter(Boolean).join(" "):d:"openid profile email";return Object.assign(Object.assign({},e),{appId:null!=(r=e.appId)?r:e.clientId,clientSecret:e.clientSecret,authorizationBaseUrl:null!=(i=null!=(o=e.authorizationBaseUrl)?o:e.authorizationEndpoint)?i:"https://www.linkedin.com/oauth/v2/authorization",accessTokenEndpoint:null!=(a=null!=(n=e.accessTokenEndpoint)?n:e.tokenEndpoint)?a:"https://www.linkedin.com/oauth/v2/accessToken",resourceUrl:null!=(s=e.resourceUrl)?s:"https://api.linkedin.com/v2/userinfo",responseType:null!=(l=e.responseType)?l:"code",pkceEnabled:null==(c=e.pkceEnabled)||c,scope:u})},"consumeLinkedInRedirectPending",0,e=>{try{let t=sessionStorage.getItem(r);return sessionStorage.removeItem(r),!!(t&&e&&t===e)}catch(e){return!1}},"isLinkedInOAuthResult",0,e=>"oauth2"===e.provider&&e.result.providerId===t,"markLinkedInRedirectPending",0,e=>{try{sessionStorage.setItem(r,e)}catch(e){}}])},78964,4002,e=>{"use strict";var t=e.i(90571),r=e.i(87433),o=e.i(77954);let i=(e,t)=>{if("string"!=typeof e)return t;let r=e.trim();return r.length>0?r:t};class n extends r.BaseSocialLogin{constructor(){super(),this.providers=new Map,this.TOKENS_KEY_PREFIX="capgo_social_login_oauth2_tokens_",this.STATE_PREFIX="capgo_social_login_oauth2_state_",this.CONFIG_KEY_PREFIX="capgo_social_login_oauth2_config_",this.restoreConfigurationsFromStorage()}normalizeScopeValue(e){return e?"string"==typeof e?e:Array.isArray(e)?e.filter(Boolean).join(" "):"":""}normalizeConfig(e,t){var r,o,n,a,s,l,c,d;let u=null!=(r=t.appId)?r:t.clientId,g=null!=(o=t.authorizationBaseUrl)?o:t.authorizationEndpoint,h=null!=(n=t.accessTokenEndpoint)?n:t.tokenEndpoint,p=null!=(a=t.logoutUrl)?a:t.endSessionEndpoint,m=null!=(s=t.scope)?s:t.scopes;if(!u)throw Error(`OAuth2 provider '${e}' requires appId (or clientId).`);if(!t.redirectUrl)throw Error(`OAuth2 provider '${e}' requires redirectUrl.`);if(!g&&!t.issuerUrl)throw Error(`OAuth2 provider '${e}' requires authorizationBaseUrl (or authorizationEndpoint) or issuerUrl.`);return{appId:u,clientSecret:t.clientSecret,clientIdParamName:i(t.clientIdParamName,"client_id"),clientSecretParamName:i(t.clientSecretParamName,"client_secret"),issuerUrl:t.issuerUrl,authorizationBaseUrl:g,accessTokenEndpoint:h,redirectUrl:t.redirectUrl,resourceUrl:t.resourceUrl,responseType:null!=(l=t.responseType)?l:"code",pkceEnabled:null==(c=t.pkceEnabled)||c,scope:this.normalizeScopeValue(m),additionalParameters:t.additionalParameters,loginHint:t.loginHint,prompt:t.prompt,additionalTokenParameters:t.additionalTokenParameters,additionalResourceHeaders:t.additionalResourceHeaders,logoutUrl:p,postLogoutRedirectUrl:t.postLogoutRedirectUrl,additionalLogoutParameters:t.additionalLogoutParameters,logsEnabled:null!=(d=t.logsEnabled)&&d}}async ensureDiscovered(e){let t=this.providers.get(e);if(!(null==t?void 0:t.issuerUrl)||t.authorizationBaseUrl&&t.accessTokenEndpoint)return;let r=t.issuerUrl.replace(/\/+$/,""),o=`${r}/.well-known/openid-configuration`,i=await fetch(o);if(!i.ok){let e=await i.text().catch(()=>"");throw Error(`OAuth2 discovery failed (${i.status}): ${e||o}`)}let n=await i.json(),a=n.authorization_endpoint,s=n.token_endpoint,l=n.end_session_endpoint;t.authorizationBaseUrl||"string"!=typeof a||(t.authorizationBaseUrl=a),t.accessTokenEndpoint||"string"!=typeof s||(t.accessTokenEndpoint=s),t.logoutUrl||"string"!=typeof l||(t.logoutUrl=l),t.logsEnabled&&console.log(`[OAuth2:${e}] Discovery resolved`,{authorizationBaseUrl:t.authorizationBaseUrl,accessTokenEndpoint:t.accessTokenEndpoint,logoutUrl:t.logoutUrl}),this.persistConfiguration(e,t)}async initializeProviders(e){for(let[t,r]of Object.entries(e)){let e=this.normalizeConfig(t,r);this.providers.set(t,e),e.logsEnabled&&console.log(`[OAuth2:${t}] Initialized with config:`,{appId:e.appId,issuerUrl:e.issuerUrl,authorizationBaseUrl:e.authorizationBaseUrl,redirectUrl:e.redirectUrl,responseType:e.responseType,pkceEnabled:e.pkceEnabled}),await this.ensureDiscovered(t),this.persistConfiguration(t,e)}}normalizeStoredConfig(e){return Object.assign(Object.assign({},e),{clientIdParamName:i(e.clientIdParamName,"client_id"),clientSecretParamName:i(e.clientSecretParamName,"client_secret")})}getProvider(e){let t=this.providers.get(e);if(!t)throw Error(`OAuth2 provider '${e}' not configured. Call initialize() first.`);return t.clientIdParamName=i(t.clientIdParamName,"client_id"),t.clientSecretParamName=i(t.clientSecretParamName,"client_secret"),t}getTokensKey(e){return`${this.TOKENS_KEY_PREFIX}${e}`}getConfigKey(e){return`${this.CONFIG_KEY_PREFIX}${e}`}persistConfiguration(e,t){try{localStorage.setItem(this.getConfigKey(e),JSON.stringify(t))}catch(t){console.warn(`Failed to persist OAuth2 configuration for provider '${e}'`,t)}}restoreConfigurationsFromStorage(){for(let e of Object.keys(localStorage))if(e.startsWith(this.CONFIG_KEY_PREFIX)){let t=e.substring(this.CONFIG_KEY_PREFIX.length);try{let r=localStorage.getItem(e);if(r){let e=this.normalizeStoredConfig(JSON.parse(r));this.providers.set(t,e)}}catch(e){console.warn(`Failed to restore OAuth2 configuration for provider '${t}'`,e)}}}async login(e){var i,n,a,s,l,c,d,u,g;let{providerId:h}=e,p=this.getProvider(h);await this.ensureDiscovered(h);let m=null!=(i=e.redirectUrl)?i:p.redirectUrl,f=this.normalizeScopeValue(null!=(a=null!=(n=e.scope)?n:e.scopes)?a:p.scope),_=null!=(s=e.state)?s:this.generateState(),w=null!=(l=e.codeVerifier)?l:this.generateCodeVerifier(),T=new URLSearchParams({response_type:p.responseType,[p.clientIdParamName]:p.appId,redirect_uri:m,state:_});f&&T.set("scope",f);let S=Object.assign(Object.assign({},null!=(c=p.additionalParameters)?c:{}),null!=(d=e.additionalParameters)?d:{}),E=null!=(u=e.loginHint)?u:p.loginHint,v=null!=(g=e.prompt)?g:p.prompt;if(!E||"login_hint"in S||(S.login_hint=E),!v||"prompt"in S||(S.prompt=v),"code"===p.responseType&&p.pkceEnabled){let e=await this.generateCodeChallenge(w);T.set("code_challenge",e),T.set("code_challenge_method","S256")}for(let[e,t]of Object.entries(S))void 0!==t&&T.set(e,t);if(this.persistPendingLogin(_,{providerId:h,codeVerifier:w,redirectUri:m,scope:f}),localStorage.setItem(r.BaseSocialLogin.OAUTH_STATE_KEY,JSON.stringify({provider:"oauth2",providerId:h,state:_})),!p.authorizationBaseUrl)throw Error(`OAuth2 provider '${h}' is missing authorizationBaseUrl (discovery may have failed).`);let k=`${p.authorizationBaseUrl}?${T.toString()}`;if(p.logsEnabled&&console.log(`[OAuth2:${h}] Opening authorization URL:`,k),"redirect"===e.flow)return window.location.assign(k),new Promise(()=>{});let y=window.screenX+(window.outerWidth-500)/2,O=window.screenY+(window.outerHeight-650)/2,I=window.open(k,"OAuth2Login",`width=500,height=650,left=${y},top=${O},popup=1`);return new Promise((e,r)=>{if(!I)return void r(Error("Unable to open login window. Please allow popups."));let i=`oauth2_${_}`,n=null;try{n=new BroadcastChannel(i)}catch(e){p.logsEnabled&&console.log(`[OAuth2:${h}] BroadcastChannel not supported, using postMessage only`)}let a=(e,t,r)=>{window.removeEventListener("message",e),clearTimeout(t),clearInterval(r),n&&n.close()},s=i=>{if((null==i?void 0:i.type)==="oauth-response"){if((null==i?void 0:i.provider)&&"oauth2"!==i.provider||(null==i?void 0:i.providerId)&&i.providerId!==h)return!1;a(l,c,d);let{provider:r,type:o}=i;return e({provider:"oauth2",result:(0,t.__rest)(i,["provider","type"])}),!0}return(null==i?void 0:i.type)==="oauth-error"&&(null==i||!i.provider||"oauth2"===i.provider)&&(a(l,c,d),r((0,o.inferUserCancelledError)(i.error||"OAuth2 login was cancelled.")),!0)};n&&(n.onmessage=e=>{s(e.data)});let l=e=>{e.origin===window.location.origin&&s(e.data)};window.addEventListener("message",l);let c=window.setTimeout(()=>{a(l,c,d);try{I.close()}catch(e){}r(Error("OAuth2 login timed out."))},3e5),d=window.setInterval(()=>{try{I.closed&&(a(l,c,d),r((0,o.createUserCancelledError)("OAuth2 login window was closed.")))}catch(e){clearInterval(d),p.logsEnabled&&console.log(`[OAuth2:${h}] Cannot check popup.closed due to cross-origin restrictions. Relying on message handlers and timeout.`)}},1e3)})}async logout(e){await this.ensureDiscovered(e);let t=this.providers.get(e),r=this.getStoredTokens(e);if(localStorage.removeItem(this.getTokensKey(e)),null==t?void 0:t.logoutUrl)try{let e=new URL(t.logoutUrl);(null==r?void 0:r.idToken)&&e.searchParams.set("id_token_hint",r.idToken);let o=t.postLogoutRedirectUrl;if(o&&e.searchParams.set("post_logout_redirect_uri",o),t.additionalLogoutParameters)for(let[r,o]of Object.entries(t.additionalLogoutParameters))e.searchParams.set(r,o);window.open(e.toString(),"_blank")}catch(e){window.open(t.logoutUrl,"_blank")}}async isLoggedIn(e){let t=this.getStoredTokens(e);if(!t)return{isLoggedIn:!1};let r=t.expiresAt>Date.now();return r||localStorage.removeItem(this.getTokensKey(e)),{isLoggedIn:r}}async getAuthorizationCode(e){let t=this.getStoredTokens(e);if(!t)throw Error(`OAuth2 access token is not available for provider '${e}'.`);return{accessToken:t.accessToken,jwt:t.idToken}}async refresh(e){await this.refreshToken(e)}async refreshToken(e,t,r){var o,i,n,a,s,l;await this.ensureDiscovered(e);let c=this.getProvider(e),d=this.getStoredTokens(e),u=null!=t?t:null==d?void 0:d.refreshToken;if(!u)throw Error(`No OAuth2 refresh token is available for provider '${e}'. Include offline_access scope to receive one.`);if(!c.accessTokenEndpoint)throw Error(`No accessTokenEndpoint configured for provider '${e}'.`);let g=await this.refreshWithRefreshToken(e,u,r),h=g.expires_in?Date.now()+1e3*g.expires_in:Date.now()+36e5,p=null!=(n=null!=(i=null==(o=g.scope)?void 0:o.split(" ").filter(Boolean))?i:null==d?void 0:d.scope)?n:[],m=null;c.resourceUrl&&(m=await this.fetchResource(e,g.access_token));let f=null!=(a=g.refresh_token)?a:u;return this.persistTokens(e,{accessToken:g.access_token,refreshToken:f,idToken:g.id_token,expiresAt:h,scope:p,tokenType:g.token_type}),{providerId:e,accessToken:{token:g.access_token,tokenType:g.token_type,expires:new Date(h).toISOString(),refreshToken:f},idToken:null!=(s=g.id_token)?s:null,refreshToken:null!=f?f:null,resourceData:m,scope:p,tokenType:g.token_type,expiresIn:null!=(l=g.expires_in)?l:null}}async handleOAuthRedirect(e,t){var o,i,n,a,s;let l=new URLSearchParams(e.search);new URLSearchParams(e.hash.slice(1)).forEach((e,t)=>{l.set(t,e)});let c=null!=t?t:l.get("state");if(!c)return null;let d=this.consumePendingLogin(c);if(!d)return localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY),{error:"OAuth2 login session expired or state mismatch."};let{providerId:u}=d;await this.ensureDiscovered(u);let g=this.providers.get(u);if(!g)return localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY),{error:`OAuth2 provider '${u}' configuration not found.`};let h=l.get("error");if(h)return localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY),{error:l.get("error_description")||h};try{let e;if(l.has("code")){let t=l.get("code");if(!t)return localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY),{error:"OAuth2 authorization code missing from redirect."};e=await this.exchangeAuthorizationCode(u,t,d)}else{if(!l.has("access_token"))return localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY),{error:"No authorization code or access token in redirect."};e={access_token:l.get("access_token"),token_type:l.get("token_type")||"bearer",expires_in:l.has("expires_in")?parseInt(l.get("expires_in"),10):void 0,scope:l.get("scope")||void 0,id_token:l.get("id_token")||void 0}}let t=e.expires_in?Date.now()+1e3*e.expires_in:Date.now()+36e5,c=null!=(i=null==(o=e.scope)?void 0:o.split(" ").filter(Boolean))?i:[],h=null;return g.resourceUrl&&(h=await this.fetchResource(u,e.access_token)),this.persistTokens(u,{accessToken:e.access_token,refreshToken:e.refresh_token,idToken:e.id_token,expiresAt:t,scope:c,tokenType:e.token_type}),{provider:"oauth2",result:{providerId:u,accessToken:{token:e.access_token,tokenType:e.token_type,expires:new Date(t).toISOString(),refreshToken:e.refresh_token},idToken:null!=(n=e.id_token)?n:null,refreshToken:null!=(a=e.refresh_token)?a:null,resourceData:h,scope:c,tokenType:e.token_type,expiresIn:null!=(s=e.expires_in)?s:null}}}catch(e){if(e instanceof Error)return{error:e.message};return{error:"OAuth2 login failed unexpectedly."}}finally{localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY)}}async exchangeAuthorizationCode(e,t,r){let o=this.getProvider(e);if(!o.accessTokenEndpoint)throw Error(`No accessTokenEndpoint configured for provider '${e}'.`);let i=new URLSearchParams({grant_type:"authorization_code",[o.clientIdParamName]:o.appId,code:t,redirect_uri:r.redirectUri});if(o.pkceEnabled&&i.set("code_verifier",r.codeVerifier),o.clientSecret&&i.set(o.clientSecretParamName,o.clientSecret),o.additionalTokenParameters)for(let[e,t]of Object.entries(o.additionalTokenParameters))i.set(e,t);o.logsEnabled&&console.log(`[OAuth2:${e}] Exchanging code at:`,o.accessTokenEndpoint);let n=await fetch(o.accessTokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()});if(!n.ok){let e=await n.text();throw Error(`OAuth2 token exchange failed (${n.status}): ${e}`)}return await n.json()}async refreshWithRefreshToken(e,t,r){let o=this.getProvider(e);if(!o.accessTokenEndpoint)throw Error(`No accessTokenEndpoint configured for provider '${e}'.`);let i=new URLSearchParams({grant_type:"refresh_token",refresh_token:t,[o.clientIdParamName]:o.appId});if(o.clientSecret&&i.set(o.clientSecretParamName,o.clientSecret),o.additionalTokenParameters)for(let[e,t]of Object.entries(o.additionalTokenParameters))i.set(e,t);if(r)for(let[e,t]of Object.entries(r))i.set(e,t);let n=await fetch(o.accessTokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()});if(!n.ok){let e=await n.text();throw Error(`OAuth2 refresh failed (${n.status}): ${e}`)}return await n.json()}async fetchResource(e,t){let r=this.getProvider(e);if(!r.resourceUrl)throw Error(`No resourceUrl configured for provider '${e}'.`);let o={Authorization:`Bearer ${t}`};r.additionalResourceHeaders&&Object.assign(o,r.additionalResourceHeaders);let i=await fetch(r.resourceUrl,{headers:o});if(!i.ok){let e=await i.text();throw Error(`Unable to fetch OAuth2 resource (${i.status}): ${e}`)}return await i.json()}persistTokens(e,t){localStorage.setItem(this.getTokensKey(e),JSON.stringify(t))}getStoredTokens(e){let t=localStorage.getItem(this.getTokensKey(e));if(!t)return null;try{return JSON.parse(t)}catch(t){return console.warn(`Failed to parse stored OAuth2 tokens for provider '${e}'`,t),null}}persistPendingLogin(e,t){localStorage.setItem(`${this.STATE_PREFIX}${e}`,JSON.stringify(t))}consumePendingLogin(e){let t=`${this.STATE_PREFIX}${e}`,r=localStorage.getItem(t);if(localStorage.removeItem(t),!r)return null;try{return JSON.parse(r)}catch(e){return console.warn("Failed to parse pending OAuth2 login payload",e),null}}generateState(){return[...crypto.getRandomValues(new Uint8Array(16))].map(e=>e.toString(16).padStart(2,"0")).join("")}generateCodeVerifier(){let e=new Uint8Array(64);return crypto.getRandomValues(e),Array.from(e).map(e=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"[e%66]).join("")}async generateCodeChallenge(e){let t=new TextEncoder().encode(e),r=await crypto.subtle.digest("SHA-256",t);return this.base64UrlEncode(new Uint8Array(r))}base64UrlEncode(e){let t="";return e.forEach(e=>t+=String.fromCharCode(e)),btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}decodeIdToken(e){let t=e.split(".");if(t.length<2)throw Error("Invalid JWT: missing parts");let r=t[1].replace(/-/g,"+").replace(/_/g,"/");return JSON.parse(atob(r+"=".repeat((4-r.length%4)%4)))}getAccessTokenExpirationDate(e){let t=this.getStoredTokens(e);return(null==t?void 0:t.expiresAt)?{expirationDate:new Date(t.expiresAt).toISOString()}:{expirationDate:null}}isAccessTokenAvailable(e){let t=this.getStoredTokens(e);return{isAvailable:!!(null==t?void 0:t.accessToken)}}isAccessTokenExpired(e){let t=this.getStoredTokens(e);return(null==t?void 0:t.expiresAt)?{isExpired:t.expiresAt<=Date.now()}:{isExpired:!0}}isRefreshTokenAvailable(e){let t=this.getStoredTokens(e);return{isAvailable:!!(null==t?void 0:t.refreshToken)}}}e.s(["OAuth2SocialLogin",0,n],78964);var a=r,s=e.i(85715);class l extends a.BaseSocialLogin{constructor(){super(...arguments),this.botId=null,this.redirectUrl=null,this.origin=null,this.requestAccess="write",this.languageCode=null,this.TOKENS_KEY="capgo_social_login_telegram_session_v1",this.STATE_PREFIX="capgo_social_login_telegram_state_",this.SESSION_TTL_MS=864e5}initialize(e,t,r,o,i){this.botId=e,this.requestAccess=null!=t?t:"write",this.redirectUrl=null!=r?r:null,this.origin=null!=o?o:null,this.languageCode=null!=i?i:null}async login(e){var r,i,n,l,c;if(!this.botId)throw Error("Telegram botId is not configured. Call initialize() first.");let d=null!=(i=null!=(r=e.redirectUrl)?r:this.redirectUrl)?i:window.location.origin+window.location.pathname,u=null!=(n=e.state)?n:this.generateState(),g=null!=(l=e.requestAccess)?l:this.requestAccess,h=null!=(c=this.origin)?c:this.getOriginFromRedirect(d);if(!this.isHttpOrigin(h))throw Error("Telegram origin must be a valid http(s) URL registered with BotFather. Pass origin when redirectUrl is not http(s).");let p=this.appendStateToRedirect(d,u);this.persistPendingLogin(u,{redirectUri:d,requestAccess:g}),localStorage.setItem(a.BaseSocialLogin.OAUTH_STATE_KEY,JSON.stringify({provider:"telegram",state:u}));let m=this.buildAuthUrl(h,g,p),f=this.openPopup(m);return new Promise((e,r)=>{if(!f){this.clearPendingTelegramState(u),r(Error("Unable to open login window. Please allow popups."));return}let i=!1,n=0,a=0,l=null,c=(e=!1)=>{if(clearTimeout(n),clearInterval(a),l&&(l(),l=null),this.clearPendingTelegramState(u),e)try{f.close()}catch(e){}},d=(e,t)=>{i||(i=!0,c(e),t())};l=(0,s.listenForOAuthResult)("telegram",u,{onResponse:r=>{if((null==r?void 0:r.provider)&&"telegram"!==r.provider)return;let{provider:o,type:i,_ts:n}=r,a=(0,t.__rest)(r,["provider","type","_ts"]);d(!0,()=>{e({provider:"telegram",result:a})})},onError:(e,t)=>{let i=e||"Telegram login was cancelled.";d(!0,()=>{r("USER_CANCELLED"===t?(0,o.createUserCancelledError)(i):(0,o.inferUserCancelledError)(i))})}}),n=window.setTimeout(()=>{d(!0,()=>{r(Error("Telegram login timed out."))})},3e5),a=window.setInterval(()=>{try{f.closed&&d(!1,()=>{r((0,o.createUserCancelledError)("Telegram login window was closed."))})}catch(e){clearInterval(a)}},1e3)})}async logout(){localStorage.removeItem(this.TOKENS_KEY)}async isLoggedIn(){let e=this.getStoredSession();if(!e)return{isLoggedIn:!1};let t=e.expiresAt>Date.now();return t||localStorage.removeItem(this.TOKENS_KEY),{isLoggedIn:t}}async getAuthorizationCode(){throw Error("getAuthorizationCode is not available for Telegram.")}async refresh(){throw Error("Telegram refresh is not supported. Call login() again.")}async handleOAuthRedirect(e,t){var r;let o=e.searchParams,i=o.get("state");if(!i)return null;if(t&&t!==i)return{error:"Telegram login session expired or state mismatch."};let n=this.consumePendingLogin(i);if(!n)return localStorage.removeItem(a.BaseSocialLogin.OAUTH_STATE_KEY),{error:"Telegram login session expired or state mismatch."};let s=o.get("error");if(s)return localStorage.removeItem(a.BaseSocialLogin.OAUTH_STATE_KEY),{error:o.get("error_description")||s};let l=o.get("id"),c=o.get("auth_date"),d=o.get("hash");if(!l||!c||!d)return localStorage.removeItem(a.BaseSocialLogin.OAUTH_STATE_KEY),{error:"Telegram login payload is incomplete."};let u={id:l,firstName:null!=(r=o.get("first_name"))?r:"",lastName:o.get("last_name"),username:o.get("username"),photoUrl:o.get("photo_url")},g=Number(c);if(!Number.isInteger(g))return localStorage.removeItem(a.BaseSocialLogin.OAUTH_STATE_KEY),{error:"Telegram auth_date is invalid."};let h={profile:u,authDate:g,hash:d,requestAccess:n.requestAccess};return this.persistSession({expiresAt:1e3*g+this.SESSION_TTL_MS}),localStorage.removeItem(a.BaseSocialLogin.OAUTH_STATE_KEY),{provider:"telegram",result:h}}buildAuthUrl(e,t,r){var o;let i=new URLSearchParams({bot_id:null!=(o=this.botId)?o:"",origin:e,request_access:t,return_to:r,embed:"1",mobile:"1"});return this.languageCode&&i.set("lang",this.languageCode),`https://oauth.telegram.org/auth?${i.toString()}`}openPopup(e){let t=window.screenX+(window.outerWidth-500)/2,r=window.screenY+(window.outerHeight-650)/2;return window.open(e,"TelegramLogin",`width=500,height=650,left=${t},top=${r},popup=1`)}appendStateToRedirect(e,t){try{let r=new URL(e);return r.searchParams.set("state",t),r.toString()}catch(t){return e}}isHttpOrigin(e){if(!e)return!1;try{let t=new URL(e);return"http:"===t.protocol||"https:"===t.protocol}catch(e){return!1}}getOriginFromRedirect(e){return this.isHttpOrigin(e)?new URL(e).origin:void 0}persistSession(e){localStorage.setItem(this.TOKENS_KEY,JSON.stringify(e))}getStoredSession(){let e=localStorage.getItem(this.TOKENS_KEY);if(!e)return null;try{return JSON.parse(e)}catch(e){return console.warn("Failed to parse stored Telegram session",e),null}}persistPendingLogin(e,t){localStorage.setItem(`${this.STATE_PREFIX}${e}`,JSON.stringify(t))}consumePendingLogin(e){let t=`${this.STATE_PREFIX}${e}`,r=localStorage.getItem(t);if(localStorage.removeItem(t),!r)return null;try{return JSON.parse(r)}catch(e){return console.warn("Failed to parse pending Telegram login payload",e),null}}clearPendingTelegramState(e){try{localStorage.removeItem(`${this.STATE_PREFIX}${e}`);let t=localStorage.getItem(a.BaseSocialLogin.OAUTH_STATE_KEY);if(!t)return;let r=JSON.parse(t);"telegram"===r.provider&&r.state===e&&localStorage.removeItem(a.BaseSocialLogin.OAUTH_STATE_KEY)}catch(e){}}generateState(){return[...crypto.getRandomValues(new Uint8Array(16))].map(e=>e.toString(16).padStart(2,"0")).join("")}}e.s(["TelegramSocialLogin",0,l],4002)},61250,e=>{"use strict";let t="tiktok",r=e=>{if(null!=e&&""!==e)return Array.isArray(e)?e.filter(Boolean).join(","):e};e.s(["TIKTOK_PROVIDER_ID",0,t,"asTikTokLoginResult",0,e=>({provider:"tiktok",result:e.result}),"buildTikTokLoginOptions",0,(e={})=>{var o;let i=r(null!=(o=e.scope)?o:e.scopes);return Object.assign(Object.assign({providerId:t},void 0===i?{}:{scope:i}),{state:e.state,codeVerifier:e.codeVerifier,redirectUrl:e.redirectUrl})},"buildTikTokOAuthConfig",0,e=>{var t,o,i,n;return{appId:e.clientKey,clientSecret:e.clientSecret,authorizationBaseUrl:"https://www.tiktok.com/v2/auth/authorize/",accessTokenEndpoint:"https://open.tiktokapis.com/v2/oauth/token/",redirectUrl:e.redirectUrl,responseType:"code",pkceEnabled:null==(t=e.pkceEnabled)||t,scope:null!=(i=r(null!=(o=e.scope)?o:e.scopes))?i:"user.info.basic",clientIdParamName:"client_key",clientSecretParamName:"client_secret",logsEnabled:null!=(n=e.logsEnabled)&&n}},"isTikTokOAuthResult",0,e=>"oauth2"===e.provider&&e.result.providerId===t])},84995,e=>{"use strict";var t=e.i(90571),r=e.i(87433),o=e.i(77954);class i extends r.BaseSocialLogin{constructor(){super(...arguments),this.clientId=null,this.redirectUrl=null,this.defaultScopes=["tweet.read","users.read"],this.forceLogin=!1,this.TOKENS_KEY="capgo_social_login_twitter_tokens_v1",this.STATE_PREFIX="capgo_social_login_twitter_state_"}async initialize(e,t,r,o,i){this.clientId=e,this.redirectUrl=null!=t?t:null,(null==r?void 0:r.length)&&(this.defaultScopes=r),this.forceLogin=null!=o&&o,this.audience=null!=i?i:void 0}async login(e){var i,n,a,s,l,c;if(!this.clientId)throw Error("Twitter Client ID not configured. Call initialize() first.");let d=null!=(n=null!=(i=e.redirectUrl)?i:this.redirectUrl)?n:window.location.origin+window.location.pathname,u=(null==(a=e.scopes)?void 0:a.length)?e.scopes:this.defaultScopes,g=null!=(s=e.state)?s:this.generateState(),h=null!=(l=e.codeVerifier)?l:this.generateCodeVerifier(),p=await this.generateCodeChallenge(h);this.persistPendingLogin(g,{clientId:this.clientId,codeVerifier:h,redirectUri:d,scopes:u}),localStorage.setItem(r.BaseSocialLogin.OAUTH_STATE_KEY,JSON.stringify({provider:"twitter",state:g}));let m=new URLSearchParams({response_type:"code",client_id:this.clientId,redirect_uri:d,scope:u.join(" "),state:g,code_challenge:p,code_challenge_method:"S256"});(null!=(c=e.forceLogin)?c:this.forceLogin)===!0&&m.set("force_login","true"),this.audience&&m.set("audience",this.audience);let f=`https://x.com/i/oauth2/authorize?${m.toString()}`,_=window.screenX+(window.outerWidth-500)/2,w=window.screenY+(window.outerHeight-650)/2,T=window.open(f,"XLogin",`width=500,height=650,left=${_},top=${w},popup=1`);return new Promise((e,r)=>{if(!T)return void r(Error("Unable to open login window. Please allow popups."));let i=`twitter_oauth_${g}`,n=null;try{n=new BroadcastChannel(i)}catch(e){}let a=(e,t,r)=>{window.removeEventListener("message",e),clearTimeout(t),clearInterval(r),n&&n.close()},s=i=>{if((null==i?void 0:i.type)==="oauth-response"){if((null==i?void 0:i.provider)&&"twitter"!==i.provider)return!1;a(l,c,d);let{provider:r,type:o}=i;return e({provider:"twitter",result:(0,t.__rest)(i,["provider","type"])}),!0}return(null==i?void 0:i.type)==="oauth-error"&&(null==i||!i.provider||"twitter"===i.provider)&&(a(l,c,d),r((0,o.inferUserCancelledError)(i.error||"Twitter login was cancelled.")),!0)};n&&(n.onmessage=e=>{s(e.data)});let l=e=>{e.origin===window.location.origin&&s(e.data)};window.addEventListener("message",l);let c=window.setTimeout(()=>{a(l,c,d);try{T.close()}catch(e){}r(Error("Twitter login timed out."))},3e5),d=window.setInterval(()=>{try{T.closed&&(a(l,c,d),r((0,o.createUserCancelledError)("Twitter login window was closed.")))}catch(e){clearInterval(d)}},1e3)})}async logout(){localStorage.removeItem(this.TOKENS_KEY)}async isLoggedIn(){let e=this.getStoredTokens();if(!e)return{isLoggedIn:!1};let t=e.expiresAt>Date.now();return t||localStorage.removeItem(this.TOKENS_KEY),{isLoggedIn:t}}async getAuthorizationCode(){let e=this.getStoredTokens();if(!e)throw Error("Twitter access token is not available.");return{accessToken:e.accessToken}}async refresh(){let e=this.getStoredTokens();if(!(null==e?void 0:e.refreshToken))throw Error("No Twitter refresh token is available. Include offline.access scope to receive one.");await this.refreshWithRefreshToken(e.refreshToken)}async handleOAuthRedirect(e,t){let o=e.searchParams,i=null!=t?t:o.get("state");if(!i)return null;let n=this.consumePendingLogin(i);if(!n)return localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY),{error:"Twitter login session expired or state mismatch."};let a=o.get("error");if(a)return localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY),{error:o.get("error_description")||a};let s=o.get("code");if(!s)return localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY),{error:"Twitter authorization code missing from redirect."};try{let e=await this.exchangeAuthorizationCode(s,n),t=await this.fetchProfile(e.access_token),r=Date.now()+1e3*e.expires_in,o=e.scope.split(" ").filter(Boolean);return this.persistTokens({accessToken:e.access_token,refreshToken:e.refresh_token,expiresAt:r,scope:o,tokenType:e.token_type,userId:t.id,profile:t}),{provider:"twitter",result:{accessToken:{token:e.access_token,tokenType:e.token_type,expires:new Date(r).toISOString(),userId:t.id},refreshToken:e.refresh_token,scope:o,tokenType:e.token_type,expiresIn:e.expires_in,profile:t}}}catch(e){if(e instanceof Error)return{error:e.message};return{error:"Twitter login failed unexpectedly."}}finally{localStorage.removeItem(r.BaseSocialLogin.OAUTH_STATE_KEY)}}async exchangeAuthorizationCode(e,t){let r=new URLSearchParams({grant_type:"authorization_code",client_id:t.clientId,code:e,redirect_uri:t.redirectUri,code_verifier:t.codeVerifier}),o=await fetch("https://api.x.com/2/oauth2/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!o.ok){let e=await o.text();throw Error(`Twitter token exchange failed (${o.status}): ${e}`)}return await o.json()}async refreshWithRefreshToken(e){var t,r;let o=new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:null!=(t=this.clientId)?t:""}),i=await fetch("https://api.x.com/2/oauth2/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:o.toString()});if(!i.ok){let e=await i.text();throw Error(`Twitter refresh failed (${i.status}): ${e}`)}let n=await i.json(),a=await this.fetchProfile(n.access_token),s=Date.now()+1e3*n.expires_in,l=n.scope.split(" ").filter(Boolean);this.persistTokens({accessToken:n.access_token,refreshToken:null!=(r=n.refresh_token)?r:e,expiresAt:s,scope:l,tokenType:n.token_type,userId:a.id,profile:a})}async fetchProfile(e){var t,r,o,i;let n=await fetch("https://api.x.com/2/users/me?user.fields=profile_image_url,verified,name,username",{headers:{Authorization:`Bearer ${e}`}});if(!n.ok){let e=await n.text();throw Error(`Unable to fetch Twitter profile (${n.status}): ${e}`)}let a=await n.json();if(!a.data)throw Error("Twitter profile payload is missing data.");return{id:a.data.id,username:a.data.username,name:null!=(t=a.data.name)?t:null,profileImageUrl:null!=(r=a.data.profile_image_url)?r:null,verified:null!=(o=a.data.verified)&&o,email:null!=(i=a.data.email)?i:null}}persistTokens(e){localStorage.setItem(this.TOKENS_KEY,JSON.stringify(e))}getStoredTokens(){let e=localStorage.getItem(this.TOKENS_KEY);if(!e)return null;try{return JSON.parse(e)}catch(e){return console.warn("Failed to parse stored Twitter tokens",e),null}}persistPendingLogin(e,t){localStorage.setItem(`${this.STATE_PREFIX}${e}`,JSON.stringify(t))}consumePendingLogin(e){let t=`${this.STATE_PREFIX}${e}`,r=localStorage.getItem(t);if(localStorage.removeItem(t),!r)return null;try{return JSON.parse(r)}catch(e){return console.warn("Failed to parse pending Twitter login payload",e),null}}generateState(){return[...crypto.getRandomValues(new Uint8Array(16))].map(e=>e.toString(16).padStart(2,"0")).join("")}generateCodeVerifier(){let e=new Uint8Array(64);return crypto.getRandomValues(e),Array.from(e).map(e=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"[e%66]).join("")}async generateCodeChallenge(e){let t=new TextEncoder().encode(e),r=await crypto.subtle.digest("SHA-256",t);return this.base64UrlEncode(new Uint8Array(r))}base64UrlEncode(e){let t="";return e.forEach(e=>t+=String.fromCharCode(e)),btoa(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}}e.s(["TwitterSocialLogin",0,i])},90571,e=>{"use strict";"function"==typeof SuppressedError&&SuppressedError,e.s(["__rest",0,function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,o=Object.getOwnPropertySymbols(e);it.indexOf(o[i])&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(r[o[i]]=e[o[i]]);return r}])}]);