var test_api = 'https://api-test.global-interaction.com/'; var local_api = 'http://localhost:13000/'; var default_api = 'https://api.global-interaction.com/'; (function () { var API_ENV_KEY = 'hyapp_h5_env'; var ACCESS_TOKEN_KEY = 'hyapp_access_token'; var APP_CODE_KEY = 'hyapp_app_code'; var memoryEnv = ''; var memoryAccessToken = ''; var memoryAppCode = ''; function readQuery(name) { return new URLSearchParams(window.location.search).get(name); } function normalizeBaseURL(value) { return String(value || '').replace(/\/+$/, '') + '/'; } function isLocalDevOrigin() { var host = window.location.hostname; return host === '127.0.0.1' || host === 'localhost' || host === '::1'; } function shouldPersist() { return !isLocalDevOrigin(); } function clearLocalDevCache() { if (shouldPersist()) return; window.localStorage.removeItem(API_ENV_KEY); window.localStorage.removeItem(ACCESS_TOKEN_KEY); window.localStorage.removeItem(APP_CODE_KEY); } function devProxyBase(path) { return normalizeBaseURL(window.location.origin + path); } function resolveEnv() { var env = readQuery('env'); if (env === 'test' || env === 'local') { memoryEnv = env; if (shouldPersist()) window.localStorage.setItem(API_ENV_KEY, env); return env; } if (memoryEnv) return memoryEnv; if (!shouldPersist()) return ''; return window.localStorage.getItem(API_ENV_KEY) || ''; } function resolveBaseURL() { var env = resolveEnv(); if (env === 'test') return isLocalDevOrigin() ? devProxyBase('/__api_test__/') : normalizeBaseURL(test_api); if (env === 'local') return isLocalDevOrigin() ? devProxyBase('/__api_local__/') : normalizeBaseURL(local_api); return normalizeBaseURL(default_api); } function buildURL(path, query) { var url = new URL(path.replace(/^\/+/, ''), resolveBaseURL()); if (query) { Object.keys(query).forEach(function (key) { var value = query[key]; if (value === undefined || value === null || value === '') return; url.searchParams.set(key, value); }); } return url.toString(); } function getAccessToken() { if (memoryAccessToken) return memoryAccessToken; if (!shouldPersist()) return ''; return window.localStorage.getItem(ACCESS_TOKEN_KEY) || ''; } function getAppCode() { var queryAppCode = readQuery('app_code') || readQuery('appCode'); if (queryAppCode) { memoryAppCode = queryAppCode; if (shouldPersist()) window.localStorage.setItem(APP_CODE_KEY, queryAppCode); return queryAppCode; } if (memoryAppCode) return memoryAppCode; if (!shouldPersist()) return 'lalu'; return window.localStorage.getItem(APP_CODE_KEY) || 'lalu'; } function setAccessToken(token) { memoryAccessToken = token || ''; if (token) { if (shouldPersist()) window.localStorage.setItem(ACCESS_TOKEN_KEY, token); return; } if (shouldPersist()) window.localStorage.removeItem(ACCESS_TOKEN_KEY); } function setAppCode(appCode) { memoryAppCode = appCode || ''; if (appCode) { if (shouldPersist()) window.localStorage.setItem(APP_CODE_KEY, appCode); return; } if (shouldPersist()) window.localStorage.removeItem(APP_CODE_KEY); } function parseResponse(response) { return response.text().then(function (text) { var payload = text ? JSON.parse(text) : {}; if (!response.ok) { var httpError = new Error( payload.message || response.statusText || 'request_failed' ); httpError.status = response.status; httpError.payload = payload; throw httpError; } var code = payload && payload.code; var isErrorCode = (typeof code === 'number' && code !== 0) || (typeof code === 'string' && code !== '' && code !== 'OK'); if (isErrorCode) { var apiError = new Error( payload.message || 'api_request_failed' ); apiError.code = payload.code; apiError.request_id = payload.request_id; apiError.payload = payload; throw apiError; } return payload && Object.prototype.hasOwnProperty.call(payload, 'data') ? payload.data : payload; }); } function request(path, options) { var opts = options || {}; var headers = Object.assign({}, opts.headers || {}); var token = getAccessToken(); var appCode = getAppCode(); if (token) headers.Authorization = 'Bearer ' + token; if (appCode) headers['X-App-Code'] = appCode; if (!shouldPersist()) headers['Cache-Control'] = 'no-cache'; var body = opts.body; if (body && typeof body === 'object' && !(body instanceof FormData)) { headers['Content-Type'] = headers['Content-Type'] || 'application/json'; body = JSON.stringify(body); } return window .fetch(buildURL(path, opts.query), { method: opts.method || 'GET', headers: headers, body: body, cache: shouldPersist() ? 'default' : 'no-store', credentials: opts.credentials || 'omit', }) .then(parseResponse); } var vipAPI = { me: function () { return request('/api/v1/vip/me', { method: 'GET' }); }, packages: function () { return request('/api/v1/vip/packages', { method: 'GET' }); }, purchase: function (payload) { return request('/api/v1/vip/purchase', { method: 'POST', body: payload || {}, }); }, }; var hostAPI = { searchAgencies: function (shortId, pageSize) { return request('/api/v1/host/agencies/search', { method: 'GET', query: { short_id: shortId, page_size: pageSize || 20 }, }); }, applyToAgency: function (payload) { return request('/api/v1/host/agency-applications', { method: 'POST', body: payload || {}, }); }, }; var levelAPI = { overview: function () { return request("/api/v1/levels/me/overview", { method: "GET" }); }, track: function (track) { return request("/api/v1/levels/tracks/" + encodeURIComponent(track || ""), { method: "GET", }); }, rewards: function (query) { return request("/api/v1/levels/rewards", { method: "GET", query: query || {}, }); }, }; window.HyAppAPI = { baseURL: resolveBaseURL, buildURL: buildURL, getAccessToken: getAccessToken, getAppCode: getAppCode, setAccessToken: setAccessToken, setAppCode: setAppCode, request: request, get: function (path, query) { return request(path, { method: 'GET', query: query }); }, post: function (path, body, query) { return request(path, { method: 'POST', body: body, query: query }); }, put: function (path, body, query) { return request(path, { method: 'PUT', body: body, query: query }); }, patch: function (path, body, query) { return request(path, { method: 'PATCH', body: body, query: query }); }, delete: function (path, query) { return request(path, { method: 'DELETE', query: query }); }, vip: vipAPI, host: hostAPI, level: levelAPI, }; clearLocalDevCache(); })();