@realtek/core-theme 0.0.323 → 0.0.324
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/{Breadcrumb-BC8WU6Fu.cjs → Breadcrumb-BlkUtt7R.cjs} +3 -3
- package/dist-lib/{Breadcrumb-BC8WU6Fu.cjs.map → Breadcrumb-BlkUtt7R.cjs.map} +1 -1
- package/dist-lib/{Breadcrumb-DMRD92KT.js → Breadcrumb-BwhTcL2X.js} +3 -3
- package/dist-lib/{Breadcrumb-DMRD92KT.js.map → Breadcrumb-BwhTcL2X.js.map} +1 -1
- package/dist-lib/{addFormApi-B8wJfZdE.js → addFormApi-K8iXom4n.js} +3 -3
- package/dist-lib/{addFormApi-B8wJfZdE.js.map → addFormApi-K8iXom4n.js.map} +1 -1
- package/dist-lib/{addFormApi-CFSqio1D.cjs → addFormApi-wr2-pifE.cjs} +2 -2
- package/dist-lib/{addFormApi-CFSqio1D.cjs.map → addFormApi-wr2-pifE.cjs.map} +1 -1
- package/dist-lib/{authApi-KeciU9Ow.js → authApi-Bo6Jd4q3.js} +2 -2
- package/dist-lib/authApi-Bo6Jd4q3.js.map +1 -0
- package/dist-lib/authApi-PwUtORdF.cjs +2 -0
- package/dist-lib/authApi-PwUtORdF.cjs.map +1 -0
- package/dist-lib/index.cjs +2 -2
- package/dist-lib/index.js +4 -4
- package/package.json +1 -1
- package/dist-lib/authApi-DieKJTds.cjs +0 -2
- package/dist-lib/authApi-DieKJTds.cjs.map +0 -1
- package/dist-lib/authApi-KeciU9Ow.js.map +0 -1
package/dist-lib/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { t as e } from "./rolldown-runtime-Dy4uBu1J.js";
|
|
2
|
-
import { C as t, D as n, E as r, O as i, S as a, T as o, _ as s, a as c, b as l, c as u, d, f, g as p, h as m, i as h, l as g, m as _, o as v, p as y, r as b, s as x, t as S, u as C, v as w, w as T, x as E, y as D } from "./authApi-
|
|
3
|
-
import { $ as O, $n as k, $r as ee, $t as A, A as j, An as te, Ar as ne, At as M, B as re, Bn as ie, Br as N, Bt as ae, C as oe, Cn as se, Cr as ce, Ct as le, D as ue, Dn as de, Dr as fe, Dt as pe, E as me, En as he, Er as ge, Et as _e, F as ve, Fn as ye, Fr as be, Ft as xe, G as Se, Gn as Ce, Gr as P, Gt as we, H as Te, Hn as Ee, Hr as De, Ht as Oe, I as ke, In as Ae, Ir as je, It as Me, J as Ne, Jn as Pe, Jr as Fe, Jt as Ie, K as Le, Kn as Re, Kr as ze, Kt as Be, L as Ve, Ln as He, Lr as Ue, Lt as We, M as Ge, Mn as Ke, Mr as qe, Mt as Je, N as Ye, Nn as Xe, Nr as Ze, Nt as Qe, O as $e, On as et, Or as tt, Ot as nt, P as rt, Pn as it, Pr as at, Pt as ot, Q as st, Qn as ct, Qr as lt, Qt as ut, R as dt, Rn as ft, Rr as pt, Rt as mt, S as ht, Sn as gt, Sr as _t, St as vt, T as yt, Tn as bt, Tr as xt, Tt as St, U as Ct, Un as wt, Ur as Tt, Ut as Et, V as Dt, Vn as Ot, Vr as kt, Vt as At, W as jt, Wn as Mt, Wr as Nt, Wt as Pt, X as Ft, Xn as It, Xr as Lt, Xt as Rt, Y as zt, Yn as Bt, Yr as Vt, Yt as Ht, Z as Ut, Zn as Wt, Zr as Gt, Zt as Kt, _ as qt, _i as Jt, _n as Yt, _r as Xt, _t as Zt, a as Qt, ai as $t, an as en, ar as tn, at as nn, b as rn, bn as an, br as on, bt as sn, c as cn, ci as ln, cn as un, cr as dn, ct as fn, d as pn, di as mn, dn as hn, dr as gn, dt as _n, ei as vn, en as yn, er as bn, et as xn, f as Sn, fi as Cn, fn as wn, fr as Tn, ft as En, g as Dn, gi as On, gn as kn, gr as An, gt as jn, h as Mn, hi as Nn, hn as Pn, hr as Fn, ht as In, i as Ln, ii as Rn, in as zn, ir as Bn, it as Vn, j as Hn, jn as Un, jr as Wn, jt as Gn, k as Kn, kn as qn, kr as Jn, kt as Yn, l as Xn, li as Zn, ln as Qn, lr as $n, lt as er, m as tr, mi as nr, mn as rr, mr as ir, mt as ar, n as or, ni as sr, nn as cr, nr as lr, nt as ur, o as dr, oi as fr, on as pr, or as mr, ot as hr, p as gr, pi as _r, pn as vr, pr as yr, pt as br, q as xr, qn as Sr, qr as Cr, qt as wr, r as Tr, ri as Er, rn as Dr, rr as Or, rt as kr, s as Ar, si as jr, sn as Mr, sr as Nr, st as Pr, t as Fr, ti as Ir, tn as Lr, tr as Rr, tt as zr, u as Br, ui as Vr, un as Hr, ur as Ur, ut as Wr, v as Gr, vn as Kr, vr as qr, vt as Jr, w as Yr, wn as Xr, wr as Zr, wt as Qr, x as $r, xn as ei, xr as ti, xt as ni, y as ri, yn as ii, yr as ai, yt as oi, z as si, zn as ci, zr as li, zt as ui } from "./Breadcrumb-
|
|
2
|
+
import { C as t, D as n, E as r, O as i, S as a, T as o, _ as s, a as c, b as l, c as u, d, f, g as p, h as m, i as h, l as g, m as _, o as v, p as y, r as b, s as x, t as S, u as C, v as w, w as T, x as E, y as D } from "./authApi-Bo6Jd4q3.js";
|
|
3
|
+
import { $ as O, $n as k, $r as ee, $t as A, A as j, An as te, Ar as ne, At as M, B as re, Bn as ie, Br as N, Bt as ae, C as oe, Cn as se, Cr as ce, Ct as le, D as ue, Dn as de, Dr as fe, Dt as pe, E as me, En as he, Er as ge, Et as _e, F as ve, Fn as ye, Fr as be, Ft as xe, G as Se, Gn as Ce, Gr as P, Gt as we, H as Te, Hn as Ee, Hr as De, Ht as Oe, I as ke, In as Ae, Ir as je, It as Me, J as Ne, Jn as Pe, Jr as Fe, Jt as Ie, K as Le, Kn as Re, Kr as ze, Kt as Be, L as Ve, Ln as He, Lr as Ue, Lt as We, M as Ge, Mn as Ke, Mr as qe, Mt as Je, N as Ye, Nn as Xe, Nr as Ze, Nt as Qe, O as $e, On as et, Or as tt, Ot as nt, P as rt, Pn as it, Pr as at, Pt as ot, Q as st, Qn as ct, Qr as lt, Qt as ut, R as dt, Rn as ft, Rr as pt, Rt as mt, S as ht, Sn as gt, Sr as _t, St as vt, T as yt, Tn as bt, Tr as xt, Tt as St, U as Ct, Un as wt, Ur as Tt, Ut as Et, V as Dt, Vn as Ot, Vr as kt, Vt as At, W as jt, Wn as Mt, Wr as Nt, Wt as Pt, X as Ft, Xn as It, Xr as Lt, Xt as Rt, Y as zt, Yn as Bt, Yr as Vt, Yt as Ht, Z as Ut, Zn as Wt, Zr as Gt, Zt as Kt, _ as qt, _i as Jt, _n as Yt, _r as Xt, _t as Zt, a as Qt, ai as $t, an as en, ar as tn, at as nn, b as rn, bn as an, br as on, bt as sn, c as cn, ci as ln, cn as un, cr as dn, ct as fn, d as pn, di as mn, dn as hn, dr as gn, dt as _n, ei as vn, en as yn, er as bn, et as xn, f as Sn, fi as Cn, fn as wn, fr as Tn, ft as En, g as Dn, gi as On, gn as kn, gr as An, gt as jn, h as Mn, hi as Nn, hn as Pn, hr as Fn, ht as In, i as Ln, ii as Rn, in as zn, ir as Bn, it as Vn, j as Hn, jn as Un, jr as Wn, jt as Gn, k as Kn, kn as qn, kr as Jn, kt as Yn, l as Xn, li as Zn, ln as Qn, lr as $n, lt as er, m as tr, mi as nr, mn as rr, mr as ir, mt as ar, n as or, ni as sr, nn as cr, nr as lr, nt as ur, o as dr, oi as fr, on as pr, or as mr, ot as hr, p as gr, pi as _r, pn as vr, pr as yr, pt as br, q as xr, qn as Sr, qr as Cr, qt as wr, r as Tr, ri as Er, rn as Dr, rr as Or, rt as kr, s as Ar, si as jr, sn as Mr, sr as Nr, st as Pr, t as Fr, ti as Ir, tn as Lr, tr as Rr, tt as zr, u as Br, ui as Vr, un as Hr, ur as Ur, ut as Wr, v as Gr, vn as Kr, vr as qr, vt as Jr, w as Yr, wn as Xr, wr as Zr, wt as Qr, x as $r, xn as ei, xr as ti, xt as ni, y as ri, yn as ii, yr as ai, yt as oi, z as si, zn as ci, zr as li, zt as ui } from "./Breadcrumb-BwhTcL2X.js";
|
|
4
4
|
import { r as di } from "./diceCandidateMapper-CjMFuVFe.js";
|
|
5
5
|
import { t as fi } from "./formGroupsCache-JeC59oNe.js";
|
|
6
|
-
import { n as pi, r as mi } from "./addFormApi-
|
|
6
|
+
import { n as pi, r as mi } from "./addFormApi-K8iXom4n.js";
|
|
7
7
|
import hi, { Fragment as gi, createContext as _i, forwardRef as vi, useCallback as yi, useContext as bi, useEffect as F, useImperativeHandle as xi, useMemo as I, useRef as Si, useState as L } from "react";
|
|
8
8
|
import { Alert as Ci, AutoComplete as wi, Avatar as Ti, Badge as Ei, Breadcrumb as Di, Button as R, Card as Oi, Checkbox as ki, Col as z, Collapse as Ai, DatePicker as ji, Divider as Mi, Drawer as Ni, Dropdown as Pi, Empty as Fi, Flex as Ii, Form as B, Input as V, InputNumber as Li, Layout as Ri, Mentions as zi, Menu as Bi, Modal as Vi, Pagination as Hi, Popconfirm as Ui, Popover as Wi, Progress as Gi, Radio as Ki, Result as qi, Row as Ji, Select as H, Skeleton as Yi, Slider as Xi, Space as U, Spin as Zi, Statistic as Qi, Steps as $i, Switch as W, Table as ea, Tabs as ta, Tag as G, TimePicker as na, Tooltip as K, Tree as ra, Typography as ia, Upload as aa, message as q } from "antd";
|
|
9
9
|
import { AimOutlined as oa, ApartmentOutlined as sa, ApiOutlined as ca, AppstoreAddOutlined as la, AppstoreOutlined as ua, ArrowDownOutlined as da, ArrowLeftOutlined as fa, ArrowUpOutlined as pa, BankOutlined as ma, BellOutlined as ha, BgColorsOutlined as ga, BuildOutlined as _a, CalendarOutlined as va, CaretDownOutlined as ya, CaretUpOutlined as ba, CheckCircleFilled as xa, CheckCircleOutlined as Sa, CheckOutlined as Ca, ClearOutlined as wa, ClockCircleOutlined as Ta, CloseCircleFilled as Ea, CloseCircleOutlined as Da, CloseOutlined as Oa, CloudDownloadOutlined as ka, CloudUploadOutlined as Aa, CopyOutlined as ja, CrownOutlined as Ma, DashboardOutlined as Na, DatabaseOutlined as Pa, DeleteOutlined as Fa, DollarCircleFilled as Ia, DollarOutlined as La, DownOutlined as Ra, DownloadOutlined as za, EditOutlined as Ba, EnvironmentOutlined as Va, ExclamationCircleFilled as Ha, ExclamationCircleOutlined as Ua, ExportOutlined as Wa, EyeOutlined as Ga, FieldTimeOutlined as Ka, FileDoneOutlined as qa, FileExcelOutlined as Ja, FileImageOutlined as Ya, FileOutlined as Xa, FilePdfOutlined as Za, FileTextFilled as Qa, FileTextOutlined as $a, FileWordOutlined as eo, FilterOutlined as to, HistoryOutlined as no, HolderOutlined as ro, HomeOutlined as io, IdcardOutlined as ao, InboxOutlined as oo, InfoCircleOutlined as so, LaptopOutlined as co, LeftOutlined as lo, LinkOutlined as uo, LinkedinFilled as fo, LockOutlined as po, LogoutOutlined as mo, MailOutlined as ho, MenuOutlined as go, MergeCellsOutlined as _o, MessageOutlined as vo, MinusCircleOutlined as yo, MoreOutlined as bo, PaperClipOutlined as xo, PhoneOutlined as So, PlayCircleOutlined as Co, PlusOutlined as wo, ProfileOutlined as To, ProjectOutlined as Eo, RedoOutlined as Do, ReloadOutlined as Oo, RestOutlined as ko, RightOutlined as Ao, RiseOutlined as jo, SafetyCertificateOutlined as Mo, SafetyOutlined as No, SaveOutlined as Po, SearchOutlined as Fo, SendOutlined as Io, SettingOutlined as Lo, ShareAltOutlined as Ro, SnippetsOutlined as zo, SolutionOutlined as Bo, SwapOutlined as Vo, SyncOutlined as Ho, TableOutlined as Uo, TagsOutlined as Wo, TeamOutlined as Go, ThunderboltOutlined as Ko, ToolOutlined as qo, UndoOutlined as Jo, UnlockOutlined as Yo, UnorderedListOutlined as Xo, UpOutlined as Zo, UploadOutlined as Qo, UserAddOutlined as $o, UserOutlined as es, UserSwitchOutlined as ts, WarningOutlined as ns } from "@ant-design/icons";
|
|
@@ -20958,7 +20958,7 @@ async function cT(e, t) {
|
|
|
20958
20958
|
};
|
|
20959
20959
|
}
|
|
20960
20960
|
async function lT(e, t) {
|
|
20961
|
-
let { fetchFormGroupsPayload: n } = await import("./addFormApi-
|
|
20961
|
+
let { fetchFormGroupsPayload: n } = await import("./addFormApi-K8iXom4n.js").then((e) => e.t), r = await n({
|
|
20962
20962
|
module: e,
|
|
20963
20963
|
id: t
|
|
20964
20964
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@realtek/core-theme",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.324",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "RealTek CORE-THEME — shared React component & admin-screen library (AddFormV1, EditFormV1, ListView, DetailViewV1, ...).",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const e=require("./rolldown-runtime-Chgba0Kb.cjs");var t={VITE_AUTH_URL:void 0,VITE_ADMIN_API_URL:void 0,VITE_ADMIN_APP_ID:void 0,VITE_SUBMISSIONS_URL:void 0,VITE_JOBS_URL:void 0,VITE_CANDIDATES_URL:void 0,VITE_PYOPS_URL:void 0,VITE_APP_ID:void 0};function n(e){return typeof window<`u`&&window.__CORE_THEME_CONFIG__&&window.__CORE_THEME_CONFIG__[e]!=null?window.__CORE_THEME_CONFIG__[e]:t[e]}function r(e,t=``){return{toString:()=>n(e)||(typeof t==`function`?t():t),valueOf:()=>n(e)||(typeof t==`function`?t():t),[Symbol.toPrimitive]:()=>n(e)||(typeof t==`function`?t():t)}}var i=r(`VITE_AUTH_URL`),a=r(`VITE_ADMIN_API_URL`,()=>n(`VITE_AUTH_URL`)||`http://localhost:9009`),o=r(`VITE_ADMIN_APP_ID`,()=>n(`VITE_APP_ID`)||`zinnext-dev-api-v1`),s=r(`VITE_SUBMISSIONS_URL`),c=r(`VITE_JOBS_URL`),l=r(`VITE_CANDIDATES_URL`),u=r(`VITE_PYOPS_URL`,`http://localhost:7020/v1`),d=r(`VITE_APP_ID`);function f(e={}){let t=n(`VITE_APP_ID`);return t?{"X-App-Id":t,...e}:{...e}}function p(e={}){let t=n(`VITE_ADMIN_APP_ID`)||n(`VITE_APP_ID`)||`zinnext-dev-api-v1`;return t?{"X-App-Id":t,...e}:{...e}}function m(){if(typeof window>`u`||typeof window.fetch!=`function`||window.__CORE_THEME_APP_ID_PATCHED__)return;let e=[i,a,s,c,l,u],t=window.fetch.bind(window),r=e=>typeof e==`string`?e:e instanceof URL?e.href:e&&typeof e.url==`string`?e.url:``,o=t=>!!t&&e.some(e=>{let n=String(e);return n&&t.startsWith(n)});window.fetch=function(e,i){try{let s=r(e),c=String(a)&&s.startsWith(String(a))?n(`VITE_ADMIN_APP_ID`)||n(`VITE_APP_ID`)||`zinnext-dev-api-v1`:n(`VITE_APP_ID`);if(c&&o(s)){let n=typeof Request<`u`&&e instanceof Request,r=new Headers(i&&i.headers||(n?e.headers:void 0));return r.has(`X-App-Id`)||r.set(`X-App-Id`,c),n&&!(i&&i.headers)?t(new Request(e,{headers:r}),i):t(e,{...i||{},headers:r})}}catch{}return t(e,i)},window.__CORE_THEME_APP_ID_PATCHED__=!0}m();function h(e={}){typeof window>`u`||(window.__CORE_THEME_CONFIG__={...window.__CORE_THEME_CONFIG__||{},...e},m())}var g=e.t({apiGetWithAuth:()=>q,clearAuthTokenOverride:()=>E,clearSelectedProject:()=>H,ensureToken:()=>W,fetchJsonWithAuth:()=>K,getActingIdentity:()=>z,getCurrentRoleName:()=>I,getSelectedProject:()=>V,getStoredToken:()=>N,getStoredUser:()=>P,getUserRoles:()=>L,isTester:()=>R,login:()=>U,logout:()=>F,setAuthTokenOverride:()=>T,setSelectedProject:()=>B}),_=`authToken`,v=`authUser`,y=`authLoginSession`,b=`ct_project_id`,x=`ct_project_name`,S=[`access_token`,`refresh_token`,`id_token`,`token_type`,`expires_in`,`refresh_expires_in`,`menu`,`footermenu`,`menuPermission`,`default_values`,`roleId`,`companyName`,`preferred_Username`,`user_Email`,`userName`,`userId`,`tenantId`,`businessId`,`businessUnitId`,`activeKey`,`ct_project_id`,`ct_project_name`],C=null,w=null;function T(e){w=typeof e==`string`&&e.trim()?e.trim():null}function E(){w=null}function D(e){return e?.token??e?.access_token??e?.accessToken??e?.jwt??e?.data?.token??e?.data?.access_token??e?.data?.accessToken??e?.data?.jwt}function O(e){return e?.user??e?.data?.user??e?.data?.profile??null}function k(e){if(!e||typeof e!=`string`)return null;try{let t=e.split(`.`)[1];if(!t)return null;let n=t.replace(/-/g,`+`).replace(/_/g,`/`);return JSON.parse(atob(n.padEnd(Math.ceil(n.length/4)*4,`=`)))}catch{return null}}function A(e,t){t!=null&&localStorage.setItem(e,JSON.stringify(t))}function j(e,t){return t?.menus??e?.menus??{menu:t?.menu??e?.menu,footermenu:t?.footermenu??e?.footermenu}}function M(e,t,n){let r=e?.data??e,i=k(t)??{},a=j(e,r),o=n?.userName??n?.name??r?.userName??r?.name??i.userName??i.name??i.preferred_username??i.email,s=n?.preferred_Username??n?.preferred_username??r?.preferred_Username??r?.preferred_username??i.preferred_Username??i.preferred_username??i.email??o,c=n?.email??r?.email??i.email??s;localStorage.setItem(`access_token`,t),r?.refresh_token&&localStorage.setItem(`refresh_token`,r.refresh_token),r?.id_token!==void 0&&localStorage.setItem(`id_token`,r.id_token),r?.token_type&&localStorage.setItem(`token_type`,r.token_type),r?.expires_in!==void 0&&localStorage.setItem(`expires_in`,String(r.expires_in)),r?.refresh_expires_in!==void 0&&localStorage.setItem(`refresh_expires_in`,String(r.refresh_expires_in)),o&&localStorage.setItem(`userName`,o),s&&localStorage.setItem(`preferred_Username`,s),c&&localStorage.setItem(`user_Email`,c),(r?.roleId??i.role_id)&&localStorage.setItem(`roleId`,r?.roleId??i.role_id),r?.companyName&&localStorage.setItem(`companyName`,r.companyName),i.userId!==void 0&&localStorage.setItem(`userId`,String(i.userId)),i.tenantId&&localStorage.setItem(`tenantId`,i.tenantId),i.businessId&&localStorage.setItem(`businessId`,i.businessId),i.businessUnitId&&localStorage.setItem(`businessUnitId`,i.businessUnitId),A(`menu`,a.menu),A(`footermenu`,a.footermenu),A(`menuPermission`,r?.menuPermission),A(`default_values`,r?.default_values)}function N(){if(w)return w;let e=localStorage.getItem(_),t=sessionStorage.getItem(y)===`1`;return e&&t?e:null}function P(){try{let e=localStorage.getItem(v);if(e)return JSON.parse(e)}catch{}return{userId:localStorage.getItem(`userId`),username:localStorage.getItem(`userName`)||localStorage.getItem(`preferred_Username`),email:localStorage.getItem(`user_Email`),roleId:localStorage.getItem(`roleId`)}}function F(){localStorage.removeItem(_),localStorage.removeItem(v),S.forEach(e=>localStorage.removeItem(e)),sessionStorage.removeItem(y),window.dispatchEvent(new Event(`auth:logout`))}function I(){let e=String(localStorage.getItem(`roleId`)??``).trim().toLowerCase();if(e)return e;let t=k(N())??{};return String(t.role??t.roleName??t.role_name??t.role_id??t.roleId??``).trim().toLowerCase()}function L(){let e=k(N()??localStorage.getItem(_)),t=new Set,n=I();return n&&t.add(n),e&&((e?.realm_access?.roles??[]).forEach(e=>t.add(e)),Object.values(e?.resource_access??{}).forEach(e=>{(e?.roles??[]).forEach(e=>t.add(e))}),[e?.role,e?.roleName,e?.role_name].forEach(e=>{e&&t.add(e)})),Array.from(t).map(e=>String(e).toLowerCase())}function R(){return I()===`tester`||L().includes(`tester`)}function z(){let e=k(N()??localStorage.getItem(_))??{},t=e=>{if(e==null||e===``)return;let t=Number(e);return Number.isFinite(t)?t:void 0};return{roleId:t(e.role_id??e.roleId)??t(localStorage.getItem(`roleId`)),userId:t(e.userId??e.user_id)}}function B(e){e&&(localStorage.setItem(b,String(e.id)),localStorage.setItem(x,String(e.name)))}function V(){let e=localStorage.getItem(b),t=localStorage.getItem(x);return!e||!t?null:{id:Number(e),name:t}}function H(){localStorage.removeItem(b),localStorage.removeItem(x)}async function U(e){return C||(C=fetch(`${i}/login`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}).then(async e=>{let t=await e.json();if(!e.ok){let n=Error(t?.message??t?.error??`Login failed: ${e.status}`);throw n.status=e.status,n}let n=D(t);if(!n)throw Error(`No token in login response`);let r=O(t);return localStorage.setItem(_,n),sessionStorage.setItem(y,`1`),r&&localStorage.setItem(v,JSON.stringify(r)),M(t,n,r),window.dispatchEvent(new Event(`auth:login`)),{token:n,user:r,response:t}}).finally(()=>{C=null}),C)}async function W(){let e=N();if(e)return e;let t=Error(`Authentication required`);throw t.status=401,t}async function G(){return{"Content-Type":`application/json`,Authorization:`Bearer ${await W()}`}}async function K(e,t=``,n={}){t&&typeof t==`object`&&(n=t,t=``);let r=await G(),i=await fetch(`${e}${t||``}`,{...n,headers:{...r,...n.headers}});i.status===401&&F();let a=await i.text(),o={};if(a)try{o=JSON.parse(a)}catch{o={error:a}}if(!i.ok){let e=o?.error??o?.message,t=typeof e==`string`?e:e&&Object.keys(e).length>0?JSON.stringify(e):``,n=Error(t||`API ${i.status}: ${i.statusText}`);throw n.status=i.status,n.response=o,n}return o}async function q(e,t){let n=await K(e,t);return n.data??n}Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"D",{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,"E",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"O",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"T",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return B}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return L}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return V}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return o}});
|
|
2
|
-
//# sourceMappingURL=authApi-DieKJTds.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authApi-DieKJTds.cjs","names":[],"sources":["../src/services/apiConfig.js","../src/services/authApi.js"],"sourcesContent":["// Central API base URLs.\n//\n// When CORE-THEME runs standalone (npm run dev), the values come from\n// src/services/.env (Vite VITE_* vars, baked in at build time).\n//\n// When CORE-THEME is consumed as the published @realtek/core-theme package,\n// host apps can override these values at RUNTIME by setting\n// `window.__CORE_THEME_CONFIG__` before the app renders:\n//\n// <script>\n// window.__CORE_THEME_CONFIG__ = {\n// VITE_AUTH_URL: 'http://192.168.1.66/authapi/v1',\n// VITE_SUBMISSIONS_URL: 'http://192.168.1.66/submissionsapi/v1',\n// VITE_JOBS_URL: 'http://192.168.1.66/jobsapi/v1',\n// VITE_CANDIDATES_URL: 'http://192.168.1.66/candidatesapi/v1',\n// VITE_APP_ID: 'zinnext', // sent as the `X-App-Id` header on every API call\n// VITE_ADMIN_APP_ID: 'zinnext', // optional admin override\n// };\n// </script>\n//\n// Priority: runtime window config > build-time .env fallback.\n\nconst BUILD_TIME_FALLBACK = {\n VITE_AUTH_URL: import.meta.env.VITE_AUTH_URL,\n VITE_ADMIN_API_URL: import.meta.env.VITE_ADMIN_API_URL,\n VITE_ADMIN_APP_ID: import.meta.env.VITE_ADMIN_APP_ID,\n VITE_SUBMISSIONS_URL: import.meta.env.VITE_SUBMISSIONS_URL,\n VITE_JOBS_URL: import.meta.env.VITE_JOBS_URL,\n VITE_CANDIDATES_URL: import.meta.env.VITE_CANDIDATES_URL,\n VITE_PYOPS_URL: import.meta.env.VITE_PYOPS_URL,\n VITE_APP_ID: import.meta.env.VITE_APP_ID,\n};\n\nfunction resolve(key) {\n if (\n typeof window !== 'undefined' &&\n window.__CORE_THEME_CONFIG__ &&\n window.__CORE_THEME_CONFIG__[key] != null\n ) {\n return window.__CORE_THEME_CONFIG__[key];\n }\n return BUILD_TIME_FALLBACK[key];\n}\n\nfunction runtimeValue(key, fallback = '') {\n return {\n toString: () => resolve(key) || (typeof fallback === 'function' ? fallback() : fallback),\n valueOf: () => resolve(key) || (typeof fallback === 'function' ? fallback() : fallback),\n [Symbol.toPrimitive]: () => resolve(key) || (typeof fallback === 'function' ? fallback() : fallback),\n };\n}\n\n// These are intentionally dynamic. Many service files use them inside template\n// literals (`${AUTH_URL}/path`) or pass them to helpers that later build a URL.\n// Resolving at string-conversion time prevents a published package from\n// freezing CORE-THEME's own .env values into consuming apps and Docker builds.\nexport const AUTH_URL = runtimeValue('VITE_AUTH_URL');\nexport const ADMIN_API_URL = runtimeValue(\n 'VITE_ADMIN_API_URL',\n () => resolve('VITE_AUTH_URL') || 'http://localhost:9009',\n);\nexport const ADMIN_APP_ID = runtimeValue('VITE_ADMIN_APP_ID', () => resolve('VITE_APP_ID') || 'zinnext-dev-api-v1');\nexport const SUBMISSIONS_URL = runtimeValue('VITE_SUBMISSIONS_URL');\nexport const JOBS_URL = runtimeValue('VITE_JOBS_URL');\nexport const CANDIDATES_URL = runtimeValue('VITE_CANDIDATES_URL');\nexport const PYOPS_URL = runtimeValue('VITE_PYOPS_URL', 'http://localhost:7020/v1');\n\n// App identifier sent as the `X-App-Id` header on every API request (e.g.\n// 'zinnext', 'lms'). Configured in ONE place — the host's window config (or the\n// build-time .env fallback) — and applied to all calls via the interceptor below.\nexport const APP_ID = runtimeValue('VITE_APP_ID');\n\n// Helper for code that builds headers explicitly: merges `X-App-Id` into a\n// header object without clobbering anything else. (The interceptor below already\n// covers existing calls; this is just a convenience for new code.)\nexport function withAppId(headers = {}) {\n const appId = resolve('VITE_APP_ID');\n return appId ? { 'X-App-Id': appId, ...headers } : { ...headers };\n}\n\nexport function withAdminAppId(headers = {}) {\n const appId = resolve('VITE_ADMIN_APP_ID') || resolve('VITE_APP_ID') || 'zinnext-dev-api-v1';\n return appId ? { 'X-App-Id': appId, ...headers } : { ...headers };\n}\n\n// ── X-App-Id interceptor ──────────────────────────────────────────────────────\n//\n// Rather than editing every inline `headers: {...}` across the service files\n// (and risking new calls forgetting it), we patch `fetch` ONCE so every request\n// to a configured API base URL carries `X-App-Id`. This is scoped strictly to the\n// four API origins, so third-party/asset requests are never touched, and any\n// caller that already set `X-App-Id` explicitly is left as-is.\nfunction installAppIdInterceptor() {\n if (typeof window === 'undefined' || typeof window.fetch !== 'function') return;\n // Guard against double-patching (repeated imports / Vite HMR).\n if (window.__CORE_THEME_APP_ID_PATCHED__) return;\n\n const apiBaseUrls = [AUTH_URL, ADMIN_API_URL, SUBMISSIONS_URL, JOBS_URL, CANDIDATES_URL, PYOPS_URL];\n const originalFetch = window.fetch.bind(window);\n\n const urlOf = (input) => {\n if (typeof input === 'string') return input;\n if (input instanceof URL) return input.href;\n if (input && typeof input.url === 'string') return input.url; // Request object\n return '';\n };\n const isApiRequest = (url) =>\n !!url && apiBaseUrls.some((base) => {\n const value = String(base);\n return value && url.startsWith(value);\n });\n\n window.fetch = function patchedFetch(input, init) {\n try {\n const url = urlOf(input);\n const isAdminRequest = String(ADMIN_API_URL) && url.startsWith(String(ADMIN_API_URL));\n const appId = isAdminRequest\n ? (resolve('VITE_ADMIN_APP_ID') || resolve('VITE_APP_ID') || 'zinnext-dev-api-v1')\n : resolve('VITE_APP_ID');\n if (appId && isApiRequest(url)) {\n const isRequestObj = typeof Request !== 'undefined' && input instanceof Request;\n const headers = new Headers(\n (init && init.headers) || (isRequestObj ? input.headers : undefined),\n );\n if (!headers.has('X-App-Id')) headers.set('X-App-Id', appId);\n if (isRequestObj && !(init && init.headers)) {\n return originalFetch(new Request(input, { headers }), init);\n }\n return originalFetch(input, { ...(init || {}), headers });\n }\n } catch {\n // Any unexpected argument shape: fall through to the untouched request.\n }\n return originalFetch(input, init);\n };\n\n window.__CORE_THEME_APP_ID_PATCHED__ = true;\n}\n\ninstallAppIdInterceptor();\n\n// Optional JS helper (alternative to the index.html <script>). Because the\n// exports above are resolved when this module first loads, call this BEFORE the\n// first import of @realtek/core-theme — e.g. in the host's index.html, not in\n// main.jsx (which runs after imports are evaluated). The index.html <script>\n// approach is the reliable one.\nexport function configureCoreTheme(config = {}) {\n if (typeof window === 'undefined') return;\n window.__CORE_THEME_CONFIG__ = { ...(window.__CORE_THEME_CONFIG__ || {}), ...config };\n installAppIdInterceptor();\n}\n","import { AUTH_URL } from './apiConfig';\n\nconst AUTH_TOKEN_KEY = 'authToken';\nconst AUTH_USER_KEY = 'authUser';\nconst AUTH_LOGIN_SESSION_KEY = 'authLoginSession';\nconst CT_PROJECT_ID_KEY = 'ct_project_id';\nconst CT_PROJECT_NAME_KEY = 'ct_project_name';\nconst LOGIN_STORAGE_KEYS = [\n 'access_token', 'refresh_token', 'id_token', 'token_type', 'expires_in',\n 'refresh_expires_in', 'menu', 'footermenu', 'menuPermission', 'default_values',\n 'roleId', 'companyName', 'preferred_Username', 'user_Email', 'userName',\n 'userId', 'tenantId', 'businessId', 'businessUnitId', 'activeKey',\n 'ct_project_id', 'ct_project_name',\n];\n\nlet loginPromise = null;\nlet runtimeAuthToken = null;\n\nexport function setAuthTokenOverride(token) {\n runtimeAuthToken = typeof token === 'string' && token.trim() ? token.trim() : null;\n}\n\nexport function clearAuthTokenOverride() {\n runtimeAuthToken = null;\n}\n\nfunction extractToken(json) {\n return (\n json?.token ?? json?.access_token ?? json?.accessToken ?? json?.jwt ??\n json?.data?.token ?? json?.data?.access_token ?? json?.data?.accessToken ?? json?.data?.jwt\n );\n}\n\nfunction extractUser(json) {\n return json?.user ?? json?.data?.user ?? json?.data?.profile ?? null;\n}\n\nfunction decodeJwtPayload(token) {\n if (!token || typeof token !== 'string') return null;\n try {\n const payload = token.split('.')[1];\n if (!payload) return null;\n const normalized = payload.replace(/-/g, '+').replace(/_/g, '/');\n return JSON.parse(atob(normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=')));\n } catch {\n return null;\n }\n}\n\nfunction setLocalStorageJson(key, value) {\n if (value === undefined || value === null) return;\n localStorage.setItem(key, JSON.stringify(value));\n}\n\nfunction getLoginMenus(json, data) {\n return data?.menus ?? json?.menus ?? {\n menu: data?.menu ?? json?.menu,\n footermenu: data?.footermenu ?? json?.footermenu,\n };\n}\n\nfunction persistLoginResponse(json, token, user) {\n const data = json?.data ?? json;\n const tokenPayload = decodeJwtPayload(token) ?? {};\n const menus = getLoginMenus(json, data);\n const userName = (\n user?.userName ?? user?.name ?? data?.userName ?? data?.name ??\n tokenPayload.userName ?? tokenPayload.name ?? tokenPayload.preferred_username ?? tokenPayload.email\n );\n const preferredUsername = (\n user?.preferred_Username ?? user?.preferred_username ??\n data?.preferred_Username ?? data?.preferred_username ??\n tokenPayload.preferred_Username ?? tokenPayload.preferred_username ??\n tokenPayload.email ?? userName\n );\n const userEmail = user?.email ?? data?.email ?? tokenPayload.email ?? preferredUsername;\n\n localStorage.setItem('access_token', token);\n if (data?.refresh_token) localStorage.setItem('refresh_token', data.refresh_token);\n if (data?.id_token !== undefined) localStorage.setItem('id_token', data.id_token);\n if (data?.token_type) localStorage.setItem('token_type', data.token_type);\n if (data?.expires_in !== undefined) localStorage.setItem('expires_in', String(data.expires_in));\n if (data?.refresh_expires_in !== undefined) localStorage.setItem('refresh_expires_in', String(data.refresh_expires_in));\n if (userName) localStorage.setItem('userName', userName);\n if (preferredUsername) localStorage.setItem('preferred_Username', preferredUsername);\n if (userEmail) localStorage.setItem('user_Email', userEmail);\n if (data?.roleId ?? tokenPayload.role_id) localStorage.setItem('roleId', data?.roleId ?? tokenPayload.role_id);\n if (data?.companyName) localStorage.setItem('companyName', data.companyName);\n if (tokenPayload.userId !== undefined) localStorage.setItem('userId', String(tokenPayload.userId));\n if (tokenPayload.tenantId) localStorage.setItem('tenantId', tokenPayload.tenantId);\n if (tokenPayload.businessId) localStorage.setItem('businessId', tokenPayload.businessId);\n if (tokenPayload.businessUnitId) localStorage.setItem('businessUnitId', tokenPayload.businessUnitId);\n\n setLocalStorageJson('menu', menus.menu);\n setLocalStorageJson('footermenu', menus.footermenu);\n setLocalStorageJson('menuPermission', data?.menuPermission);\n setLocalStorageJson('default_values', data?.default_values);\n}\n\n// ── Token & Session ──────────────────────────────────────────────────────────\n\nexport function getStoredToken() {\n if (runtimeAuthToken) return runtimeAuthToken;\n const token = localStorage.getItem(AUTH_TOKEN_KEY);\n const hasSession = sessionStorage.getItem(AUTH_LOGIN_SESSION_KEY) === '1';\n return token && hasSession ? token : null;\n}\n\nexport function getStoredUser() {\n try {\n const stored = localStorage.getItem(AUTH_USER_KEY);\n if (stored) return JSON.parse(stored);\n } catch {\n // Fall through to the legacy login fields below.\n }\n return {\n userId: localStorage.getItem('userId'),\n username: localStorage.getItem('userName') || localStorage.getItem('preferred_Username'),\n email: localStorage.getItem('user_Email'),\n roleId: localStorage.getItem('roleId'),\n };\n}\n\nexport function logout() {\n localStorage.removeItem(AUTH_TOKEN_KEY);\n localStorage.removeItem(AUTH_USER_KEY);\n LOGIN_STORAGE_KEYS.forEach((key) => localStorage.removeItem(key));\n sessionStorage.removeItem(AUTH_LOGIN_SESSION_KEY);\n window.dispatchEvent(new Event('auth:logout'));\n}\n\n// ── Role Helpers ─────────────────────────────────────────────────────────────\n\nexport function getCurrentRoleName() {\n const stored = String(localStorage.getItem('roleId') ?? '').trim().toLowerCase();\n if (stored) return stored;\n const payload = decodeJwtPayload(getStoredToken()) ?? {};\n return String(payload.role ?? payload.roleName ?? payload.role_name ?? payload.role_id ?? payload.roleId ?? '').trim().toLowerCase();\n}\n\nexport function getUserRoles() {\n const token = getStoredToken() ?? localStorage.getItem(AUTH_TOKEN_KEY);\n const payload = decodeJwtPayload(token);\n const roles = new Set();\n const stored = getCurrentRoleName();\n if (stored) roles.add(stored);\n if (payload) {\n (payload?.realm_access?.roles ?? []).forEach((role) => roles.add(role));\n Object.values(payload?.resource_access ?? {}).forEach((client) => {\n (client?.roles ?? []).forEach((role) => roles.add(role));\n });\n [payload?.role, payload?.roleName, payload?.role_name].forEach((role) => {\n if (role) roles.add(role);\n });\n }\n return Array.from(roles).map((role) => String(role).toLowerCase());\n}\n\nexport function isTester() {\n return getCurrentRoleName() === 'tester' || getUserRoles().includes('tester');\n}\n\n// getActingIdentity returns the numeric {roleId, userId} of the logged-in user,\n// read from the auth token (falling back to the stored roleId). Used to evaluate\n// admin-configured field autoValueRules for UX only — the gateway re-evaluates\n// the same rules from the token and has the final say, so nothing here is a\n// security boundary.\nexport function getActingIdentity() {\n const payload = decodeJwtPayload(getStoredToken() ?? localStorage.getItem(AUTH_TOKEN_KEY)) ?? {};\n const num = (value) => {\n if (value === undefined || value === null || value === '') return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n };\n return {\n roleId: num(payload.role_id ?? payload.roleId) ?? num(localStorage.getItem('roleId')),\n userId: num(payload.userId ?? payload.user_id),\n };\n}\n\n// ── Project Context ───────────────────────────────────────────────────────────\n\nexport function setSelectedProject(project) {\n if (!project) return;\n localStorage.setItem(CT_PROJECT_ID_KEY, String(project.id));\n localStorage.setItem(CT_PROJECT_NAME_KEY, String(project.name));\n}\n\nexport function getSelectedProject() {\n const id = localStorage.getItem(CT_PROJECT_ID_KEY);\n const name = localStorage.getItem(CT_PROJECT_NAME_KEY);\n if (!id || !name) return null;\n return { id: Number(id), name };\n}\n\nexport function clearSelectedProject() {\n localStorage.removeItem(CT_PROJECT_ID_KEY);\n localStorage.removeItem(CT_PROJECT_NAME_KEY);\n}\n\n// ── Login ────────────────────────────────────────────────────────────────────\n\nexport async function login(credentials) {\n if (loginPromise) return loginPromise;\n\n loginPromise = fetch(`${AUTH_URL}/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(credentials),\n })\n .then(async (res) => {\n const json = await res.json();\n if (!res.ok) {\n const error = new Error(json?.message ?? json?.error ?? `Login failed: ${res.status}`);\n error.status = res.status;\n throw error;\n }\n const token = extractToken(json);\n if (!token) throw new Error('No token in login response');\n const user = extractUser(json);\n localStorage.setItem(AUTH_TOKEN_KEY, token);\n sessionStorage.setItem(AUTH_LOGIN_SESSION_KEY, '1');\n if (user) localStorage.setItem(AUTH_USER_KEY, JSON.stringify(user));\n persistLoginResponse(json, token, user);\n // Let any mounted AuthGuard re-check and reveal the protected content.\n window.dispatchEvent(new Event('auth:login'));\n return { token, user, response: json };\n })\n .finally(() => { loginPromise = null; });\n\n return loginPromise;\n}\n\n// ── HTTP Helpers (exported for use by other service files) ───────────────────\n\nexport async function ensureToken() {\n const token = getStoredToken();\n if (token) return token;\n const error = new Error('Authentication required');\n error.status = 401;\n throw error;\n}\n\nasync function authHeaders() {\n const token = await ensureToken();\n return {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n };\n}\n\nexport async function fetchJsonWithAuth(baseUrl, path = '', options = {}) {\n if (path && typeof path === 'object') {\n options = path;\n path = '';\n }\n\n const headers = await authHeaders();\n const res = await fetch(`${baseUrl}${path || ''}`, {\n ...options,\n headers: { ...headers, ...options.headers },\n });\n if (res.status === 401) logout();\n const text = await res.text();\n let json = {};\n if (text) {\n try {\n json = JSON.parse(text);\n } catch {\n json = { error: text };\n }\n }\n if (!res.ok) {\n const responseError = json?.error ?? json?.message;\n const detail = typeof responseError === 'string'\n ? responseError\n : responseError && Object.keys(responseError).length > 0\n ? JSON.stringify(responseError)\n : '';\n const error = new Error(detail || `API ${res.status}: ${res.statusText}`);\n error.status = res.status;\n error.response = json;\n throw error;\n }\n return json;\n}\n\nexport async function apiGetWithAuth(baseUrl, path) {\n const json = await fetchJsonWithAuth(baseUrl, path);\n return json.data ?? json;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authApi-KeciU9Ow.js","names":[],"sources":["../src/services/apiConfig.js","../src/services/authApi.js"],"sourcesContent":["// Central API base URLs.\n//\n// When CORE-THEME runs standalone (npm run dev), the values come from\n// src/services/.env (Vite VITE_* vars, baked in at build time).\n//\n// When CORE-THEME is consumed as the published @realtek/core-theme package,\n// host apps can override these values at RUNTIME by setting\n// `window.__CORE_THEME_CONFIG__` before the app renders:\n//\n// <script>\n// window.__CORE_THEME_CONFIG__ = {\n// VITE_AUTH_URL: 'http://192.168.1.66/authapi/v1',\n// VITE_SUBMISSIONS_URL: 'http://192.168.1.66/submissionsapi/v1',\n// VITE_JOBS_URL: 'http://192.168.1.66/jobsapi/v1',\n// VITE_CANDIDATES_URL: 'http://192.168.1.66/candidatesapi/v1',\n// VITE_APP_ID: 'zinnext', // sent as the `X-App-Id` header on every API call\n// VITE_ADMIN_APP_ID: 'zinnext', // optional admin override\n// };\n// </script>\n//\n// Priority: runtime window config > build-time .env fallback.\n\nconst BUILD_TIME_FALLBACK = {\n VITE_AUTH_URL: import.meta.env.VITE_AUTH_URL,\n VITE_ADMIN_API_URL: import.meta.env.VITE_ADMIN_API_URL,\n VITE_ADMIN_APP_ID: import.meta.env.VITE_ADMIN_APP_ID,\n VITE_SUBMISSIONS_URL: import.meta.env.VITE_SUBMISSIONS_URL,\n VITE_JOBS_URL: import.meta.env.VITE_JOBS_URL,\n VITE_CANDIDATES_URL: import.meta.env.VITE_CANDIDATES_URL,\n VITE_PYOPS_URL: import.meta.env.VITE_PYOPS_URL,\n VITE_APP_ID: import.meta.env.VITE_APP_ID,\n};\n\nfunction resolve(key) {\n if (\n typeof window !== 'undefined' &&\n window.__CORE_THEME_CONFIG__ &&\n window.__CORE_THEME_CONFIG__[key] != null\n ) {\n return window.__CORE_THEME_CONFIG__[key];\n }\n return BUILD_TIME_FALLBACK[key];\n}\n\nfunction runtimeValue(key, fallback = '') {\n return {\n toString: () => resolve(key) || (typeof fallback === 'function' ? fallback() : fallback),\n valueOf: () => resolve(key) || (typeof fallback === 'function' ? fallback() : fallback),\n [Symbol.toPrimitive]: () => resolve(key) || (typeof fallback === 'function' ? fallback() : fallback),\n };\n}\n\n// These are intentionally dynamic. Many service files use them inside template\n// literals (`${AUTH_URL}/path`) or pass them to helpers that later build a URL.\n// Resolving at string-conversion time prevents a published package from\n// freezing CORE-THEME's own .env values into consuming apps and Docker builds.\nexport const AUTH_URL = runtimeValue('VITE_AUTH_URL');\nexport const ADMIN_API_URL = runtimeValue(\n 'VITE_ADMIN_API_URL',\n () => resolve('VITE_AUTH_URL') || 'http://localhost:9009',\n);\nexport const ADMIN_APP_ID = runtimeValue('VITE_ADMIN_APP_ID', () => resolve('VITE_APP_ID') || 'zinnext-dev-api-v1');\nexport const SUBMISSIONS_URL = runtimeValue('VITE_SUBMISSIONS_URL');\nexport const JOBS_URL = runtimeValue('VITE_JOBS_URL');\nexport const CANDIDATES_URL = runtimeValue('VITE_CANDIDATES_URL');\nexport const PYOPS_URL = runtimeValue('VITE_PYOPS_URL', 'http://localhost:7020/v1');\n\n// App identifier sent as the `X-App-Id` header on every API request (e.g.\n// 'zinnext', 'lms'). Configured in ONE place — the host's window config (or the\n// build-time .env fallback) — and applied to all calls via the interceptor below.\nexport const APP_ID = runtimeValue('VITE_APP_ID');\n\n// Helper for code that builds headers explicitly: merges `X-App-Id` into a\n// header object without clobbering anything else. (The interceptor below already\n// covers existing calls; this is just a convenience for new code.)\nexport function withAppId(headers = {}) {\n const appId = resolve('VITE_APP_ID');\n return appId ? { 'X-App-Id': appId, ...headers } : { ...headers };\n}\n\nexport function withAdminAppId(headers = {}) {\n const appId = resolve('VITE_ADMIN_APP_ID') || resolve('VITE_APP_ID') || 'zinnext-dev-api-v1';\n return appId ? { 'X-App-Id': appId, ...headers } : { ...headers };\n}\n\n// ── X-App-Id interceptor ──────────────────────────────────────────────────────\n//\n// Rather than editing every inline `headers: {...}` across the service files\n// (and risking new calls forgetting it), we patch `fetch` ONCE so every request\n// to a configured API base URL carries `X-App-Id`. This is scoped strictly to the\n// four API origins, so third-party/asset requests are never touched, and any\n// caller that already set `X-App-Id` explicitly is left as-is.\nfunction installAppIdInterceptor() {\n if (typeof window === 'undefined' || typeof window.fetch !== 'function') return;\n // Guard against double-patching (repeated imports / Vite HMR).\n if (window.__CORE_THEME_APP_ID_PATCHED__) return;\n\n const apiBaseUrls = [AUTH_URL, ADMIN_API_URL, SUBMISSIONS_URL, JOBS_URL, CANDIDATES_URL, PYOPS_URL];\n const originalFetch = window.fetch.bind(window);\n\n const urlOf = (input) => {\n if (typeof input === 'string') return input;\n if (input instanceof URL) return input.href;\n if (input && typeof input.url === 'string') return input.url; // Request object\n return '';\n };\n const isApiRequest = (url) =>\n !!url && apiBaseUrls.some((base) => {\n const value = String(base);\n return value && url.startsWith(value);\n });\n\n window.fetch = function patchedFetch(input, init) {\n try {\n const url = urlOf(input);\n const isAdminRequest = String(ADMIN_API_URL) && url.startsWith(String(ADMIN_API_URL));\n const appId = isAdminRequest\n ? (resolve('VITE_ADMIN_APP_ID') || resolve('VITE_APP_ID') || 'zinnext-dev-api-v1')\n : resolve('VITE_APP_ID');\n if (appId && isApiRequest(url)) {\n const isRequestObj = typeof Request !== 'undefined' && input instanceof Request;\n const headers = new Headers(\n (init && init.headers) || (isRequestObj ? input.headers : undefined),\n );\n if (!headers.has('X-App-Id')) headers.set('X-App-Id', appId);\n if (isRequestObj && !(init && init.headers)) {\n return originalFetch(new Request(input, { headers }), init);\n }\n return originalFetch(input, { ...(init || {}), headers });\n }\n } catch {\n // Any unexpected argument shape: fall through to the untouched request.\n }\n return originalFetch(input, init);\n };\n\n window.__CORE_THEME_APP_ID_PATCHED__ = true;\n}\n\ninstallAppIdInterceptor();\n\n// Optional JS helper (alternative to the index.html <script>). Because the\n// exports above are resolved when this module first loads, call this BEFORE the\n// first import of @realtek/core-theme — e.g. in the host's index.html, not in\n// main.jsx (which runs after imports are evaluated). The index.html <script>\n// approach is the reliable one.\nexport function configureCoreTheme(config = {}) {\n if (typeof window === 'undefined') return;\n window.__CORE_THEME_CONFIG__ = { ...(window.__CORE_THEME_CONFIG__ || {}), ...config };\n installAppIdInterceptor();\n}\n","import { AUTH_URL } from './apiConfig';\n\nconst AUTH_TOKEN_KEY = 'authToken';\nconst AUTH_USER_KEY = 'authUser';\nconst AUTH_LOGIN_SESSION_KEY = 'authLoginSession';\nconst CT_PROJECT_ID_KEY = 'ct_project_id';\nconst CT_PROJECT_NAME_KEY = 'ct_project_name';\nconst LOGIN_STORAGE_KEYS = [\n 'access_token', 'refresh_token', 'id_token', 'token_type', 'expires_in',\n 'refresh_expires_in', 'menu', 'footermenu', 'menuPermission', 'default_values',\n 'roleId', 'companyName', 'preferred_Username', 'user_Email', 'userName',\n 'userId', 'tenantId', 'businessId', 'businessUnitId', 'activeKey',\n 'ct_project_id', 'ct_project_name',\n];\n\nlet loginPromise = null;\nlet runtimeAuthToken = null;\n\nexport function setAuthTokenOverride(token) {\n runtimeAuthToken = typeof token === 'string' && token.trim() ? token.trim() : null;\n}\n\nexport function clearAuthTokenOverride() {\n runtimeAuthToken = null;\n}\n\nfunction extractToken(json) {\n return (\n json?.token ?? json?.access_token ?? json?.accessToken ?? json?.jwt ??\n json?.data?.token ?? json?.data?.access_token ?? json?.data?.accessToken ?? json?.data?.jwt\n );\n}\n\nfunction extractUser(json) {\n return json?.user ?? json?.data?.user ?? json?.data?.profile ?? null;\n}\n\nfunction decodeJwtPayload(token) {\n if (!token || typeof token !== 'string') return null;\n try {\n const payload = token.split('.')[1];\n if (!payload) return null;\n const normalized = payload.replace(/-/g, '+').replace(/_/g, '/');\n return JSON.parse(atob(normalized.padEnd(Math.ceil(normalized.length / 4) * 4, '=')));\n } catch {\n return null;\n }\n}\n\nfunction setLocalStorageJson(key, value) {\n if (value === undefined || value === null) return;\n localStorage.setItem(key, JSON.stringify(value));\n}\n\nfunction getLoginMenus(json, data) {\n return data?.menus ?? json?.menus ?? {\n menu: data?.menu ?? json?.menu,\n footermenu: data?.footermenu ?? json?.footermenu,\n };\n}\n\nfunction persistLoginResponse(json, token, user) {\n const data = json?.data ?? json;\n const tokenPayload = decodeJwtPayload(token) ?? {};\n const menus = getLoginMenus(json, data);\n const userName = (\n user?.userName ?? user?.name ?? data?.userName ?? data?.name ??\n tokenPayload.userName ?? tokenPayload.name ?? tokenPayload.preferred_username ?? tokenPayload.email\n );\n const preferredUsername = (\n user?.preferred_Username ?? user?.preferred_username ??\n data?.preferred_Username ?? data?.preferred_username ??\n tokenPayload.preferred_Username ?? tokenPayload.preferred_username ??\n tokenPayload.email ?? userName\n );\n const userEmail = user?.email ?? data?.email ?? tokenPayload.email ?? preferredUsername;\n\n localStorage.setItem('access_token', token);\n if (data?.refresh_token) localStorage.setItem('refresh_token', data.refresh_token);\n if (data?.id_token !== undefined) localStorage.setItem('id_token', data.id_token);\n if (data?.token_type) localStorage.setItem('token_type', data.token_type);\n if (data?.expires_in !== undefined) localStorage.setItem('expires_in', String(data.expires_in));\n if (data?.refresh_expires_in !== undefined) localStorage.setItem('refresh_expires_in', String(data.refresh_expires_in));\n if (userName) localStorage.setItem('userName', userName);\n if (preferredUsername) localStorage.setItem('preferred_Username', preferredUsername);\n if (userEmail) localStorage.setItem('user_Email', userEmail);\n if (data?.roleId ?? tokenPayload.role_id) localStorage.setItem('roleId', data?.roleId ?? tokenPayload.role_id);\n if (data?.companyName) localStorage.setItem('companyName', data.companyName);\n if (tokenPayload.userId !== undefined) localStorage.setItem('userId', String(tokenPayload.userId));\n if (tokenPayload.tenantId) localStorage.setItem('tenantId', tokenPayload.tenantId);\n if (tokenPayload.businessId) localStorage.setItem('businessId', tokenPayload.businessId);\n if (tokenPayload.businessUnitId) localStorage.setItem('businessUnitId', tokenPayload.businessUnitId);\n\n setLocalStorageJson('menu', menus.menu);\n setLocalStorageJson('footermenu', menus.footermenu);\n setLocalStorageJson('menuPermission', data?.menuPermission);\n setLocalStorageJson('default_values', data?.default_values);\n}\n\n// ── Token & Session ──────────────────────────────────────────────────────────\n\nexport function getStoredToken() {\n if (runtimeAuthToken) return runtimeAuthToken;\n const token = localStorage.getItem(AUTH_TOKEN_KEY);\n const hasSession = sessionStorage.getItem(AUTH_LOGIN_SESSION_KEY) === '1';\n return token && hasSession ? token : null;\n}\n\nexport function getStoredUser() {\n try {\n const stored = localStorage.getItem(AUTH_USER_KEY);\n if (stored) return JSON.parse(stored);\n } catch {\n // Fall through to the legacy login fields below.\n }\n return {\n userId: localStorage.getItem('userId'),\n username: localStorage.getItem('userName') || localStorage.getItem('preferred_Username'),\n email: localStorage.getItem('user_Email'),\n roleId: localStorage.getItem('roleId'),\n };\n}\n\nexport function logout() {\n localStorage.removeItem(AUTH_TOKEN_KEY);\n localStorage.removeItem(AUTH_USER_KEY);\n LOGIN_STORAGE_KEYS.forEach((key) => localStorage.removeItem(key));\n sessionStorage.removeItem(AUTH_LOGIN_SESSION_KEY);\n window.dispatchEvent(new Event('auth:logout'));\n}\n\n// ── Role Helpers ─────────────────────────────────────────────────────────────\n\nexport function getCurrentRoleName() {\n const stored = String(localStorage.getItem('roleId') ?? '').trim().toLowerCase();\n if (stored) return stored;\n const payload = decodeJwtPayload(getStoredToken()) ?? {};\n return String(payload.role ?? payload.roleName ?? payload.role_name ?? payload.role_id ?? payload.roleId ?? '').trim().toLowerCase();\n}\n\nexport function getUserRoles() {\n const token = getStoredToken() ?? localStorage.getItem(AUTH_TOKEN_KEY);\n const payload = decodeJwtPayload(token);\n const roles = new Set();\n const stored = getCurrentRoleName();\n if (stored) roles.add(stored);\n if (payload) {\n (payload?.realm_access?.roles ?? []).forEach((role) => roles.add(role));\n Object.values(payload?.resource_access ?? {}).forEach((client) => {\n (client?.roles ?? []).forEach((role) => roles.add(role));\n });\n [payload?.role, payload?.roleName, payload?.role_name].forEach((role) => {\n if (role) roles.add(role);\n });\n }\n return Array.from(roles).map((role) => String(role).toLowerCase());\n}\n\nexport function isTester() {\n return getCurrentRoleName() === 'tester' || getUserRoles().includes('tester');\n}\n\n// getActingIdentity returns the numeric {roleId, userId} of the logged-in user,\n// read from the auth token (falling back to the stored roleId). Used to evaluate\n// admin-configured field autoValueRules for UX only — the gateway re-evaluates\n// the same rules from the token and has the final say, so nothing here is a\n// security boundary.\nexport function getActingIdentity() {\n const payload = decodeJwtPayload(getStoredToken() ?? localStorage.getItem(AUTH_TOKEN_KEY)) ?? {};\n const num = (value) => {\n if (value === undefined || value === null || value === '') return undefined;\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : undefined;\n };\n return {\n roleId: num(payload.role_id ?? payload.roleId) ?? num(localStorage.getItem('roleId')),\n userId: num(payload.userId ?? payload.user_id),\n };\n}\n\n// ── Project Context ───────────────────────────────────────────────────────────\n\nexport function setSelectedProject(project) {\n if (!project) return;\n localStorage.setItem(CT_PROJECT_ID_KEY, String(project.id));\n localStorage.setItem(CT_PROJECT_NAME_KEY, String(project.name));\n}\n\nexport function getSelectedProject() {\n const id = localStorage.getItem(CT_PROJECT_ID_KEY);\n const name = localStorage.getItem(CT_PROJECT_NAME_KEY);\n if (!id || !name) return null;\n return { id: Number(id), name };\n}\n\nexport function clearSelectedProject() {\n localStorage.removeItem(CT_PROJECT_ID_KEY);\n localStorage.removeItem(CT_PROJECT_NAME_KEY);\n}\n\n// ── Login ────────────────────────────────────────────────────────────────────\n\nexport async function login(credentials) {\n if (loginPromise) return loginPromise;\n\n loginPromise = fetch(`${AUTH_URL}/login`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(credentials),\n })\n .then(async (res) => {\n const json = await res.json();\n if (!res.ok) {\n const error = new Error(json?.message ?? json?.error ?? `Login failed: ${res.status}`);\n error.status = res.status;\n throw error;\n }\n const token = extractToken(json);\n if (!token) throw new Error('No token in login response');\n const user = extractUser(json);\n localStorage.setItem(AUTH_TOKEN_KEY, token);\n sessionStorage.setItem(AUTH_LOGIN_SESSION_KEY, '1');\n if (user) localStorage.setItem(AUTH_USER_KEY, JSON.stringify(user));\n persistLoginResponse(json, token, user);\n // Let any mounted AuthGuard re-check and reveal the protected content.\n window.dispatchEvent(new Event('auth:login'));\n return { token, user, response: json };\n })\n .finally(() => { loginPromise = null; });\n\n return loginPromise;\n}\n\n// ── HTTP Helpers (exported for use by other service files) ───────────────────\n\nexport async function ensureToken() {\n const token = getStoredToken();\n if (token) return token;\n const error = new Error('Authentication required');\n error.status = 401;\n throw error;\n}\n\nasync function authHeaders() {\n const token = await ensureToken();\n return {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${token}`,\n };\n}\n\nexport async function fetchJsonWithAuth(baseUrl, path = '', options = {}) {\n if (path && typeof path === 'object') {\n options = path;\n path = '';\n }\n\n const headers = await authHeaders();\n const res = await fetch(`${baseUrl}${path || ''}`, {\n ...options,\n headers: { ...headers, ...options.headers },\n });\n if (res.status === 401) logout();\n const text = await res.text();\n let json = {};\n if (text) {\n try {\n json = JSON.parse(text);\n } catch {\n json = { error: text };\n }\n }\n if (!res.ok) {\n const responseError = json?.error ?? json?.message;\n const detail = typeof responseError === 'string'\n ? responseError\n : responseError && Object.keys(responseError).length > 0\n ? JSON.stringify(responseError)\n : '';\n const error = new Error(detail || `API ${res.status}: ${res.statusText}`);\n error.status = res.status;\n error.response = json;\n throw error;\n }\n return json;\n}\n\nexport async function apiGetWithAuth(baseUrl, path) {\n const json = await fetchJsonWithAuth(baseUrl, path);\n return json.data ?? json;\n}\n"],"mappings":"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"}
|