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