hyapp-h5/common/params.js
2026-05-29 19:55:17 +08:00

93 lines
2.8 KiB
JavaScript

(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,
};
})();