(function () { var TOKEN_KEYS = ['token', 'access_token', 'accessToken']; var APP_CODE_KEYS = ['app_code', 'appCode']; var USER_READY_EVENT = 'hyapp:user-ready'; var USER_ERROR_EVENT = 'hyapp:user-error'; function query() { var params = new URLSearchParams(window.location.search); var hash = window.location.hash || ''; if (hash.indexOf('?') >= 0) { new URLSearchParams(hash.split('?').slice(1).join('?')).forEach( function (value, key) { if (!params.has(key)) params.set(key, value); } ); } return params; } function first(params, keys) { for (var i = 0; i < keys.length; i += 1) { var value = params.get(keys[i]); if (value) return value; } return ''; } function normalizeToken(value) { var token = String(value || '').trim(); if (!token) return ''; var match = token.match( /[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/ ); return match ? match[0] : token; } function parse() { var params = query(); var token = normalizeToken(first(params, TOKEN_KEYS)); var appCode = first(params, APP_CODE_KEYS) || window.localStorage.getItem('hyapp_app_code') || 'lalu'; if (window.HyAppAPI) { if (token) window.HyAppAPI.setAccessToken(token); if (appCode) window.HyAppAPI.setAppCode(appCode); } return { token: token || (window.HyAppAPI && window.HyAppAPI.getAccessToken ? window.HyAppAPI.getAccessToken() : ''), app_code: appCode, raw: params, }; } function emit(name, detail) { window.dispatchEvent(new CustomEvent(name, { detail: detail })); } function loadUser() { var current = parse(); if (!current.token || !window.HyAppAPI) { return Promise.resolve(null); } return window.HyAppAPI.get('/api/v1/users/me/overview') .then(function (userInfo) { current.user = userInfo; window.HyAppParams.current = current; emit(USER_READY_EVENT, current); return current; }) .catch(function (error) { current.error = error; window.HyAppParams.current = current; emit(USER_ERROR_EVENT, current); throw error; }); } window.HyAppParams = { parse: parse, loadUser: loadUser, current: parse(), USER_READY_EVENT: USER_READY_EVENT, USER_ERROR_EVENT: USER_ERROR_EVENT, }; })();