entity-client 1.0.23 → 1.0.25

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.
Files changed (41) hide show
  1. package/dist/EntityAppServerApi.d.ts +49 -0
  2. package/dist/EntityServerApi.d.ts +24 -0
  3. package/dist/client/base.d.ts +13 -0
  4. package/dist/client/base.js +1 -1
  5. package/dist/client/base.js.map +3 -3
  6. package/dist/client/request.d.ts +5 -0
  7. package/dist/client/request.js +1 -1
  8. package/dist/client/request.js.map +3 -3
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +3 -3
  11. package/dist/mixins/app/plugins/alimtalk.d.ts +3 -0
  12. package/dist/mixins/app/plugins/friendtalk.d.ts +3 -0
  13. package/dist/mixins/app/plugins/holidays.d.ts +3 -0
  14. package/dist/mixins/app/plugins/identity.d.ts +3 -0
  15. package/dist/mixins/app/plugins/llm.d.ts +3 -0
  16. package/dist/mixins/app/plugins/ocr.d.ts +3 -0
  17. package/dist/mixins/app/plugins/pg.d.ts +3 -0
  18. package/dist/mixins/app/plugins/push.d.ts +3 -0
  19. package/dist/mixins/app/plugins/sms.d.ts +3 -0
  20. package/dist/mixins/app/plugins/taxinvoice.d.ts +3 -0
  21. package/dist/mixins/app/routes/account.d.ts +3 -0
  22. package/dist/mixins/app/routes/board.d.ts +4 -0
  23. package/dist/mixins/app/routes/board.js +1 -1
  24. package/dist/mixins/app/routes/board.js.map +2 -2
  25. package/dist/mixins/app/routes/email-verify.d.ts +3 -0
  26. package/dist/mixins/app/routes/oauth.d.ts +3 -0
  27. package/dist/mixins/app/routes/password-reset.d.ts +3 -0
  28. package/dist/mixins/app/routes/two-factor.d.ts +3 -0
  29. package/dist/mixins/server/admin.d.ts +3 -0
  30. package/dist/mixins/server/auth.d.ts +3 -0
  31. package/dist/mixins/server/auth.js +1 -1
  32. package/dist/mixins/server/auth.js.map +3 -3
  33. package/dist/mixins/server/entity.d.ts +3 -0
  34. package/dist/mixins/server/file.d.ts +3 -0
  35. package/dist/mixins/server/push.d.ts +3 -0
  36. package/dist/mixins/server/smtp.d.ts +3 -0
  37. package/dist/mixins/server/transaction.d.ts +3 -0
  38. package/dist/mixins/server/utils.d.ts +3 -0
  39. package/dist/react.js +1 -1
  40. package/dist/react.js.map +3 -3
  41. package/package.json +1 -1
