{"version":3,"sources":["../src/errors.ts","../src/version.ts","../src/constants.ts","../src/utils.ts"],"sourcesContent":["/**\n * For context on the istanbul ignore statements below, see:\n * https://github.com/gotwarlost/istanbul/issues/690\n */\n\n/**\n * Thrown when network requests to the Auth server fail.\n */\nexport class GenericError extends Error {\n  /* istanbul ignore next */\n  constructor(public error: string, public error_description: string) {\n    super(error_description)\n    Object.setPrototypeOf(this, GenericError.prototype)\n  }\n\n  static fromPayload({\n    error,\n    error_description,\n  }: {\n    error: string\n    error_description: string\n  }) {\n    return new GenericError(error, error_description)\n  }\n}\n\n/**\n * Thrown when handling the redirect callback fails, will be one of Authc's\n * Authentication API's Standard Error Responses: https://authc.io/docs/api/authentication?javascript#standard-error-responses\n */\nexport class AuthenticationError extends GenericError {\n  /* istanbul ignore next */\n  constructor(\n    error: string,\n    error_description: string,\n    public state: string,\n    public appState: any = null,\n  ) {\n    super(error, error_description)\n    // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n    Object.setPrototypeOf(this, AuthenticationError.prototype)\n  }\n}\n\n/**\n * Thrown when silent auth times out (usually due to a configuration issue) or\n * when network requests to the Auth server timeout.\n */\nexport class TimeoutError extends GenericError {\n  /* istanbul ignore next */\n  constructor() {\n    super('timeout', 'Timeout')\n    // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n    Object.setPrototypeOf(this, TimeoutError.prototype)\n  }\n}\n\n/**\n * Error thrown when the login popup times out (if the user does not complete auth)\n */\nexport class PopupTimeoutError extends TimeoutError {\n  /* istanbul ignore next */\n  constructor(public popup: Window) {\n    super()\n    // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n    Object.setPrototypeOf(this, PopupTimeoutError.prototype)\n  }\n}\n\nexport class PopupCancelledError extends GenericError {\n  /* istanbul ignore next */\n  constructor(public popup: Window) {\n    super('cancelled', 'Popup closed')\n    // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n    Object.setPrototypeOf(this, PopupCancelledError.prototype)\n  }\n}\n\n/**\n * Error thrown when the token exchange results in a `mfa_required` error\n */\nexport class MfaRequiredError extends GenericError {\n  /* istanbul ignore next */\n  constructor(\n    error: string,\n    error_description: string,\n    public mfa_token: string,\n  ) {\n    super(error, error_description)\n    // https://github.com/Microsoft/TypeScript-wiki/blob/master/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n    Object.setPrototypeOf(this, MfaRequiredError.prototype)\n  }\n}\n","export default '1.21.0'\n","import type { PopupConfigOptions } from './global'\nimport version from './version'\n\n/**\n * @ignore\n */\nexport const DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS = 60\n\n/**\n * @ignore\n */\nexport const DEFAULT_POPUP_CONFIG_OPTIONS: PopupConfigOptions = {\n  timeoutInSeconds: DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n}\n\n/**\n * @ignore\n */\nexport const DEFAULT_SILENT_TOKEN_RETRY_COUNT = 3\n\n/**\n * @ignore\n */\nexport const CLEANUP_IFRAME_TIMEOUT_IN_SECONDS = 2\n\n/**\n * @ignore\n */\nexport const DEFAULT_FETCH_TIMEOUT_MS = 10000\n\nexport const CACHE_LOCATION_MEMORY = 'memory'\nexport const CACHE_LOCATION_LOCAL_STORAGE = 'localstorage'\n\n/**\n * @ignore\n */\nexport const MISSING_REFRESH_TOKEN_ERROR_MESSAGE\n  = 'The web worker is missing the refresh token'\n\n/**\n * @ignore\n */\nexport const INVALID_REFRESH_TOKEN_ERROR_MESSAGE = 'invalid refresh token'\n\n/**\n * @ignore\n */\nexport const DEFAULT_SCOPE = 'openid profile email'\n\n/**\n * A list of errors that can be issued by the authorization server which the\n * user can recover from by signing in interactively.\n * https://openid.net/specs/openid-connect-core-1_0.html#AuthError\n * @ignore\n */\nexport const RECOVERABLE_ERRORS = [\n  'login_required',\n  'consent_required',\n  'interaction_required',\n  'account_selection_required',\n  // Strictly speaking the user can't recover from `access_denied` - but they\n  // can get more information about their access being denied by logging in\n  // interactively.\n  'access_denied',\n]\n\n/**\n * @ignore\n */\nexport const DEFAULT_SESSION_CHECK_EXPIRY_DAYS = 1\n\n/**\n * @ignore\n */\nexport const DEFAULT_AUTHC_CLIENT = {\n  name: 'authc-spa-js',\n  version,\n}\n\nexport const DEFAULT_NOW_PROVIDER = () => Date.now()\n","import type { AuthcClientOptions, AuthenticationResult, PopupConfigOptions } from './global'\n\nimport {\n  CLEANUP_IFRAME_TIMEOUT_IN_SECONDS,\n  DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n} from './constants'\n\nimport {\n  GenericError,\n  PopupCancelledError,\n  PopupTimeoutError,\n  TimeoutError,\n} from './errors'\n\nexport const parseQueryResult = (queryString: string): AuthenticationResult => {\n  if (queryString.includes('#'))\n    queryString = queryString.substr(0, queryString.indexOf('#'))\n\n  const queryParams = queryString.split('&')\n  const parsedQuery: Record<string, any> = {}\n\n  queryParams.forEach((qp) => {\n    const [key, val] = qp.split('=')\n    parsedQuery[key] = decodeURIComponent(val)\n  })\n\n  if (parsedQuery.expires_in)\n    parsedQuery.expires_in = parseInt(parsedQuery.expires_in)\n\n  return parsedQuery as AuthenticationResult\n}\n\nexport const runIframe = (\n  authorizeUrl: string,\n  eventOrigin: string,\n  timeoutInSeconds: number = DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS,\n  options: AuthcClientOptions,\n) => {\n  return new Promise<AuthenticationResult>((res, rej) => {\n    const iframe = window.document.createElement('iframe')\n\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      rej(new TimeoutError())\n      removeIframe()\n    }, timeoutInSeconds * 1000)\n\n    iframeEventHandler = function (e: MessageEvent) {\n      if (e.origin !== eventOrigin && !options.redirect_uri?.includes(e.origin)) {\n        if (e.data?.type === 'authorization_response')\n          console.warn('Received message is not from the expected origin', e.origin, eventOrigin, options.redirect_uri)\n\n        return\n      }\n      if (!e.data || e.data.type !== 'authorization_response')\n        return\n\n      const eventSource = e.source\n\n      if (eventSource)\n        (eventSource as any).close()\n\n      e.data.response.error\n        ? rej(GenericError.fromPayload(e.data.response))\n        : res(e.data.response)\n\n      clearTimeout(timeoutSetTimeoutId)\n      window.removeEventListener('message', iframeEventHandler, false)\n\n      // Delay the removal of the iframe to prevent hanging loading status\n      // in Chrome: https://github.com/authc/authc-spa-js/issues/240\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\nexport const openPopup = (url: string) => {\n  const width = 400\n  const height = 600\n  const left = window.screenX + (window.innerWidth - width) / 2\n  const top = window.screenY + (window.innerHeight - height) / 2\n\n  return window.open(\n    url,\n    'authc:authorize:popup',\n    `left=${left},top=${top},width=${width},height=${height},resizable,scrollbars=yes,status=1`,\n  )\n}\n\nexport const runPopup = (config: PopupConfigOptions) => {\n  return new Promise<AuthenticationResult>((resolve, reject) => {\n    let popupEventListener: EventListenerOrEventListenerObject\n\n    let timeoutId: ReturnType<typeof setTimeout> = null\n    // Check each second if the popup is closed triggering a PopupCancelledError\n    const popupTimer = setInterval(() => {\n      if (config.popup && config.popup.closed) {\n        clearInterval(popupTimer)\n        clearTimeout(timeoutId)\n        window.removeEventListener('message', popupEventListener, false)\n        reject(new PopupCancelledError(config.popup))\n      }\n    }, 1000)\n\n    timeoutId = setTimeout(() => {\n      clearInterval(popupTimer)\n      reject(new PopupTimeoutError(config.popup))\n      window.removeEventListener('message', popupEventListener, false)\n    }, (config.timeoutInSeconds || DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS) * 1000)\n\n    popupEventListener = function (e: MessageEvent) {\n      if (!e.data || e.data.type !== 'authorization_response')\n        return\n\n      clearTimeout(timeoutId)\n      clearInterval(popupTimer)\n      window.removeEventListener('message', popupEventListener, false)\n      config.popup.close()\n\n      if (e.data.response.error)\n        return reject(GenericError.fromPayload(e.data.response))\n\n      resolve(e.data.response)\n    }\n\n    window.addEventListener('message', popupEventListener)\n  })\n}\n\nexport const getCrypto = () => {\n  // ie 11.x uses msCrypto\n  return (window.crypto || (window as any).msCrypto) as Crypto\n}\n\nexport const getCryptoSubtle = () => {\n  const crypto = getCrypto()\n  // safari 10.x uses webkitSubtle\n  return crypto.subtle || (crypto as any).webkitSubtle\n}\nexport const createRandomString = () => {\n  const charset\n    = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~'\n  let random = ''\n  const randomValues = Array.from(\n    getCrypto().getRandomValues(new Uint8Array(43)),\n  )\n  randomValues.forEach(v => (random += charset[v % charset.length]))\n  return random\n}\n\nexport const encode = (value: string) => encodeURIComponent(value)\nexport const decode = (value: string) => decodeURIComponent(value)\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  // Instead of returning a promise, it returns a CryptoOperation\n  // with a result property in it.\n  // As a result, the various events need to be handled in the event that we're\n  // working in IE11 (hence the msCrypto check). These events just call resolve\n  // or reject depending on their intention.\n  if ((window as any).msCrypto) {\n    return new Promise((res, rej) => {\n      digestOp.oncomplete = (e: any) => {\n        res(e.target.result)\n      }\n\n      digestOp.onerror = (e: ErrorEvent) => {\n        rej(e.error)\n      }\n\n      digestOp.onabort = () => {\n        rej('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 validateCrypto = () => {\n  if (!getCrypto()) {\n    throw new Error(\n      'For security reasons, `window.crypto` is required to run `authc-spa-js`.',\n    )\n  }\n  if (typeof getCryptoSubtle() === 'undefined') {\n    throw new TypeError(`\n      authc-spa-js must run on a secure origin. See https://github.com/authc/authc-spa-js/blob/master/FAQ.md#why-do-i-get-authc-spa-js-must-run-on-a-secure-origin for more information.\n    `)\n  }\n}\n\nexport const hasContainLoginCodeAndState = () => {\n  return (location.hash.includes('code=') && location.hash.includes('state='))\n   || (location.search.includes('code=') && location.search.includes('state='))\n}\n\nexport const createLogoutIframe = (url: string) => {\n  const iframe = document.createElement('iframe')\n  iframe.style.position = 'fixed'\n  iframe.style.zIndex = '-1'\n  iframe.style.left = '-10000px'\n  iframe.style.top = '-10000px'\n  iframe.style.pointerEvents = 'none'\n  iframe.src = url\n\n  return new Promise<void>((resolve, reject) => {\n    window.document.body.appendChild(iframe)\n    iframe.onload = () => {\n      resolve()\n      iframe.remove()\n    }\n    iframe.onerror = () => {\n      reject()\n    }\n  })\n}\n\nexport async function retryOnFailure<T>(promiseFactory: () => Promise<T>, maxRetries = 3): Promise<T> {\n  let retries = 0\n  while (retries < maxRetries) {\n    try {\n      const result = await promiseFactory()\n      return result\n    }\n    catch (error) {\n      retries++\n    }\n  }\n  throw new Error(`Promise failed after ${maxRetries} retries.`)\n}\n"],"mappings":"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","names":[]}