{"version":3,"file":"index.min.mjs","sources":["../../node_modules/vue-runtime-helpers/dist/normalize-component.mjs","../../src/components/AuthIFrame.vue","../../src/default-options.js","../../src/me.js","../../src/auth.js","../../src/index.mjs"],"sourcesContent":["function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier /* server only */, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\r\n    if (typeof shadowMode !== 'boolean') {\r\n        createInjectorSSR = createInjector;\r\n        createInjector = shadowMode;\r\n        shadowMode = false;\r\n    }\r\n    // Vue.extend constructor export interop.\r\n    const options = typeof script === 'function' ? script.options : script;\r\n    // render functions\r\n    if (template && template.render) {\r\n        options.render = template.render;\r\n        options.staticRenderFns = template.staticRenderFns;\r\n        options._compiled = true;\r\n        // functional template\r\n        if (isFunctionalTemplate) {\r\n            options.functional = true;\r\n        }\r\n    }\r\n    // scopedId\r\n    if (scopeId) {\r\n        options._scopeId = scopeId;\r\n    }\r\n    let hook;\r\n    if (moduleIdentifier) {\r\n        // server build\r\n        hook = function (context) {\r\n            // 2.3 injection\r\n            context =\r\n                context || // cached call\r\n                    (this.$vnode && this.$vnode.ssrContext) || // stateful\r\n                    (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext); // functional\r\n            // 2.2 with runInNewContext: true\r\n            if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\r\n                context = __VUE_SSR_CONTEXT__;\r\n            }\r\n            // inject component styles\r\n            if (style) {\r\n                style.call(this, createInjectorSSR(context));\r\n            }\r\n            // register component module identifier for async chunk inference\r\n            if (context && context._registeredComponents) {\r\n                context._registeredComponents.add(moduleIdentifier);\r\n            }\r\n        };\r\n        // used by ssr in case component is cached and beforeCreate\r\n        // never gets called\r\n        options._ssrRegister = hook;\r\n    }\r\n    else if (style) {\r\n        hook = shadowMode\r\n            ? function (context) {\r\n                style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\r\n            }\r\n            : function (context) {\r\n                style.call(this, createInjector(context));\r\n            };\r\n    }\r\n    if (hook) {\r\n        if (options.functional) {\r\n            // register for functional component in vue file\r\n            const originalRender = options.render;\r\n            options.render = function renderWithStyleInjection(h, context) {\r\n                hook.call(context);\r\n                return originalRender(h, context);\r\n            };\r\n        }\r\n        else {\r\n            // inject component registration as beforeCreate hook\r\n            const existing = options.beforeCreate;\r\n            options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\r\n        }\r\n    }\r\n    return script;\r\n}\n\nexport default normalizeComponent;\n//# sourceMappingURL=normalize-component.mjs.map\n","<template>\n  <iframe v-once id=\"authFrame\" style=\"display:none;\" ref=\"authFrame\" :src=\"`${url}/app/authorize.html`\"/>\n</template>\n\n<script>\n\nexport default {\n  name    : 'AuthIFrame',\n  computed: { url },\n  mounted\n}\n\nfunction url(){\n  return this.auth.accountsUrl\n}\n\nfunction mounted (){\n  if (this.$isServer) return\n  if(!this.$refs || !this.$refs.authFrame) return false\n  \n  window.addEventListener('message', this.auth.receivePostMessage)\n\n  this.$refs.authFrame.onload = () => {\n    const { contentWindow } = this.$refs.authFrame\n    const   type            = 'getAuthenticationToken'\n    const   msg             = JSON.stringify({ type })\n\n    return contentWindow.postMessage(msg, this.url)\n  }\n}\n</script>\n","import { setDefaultOptions, getDefaultOptionsFunction } from '@houlagins/default-options'\nimport { name                                         } from '../package.json'\n\nconst allAccountUrls = [ 'https://accounts.cbddev.xyz', 'https://accounts.staging.cbd.int', 'https://accounts.cbd.int' ]\n\nconst admins      = [ ]\nconst _admins     = [ 'Administrator' ]\n\nconst govRoles    = [ ]\nconst _govRoles   = [ 'NFP-CBD', 'ChmNrNationalFocalPoint', 'ChmNrNationalAuthorizedUser' ]\n\nconst dev  = { accountsUrl: allAccountUrls[0], admins, _admins, govRoles, _govRoles, allAccountUrls }\nconst stg  = { ...dev, ...{ accountsUrl: allAccountUrls[1] } }\nconst prod = { ...stg, ...{ accountsUrl: allAccountUrls[2] } }\n\nconst environments  = { stg, dev, prod }\nconst validationMap = { allAccountUrls: Array, forceEnv: String, accountsUrl: String, admins: Array, _admins: Array, govRoles: Array, _govRoles: Array   }\n\n\nsetDefaultOptions({ environments, validationMap, name }, name)\n\nexport  default getDefaultOptionsFunction(name)","const globalProps = {}\n\nexport const initMe = (Vue, opts) => {\n  const me            = {}\n  const instance      = {}\n\n  globalProps.opts           = opts\n  globalProps.store          = new Vue({ data: { me, instance } })\n  globalProps.store.instance = new MeStore()\n  globalProps.store.instance.set()\n\n  return globalProps.store.instance\n}\n\nexport const getMe = () =>  new Promise(loadingInterval)\n\nfunction loadingInterval(resolve, reject){\n  let timer = undefined\n  const timeout = setTimeout(() => {\n    clearInterval(timer)\n    reject('Error loading $me instance')\n  }, 5000)\n\n  timer = setInterval(() => {\n    if(!globalProps.store.instance) return\n\n    clearInterval(timer)\n    clearTimeout(timeout)\n\n    return resolve(globalProps.store.instance)\n  }, 100)\n}\n//wrapper for store, getters and setter logic\nclass MeStore{\n  get userID(){ return globalProps.store.me.userID }\n  get userId(){ return globalProps.store.me.userID }\n  get name(){ return globalProps.store.me.name }\n  get email(){ return globalProps.store.me.email }\n  get government(){ return globalProps.store.me.government }\n  get institution(){ return globalProps.store.me.institution }\n  get userGroups(){ return globalProps.store.me.userGroups }\n  get isAuthenticated(){ return globalProps.store.me.isAuthenticated }\n  get roles(){ return globalProps.store.me.roles }\n  get isEmailVerified(){ return globalProps.store.me.isEmailVerified }\n  get isSet(){ return globalProps.store.me.userID && globalProps.store.me.userID !== 1 }\n  get isAdmin (){\n    const { roles } = this\n\n    if(!roles || !globalProps.opts) return false\n    \n    const adminRoles = globalProps.opts._admins.concat(globalProps.opts.admins)\n\n    for (const role of adminRoles)\n      if(roles.includes(role))\n        return true\n    \n    return false\n  }\n  get isStaff (){\n    const { userGroups } = this\n\n    if(!userGroups) return false\n  \n    return userGroups.includes('SCBD')\n  }\n  get isGov (){\n    const { roles, government } = this\n\n    if(!government || !roles || !globalProps.opts) return false\n\n    const govRoles = globalProps.opts._govRoles.concat(globalProps.opts.govRoles)\n\n    for (const role of govRoles)\n      if(this.roles.includes(role))\n        return true\n    \n    return false\n  }\n\n  hasRole (role){\n    const { roles } = this || (globalProps.opts || {}).store\n\n    if(!roles) return false\n  \n    return roles.includes(role)\n  }\n  logOut(){\n    globalProps.store.me = this.anonymous()\n  }\n  set (data){\n    globalProps.store.me = data || this.anonymous()\n    this.makeGettersEnumerable(this)\n\n    return this\n  }\n  makeGettersEnumerable(instance){\n    const prototype                    = Object.getPrototypeOf(instance)\n    const prototypePropertyDescriptors = Object.getOwnPropertyDescriptors(prototype)\n\n    for(const [ property, descriptor ] of Object.entries(prototypePropertyDescriptors)){\n      const isNonStaticGetter = (typeof descriptor.get === 'function')\n  \n      if(!isNonStaticGetter) continue\n  \n      descriptor.enumerable = true\n      Object.defineProperty(instance, property, descriptor)\n    }\n  }\n  anonymous(){\n    return {\n      userID         : 1,\n      name           : 'anonymous',\n      email          : 'anonymous@domain',\n      government     : null,\n      userGroups     : null,\n      isAuthenticated: false,\n      isOffline      : true,\n      roles          : []\n    }\n  }\n}\n\n\n","const globalProps = {}\n\nexport const initAuth = (Vue, opts) => {\n  const token    = ''\n  const instance = {}\n\n  globalProps.opts           = opts\n  globalProps.store          = new Vue({ data: { token, instance } })\n  globalProps.store.instance = new AuthStore()\n\n  return globalProps.store.instance\n}\n\nexport const getAuth = () => new Promise(loadingIntervalInstance)\nexport const isTokenLoaded = () => new Promise(loadingInterval)\n\nclass AuthStore{\n  logOut(){ globalProps.store.token = '' }\n\n  set token(t){ globalProps.store.token = t }\n\n  get token(){ return globalProps.store.token }\n  \n  get accountsBaseUrl(){ return this.accountsUrl }\n\n  get accountsUrl(){\n    const { accountsUrl } = globalProps.opts\n  \n    if(!accountsUrl) throw new Error('options.accountsUrl var not set')\n  \n    return accountsUrl\n  }\n\n  get baseReqOpts(){\n    if(!globalProps.store.token) return {}\n    \n    return { headers: this.formatedHeader }\n  }\n\n  get formatedHeader(){\n    if(!globalProps.store.token) return {}\n    \n    return  { Authorization: `Ticket ${globalProps.store.token}` }\n  }\n\n  isAuthLoaded(){  return new Promise(loadingInterval) }\n\n  receivePostMessage(event){\n    if(!isAccountsOrigin(event)) return null\n\n    const { type, authenticationToken } = JSON.parse(event.data)\n\n    if(type!=='authenticationToken') throw new Error('unsupported authentication message type')\n\n    return globalProps.store.token = authenticationToken\n  }\n  \n  dispatchUser(element, meStore){\n    if(!globalProps.elm) globalProps.elm = element\n\n    const event = new Event('$me', { bubbles: true })\n\n    event.$me   = meStore\n    event.$auth = globalProps.store\n    globalProps.elm.dispatchEvent(event)\n    this.onRequestMeEvent(globalProps.elm)\n  }\n\n  onRequestMeEvent(element){\n    if (this.onRequestMeEvent.installed) return\n    else this.onRequestMeEvent.installed = true\n\n    if(!globalProps.elm) globalProps.elm = element\n  \n    window.document.addEventListener('$requestMe', () => this.dispatchUser(globalProps.elm))\n  }\n\n  isAccountsUrl(url){\n    return globalProps.opts.allAccountUrls.includes(url)\n  }\n}\n\nfunction loadingInterval(resolve){\n  const timeout = setTimeout(() => {\n    clearInterval(timer)\n    resolve(globalProps.store.token)\n  }, 5000)\n\n  const timer = setInterval(() => {\n    if(!globalProps.store.token) return\n\n    clearInterval(timer)\n    clearTimeout(timeout)\n    return resolve(globalProps.store.token)\n  }, 100)\n}\n\nfunction loadingIntervalInstance(resolve, reject){\n  let timer = undefined\n  const timeout = setTimeout(() => {\n    clearInterval(timer)\n    reject('Error loading $auth instance')\n  }, 5000)\n\n  timer = setInterval(() => {\n    if(!globalProps.store.instance) return\n\n    clearInterval(timer)\n    clearTimeout(timeout)\n    return resolve(globalProps.store.instance)\n  }, 100)\n}\n\nfunction isAccountsOrigin({ origin } = {}){ return origin === globalProps.opts.accountsUrl }\n","/* eslint-disable */\nimport   Vue          from 'vue'\nimport { pascalCase}  from 'change-case/dist.es2015/index.js'\nimport { get$http   } from '@houlagins/load-http'\nimport { name       } from '../package.json'\n\nimport   AuthIFrame                                  from './components/AuthIFrame.vue'\nimport   getDefaultOptions                           from './default-options'\nimport { initMe           , getMe }                  from './me'\nimport { initAuth         , getAuth, isTokenLoaded } from './auth'\n\nconst NAME        = pascalCase(name.replace('@scbd/', ''))\nconst globalProps = new Vue({ \n                              data: { me: {}, auth: {} },\n                              methods : { $getUser, $logOut, $initSsoScbd }\n                            })\n\nconst globalVueMixin = {\n  data: function (){ return { me: globalProps.me, auth: globalProps.auth, el: undefined } },\n  methods : { $getUser, $logOut, $initSsoScbd },\n  mounted\n}\n\nexport const ssoScbd = globalProps\nexport const plugin  = { install, NAME }\n\nexport default plugin\n\nfunction install (Vue, options = {}){ // eslint-disable-line\n  \n  if (install.installed) return\n  else install.installed = true\n\n  const { forceEnv }   = options\n  const opts           = { ...getDefaultOptions({}, forceEnv), ...options }\n\n  globalProps.me   = initMe(Vue, opts)\n  globalProps.auth = initAuth(Vue, opts)\n\n  Vue.mixin(globalVueMixin)\n\n  globalProps.opts = opts\n  globalProps.Vue  = Vue\n\n  getAuth()\n    .then(async (auth) => { globalProps.auth = auth; globalVueMixin.auth = auth; })// eslint-disable-line\n    .then(getMe)\n    .then(async (me) => { globalProps.me = me; globalVueMixin.me = me; })// eslint-disable-line\n}\n\nasync function mounted(){  // eslint-disable-line\n  //await getMe()// ensure defaults loaded user anon\n  if(globalProps.el) return\n  globalProps.el = getExistingIframe()\n\n  if(!globalProps.el && this.$options.name!=='AuthIFrame' && this.$options.name)\n    createIframe()\n  \n  try{\n    await this.auth.isAuthLoaded()\n    await this.auth.dispatchUser(globalProps.el, await this.$getUser())\n\n    window.document.addEventListener('$requestMe', async () => {\n      const user = await this.$getUser()\n\n      this.auth.dispatchUser(globalProps.el,  user)\n      this.$root.$emit('$me',  user)\n    })\n  }\n  catch(e){\n    globalProps.me.set()\n    this.auth.dispatchUser(globalProps.el, globalProps.me)\n    this.$root.$emit('$me', globalProps.me)\n    console.error(e)\n  }\n}\n\nfunction createIframe(){\n  const AuthIFrameClass    = globalProps.Vue.extend(AuthIFrame)\n  const AuthIFrameInstance = new AuthIFrameClass()\n  \n  AuthIFrameInstance.$mount()\n\n  document.getElementsByTagName('body')[0].appendChild(AuthIFrameInstance.$el)\n  globalProps.el = AuthIFrameInstance.$el\n}\n\nfunction getExistingIframe(){\n  const iFrames = window.document.getElementsByTagName('iframe')\n\n  for (const anIframe of iFrames){\n    const { origin } = new URL(anIframe.getAttribute('src'))\n\n    if(globalProps.auth.accountsBaseUrl === origin)\n      return useExistingIframe(anIframe)\n  }\n}\n\nfunction useExistingIframe($el){\n  window.addEventListener('message', globalProps.auth.receivePostMessage)\n\n  const { contentWindow } = $el\n  const   type            = 'getAuthenticationToken'\n  const   msg             = JSON.stringify({ type })\n\n  contentWindow.postMessage(msg, globalProps.auth.accountsBaseUrl)\n\n  return $el\n}\n\nasync function $getUser(){\n  await isTokenLoaded()\n\n  const   me                             = await getUser()\n  const { FirstName, LastName, Country } = await getProfile(me.userID)\n  \n  const firstName = FirstName\n  const lastName  = LastName\n  const country   = Country\n\n  globalProps.Vue.nextTick(() => globalProps.me.set({ ...me, firstName, lastName, country }))\n\n  return globalProps.me\n}\n\nfunction $logOut(){\n  globalProps.me.logOut()\n  globalProps.auth.logOut()\n\n  if(!globalProps.el) return\n  \n  const msg = JSON.stringify({ type: 'setAuthenticationToken', authenticationToken: null, authenticationEmail: null, expiration: null })\n\n  globalProps.el.contentWindow.postMessage(msg, globalProps.auth.accountsUrl)\n\n  setTimeout(() => {\n    globalProps.auth.dispatchUser(globalProps.el, this.me)\n    this.$root.$emit('$me', this.me)\n  }, 1500)\n}\n\nasync function getProfile(id){\n  const $http = await get$http()\n\n  return $http.get(`${globalProps.opts.accountsUrl}/api/v2013/users/${id}`, globalProps.auth.baseReqOpts).json()\n}\n\nasync function getUser(){\n  if (globalProps.me.isSet)  return globalProps.me\n  if (!globalProps.auth.token)  return globalProps.me.set()\n\n  const $http = await get$http()\n\n  return $http.get(`${globalProps.opts.accountsUrl}/api/v2013/authentication/user`, globalProps.auth.baseReqOpts).json()\n}\n\nasync function $initSsoScbd(){\n  const token = await isTokenLoaded ()\n\n  if(!token) return globalProps.me\n\n  return $getUser()\n}"],"names":["normalizeComponent","template","style","script","scopeId","isFunctionalTemplate","moduleIdentifier","shadowMode","createInjector","createInjectorSSR","createInjectorShadow","options","hook","render","staticRenderFns","_compiled","functional","_scopeId","context","this","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","call","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","originalRender","h","existing","beforeCreate","concat","allAccountUrls","dev","accountsUrl","admins","_admins","govRoles","_govRoles","stg","setDefaultOptions","environments","prod","validationMap","Array","forceEnv","String","name","getDefaultOptionsFunction","globalProps","getMe","Promise","loadingInterval","resolve","reject","timer","timeout","setTimeout","clearInterval","setInterval","store","instance","clearTimeout","MeStore","userID","me","userId","email","government","institution","userGroups","isAuthenticated","roles","isEmailVerified","isSet","isAdmin","opts","adminRoles","role","includes","isStaff","isGov","[object Object]","anonymous","data","makeGettersEnumerable","prototype","Object","getPrototypeOf","prototypePropertyDescriptors","getOwnPropertyDescriptors","property","descriptor","entries","get","enumerable","defineProperty","isOffline","isTokenLoaded","AuthStore","token","t","accountsBaseUrl","Error","baseReqOpts","headers","formatedHeader","Authorization","event","origin","isAccountsOrigin","type","authenticationToken","JSON","parse","element","meStore","elm","Event","bubbles","$me","$auth","dispatchEvent","onRequestMeEvent","installed","window","document","addEventListener","dispatchUser","url","loadingIntervalInstance","NAME","pascalCase","replace","Vue","auth","methods","$getUser","$logOut","$initSsoScbd","globalVueMixin","el","undefined","async","getExistingIframe","AuthIFrameInstance","extend","AuthIFrame","$mount","getElementsByTagName","appendChild","$el","createIframe","isAuthLoaded","user","$emit","e","set","console","error","ssoScbd","plugin","install","getDefaultOptions","initMe","initAuth","mixin","then","iFrames","anIframe","URL","getAttribute","useExistingIframe","receivePostMessage","contentWindow","msg","stringify","postMessage","get$http","json","getUser","FirstName","LastName","Country","id","getProfile","firstName","lastName","country","nextTick","logOut","authenticationEmail","expiration"],"mappings":"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"}