@@ -62,6 +62,7 @@ export declare function PushMixin<TBase extends GConstructor<WithSubmit>>(Base:
62
62
  csrfRefresher: (() => Promise<void>) | null;
63
63
  requestAbortControllers: Map<string, AbortController>;
64
64
  activeTxId: string | null;
65
+ initialHealthFired: boolean;
65
66
  keepSession: boolean;
66
67
  refreshBuffer: number;
67
68
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -84,8 +85,10 @@ export declare function PushMixin<TBase extends GConstructor<WithSubmit>>(Base:
84
85
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
85
86
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
86
87
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
88
+ fireInitialHealth(): void;
87
89
  setToken(token: string): void;
88
90
  setAccessTokenFromResponse(token: string): void;
91
+ syncRealtimeWithToken(): void;
89
92
  setAnonymousPacketToken(token: string): void;
90
93
  setApiKey(apiKey: string): void;
91
94
  setHmacSecret(secret: string): void;
@@ -26,6 +26,7 @@ export declare function SmtpMixin<TBase extends GConstructor<EntityServerClientB
26
26
  csrfRefresher: (() => Promise<void>) | null;
27
27
  requestAbortControllers: Map<string, AbortController>;
28
28
  activeTxId: string | null;
29
+ initialHealthFired: boolean;
29
30
  keepSession: boolean;
30
31
  refreshBuffer: number;
31
32
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -48,8 +49,10 @@ export declare function SmtpMixin<TBase extends GConstructor<EntityServerClientB
48
49
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
49
50
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
50
51
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
52
+ fireInitialHealth(): void;
51
53
  setToken(token: string): void;
52
54
  setAccessTokenFromResponse(token: string): void;
55
+ syncRealtimeWithToken(): void;
53
56
  setAnonymousPacketToken(token: string): void;
54
57
  setApiKey(apiKey: string): void;
55
58
  setHmacSecret(secret: string): void;
@@ -19,6 +19,7 @@ export declare function TransactionMixin<TBase extends GConstructor<EntityServer
19
19
  csrfRefresher: (() => Promise<void>) | null;
20
20
  requestAbortControllers: Map<string, AbortController>;
21
21
  activeTxId: string | null;
22
+ initialHealthFired: boolean;
22
23
  keepSession: boolean;
23
24
  refreshBuffer: number;
24
25
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -41,8 +42,10 @@ export declare function TransactionMixin<TBase extends GConstructor<EntityServer
41
42
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
42
43
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
43
44
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
45
+ fireInitialHealth(): void;
44
46
  setToken(token: string): void;
45
47
  setAccessTokenFromResponse(token: string): void;
48
+ syncRealtimeWithToken(): void;
46
49
  setAnonymousPacketToken(token: string): void;
47
50
  setApiKey(apiKey: string): void;
48
51
  setHmacSecret(secret: string): void;
@@ -75,6 +75,7 @@ export declare function UtilsMixin<TBase extends GConstructor<EntityServerClient
75
75
  csrfRefresher: (() => Promise<void>) | null;
76
76
  requestAbortControllers: Map<string, AbortController>;
77
77
  activeTxId: string | null;
78
+ initialHealthFired: boolean;
78
79
  keepSession: boolean;
79
80
  refreshBuffer: number;
80
81
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -97,8 +98,10 @@ export declare function UtilsMixin<TBase extends GConstructor<EntityServerClient
97
98
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
98
99
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
99
100
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
101
+ fireInitialHealth(): void;
100
102
  setToken(token: string): void;
101
103
  setAccessTokenFromResponse(token: string): void;
104
+ syncRealtimeWithToken(): void;
102
105
  setAnonymousPacketToken(token: string): void;
103
106
  setApiKey(apiKey: string): void;
104
107
  setHmacSecret(secret: string): void;
package/dist/react.js CHANGED
@@ -1,2 +1,2 @@
1
- import{useCallback as q,useEffect as Se,useMemo as je,useRef as Ce,useState as xe}from"react";function I(r,n){let{singleton:e=!0,tokenResolver:t,baseUrl:s,token:i,resumeSession:o}=r,[a,u]=xe(!1),[m,f]=xe(null),h=Ce(!0);Se(()=>(h.current=!0,()=>{h.current=!1}),[]);let T=je(()=>{let p=e?n.singletonInstance:new n.ClientClass({baseUrl:s,token:i});e&&p.configure({baseUrl:s,token:i});let d=t?.();return typeof d=="string"&&p.setToken(d),p},[e,t,s,i,n.ClientClass,n.singletonInstance]),R=Ce(o);Se(()=>{if(R.current){if(T.checkHealth){T.checkHealth(!0).catch(()=>{});return}T.refreshToken(R.current).catch(()=>{})}},[T]);let y=q(async p=>{h.current&&(u(!0),f(null));try{return await p()}catch(d){let P=d instanceof Error?d:new Error(String(d));throw h.current&&f(P),P}finally{h.current&&u(!1)}},[]),S=q((p,d,P)=>y(()=>T.submit(p,d,P)),[T,y]),D=q((p,d,P)=>y(()=>T.delete(p,d,P)),[T,y]),j=q((p,d)=>y(()=>T.query(p,d)),[T,y]),K=q(()=>{u(!1),f(null)},[]);return{client:T,isPending:a,error:m,reset:K,submit:S,del:D,query:j}}function N(r){let n=import.meta;if(n?.env?.[r]!=null)return n.env[r];let e=globalThis.process;if(e?.env?.[r]!=null)return e.env[r]}function c(r){return Object.entries(r).filter(([,n])=>n!=null).map(([n,e])=>`${encodeURIComponent(n==="orderBy"?"order_by":n)}=${encodeURIComponent(String(e))}`).join("&")}import{xchacha20poly1305 as Ee}from"@noble/ciphers/chacha";import{sha256 as Ke}from"@noble/hashes/sha2";import{hkdf as Ne}from"@noble/hashes/hkdf";var V=32,z=2,Q=14,x=24,Ve=16,ze="entity-server:hkdf:v1",Qe="entity-server:packet-encryption";function O(r){return r instanceof Uint8Array?r:new Uint8Array(r)}function Ae(r,n=Qe){return Ne(Ke,new TextEncoder().encode(r),new TextEncoder().encode(ze),new TextEncoder().encode(n),V)}function Be(r,n=z,e=Q){let t=O(r);return t.length<V?n:n+t[V-1]%e}function $e(r,n,e=z,t=Q){let s=O(r),i=O(n),o=Be(i,e,t),a=crypto.getRandomValues(new Uint8Array(o)),u=crypto.getRandomValues(new Uint8Array(x)),f=Ee(i,u).encrypt(s),h=new Uint8Array(o+x+f.length);return h.set(a,0),h.set(u,o),h.set(f,o+x),h}function qe(r,n,e=z,t=Q){let s=O(r),i=O(n),o=Be(i,e,t);if(s.length<o+x+Ve)throw new Error("Encrypted packet too short");let a=s.slice(o,o+x),u=s.slice(o+x);return Ee(i,a).decrypt(u)}function M(r,n){return Ae(r||n)}function Oe(r,n){return $e(r,n)}function H(r,n){let e=qe(r,n);return JSON.parse(new TextDecoder().decode(e))}function Me(r,n,e,t){let s=n.toLowerCase().includes("application/octet-stream");if(e&&!s)throw new Error("Encrypted request required: Content-Type must be application/octet-stream");if(s){if(r==null)throw new Error("Encrypted request body is empty");if(r instanceof ArrayBuffer)return H(r,t);if(r instanceof Uint8Array){let i=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);return H(i,t)}throw new Error("Encrypted request body must be ArrayBuffer or Uint8Array")}return r==null||r===""?{}:typeof r=="string"?JSON.parse(r):r}import{sha256 as We}from"@noble/hashes/sha2";import{hmac as Xe}from"@noble/hashes/hmac";function Ue(r,n,e,t,s){let i=String(Math.floor(Date.now()/1e3)),o=crypto.randomUUID(),a=new TextEncoder().encode(`${r}|${n}|${i}|${o}|`),u=new Uint8Array(a.length+e.length);u.set(a,0),u.set(e,a.length);let f=[...Xe(We,new TextEncoder().encode(s),u)].map(h=>h.toString(16).padStart(2,"0")).join("");return{"X-API-Key":t,"X-Timestamp":i,"X-Nonce":o,"X-Signature":f}}function Je(r){switch(r.toUpperCase()){case"POST":case"PUT":case"PATCH":case"DELETE":return!0;default:return!1}}function Ye(r,n,e){if(e.autoAbortKey===!1)return null;if(typeof e.autoAbortKey=="string"){let t=e.autoAbortKey.trim();return t||null}return Je(r)?`${r.toUpperCase()} ${n}`:null}function Ze(r){let n=r.filter(s=>!!s);if(n.length===0)return;if(n.length===1)return n[0];if(typeof AbortSignal.any=="function")return AbortSignal.any(n);let e=new AbortController,t=()=>e.abort();for(let s of n){if(s.aborted){e.abort();break}s.addEventListener("abort",t,{once:!0})}return e.signal}function et(r,n,e,t){let s=Ye(n,e,t);if(!s)return{signal:t.signal,abortKey:null,controller:null};r.requestAbortControllers.get(s)?.abort();let i=new AbortController;return r.requestAbortControllers.set(s,i),{signal:Ze([t.signal,i.signal]),abortKey:s,controller:i}}function tt(r,n,e){!n||!e||r.requestAbortControllers.get(n)===e&&r.requestAbortControllers.delete(n)}function nt(r){return r.hmacSecret||r.token||r.anonymousPacketToken}function rt(r,n,e){return r.hmacSecret?r.hmacSecret:n&&r.token||e}function st(r){return r?r.length<=8?`${r.slice(0,2)}...${r.slice(-2)}`:`${r.slice(0,4)}...${r.slice(-4)}`:""}function it(r){typeof console>"u"||typeof console.error!="function"||console.error("[entity-client] packet decrypt failed",{method:r.method,path:r.path,withAuth:r.withAuth,status:r.status,contentType:r.contentType,responsePacketSource:st(r.responsePacketSource),tokenPresent:r.tokenPresent,anonymousPacketTokenPresent:r.anonymousPacketTokenPresent,hmacEnabled:r.hmacEnabled,error:r.error instanceof Error?{name:r.error.name,message:r.error.message,stack:r.error.stack}:r.error})}function ot(r){return r!=="GET"&&r!=="HEAD"&&r!=="OPTIONS"}function G(r){if(typeof document>"u")return"";for(let n of document.cookie.split(";")){let e=n.indexOf("=");if(!(e<0)&&n.substring(0,e).trim()===r)return decodeURIComponent(n.substring(e+1).trim())}return""}function at(r,n){return r===403&&/csrf/i.test(n)?!0:/csrf/i.test(n)&&/expired|token validation failed/i.test(n)}async function Le(r){if((r.headers.get("Content-Type")??"").includes("application/json")){let t=await r.json().catch(()=>null);if(t?.error)return t.error;if(t?.message)return t.message}return await r.text().catch(()=>"")||`HTTP ${r.status}`}async function w(r,n,e,t,s=!0,i={},o=!0){let a=typeof o=="boolean"?{requireOkShape:o}:o,u=a.requireOkShape??!0,m=new Set(a.allowStatuses??[]),f=et(r,n,e,a),h=f.signal,{baseUrl:T,token:R,apiKey:y,hmacSecret:S,encryptRequests:D,csrfEnabled:j,csrfHeaderName:K,csrfCookieName:p,refreshCsrfCookie:d,onAccessToken:P}=r,A=r.anonymousPacketToken||G("anon_token"),U=s&&!!(y&&S),Ge=nt(r),Pe=rt(r,s,A),L=j&&ot(n)&&!U,B=L?G(p):"",be="application/json",Fe=!U&&!!A,b=null;if(t!=null)if(D&&!!Ge&&s&&n!=="GET"&&n!=="HEAD"){let g=M(S,R||A);b=Oe(new TextEncoder().encode(JSON.stringify(t)),g),be="application/octet-stream"}else b=JSON.stringify(t);let De=l=>{let g={...i},$=Object.keys(g).some(C=>C.toLowerCase()==="content-type");if(b!=null&&!$&&(g["Content-Type"]=be),!U&&s&&R&&(g.Authorization=`Bearer ${R}`),Fe&&(g["X-Packet-Token"]=A),L&&l&&(g[K]=l),U){let C=b instanceof Uint8Array?b:typeof b=="string"?new TextEncoder().encode(b):new Uint8Array(0);Object.assign(g,Ue(n,e,C,y,S))}return g};L&&!B&&d&&(await d(),B=G(p));let we=l=>fetch(T+e,{method:n,headers:De(l),...b!=null?{body:b}:{},credentials:"include",signal:h});try{let l=await we(B);if(!l.ok){let k=await Le(l.clone());if(L&&d&&at(l.status,k))await d(),B=G(p),l=await we(B);else if(!m.has(l.status)){let _=new Error(k);throw _.status=l.status,_}}if(!l.ok&&!m.has(l.status)){let k=new Error(await Le(l));throw k.status=l.status,k}let g=l.headers.get("X-Access-Token")?.trim()??"",$=l.headers.get("Content-Type")??"";if($.includes("application/octet-stream")){let k=M(S,Pe),_=await l.arrayBuffer(),ve;try{ve=H(_,k)}catch(Re){throw it({method:n,path:e,withAuth:s,status:l.status,contentType:$,responsePacketSource:Pe,tokenPresent:!!R,anonymousPacketTokenPresent:!!A,hmacEnabled:!!S,error:Re}),Re}return g&&P?.(g),ve}if(g&&P?.(g),!$.includes("application/json"))return await l.text();let C=await l.json();if(u&&!C.ok&&!m.has(l.status)){let k=new Error(C.message??`EntityServer error (HTTP ${l.status})`);throw k.status=l.status,k}else return C}finally{tt(r,f.abortKey,f.controller)}}var W="/v1/realtime",F=class{baseUrl;token;anonymousPacketToken;apiKey;hmacSecret;encryptRequests;csrfEnabled;csrfHeaderName;csrfCookieName;csrfRefresher=null;requestAbortControllers=new Map;activeTxId=null;keepSession;refreshBuffer;onTokenRefreshed;onSessionExpired;onHealthChange;sessionRefreshToken=null;refreshTimer=null;healthTickTimer=null;healthTickPromise=null;realtimeEnabled;realtimePath;realtimeAutoReconnect;realtimeReconnectDelayMs;realtimeStatus;realtimeSocket=null;realtimeConnectPromise=null;realtimeReconnectTimer=null;realtimeShouldReconnect=!1;realtimeMessageListeners=new Set;realtimeStatusListeners=new Set;realtimeEventListeners=new Map;constructor(n={}){let e=N("VITE_ENTITY_SERVER_URL");this.baseUrl=(n.baseUrl??e??"").replace(/\/$/,""),this.token=n.token??"",this.anonymousPacketToken=n.anonymousPacketToken??"",this.apiKey=n.apiKey??"",this.hmacSecret=n.hmacSecret??"",this.encryptRequests=n.encryptRequests??!1,this.csrfEnabled=n.csrfEnabled??!1,this.csrfHeaderName=n.csrfHeaderName??"x-csrf-token",this.csrfCookieName=n.csrfCookieName??"_csrf",this.keepSession=n.keepSession??!1,this.refreshBuffer=n.refreshBuffer??60,this.onTokenRefreshed=n.onTokenRefreshed,this.onSessionExpired=n.onSessionExpired,this.onHealthChange=n.onHealthChange,this.realtimeEnabled=!1,this.realtimePath=W,this.realtimeAutoReconnect=!0,this.realtimeReconnectDelayMs=3e3,this.realtimeStatus="idle",this.applyRealtimeOptions(n.realtime),typeof n.healthTickInterval=="number"&&n.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(n.healthTickInterval,!1))}configure(n){typeof n.baseUrl=="string"&&(this.baseUrl=n.baseUrl.replace(/\/$/,"")),typeof n.token=="string"&&(this.token=n.token),typeof n.anonymousPacketToken=="string"&&(this.anonymousPacketToken=n.anonymousPacketToken),typeof n.encryptRequests=="boolean"&&(this.encryptRequests=n.encryptRequests),typeof n.csrfEnabled=="boolean"&&(this.csrfEnabled=n.csrfEnabled),typeof n.csrfHeaderName=="string"&&(this.csrfHeaderName=n.csrfHeaderName),typeof n.csrfCookieName=="string"&&(this.csrfCookieName=n.csrfCookieName),typeof n.apiKey=="string"&&(this.apiKey=n.apiKey),typeof n.hmacSecret=="string"&&(this.hmacSecret=n.hmacSecret),typeof n.keepSession=="boolean"&&(this.keepSession=n.keepSession),typeof n.refreshBuffer=="number"&&(this.refreshBuffer=n.refreshBuffer),n.onTokenRefreshed&&(this.onTokenRefreshed=n.onTokenRefreshed),n.onSessionExpired&&(this.onSessionExpired=n.onSessionExpired),n.onHealthChange&&(this.onHealthChange=n.onHealthChange),typeof n.realtime<"u"&&this.applyRealtimeOptions(n.realtime),typeof n.healthTickInterval=="number"&&n.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(n.healthTickInterval,!1))}setToken(n){this.token=n,n||this.disconnectRealtime("token_cleared")}setAccessTokenFromResponse(n){this.token=n,n||this.disconnectRealtime("token_cleared")}setAnonymousPacketToken(n){this.anonymousPacketToken=n}setApiKey(n){this.apiKey=n}setHmacSecret(n){this.hmacSecret=n}setEncryptRequests(n){this.encryptRequests=n}setCsrfEnabled(n){this.csrfEnabled=n}addRealtimeListener(n){this.realtimeMessageListeners.add(n)}removeRealtimeListener(n){this.realtimeMessageListeners.delete(n)}addRealtimeStatusListener(n){this.realtimeStatusListeners.add(n)}removeRealtimeStatusListener(n){this.realtimeStatusListeners.delete(n)}addRealtimeEventListener(n,e){let t=String(n).trim();t&&(this.realtimeEventListeners.has(t)||this.realtimeEventListeners.set(t,new Set),this.realtimeEventListeners.get(t).add(e))}removeRealtimeEventListener(n,e){let t=String(n).trim();if(!t)return;let s=this.realtimeEventListeners.get(t);s&&(s.delete(e),s.size===0&&this.realtimeEventListeners.delete(t))}async connectRealtime(){if(!this.realtimeEnabled){this.setRealtimeStatus("disabled","realtime_disabled");return}if(!this.token)throw new Error("Cannot open realtime connection without access token.");if(typeof WebSocket>"u")throw new Error("WebSocket is not available in this environment.");if(this.realtimeSocket&&this.realtimeSocket.readyState===WebSocket.OPEN)return;if(this.realtimeSocket&&this.realtimeSocket.readyState===WebSocket.CONNECTING&&this.realtimeConnectPromise)return this.realtimeConnectPromise;this.clearRealtimeReconnectTimer(),this.realtimeShouldReconnect=this.realtimeAutoReconnect,this.setRealtimeStatus("connecting","connect_requested");let n=new WebSocket(this.buildRealtimeUrl());return this.realtimeSocket=n,this.realtimeConnectPromise=new Promise((e,t)=>{let s=!1,i=()=>{s||(s=!0,this.realtimeConnectPromise=null,e())},o=a=>{s||(s=!0,this.realtimeConnectPromise=null,t(a))};n.addEventListener("open",()=>{this.setRealtimeStatus("open","socket_open"),i()}),n.addEventListener("message",a=>{this.handleRealtimeMessage(a.data)}),n.addEventListener("error",()=>{this.setRealtimeStatus("closed","socket_error",new Error("Realtime socket error."))}),n.addEventListener("close",a=>{this.realtimeSocket===n&&(this.realtimeSocket=null);let u=a.reason||"socket_closed",m=new Error(`Realtime socket closed (${a.code}${a.reason?`: ${a.reason}`:""}).`);this.setRealtimeStatus("closed",u,m),s||o(m),this.realtimeShouldReconnect&&this.realtimeEnabled&&this.realtimeAutoReconnect&&this.token&&this.scheduleRealtimeReconnect(u)})}),this.realtimeConnectPromise}disconnectRealtime(n="client_disconnect"){if(this.realtimeShouldReconnect=!1,this.clearRealtimeReconnectTimer(),this.realtimeSocket){let e=this.realtimeSocket;this.realtimeSocket=null;try{(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close(1e3,n)}catch{}}this.realtimeConnectPromise=null,this.setRealtimeStatus(this.realtimeEnabled?"idle":"disabled",n)}sendRealtime(n){return!this.realtimeSocket||this.realtimeSocket.readyState!==WebSocket.OPEN?!1:(this.realtimeSocket.send(JSON.stringify(n)),!0)}subscribeRealtime(n){return this.sendRealtime({type:"subscribe",channel:"session",event:"session.subscribe",data:{subscriptions:n}})}unsubscribeRealtime(n){return this.sendRealtime({type:"unsubscribe",channel:"session",event:"session.unsubscribe",data:{subscriptions:n}})}startHealthTick(n=300*1e3,e=!0){this.stopHealthTick();let t=()=>{this.healthTickPromise||(this.healthTickPromise=(this.csrfRefresher?this.csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this.healthTickPromise=null}))};e&&t(),this.healthTickTimer=setInterval(t,n)}stopHealthTick(){this.healthTickTimer!==null&&(clearInterval(this.healthTickTimer),this.healthTickTimer=null),this.healthTickPromise=null}scheduleKeepSession(n,e,t){this.clearRefreshTimer(),this.sessionRefreshToken=n;let s=Math.max((e-this.refreshBuffer)*1e3,0);this.refreshTimer=setTimeout(async()=>{if(this.sessionRefreshToken)try{let i=await t(this.sessionRefreshToken);this.onTokenRefreshed?.(i.access_token,i.expires_in),this.scheduleKeepSession(this.sessionRefreshToken,i.expires_in,t)}catch(i){this.clearRefreshTimer(),this.onSessionExpired?.(i instanceof Error?i:new Error(String(i)))}},s)}clearRefreshTimer(){this.refreshTimer!==null&&(clearTimeout(this.refreshTimer),this.refreshTimer=null)}stopKeepSession(){this.clearRefreshTimer(),this.sessionRefreshToken=null}applyRealtimeOptions(n){let e=typeof n=="boolean"?{enabled:n}:n??{};if(this.realtimeEnabled=e.enabled??!1,this.realtimePath=String(e.path??W).trim()||W,this.realtimeAutoReconnect=e.autoReconnect??!0,this.realtimeReconnectDelayMs=Math.max(250,e.reconnectDelayMs??3e3),!this.realtimeEnabled){this.disconnectRealtime("realtime_disabled");return}this.setRealtimeStatus("idle","realtime_enabled")}buildRealtimeUrl(){let n=this.baseUrl||N("VITE_ENTITY_SERVER_URL")||"",e=typeof window<"u"?window.location.origin:"",t=n||e;if(!t)throw new Error("Realtime connection requires baseUrl.");let s=new URL(t,e||void 0),i=s.pathname==="/"?"":s.pathname.replace(/\/+$/,""),o=`/${this.realtimePath.replace(/^\/+/,"")}`;return s.pathname=`${i}${o}`||o,s.search="",s.hash="",s.protocol=s.protocol==="https:"?"wss:":"ws:",s.searchParams.set("access_token",this.token),s.toString()}handleRealtimeMessage(n){if(typeof n!="string")return;let e;try{e=JSON.parse(n)}catch{return}for(let s of this.realtimeMessageListeners)s(e);let t=this.realtimeEventListeners.get(e.event);if(t)for(let s of t)s(e)}scheduleRealtimeReconnect(n){this.clearRealtimeReconnectTimer(),this.realtimeReconnectTimer=setTimeout(()=>{this.realtimeReconnectTimer=null,!(!this.realtimeEnabled||!this.token)&&(this.setRealtimeStatus("connecting",`${n}:reconnect`),this.connectRealtime().catch(()=>{}))},this.realtimeReconnectDelayMs)}clearRealtimeReconnectTimer(){this.realtimeReconnectTimer!==null&&(clearTimeout(this.realtimeReconnectTimer),this.realtimeReconnectTimer=null)}setRealtimeStatus(n,e,t){let s=this.realtimeStatus;if(!(s===n&&typeof e>"u"&&typeof t>"u")){this.realtimeStatus=n;for(let i of this.realtimeStatusListeners)i({status:n,previousStatus:s,...e?{reason:e}:{},...t?{error:t}:{}})}}applyCsrfHealth(){if(!(typeof document>"u")){for(let n of document.cookie.split(";")){let e=n.indexOf("=");if(!(e<0)&&n.substring(0,e).trim()===this.csrfCookieName){this.csrfEnabled=!!n.substring(e+1).trim();return}}this.csrfEnabled=!1}}readRequestBody(n,e="application/json",t=!1){let s=M(this.hmacSecret,this.token||this.anonymousPacketToken);return Me(n,e,t,s)}get reqOpts(){return{baseUrl:this.baseUrl,token:this.token,anonymousPacketToken:this.anonymousPacketToken,apiKey:this.apiKey,hmacSecret:this.hmacSecret,encryptRequests:this.encryptRequests,csrfEnabled:this.csrfEnabled,csrfHeaderName:this.csrfHeaderName,csrfCookieName:this.csrfCookieName,refreshCsrfCookie:this.csrfEnabled?this.csrfRefresher:null,requestAbortControllers:this.requestAbortControllers,onAccessToken:n=>{this.setAccessTokenFromResponse(n)}}}prepareRequest(n){return Promise.resolve()}get http(){let n=this;return{get(e,t=!0,s,i){return n.prepareRequest(t).then(()=>w(n.reqOpts,"GET",e,void 0,t,s,i??!0))},post(e,t,s=!0,i,o){return n.prepareRequest(s).then(()=>w(n.reqOpts,"POST",e,t,s,i,o??!0))},put(e,t,s=!0,i,o){return n.prepareRequest(s).then(()=>w(n.reqOpts,"PUT",e,t,s,i,o??!0))},patch(e,t,s=!0,i,o){return n.prepareRequest(s).then(()=>w(n.reqOpts,"PATCH",e,t,s,i,o??!0))},delete(e,t,s=!0,i,o){return n.prepareRequest(s).then(()=>w(n.reqOpts,"DELETE",e,t,s,i,o??!0))}}}request(n,e,t,s=!0,i,o){return this.prepareRequest(s).then(()=>w(this.reqOpts,n,e,t,s,i,o??!0))}async requestBinary(n,e,t,s=!0){await this.prepareRequest(s);let i={"Content-Type":"application/json"};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,...t!=null?{body:JSON.stringify(t)}:{},credentials:"include"});if(!o.ok){let a=await o.text(),u=new Error(`HTTP ${o.status}: ${a}`);throw u.status=o.status,u}return o.arrayBuffer()}async requestForm(n,e,t,s=!0){let i={};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,body:t,credentials:"include"}),a=await o.json();if(!a.ok){let u=new Error(a.message??`EntityServer error (HTTP ${o.status})`);throw u.status=o.status,u}return a}async requestFormBinary(n,e,t,s=!0){let i={};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,body:t,credentials:"include"});if(!o.ok){let a=await o.text(),u=new Error(`HTTP ${o.status}: ${a}`);throw u.status=o.status,u}return o.arrayBuffer()}};function _e(r){return r.ok===!0&&r.requires_2fa!==!0&&typeof r.data=="object"&&r.data!==null&&"access_token"in r.data}function X(r){return class extends r{authBootstrapPromise=null;authBootstrapToken="";authBootstrapAnonymousCompleted=!1;setAccessTokenFromResponse(e){super.setAccessTokenFromResponse(e),this.authBootstrapToken=e,this.authBootstrapAnonymousCompleted=!1}csrfRefresher=()=>this.checkHealth(this.keepSession).then(()=>{});async checkHealth(e=!1){try{let t=this.token,s={};e&&(s["X-Session-Bootstrap"]="1");let i=await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include",headers:s}),o=await i.json(),a=i.headers.get("X-Access-Token");a&&(this.token=a,e&&a!==t&&this.onTokenRefreshed?.(a,0));let u=this.readCookie("anon_token");return o.packet_encryption===!0&&u&&(this.anonymousPacketToken=u,this.encryptRequests=!0),this.applyCsrfHealth(),this.onHealthChange?.(!0),e&&o.authenticated===!1&&t&&(this.disconnectRealtime("session_expired"),this.onSessionExpired?.(new Error("Session expired"))),o}catch(t){throw this.onHealthChange?.(!1),t}}readCookie(e){if(typeof document>"u")return null;let t=document.cookie.split(";").map(s=>s.trim()).find(s=>s.startsWith(`${e}=`));if(!t)return null;try{return decodeURIComponent(t.slice(e.length+1))}catch{return t.slice(e.length+1)}}async ensurePublicAuthBootstrap(){if(typeof document>"u"||this.apiKey&&this.hmacSecret)return;let e=!!this.anonymousPacketToken||!!this.readCookie("anon_token"),t=!!this.readCookie(this.csrfCookieName);e&&t&&this.csrfEnabled||await this.checkHealth(!1)}async ensureAuthenticatedRequestBootstrap(){if(!(typeof document>"u")&&!(this.apiKey&&this.hmacSecret)){if(this.token){if(this.authBootstrapToken===this.token)return}else if(this.authBootstrapAnonymousCompleted)return;return this.authBootstrapPromise?this.authBootstrapPromise:(this.authBootstrapPromise=this.checkHealth(!0).then(()=>{this.token?this.authBootstrapToken=this.token:this.authBootstrapAnonymousCompleted=!0}).finally(()=>{this.authBootstrapPromise=null}),this.authBootstrapPromise)}}async prepareRequest(e){await super.prepareRequest(e),e&&await this.ensureAuthenticatedRequestBootstrap()}async login(e,t){await this.ensurePublicAuthBootstrap();let s=await w(this.reqOpts,"POST","/v1/auth/login",{email:e,passwd:t},!1,{},{requireOkShape:!1,allowStatuses:[403]});return _e(s)&&(this.token=s.data.access_token,this.applyCsrfHealth(),this.keepSession&&this.healthTickTimer===null&&this.startHealthTick()),s}async tokenRefresh(){let e=await this.request("POST","/v1/auth/token_refresh",void 0,!1);return this.token=e.data.access_token,this.applyCsrfHealth(),e.data}async refreshToken(e){if(!e)return this.tokenRefresh();let t=await this.request("POST","/v1/auth/refresh",{refresh_token:e},!1);return this.token=t.data.access_token,this.applyCsrfHealth(),t.data}async logout(e){this.stopKeepSession(),this.stopHealthTick(),this.disconnectRealtime("logout");let t=await this.request("POST","/v1/auth/logout",e?{refresh_token:e}:void 0,!1);return this.token="",this.applyCsrfHealth(),t}me(){return this.request("GET","/v1/auth/me")}withdraw(e){return this.request("POST","/v1/auth/withdraw",e?{passwd:e}:{})}}}function J(r){return class extends r{async transStart(){let e=await this.request("POST","/v1/transaction/start",void 0,!1);return this.activeTxId=e.transaction_id,this.activeTxId}transRollback(e){let t=e??this.activeTxId;return t?(this.activeTxId=null,this.request("POST",`/v1/transaction/rollback/${t}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}transCommit(e){let t=e??this.activeTxId;return t?(this.activeTxId=null,this.request("POST",`/v1/transaction/commit/${t}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}meta(e){return this.request("POST",`/v1/entity/${e}/meta`,{})}validate(e,t){return this.http.post(`/v1/entity/${e}/validate`,t)}get(e,t,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this.request("GET",`/v1/entity/${e}/${t}${i}`)}find(e,t,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this.request("POST",`/v1/entity/${e}/find${i}`,t??{})}list(e,t={}){let{conditions:s,fields:i,orderDir:o,orderBy:a,...u}=t,m={page:1,limit:20,...u};return a&&(m.orderBy=o==="DESC"?`-${a}`:a),i?.length&&(m.fields=i.join(",")),this.request("POST",`/v1/entity/${e}/list?${c(m)}`,s??{})}count(e,t){return this.request("POST",`/v1/entity/${e}/count`,t??{})}query(e,t){return this.request("POST",`/v1/entity/${e}/query`,t)}submit(e,t,s={}){let i=s.transactionId??this.activeTxId,o=i?{"X-Transaction-ID":i}:void 0,a=s.skipHooks?"?skipHooks=true":"";return this.request("POST",`/v1/entity/${e}/submit${a}`,t,!0,o)}delete(e,t,s={}){let i=new URLSearchParams;s.hard&&i.set("hard","true"),s.skipHooks&&i.set("skipHooks","true");let o=i.size?`?${i}`:"",a=s.transactionId??this.activeTxId,u=a?{"X-Transaction-ID":a}:void 0;return this.request("POST",`/v1/entity/${e}/delete/${t}${o}`,void 0,!0,u)}history(e,t,s={}){return this.request("GET",`/v1/entity/${e}/history/${t}?${c({page:1,limit:50,...s})}`)}rollback(e,t){return this.request("POST",`/v1/entity/${e}/rollback/${t}`)}}}function Y(r){return class extends r{async fileUpload(e,t,s={}){let i=new FormData;return i.append("file",t,t instanceof File?t.name:"upload"),s.refSeq!=null&&i.append("ref_seq",String(s.refSeq)),s.isPublic!=null&&i.append("is_public",s.isPublic?"true":"false"),this.requestForm("POST",`/v1/files/${e}/upload`,i)}fileDownload(e,t){return this.requestBinary("POST",`/v1/files/${e}/download/${t}`,{})}fileDelete(e,t){return this.request("POST",`/v1/files/${e}/delete/${t}`,{})}fileList(e,t={}){return this.request("POST",`/v1/files/${e}/list`,t.refSeq?{ref_seq:t.refSeq}:{})}fileMeta(e,t){return this.request("POST",`/v1/files/${e}/meta/${t}`,{})}fileToken(e){return this.request("POST",`/v1/files/token/${e}`,{})}fileViewUrl(e,t={}){let s=t.download?"?download=true":"";return`${this.baseUrl}/v1/files/${e}${s}`}fileUrl(e){return`${this.baseUrl}/v1/files/${e}`}storageUpload(e,t,s={}){return this.fileUpload(e,t,s)}storageDownload(e,t){return this.fileDownload(e,t)}storageDelete(e,t){return this.fileDelete(e,t)}storageList(e,t={}){return this.fileList(e,t)}storageMeta(e,t){return this.fileMeta(e,t)}storageToken(e){return this.fileToken(e)}storageViewUrl(e,t={}){return this.fileViewUrl(e,t)}storageDownloadUrl(e){return this.fileViewUrl(e,{download:!0})}storageUrl(e){return this.fileUrl(e)}}}function Z(r){return class extends r{push(e,t,s={}){return this.submit(e,t,s)}pushLogList(e={}){return this.list("push_log",e)}registerPushDevice(e,t,s,i={}){let{platform:o,deviceType:a,browser:u,browserVersion:m,pushEnabled:f=!0,transactionId:h}=i;return this.submit("account_device",{id:t,account_seq:e,push_token:s,push_enabled:f,...o?{platform:o}:{},...a?{device_type:a}:{},...u?{browser:u}:{},...m?{browser_version:m}:{}},{transactionId:h})}updatePushDeviceToken(e,t,s={}){let{pushEnabled:i=!0,transactionId:o}=s;return this.submit("account_device",{seq:e,push_token:t,push_enabled:i},{transactionId:o})}disablePushDevice(e,t={}){return this.submit("account_device",{seq:e,push_enabled:!1},{transactionId:t.transactionId})}}}function ee(r){return class extends r{smtpSend(e){return this.request("POST","/v1/smtp/send",e)}smtpStatus(e){return this.request("POST",`/v1/smtp/status/${e}`,{})}smtpTemplatePreview(e){let t=e.split("/").map(encodeURIComponent).join("/");return fetch(`${this.baseUrl}/v1/smtp/template/${t}`,{credentials:"include"}).then(s=>s.text())}}}function te(r){return class extends r{transactionStart(e){return this.request("POST","/v1/transaction/start",e??{})}transactionCommit(e){return this.request("POST",`/v1/transaction/commit/${encodeURIComponent(e)}`,{})}transactionRollback(e){return this.request("POST",`/v1/transaction/rollback/${encodeURIComponent(e)}`,{})}}}function ne(r){return class extends r{addressSido(){return this.http.get("/v1/utils/address/sido",!1)}addressSigungu(e){let t=new URLSearchParams({sido:e.sido}).toString();return this.http.get(`/v1/utils/address/sigungu?${t}`,!1)}addressDong(e){let t=new URLSearchParams({sido:e.sido,sigungu:e.sigungu}).toString();return this.http.get(`/v1/utils/address/dong?${t}`,!1)}addressClean(e){let t=new URLSearchParams({q:e.q}).toString();return this.http.get(`/v1/utils/address/clean?${t}`,!1)}qrcode(e,t={}){return this.requestBinary("POST","/v1/utils/qrcode",{content:e,...t})}qrcodeBase64(e,t={}){return this.request("POST","/v1/utils/qrcode/base64",{content:e,...t})}qrcodeText(e,t={}){return this.request("POST","/v1/utils/qrcode/text",{content:e,...t})}barcode(e,t={}){return this.requestBinary("POST","/v1/utils/barcode",{content:e,...t})}pdf2png(e,t={}){let s=new FormData;s.append("file",new Blob([e],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;t.dpi!=null&&i.set("dpi",String(t.dpi)),t.firstPage!=null&&i.set("first_page",String(t.firstPage)),t.lastPage!=null&&i.set("last_page",String(t.lastPage));let o=i.toString(),a="/v1/utils/pdf2png"+(o?`?${o}`:"");return this.requestFormBinary("POST",a,s)}pdf2pngByFileSeq(e,t={}){return this.requestBinary("POST",`/v1/utils/pdf2png/${e}`,t)}pdf2jpg(e,t={}){let s=new FormData;s.append("file",new Blob([e],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;t.dpi!=null&&i.set("dpi",String(t.dpi)),t.firstPage!=null&&i.set("first_page",String(t.firstPage)),t.lastPage!=null&&i.set("last_page",String(t.lastPage));let o=i.toString(),a="/v1/utils/pdf2jpg"+(o?`?${o}`:"");return this.requestFormBinary("POST",a,s)}pdf2jpgByFileSeq(e,t={}){return this.requestBinary("POST",`/v1/utils/pdf2jpg/${e}`,t)}}}function re(r){return class extends r{adminPath(e){return`/v1/admin${e}`}adminGet(e){return this.http.get(this.adminPath(e))}adminPost(e,t){return this.http.post(this.adminPath(e),t)}adminPut(e,t){return this.http.put(this.adminPath(e),t)}adminPatch(e,t){return this.http.patch(this.adminPath(e),t)}adminDelete(e,t){return this.http.delete(this.adminPath(e),t)}listAdminEntities(){return this.adminGet("/entities")}getAdminErdSchema(){return this.adminGet("/erd/schema")}batchEnsureAdminEntities(e){return this.adminPost("/entities/batch-ensure",e)}createAdminEntityConfig(e,t){return this.adminPost(`/${e}/create`,t)}getAdminEntityConfig(e){return this.adminGet(`/${e}/config`)}updateAdminEntityConfig(e,t){return this.adminPut(`/${e}/config`,t)}validateAdminEntityConfig(e,t){return this.adminPost(t?`/${t}/validate`:"/entity/validate",e)}normalizeAdminEntityConfig(e,t){return this.adminPost(t?`/${t}/normalize`:"/entity/normalize",e)}getAdminEntityStats(e,t){return this.adminPost(`/${e}/stats`,t)}reindexAdminEntity(e){return this.adminPost(`/${e}/reindex`)}syncAdminEntitySchema(e){return this.adminPost(`/${e}/sync-schema`)}resetAdminEntity(e){return this.adminPost(`/${e}/reset`)}truncateAdminEntity(e){return this.adminPost(`/${e}/truncate`)}dropAdminEntity(e){return this.adminPost(`/${e}/drop`)}resetAllAdmin(e){return this.adminPost("/reset-all",e)}listAdminConfigs(){return this.adminGet("/configs")}getAdminConfig(e){return this.adminGet(`/configs/${e}`)}updateAdminConfig(e,t){return this.adminPatch(`/configs/${e}`,t)}listAdminRoles(){return this.adminGet("/roles")}createAdminRole(e){return this.adminPost("/roles",e)}getAdminRole(e){return this.adminGet(`/roles/${e}`)}updateAdminRole(e,t){return this.adminPatch(`/roles/${e}`,t)}deleteAdminRole(e){return this.adminDelete(`/roles/${e}`)}listAdminApiKeys(){return this.adminGet("/api-keys")}createAdminApiKey(e){return this.adminPost("/api-keys",e)}getAdminApiKey(e){return this.adminGet(`/api-keys/${e}`)}updateAdminApiKey(e,t){return this.adminPatch(`/api-keys/${e}`,t)}deleteAdminApiKey(e){return this.adminDelete(`/api-keys/${e}`)}regenerateAdminApiKeySecret(e){return this.adminPost(`/api-keys/${e}/regenerate-secret`)}listAdminAccounts(){return this.adminGet("/accounts")}createAdminAccount(e){return this.adminPost("/accounts",e)}getAdminAccount(e){return this.adminGet(`/accounts/${e}`)}updateAdminAccount(e,t){return this.adminPatch(`/accounts/${e}`,t)}deleteAdminAccount(e){return this.adminDelete(`/accounts/${e}`)}listAdminLicenses(){return this.adminGet("/licenses")}createAdminLicense(e){return this.adminPost("/licenses",e)}getAdminLicense(e){return this.adminGet(`/licenses/${e}`)}updateAdminLicense(e,t){return this.adminPatch(`/licenses/${e}`,t)}deleteAdminLicense(e){return this.adminDelete(`/licenses/${e}`)}runAdminBackup(e){return this.adminPost("/backup/run",e)}getAdminBackupStatus(e){return this.adminPost("/backup/status",e)}listAdminBackups(e){return this.adminPost("/backup/list",e)}restoreAdminBackup(e){return this.adminPost("/backup/restore",e)}deleteAdminBackup(e){return this.adminPost("/backup/delete",e)}disableAdminAccountTwoFactor(e){return this.adminDelete(`/accounts/${e}/2fa`)}}}var v=class extends ne(te(Y(ee(Z(re(J(X(F)))))))){};function se(r){return class extends r{accountRegister(e){return this.http.post("/v1/account/register",e,!1)}accountWithdraw(e){return this.http.post("/v1/account/withdraw",e)}accountChangePassword(e){return this.http.post("/v1/account/change-password",e)}accountReactivate(e){return this.http.post("/v1/account/reactivate",e,!1)}listAccountBiometrics(){return this.http.get("/v1/account/biometric")}registerAccountBiometric(e){return this.http.post("/v1/account/biometric",e)}deleteAccountBiometric(e){return this.http.delete(`/v1/account/biometric/${e}`)}}}function ie(r){return class extends r{listBoardCategories(e={}){let t=c(e);return this.http.get(`/v1/board/categories${t?`?${t}`:""}`,!1)}getBoardCategory(e){return this.http.get(`/v1/board/categories/${e}`,!1)}createBoardCategory(e){return this.http.post("/v1/board/categories",e)}updateBoardCategory(e,t){return this.http.put(`/v1/board/categories/${e}`,t)}deleteBoardCategory(e){return this.http.delete(`/v1/board/categories/${e}`)}listBoardPosts(e,t={}){let s=c(t);return this.http.get(`/v1/board/${e}/list${s?`?${s}`:""}`)}getBoardPost(e){return this.http.get(`/v1/board/posts/${e}`)}createBoardPost(e,t){return this.http.post(`/v1/board/${e}/submit`,t)}updateBoardPost(e,t){return this.http.put(`/v1/board/posts/${e}`,t)}deleteBoardPost(e){return this.http.delete(`/v1/board/posts/${e}`)}listBoardComments(e,t={}){let s=c(t);return this.http.get(`/v1/board/posts/${e}/comments${s?`?${s}`:""}`,!1)}createBoardComment(e,t){return this.http.post(`/v1/board/posts/${e}/comments/submit`,t)}updateBoardComment(e,t){return this.http.put(`/v1/board/comments/${e}`,t)}deleteBoardComment(e){return this.http.delete(`/v1/board/comments/${e}`)}listBoardFiles(e){return this.http.get(`/v1/board/posts/${e}/files`,!1)}async uploadBoardFile(e,t){let s=new FormData;return s.append("file",t,t instanceof File?t.name:"upload"),this.requestForm("POST",`/v1/board/posts/${e}/files`,s)}boardFileUrl(e){return`${this.baseUrl}/v1/board/files/${e}`}deleteBoardFile(e){return this.http.delete(`/v1/board/files/${e}`)}createBoardGuestPost(e,t){return this.http.post(`/v1/board/${e}/guest-submit`,t,!1)}authenticateBoardGuestPost(e,t){return this.http.post(`/v1/board/posts/${e}/guest-auth`,t,!1)}toggleBoardPostLike(e){return this.http.post(`/v1/board/posts/${e}/like`,{})}acceptBoardPost(e){return this.http.post(`/v1/board/posts/${e}/accept`,{})}rateBoardPost(e,t){return this.http.post(`/v1/board/posts/${e}/rating`,t)}rateBoardComment(e,t){return this.http.post(`/v1/board/comments/${e}/rating`,t)}listBoardTags(e={}){let t=c(e);return this.http.get(`/v1/board/tags${t?`?${t}`:""}`,!1)}setBoardPostTags(e,t){return this.http.put(`/v1/board/posts/${e}/tags`,t)}reportBoardPost(e,t){return this.http.post(`/v1/board/posts/${e}/report`,t)}reportBoardComment(e,t){return this.http.post(`/v1/board/comments/${e}/report`,t)}listBoardReports(e={}){let t=c(e);return this.http.get(`/v1/board/admin/reports${t?`?${t}`:""}`)}updateBoardReport(e,t){return this.http.patch(`/v1/board/admin/reports/${e}`,t)}markBoardPostRead(e){return this.http.post(`/v1/board/posts/${e}/read`,{})}listBoardMentions(e={}){let t=c(e);return this.http.get(`/v1/board/mentions${t?`?${t}`:""}`)}markBoardMentionRead(e){return this.http.patch(`/v1/board/mentions/${e}/read`,{})}}}function oe(r){return class extends r{sendEmailVerification(e){return this.http.post("/v1/email-verify/send",e,!1)}confirmEmailVerification(e){return this.http.post("/v1/email-verify/confirm",e,!1)}activateEmailVerification(e){let t=c(e);return this.http.get(`/v1/email-verify/activate${t?`?${t}`:""}`,!1)}getEmailVerificationStatus(){return this.http.get("/v1/email-verify/status")}changeVerifiedEmail(e){return this.http.post("/v1/email-verify/change",e)}}}function ae(r){return class extends r{oauthAuthorizeUrl(e,t={}){let s=c(t);return`${this.baseUrl}/v1/oauth/${e}${s?`?${s}`:""}`}oauthCallback(e,t,s="POST"){if(s==="GET"){let i=c(t??{});return this.http.get(`/v1/oauth/${e}/callback${i?`?${i}`:""}`,!1)}return this.http.post(`/v1/oauth/${e}/callback`,t,!1)}linkOAuthAccount(e){return this.http.post("/v1/account/oauth/link",e)}unlinkOAuthAccount(e){return this.http.delete(`/v1/account/oauth/link/${e}`)}listOAuthProviders(){return this.http.get("/v1/account/oauth/providers")}refreshOAuthProviderToken(e,t){return this.http.post(`/v1/account/oauth/refresh/${e}`,t)}}}function ue(r){return class extends r{requestPasswordReset(e){return this.http.post("/v1/password-reset/request",e,!1)}validatePasswordResetToken(e){return this.http.get(`/v1/password-reset/validate/${encodeURIComponent(e)}`,!1)}verifyPasswordReset(e){return this.http.post("/v1/password-reset/verify",e,!1)}}}function ce(r){return class extends r{setupTwoFactor(e){return this.http.post("/v1/account/2fa/setup",e)}verifyTwoFactorSetup(e){return this.http.post("/v1/account/2fa/setup/verify",e,!1)}disableTwoFactor(){return this.http.delete("/v1/account/2fa")}getTwoFactorStatus(){return this.http.get("/v1/account/2fa/status")}regenerateTwoFactorRecoveryCodes(){return this.http.post("/v1/account/2fa/recovery/regenerate")}verifyTwoFactor(e){return this.http.post("/v1/account/2fa/verify",e,!1)}recoverTwoFactorAccess(e){return this.http.post("/v1/account/2fa/recovery",e,!1)}}}function le(r){return class extends r{alimtalkSend(e){return this.http.post("/v1/alimtalk/send",e)}alimtalkStatus(e){return this.http.get(`/v1/alimtalk/status/${e}`,!1)}listAlimtalkTemplates(){return this.http.get("/v1/alimtalk/templates",!1)}alimtalkWebhook(e,t){return this.http.post(`/v1/alimtalk/webhook/${encodeURIComponent(e)}`,t,!1)}}}function me(r){return class extends r{friendtalkSend(e){return this.http.post("/v1/friendtalk/send",e)}}}function de(r){return class extends r{listHolidays(e={}){let t=c(e);return this.http.get(`/v1/holidays${t?`?${t}`:""}`,!1)}getHolidayByDate(e){return this.http.get(`/v1/holidays/${encodeURIComponent(e)}`,!1)}syncHolidays(e){return this.http.post("/v1/holidays/sync",e)}}}function he(r){return class extends r{identityRequest(e){return this.http.post("/v1/identity/request",e,!1)}identityCallback(e){return this.http.post("/v1/identity/callback",e,!1)}identityResult(e){return this.http.get(`/v1/identity/result/${encodeURIComponent(e)}`,!1)}identityVerifyCI(e){return this.http.post("/v1/identity/verify-ci",e)}}}function pe(r){return class extends r{llmChat(e){return this.http.post("/v1/llm/chat",e)}llmChatStream(e){return this.http.post("/v1/llm/chat/stream",e)}createLlmConversation(e){return this.http.post("/v1/llm/conversations",e)}sendLlmMessage(e,t){return this.http.post(`/v1/llm/conversations/${e}/messages`,t)}listLlmConversations(e={}){let t=c(e);return this.http.get(`/v1/llm/conversations${t?`?${t}`:""}`)}getLlmConversation(e){return this.http.get(`/v1/llm/conversations/${e}`)}updateLlmConversation(e,t){return this.http.patch(`/v1/llm/conversations/${e}`,t)}deleteLlmConversation(e){return this.http.delete(`/v1/llm/conversations/${e}`)}ragUploadDocument(e){return this.requestForm("POST","/v1/llm/rag/documents",e)}ragListDocuments(e={}){let t=c(e);return this.http.get(`/v1/llm/rag/documents${t?`?${t}`:""}`)}ragDeleteDocument(e){return this.http.delete(`/v1/llm/rag/documents/${encodeURIComponent(e)}`)}ragSearch(e){return this.http.post("/v1/llm/rag/search",e)}ragChat(e){return this.http.post("/v1/llm/rag/chat",e)}ragChatStream(e){return this.http.post("/v1/llm/rag/chat/stream",e)}ragRebuildIndex(e){return this.http.post("/v1/llm/rag/rebuild-index",e)}listLlmProviders(){return this.http.get("/v1/llm/providers")}getLlmUsage(e={}){let t=c(e);return this.http.get(`/v1/llm/usage${t?`?${t}`:""}`)}getLlmUsageSummary(e={}){let t=c(e);return this.http.get(`/v1/llm/usage/summary${t?`?${t}`:""}`)}getLlmCacheStats(){return this.http.get("/v1/llm/cache/stats")}clearLlmCache(){return this.http.delete("/v1/llm/cache")}listLlmTemplates(){return this.http.get("/v1/llm/templates")}llmTemplateChat(e,t){return this.http.post(`/v1/llm/${encodeURIComponent(e)}/chat`,t)}llmTemplateChatStream(e,t){return this.http.post(`/v1/llm/${encodeURIComponent(e)}/chat/stream`,t)}listLlmChatbots(e={}){let t=c(e);return this.http.get(`/v1/llm/chatbots${t?`?${t}`:""}`)}createLlmChatbot(e){return this.http.post("/v1/llm/chatbots",e)}getLlmChatbot(e){return this.http.get(`/v1/llm/chatbots/${e}`)}updateLlmChatbot(e,t){return this.http.patch(`/v1/llm/chatbots/${e}`,t)}deleteLlmChatbot(e){return this.http.delete(`/v1/llm/chatbots/${e}`)}llmChatbotChat(e,t){return this.http.post(`/v1/llm/chatbots/${e}/chat`,t)}llmChatbotChatStream(e,t){return this.http.post(`/v1/llm/chatbots/${e}/chat/stream`,t)}listLlmChatbotSessions(e,t={}){let s=c(t);return this.http.get(`/v1/llm/chatbots/${e}/sessions${s?`?${s}`:""}`)}deleteLlmChatbotSession(e,t){return this.http.delete(`/v1/llm/chatbots/${e}/sessions/${t}`)}listLlmProfiles(e={}){let t=c(e);return this.http.get(`/v1/llm/profiles${t?`?${t}`:""}`)}upsertLlmProfile(e){return this.http.post("/v1/llm/profiles",e)}deleteLlmProfile(e){return this.http.delete(`/v1/llm/profiles/${e}`)}}}function fe(r){return class extends r{ocrRecognize(e){return this.requestForm("POST","/v1/ocr/recognize",e)}ocrRecognizeAsync(e){return this.requestForm("POST","/v1/ocr/recognize/async",e)}ocrRecognizeByDocType(e,t){return this.requestForm("POST",`/v1/ocr/${encodeURIComponent(e)}`,t)}listOcrResults(e={}){let t=c(e);return this.http.get(`/v1/ocr/results${t?`?${t}`:""}`)}getOcrResult(e){return this.http.get(`/v1/ocr/results/${encodeURIComponent(e)}`)}getOcrResultText(e){return this.http.get(`/v1/ocr/results/${encodeURIComponent(e)}/text`)}deleteOcrResult(e){return this.http.delete(`/v1/ocr/results/${encodeURIComponent(e)}`)}getOcrQuota(){return this.http.get("/v1/ocr/quota")}}}function ge(r){return class extends r{pgCreateOrder(e){return this.http.post("/v1/pg/orders",e)}pgGetOrder(e){return this.http.get(`/v1/pg/orders/${encodeURIComponent(e)}`)}pgConfirmPayment(e){return this.http.post("/v1/pg/confirm",e)}pgCancelPayment(e,t){return this.http.post(`/v1/pg/orders/${encodeURIComponent(e)}/cancel`,t)}pgSyncPaymentStatus(e,t){return this.http.post(`/v1/pg/orders/${encodeURIComponent(e)}/sync`,t)}pgWebhook(e){return this.http.post("/v1/pg/webhook",e,!1)}pgGetClientConfig(){return this.http.get("/v1/pg/config",!1)}}}function Te(r){return class extends r{appPushSend(e){return this.http.post("/v1/push/send",e)}appPushBroadcast(e){return this.http.post("/v1/push/broadcast",e)}appPushStatus(e){return this.http.get(`/v1/push/status/${e}`)}appPushRegisterDevice(e){return this.http.post("/v1/push/device",e)}appPushUnregisterDevice(e){return this.http.delete(`/v1/push/device/${e}`)}}}function ke(r){return class extends r{smsSend(e){return this.http.post("/v1/sms/send",e)}smsStatus(e){return this.http.get(`/v1/sms/status/${e}`,!1)}smsVerificationSend(e){return this.http.post("/v1/sms/verification/send",e,!1)}smsVerificationVerify(e){return this.http.post("/v1/sms/verification/verify",e,!1)}}}function ye(r){return class extends r{taxinvoiceRegistIssue(e){return this.http.post("/v1/taxinvoice",e)}taxinvoiceRegister(e){return this.http.post("/v1/taxinvoice/register",e)}taxinvoiceIssue(e){return this.http.post(`/v1/taxinvoice/${e}/issue`,{})}taxinvoiceCancelIssue(e,t){return this.http.post(`/v1/taxinvoice/${e}/cancel`,t)}taxinvoiceGetState(e){return this.http.get(`/v1/taxinvoice/${e}/state`)}taxinvoiceGetDetail(e){return this.http.get(`/v1/taxinvoice/${e}`)}}}var E=class extends le(me(ke(Te(ge(ye(fe(pe(he(de(ae(ce(ue(oe(ie(se(v)))))))))))))))){};var Ie=new v,He=new E;function br(r={}){return I(r,{singletonInstance:Ie,ClientClass:v})}function Sr(r={}){return I(r,{singletonInstance:He,ClientClass:E})}export{Sr as useEntityAppServer,I as useEntityClient,br as useEntityServer};
1
+ import{useCallback as O,useEffect as Se,useMemo as Ke,useRef as Ce,useState as xe}from"react";function _(r,n){let{singleton:e=!0,tokenResolver:t,baseUrl:s,token:i,resumeSession:o}=r,[a,u]=xe(!1),[m,f]=xe(null),h=Ce(!0);Se(()=>(h.current=!0,()=>{h.current=!1}),[]);let k=Ke(()=>{let p=e?n.singletonInstance:new n.ClientClass({baseUrl:s,token:i});e&&p.configure({baseUrl:s,token:i});let d=t?.();return typeof d=="string"&&p.setToken(d),p},[e,t,s,i,n.ClientClass,n.singletonInstance]),R=Ce(o);Se(()=>{if(R.current){if(k.checkHealth){k.checkHealth(!0).catch(()=>{});return}k.refreshToken(R.current).catch(()=>{})}},[k]);let T=O(async p=>{h.current&&(u(!0),f(null));try{return await p()}catch(d){let y=d instanceof Error?d:new Error(String(d));throw h.current&&f(y),y}finally{h.current&&u(!1)}},[]),S=O((p,d,y)=>T(()=>k.submit(p,d,y)),[k,T]),F=O((p,d,y)=>T(()=>k.delete(p,d,y)),[k,T]),D=O((p,d)=>T(()=>k.query(p,d)),[k,T]),j=O(()=>{u(!1),f(null)},[]);return{client:k,isPending:a,error:m,reset:j,submit:S,del:F,query:D}}function N(r){let n=import.meta;if(n?.env?.[r]!=null)return n.env[r];let e=globalThis.process;if(e?.env?.[r]!=null)return e.env[r]}function l(r){return Object.entries(r).filter(([,n])=>n!=null).map(([n,e])=>`${encodeURIComponent(n==="orderBy"?"order_by":n)}=${encodeURIComponent(String(e))}`).join("&")}import{xchacha20poly1305 as Ee}from"@noble/ciphers/chacha";import{sha256 as Ne}from"@noble/hashes/sha2";import{hkdf as Ve}from"@noble/hashes/hkdf";var V=32,W=2,z=14,x=24,We=16,ze="entity-server:hkdf:v1",Qe="entity-server:packet-encryption";function U(r){return r instanceof Uint8Array?r:new Uint8Array(r)}function Ae(r,n=Qe){return Ve(Ne,new TextEncoder().encode(r),new TextEncoder().encode(ze),new TextEncoder().encode(n),V)}function Be(r,n=W,e=z){let t=U(r);return t.length<V?n:n+t[V-1]%e}function qe(r,n,e=W,t=z){let s=U(r),i=U(n),o=Be(i,e,t),a=crypto.getRandomValues(new Uint8Array(o)),u=crypto.getRandomValues(new Uint8Array(x)),f=Ee(i,u).encrypt(s),h=new Uint8Array(o+x+f.length);return h.set(a,0),h.set(u,o),h.set(f,o+x),h}function $e(r,n,e=W,t=z){let s=U(r),i=U(n),o=Be(i,e,t);if(s.length<o+x+We)throw new Error("Encrypted packet too short");let a=s.slice(o,o+x),u=s.slice(o+x);return Ee(i,a).decrypt(u)}function M(r,n){return Ae(r||n)}function Oe(r,n){return qe(r,n)}function I(r,n){let e=$e(r,n);return JSON.parse(new TextDecoder().decode(e))}function Ue(r,n,e,t){let s=n.toLowerCase().includes("application/octet-stream");if(e&&!s)throw new Error("Encrypted request required: Content-Type must be application/octet-stream");if(s){if(r==null)throw new Error("Encrypted request body is empty");if(r instanceof ArrayBuffer)return I(r,t);if(r instanceof Uint8Array){let i=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);return I(i,t)}throw new Error("Encrypted request body must be ArrayBuffer or Uint8Array")}return r==null||r===""?{}:typeof r=="string"?JSON.parse(r):r}import{sha256 as Xe}from"@noble/hashes/sha2";import{hmac as Je}from"@noble/hashes/hmac";function Me(r,n,e,t,s){let i=String(Math.floor(Date.now()/1e3)),o=crypto.randomUUID(),a=new TextEncoder().encode(`${r}|${n}|${i}|${o}|`),u=new Uint8Array(a.length+e.length);u.set(a,0),u.set(e,a.length);let f=[...Je(Xe,new TextEncoder().encode(s),u)].map(h=>h.toString(16).padStart(2,"0")).join("");return{"X-API-Key":t,"X-Timestamp":i,"X-Nonce":o,"X-Signature":f}}function Ye(r){switch(r.toUpperCase()){case"POST":case"PUT":case"PATCH":case"DELETE":return!0;default:return!1}}function Ze(r,n,e){if(e.autoAbortKey===!1)return null;if(typeof e.autoAbortKey=="string"){let t=e.autoAbortKey.trim();return t||null}return Ye(r)?`${r.toUpperCase()} ${n}`:null}function et(r){let n=r.filter(s=>!!s);if(n.length===0)return;if(n.length===1)return n[0];if(typeof AbortSignal.any=="function")return AbortSignal.any(n);let e=new AbortController,t=()=>e.abort();for(let s of n){if(s.aborted){e.abort();break}s.addEventListener("abort",t,{once:!0})}return e.signal}function tt(r,n,e,t){let s=Ze(n,e,t);if(!s)return{signal:t.signal,abortKey:null,controller:null};r.requestAbortControllers.get(s)?.abort();let i=new AbortController;return r.requestAbortControllers.set(s,i),{signal:et([t.signal,i.signal]),abortKey:s,controller:i}}function nt(r,n,e){!n||!e||r.requestAbortControllers.get(n)===e&&r.requestAbortControllers.delete(n)}function rt(r){return r.hmacSecret||r.token||r.anonymousPacketToken}function st(r,n,e){return r.hmacSecret?r.hmacSecret:n&&r.token||e}function it(r){return r?r.length<=8?`${r.slice(0,2)}...${r.slice(-2)}`:`${r.slice(0,4)}...${r.slice(-4)}`:""}function ot(r){typeof console>"u"||typeof console.error!="function"||console.error("[entity-client] packet decrypt failed",{method:r.method,path:r.path,withAuth:r.withAuth,status:r.status,contentType:r.contentType,responsePacketSource:it(r.responsePacketSource),tokenPresent:r.tokenPresent,anonymousPacketTokenPresent:r.anonymousPacketTokenPresent,hmacEnabled:r.hmacEnabled,error:r.error instanceof Error?{name:r.error.name,message:r.error.message,stack:r.error.stack}:r.error})}function at(r){return r!=="GET"&&r!=="HEAD"&&r!=="OPTIONS"}function H(r){if(typeof document>"u")return"";for(let n of document.cookie.split(";")){let e=n.indexOf("=");if(!(e<0)&&n.substring(0,e).trim()===r)return decodeURIComponent(n.substring(e+1).trim())}return""}function ut(r,n){return r===403&&/csrf/i.test(n)?!0:/csrf/i.test(n)&&/expired|token validation failed/i.test(n)}function ct(r,n){return r===401&&/nonce already used/i.test(n)}async function Le(r){if((r.headers.get("Content-Type")??"").includes("application/json")){let t=await r.json().catch(()=>null);if(t?.error)return{message:t.error,code:t.code,body:t};if(t?.message)return{message:t.message,code:t.code,body:t}}return{message:await r.text().catch(()=>"")||`HTTP ${r.status}`}}function Q(r,n){let e=new Error(n.message);return e.status=r,n.code&&(e.code=n.code),n.body&&(e.details=n.body),e}async function w(r,n,e,t,s=!0,i={},o=!0){let a=typeof o=="boolean"?{requireOkShape:o}:o,u=a.requireOkShape??!0,m=new Set(a.allowStatuses??[]),f=tt(r,n,e,a),h=f.signal,{baseUrl:k,token:R,apiKey:T,hmacSecret:S,encryptRequests:F,csrfEnabled:D,csrfHeaderName:j,csrfCookieName:p,refreshCsrfCookie:d,onAccessToken:y}=r,A=r.anonymousPacketToken||H("anon_token"),B=s&&!!(T&&S),Ge=rt(r),be=st(r,s,A),L=D&&at(n)&&!B,C=L?H(p):"",we="application/json",Fe=!B&&!!A,P=null;if(t!=null)if(F&&!!Ge&&s&&n!=="GET"&&n!=="HEAD"){let g=M(S,R||A);P=Oe(new TextEncoder().encode(JSON.stringify(t)),g),we="application/octet-stream"}else P=JSON.stringify(t);let De=c=>{let g={...i},q=Object.keys(g).some(b=>b.toLowerCase()==="content-type");if(P!=null&&!q&&(g["Content-Type"]=we),!B&&s&&R&&(g.Authorization=`Bearer ${R}`),Fe&&(g["X-Packet-Token"]=A),L&&c&&(g[j]=c),B){let b=P instanceof Uint8Array?P:typeof P=="string"?new TextEncoder().encode(P):new Uint8Array(0);Object.assign(g,Me(n,e,b,T,S))}return g};L&&!C&&d&&(await d(),C=H(p));let K=c=>fetch(k+e,{method:n,headers:De(c),...P!=null?{body:P}:{},credentials:"include",signal:h});try{let c=await K(C);if(!c.ok){let $=await Le(c.clone());if(B&&ct(c.status,$.message))c=await K(C);else if(L&&d&&ut(c.status,$.message))await d(),C=H(p),c=await K(C);else if(!m.has(c.status))throw Q(c.status,$)}if(!c.ok&&!m.has(c.status))throw Q(c.status,await Le(c));let g=c.headers.get("X-Access-Token")?.trim()??"",q=c.headers.get("Content-Type")??"";if(q.includes("application/octet-stream")){let $=M(S,be),je=await c.arrayBuffer(),ve;try{ve=I(je,$)}catch(Re){throw ot({method:n,path:e,withAuth:s,status:c.status,contentType:q,responsePacketSource:be,tokenPresent:!!R,anonymousPacketTokenPresent:!!A,hmacEnabled:!!S,error:Re}),Re}return g&&y?.(g),ve}if(g&&y?.(g),!q.includes("application/json"))return await c.text();let b=await c.json();if(u&&!b.ok&&!m.has(c.status))throw Q(c.status,{message:b.message??`EntityServer error (HTTP ${c.status})`,code:b.code,body:b});return b}finally{nt(r,f.abortKey,f.controller)}}var X="/v1/realtime",G=class{baseUrl;token;anonymousPacketToken;apiKey;hmacSecret;encryptRequests;csrfEnabled;csrfHeaderName;csrfCookieName;csrfRefresher=null;requestAbortControllers=new Map;activeTxId=null;initialHealthFired=!1;keepSession;refreshBuffer;onTokenRefreshed;onSessionExpired;onHealthChange;sessionRefreshToken=null;refreshTimer=null;healthTickTimer=null;healthTickPromise=null;realtimeEnabled;realtimePath;realtimeAutoReconnect;realtimeReconnectDelayMs;realtimeStatus;realtimeSocket=null;realtimeConnectPromise=null;realtimeReconnectTimer=null;realtimeShouldReconnect=!1;realtimeMessageListeners=new Set;realtimeStatusListeners=new Set;realtimeEventListeners=new Map;constructor(n={}){let e=N("VITE_ENTITY_SERVER_URL");this.baseUrl=(n.baseUrl??e??"").replace(/\/$/,""),this.token=n.token??"",this.anonymousPacketToken=n.anonymousPacketToken??"",this.apiKey=n.apiKey??"",this.hmacSecret=n.hmacSecret??"",this.encryptRequests=n.encryptRequests??!1,this.csrfEnabled=n.csrfEnabled??!1,this.csrfHeaderName=n.csrfHeaderName??"x-csrf-token",this.csrfCookieName=n.csrfCookieName??"_csrf",this.keepSession=n.keepSession??!1,this.refreshBuffer=n.refreshBuffer??60,this.onTokenRefreshed=n.onTokenRefreshed,this.onSessionExpired=n.onSessionExpired,this.onHealthChange=n.onHealthChange,this.realtimeEnabled=!1,this.realtimePath=X,this.realtimeAutoReconnect=!0,this.realtimeReconnectDelayMs=3e3,this.realtimeStatus="idle",this.applyRealtimeOptions(n.realtime),typeof n.healthTickInterval=="number"&&n.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(n.healthTickInterval,!1)),this.fireInitialHealth()}configure(n){typeof n.baseUrl=="string"&&(this.baseUrl=n.baseUrl.replace(/\/$/,"")),typeof n.token=="string"&&(this.token=n.token),typeof n.anonymousPacketToken=="string"&&(this.anonymousPacketToken=n.anonymousPacketToken),typeof n.encryptRequests=="boolean"&&(this.encryptRequests=n.encryptRequests),typeof n.csrfEnabled=="boolean"&&(this.csrfEnabled=n.csrfEnabled),typeof n.csrfHeaderName=="string"&&(this.csrfHeaderName=n.csrfHeaderName),typeof n.csrfCookieName=="string"&&(this.csrfCookieName=n.csrfCookieName),typeof n.apiKey=="string"&&(this.apiKey=n.apiKey),typeof n.hmacSecret=="string"&&(this.hmacSecret=n.hmacSecret),typeof n.keepSession=="boolean"&&(this.keepSession=n.keepSession),typeof n.refreshBuffer=="number"&&(this.refreshBuffer=n.refreshBuffer),n.onTokenRefreshed&&(this.onTokenRefreshed=n.onTokenRefreshed),n.onSessionExpired&&(this.onSessionExpired=n.onSessionExpired),n.onHealthChange&&(this.onHealthChange=n.onHealthChange),typeof n.realtime<"u"&&this.applyRealtimeOptions(n.realtime),typeof n.healthTickInterval=="number"&&n.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(n.healthTickInterval,!1)),this.fireInitialHealth()}fireInitialHealth(){if(this.initialHealthFired||typeof document>"u"||!this.baseUrl)return;this.initialHealthFired=!0;let n=this;typeof n.checkHealth=="function"&&Promise.resolve().then(()=>n.checkHealth(!1).catch(()=>{}))}setToken(n){this.token=n,this.syncRealtimeWithToken()}setAccessTokenFromResponse(n){this.token=n,this.syncRealtimeWithToken()}syncRealtimeWithToken(){if(!this.token){this.disconnectRealtime("token_cleared");return}!this.realtimeEnabled||typeof WebSocket>"u"||this.connectRealtime().catch(()=>{})}setAnonymousPacketToken(n){this.anonymousPacketToken=n}setApiKey(n){this.apiKey=n}setHmacSecret(n){this.hmacSecret=n}setEncryptRequests(n){this.encryptRequests=n}setCsrfEnabled(n){this.csrfEnabled=n}addRealtimeListener(n){this.realtimeMessageListeners.add(n)}removeRealtimeListener(n){this.realtimeMessageListeners.delete(n)}addRealtimeStatusListener(n){this.realtimeStatusListeners.add(n)}removeRealtimeStatusListener(n){this.realtimeStatusListeners.delete(n)}addRealtimeEventListener(n,e){let t=String(n).trim();t&&(this.realtimeEventListeners.has(t)||this.realtimeEventListeners.set(t,new Set),this.realtimeEventListeners.get(t).add(e))}removeRealtimeEventListener(n,e){let t=String(n).trim();if(!t)return;let s=this.realtimeEventListeners.get(t);s&&(s.delete(e),s.size===0&&this.realtimeEventListeners.delete(t))}async connectRealtime(){if(!this.realtimeEnabled){this.setRealtimeStatus("disabled","realtime_disabled");return}if(!this.token)throw new Error("Cannot open realtime connection without access token.");if(typeof WebSocket>"u")throw new Error("WebSocket is not available in this environment.");if(this.realtimeSocket&&this.realtimeSocket.readyState===WebSocket.OPEN)return;if(this.realtimeSocket&&this.realtimeSocket.readyState===WebSocket.CONNECTING&&this.realtimeConnectPromise)return this.realtimeConnectPromise;this.clearRealtimeReconnectTimer(),this.realtimeShouldReconnect=this.realtimeAutoReconnect,this.setRealtimeStatus("connecting","connect_requested");let n=new WebSocket(this.buildRealtimeUrl());return this.realtimeSocket=n,this.realtimeConnectPromise=new Promise((e,t)=>{let s=!1,i=()=>{s||(s=!0,this.realtimeConnectPromise=null,e())},o=a=>{s||(s=!0,this.realtimeConnectPromise=null,t(a))};n.addEventListener("open",()=>{this.setRealtimeStatus("open","socket_open"),i()}),n.addEventListener("message",a=>{this.handleRealtimeMessage(a.data)}),n.addEventListener("error",()=>{this.setRealtimeStatus("closed","socket_error",new Error("Realtime socket error."))}),n.addEventListener("close",a=>{this.realtimeSocket===n&&(this.realtimeSocket=null);let u=a.reason||"socket_closed",m=new Error(`Realtime socket closed (${a.code}${a.reason?`: ${a.reason}`:""}).`);this.setRealtimeStatus("closed",u,m),s||o(m),this.realtimeShouldReconnect&&this.realtimeEnabled&&this.realtimeAutoReconnect&&this.token&&this.scheduleRealtimeReconnect(u)})}),this.realtimeConnectPromise}disconnectRealtime(n="client_disconnect"){if(this.realtimeShouldReconnect=!1,this.clearRealtimeReconnectTimer(),this.realtimeSocket){let e=this.realtimeSocket;this.realtimeSocket=null;try{(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close(1e3,n)}catch{}}this.realtimeConnectPromise=null,this.setRealtimeStatus(this.realtimeEnabled?"idle":"disabled",n)}sendRealtime(n){return!this.realtimeSocket||this.realtimeSocket.readyState!==WebSocket.OPEN?!1:(this.realtimeSocket.send(JSON.stringify(n)),!0)}subscribeRealtime(n){return this.sendRealtime({type:"subscribe",channel:"session",event:"session.subscribe",data:{subscriptions:n}})}unsubscribeRealtime(n){return this.sendRealtime({type:"unsubscribe",channel:"session",event:"session.unsubscribe",data:{subscriptions:n}})}startHealthTick(n=300*1e3,e=!0){this.stopHealthTick();let t=()=>{this.healthTickPromise||(this.healthTickPromise=(this.csrfRefresher?this.csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this.healthTickPromise=null}))};e&&t(),this.healthTickTimer=setInterval(t,n)}stopHealthTick(){this.healthTickTimer!==null&&(clearInterval(this.healthTickTimer),this.healthTickTimer=null),this.healthTickPromise=null}scheduleKeepSession(n,e,t){this.clearRefreshTimer(),this.sessionRefreshToken=n;let s=Math.max((e-this.refreshBuffer)*1e3,0);this.refreshTimer=setTimeout(async()=>{if(this.sessionRefreshToken)try{let i=await t(this.sessionRefreshToken);this.onTokenRefreshed?.(i.access_token,i.expires_in),this.scheduleKeepSession(this.sessionRefreshToken,i.expires_in,t)}catch(i){this.clearRefreshTimer(),this.onSessionExpired?.(i instanceof Error?i:new Error(String(i)))}},s)}clearRefreshTimer(){this.refreshTimer!==null&&(clearTimeout(this.refreshTimer),this.refreshTimer=null)}stopKeepSession(){this.clearRefreshTimer(),this.sessionRefreshToken=null}applyRealtimeOptions(n){let e=typeof n=="boolean"?{enabled:n}:n??{};if(this.realtimeEnabled=e.enabled??!1,this.realtimePath=String(e.path??X).trim()||X,this.realtimeAutoReconnect=e.autoReconnect??!0,this.realtimeReconnectDelayMs=Math.max(250,e.reconnectDelayMs??3e3),!this.realtimeEnabled){this.disconnectRealtime("realtime_disabled");return}this.setRealtimeStatus("idle","realtime_enabled")}buildRealtimeUrl(){let n=this.baseUrl||N("VITE_ENTITY_SERVER_URL")||"",e=typeof window<"u"?window.location.origin:"",t=n||e;if(!t)throw new Error("Realtime connection requires baseUrl.");let s=new URL(t,e||void 0),i=s.pathname==="/"?"":s.pathname.replace(/\/+$/,""),o=`/${this.realtimePath.replace(/^\/+/,"")}`;return s.pathname=`${i}${o}`||o,s.search="",s.hash="",s.protocol=s.protocol==="https:"?"wss:":"ws:",s.searchParams.set("access_token",this.token),s.toString()}handleRealtimeMessage(n){if(typeof n!="string")return;let e;try{e=JSON.parse(n)}catch{return}for(let s of this.realtimeMessageListeners)s(e);let t=this.realtimeEventListeners.get(e.event);if(t)for(let s of t)s(e)}scheduleRealtimeReconnect(n){this.clearRealtimeReconnectTimer(),this.realtimeReconnectTimer=setTimeout(()=>{this.realtimeReconnectTimer=null,!(!this.realtimeEnabled||!this.token)&&(this.setRealtimeStatus("connecting",`${n}:reconnect`),this.connectRealtime().catch(()=>{}))},this.realtimeReconnectDelayMs)}clearRealtimeReconnectTimer(){this.realtimeReconnectTimer!==null&&(clearTimeout(this.realtimeReconnectTimer),this.realtimeReconnectTimer=null)}setRealtimeStatus(n,e,t){let s=this.realtimeStatus;if(!(s===n&&typeof e>"u"&&typeof t>"u")){this.realtimeStatus=n;for(let i of this.realtimeStatusListeners)i({status:n,previousStatus:s,...e?{reason:e}:{},...t?{error:t}:{}})}}applyCsrfHealth(){if(!(typeof document>"u")){for(let n of document.cookie.split(";")){let e=n.indexOf("=");if(!(e<0)&&n.substring(0,e).trim()===this.csrfCookieName){this.csrfEnabled=!!n.substring(e+1).trim();return}}this.csrfEnabled=!1}}readRequestBody(n,e="application/json",t=!1){let s=M(this.hmacSecret,this.token||this.anonymousPacketToken);return Ue(n,e,t,s)}get reqOpts(){return{baseUrl:this.baseUrl,token:this.token,anonymousPacketToken:this.anonymousPacketToken,apiKey:this.apiKey,hmacSecret:this.hmacSecret,encryptRequests:this.encryptRequests,csrfEnabled:this.csrfEnabled,csrfHeaderName:this.csrfHeaderName,csrfCookieName:this.csrfCookieName,refreshCsrfCookie:this.csrfEnabled?this.csrfRefresher:null,requestAbortControllers:this.requestAbortControllers,onAccessToken:n=>{this.setAccessTokenFromResponse(n)}}}prepareRequest(n){return Promise.resolve()}get http(){let n=this;return{get(e,t=!0,s,i){return n.prepareRequest(t).then(()=>w(n.reqOpts,"GET",e,void 0,t,s,i??!0))},post(e,t,s=!0,i,o){return n.prepareRequest(s).then(()=>w(n.reqOpts,"POST",e,t,s,i,o??!0))},put(e,t,s=!0,i,o){return n.prepareRequest(s).then(()=>w(n.reqOpts,"PUT",e,t,s,i,o??!0))},patch(e,t,s=!0,i,o){return n.prepareRequest(s).then(()=>w(n.reqOpts,"PATCH",e,t,s,i,o??!0))},delete(e,t,s=!0,i,o){return n.prepareRequest(s).then(()=>w(n.reqOpts,"DELETE",e,t,s,i,o??!0))}}}request(n,e,t,s=!0,i,o){return this.prepareRequest(s).then(()=>w(this.reqOpts,n,e,t,s,i,o??!0))}async requestBinary(n,e,t,s=!0){await this.prepareRequest(s);let i={"Content-Type":"application/json"};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,...t!=null?{body:JSON.stringify(t)}:{},credentials:"include"});if(!o.ok){let a=await o.text(),u=new Error(`HTTP ${o.status}: ${a}`);throw u.status=o.status,u}return o.arrayBuffer()}async requestForm(n,e,t,s=!0){let i={};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,body:t,credentials:"include"}),a=await o.json();if(!a.ok){let u=new Error(a.message??`EntityServer error (HTTP ${o.status})`);throw u.status=o.status,u}return a}async requestFormBinary(n,e,t,s=!0){let i={};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,body:t,credentials:"include"});if(!o.ok){let a=await o.text(),u=new Error(`HTTP ${o.status}: ${a}`);throw u.status=o.status,u}return o.arrayBuffer()}};function _e(r){return r.ok===!0&&r.requires_2fa!==!0&&typeof r.data=="object"&&r.data!==null&&"access_token"in r.data}function J(r){return class extends r{authBootstrapPromise=null;authBootstrapToken="";authBootstrapAnonymousCompleted=!1;setAccessTokenFromResponse(e){super.setAccessTokenFromResponse(e),this.authBootstrapToken=e,this.authBootstrapAnonymousCompleted=!1}csrfRefresher=()=>this.checkHealth(this.keepSession).then(()=>{});async checkHealth(e=!1){try{let t=this.token,s={};e&&(s["X-Session-Bootstrap"]="1");let i=await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include",headers:s}),o=await i.json(),a=i.headers.get("X-Access-Token");a&&(this.token=a,e&&a!==t&&this.onTokenRefreshed?.(a,0));let u=i.headers.get("X-Packet-Encryption")==="1"||o.packet_encryption===!0,m=this.readCookie("anon_token");return u&&m&&(this.anonymousPacketToken=m,this.encryptRequests=!0),this.applyCsrfHealth(),this.onHealthChange?.(!0),e&&o.authenticated===!1&&t&&(this.disconnectRealtime("session_expired"),this.onSessionExpired?.(new Error("Session expired"))),o}catch(t){throw this.onHealthChange?.(!1),t}}readCookie(e){if(typeof document>"u")return null;let t=document.cookie.split(";").map(s=>s.trim()).find(s=>s.startsWith(`${e}=`));if(!t)return null;try{return decodeURIComponent(t.slice(e.length+1))}catch{return t.slice(e.length+1)}}async ensurePublicAuthBootstrap(){if(typeof document>"u"||this.apiKey&&this.hmacSecret)return;let e=!!this.anonymousPacketToken||!!this.readCookie("anon_token"),t=!!this.readCookie(this.csrfCookieName);e&&t&&this.csrfEnabled||await this.checkHealth(!1)}async ensureAuthenticatedRequestBootstrap(){if(!(typeof document>"u")&&!(this.apiKey&&this.hmacSecret)){if(this.token){if(this.authBootstrapToken===this.token)return}else if(this.authBootstrapAnonymousCompleted)return;return this.authBootstrapPromise?this.authBootstrapPromise:(this.authBootstrapPromise=this.checkHealth(!0).then(()=>{this.token?this.authBootstrapToken=this.token:this.authBootstrapAnonymousCompleted=!0}).finally(()=>{this.authBootstrapPromise=null}),this.authBootstrapPromise)}}async prepareRequest(e){await super.prepareRequest(e),e&&await this.ensureAuthenticatedRequestBootstrap()}async login(e,t){await this.ensurePublicAuthBootstrap();let s=await w(this.reqOpts,"POST","/v1/auth/login",{email:e,passwd:t},!1,{},{requireOkShape:!1,allowStatuses:[403]});return _e(s)&&(this.token=s.data.access_token,this.applyCsrfHealth(),this.keepSession&&this.healthTickTimer===null&&this.startHealthTick()),s}async tokenRefresh(){let e=await this.request("POST","/v1/auth/token_refresh",void 0,!1);return this.token=e.data.access_token,this.applyCsrfHealth(),e.data}async refreshToken(e){if(!e)return this.tokenRefresh();let t=await this.request("POST","/v1/auth/refresh",{refresh_token:e},!1);return this.token=t.data.access_token,this.applyCsrfHealth(),t.data}async logout(e){this.stopKeepSession(),this.stopHealthTick(),this.disconnectRealtime("logout");let t=await this.request("POST","/v1/auth/logout",e?{refresh_token:e}:void 0,!1);return this.token="",this.applyCsrfHealth(),t}me(){return this.request("GET","/v1/auth/me")}withdraw(e){return this.request("POST","/v1/auth/withdraw",e?{passwd:e}:{})}}}function Y(r){return class extends r{async transStart(){let e=await this.request("POST","/v1/transaction/start",void 0,!1);return this.activeTxId=e.transaction_id,this.activeTxId}transRollback(e){let t=e??this.activeTxId;return t?(this.activeTxId=null,this.request("POST",`/v1/transaction/rollback/${t}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}transCommit(e){let t=e??this.activeTxId;return t?(this.activeTxId=null,this.request("POST",`/v1/transaction/commit/${t}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}meta(e){return this.request("POST",`/v1/entity/${e}/meta`,{})}validate(e,t){return this.http.post(`/v1/entity/${e}/validate`,t)}get(e,t,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this.request("GET",`/v1/entity/${e}/${t}${i}`)}find(e,t,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this.request("POST",`/v1/entity/${e}/find${i}`,t??{})}list(e,t={}){let{conditions:s,fields:i,orderDir:o,orderBy:a,...u}=t,m={page:1,limit:20,...u};return a&&(m.orderBy=o==="DESC"?`-${a}`:a),i?.length&&(m.fields=i.join(",")),this.request("POST",`/v1/entity/${e}/list?${l(m)}`,s??{})}count(e,t){return this.request("POST",`/v1/entity/${e}/count`,t??{})}query(e,t){return this.request("POST",`/v1/entity/${e}/query`,t)}submit(e,t,s={}){let i=s.transactionId??this.activeTxId,o=i?{"X-Transaction-ID":i}:void 0,a=s.skipHooks?"?skipHooks=true":"";return this.request("POST",`/v1/entity/${e}/submit${a}`,t,!0,o)}delete(e,t,s={}){let i=new URLSearchParams;s.hard&&i.set("hard","true"),s.skipHooks&&i.set("skipHooks","true");let o=i.size?`?${i}`:"",a=s.transactionId??this.activeTxId,u=a?{"X-Transaction-ID":a}:void 0;return this.request("POST",`/v1/entity/${e}/delete/${t}${o}`,void 0,!0,u)}history(e,t,s={}){return this.request("GET",`/v1/entity/${e}/history/${t}?${l({page:1,limit:50,...s})}`)}rollback(e,t){return this.request("POST",`/v1/entity/${e}/rollback/${t}`)}}}function Z(r){return class extends r{async fileUpload(e,t,s={}){let i=new FormData;return i.append("file",t,t instanceof File?t.name:"upload"),s.refSeq!=null&&i.append("ref_seq",String(s.refSeq)),s.isPublic!=null&&i.append("is_public",s.isPublic?"true":"false"),this.requestForm("POST",`/v1/files/${e}/upload`,i)}fileDownload(e,t){return this.requestBinary("POST",`/v1/files/${e}/download/${t}`,{})}fileDelete(e,t){return this.request("POST",`/v1/files/${e}/delete/${t}`,{})}fileList(e,t={}){return this.request("POST",`/v1/files/${e}/list`,t.refSeq?{ref_seq:t.refSeq}:{})}fileMeta(e,t){return this.request("POST",`/v1/files/${e}/meta/${t}`,{})}fileToken(e){return this.request("POST",`/v1/files/token/${e}`,{})}fileViewUrl(e,t={}){let s=t.download?"?download=true":"";return`${this.baseUrl}/v1/files/${e}${s}`}fileUrl(e){return`${this.baseUrl}/v1/files/${e}`}storageUpload(e,t,s={}){return this.fileUpload(e,t,s)}storageDownload(e,t){return this.fileDownload(e,t)}storageDelete(e,t){return this.fileDelete(e,t)}storageList(e,t={}){return this.fileList(e,t)}storageMeta(e,t){return this.fileMeta(e,t)}storageToken(e){return this.fileToken(e)}storageViewUrl(e,t={}){return this.fileViewUrl(e,t)}storageDownloadUrl(e){return this.fileViewUrl(e,{download:!0})}storageUrl(e){return this.fileUrl(e)}}}function ee(r){return class extends r{push(e,t,s={}){return this.submit(e,t,s)}pushLogList(e={}){return this.list("push_log",e)}registerPushDevice(e,t,s,i={}){let{platform:o,deviceType:a,browser:u,browserVersion:m,pushEnabled:f=!0,transactionId:h}=i;return this.submit("account_device",{id:t,account_seq:e,push_token:s,push_enabled:f,...o?{platform:o}:{},...a?{device_type:a}:{},...u?{browser:u}:{},...m?{browser_version:m}:{}},{transactionId:h})}updatePushDeviceToken(e,t,s={}){let{pushEnabled:i=!0,transactionId:o}=s;return this.submit("account_device",{seq:e,push_token:t,push_enabled:i},{transactionId:o})}disablePushDevice(e,t={}){return this.submit("account_device",{seq:e,push_enabled:!1},{transactionId:t.transactionId})}}}function te(r){return class extends r{smtpSend(e){return this.request("POST","/v1/smtp/send",e)}smtpStatus(e){return this.request("POST",`/v1/smtp/status/${e}`,{})}smtpTemplatePreview(e){let t=e.split("/").map(encodeURIComponent).join("/");return fetch(`${this.baseUrl}/v1/smtp/template/${t}`,{credentials:"include"}).then(s=>s.text())}}}function ne(r){return class extends r{transactionStart(e){return this.request("POST","/v1/transaction/start",e??{})}transactionCommit(e){return this.request("POST",`/v1/transaction/commit/${encodeURIComponent(e)}`,{})}transactionRollback(e){return this.request("POST",`/v1/transaction/rollback/${encodeURIComponent(e)}`,{})}}}function re(r){return class extends r{addressSido(){return this.http.get("/v1/utils/address/sido",!1)}addressSigungu(e){let t=new URLSearchParams({sido:e.sido}).toString();return this.http.get(`/v1/utils/address/sigungu?${t}`,!1)}addressDong(e){let t=new URLSearchParams({sido:e.sido,sigungu:e.sigungu}).toString();return this.http.get(`/v1/utils/address/dong?${t}`,!1)}addressClean(e){let t=new URLSearchParams({q:e.q}).toString();return this.http.get(`/v1/utils/address/clean?${t}`,!1)}qrcode(e,t={}){return this.requestBinary("POST","/v1/utils/qrcode",{content:e,...t})}qrcodeBase64(e,t={}){return this.request("POST","/v1/utils/qrcode/base64",{content:e,...t})}qrcodeText(e,t={}){return this.request("POST","/v1/utils/qrcode/text",{content:e,...t})}barcode(e,t={}){return this.requestBinary("POST","/v1/utils/barcode",{content:e,...t})}pdf2png(e,t={}){let s=new FormData;s.append("file",new Blob([e],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;t.dpi!=null&&i.set("dpi",String(t.dpi)),t.firstPage!=null&&i.set("first_page",String(t.firstPage)),t.lastPage!=null&&i.set("last_page",String(t.lastPage));let o=i.toString(),a="/v1/utils/pdf2png"+(o?`?${o}`:"");return this.requestFormBinary("POST",a,s)}pdf2pngByFileSeq(e,t={}){return this.requestBinary("POST",`/v1/utils/pdf2png/${e}`,t)}pdf2jpg(e,t={}){let s=new FormData;s.append("file",new Blob([e],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;t.dpi!=null&&i.set("dpi",String(t.dpi)),t.firstPage!=null&&i.set("first_page",String(t.firstPage)),t.lastPage!=null&&i.set("last_page",String(t.lastPage));let o=i.toString(),a="/v1/utils/pdf2jpg"+(o?`?${o}`:"");return this.requestFormBinary("POST",a,s)}pdf2jpgByFileSeq(e,t={}){return this.requestBinary("POST",`/v1/utils/pdf2jpg/${e}`,t)}}}function se(r){return class extends r{adminPath(e){return`/v1/admin${e}`}adminGet(e){return this.http.get(this.adminPath(e))}adminPost(e,t){return this.http.post(this.adminPath(e),t)}adminPut(e,t){return this.http.put(this.adminPath(e),t)}adminPatch(e,t){return this.http.patch(this.adminPath(e),t)}adminDelete(e,t){return this.http.delete(this.adminPath(e),t)}listAdminEntities(){return this.adminGet("/entities")}getAdminErdSchema(){return this.adminGet("/erd/schema")}batchEnsureAdminEntities(e){return this.adminPost("/entities/batch-ensure",e)}createAdminEntityConfig(e,t){return this.adminPost(`/${e}/create`,t)}getAdminEntityConfig(e){return this.adminGet(`/${e}/config`)}updateAdminEntityConfig(e,t){return this.adminPut(`/${e}/config`,t)}validateAdminEntityConfig(e,t){return this.adminPost(t?`/${t}/validate`:"/entity/validate",e)}normalizeAdminEntityConfig(e,t){return this.adminPost(t?`/${t}/normalize`:"/entity/normalize",e)}getAdminEntityStats(e,t){return this.adminPost(`/${e}/stats`,t)}reindexAdminEntity(e){return this.adminPost(`/${e}/reindex`)}syncAdminEntitySchema(e){return this.adminPost(`/${e}/sync-schema`)}resetAdminEntity(e){return this.adminPost(`/${e}/reset`)}truncateAdminEntity(e){return this.adminPost(`/${e}/truncate`)}dropAdminEntity(e){return this.adminPost(`/${e}/drop`)}resetAllAdmin(e){return this.adminPost("/reset-all",e)}listAdminConfigs(){return this.adminGet("/configs")}getAdminConfig(e){return this.adminGet(`/configs/${e}`)}updateAdminConfig(e,t){return this.adminPatch(`/configs/${e}`,t)}listAdminRoles(){return this.adminGet("/roles")}createAdminRole(e){return this.adminPost("/roles",e)}getAdminRole(e){return this.adminGet(`/roles/${e}`)}updateAdminRole(e,t){return this.adminPatch(`/roles/${e}`,t)}deleteAdminRole(e){return this.adminDelete(`/roles/${e}`)}listAdminApiKeys(){return this.adminGet("/api-keys")}createAdminApiKey(e){return this.adminPost("/api-keys",e)}getAdminApiKey(e){return this.adminGet(`/api-keys/${e}`)}updateAdminApiKey(e,t){return this.adminPatch(`/api-keys/${e}`,t)}deleteAdminApiKey(e){return this.adminDelete(`/api-keys/${e}`)}regenerateAdminApiKeySecret(e){return this.adminPost(`/api-keys/${e}/regenerate-secret`)}listAdminAccounts(){return this.adminGet("/accounts")}createAdminAccount(e){return this.adminPost("/accounts",e)}getAdminAccount(e){return this.adminGet(`/accounts/${e}`)}updateAdminAccount(e,t){return this.adminPatch(`/accounts/${e}`,t)}deleteAdminAccount(e){return this.adminDelete(`/accounts/${e}`)}listAdminLicenses(){return this.adminGet("/licenses")}createAdminLicense(e){return this.adminPost("/licenses",e)}getAdminLicense(e){return this.adminGet(`/licenses/${e}`)}updateAdminLicense(e,t){return this.adminPatch(`/licenses/${e}`,t)}deleteAdminLicense(e){return this.adminDelete(`/licenses/${e}`)}runAdminBackup(e){return this.adminPost("/backup/run",e)}getAdminBackupStatus(e){return this.adminPost("/backup/status",e)}listAdminBackups(e){return this.adminPost("/backup/list",e)}restoreAdminBackup(e){return this.adminPost("/backup/restore",e)}deleteAdminBackup(e){return this.adminPost("/backup/delete",e)}disableAdminAccountTwoFactor(e){return this.adminDelete(`/accounts/${e}/2fa`)}}}var v=class extends re(ne(Z(te(ee(se(Y(J(G)))))))){};function ie(r){return class extends r{accountRegister(e){return this.http.post("/v1/account/register",e,!1)}accountWithdraw(e){return this.http.post("/v1/account/withdraw",e)}accountChangePassword(e){return this.http.post("/v1/account/change-password",e)}accountReactivate(e){return this.http.post("/v1/account/reactivate",e,!1)}listAccountBiometrics(){return this.http.get("/v1/account/biometric")}registerAccountBiometric(e){return this.http.post("/v1/account/biometric",e)}deleteAccountBiometric(e){return this.http.delete(`/v1/account/biometric/${e}`)}}}function oe(r){return class extends r{listBoardCategories(e={}){let t=l(e);return this.http.get(`/v1/board/categories${t?`?${t}`:""}`,!1)}getBoardCategory(e){return this.http.get(`/v1/board/categories/${e}`,!1)}createBoardCategory(e){return this.http.post("/v1/board/categories",e)}updateBoardCategory(e,t){return this.http.put(`/v1/board/categories/${e}`,t)}deleteBoardCategory(e){return this.http.delete(`/v1/board/categories/${e}`)}listBoardPosts(e,t={}){let s=l(t);return this.http.get(`/v1/board/${e}/list${s?`?${s}`:""}`)}getBoardPost(e){return this.http.get(`/v1/board/posts/${e}`)}createBoardPost(e,t){return this.http.post(`/v1/board/${e}/submit`,t)}updateBoardPost(e,t){return this.http.patch(`/v1/board/posts/${e}`,t)}expireBoardPost(e){return this.http.post(`/v1/board/posts/${e}/expire`,{})}deleteBoardPost(e){return this.http.delete(`/v1/board/posts/${e}`)}listBoardComments(e,t={}){let s=l(t);return this.http.get(`/v1/board/posts/${e}/comments${s?`?${s}`:""}`,!1)}createBoardComment(e,t){return this.http.post(`/v1/board/posts/${e}/comments/submit`,t)}updateBoardComment(e,t){return this.http.put(`/v1/board/comments/${e}`,t)}deleteBoardComment(e){return this.http.delete(`/v1/board/comments/${e}`)}listBoardFiles(e){return this.http.get(`/v1/board/posts/${e}/files`,!1)}async uploadBoardFile(e,t){let s=new FormData;return s.append("file",t,t instanceof File?t.name:"upload"),this.requestForm("POST",`/v1/board/posts/${e}/files`,s)}boardFileUrl(e){return`${this.baseUrl}/v1/board/files/${e}`}deleteBoardFile(e){return this.http.delete(`/v1/board/files/${e}`)}createBoardGuestPost(e,t){return this.http.post(`/v1/board/${e}/guest-submit`,t,!1)}authenticateBoardGuestPost(e,t){return this.http.post(`/v1/board/posts/${e}/guest-auth`,t,!1)}toggleBoardPostLike(e){return this.http.post(`/v1/board/posts/${e}/like`,{})}acceptBoardPost(e){return this.http.post(`/v1/board/posts/${e}/accept`,{})}rateBoardPost(e,t){return this.http.post(`/v1/board/posts/${e}/rating`,t)}rateBoardComment(e,t){return this.http.post(`/v1/board/comments/${e}/rating`,t)}listBoardTags(e={}){let t=l(e);return this.http.get(`/v1/board/tags${t?`?${t}`:""}`,!1)}setBoardPostTags(e,t){return this.http.put(`/v1/board/posts/${e}/tags`,t)}reportBoardPost(e,t){return this.http.post(`/v1/board/posts/${e}/report`,t)}reportBoardComment(e,t){return this.http.post(`/v1/board/comments/${e}/report`,t)}listBoardReports(e={}){let t=l(e);return this.http.get(`/v1/board/admin/reports${t?`?${t}`:""}`)}updateBoardReport(e,t){return this.http.patch(`/v1/board/admin/reports/${e}`,t)}markBoardPostRead(e){return this.http.post(`/v1/board/posts/${e}/read`,{})}listBoardMentions(e={}){let t=l(e);return this.http.get(`/v1/board/mentions${t?`?${t}`:""}`)}markBoardMentionRead(e){return this.http.patch(`/v1/board/mentions/${e}/read`,{})}}}function ae(r){return class extends r{sendEmailVerification(e){return this.http.post("/v1/email-verify/send",e,!1)}confirmEmailVerification(e){return this.http.post("/v1/email-verify/confirm",e,!1)}activateEmailVerification(e){let t=l(e);return this.http.get(`/v1/email-verify/activate${t?`?${t}`:""}`,!1)}getEmailVerificationStatus(){return this.http.get("/v1/email-verify/status")}changeVerifiedEmail(e){return this.http.post("/v1/email-verify/change",e)}}}function ue(r){return class extends r{oauthAuthorizeUrl(e,t={}){let s=l(t);return`${this.baseUrl}/v1/oauth/${e}${s?`?${s}`:""}`}oauthCallback(e,t,s="POST"){if(s==="GET"){let i=l(t??{});return this.http.get(`/v1/oauth/${e}/callback${i?`?${i}`:""}`,!1)}return this.http.post(`/v1/oauth/${e}/callback`,t,!1)}linkOAuthAccount(e){return this.http.post("/v1/account/oauth/link",e)}unlinkOAuthAccount(e){return this.http.delete(`/v1/account/oauth/link/${e}`)}listOAuthProviders(){return this.http.get("/v1/account/oauth/providers")}refreshOAuthProviderToken(e,t){return this.http.post(`/v1/account/oauth/refresh/${e}`,t)}}}function ce(r){return class extends r{requestPasswordReset(e){return this.http.post("/v1/password-reset/request",e,!1)}validatePasswordResetToken(e){return this.http.get(`/v1/password-reset/validate/${encodeURIComponent(e)}`,!1)}verifyPasswordReset(e){return this.http.post("/v1/password-reset/verify",e,!1)}}}function le(r){return class extends r{setupTwoFactor(e){return this.http.post("/v1/account/2fa/setup",e)}verifyTwoFactorSetup(e){return this.http.post("/v1/account/2fa/setup/verify",e,!1)}disableTwoFactor(){return this.http.delete("/v1/account/2fa")}getTwoFactorStatus(){return this.http.get("/v1/account/2fa/status")}regenerateTwoFactorRecoveryCodes(){return this.http.post("/v1/account/2fa/recovery/regenerate")}verifyTwoFactor(e){return this.http.post("/v1/account/2fa/verify",e,!1)}recoverTwoFactorAccess(e){return this.http.post("/v1/account/2fa/recovery",e,!1)}}}function me(r){return class extends r{alimtalkSend(e){return this.http.post("/v1/alimtalk/send",e)}alimtalkStatus(e){return this.http.get(`/v1/alimtalk/status/${e}`,!1)}listAlimtalkTemplates(){return this.http.get("/v1/alimtalk/templates",!1)}alimtalkWebhook(e,t){return this.http.post(`/v1/alimtalk/webhook/${encodeURIComponent(e)}`,t,!1)}}}function de(r){return class extends r{friendtalkSend(e){return this.http.post("/v1/friendtalk/send",e)}}}function he(r){return class extends r{listHolidays(e={}){let t=l(e);return this.http.get(`/v1/holidays${t?`?${t}`:""}`,!1)}getHolidayByDate(e){return this.http.get(`/v1/holidays/${encodeURIComponent(e)}`,!1)}syncHolidays(e){return this.http.post("/v1/holidays/sync",e)}}}function pe(r){return class extends r{identityRequest(e){return this.http.post("/v1/identity/request",e,!1)}identityCallback(e){return this.http.post("/v1/identity/callback",e,!1)}identityResult(e){return this.http.get(`/v1/identity/result/${encodeURIComponent(e)}`,!1)}identityVerifyCI(e){return this.http.post("/v1/identity/verify-ci",e)}}}function fe(r){return class extends r{llmChat(e){return this.http.post("/v1/llm/chat",e)}llmChatStream(e){return this.http.post("/v1/llm/chat/stream",e)}createLlmConversation(e){return this.http.post("/v1/llm/conversations",e)}sendLlmMessage(e,t){return this.http.post(`/v1/llm/conversations/${e}/messages`,t)}listLlmConversations(e={}){let t=l(e);return this.http.get(`/v1/llm/conversations${t?`?${t}`:""}`)}getLlmConversation(e){return this.http.get(`/v1/llm/conversations/${e}`)}updateLlmConversation(e,t){return this.http.patch(`/v1/llm/conversations/${e}`,t)}deleteLlmConversation(e){return this.http.delete(`/v1/llm/conversations/${e}`)}ragUploadDocument(e){return this.requestForm("POST","/v1/llm/rag/documents",e)}ragListDocuments(e={}){let t=l(e);return this.http.get(`/v1/llm/rag/documents${t?`?${t}`:""}`)}ragDeleteDocument(e){return this.http.delete(`/v1/llm/rag/documents/${encodeURIComponent(e)}`)}ragSearch(e){return this.http.post("/v1/llm/rag/search",e)}ragChat(e){return this.http.post("/v1/llm/rag/chat",e)}ragChatStream(e){return this.http.post("/v1/llm/rag/chat/stream",e)}ragRebuildIndex(e){return this.http.post("/v1/llm/rag/rebuild-index",e)}listLlmProviders(){return this.http.get("/v1/llm/providers")}getLlmUsage(e={}){let t=l(e);return this.http.get(`/v1/llm/usage${t?`?${t}`:""}`)}getLlmUsageSummary(e={}){let t=l(e);return this.http.get(`/v1/llm/usage/summary${t?`?${t}`:""}`)}getLlmCacheStats(){return this.http.get("/v1/llm/cache/stats")}clearLlmCache(){return this.http.delete("/v1/llm/cache")}listLlmTemplates(){return this.http.get("/v1/llm/templates")}llmTemplateChat(e,t){return this.http.post(`/v1/llm/${encodeURIComponent(e)}/chat`,t)}llmTemplateChatStream(e,t){return this.http.post(`/v1/llm/${encodeURIComponent(e)}/chat/stream`,t)}listLlmChatbots(e={}){let t=l(e);return this.http.get(`/v1/llm/chatbots${t?`?${t}`:""}`)}createLlmChatbot(e){return this.http.post("/v1/llm/chatbots",e)}getLlmChatbot(e){return this.http.get(`/v1/llm/chatbots/${e}`)}updateLlmChatbot(e,t){return this.http.patch(`/v1/llm/chatbots/${e}`,t)}deleteLlmChatbot(e){return this.http.delete(`/v1/llm/chatbots/${e}`)}llmChatbotChat(e,t){return this.http.post(`/v1/llm/chatbots/${e}/chat`,t)}llmChatbotChatStream(e,t){return this.http.post(`/v1/llm/chatbots/${e}/chat/stream`,t)}listLlmChatbotSessions(e,t={}){let s=l(t);return this.http.get(`/v1/llm/chatbots/${e}/sessions${s?`?${s}`:""}`)}deleteLlmChatbotSession(e,t){return this.http.delete(`/v1/llm/chatbots/${e}/sessions/${t}`)}listLlmProfiles(e={}){let t=l(e);return this.http.get(`/v1/llm/profiles${t?`?${t}`:""}`)}upsertLlmProfile(e){return this.http.post("/v1/llm/profiles",e)}deleteLlmProfile(e){return this.http.delete(`/v1/llm/profiles/${e}`)}}}function ge(r){return class extends r{ocrRecognize(e){return this.requestForm("POST","/v1/ocr/recognize",e)}ocrRecognizeAsync(e){return this.requestForm("POST","/v1/ocr/recognize/async",e)}ocrRecognizeByDocType(e,t){return this.requestForm("POST",`/v1/ocr/${encodeURIComponent(e)}`,t)}listOcrResults(e={}){let t=l(e);return this.http.get(`/v1/ocr/results${t?`?${t}`:""}`)}getOcrResult(e){return this.http.get(`/v1/ocr/results/${encodeURIComponent(e)}`)}getOcrResultText(e){return this.http.get(`/v1/ocr/results/${encodeURIComponent(e)}/text`)}deleteOcrResult(e){return this.http.delete(`/v1/ocr/results/${encodeURIComponent(e)}`)}getOcrQuota(){return this.http.get("/v1/ocr/quota")}}}function ke(r){return class extends r{pgCreateOrder(e){return this.http.post("/v1/pg/orders",e)}pgGetOrder(e){return this.http.get(`/v1/pg/orders/${encodeURIComponent(e)}`)}pgConfirmPayment(e){return this.http.post("/v1/pg/confirm",e)}pgCancelPayment(e,t){return this.http.post(`/v1/pg/orders/${encodeURIComponent(e)}/cancel`,t)}pgSyncPaymentStatus(e,t){return this.http.post(`/v1/pg/orders/${encodeURIComponent(e)}/sync`,t)}pgWebhook(e){return this.http.post("/v1/pg/webhook",e,!1)}pgGetClientConfig(){return this.http.get("/v1/pg/config",!1)}}}function Te(r){return class extends r{appPushSend(e){return this.http.post("/v1/push/send",e)}appPushBroadcast(e){return this.http.post("/v1/push/broadcast",e)}appPushStatus(e){return this.http.get(`/v1/push/status/${e}`)}appPushRegisterDevice(e){return this.http.post("/v1/push/device",e)}appPushUnregisterDevice(e){return this.http.delete(`/v1/push/device/${e}`)}}}function ye(r){return class extends r{smsSend(e){return this.http.post("/v1/sms/send",e)}smsStatus(e){return this.http.get(`/v1/sms/status/${e}`,!1)}smsVerificationSend(e){return this.http.post("/v1/sms/verification/send",e,!1)}smsVerificationVerify(e){return this.http.post("/v1/sms/verification/verify",e,!1)}}}function Pe(r){return class extends r{taxinvoiceRegistIssue(e){return this.http.post("/v1/taxinvoice",e)}taxinvoiceRegister(e){return this.http.post("/v1/taxinvoice/register",e)}taxinvoiceIssue(e){return this.http.post(`/v1/taxinvoice/${e}/issue`,{})}taxinvoiceCancelIssue(e,t){return this.http.post(`/v1/taxinvoice/${e}/cancel`,t)}taxinvoiceGetState(e){return this.http.get(`/v1/taxinvoice/${e}/state`)}taxinvoiceGetDetail(e){return this.http.get(`/v1/taxinvoice/${e}`)}}}var E=class extends me(de(ye(Te(ke(Pe(ge(fe(pe(he(ue(le(ce(ae(oe(ie(v)))))))))))))))){};var Ie=new v,He=new E;function vr(r={}){return _(r,{singletonInstance:Ie,ClientClass:v})}function xr(r={}){return _(r,{singletonInstance:He,ClientClass:E})}export{xr as useEntityAppServer,_ as useEntityClient,vr as useEntityServer};
2
2
  //# sourceMappingURL=react.js.map