@authorizerdev/authorizer-js 1.2.0-beta.1 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -21
- package/lib/authorizer.min.js +2 -0
- package/lib/authorizer.min.js.map +1 -0
- package/lib/cjs/constants.d.ts +3 -0
- package/lib/cjs/index.d.ts +29 -0
- package/lib/cjs/index.js +495 -0
- package/lib/cjs/index.js.map +1 -0
- package/{dist/index.d.ts → lib/cjs/types.d.ts} +28 -58
- package/lib/cjs/utils.d.ts +13 -0
- package/lib/constants.d.ts +3 -0
- package/lib/esm/constants.d.ts +3 -0
- package/lib/esm/index.d.ts +29 -0
- package/lib/esm/index.js +487 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/types.d.ts +185 -0
- package/lib/esm/utils.d.ts +13 -0
- package/lib/index.d.ts +29 -0
- package/lib/types.d.ts +185 -0
- package/lib/utils.d.ts +13 -0
- package/package.json +10 -25
- package/src/constants.ts +3 -0
- package/src/index.ts +499 -0
- package/src/types.ts +203 -0
- package/src/utils.ts +155 -0
- package/dist/index.global.js +0 -19
- package/dist/index.global.js.map +0 -1
- package/dist/index.js +0 -14
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -14
- package/dist/index.mjs.map +0 -1
package/dist/index.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
var S=Object.create;var p=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var n=(t,e)=>p(t,"name",{value:e,configurable:!0});var z=(t,e)=>{for(var r in e)p(t,r,{get:e[r],enumerable:!0})},R=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of x(e))!P.call(t,o)&&o!==r&&p(t,o,{get:()=>e[o],enumerable:!(s=O(e,o))||s.enumerable});return t};var A=(t,e,r)=>(r=t!=null?S(C(t)):{},R(e||!t||!t.__esModule?p(r,"default",{value:t,enumerable:!0}):r,t)),D=t=>R(p({},"__esModule",{value:!0}),t);var H={};z(H,{Authorizer:()=>w,OAuthProviders:()=>f,ResponseTypes:()=>l});module.exports=D(H);var k=A(require("cross-fetch"));var f;(function(t){t.Apple="apple",t.Github="github",t.Google="google",t.Facebook="facebook",t.LinkedIn="linkedin"})(f||(f={}));var l;(function(t){t.Code="code",t.Token="token"})(l||(l={}));var d=n(()=>typeof window<"u","hasWindow"),m=n(t=>{let e=t.trim();return e[e.length-1]==="/"&&(e=e.slice(0,-1)),e},"trimURL"),U=n(()=>d()?window.crypto||window.msCrypto:null,"getCrypto"),j=n(()=>{let t=U();return t&&t.subtle||t.webkitSubtle},"getCryptoSubtle"),h=n(()=>{let t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.",e="",r=U();return r&&Array.from(r.getRandomValues(new Uint8Array(43))).forEach(o=>e+=t[o%t.length]),e},"createRandomString"),a=n(t=>d()?btoa(t):Buffer.from(t).toString("base64"),"encode");var T=n(t=>Object.keys(t).filter(e=>typeof t[e]<"u").map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&"),"createQueryParams"),$=n(async t=>{let e=j().digest({name:"SHA-256"},new TextEncoder().encode(t));return window.msCrypto?new Promise((r,s)=>{e.oncomplete=o=>{r(o.target.result)},e.onerror=o=>{s(o.error)},e.onabort=()=>{s(new Error("The digest operation was aborted"))}}):await e},"sha256"),F=n(t=>{let e={"+":"-","/":"_","=":""};return t.replace(/[+/=]/g,r=>e[r])},"urlEncodeB64");var L=n(t=>{let e=new Uint8Array(t);return F(window.btoa(String.fromCharCode(...Array.from(e))))},"bufferToBase64UrlEncoded"),v=n((t,e,r=60)=>new Promise((s,o)=>{let i=window.document.createElement("iframe");i.setAttribute("id","authorizer-iframe"),i.setAttribute("width","0"),i.setAttribute("height","0"),i.style.display="none";let c,b=n(()=>{window.document.body.contains(i)&&(window.document.body.removeChild(i),window.removeEventListener("message",c,!1))},"removeIframe"),q=setTimeout(()=>{b()},r*1e3);c=n(function(u){if(u.origin!==e||!u.data||!u.data.response)return;let E=u.source;E&&E.close(),u.data.response.error?o(u.data.response):s(u.data.response),clearTimeout(q),window.removeEventListener("message",c,!1),setTimeout(b,2*1e3)},"iframeEventHandler"),window.addEventListener("message",c,!1),window.document.body.appendChild(i),i.setAttribute("src",t)}),"executeIframe");var I="id email email_verified given_name family_name middle_name nickname preferred_username picture signup_methods gender birthdate phone_number phone_number_verified roles created_at updated_at is_multi_factor_auth_enabled ",g=`message access_token expires_in refresh_token id_token should_show_otp_screen user { ${I} }`,y=n(()=>d()?window.fetch:k.default,"getFetcher"),w=class{constructor(e){if(!e)throw new Error("Configuration is required");if(this.config=e,!e.authorizerURL&&!e.authorizerURL.trim())throw new Error("Invalid authorizerURL");if(e.authorizerURL&&(this.config.authorizerURL=m(e.authorizerURL)),!e.redirectURL&&!e.redirectURL.trim())throw new Error("Invalid redirectURL");this.config.redirectURL=m(e.redirectURL),this.config.extraHeaders={...e.extraHeaders||{},"x-authorizer-url":this.config.authorizerURL,"Content-Type":"application/json"},this.config.clientID=e.clientID.trim()}authorize=async e=>{if(!d())throw new Error("this feature is only supported in browser");let r=["openid","profile","email"];e.use_refresh_token&&r.push("offline_access");let s={redirect_uri:this.config.redirectURL,response_mode:e.response_mode||"web_message",state:a(h()),nonce:a(h()),response_type:e.response_type,scope:r.join(" "),client_id:this.config.clientID};if(e.response_type===l.Code){this.codeVerifier=h();let i=await $(this.codeVerifier),c=L(i);s.code_challenge=c}let o=`${this.config.authorizerURL}/authorize?${T(s)}`;if(s.response_mode!=="web_message"){window.location.replace(o);return}try{let i=await v(o,this.config.authorizerURL,60);return e.response_type===l.Code?await this.getToken({code:i.code}):i}catch(i){throw i.error&&window.location.replace(`${this.config.authorizerURL}/app?state=${a(JSON.stringify(this.config))}&redirect_uri=${this.config.redirectURL}`),i}};browserLogin=async()=>{try{return await this.getSession()}catch{if(!d())throw new Error("browserLogin is only supported for browsers");window.location.replace(`${this.config.authorizerURL}/app?state=${a(JSON.stringify(this.config))}&redirect_uri=${this.config.redirectURL}`)}};forgotPassword=async e=>{e.state||(e.state=a(h())),e.redirect_uri||(e.redirect_uri=this.config.redirectURL);try{return(await this.graphqlQuery({query:"mutation forgotPassword($data: ForgotPasswordInput!) { forgot_password(params: $data) { message } }",variables:{data:e}})).forgot_password}catch(r){throw new Error(r)}};getMetaData=async()=>{try{return(await this.graphqlQuery({query:"query { meta { version is_google_login_enabled is_facebook_login_enabled is_github_login_enabled is_linkedin_login_enabled is_apple_login_enabled is_twitter_login_enabled is_microsoft_login_enabled is_email_verification_enabled is_basic_authentication_enabled is_magic_link_login_enabled is_sign_up_enabled is_strong_password_enabled } }"})).meta}catch(e){throw new Error(e)}};getProfile=async e=>{try{return(await this.graphqlQuery({query:`query { profile { ${I} } }`,headers:e})).profile}catch(r){throw new Error(r)}};getSession=async(e,r)=>{try{return(await this.graphqlQuery({query:`query getSession($params: SessionQueryInput){session(params: $params) { ${g} } }`,headers:e,variables:{params:r}})).session}catch(s){throw new Error(s)}};getToken=async e=>{if(e.grant_type||(e.grant_type="authorization_code"),e.grant_type==="refresh_token"&&!e.refresh_token)throw new Error("Invalid refresh_token");if(e.grant_type==="authorization_code"&&!this.codeVerifier)throw new Error("Invalid code verifier");let r={client_id:this.config.clientID,code:e.code||"",code_verifier:this.codeVerifier||"",grant_type:e.grant_type||"",refresh_token:e.refresh_token||""};try{let o=await y()(`${this.config.authorizerURL}/oauth/token`,{method:"POST",body:JSON.stringify(r),headers:{...this.config.extraHeaders},credentials:"include"}),i=await o.json();if(o.status>=400)throw new Error(i);return i}catch(s){throw new Error(s)}};graphqlQuery=async e=>{let o=await(await y()(`${this.config.authorizerURL}/graphql`,{method:"POST",body:JSON.stringify({query:e.query,variables:e.variables||{}}),headers:{...this.config.extraHeaders,...e.headers||{}},credentials:"include"})).json();if(o.errors&&o.errors.length)throw console.error(o.errors),new Error(o.errors[0].message);return o.data};login=async e=>{try{return(await this.graphqlQuery({query:`
|
|
2
|
-
mutation login($data: LoginInput!) { login(params: $data) { ${g}}}
|
|
3
|
-
`,variables:{data:e}})).login}catch(r){throw new Error(r)}};logout=async e=>{try{return(await this.graphqlQuery({query:" mutation { logout { message } } ",headers:e})).logout}catch(r){console.error(r)}};magicLinkLogin=async e=>{try{return e.state||(e.state=a(h())),e.redirect_uri||(e.redirect_uri=this.config.redirectURL),(await this.graphqlQuery({query:`
|
|
4
|
-
mutation magicLinkLogin($data: MagicLinkLoginInput!) { magic_link_login(params: $data) { message }}
|
|
5
|
-
`,variables:{data:e}})).magic_link_login}catch(r){throw new Error(r)}};oauthLogin=async(e,r,s,o)=>{let i=o;if(i||(i=a(h())),!Object.values(f).includes(e))throw new Error(`only following oauth providers are supported: ${Object.values(e).toString()}`);if(!d())throw new Error("oauthLogin is only supported for browsers");window.location.replace(`${this.config.authorizerURL}/oauth_login/${e}?redirect_uri=${s||this.config.redirectURL}&state=${i}${r&&r.length?`&roles=${r.join(",")}`:""}`)};resendOtp=async e=>{try{return(await this.graphqlQuery({query:`
|
|
6
|
-
mutation resendOtp($data: ResendOTPRequest!) { resend_otp(params: $data) { message }}
|
|
7
|
-
`,variables:{data:e}})).resend_otp}catch(r){throw new Error(r)}};resetPassword=async e=>{try{return(await this.graphqlQuery({query:"mutation resetPassword($data: ResetPasswordInput!) { reset_password(params: $data) { message } }",variables:{data:e}})).reset_password}catch(r){throw new Error(r)}};revokeToken=async e=>{if(!e.refresh_token&&!e.refresh_token.trim())throw new Error("Invalid refresh_token");return await(await y()(`${this.config.authorizerURL}/oauth/revoke`,{method:"POST",headers:{...this.config.extraHeaders},body:JSON.stringify({refresh_token:e.refresh_token,client_id:this.config.clientID})})).json()};signup=async e=>{try{return(await this.graphqlQuery({query:`
|
|
8
|
-
mutation signup($data: SignUpInput!) { signup(params: $data) { ${g}}}
|
|
9
|
-
`,variables:{data:e}})).signup}catch(r){throw new Error(r)}};updateProfile=async(e,r)=>{try{return(await this.graphqlQuery({query:"mutation updateProfile($data: UpdateProfileInput!) { update_profile(params: $data) { message } }",headers:r,variables:{data:e}})).update_profile}catch(s){throw new Error(s)}};validateJWTToken=async e=>{try{return(await this.graphqlQuery({query:"query validateJWTToken($params: ValidateJWTTokenInput!){validate_jwt_token(params: $params) { is_valid claims } }",variables:{params:e}})).validate_jwt_token}catch(r){throw new Error(r)}};verifyEmail=async e=>{try{return(await this.graphqlQuery({query:`
|
|
10
|
-
mutation verifyEmail($data: VerifyEmailInput!) { verify_email(params: $data) { ${g}}}
|
|
11
|
-
`,variables:{data:e}})).verify_email}catch(r){throw new Error(r)}};verifyOtp=async e=>{try{return(await this.graphqlQuery({query:`
|
|
12
|
-
mutation verifyOtp($data: VerifyOTPRequest!) { verify_otp(params: $data) { ${g}}}
|
|
13
|
-
`,variables:{data:e}})).verify_otp}catch(r){throw new Error(r)}}};n(w,"Authorizer");0&&(module.exports={Authorizer,OAuthProviders,ResponseTypes});
|
|
14
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types.ts","../src/utils.ts"],"sourcesContent":["// Note: write gql query in single line to reduce bundle size\nimport crossFetch from 'cross-fetch'\nimport { DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS } from './constants'\nimport * as Types from './types'\nimport {\n bufferToBase64UrlEncoded,\n createQueryParams,\n createRandomString,\n encode,\n executeIframe,\n hasWindow,\n sha256,\n trimURL,\n} from './utils'\n\n// re-usable gql response fragment\nconst userFragment = 'id email email_verified given_name family_name middle_name nickname preferred_username picture signup_methods gender birthdate phone_number phone_number_verified roles created_at updated_at is_multi_factor_auth_enabled '\nconst authTokenFragment = `message access_token expires_in refresh_token id_token should_show_otp_screen user { ${userFragment} }`\n\n// set fetch based on window object. Cross fetch have issues with umd build\nconst getFetcher = () => (hasWindow() ? window.fetch : crossFetch)\n\nexport * from './types'\nexport class Authorizer {\n // class variable\n config: Types.ConfigType\n codeVerifier: string\n\n // constructor\n constructor(config: Types.ConfigType) {\n if (!config)\n throw new Error('Configuration is required')\n\n this.config = config\n if (!config.authorizerURL && !config.authorizerURL.trim())\n throw new Error('Invalid authorizerURL')\n\n if (config.authorizerURL)\n this.config.authorizerURL = trimURL(config.authorizerURL)\n\n if (!config.redirectURL && !config.redirectURL.trim())\n throw new Error('Invalid redirectURL')\n else\n this.config.redirectURL = trimURL(config.redirectURL)\n\n this.config.extraHeaders = {\n ...(config.extraHeaders || {}),\n 'x-authorizer-url': this.config.authorizerURL,\n 'Content-Type': 'application/json',\n }\n this.config.clientID = config.clientID.trim()\n }\n\n authorize = async (data: Types.AuthorizeInput) => {\n if (!hasWindow())\n throw new Error('this feature is only supported in browser')\n\n const scopes = ['openid', 'profile', 'email']\n if (data.use_refresh_token)\n scopes.push('offline_access')\n\n const requestData: Record<string, string> = {\n redirect_uri: this.config.redirectURL,\n response_mode: data.response_mode || 'web_message',\n state: encode(createRandomString()),\n nonce: encode(createRandomString()),\n response_type: data.response_type,\n scope: scopes.join(' '),\n client_id: this.config.clientID,\n }\n\n if (data.response_type === Types.ResponseTypes.Code) {\n this.codeVerifier = createRandomString()\n const sha = await sha256(this.codeVerifier)\n const codeChallenge = bufferToBase64UrlEncoded(sha)\n requestData.code_challenge = codeChallenge\n }\n\n const authorizeURL = `${\n\t\t\tthis.config.authorizerURL\n\t\t}/authorize?${createQueryParams(requestData)}`\n\n if (requestData.response_mode !== 'web_message') {\n window.location.replace(authorizeURL)\n return\n }\n\n try {\n const iframeRes = await executeIframe(\n authorizeURL,\n this.config.authorizerURL,\n DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n )\n\n if (data.response_type === Types.ResponseTypes.Code) {\n // get token and return it\n const token = await this.getToken({ code: iframeRes.code })\n return token\n }\n\n // this includes access_token, id_token & refresh_token(optionally)\n return iframeRes\n }\n catch (err) {\n if (err.error) {\n window.location.replace(\n\t\t\t\t\t`${this.config.authorizerURL}/app?state=${encode(\n\t\t\t\t\t\tJSON.stringify(this.config),\n\t\t\t\t\t)}&redirect_uri=${this.config.redirectURL}`,\n )\n }\n\n throw err\n }\n }\n\n browserLogin = async (): Promise<Types.AuthToken | void> => {\n try {\n const token = await this.getSession()\n return token\n }\n catch (err) {\n if (!hasWindow())\n throw new Error('browserLogin is only supported for browsers')\n\n window.location.replace(\n\t\t\t\t`${this.config.authorizerURL}/app?state=${encode(\n\t\t\t\t\tJSON.stringify(this.config),\n\t\t\t\t)}&redirect_uri=${this.config.redirectURL}`,\n )\n }\n }\n\n forgotPassword = async (\n data: Types.ForgotPasswordInput,\n ): Promise<Types.Response | void> => {\n if (!data.state)\n data.state = encode(createRandomString())\n\n if (!data.redirect_uri)\n data.redirect_uri = this.config.redirectURL\n\n try {\n const forgotPasswordRes = await this.graphqlQuery({\n query: 'mutation forgotPassword($data: ForgotPasswordInput!) {\tforgot_password(params: $data) { message } }',\n variables: {\n data,\n },\n })\n return forgotPasswordRes.forgot_password\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n getMetaData = async (): Promise<Types.MetaData | void> => {\n try {\n const res = await this.graphqlQuery({\n query: 'query { meta { version is_google_login_enabled is_facebook_login_enabled is_github_login_enabled is_linkedin_login_enabled is_apple_login_enabled is_twitter_login_enabled is_microsoft_login_enabled is_email_verification_enabled is_basic_authentication_enabled is_magic_link_login_enabled is_sign_up_enabled is_strong_password_enabled } }',\n })\n\n return res.meta\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n getProfile = async (headers?: Types.Headers): Promise<Types.User | void> => {\n try {\n const profileRes = await this.graphqlQuery({\n query: `query {\tprofile { ${userFragment} } }`,\n headers,\n })\n\n return profileRes.profile\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n // this is used to verify / get session using cookie by default. If using nodejs pass authorization header\n getSession = async (\n headers?: Types.Headers,\n params?: Types.SessionQueryInput,\n ): Promise<Types.AuthToken> => {\n try {\n const res = await this.graphqlQuery({\n query: `query getSession($params: SessionQueryInput){session(params: $params) { ${authTokenFragment} } }`,\n headers,\n variables: {\n params,\n },\n })\n return res.session\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n getToken = async (\n data: Types.GetTokenInput,\n ): Promise<Types.GetTokenResponse> => {\n if (!data.grant_type)\n data.grant_type = 'authorization_code'\n\n if (data.grant_type === 'refresh_token' && !data.refresh_token)\n throw new Error('Invalid refresh_token')\n\n if (data.grant_type === 'authorization_code' && !this.codeVerifier)\n throw new Error('Invalid code verifier')\n\n const requestData = {\n client_id: this.config.clientID,\n code: data.code || '',\n code_verifier: this.codeVerifier || '',\n grant_type: data.grant_type || '',\n refresh_token: data.refresh_token || '',\n }\n\n try {\n const fetcher = getFetcher()\n const res = await fetcher(`${this.config.authorizerURL}/oauth/token`, {\n method: 'POST',\n body: JSON.stringify(requestData),\n headers: {\n ...this.config.extraHeaders,\n },\n credentials: 'include',\n })\n\n const json = await res.json()\n if (res.status >= 400)\n throw new Error(json)\n\n return json\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n // helper to execute graphql queries\n // takes in any query or mutation string as input\n graphqlQuery = async (data: Types.GraphqlQueryInput) => {\n const fetcher = getFetcher()\n const res = await fetcher(`${this.config.authorizerURL}/graphql`, {\n method: 'POST',\n body: JSON.stringify({\n query: data.query,\n variables: data.variables || {},\n }),\n headers: {\n ...this.config.extraHeaders,\n ...(data.headers || {}),\n },\n credentials: 'include',\n })\n\n const json = await res.json()\n\n if (json.errors && json.errors.length) {\n console.error(json.errors)\n throw new Error(json.errors[0].message)\n }\n\n return json.data\n }\n\n login = async (data: Types.LoginInput): Promise<Types.AuthToken | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation login($data: LoginInput!) { login(params: $data) { ${authTokenFragment}}}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.login\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n logout = async (headers?: Types.Headers): Promise<Types.Response | void> => {\n try {\n const res = await this.graphqlQuery({\n query: ' mutation { logout { message } } ',\n headers,\n })\n return res.logout\n }\n catch (err) {\n console.error(err)\n }\n }\n\n magicLinkLogin = async (\n data: Types.MagicLinkLoginInput,\n ): Promise<Types.Response> => {\n try {\n if (!data.state)\n data.state = encode(createRandomString())\n\n if (!data.redirect_uri)\n data.redirect_uri = this.config.redirectURL\n\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation magicLinkLogin($data: MagicLinkLoginInput!) { magic_link_login(params: $data) { message }}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.magic_link_login\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n oauthLogin = async (\n oauthProvider: string,\n roles?: string[],\n redirect_uri?: string,\n state?: string,\n ): Promise<void> => {\n let urlState = state\n if (!urlState)\n urlState = encode(createRandomString())\n\n // @ts-expect-error\n if (!Object.values(Types.OAuthProviders).includes(oauthProvider)) {\n throw new Error(\n\t\t\t\t`only following oauth providers are supported: ${Object.values(\n\t\t\t\t\toauthProvider,\n\t\t\t\t).toString()}`,\n )\n }\n if (!hasWindow())\n throw new Error('oauthLogin is only supported for browsers')\n\n window.location.replace(\n\t\t\t`${this.config.authorizerURL}/oauth_login/${oauthProvider}?redirect_uri=${\n\t\t\t\tredirect_uri || this.config.redirectURL\n\t\t\t}&state=${urlState}${\n\t\t\t\t(roles && roles.length) ? `&roles=${roles.join(',')}` : ''\n\t\t\t}`,\n )\n }\n\n resendOtp = async (\n data: Types.ResendOtpInput,\n ): Promise<Types.Response | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation resendOtp($data: ResendOTPRequest!) { resend_otp(params: $data) { message }}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.resend_otp\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n resetPassword = async (\n data: Types.ResetPasswordInput,\n ): Promise<Types.Response | void> => {\n try {\n const resetPasswordRes = await this.graphqlQuery({\n query: 'mutation resetPassword($data: ResetPasswordInput!) {\treset_password(params: $data) { message } }',\n variables: {\n data,\n },\n })\n return resetPasswordRes.reset_password\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n revokeToken = async (data: { refresh_token: string }) => {\n if (!data.refresh_token && !data.refresh_token.trim())\n throw new Error('Invalid refresh_token')\n\n const fetcher = getFetcher()\n const res = await fetcher(`${this.config.authorizerURL}/oauth/revoke`, {\n method: 'POST',\n headers: {\n ...this.config.extraHeaders,\n },\n body: JSON.stringify({\n refresh_token: data.refresh_token,\n client_id: this.config.clientID,\n }),\n })\n\n return await res.json()\n }\n\n signup = async (data: Types.SignupInput): Promise<Types.AuthToken | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation signup($data: SignUpInput!) { signup(params: $data) { ${authTokenFragment}}}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.signup\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n updateProfile = async (\n data: Types.UpdateProfileInput,\n headers?: Types.Headers,\n ): Promise<Types.Response | void> => {\n try {\n const updateProfileRes = await this.graphqlQuery({\n query: 'mutation updateProfile($data: UpdateProfileInput!) {\tupdate_profile(params: $data) { message } }',\n headers,\n variables: {\n data,\n },\n })\n\n return updateProfileRes.update_profile\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n validateJWTToken = async (\n params?: Types.ValidateJWTTokenInput,\n ): Promise<Types.ValidateJWTTokenResponse> => {\n try {\n const res = await this.graphqlQuery({\n query: 'query validateJWTToken($params: ValidateJWTTokenInput!){validate_jwt_token(params: $params) { is_valid claims } }',\n variables: {\n params,\n },\n })\n\n return res.validate_jwt_token\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n verifyEmail = async (\n data: Types.VerifyEmailInput,\n ): Promise<Types.AuthToken | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation verifyEmail($data: VerifyEmailInput!) { verify_email(params: $data) { ${authTokenFragment}}}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.verify_email\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n verifyOtp = async (\n data: Types.VerifyOtpInput,\n ): Promise<Types.AuthToken | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation verifyOtp($data: VerifyOTPRequest!) { verify_otp(params: $data) { ${authTokenFragment}}}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.verify_otp\n }\n catch (err) {\n throw new Error(err)\n }\n }\n}\n","export interface ConfigType {\n authorizerURL: string\n redirectURL: string\n clientID: string\n extraHeaders?: Record<string, string>\n}\n\nexport interface User {\n id: string\n email: string\n preferred_username: string\n email_verified: boolean\n signup_methods: string\n given_name?: string | null\n family_name?: string | null\n middle_name?: string | null\n nickname?: string | null\n picture?: string | null\n gender?: string | null\n birthdate?: string | null\n phone_number?: string | null\n phone_number_verified?: boolean | null\n roles?: string[]\n created_at: number\n updated_at: number\n is_multi_factor_auth_enabled?: boolean\n}\n\nexport interface AuthToken {\n message?: string\n access_token: string\n expires_in: number\n id_token: string\n refresh_token?: string\n user?: User\n should_show_otp_screen?: boolean\n}\n\nexport interface Response {\n message: string\n}\n\nexport type Headers = Record<string, string>\n\nexport interface LoginInput {\n email: string\n password: string\n roles?: string[]\n scope?: string[]\n state?: string\n}\n\nexport interface SignupInput {\n email: string\n password: string\n confirm_password: string\n given_name?: string\n family_name?: string\n middle_name?: string\n nickname?: string\n picture?: string\n gender?: string\n birthdate?: string\n phone_number?: string\n roles?: string[]\n scope?: string[]\n redirect_uri?: string\n is_multi_factor_auth_enabled?: boolean\n state?: string\n}\n\nexport interface MagicLinkLoginInput {\n email: string\n roles?: string[]\n scopes?: string[]\n state?: string\n redirect_uri?: string\n}\n\nexport interface VerifyEmailInput { token: string; state?: string }\n\nexport interface VerifyOtpInput { email: string; otp: string; state?: string }\n\nexport interface ResendOtpInput { email: string }\n\nexport interface GraphqlQueryInput {\n query: string\n variables?: Record<string, any>\n headers?: Headers\n}\n\nexport interface MetaData {\n version: string\n client_id: string\n is_google_login_enabled: boolean\n is_facebook_login_enabled: boolean\n is_github_login_enabled: boolean\n is_linkedin_login_enabled: boolean\n is_apple_login_enabled: boolean\n is_twitter_login_enabled: boolean\n is_microsoft_login_enabled: boolean\n is_email_verification_enabled: boolean\n is_basic_authentication_enabled: boolean\n is_magic_link_login_enabled: boolean\n is_sign_up_enabled: boolean\n is_strong_password_enabled: boolean\n}\n\nexport interface UpdateProfileInput {\n old_password?: string\n new_password?: string\n confirm_new_password?: string\n email?: string\n given_name?: string\n family_name?: string\n middle_name?: string\n nickname?: string\n gender?: string\n birthdate?: string\n phone_number?: string\n picture?: string\n is_multi_factor_auth_enabled?: boolean\n}\n\nexport interface ForgotPasswordInput {\n email: string\n state?: string\n redirect_uri?: string\n}\n\nexport interface ResetPasswordInput {\n token: string\n password: string\n confirm_password: string\n}\n\nexport interface SessionQueryInput {\n roles?: string[]\n}\n\nexport interface IsValidJWTQueryInput {\n jwt: string\n roles?: string[]\n}\n\nexport interface ValidJWTResponse {\n valid: string\n message: string\n}\n\nexport enum OAuthProviders {\n Apple = 'apple',\n Github = 'github',\n Google = 'google',\n Facebook = 'facebook',\n LinkedIn = 'linkedin',\n}\n\nexport enum ResponseTypes {\n Code = 'code',\n Token = 'token',\n}\n\nexport interface AuthorizeInput {\n response_type: ResponseTypes\n use_refresh_token?: boolean\n response_mode?: string\n}\n\nexport interface AuthorizeResponse {\n state: string\n code?: string\n error?: string\n error_description?: string\n}\n\nexport interface RevokeTokenInput {\n refresh_token: string\n}\n\nexport interface GetTokenInput {\n code?: string\n grant_type?: string\n refresh_token?: string\n}\n\nexport interface GetTokenResponse {\n access_token: string\n expires_in: number\n id_token: string\n refresh_token?: string\n}\n\nexport interface ValidateJWTTokenInput {\n token_type: 'access_token' | 'id_token' | 'refresh_token'\n token: string\n roles?: string[]\n}\n\nexport interface ValidateJWTTokenResponse {\n is_valid: boolean\n claims: Record<string, any>\n}\n","import {\n CLEANUP_IFRAME_TIMEOUT_IN_SECONDS,\n DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n} from './constants'\nimport { AuthorizeResponse } from './types'\n\nexport const hasWindow = (): boolean => typeof window !== 'undefined'\n\nexport const trimURL = (url: string): string => {\n let trimmedData = url.trim()\n const lastChar = trimmedData[trimmedData.length - 1]\n if (lastChar === '/')\n trimmedData = trimmedData.slice(0, -1)\n\n return trimmedData\n}\n\nexport const getCrypto = () => {\n // ie 11.x uses msCrypto\n return hasWindow()\n ? ((window.crypto || (window as any).msCrypto) as Crypto)\n : null\n}\n\nexport const getCryptoSubtle = () => {\n const crypto = getCrypto()\n // safari 10.x uses webkitSubtle\n return (crypto && crypto.subtle) || (crypto as any).webkitSubtle\n}\n\nexport const createRandomString = () => {\n const charset\n\t\t= '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.'\n let random = ''\n const crypto = getCrypto()\n if (crypto) {\n const randomValues = Array.from(crypto.getRandomValues(new Uint8Array(43)))\n randomValues.forEach(v => (random += charset[v % charset.length]))\n }\n return random\n}\n\nexport const encode = (value: string) =>\n hasWindow() ? btoa(value) : Buffer.from(value).toString('base64')\nexport const decode = (value: string) =>\n hasWindow() ? atob(value) : Buffer.from(value, 'base64').toString('ascii')\n\nexport const createQueryParams = (params: any) => {\n return Object.keys(params)\n .filter(k => typeof params[k] !== 'undefined')\n .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)\n .join('&')\n}\n\nexport const sha256 = async (s: string) => {\n const digestOp: any = getCryptoSubtle().digest(\n { name: 'SHA-256' },\n new TextEncoder().encode(s),\n )\n\n // msCrypto (IE11) uses the old spec, which is not Promise based\n // https://msdn.microsoft.com/en-us/expression/dn904640(v=vs.71)\n if ((window as any).msCrypto) {\n return new Promise((resolve, reject) => {\n digestOp.oncomplete = (e: any) => {\n resolve(e.target.result)\n }\n\n digestOp.onerror = (e: ErrorEvent) => {\n reject(e.error)\n }\n\n digestOp.onabort = () => {\n reject(new Error('The digest operation was aborted'))\n }\n })\n }\n\n return await digestOp\n}\n\nconst urlEncodeB64 = (input: string) => {\n const b64Chars: { [index: string]: string } = { '+': '-', '/': '_', '=': '' }\n return input.replace(/[+/=]/g, (m: string) => b64Chars[m])\n}\n\n// https://stackoverflow.com/questions/30106476/\nconst decodeB64 = (input: string) =>\n decodeURIComponent(\n atob(input)\n .split('')\n .map((c) => {\n return `%${(`00${c.charCodeAt(0).toString(16)}`).slice(-2)}`\n })\n .join(''),\n )\n\nexport const urlDecodeB64 = (input: string) =>\n decodeB64(input.replace(/_/g, '/').replace(/-/g, '+'))\n\nexport const bufferToBase64UrlEncoded = (input: number[] | Uint8Array) => {\n const ie11SafeInput = new Uint8Array(input)\n return urlEncodeB64(\n window.btoa(String.fromCharCode(...Array.from(ie11SafeInput))),\n )\n}\n\nexport const executeIframe = (\n authorizeUrl: string,\n eventOrigin: string,\n timeoutInSeconds: number = DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n) => {\n return new Promise<AuthorizeResponse>((resolve, reject) => {\n const iframe = window.document.createElement('iframe')\n iframe.setAttribute('id', 'authorizer-iframe')\n iframe.setAttribute('width', '0')\n iframe.setAttribute('height', '0')\n iframe.style.display = 'none'\n\n let iframeEventHandler: (e: MessageEvent) => void\n\n const removeIframe = () => {\n if (window.document.body.contains(iframe)) {\n window.document.body.removeChild(iframe)\n window.removeEventListener('message', iframeEventHandler, false)\n }\n }\n\n const timeoutSetTimeoutId = setTimeout(() => {\n removeIframe()\n }, timeoutInSeconds * 1000)\n\n iframeEventHandler = function (e: MessageEvent) {\n if (e.origin !== eventOrigin)\n return\n if (!e.data || !e.data.response)\n return\n\n const eventSource = e.source\n\n if (eventSource)\n (eventSource as any).close()\n\n e.data.response.error ? reject(e.data.response) : resolve(e.data.response)\n\n clearTimeout(timeoutSetTimeoutId)\n window.removeEventListener('message', iframeEventHandler, false)\n setTimeout(removeIframe, CLEANUP_IFRAME_TIMEOUT_IN_SECONDS * 1000)\n }\n\n window.addEventListener('message', iframeEventHandler, false)\n window.document.body.appendChild(iframe)\n iframe.setAttribute('src', authorizeUrl)\n })\n}\n"],"mappings":"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","names":["src_exports","__export","Authorizer","OAuthProviders","ResponseTypes","__toCommonJS","import_cross_fetch","OAuthProviders","Apple","Github","Google","Facebook","LinkedIn","ResponseTypes","Code","Token","hasWindow","__name","window","trimURL","url","trimmedData","trim","length","slice","getCrypto","crypto","msCrypto","getCryptoSubtle","subtle","webkitSubtle","createRandomString","charset","random","Array","from","getRandomValues","Uint8Array","forEach","v","encode","value","btoa","Buffer","toString","createQueryParams","__name","params","Object","keys","filter","k","map","encodeURIComponent","join","sha256","s","digestOp","getCryptoSubtle","digest","name","TextEncoder","encode","window","msCrypto","Promise","resolve","reject","oncomplete","e","target","result","onerror","error","onabort","Error","urlEncodeB64","input","b64Chars","replace","m","bufferToBase64UrlEncoded","__name","input","ie11SafeInput","Uint8Array","urlEncodeB64","window","btoa","String","fromCharCode","Array","from","executeIframe","authorizeUrl","eventOrigin","timeoutInSeconds","DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS","Promise","resolve","reject","iframe","document","createElement","setAttribute","style","display","iframeEventHandler","removeIframe","body","contains","removeChild","removeEventListener","timeoutSetTimeoutId","setTimeout","e","origin","data","response","eventSource","source","close","error","clearTimeout","CLEANUP_IFRAME_TIMEOUT_IN_SECONDS","addEventListener","appendChild","userFragment","authTokenFragment","getFetcher","__name","hasWindow","window","fetch","crossFetch","Authorizer","constructor","config","Error","authorizerURL","trim","trimURL","redirectURL","extraHeaders","clientID","authorize","data","scopes","use_refresh_token","push","requestData","redirect_uri","response_mode","state","encode","createRandomString","nonce","response_type","scope","join","client_id","ResponseTypes","Code","codeVerifier","sha","sha256","codeChallenge","bufferToBase64UrlEncoded","code_challenge","authorizeURL","createQueryParams","location","replace","iframeRes","executeIframe","DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS","getToken","code","err","error","JSON","stringify","browserLogin","getSession","forgotPassword","graphqlQuery","query","variables","forgot_password","getMetaData","meta","getProfile","headers","profile","params","session","grant_type","refresh_token","code_verifier","res","method","body","credentials","json","status","errors","length","console","message","login","logout","magicLinkLogin","magic_link_login","oauthLogin","oauthProvider","roles","urlState","Object","values","OAuthProviders","includes","toString","resendOtp","resend_otp","resetPassword","reset_password","revokeToken","signup","updateProfile","update_profile","validateJWTToken","validate_jwt_token","verifyEmail","verify_email","verifyOtp","verify_otp"]}
|
package/dist/index.mjs
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
var k=Object.defineProperty;var n=(t,e)=>k(t,"name",{value:e,configurable:!0});import x from"cross-fetch";var f;(function(t){t.Apple="apple",t.Github="github",t.Google="google",t.Facebook="facebook",t.LinkedIn="linkedin"})(f||(f={}));var l;(function(t){t.Code="code",t.Token="token"})(l||(l={}));var d=n(()=>typeof window<"u","hasWindow"),w=n(t=>{let e=t.trim();return e[e.length-1]==="/"&&(e=e.slice(0,-1)),e},"trimURL"),E=n(()=>d()?window.crypto||window.msCrypto:null,"getCrypto"),S=n(()=>{let t=E();return t&&t.subtle||t.webkitSubtle},"getCryptoSubtle"),h=n(()=>{let t="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.",e="",r=E();return r&&Array.from(r.getRandomValues(new Uint8Array(43))).forEach(i=>e+=t[i%t.length]),e},"createRandomString"),a=n(t=>d()?btoa(t):Buffer.from(t).toString("base64"),"encode");var R=n(t=>Object.keys(t).filter(e=>typeof t[e]<"u").map(e=>`${encodeURIComponent(e)}=${encodeURIComponent(t[e])}`).join("&"),"createQueryParams"),U=n(async t=>{let e=S().digest({name:"SHA-256"},new TextEncoder().encode(t));return window.msCrypto?new Promise((r,s)=>{e.oncomplete=i=>{r(i.target.result)},e.onerror=i=>{s(i.error)},e.onabort=()=>{s(new Error("The digest operation was aborted"))}}):await e},"sha256"),O=n(t=>{let e={"+":"-","/":"_","=":""};return t.replace(/[+/=]/g,r=>e[r])},"urlEncodeB64");var T=n(t=>{let e=new Uint8Array(t);return O(window.btoa(String.fromCharCode(...Array.from(e))))},"bufferToBase64UrlEncoded"),$=n((t,e,r=60)=>new Promise((s,i)=>{let o=window.document.createElement("iframe");o.setAttribute("id","authorizer-iframe"),o.setAttribute("width","0"),o.setAttribute("height","0"),o.style.display="none";let c,y=n(()=>{window.document.body.contains(o)&&(window.document.body.removeChild(o),window.removeEventListener("message",c,!1))},"removeIframe"),v=setTimeout(()=>{y()},r*1e3);c=n(function(u){if(u.origin!==e||!u.data||!u.data.response)return;let b=u.source;b&&b.close(),u.data.response.error?i(u.data.response):s(u.data.response),clearTimeout(v),window.removeEventListener("message",c,!1),setTimeout(y,2*1e3)},"iframeEventHandler"),window.addEventListener("message",c,!1),window.document.body.appendChild(o),o.setAttribute("src",t)}),"executeIframe");var L="id email email_verified given_name family_name middle_name nickname preferred_username picture signup_methods gender birthdate phone_number phone_number_verified roles created_at updated_at is_multi_factor_auth_enabled ",p=`message access_token expires_in refresh_token id_token should_show_otp_screen user { ${L} }`,_=n(()=>d()?window.fetch:x,"getFetcher"),m=class{constructor(e){if(!e)throw new Error("Configuration is required");if(this.config=e,!e.authorizerURL&&!e.authorizerURL.trim())throw new Error("Invalid authorizerURL");if(e.authorizerURL&&(this.config.authorizerURL=w(e.authorizerURL)),!e.redirectURL&&!e.redirectURL.trim())throw new Error("Invalid redirectURL");this.config.redirectURL=w(e.redirectURL),this.config.extraHeaders={...e.extraHeaders||{},"x-authorizer-url":this.config.authorizerURL,"Content-Type":"application/json"},this.config.clientID=e.clientID.trim()}authorize=async e=>{if(!d())throw new Error("this feature is only supported in browser");let r=["openid","profile","email"];e.use_refresh_token&&r.push("offline_access");let s={redirect_uri:this.config.redirectURL,response_mode:e.response_mode||"web_message",state:a(h()),nonce:a(h()),response_type:e.response_type,scope:r.join(" "),client_id:this.config.clientID};if(e.response_type===l.Code){this.codeVerifier=h();let o=await U(this.codeVerifier),c=T(o);s.code_challenge=c}let i=`${this.config.authorizerURL}/authorize?${R(s)}`;if(s.response_mode!=="web_message"){window.location.replace(i);return}try{let o=await $(i,this.config.authorizerURL,60);return e.response_type===l.Code?await this.getToken({code:o.code}):o}catch(o){throw o.error&&window.location.replace(`${this.config.authorizerURL}/app?state=${a(JSON.stringify(this.config))}&redirect_uri=${this.config.redirectURL}`),o}};browserLogin=async()=>{try{return await this.getSession()}catch{if(!d())throw new Error("browserLogin is only supported for browsers");window.location.replace(`${this.config.authorizerURL}/app?state=${a(JSON.stringify(this.config))}&redirect_uri=${this.config.redirectURL}`)}};forgotPassword=async e=>{e.state||(e.state=a(h())),e.redirect_uri||(e.redirect_uri=this.config.redirectURL);try{return(await this.graphqlQuery({query:"mutation forgotPassword($data: ForgotPasswordInput!) { forgot_password(params: $data) { message } }",variables:{data:e}})).forgot_password}catch(r){throw new Error(r)}};getMetaData=async()=>{try{return(await this.graphqlQuery({query:"query { meta { version is_google_login_enabled is_facebook_login_enabled is_github_login_enabled is_linkedin_login_enabled is_apple_login_enabled is_twitter_login_enabled is_microsoft_login_enabled is_email_verification_enabled is_basic_authentication_enabled is_magic_link_login_enabled is_sign_up_enabled is_strong_password_enabled } }"})).meta}catch(e){throw new Error(e)}};getProfile=async e=>{try{return(await this.graphqlQuery({query:`query { profile { ${L} } }`,headers:e})).profile}catch(r){throw new Error(r)}};getSession=async(e,r)=>{try{return(await this.graphqlQuery({query:`query getSession($params: SessionQueryInput){session(params: $params) { ${p} } }`,headers:e,variables:{params:r}})).session}catch(s){throw new Error(s)}};getToken=async e=>{if(e.grant_type||(e.grant_type="authorization_code"),e.grant_type==="refresh_token"&&!e.refresh_token)throw new Error("Invalid refresh_token");if(e.grant_type==="authorization_code"&&!this.codeVerifier)throw new Error("Invalid code verifier");let r={client_id:this.config.clientID,code:e.code||"",code_verifier:this.codeVerifier||"",grant_type:e.grant_type||"",refresh_token:e.refresh_token||""};try{let i=await _()(`${this.config.authorizerURL}/oauth/token`,{method:"POST",body:JSON.stringify(r),headers:{...this.config.extraHeaders},credentials:"include"}),o=await i.json();if(i.status>=400)throw new Error(o);return o}catch(s){throw new Error(s)}};graphqlQuery=async e=>{let i=await(await _()(`${this.config.authorizerURL}/graphql`,{method:"POST",body:JSON.stringify({query:e.query,variables:e.variables||{}}),headers:{...this.config.extraHeaders,...e.headers||{}},credentials:"include"})).json();if(i.errors&&i.errors.length)throw console.error(i.errors),new Error(i.errors[0].message);return i.data};login=async e=>{try{return(await this.graphqlQuery({query:`
|
|
2
|
-
mutation login($data: LoginInput!) { login(params: $data) { ${p}}}
|
|
3
|
-
`,variables:{data:e}})).login}catch(r){throw new Error(r)}};logout=async e=>{try{return(await this.graphqlQuery({query:" mutation { logout { message } } ",headers:e})).logout}catch(r){console.error(r)}};magicLinkLogin=async e=>{try{return e.state||(e.state=a(h())),e.redirect_uri||(e.redirect_uri=this.config.redirectURL),(await this.graphqlQuery({query:`
|
|
4
|
-
mutation magicLinkLogin($data: MagicLinkLoginInput!) { magic_link_login(params: $data) { message }}
|
|
5
|
-
`,variables:{data:e}})).magic_link_login}catch(r){throw new Error(r)}};oauthLogin=async(e,r,s,i)=>{let o=i;if(o||(o=a(h())),!Object.values(f).includes(e))throw new Error(`only following oauth providers are supported: ${Object.values(e).toString()}`);if(!d())throw new Error("oauthLogin is only supported for browsers");window.location.replace(`${this.config.authorizerURL}/oauth_login/${e}?redirect_uri=${s||this.config.redirectURL}&state=${o}${r&&r.length?`&roles=${r.join(",")}`:""}`)};resendOtp=async e=>{try{return(await this.graphqlQuery({query:`
|
|
6
|
-
mutation resendOtp($data: ResendOTPRequest!) { resend_otp(params: $data) { message }}
|
|
7
|
-
`,variables:{data:e}})).resend_otp}catch(r){throw new Error(r)}};resetPassword=async e=>{try{return(await this.graphqlQuery({query:"mutation resetPassword($data: ResetPasswordInput!) { reset_password(params: $data) { message } }",variables:{data:e}})).reset_password}catch(r){throw new Error(r)}};revokeToken=async e=>{if(!e.refresh_token&&!e.refresh_token.trim())throw new Error("Invalid refresh_token");return await(await _()(`${this.config.authorizerURL}/oauth/revoke`,{method:"POST",headers:{...this.config.extraHeaders},body:JSON.stringify({refresh_token:e.refresh_token,client_id:this.config.clientID})})).json()};signup=async e=>{try{return(await this.graphqlQuery({query:`
|
|
8
|
-
mutation signup($data: SignUpInput!) { signup(params: $data) { ${p}}}
|
|
9
|
-
`,variables:{data:e}})).signup}catch(r){throw new Error(r)}};updateProfile=async(e,r)=>{try{return(await this.graphqlQuery({query:"mutation updateProfile($data: UpdateProfileInput!) { update_profile(params: $data) { message } }",headers:r,variables:{data:e}})).update_profile}catch(s){throw new Error(s)}};validateJWTToken=async e=>{try{return(await this.graphqlQuery({query:"query validateJWTToken($params: ValidateJWTTokenInput!){validate_jwt_token(params: $params) { is_valid claims } }",variables:{params:e}})).validate_jwt_token}catch(r){throw new Error(r)}};verifyEmail=async e=>{try{return(await this.graphqlQuery({query:`
|
|
10
|
-
mutation verifyEmail($data: VerifyEmailInput!) { verify_email(params: $data) { ${p}}}
|
|
11
|
-
`,variables:{data:e}})).verify_email}catch(r){throw new Error(r)}};verifyOtp=async e=>{try{return(await this.graphqlQuery({query:`
|
|
12
|
-
mutation verifyOtp($data: VerifyOTPRequest!) { verify_otp(params: $data) { ${p}}}
|
|
13
|
-
`,variables:{data:e}})).verify_otp}catch(r){throw new Error(r)}}};n(m,"Authorizer");export{m as Authorizer,f as OAuthProviders,l as ResponseTypes};
|
|
14
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/types.ts","../src/utils.ts"],"sourcesContent":["// Note: write gql query in single line to reduce bundle size\nimport crossFetch from 'cross-fetch'\nimport { DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS } from './constants'\nimport * as Types from './types'\nimport {\n bufferToBase64UrlEncoded,\n createQueryParams,\n createRandomString,\n encode,\n executeIframe,\n hasWindow,\n sha256,\n trimURL,\n} from './utils'\n\n// re-usable gql response fragment\nconst userFragment = 'id email email_verified given_name family_name middle_name nickname preferred_username picture signup_methods gender birthdate phone_number phone_number_verified roles created_at updated_at is_multi_factor_auth_enabled '\nconst authTokenFragment = `message access_token expires_in refresh_token id_token should_show_otp_screen user { ${userFragment} }`\n\n// set fetch based on window object. Cross fetch have issues with umd build\nconst getFetcher = () => (hasWindow() ? window.fetch : crossFetch)\n\nexport * from './types'\nexport class Authorizer {\n // class variable\n config: Types.ConfigType\n codeVerifier: string\n\n // constructor\n constructor(config: Types.ConfigType) {\n if (!config)\n throw new Error('Configuration is required')\n\n this.config = config\n if (!config.authorizerURL && !config.authorizerURL.trim())\n throw new Error('Invalid authorizerURL')\n\n if (config.authorizerURL)\n this.config.authorizerURL = trimURL(config.authorizerURL)\n\n if (!config.redirectURL && !config.redirectURL.trim())\n throw new Error('Invalid redirectURL')\n else\n this.config.redirectURL = trimURL(config.redirectURL)\n\n this.config.extraHeaders = {\n ...(config.extraHeaders || {}),\n 'x-authorizer-url': this.config.authorizerURL,\n 'Content-Type': 'application/json',\n }\n this.config.clientID = config.clientID.trim()\n }\n\n authorize = async (data: Types.AuthorizeInput) => {\n if (!hasWindow())\n throw new Error('this feature is only supported in browser')\n\n const scopes = ['openid', 'profile', 'email']\n if (data.use_refresh_token)\n scopes.push('offline_access')\n\n const requestData: Record<string, string> = {\n redirect_uri: this.config.redirectURL,\n response_mode: data.response_mode || 'web_message',\n state: encode(createRandomString()),\n nonce: encode(createRandomString()),\n response_type: data.response_type,\n scope: scopes.join(' '),\n client_id: this.config.clientID,\n }\n\n if (data.response_type === Types.ResponseTypes.Code) {\n this.codeVerifier = createRandomString()\n const sha = await sha256(this.codeVerifier)\n const codeChallenge = bufferToBase64UrlEncoded(sha)\n requestData.code_challenge = codeChallenge\n }\n\n const authorizeURL = `${\n\t\t\tthis.config.authorizerURL\n\t\t}/authorize?${createQueryParams(requestData)}`\n\n if (requestData.response_mode !== 'web_message') {\n window.location.replace(authorizeURL)\n return\n }\n\n try {\n const iframeRes = await executeIframe(\n authorizeURL,\n this.config.authorizerURL,\n DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n )\n\n if (data.response_type === Types.ResponseTypes.Code) {\n // get token and return it\n const token = await this.getToken({ code: iframeRes.code })\n return token\n }\n\n // this includes access_token, id_token & refresh_token(optionally)\n return iframeRes\n }\n catch (err) {\n if (err.error) {\n window.location.replace(\n\t\t\t\t\t`${this.config.authorizerURL}/app?state=${encode(\n\t\t\t\t\t\tJSON.stringify(this.config),\n\t\t\t\t\t)}&redirect_uri=${this.config.redirectURL}`,\n )\n }\n\n throw err\n }\n }\n\n browserLogin = async (): Promise<Types.AuthToken | void> => {\n try {\n const token = await this.getSession()\n return token\n }\n catch (err) {\n if (!hasWindow())\n throw new Error('browserLogin is only supported for browsers')\n\n window.location.replace(\n\t\t\t\t`${this.config.authorizerURL}/app?state=${encode(\n\t\t\t\t\tJSON.stringify(this.config),\n\t\t\t\t)}&redirect_uri=${this.config.redirectURL}`,\n )\n }\n }\n\n forgotPassword = async (\n data: Types.ForgotPasswordInput,\n ): Promise<Types.Response | void> => {\n if (!data.state)\n data.state = encode(createRandomString())\n\n if (!data.redirect_uri)\n data.redirect_uri = this.config.redirectURL\n\n try {\n const forgotPasswordRes = await this.graphqlQuery({\n query: 'mutation forgotPassword($data: ForgotPasswordInput!) {\tforgot_password(params: $data) { message } }',\n variables: {\n data,\n },\n })\n return forgotPasswordRes.forgot_password\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n getMetaData = async (): Promise<Types.MetaData | void> => {\n try {\n const res = await this.graphqlQuery({\n query: 'query { meta { version is_google_login_enabled is_facebook_login_enabled is_github_login_enabled is_linkedin_login_enabled is_apple_login_enabled is_twitter_login_enabled is_microsoft_login_enabled is_email_verification_enabled is_basic_authentication_enabled is_magic_link_login_enabled is_sign_up_enabled is_strong_password_enabled } }',\n })\n\n return res.meta\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n getProfile = async (headers?: Types.Headers): Promise<Types.User | void> => {\n try {\n const profileRes = await this.graphqlQuery({\n query: `query {\tprofile { ${userFragment} } }`,\n headers,\n })\n\n return profileRes.profile\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n // this is used to verify / get session using cookie by default. If using nodejs pass authorization header\n getSession = async (\n headers?: Types.Headers,\n params?: Types.SessionQueryInput,\n ): Promise<Types.AuthToken> => {\n try {\n const res = await this.graphqlQuery({\n query: `query getSession($params: SessionQueryInput){session(params: $params) { ${authTokenFragment} } }`,\n headers,\n variables: {\n params,\n },\n })\n return res.session\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n getToken = async (\n data: Types.GetTokenInput,\n ): Promise<Types.GetTokenResponse> => {\n if (!data.grant_type)\n data.grant_type = 'authorization_code'\n\n if (data.grant_type === 'refresh_token' && !data.refresh_token)\n throw new Error('Invalid refresh_token')\n\n if (data.grant_type === 'authorization_code' && !this.codeVerifier)\n throw new Error('Invalid code verifier')\n\n const requestData = {\n client_id: this.config.clientID,\n code: data.code || '',\n code_verifier: this.codeVerifier || '',\n grant_type: data.grant_type || '',\n refresh_token: data.refresh_token || '',\n }\n\n try {\n const fetcher = getFetcher()\n const res = await fetcher(`${this.config.authorizerURL}/oauth/token`, {\n method: 'POST',\n body: JSON.stringify(requestData),\n headers: {\n ...this.config.extraHeaders,\n },\n credentials: 'include',\n })\n\n const json = await res.json()\n if (res.status >= 400)\n throw new Error(json)\n\n return json\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n // helper to execute graphql queries\n // takes in any query or mutation string as input\n graphqlQuery = async (data: Types.GraphqlQueryInput) => {\n const fetcher = getFetcher()\n const res = await fetcher(`${this.config.authorizerURL}/graphql`, {\n method: 'POST',\n body: JSON.stringify({\n query: data.query,\n variables: data.variables || {},\n }),\n headers: {\n ...this.config.extraHeaders,\n ...(data.headers || {}),\n },\n credentials: 'include',\n })\n\n const json = await res.json()\n\n if (json.errors && json.errors.length) {\n console.error(json.errors)\n throw new Error(json.errors[0].message)\n }\n\n return json.data\n }\n\n login = async (data: Types.LoginInput): Promise<Types.AuthToken | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation login($data: LoginInput!) { login(params: $data) { ${authTokenFragment}}}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.login\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n logout = async (headers?: Types.Headers): Promise<Types.Response | void> => {\n try {\n const res = await this.graphqlQuery({\n query: ' mutation { logout { message } } ',\n headers,\n })\n return res.logout\n }\n catch (err) {\n console.error(err)\n }\n }\n\n magicLinkLogin = async (\n data: Types.MagicLinkLoginInput,\n ): Promise<Types.Response> => {\n try {\n if (!data.state)\n data.state = encode(createRandomString())\n\n if (!data.redirect_uri)\n data.redirect_uri = this.config.redirectURL\n\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation magicLinkLogin($data: MagicLinkLoginInput!) { magic_link_login(params: $data) { message }}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.magic_link_login\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n oauthLogin = async (\n oauthProvider: string,\n roles?: string[],\n redirect_uri?: string,\n state?: string,\n ): Promise<void> => {\n let urlState = state\n if (!urlState)\n urlState = encode(createRandomString())\n\n // @ts-expect-error\n if (!Object.values(Types.OAuthProviders).includes(oauthProvider)) {\n throw new Error(\n\t\t\t\t`only following oauth providers are supported: ${Object.values(\n\t\t\t\t\toauthProvider,\n\t\t\t\t).toString()}`,\n )\n }\n if (!hasWindow())\n throw new Error('oauthLogin is only supported for browsers')\n\n window.location.replace(\n\t\t\t`${this.config.authorizerURL}/oauth_login/${oauthProvider}?redirect_uri=${\n\t\t\t\tredirect_uri || this.config.redirectURL\n\t\t\t}&state=${urlState}${\n\t\t\t\t(roles && roles.length) ? `&roles=${roles.join(',')}` : ''\n\t\t\t}`,\n )\n }\n\n resendOtp = async (\n data: Types.ResendOtpInput,\n ): Promise<Types.Response | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation resendOtp($data: ResendOTPRequest!) { resend_otp(params: $data) { message }}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.resend_otp\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n resetPassword = async (\n data: Types.ResetPasswordInput,\n ): Promise<Types.Response | void> => {\n try {\n const resetPasswordRes = await this.graphqlQuery({\n query: 'mutation resetPassword($data: ResetPasswordInput!) {\treset_password(params: $data) { message } }',\n variables: {\n data,\n },\n })\n return resetPasswordRes.reset_password\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n revokeToken = async (data: { refresh_token: string }) => {\n if (!data.refresh_token && !data.refresh_token.trim())\n throw new Error('Invalid refresh_token')\n\n const fetcher = getFetcher()\n const res = await fetcher(`${this.config.authorizerURL}/oauth/revoke`, {\n method: 'POST',\n headers: {\n ...this.config.extraHeaders,\n },\n body: JSON.stringify({\n refresh_token: data.refresh_token,\n client_id: this.config.clientID,\n }),\n })\n\n return await res.json()\n }\n\n signup = async (data: Types.SignupInput): Promise<Types.AuthToken | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation signup($data: SignUpInput!) { signup(params: $data) { ${authTokenFragment}}}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.signup\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n updateProfile = async (\n data: Types.UpdateProfileInput,\n headers?: Types.Headers,\n ): Promise<Types.Response | void> => {\n try {\n const updateProfileRes = await this.graphqlQuery({\n query: 'mutation updateProfile($data: UpdateProfileInput!) {\tupdate_profile(params: $data) { message } }',\n headers,\n variables: {\n data,\n },\n })\n\n return updateProfileRes.update_profile\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n validateJWTToken = async (\n params?: Types.ValidateJWTTokenInput,\n ): Promise<Types.ValidateJWTTokenResponse> => {\n try {\n const res = await this.graphqlQuery({\n query: 'query validateJWTToken($params: ValidateJWTTokenInput!){validate_jwt_token(params: $params) { is_valid claims } }',\n variables: {\n params,\n },\n })\n\n return res.validate_jwt_token\n }\n catch (error) {\n throw new Error(error)\n }\n }\n\n verifyEmail = async (\n data: Types.VerifyEmailInput,\n ): Promise<Types.AuthToken | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation verifyEmail($data: VerifyEmailInput!) { verify_email(params: $data) { ${authTokenFragment}}}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.verify_email\n }\n catch (err) {\n throw new Error(err)\n }\n }\n\n verifyOtp = async (\n data: Types.VerifyOtpInput,\n ): Promise<Types.AuthToken | void> => {\n try {\n const res = await this.graphqlQuery({\n query: `\n\t\t\t\t\tmutation verifyOtp($data: VerifyOTPRequest!) { verify_otp(params: $data) { ${authTokenFragment}}}\n\t\t\t\t`,\n variables: { data },\n })\n\n return res.verify_otp\n }\n catch (err) {\n throw new Error(err)\n }\n }\n}\n","export interface ConfigType {\n authorizerURL: string\n redirectURL: string\n clientID: string\n extraHeaders?: Record<string, string>\n}\n\nexport interface User {\n id: string\n email: string\n preferred_username: string\n email_verified: boolean\n signup_methods: string\n given_name?: string | null\n family_name?: string | null\n middle_name?: string | null\n nickname?: string | null\n picture?: string | null\n gender?: string | null\n birthdate?: string | null\n phone_number?: string | null\n phone_number_verified?: boolean | null\n roles?: string[]\n created_at: number\n updated_at: number\n is_multi_factor_auth_enabled?: boolean\n}\n\nexport interface AuthToken {\n message?: string\n access_token: string\n expires_in: number\n id_token: string\n refresh_token?: string\n user?: User\n should_show_otp_screen?: boolean\n}\n\nexport interface Response {\n message: string\n}\n\nexport type Headers = Record<string, string>\n\nexport interface LoginInput {\n email: string\n password: string\n roles?: string[]\n scope?: string[]\n state?: string\n}\n\nexport interface SignupInput {\n email: string\n password: string\n confirm_password: string\n given_name?: string\n family_name?: string\n middle_name?: string\n nickname?: string\n picture?: string\n gender?: string\n birthdate?: string\n phone_number?: string\n roles?: string[]\n scope?: string[]\n redirect_uri?: string\n is_multi_factor_auth_enabled?: boolean\n state?: string\n}\n\nexport interface MagicLinkLoginInput {\n email: string\n roles?: string[]\n scopes?: string[]\n state?: string\n redirect_uri?: string\n}\n\nexport interface VerifyEmailInput { token: string; state?: string }\n\nexport interface VerifyOtpInput { email: string; otp: string; state?: string }\n\nexport interface ResendOtpInput { email: string }\n\nexport interface GraphqlQueryInput {\n query: string\n variables?: Record<string, any>\n headers?: Headers\n}\n\nexport interface MetaData {\n version: string\n client_id: string\n is_google_login_enabled: boolean\n is_facebook_login_enabled: boolean\n is_github_login_enabled: boolean\n is_linkedin_login_enabled: boolean\n is_apple_login_enabled: boolean\n is_twitter_login_enabled: boolean\n is_microsoft_login_enabled: boolean\n is_email_verification_enabled: boolean\n is_basic_authentication_enabled: boolean\n is_magic_link_login_enabled: boolean\n is_sign_up_enabled: boolean\n is_strong_password_enabled: boolean\n}\n\nexport interface UpdateProfileInput {\n old_password?: string\n new_password?: string\n confirm_new_password?: string\n email?: string\n given_name?: string\n family_name?: string\n middle_name?: string\n nickname?: string\n gender?: string\n birthdate?: string\n phone_number?: string\n picture?: string\n is_multi_factor_auth_enabled?: boolean\n}\n\nexport interface ForgotPasswordInput {\n email: string\n state?: string\n redirect_uri?: string\n}\n\nexport interface ResetPasswordInput {\n token: string\n password: string\n confirm_password: string\n}\n\nexport interface SessionQueryInput {\n roles?: string[]\n}\n\nexport interface IsValidJWTQueryInput {\n jwt: string\n roles?: string[]\n}\n\nexport interface ValidJWTResponse {\n valid: string\n message: string\n}\n\nexport enum OAuthProviders {\n Apple = 'apple',\n Github = 'github',\n Google = 'google',\n Facebook = 'facebook',\n LinkedIn = 'linkedin',\n}\n\nexport enum ResponseTypes {\n Code = 'code',\n Token = 'token',\n}\n\nexport interface AuthorizeInput {\n response_type: ResponseTypes\n use_refresh_token?: boolean\n response_mode?: string\n}\n\nexport interface AuthorizeResponse {\n state: string\n code?: string\n error?: string\n error_description?: string\n}\n\nexport interface RevokeTokenInput {\n refresh_token: string\n}\n\nexport interface GetTokenInput {\n code?: string\n grant_type?: string\n refresh_token?: string\n}\n\nexport interface GetTokenResponse {\n access_token: string\n expires_in: number\n id_token: string\n refresh_token?: string\n}\n\nexport interface ValidateJWTTokenInput {\n token_type: 'access_token' | 'id_token' | 'refresh_token'\n token: string\n roles?: string[]\n}\n\nexport interface ValidateJWTTokenResponse {\n is_valid: boolean\n claims: Record<string, any>\n}\n","import {\n CLEANUP_IFRAME_TIMEOUT_IN_SECONDS,\n DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n} from './constants'\nimport { AuthorizeResponse } from './types'\n\nexport const hasWindow = (): boolean => typeof window !== 'undefined'\n\nexport const trimURL = (url: string): string => {\n let trimmedData = url.trim()\n const lastChar = trimmedData[trimmedData.length - 1]\n if (lastChar === '/')\n trimmedData = trimmedData.slice(0, -1)\n\n return trimmedData\n}\n\nexport const getCrypto = () => {\n // ie 11.x uses msCrypto\n return hasWindow()\n ? ((window.crypto || (window as any).msCrypto) as Crypto)\n : null\n}\n\nexport const getCryptoSubtle = () => {\n const crypto = getCrypto()\n // safari 10.x uses webkitSubtle\n return (crypto && crypto.subtle) || (crypto as any).webkitSubtle\n}\n\nexport const createRandomString = () => {\n const charset\n\t\t= '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.'\n let random = ''\n const crypto = getCrypto()\n if (crypto) {\n const randomValues = Array.from(crypto.getRandomValues(new Uint8Array(43)))\n randomValues.forEach(v => (random += charset[v % charset.length]))\n }\n return random\n}\n\nexport const encode = (value: string) =>\n hasWindow() ? btoa(value) : Buffer.from(value).toString('base64')\nexport const decode = (value: string) =>\n hasWindow() ? atob(value) : Buffer.from(value, 'base64').toString('ascii')\n\nexport const createQueryParams = (params: any) => {\n return Object.keys(params)\n .filter(k => typeof params[k] !== 'undefined')\n .map(k => `${encodeURIComponent(k)}=${encodeURIComponent(params[k])}`)\n .join('&')\n}\n\nexport const sha256 = async (s: string) => {\n const digestOp: any = getCryptoSubtle().digest(\n { name: 'SHA-256' },\n new TextEncoder().encode(s),\n )\n\n // msCrypto (IE11) uses the old spec, which is not Promise based\n // https://msdn.microsoft.com/en-us/expression/dn904640(v=vs.71)\n if ((window as any).msCrypto) {\n return new Promise((resolve, reject) => {\n digestOp.oncomplete = (e: any) => {\n resolve(e.target.result)\n }\n\n digestOp.onerror = (e: ErrorEvent) => {\n reject(e.error)\n }\n\n digestOp.onabort = () => {\n reject(new Error('The digest operation was aborted'))\n }\n })\n }\n\n return await digestOp\n}\n\nconst urlEncodeB64 = (input: string) => {\n const b64Chars: { [index: string]: string } = { '+': '-', '/': '_', '=': '' }\n return input.replace(/[+/=]/g, (m: string) => b64Chars[m])\n}\n\n// https://stackoverflow.com/questions/30106476/\nconst decodeB64 = (input: string) =>\n decodeURIComponent(\n atob(input)\n .split('')\n .map((c) => {\n return `%${(`00${c.charCodeAt(0).toString(16)}`).slice(-2)}`\n })\n .join(''),\n )\n\nexport const urlDecodeB64 = (input: string) =>\n decodeB64(input.replace(/_/g, '/').replace(/-/g, '+'))\n\nexport const bufferToBase64UrlEncoded = (input: number[] | Uint8Array) => {\n const ie11SafeInput = new Uint8Array(input)\n return urlEncodeB64(\n window.btoa(String.fromCharCode(...Array.from(ie11SafeInput))),\n )\n}\n\nexport const executeIframe = (\n authorizeUrl: string,\n eventOrigin: string,\n timeoutInSeconds: number = DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n) => {\n return new Promise<AuthorizeResponse>((resolve, reject) => {\n const iframe = window.document.createElement('iframe')\n iframe.setAttribute('id', 'authorizer-iframe')\n iframe.setAttribute('width', '0')\n iframe.setAttribute('height', '0')\n iframe.style.display = 'none'\n\n let iframeEventHandler: (e: MessageEvent) => void\n\n const removeIframe = () => {\n if (window.document.body.contains(iframe)) {\n window.document.body.removeChild(iframe)\n window.removeEventListener('message', iframeEventHandler, false)\n }\n }\n\n const timeoutSetTimeoutId = setTimeout(() => {\n removeIframe()\n }, timeoutInSeconds * 1000)\n\n iframeEventHandler = function (e: MessageEvent) {\n if (e.origin !== eventOrigin)\n return\n if (!e.data || !e.data.response)\n return\n\n const eventSource = e.source\n\n if (eventSource)\n (eventSource as any).close()\n\n e.data.response.error ? reject(e.data.response) : resolve(e.data.response)\n\n clearTimeout(timeoutSetTimeoutId)\n window.removeEventListener('message', iframeEventHandler, false)\n setTimeout(removeIframe, CLEANUP_IFRAME_TIMEOUT_IN_SECONDS * 1000)\n }\n\n window.addEventListener('message', iframeEventHandler, false)\n window.document.body.appendChild(iframe)\n iframe.setAttribute('src', authorizeUrl)\n })\n}\n"],"mappings":"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","names":["crossFetch","OAuthProviders","Apple","Github","Google","Facebook","LinkedIn","ResponseTypes","Code","Token","hasWindow","__name","window","trimURL","url","trimmedData","trim","length","slice","getCrypto","crypto","msCrypto","getCryptoSubtle","subtle","webkitSubtle","createRandomString","charset","random","Array","from","getRandomValues","Uint8Array","forEach","v","encode","value","btoa","Buffer","toString","createQueryParams","__name","params","Object","keys","filter","k","map","encodeURIComponent","join","sha256","s","digestOp","getCryptoSubtle","digest","name","TextEncoder","encode","window","msCrypto","Promise","resolve","reject","oncomplete","e","target","result","onerror","error","onabort","Error","urlEncodeB64","input","b64Chars","replace","m","bufferToBase64UrlEncoded","__name","input","ie11SafeInput","Uint8Array","urlEncodeB64","window","btoa","String","fromCharCode","Array","from","executeIframe","authorizeUrl","eventOrigin","timeoutInSeconds","DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS","Promise","resolve","reject","iframe","document","createElement","setAttribute","style","display","iframeEventHandler","removeIframe","body","contains","removeChild","removeEventListener","timeoutSetTimeoutId","setTimeout","e","origin","data","response","eventSource","source","close","error","clearTimeout","CLEANUP_IFRAME_TIMEOUT_IN_SECONDS","addEventListener","appendChild","userFragment","authTokenFragment","getFetcher","__name","hasWindow","window","fetch","crossFetch","Authorizer","constructor","config","Error","authorizerURL","trim","trimURL","redirectURL","extraHeaders","clientID","authorize","data","scopes","use_refresh_token","push","requestData","redirect_uri","response_mode","state","encode","createRandomString","nonce","response_type","scope","join","client_id","ResponseTypes","Code","codeVerifier","sha","sha256","codeChallenge","bufferToBase64UrlEncoded","code_challenge","authorizeURL","createQueryParams","location","replace","iframeRes","executeIframe","DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS","getToken","code","err","error","JSON","stringify","browserLogin","getSession","forgotPassword","graphqlQuery","query","variables","forgot_password","getMetaData","meta","getProfile","headers","profile","params","session","grant_type","refresh_token","code_verifier","res","method","body","credentials","json","status","errors","length","console","message","login","logout","magicLinkLogin","magic_link_login","oauthLogin","oauthProvider","roles","urlState","Object","values","OAuthProviders","includes","toString","resendOtp","resend_otp","resetPassword","reset_password","revokeToken","signup","updateProfile","update_profile","validateJWTToken","validate_jwt_token","verifyEmail","verify_email","verifyOtp","verify_otp"]}
|