{"version":3,"file":"keycloakService.mjs","sources":["../../lib/services/keycloakService.ts"],"sourcesContent":["// @ts-nocheck\n/* eslint-disable */\nimport { reactive } from 'vue'\nimport Keycloak from 'keycloak-js';\nimport qs from 'qs';\nimport axios from 'axios';\nimport store from \"../store\";\n\nlet installed = false;\nlet rtpToken = null;\n\nexport default {\n  install(app, params = {}) {\n    if (installed) return;\n    installed = true;\n\n    const defaultParams = {\n      config: window.__BASEURL__ ? `${window.__BASEURL__}/config` : '/config',\n      init: { onLoad: 'login-required' },\n    };\n    const options = Object.assign({}, defaultParams, params);\n    if (assertOptions(options).hasError) throw new Error(`Invalid options given: ${assertOptions(options).error}`);\n    const watch = reactive({\n      ready: false,\n      authenticated: false,\n      userName: null,\n      fullName: null,\n      token: null,\n      rtpToken: null,\n      tokenParsed: null,\n      logoutFn: null,\n      loginFn: null,\n      login: null,\n      createLoginUrl: null,\n      createLogoutUrl: null,\n      createRegisterUrl: null,\n      register: null,\n      accountManagement: null,\n      createAccountUrl: null,\n      loadUserProfile: null,\n      loadUserInfo: null,\n      subject: null,\n      idToken: null,\n      idTokenParsed: null,\n      realmAccess: null,\n      resourceAccess: null,\n      refreshToken: null,\n      refreshTokenParsed: null,\n      timeSkew: null,\n      responseMode: null,\n      responseType: null,\n      hasRealmRole: null,\n      hasResourceRole: null,\n      getRtpToken: null,\n    });\n\n    getConfig(options.config)\n    .then((config) => {\n      init(config, watch, options);\n      Object.defineProperty(app.config.globalProperties, '$keycloak', {\n        get() {\n          return watch;\n        },\n      });\n    })\n    .catch((err) => {\n      console.error(err);\n    });\n  },\n};\n\nfunction init(config, watch, options) {\n  const ctor = sanitizeConfig(config);\n  const keycloak = Keycloak(ctor);\n\n  keycloak.onReady = function (authenticated) {\n    updateWatchVariables(authenticated);\n    watch.ready = true;\n    // TODO: Fix deprecated emit() functionality\n    typeof options.onReady === 'function' && watch.$emit('ready', options.onReady.bind(this, keycloak));\n  };\n\n  keycloak.onAuthSuccess = function () {\n    // Check token validity every 10 seconds (10 000 ms) and, if necessary, update the token.\n    // Refresh token if it's valid for less then 60 seconds\n    const updateTokenInterval = setInterval(() => keycloak.updateToken(60)\n    .then((hasRefreshed) => {\n      if (hasRefreshed) {\n        // When the auth token refreshes, 'invalidate' the stored rtpToken\n        // to force getting a new rtpToken the next time\n        rtpToken = null;\n      }\n    })\n    .catch(() => {\n      rtpToken = null;\n      keycloak.clearToken();\n    }), 10000);\n\n    watch.logoutFn = () => {\n      clearInterval(updateTokenInterval);\n    };\n  };\n\n  keycloak.onAuthRefreshSuccess = function () {\n    updateWatchVariables(true);\n  };\n\n  keycloak.init(options.init)\n  .catch((err) => {\n    typeof options.onInitError === 'function' && options.onInitError(err);\n  });\n\n  let updateTokenTimeout = null;\n\n  function getRtpToken({ autoRefresh = false, refreshToken = null} = {}) {\n    const rtpConfig = options.config.rtp;\n    const baseUrl = options.config.url;\n    const realm = options.config.realm;\n    const token = keycloak.token;\n    const endpoint = `${baseUrl}/realms/${realm}/protocol/openid-connect/token`;\n    const requestBody = {\n      grant_type: rtpConfig.grand_type,\n      audience: rtpConfig.audience,\n      ...refreshToken ? { refresh_token: refreshToken } : {},\n    };\n\n    return new Promise((resolve, reject) => {\n      if (rtpToken && !refreshToken) {\n        resolve(rtpToken)\n        return;\n      }\n\n      axios.post(endpoint, qs.stringify(requestBody), {\n        headers: {\n          Authorization: `Bearer ${token}`,\n          'Content-Type': 'application/x-www-form-urlencoded',\n        },\n      }).then((response) => {\n        rtpToken = response?.data?.access_token;\n        const refreshInterval = response?.data?.expires_in * 1000 * 0.8;\n\n        if (autoRefresh) {\n          if (updateTokenTimeout) clearTimeout(updateTokenTimeout);\n          updateTokenTimeout = setTimeout(async () => {\n            await getRtpToken({ autoRefresh: true, refreshToken: response.data.refresh_token });\n          }, refreshInterval);\n        }\n        updateWatchVariables(true);\n        resolve(rtpToken);\n      }).catch((error) => {\n        reject(error);\n      });\n    });\n  }\n\n  function loginFn(options) {\n    keycloak.login(options)\n    .then(() => {\n      store.dispatch('auth/setKeycloak', keycloak);\n      store.dispatch('auth/authLogin', keycloak.authenticated);\n    })\n    .catch((err) => {\n      console.error(`Error keycloak login: ${JSON.stringify(err)}`);\n    });\n  }\n\n  function logoutFn(options) {\n    keycloak.logout(options);\n  }\n\n  function updateWatchVariables(isAuthenticated = false) {\n    watch.authenticated = isAuthenticated;\n    watch.loginFn = loginFn;\n    watch.login = keycloak.login;\n    watch.createLoginUrl = keycloak.createLoginUrl;\n    watch.logoutFn = logoutFn;\n    watch.logout = keycloak.logout;\n    watch.createLogoutUrl = keycloak.createLogoutUrl;\n    watch.createRegisterUrl = keycloak.createRegisterUrl;\n    watch.register = keycloak.register;\n    if (isAuthenticated) {\n      watch.accountManagement = keycloak.accountManagement;\n      watch.createAccountUrl = keycloak.createAccountUrl;\n      watch.hasRealmRole = keycloak.hasRealmRole;\n      watch.hasResourceRole = keycloak.hasResourceRole;\n      watch.loadUserProfile = keycloak.loadUserProfile;\n      watch.loadUserInfo = keycloak.loadUserInfo;\n      watch.token = keycloak.token;\n      watch.rtpToken = rtpToken;\n      watch.subject = keycloak.subject;\n      watch.idToken = keycloak.idToken;\n      watch.idTokenParsed = keycloak.idTokenParsed;\n      watch.realmAccess = keycloak.realmAccess;\n      watch.resourceAccess = keycloak.resourceAccess;\n      watch.refreshToken = keycloak.refreshToken;\n      watch.refreshTokenParsed = keycloak.refreshTokenParsed;\n      watch.timeSkew = keycloak.timeSkew;\n      watch.responseMode = keycloak.responseMode;\n      watch.responseType = keycloak.responseType;\n      watch.tokenParsed = keycloak.tokenParsed;\n      watch.userName = keycloak.tokenParsed.preferred_username;\n      watch.fullName = keycloak.tokenParsed.name;\n      watch.getRtpToken = getRtpToken\n    }\n  }\n}\n\nfunction assertOptions(options) {\n  const {\n    config, init, onReady, onInitError,\n  } = options;\n  if (typeof config !== 'string' && !_isObject(config)) {\n    return { hasError: true, error: `'config' option must be a string or an object. Found: '${config}'` };\n  }\n  if (!_isObject(init) || typeof init.onLoad !== 'string') {\n    return { hasError: true, error: `'init' option must be an object with an 'onLoad' property. Found: '${init}'` };\n  }\n  if (onReady && typeof onReady !== 'function') {\n    return { hasError: true, error: `'onReady' option must be a function. Found: '${onReady}'` };\n  }\n  if (onInitError && typeof onInitError !== 'function') {\n    return { hasError: true, error: `'onInitError' option must be a function. Found: '${onInitError}'` };\n  }\n  return {\n    hasError: false,\n    error: null,\n  };\n}\n\nfunction _isObject(obj) {\n  return obj !== null && typeof obj === 'object' && Object.prototype.toString.call(obj) !== '[object Array]';\n}\n\nfunction getConfig(config) {\n  if (_isObject(config)) return Promise.resolve(config);\n  return new Promise((resolve, reject) => {\n    const xhr = new XMLHttpRequest();\n    xhr.open('GET', config);\n    xhr.setRequestHeader('Accept', 'application/json');\n    xhr.onreadystatechange = () => {\n      if (xhr.readyState === 4) {\n        if (xhr.status === 200) {\n          resolve(JSON.parse(xhr.responseText));\n        } else {\n          reject(Error(xhr.statusText));\n        }\n      }\n    };\n    xhr.send();\n  });\n}\n\nfunction sanitizeConfig(config) {\n  const renameProp = (oldProp, newProp, { [oldProp]: old, ...others }) => ({\n    [newProp]: old,\n    ...others,\n  });\n  return Object.keys(config).reduce((previous, key) => {\n    if (['authRealm', 'authUrl', 'authClientId'].includes(key)) {\n      const cleaned = key.replace('auth', '');\n      const newKey = cleaned.charAt(0).toLowerCase() + cleaned.slice(1);\n      return renameProp(key, newKey, previous);\n    }\n    return previous;\n  }, config);\n}"],"names":["installed","rtpToken","keycloakService","app","params","defaultParams","options","assertOptions","watch","reactive","getConfig","config","init","err","ctor","sanitizeConfig","keycloak","Keycloak","authenticated","updateWatchVariables","updateTokenInterval","hasRefreshed","updateTokenTimeout","getRtpToken","autoRefresh","refreshToken","rtpConfig","baseUrl","realm","token","endpoint","requestBody","resolve","reject","axios","qs","response","_a","refreshInterval","_b","error","loginFn","store","logoutFn","isAuthenticated","onReady","onInitError","_isObject","obj","xhr","renameProp","oldProp","newProp","old","others","previous","key","cleaned","newKey"],"mappings":"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"}