1"use strict";(self.webpackChunkapp=self.webpackChunkapp||[]).push([[3878],{3878(ne,X,F){F.d(X,{SocialLoginWeb:()=>$});var c=F(467),j=F(5083);let T=(()=>{class b extends j.E_{constructor(){super()}parseJwt(e){const t=e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),n=decodeURIComponent(atob(t).split("").map(i=>"%"+("00"+i.charCodeAt(0).toString(16)).slice(-2)).join(""));return JSON.parse(n)}loadScript(e){return(0,c.A)(function*(){return new Promise((r,t)=>{const n=document.createElement("script");n.src=e,n.async=!0,n.onload=()=>{r()},n.onerror=t,document.body.appendChild(n)})})()}}return b.OAUTH_STATE_KEY="social_login_oauth_pending",b})();const Q=["access_denied","access denied","user_cancelled_authorize","user_cancelled","user cancelled","user canceled","login cancelled","login canceled","popup closed","window was closed"];function K(b){const o=new Error(b);return o.code="USER_CANCELLED",o}function x(b){const o=b.toLowerCase();return Q.some(e=>o.includes(e))?K(b):new Error(b)}class q extends T{constructor(){super(...arguments),this.clientId=null,this.redirectUrl=null,this.scriptLoaded=!1,this.scriptUrl="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js",this.useProperTokenExchange=!1}initialize(o,e){var r=this;return(0,c.A)(function*(t,n,i=!1){r.clientId=t,r.redirectUrl=n||null,r.useProperTokenExchange=i,t&&(yield r.loadAppleScript())}).apply(this,arguments)}login(o){var e=this;return(0,c.A)(function*(){if(!e.clientId)throw new Error("Apple Client ID not set. Call initialize() first.");if(!e.scriptLoaded)throw new Error("Apple Sign-In script not loaded.");return new Promise((r,t)=>{var n,i;AppleID.auth.init({clientId:null!==(n=e.clientId)&&void 0!==n?n:"",scope:(null===(i=o.scopes)||void 0===i?void 0:i.join(" "))||"name email",redirectURI:e.redirectUrl||window.location.href,state:o.state,nonce:o.nonce,usePopup:!0}),AppleID.auth.signIn().then(s=>{var l,a,d,g,p;let u=null;u=e.useProperTokenExchange?null:{token:s.authorization.code||""};const f=Object.assign({profile:{user:s.user||"",email:(null===(l=s.user)||void 0===l?void 0:l.email)||null,givenName:(null===(d=null===(a=s.user)||void 0===a?void 0:a.name)||void 0===d?void 0:d.firstName)||null,familyName:(null===(p=null===(g=s.user)||void 0===g?void 0:g.name)||void 0===p?void 0:p.lastName)||null},accessToken:u,idToken:s.authorization.id_token||null},e.useProperTokenExchange&&{authorizationCode:s.authorization.code});r({provider:"apple",result:f})}).catch(s=>{var l,a,d;const g=null!==(d=null!==(a=null!==(l=null==s?void 0:s.message)&&void 0!==l?l:null==s?void 0:s.localizedDescription)&&void 0!==a?a:null==s?void 0:s.error)&&void 0!==d?d:"Apple login failed";t(x(g))})})})()}logout(){return(0,c.A)(function*(){console.log("Apple logout: Session should be managed on the client side")})()}isLoggedIn(){return(0,c.A)(function*(){return console.log("Apple login status should be managed on the client side"),{isLoggedIn:!1}})()}getAuthorizationCode(){return(0,c.A)(function*(){throw console.log("Apple authorization code should be stored during login"),new Error("Apple authorization code not available")})()}refresh(){return(0,c.A)(function*(){console.log("Apple refresh not available on web")})()}loadAppleScript(){var o=this;return(0,c.A)(function*(){if(!o.scriptLoaded)return o.loadScript(o.scriptUrl).then(()=>{o.scriptLoaded=!0})})()}}class Z extends T{constructor(){super(...arguments),this.appId=null,this.scriptLoaded=!1,this.locale="en_US"}initialize(o,e){var r=this;return(0,c.A)(function*(){r.appId=o,e&&(r.locale=e),o&&(yield r.loadFacebookScript(r.locale),FB.init({appId:r.appId,version:"v17.0",xfbml:!0,cookie:!0}))})()}login(o){var e=this;return(0,c.A)(function*(){if(!e.appId)throw new Error("Facebook App ID not set. Call initialize() first.");return new Promise((r,t)=>{var n;let i=!1,s=!1;const l=d=>{if(i)return;if(null==d||!d.accessToken||!d.userID)return i=!0,void t(new Error("Facebook login failed"));const g=d.accessToken,p=d.userID;FB.api("/me",{fields:"id,name,email,picture"},u=>{var f,k;i=!0;const h={accessToken:{token:g,userId:p},profile:{userID:u.id,name:u.name,email:u.email||null,imageURL:(null===(k=null===(f=u.picture)||void 0===f?void 0:f.data)||void 0===k?void 0:k.url)||null,friendIDs:[],birthday:null,ageRange:null,gender:null,location:null,hometown:null,profileURL:null},idToken:null};r({provider:"facebook",result:h})})};FB.login(d=>{"connected"===d.status?l(d.authResponse):"not_authorized"===d.status||"unknown"===d.status?t(K("Facebook login was cancelled.")):i||s||(s=!0,e.waitForConnection().then(d=>l(d.authResponse)).catch(d=>{i||(i=!0,t(d))}))},null!==(n=o.permissions)&&void 0!==n&&n.length?{scope:o.permissions.join(",")}:void 0)})})()}logout(){return(0,c.A)(function*(){return new Promise(o=>{FB.logout(()=>
1o())})})()}isLoggedIn(){return(0,c.A)(function*(){return new Promise(o=>{FB.getLoginStatus(e=>{o({isLoggedIn:"connected"===e.status})})})})()}getAuthorizationCode(){return(0,c.A)(function*(){return new Promise((o,e)=>{FB.getLoginStatus(r=>{var t;"connected"===r.status?o({accessToken:(null===(t=r.authResponse)||void 0===t?void 0:t.accessToken)||""}):e(new Error("No Facebook authorization code available"))})})})()}refresh(o){var e=this;return(0,c.A)(function*(){yield e.login(o)})()}waitForConnection(o=12e4,e=500){const r=Date.now();return new Promise((t,n)=>{let i=!1;const s=()=>{i||FB.getLoginStatus(l=>{var a;if(!i){if("connected"===l.status&&null!==(a=l.authResponse)&&void 0!==a&&a.accessToken)return i=!0,void t(l);if("not_authorized"===l.status||"unknown"===l.status)return i=!0,void n(K("Facebook login was cancelled."));if(Date.now()-r>=o)return i=!0,void n(new Error("Facebook login failed or timed out"));setTimeout(s,e)}})};s()})}loadFacebookScript(o){var e=this;return(0,c.A)(function*(){if(e.scriptLoaded)return;const r=document.querySelector('script[src*="connect.facebook.net"]');return r&&r.remove(),e.loadScript(`https://connect.facebook.net/${o}/sdk.js`).then(()=>{e.scriptLoaded=!0})})()}}const V="Google refresh() is not available when using offline mode. Offline mode only returns serverAuthCode for backend token exchange. Send serverAuthCode to your backend and refresh tokens there, or switch google.mode to 'online' for client-side refresh.";class ee extends T{constructor(){super(...arguments),this.clientId=null,this.loginType="online",this.GOOGLE_TOKEN_REQUEST_URL="https://www.googleapis.com/oauth2/v3/tokeninfo",this.GOOGLE_STATE_KEY="capgo_social_login_google_state"}initialize(o,e,r,t){var n=this;return(0,c.A)(function*(){n.clientId=o,e&&(n.loginType=e),n.hostedDomain=r,n.redirectUrl=t})()}login(o){var e=this;return(0,c.A)(function*(){if(!e.clientId)throw new Error("Google Client ID not set. Call initialize() first.");let r=o.scopes||[];r.length>0?(r.includes("https://www.googleapis.com/auth/userinfo.email")||r.push("https://www.googleapis.com/auth/userinfo.email"),r.includes("https://www.googleapis.com/auth/userinfo.profile")||r.push("https://www.googleapis.com/auth/userinfo.profile"),r.includes("openid")||r.push("openid")):r=["https://www.googleapis.com/auth/userinfo.email","https://www.googleapis.com/auth/userinfo.profile","openid"];const t=o.nonce||Math.random().toString(36).substring(2);return e.traditionalOAuth({scopes:r,nonce:t,hostedDomain:e.hostedDomain,prompt:o.prompt})})()}logout(){var o=this;return(0,c.A)(function*(){if("offline"===o.loginType)return Promise.reject("Offline login doesn't store tokens. logout is not available");const e=o.getGoogleState();e&&(yield o.rawLogoutGoogle(e.accessToken))})()}isLoggedIn(){var o=this;return(0,c.A)(function*(){if("offline"===o.loginType)return Promise.reject("Offline login doesn't store tokens. isLoggedIn is not available");const e=o.getGoogleState();if(!e)return{isLoggedIn:!1};try{const r=yield o.accessTokenIsValid(e.accessToken),t=o.idTokenValid(e.idToken);if(r&&t)return{isLoggedIn:!0};try{yield o.rawLogoutGoogle(e.accessToken,!1)}catch(n){console.error("Access token is not valid, but cannot logout",n)}return{isLoggedIn:!1}}catch(r){return Promise.reject(r)}})()}getAuthorizationCode(){var o=this;return(0,c.A)(function*(){if("offline"===o.loginType)return Promise.reject("Offline login doesn't store tokens. getAuthorizationCode is not available");const e=o.getGoogleState();if(!e)throw new Error("No Google authorization code available");try{const r=yield o.accessTokenIsValid(e.accessToken),t=o.idTokenValid(e.idToken);if(r&&t)return{accessToken:e.accessToken,jwt:e.idToken};try{yield o.rawLogoutGoogle(e.accessToken,!1)}catch(n){console.error("Access token is not valid, but cannot logout",n)}throw new Error("No Google authorization code available")}catch(r){return Promise.reject(r)}})()}refresh(){var o=this;return(0,c.A)(function*(){return"offline"===o.loginType?(console.warn(`[SocialLogin] ${V}`),Promise.reject(new Error(V))):Promise.reject(new Error("Google refresh is not implemented on web. Use login() again to obtain a new token."))})()}handleOAuthRedirect(o){const e=o.searchParams,r=e.get("error");
1if(r)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:e.get("error_description")||r};const t=e.get("code");if(t&&e.has("scope"))return{provider:"google",result:{serverAuthCode:t,responseType:"offline"}};const n=o.hash.substring(1);if(console.log("handleOAuthRedirect",o.hash),!n)return null;const i=new URLSearchParams(n),s=i.get("error");if(s)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:i.get("error_description")||s};console.log("handleOAuthRedirect ok");const l=i.get("access_token"),a=i.get("id_token");if(l&&a){localStorage.removeItem(T.OAUTH_STATE_KEY);const d=this.parseJwt(a);return{provider:"google",result:{accessToken:{token:l},idToken:a,profile:{email:d.email||null,familyName:d.family_name||null,givenName:d.given_name||null,id:d.sub||null,name:d.name||null,imageUrl:d.picture||null},responseType:"online"}}}return null}accessTokenIsValid(o){var e=this;return(0,c.A)(function*(){const r=`${e.GOOGLE_TOKEN_REQUEST_URL}?access_token=${encodeURIComponent(o)}`;try{const t=yield fetch(r);if(!t.ok)return console.log(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. Response not successful. Status code: ${t.status}. Assuming that the token is not valid`),!1;const n=yield t.text();if(!n)throw console.error(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`),new Error(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. Response body is null`);let i;try{i=JSON.parse(n)}catch(a){throw console.error(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${a}`),new Error(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. Response body is not valid JSON. Error: ${a}`)}const s=i.expires_in;if(null==s)throw console.error(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`),new Error(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. Response JSON does not include 'expires_in'.`);let l;try{if(l=parseInt(s,10),isNaN(l))throw new Error("'expires_in' is not a valid integer")}catch(a){throw console.error(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${s} is not a valid integer. Error: ${a}`),new Error(`Invalid response from ${e.GOOGLE_TOKEN_REQUEST_URL}. 'expires_in': ${s} is not a valid integer. Error: ${a}`)}return l>5}catch(t){throw console.error(t),t}})()}idTokenValid(o){try{const e=this.parseJwt(o),r=Math.ceil(Date.now()/1e3)+5;return e.exp&&r<e.exp}catch{return!1}}rawLogoutGoogle(o){var e=this;return(0,c.A)(function*(r,t=null){if(null===t&&(t=yield e.accessTokenIsValid(r)),!0!==t)e.clearStateGoogle();else try{yield fetch(`https://accounts.google.com/o/oauth2/revoke?token=${encodeURIComponent(r)}`),e.clearStateGoogle()}catch{}}).apply(this,arguments)}persistStateGoogle(o,e){try{window.localStorage.setItem(this.GOOGLE_STATE_KEY,JSON.stringify({accessToken:o,idToken:e}))}catch(r){console.error("Cannot persist state google",r)}}clearStateGoogle(){try{window.localStorage.removeItem(this.GOOGLE_STATE_KEY)}catch(o){console.error("Cannot clear state google",o)}}getGoogleState(){try{const o=window.localStorage.getItem(this.GOOGLE_STATE_KEY);if(!o)return null;const{accessToken:e,idToken:r}=JSON.parse(o);return{accessToken:e,idToken:r}}catch(o){return console.error("Cannot get state google",o),null}}traditionalOAuth(o){var e=this;return(0,c.A)(function*({scopes:r,hostedDomain:t,nonce:n,prompt:i}){var s;const l=[...new Set([...r||[],"openid"])],a=new URLSearchParams(Object.assign(Object.assign({client_id:null!==(s=e.clientId)&&void 0!==s?s:"",redirect_uri:e.redirectUrl||window.location.origin+window.location.pathname,response_type:"offline"===e.loginType?"code":"token id_token",scope:l.join(" ")},n&&{nonce:n}),{include_granted_scopes:"true",state:"popup"}));void 0!==t&&a.append("hd",t),void 0!==i&&a.append("prompt",i);const d=`https://accounts.google.com/o/oauth2/v2/auth?${a.toString()}`,u=window.screenX+(window.outerWidth-500)/2,f=window.screenY+(window.outerHeight-600)/2;localStorage.setItem(T.OAUTH_STATE_KEY,JSON.stringify({provider:"google",loginType:e.loginType,nonce:n}));const k=window.open(d,"Google Sign In",`width=500,height=600,left=${u},top=${f},popup=1`);let h,O;const y=`google_oauth_${n||Date.now()}`;let I=null;try{I=new BroadcastChannel(y)}catch{}return new Promise((P,L)=>{if(!k)return void L(new Error("Failed to open popup"));const U=(E=!1)=>
1{if(window.removeEventListener("message",R),clearInterval(h),clearTimeout(O),I&&I.close(),E)try{k.close()}catch{}},z=E=>{if("online"===e.loginType){const{accessToken:A,idToken:v}=E;if(A&&v){const m=e.parseJwt(v);e.persistStateGoogle(A.token,v),P({provider:"google",result:{accessToken:{token:A.token},idToken:v,profile:{email:m.email||null,familyName:m.family_name||null,givenName:m.given_name||null,id:m.sub||null,name:m.name||null,imageUrl:m.picture||null},responseType:"online"}})}else L(new Error("Invalid OAuth response: missing accessToken or idToken"))}else{const{serverAuthCode:A}=E;if(!A)return void L(new Error("Invalid OAuth response: missing serverAuthCode"));P({provider:"google",result:{responseType:"offline",serverAuthCode:A}})}},R=E=>{var A,v,m,S;E.origin!==window.location.origin||null!==(v=null===(A=E.data)||void 0===A?void 0:A.source)&&void 0!==v&&v.startsWith("angular")||("oauth-response"===(null===(m=E.data)||void 0===m?void 0:m.type)?(U(!0),z(E.data)):"oauth-error"===(null===(S=E.data)||void 0===S?void 0:S.type)&&(U(!0),L(x(E.data.error||"User cancelled the OAuth flow"))))};I&&(I.onmessage=E=>{var A;const v=E.data;null!==(A=null==v?void 0:v.source)&&void 0!==A&&A.toString().startsWith("angular")||("oauth-response"===(null==v?void 0:v.type)?(U(!0),z(v)):"oauth-error"===(null==v?void 0:v.type)&&(U(!0),L(x(v.error||"User cancelled the OAuth flow"))))}),window.addEventListener("message",R),O=setTimeout(()=>{U(!0),L(new Error("OAuth timeout"))},3e5),h=setInterval(()=>{try{k.closed&&(U(),L(K("Popup closed")))}catch{clearInterval(h)}},1e3)})}).apply(this,arguments)}}var J=F(1635);class oe extends T{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(o){return o?"string"==typeof o?o:Array.isArray(o)?o.filter(
1Boolean).join(" "):"":""}normalizeConfig(o,e){var r,t,n,i,s,l,a,d;const g=null!==(r=e.appId)&&void 0!==r?r:e.clientId,p=null!==(t=e.authorizationBaseUrl)&&void 0!==t?t:e.authorizationEndpoint,u=null!==(n=e.accessTokenEndpoint)&&void 0!==n?n:e.tokenEndpoint,f=null!==(i=e.logoutUrl)&&void 0!==i?i:e.endSessionEndpoint,k=null!==(s=e.scope)&&void 0!==s?s:e.scopes;if(!g)throw new Error(`OAuth2 provider '${o}' requires appId (or clientId).`);if(!e.redirectUrl)throw new Error(`OAuth2 provider '${o}' requires redirectUrl.`);if(!p&&!e.issuerUrl)throw new Error(`OAuth2 provider '${o}' requires authorizationBaseUrl (or authorizationEndpoint) or issuerUrl.`);return{appId:g,clientSecret:e.clientSecret,issuerUrl:e.issuerUrl,authorizationBaseUrl:p,accessTokenEndpoint:u,redirectUrl:e.redirectUrl,resourceUrl:e.resourceUrl,responseType:null!==(l=e.responseType)&&void 0!==l?l:"code",pkceEnabled:null===(a=e.pkceEnabled)||void 0===a||a,scope:this.normalizeScopeValue(k),additionalParameters:e.additionalParameters,loginHint:e.loginHint,prompt:e.prompt,additionalTokenParameters:e.additionalTokenParameters,additionalResourceHeaders:e.additionalResourceHeaders,logoutUrl:f,postLogoutRedirectUrl:e.postLogoutRedirectUrl,additionalLogoutParameters:e.additionalLogoutParameters,logsEnabled:null!==(d=e.logsEnabled)&&void 0!==d&&d}}ensureDiscovered(o){var e=this;return(0,c.A)(function*(){const r=e.providers.get(o);if(null==r||!r.issuerUrl||r.authorizationBaseUrl&&r.accessTokenEndpoint)return;const n=`${r.issuerUrl.replace(/\/+$/,"")}/.well-known/openid-configuration`,i=yield fetch(n);if(!i.ok){const g=yield i.text().catch(()=>"");throw new Error(`OAuth2 discovery failed (${i.status}): ${g||n}`)}const s=yield i.json(),l=s.authorization_endpoint,a=s.token_endpoint,d=s.end_session_endpoint;!r.authorizationBaseUrl&&"string"==typeof l&&(r.authorizationBaseUrl=l),!r.accessTokenEndpoint&&"string"==typeof a&&(r.accessTokenEndpoint=a),!r.logoutUrl&&"string"==typeof d&&(r.logoutUrl=d),r.logsEnabled&&console.log(`[OAuth2:${o}] Discovery resolved`,{authorizationBaseUrl:r.authorizationBaseUrl,accessTokenEndpoint:r.accessTokenEndpoint,logoutUrl:r.logoutUrl}),e.persistConfiguration(o,r)})()}initializeProviders(o){var e=this;return(0,c.A)(function*(){for(const[r,t]of Object.entries(o)){const n=e.normalizeConfig(r,t);e.providers.set(r,n),n.logsEnabled&&console.log(`[OAuth2:${r}] Initialized with config:`,{appId:n.appId,issuerUrl:n.issuerUrl,authorizationBaseUrl:n.authorizationBaseUrl,redirectUrl:n.redirectUrl,responseType:n.responseType,pkceEnabled:n.pkceEnabled}),yield e.ensureDiscovered(r),e.persistConfiguration(r,n)}})()}getProvider(o){const e=this.providers.get(o);if(!e)throw new Error(`OAuth2 provider '${o}' not configured. Call initialize() first.`);return e}getTokensKey(o){return`${this.TOKENS_KEY_PREFIX}${o}`}getConfigKey(o){return`${this.CONFIG_KEY_PREFIX}${o}`}persistConfiguration(o,e){try{localStorage.setItem(this.getConfigKey(o),JSON.stringify(e))}catch(r){console.warn(`Failed to persist OAuth2 configuration for provider '${o}'`,r)}}restoreConfigurationsFromStorage(){const o=Object.keys(localStorage);for(const e of o)if(e.startsWith(this.CONFIG_KEY_PREFIX)){const r=e.substring(this.CONFIG_KEY_PREFIX.length);try{const t=localStorage.getItem(e);if(t){const n=JSON.parse(t);this.providers.set(r,n)}}catch(t){console.warn(`Failed to restore OAuth2 configuration for provider '${r}'`,t)}}}login(o){var e=this;return(0,c.A)(function*(){var r,t,n,i,s,l,a,d,g;const{providerId:p}=o,u=e.getProvider(p);yield e.ensureDiscovered(p);const f=null!==(r=o.redirectUrl)&&void 0!==r?r:u.redirectUrl,k=e.normalizeScopeValue(null!==(n=null!==(t=o.scope)&&void 0!==t?t:o.scopes)&&void 0!==n?n:u.scope),h=null!==(i=o.state)&&void 0!==i?i:e.generateState(),O=null!==(s=o.codeVerifier)&&void 0!==s?s:e.generateCodeVerifier(),y=new URLSearchParams({response_type:u.responseType,client_id:u.appId,redirect_uri:f,state:h});k&&y.set("scope",k);const I=Object.assign(Object.assign({},null!==(l=u.additionalParameters)&&void 0!==l?l:{}),null!==(a=o.additionalParameters)&&void 0!==a?a:{}),P=null!==(d=o.loginHint)&&void 0!==d?d:u.loginHint,L=null!==(g=o.prompt)&&void 0!==g?g:u.prompt;if(P&&!("login_hint"in I)&&(I.login_hint=P),L&&!("prompt"in I)&&(I.prompt=L),"code"===u.responseType&&u.pkceEnabled){const m=yield e.generateCodeChallenge(O);
1y.set("code_challenge",m),y.set("code_challenge_method","S256")}for(const[m,S]of Object.entries(I))void 0!==S&&y.set(m,S);if(e.persistPendingLogin(h,{providerId:p,codeVerifier:O,redirectUri:f,scope:k}),localStorage.setItem(T.OAUTH_STATE_KEY,JSON.stringify({provider:"oauth2",providerId:p,state:h})),!u.authorizationBaseUrl)throw new Error(`OAuth2 provider '${p}' is missing authorizationBaseUrl (discovery may have failed).`);const U=`${u.authorizationBaseUrl}?${y.toString()}`;if(u.logsEnabled&&console.log(`[OAuth2:${p}] Opening authorization URL:`,U),"redirect"===o.flow)return window.location.assign(U),new Promise(()=>{});const E=window.screenX+(window.outerWidth-500)/2,A=window.screenY+(window.outerHeight-650)/2,v=window.open(U,"OAuth2Login",`width=500,height=650,left=${E},top=${A},popup=1`);return new Promise((m,S)=>{if(!v)return void S(new Error("Unable to open login window. Please allow popups."));const w=`oauth2_${h}`;let C=null;try{C=new BroadcastChannel(w)}catch{u.logsEnabled&&console.log(`[OAuth2:${p}] BroadcastChannel not supported, using postMessage only`)}const N=(_,B,W)=>{window.removeEventListener("message",_),clearTimeout(B),clearInterval(W),C&&C.close()},Y=_=>{if("oauth-response"===(null==_?void 0:_.type)){if(null!=_&&_.provider&&"oauth2"!==_.provider||null!=_&&_.providerId&&_.providerId!==p)return!1;N(D,H,G);const te=(0,J.Tt)(_,["provider","type"]);return m({provider:"oauth2",result:te}),!0}return!("oauth-error"!==(null==_?void 0:_.type)||null!=_&&_.provider&&"oauth2"!==_.provider||(N(D,H,G),S(x(_.error||"OAuth2 login was cancelled.")),0))};C&&(C.onmessage=_=>{Y(_.data)});const D=_=>{_.origin===window.location.origin&&Y(_.data)};window.addEventListener("message",D);const H=window.setTimeout(()=>{N(D,H,G);try{v.close()}catch{}S(new Error("OAuth2 login timed out."))},3e5),G=window.setInterval(()=>{try{v.closed&&(N(D,H,G),S(K("OAuth2 login window was closed.")))}catch{clearInterval(G),u.logsEnabled&&console.log(`[OAuth2:${p}] Cannot check popup.closed due to cross-origin restrictions. Relying on message handlers and timeout.`)}},1e3)})})()}logout(o){var e=this;return(0,c.A)(function*(){yield e.ensureDiscovered(o);const r=e.providers.get(o),t=e.getStoredTokens(o);if(localStorage.removeItem(e.getTokensKey(o)),null!=r&&r.logoutUrl)try{const n=new URL(r.logoutUrl);null!=t&&t.idToken&&n.searchParams.set("id_token_hint",t.idToken);const i=r.postLogoutRedirectUrl;if(i&&n.searchParams.set("post_logout_redirect_uri",i),r.additionalLogoutParameters)for(const[s,l]of Object.entries(r.additionalLogoutParameters))n.searchParams.set(s,l);window.open(n.toString(),"_blank")}catch{window.open(r.logoutUrl,"_blank")}})()}isLoggedIn(o){var e=this;return(0,c.A)(function*(){const r=e.getStoredTokens(o);if(!r)return{isLoggedIn:!1};const t=r.expiresAt>Date.now();return t||localStorage.removeItem(e.getTokensKey(o)),{isLoggedIn:t}})()}getAuthorizationCode(o){var e=this;return(0,c.A)(function*(){const r=e.getStoredTokens(o);if(!r)throw new Error(`OAuth2 access token is not available for provider '${o}'.`);return{accessToken:r.accessToken,jwt:r.idToken}})()}refresh(o){var e=this;return(0,c.A)(function*(){yield e.refreshToken(o)})()}refreshToken(o,e,r){var t=this;return(0,c.A)(function*(){var n,i,s,l,a,d;yield t.ensureDiscovered(o);const g=t.getProvider(o),p=t.getStoredTokens(o),u=null!=e?e:null==p?void 0:p.refreshToken;if(!u)throw new Error(`No OAuth2 refresh token is available for provider '${o}'. Include offline_access scope to receive one.`);if(!g.accessTokenEndpoint)throw new Error(`No accessTokenEndpoint configured for provider '${o}'.`);const f=yield t.refreshWithRefreshToken(o,u,r),k=f.expires_in?Date.now()+1e3*f.expires_in:Date.now()+36e5,h=null!==(s=null!==(i=null===(n=f.scope)||void 0===n?void 0:n.split(" ").filter(Boolean))&&void 0!==i?i:null==p?void 0:p.scope)&&void 0!==s?s:[];let O=null;g.resourceUrl&&(O=yield t.fetchResource(o,f.access_token));const y=null!==(l=f.refresh_token)&&void 0!==l?l:u;return t.persistTokens(o,{accessToken:f.access_token,refreshToken:y,idToken:f.id_token,expiresAt:k,scope:h,tokenType:f.token_type}),{providerId:o,accessToken:{token:f.access_token,tokenType:f.token_type,expires:new Date(k).toISOString(),refreshToken:y},idToken:null!==(a=f.id_token)&&void 0!==a?a:null,refreshToken:null!=y?y:null,resourceData:O,scope:h,tokenType:f.token_type,expires
1In:null!==(d=f.expires_in)&&void 0!==d?d:null}})()}handleOAuthRedirect(o,e){var r=this;return(0,c.A)(function*(){var t,n,i,s,l;const a=new URLSearchParams(o.search);new URLSearchParams(o.hash.slice(1)).forEach((h,O)=>{a.set(O,h)});const g=null!=e?e:a.get("state");if(!g)return null;const p=r.consumePendingLogin(g);if(!p)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:"OAuth2 login session expired or state mismatch."};const{providerId:u}=p;yield r.ensureDiscovered(u);const f=r.providers.get(u);if(!f)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:`OAuth2 provider '${u}' configuration not found.`};const k=a.get("error");if(k)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:a.get("error_description")||k};try{let h;if(a.has("code")){const P=a.get("code");if(!P)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:"OAuth2 authorization code missing from redirect."};h=yield r.exchangeAuthorizationCode(u,P,p)}else{if(!a.has("access_token"))return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:"No authorization code or access token in redirect."};h={access_token:a.get("access_token"),token_type:a.get("token_type")||"bearer",expires_in:a.has("expires_in")?parseInt(a.get("expires_in"),10):void 0,scope:a.get("scope")||void 0,id_token:a.get("id_token")||void 0}}const O=h.expires_in?Date.now()+1e3*h.expires_in:Date.now()+36e5,y=null!==(n=null===(t=h.scope)||void 0===t?void 0:t.split(" ").filter(Boolean))&&void 0!==n?n:[];let I=null;return f.resourceUrl&&(I=yield r.fetchResource(u,h.access_token)),r.persistTokens(u,{accessToken:h.access_token,refreshToken:h.refresh_token,idToken:h.id_token,expiresAt:O,scope:y,tokenType:h.token_type}),{provider:"oauth2",result:{providerId:u,accessToken:{token:h.access_token,tokenType:h.token_type,expires:new Date(O).toISOString(),refreshToken:h.refresh_token},idToken:null!==(i=h.id_token)&&void 0!==i?i:null,refreshToken:null!==(s=h.refresh_token)&&void 0!==s?s:null,resourceData:I,scope:y,tokenType:h.token_type,expiresIn:null!==(l=h.expires_in)&&void 0!==l?l:null}}}catch(h){return h instanceof Error?{error:h.message}:{error:"OAuth2 login failed unexpectedly."}}finally{localStorage.removeItem(T.OAUTH_STATE_KEY)}})()}exchangeAuthorizationCode(o,e,r){var t=this;return(0,c.A)(function*(){const n=t.getProvider(o);if(!n.accessTokenEndpoint)throw new Error(`No accessTokenEndpoint configured for provider '${o}'.`);const i=new URLSearchParams({grant_type:"authorization_code",client_id:n.appId,code:e,redirect_uri:r.redirectUri});if(n.pkceEnabled&&i.set("code_verifier",r.codeVerifier),n.clientSecret&&i.set("client_secret",n.clientSecret),n.additionalTokenParameters)for(const[l,a]of Object.entries(n.additionalTokenParameters))i.set(l,a);n.logsEnabled&&console.log(`[OAuth2:${o}] Exchanging code at:`,n.accessTokenEndpoint);const s=yield fetch(n.accessTokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()});if(!s.ok){const l=yield s.text();throw new Error(`OAuth2 token exchange failed (${s.status}): ${l}`)}return yield s.json()})()}refreshWithRefreshToken(o,e,r){var t=this;return(0,c.A)(function*(){const n=t.getProvider(o);if(!n.accessTokenEndpoint)throw new Error(`No accessTokenEndpoint configured for provider '${o}'.`);const i=new URLSearchParams({grant_type:"refresh_token",refresh_token:e,client_id:n.appId});if(n.clientSecret&&i.set("client_secret",n.clientSecret),n.additionalTokenParameters)for(const[l,a]of Object.entries(n.additionalTokenParameters))i.set(l,a);if(r)for(const[l,a]of Object.entries(r))i.set(l,a);const s=yield fetch(n.accessTokenEndpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:i.toString()});if(!s.ok){const l=yield s.text();throw new Error(`OAuth2 refresh failed (${s.status}): ${l}`)}return yield s.json()})()}fetchResource(o,e){var r=this;return(0,c.A)(function*(){const t=r.getProvider(o);if(!t.resourceUrl)throw new Error(`No resourceUrl configured for provider '${o}'.`);const n={Authorization:`Bearer ${e}`};t.additionalResourceHeaders&&Object.assign(n,t.additionalResourceHeaders);const i=yield fetch(t.resourceUrl,{headers:n});if(!i.ok){const s=yield i.text();throw new Error(`Unable to fetch OAuth2 resource (${i.status}): ${s}`)}return yield i.json()})()}persistTokens(o,e){localStorage.setItem(this.getTokensKey(o),JSON.stringify(e))}getStoredTokens(o){const e=localStorage.getItem(this.getTokensKey(o));if(!e)return null;try{return JSON.parse(e)}catch(r){return console.warn(`Failed to parse stored OAuth2 tokens for provider '${o}'`,r),null}}persistPendingLogin(o,e){localStorage.setItem(`${this.STATE_PREFIX}${o}`,JSON.stringify(e))}consumePendingLogin(o){const e=`${this.STATE_PREFIX}${o}`,r=localStorage.getItem(e);if(localStorage.removeItem(e),!r)return null;try{return JSON.parse(r)}catch(t){return console.warn("Failed to parse pending OAuth2 login payload",t),null}}generateState(){return[...crypto.getRandomValues(new Uint8Array(16))].map(o=>o.toString(16).padStart(2,"0")).join("")}generateCodeVerifier(){const o=new Uint8Array(64);return crypto.getRandomValues(o),Array.from(o).map(e=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"[e%66]).join("")}generateCodeChallenge(o){var e=this;return(0,c.A)(function*(){const t=(new TextEncoder).encode(o),n=yield crypto.subtle.digest("SHA-256",t);return e.base64UrlEncode(new Uint8Array(n))})()}base64UrlEncode(o){let e="";return o.forEach(r=>e+=String.fromCharCode(r)),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}decodeIdToken(o){const e=o.split(".");if(e.length<2)throw new Error("Invalid JWT: missing parts");const t=e[1].replace(/-/g,"+").replace(/_/g,"/"),n=t+"=".repeat((4-t.length%4)%4),i=atob(n);return JSON.parse(i)}getAccessTokenExpirationDate(o){const e=this.getStoredTokens(o);return null!=e&&e.expiresAt?{expirationDate:new Date(e.expiresAt).toISOString()}:{expirationDate:null}}isAccessTokenAvailable(o){const e=this.getStoredTokens(o);return{isAvailable:!(null==e||!e.accessToken)}}isAccessTokenExpired(o){const e=this.getStoredTokens(o);return null!=e&&e.expiresAt?{isExpired:e.expiresAt<=Date.now()}:{isExpired:!0}}isRefreshTokenAvailable(o){const e=this.getStoredTokens(o);return{isAvailable:!(null==e||!e.refreshToken)}}}class re extends T{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_"}initialize(o,e,r,t,n){var i=this;return(0,c.A)(function*(){i.clientId=o,i.redirectUrl=null!=e?e:null,null!=r&&r.length&&(i.defaultScopes=r),i.forceLogin=null!=t&&t,i.audience=null!=n?n:void 0})()}login(o){var e=this;return(0,c.A)(function*(){var r,t,n,i,s,l;if(!e.clientId)throw new Error("Twitter Client ID not configured. Call initialize() first.");const a=null!==(t=null!==(r=o.redirectUrl)&&void 0!==r?r:e.redirectUrl)&&void 0!==t?t:window.location.origin+window.location.pathname,d=null!==(n=o.scopes)&&void 0!==n&&n.length?o.scopes:e.defaultScopes,g=null!==(i=o.state)&&void 0!==i?i:e.generateState(),p=null!==(s=o.codeVerifier)&&void 0!==s?s:e.generateCodeVerifier(),u=yield e.generateCodeChallenge(p);e.persistPendingLogin(g,{clientId:e.clientId,codeVerifier:p,redirectUri:a,scopes:d}),localStorage.setItem(T.OAUTH_STATE_KEY,JSON.stringify({provider:"twitter",state:g}));const f=new URLSearchParams({response_type:"code",client_id:e.clientId,redirect_uri:a,scope:d.join(" "),state:g,code_challenge:u,code_challenge_method:"S256"});!0===(null!==(l=o.forceLogin)&&void 0!==l?l:e.forceLogin)&&f.set("force_login","true"),e.audience&&f.set("audience",e.audie
1nce);const k=`https://x.com/i/oauth2/authorize?${f.toString()}`,y=window.screenX+(window.outerWidth-500)/2,I=window.screenY+(window.outerHeight-650)/2,P=window.open(k,"XLogin",`width=500,height=650,left=${y},top=${I},popup=1`);return new Promise((L,U)=>{if(!P)return void U(new Error("Unable to open login window. Please allow popups."));const z=`twitter_oauth_${g}`;let R=null;try{R=new BroadcastChannel(z)}catch{}const E=(w,C,N)=>{window.removeEventListener("message",w),clearTimeout(C),clearInterval(N),R&&R.close()},A=w=>{if("oauth-response"===(null==w?void 0:w.type)){if(null!=w&&w.provider&&"twitter"!==w.provider)return!1;E(v,m,S);const D=(0,J.Tt)(w,["provider","type"]);return L({provider:"twitter",result:D}),!0}return!("oauth-error"!==(null==w?void 0:w.type)||null!=w&&w.provider&&"twitter"!==w.provider||(E(v,m,S),U(x(w.error||"Twitter login was cancelled.")),0))};R&&(R.onmessage=w=>{A(w.data)});const v=w=>{w.origin===window.location.origin&&A(w.data)};window.addEventListener("message",v);const m=window.setTimeout(()=>{E(v,m,S);try{P.close()}catch{}U(new Error("Twitter login timed out."))},3e5),S=window.setInterval(()=>{try{P.closed&&(E(v,m,S),U(K("Twitter login window was closed.")))}catch{clearInterval(S)}},1e3)})})()}logout(){var o=this;return(0,c.A)(function*(){localStorage.removeItem(o.TOKENS_KEY)})()}isLoggedIn(){var o=this;return(0,c.A)(function*(){const e=o.getStoredTokens();if(!e)return{isLoggedIn:!1};const r=e.expiresAt>Date.now();return r||localStorage.removeItem(o.TOKENS_KEY),{isLoggedIn:r}})()}getAuthorizationCode(){var o=this;return(0,c.A)(function*(){const e=o.getStoredTokens();if(!e)throw new Error("Twitter access token is not available.");return{accessToken:e.accessToken}})()}refresh(){var o=this;return(0,c.A)(function*(){const e=o.getStoredTokens();if(null==e||!e.refreshToken)throw new Error("No Twitter refresh token is available. Include offline.access scope to receive one.");yield o.refreshWithRefreshToken(e.refreshToken)})()}handleOAuthRedirect(o,e){var r=this;return(0,c.A)(function*(){const t=o.searchParams,n=null!=e?e:t.get("state");if(!n)return null;const i=r.consumePendingLogin(n);if(!i)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:"Twitter login session expired or state mismatch."};const s=t.get("error");if(s)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:t.get("error_description")||s};const l=t.get("code");if(!l)return localStorage.removeItem(T.OAUTH_STATE_KEY),{error:"Twitter authorization code missing from redirect."};try{const a=yield r.exchangeAuthorizationCode(l,i),d=yield r.fetchProfile(a.access_token),g=Date.now()+1e3*a.expires_in,p=a.scope.split(" ").filter(Boolean);return r.persistTokens({accessToken:a.access_token,refreshToken:a.refresh_token,expiresAt:g,scope:p,tokenType:a.token_type,userId:d.id,profile:d}),{provider:"twitter",result:{accessToken:{token:a.access_token,tokenType:a.token_type,expires:new Date(g).toISOString(),userId:d.id},refreshToken:a.refresh_token,scope:p,tokenType:a.token_type,expiresIn:a.expires_in,profile:d}}}catch(a){return a instanceof Error?{error:a.message}:{error:"Twitter login failed unexpectedly."}}finally{localStorage.removeItem(T.OAUTH_STATE_KEY)}})()}exchangeAuthorizationCode(o,e){return(0,c.A)(function*(){const r=new URLSearchParams({grant_type:"authorization_code",client_id:e.clientId,code:o,redirect_uri:e.redirectUri,code_verifier:e.codeVerifier}),t=yield fetch("https://api.x.com/2/oauth2/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:r.toString()});if(!t.ok){const n=yield t.text();throw new Error(`Twitter token exchange failed (${t.status}): ${n}`)}return yield t.json()})()}refreshWithRefreshToken(o){var e=this;return(0,c.A)(function*(){var r,t;const n=new URLSearchParams({grant_type:"refresh_token",refresh_token:o,client_id:null!==(r=e.clientId)&&void 0!==r?r:""}),i=yield fetch("https://api.x.com/2/oauth2/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:n.toString()});if(!i.ok){const g=yield i.text();throw new Error(`Twitter refresh failed (${i.status}): ${g}`)}const s=yield i.json(),l=yield e.fetchProfile(s.access_token),a=Date.now()+1e3*s.expires_in,d=s.scope.split(" ").filter(
1Boolean);e.persistTokens({accessToken:s.access_token,refreshToken:null!==(t=s.refresh_token)&&void 0!==t?t:o,expiresAt:a,scope:d,tokenType:s.token_type,userId:l.id,profile:l})})()}fetchProfile(o){return(0,c.A)(function*(){var e,r,t,n;const s=yield fetch(`https://api.x.com/2/users/me?user.fields=${["profile_image_url","verified","name","username"].join(",")}`,{headers:{Authorization:`Bearer ${o}`}});if(!s.ok){const a=yield s.text();throw new Error(`Unable to fetch Twitter profile (${s.status}): ${a}`)}const l=yield s.json();if(!l.data)throw new Error("Twitter profile payload is missing data.");return{id:l.data.id,username:l.data.username,name:null!==(e=l.data.name)&&void 0!==e?e:null,profileImageUrl:null!==(r=l.data.profile_image_url)&&void 0!==r?r:null,verified:null!==(t=l.data.verified)&&void 0!==t&&t,email:null!==(n=l.data.email)&&void 0!==n?n:null}})()}persistTokens(o){localStorage.setItem(this.TOKENS_KEY,JSON.stringify(o))}getStoredTokens(){const o=localStorage.getItem(this.TOKENS_KEY);if(!o)return null;try{return JSON.parse(o)}catch(e){return console.warn("Failed to parse stored Twitter tokens",e),null}}persistPendingLogin(o,e){localStorage.setItem(`${this.STATE_PREFIX}${o}`,JSON.stringify(e))}consumePendingLogin(o){const e=`${this.STATE_PREFIX}${o}`,r=localStorage.getItem(e);if(localStorage.removeItem(e),!r)return null;try{return JSON.parse(r)}catch(t){return console.warn("Failed to parse pending Twitter login payload",t),null}}generateState(){return[...crypto.getRandomValues(new Uint8Array(16))].map(o=>o.toString(16).padStart(2,"0")).join("")}generateCodeVerifier(){const o=new Uint8Array(64);return crypto.getRandomValues(o),Array.from(o).map(e=>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"[e%66]).join("")}generateCodeChallenge(o){var e=this;return(0,c.A)(function*(){const t=(new TextEncoder).encode(o),n=yield crypto.subtle.digest("SHA-256",t);return e.base64UrlEncode(new Uint8Array(n))})()}base64UrlEncode(o){let e="";return o.forEach(r=>e+=String.fromCharCode(r)),btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}}class $ extends j.E_{constructor(){super(),this.googleProvider=new ee,this.appleProvider=new q,this.facebookProvider=new Z,this.twitterProvider=new re,this.oauth2Provider=new oe;const o=!!localStorage.getItem($.OAUTH_STATE_KEY),e=!!window.opener||$.POPUP_WINDOW_NAMES.has(window.name);o&&e&&this.finishOAuthRedirectInPopup().catch(r=>{console.error("Failed to finish OAuth redirect",r);try{window.close()}catch{}})}parseRedirectResult(){var o=this;return(0,c.A)(function*(){var e;const r=new URL(window.location.href),t=localStorage.getItem($.OAUTH_STATE_KEY);let i,s,n=null;if(t)try{const a=JSON.parse(t);n=null!==(e=a.provider)&&void 0!==e?e:null,i=a.state,s=a.nonce}catch{n="true"===t?"google":null}let l=null;switch(n){case"twitter":l=yield o.twitterProvider.handleOAuthRedirect(r,i);break;case"oauth2":l=yield o.oauth2Provider.handleOAuthRedirect(r,i);break;default:l=o.googleProvider.handleOAuthRedirect(r)}return{provider:n,state:i,nonce:s,result:l}})()}finishOAuthRedirectInPopup(){var o=this;return(0,c.A)(function*(){var e;const r=yield o.parseRedirectResult(),t=r.result;if(!t)return;let n;if("error"in t){const i=null!==(e=r.provider)&&void 0!==e?e:null,s=x(t.error);n=Object.assign({type:"oauth-error",provider:i,error:s.message},s.code?{code:s.code}:null)}else n=Object.assign({type:"oauth-response",provider:t.provider},t.result);try{window.opener&&window.opener.postMessage(n,window.location.origin)}catch{console.log("postMessage to opener failed, using BroadcastChannel")}try{let i=null;if("oauth2"===r.provider&&r.state?i=`oauth2_${r.state}`:"twitter"===r.provider&&r.state?i=`twitter_oauth_${r.state}`:"google"===r.provider&&r.nonce&&(i=`google_oauth_${r.nonce}`),i){const s=new BroadcastChannel(i);s.postMessage(n),s.close()}}catch{console.log("BroadcastChannel not available")}window.close()})()}initialize(o){var e=this;return(0,c.A)(function*(){var r,t,n,i;const s=[];!(null===(r=o.google)||void 0===r)&&r.webClientId&&s.push(e.googleProvider.initialize(o.google.webClientId,o.google.mode,o.google.hostedDomain,o.google.redirectUrl)),!(null===(t=o.apple)||void 0===t)&&t.clientId&&s.push(e.appleProvider.initialize(o.apple.clientId,o.apple.redirectUrl,o.apple.useProperTokenExchange)),!(null===(n=o.facebook)||void 0===n)&&n.appId&&s.push(e.facebookProvider.initialize(o.facebook.appId,o.facebook.locale)),!(null===(i=o.twitter)||void 0===i)&&i.clientId&&s.push(e.twitterProvider.initialize(o.twitter.clientId,o.twitter.redirectUrl,o.twitter.defaultScopes,o.twitter.forceLogin,o.twitter.audience)),o.oauth2&&Object.keys(o.oauth2).length>0&&s.push(e.oauth2Provider.initializeProviders(o.oauth2)),yield Promise.all(s)})()}login(o){var e=this;return(0,c.A)(function*(){switch(o.provider){case"google":return e.googleProvider.login(o.options);case"apple":return e.appleProvider.login(o.options);case"facebook":return e.facebookProvider.login(o.options);case"twitter":return e.twitterProvider.login(o.options);case"oauth2":return e.oauth2Provider.login(o.options);default:throw new Error(`Login for ${o.provider} is not implemented on web`)}})()}logout(o){var e=this;return(0,c.A)(function*(){switch(o.provider){case"google":return e.googleProvider.logout();case"apple":return e.appleProvider.logout();case"facebook":return e.facebookProvider.logout();case"twitter":return e.twitterProvider.logout();case"oauth2":if(!o.providerId)throw new Error("providerId is required for oauth2 logout");return e.oauth2Provider.logout(o.providerId);default:throw new Error(`Logout for ${o.provider} is not implemented`)}})()}isLoggedIn(o){var e=this;return(0,c.A)(function*(){switch(o.provider){case"google":return e.googleProvider.isLoggedIn();case"apple":return e.appleProvider.isLoggedIn();case"facebook":return e.facebookProvider.isLoggedIn();case"twitter":return e.twitterProvider.isLoggedIn();case"oauth2":if(!o.providerId)throw new Error("providerId is required for oauth2 isLoggedIn");return e.oauth2Provider.isLoggedIn(o.providerId);default:throw new Error(`isLoggedIn for ${o.provider} is not implemented`)}})()}getAuthorizationCode(o){var e=this;return(0,c.A)(function*(){switch(o.provider){case"google":return e.googleProvider.getAuthorizationCode();case"apple":return e.appleProvider.getAuthorizationCode();case"facebook":return e.facebookProvider.getAuthorizationCode();case"twitter":return e.twitterProvider.getAuthorizationCode();case"oauth2":if(!o.providerId)throw new Error("providerId is required for oauth2 getAuthorizationCode");return e.oauth2Provider.getAuthorizationCode(o.providerId);default:throw new Error(`getAuthorizationCode for ${o.provider} is not implemented`)}})()}refresh(o){var e=this;return(0,c.A)(function*(){switch(o.provider){case"google":return e.googleProvider.refresh();case"apple":return e.appleProvider.refresh();case"facebook":return e.facebookProvider.refresh(o.options);case"twitter":return e.twitterProvider.refresh();case"oauth2":{const r=o.options;if(null==r||!r.providerId)throw new Error("providerId is required for oauth2 refresh");return e.oauth2Provider.refresh(r.providerId)}default:throw new Error(`Refresh for ${o.provider} is not implemented`)}})()}providerSpecificCall(o){return(0,c.A)(function*(){throw new Error(`Provider specific call for ${o.call} is not implemented`)})()}refreshToken(o){var e=this;return(0,c.A)(function*(){if("oauth2"!==o.provider)throw new Error("refreshToken is only implemented for oauth2 on web");return e.oauth2Provider.refreshToken(o.providerId,o.refreshToken,o.additionalParameters)})()}handleRedirectCallback(){var o=this;return(0,c.A)(function*(){const r=(yield o.parseRedirectResult()).result;if(!r)return null;if("error"in r)throw x(r.error);return r})()}decodeIdToken(o){var e=this;return(0,c.A)(function*(){var r;const t=null!==(r=null==o?void 0:o.idToken)&&void 0!==r?r:null==o?void 0:o.token;if(!t)throw new Error("idToken (or token) is required");return{claims:e.oauth2Provider.decodeIdToken(t)}})()}getAccessTokenExpirationDate(o){return(0,c.A)(function*(){if("number"!=typeof(null==o?void 0:o.accessTokenExpirationDate))throw new Error("accessTokenExpirationDate is required");return{date:new Date(o.accessTokenExpirationDate).toISOString()}})()}isAccessTokenAvailable(o){return(0,c.A)(function*(){var e;const r=null!==(e=null==o?void 0:o.accessToken)&&void 0!==e?e:null;return{isAvailable:"string"==typeof r&&r.length>0}})()}isAccessTokenExpired(o){return(0,c.A)(function*(){if("number"!=typeof(null==o?void 0:o.accessTokenExpirationDate))throw new Error("accessTokenExpirationDate is required");return{isExpired:o.accessTokenExpirationDate<=Date.now()}})()}isRefreshTokenAvailable(o){return(0,c.A)(function*(){var e;const r=null!==(e=null==o?void 0:o.refreshToken)&&void 0!==e?e:null;return{isAvailable:"string"==typeof r&&r.length>0}})()}getPluginVersion(){return(0,c.A)(function*(){return{version:"web"}})()}openSecureWindow(o){return(0,c.A)(function*(){const t=[["width",600],["height",550],["left",screen.width/2-300],["to
1p",screen.height/2-275]].map(i=>i.join("=")).join(","),n=window.open(o.authEndpoint,"Authorization",t);return"function"==typeof n.focus&&n.focus(),new Promise((i,s)=>{const l=new BroadcastChannel(o.broadcastChannelName||"oauth-channel");l.addEventListener("message",a=>{a.data.startsWith(o.redirectUri)?(l.close(),i({redirectedUri:a.data})):(l.close(),s(new Error("Redirect URI does not match, expected "+o.redirectUri+" but got "+a.data)))}),setTimeout(()=>{l.close(),s(new Error("The sign-in flow timed out"))},3e5)})})()}}$.OAUTH_STATE_KEY="social_login_oauth_pending",$.POPUP_WINDOW_NAMES=new Set(["OAuth2Login","XLogin","Google Sign In","Authorization"])}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.