entity-client 1.0.8 → 1.0.9

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 (40) hide show
  1. package/dist/EntityAppServerApi.d.ts +112 -176
  2. package/dist/EntityServerApi.d.ts +57 -92
  3. package/dist/client/base.d.ts +16 -12
  4. package/dist/client/base.js +1 -1
  5. package/dist/client/base.js.map +3 -3
  6. package/dist/client/request.d.ts +2 -2
  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 +7 -11
  12. package/dist/mixins/app/plugins/friendtalk.d.ts +7 -11
  13. package/dist/mixins/app/plugins/holidays.d.ts +7 -11
  14. package/dist/mixins/app/plugins/identity.d.ts +7 -11
  15. package/dist/mixins/app/plugins/llm.d.ts +7 -11
  16. package/dist/mixins/app/plugins/ocr.d.ts +7 -11
  17. package/dist/mixins/app/plugins/pg.d.ts +7 -11
  18. package/dist/mixins/app/plugins/push.d.ts +7 -11
  19. package/dist/mixins/app/plugins/sms.d.ts +7 -11
  20. package/dist/mixins/app/plugins/taxinvoice.d.ts +7 -11
  21. package/dist/mixins/app/routes/account.d.ts +7 -11
  22. package/dist/mixins/app/routes/board.d.ts +7 -11
  23. package/dist/mixins/app/routes/email-verify.d.ts +7 -11
  24. package/dist/mixins/app/routes/oauth.d.ts +7 -11
  25. package/dist/mixins/app/routes/password-reset.d.ts +7 -11
  26. package/dist/mixins/app/routes/two-factor.d.ts +7 -11
  27. package/dist/mixins/server/admin.d.ts +7 -11
  28. package/dist/mixins/server/auth.d.ts +9 -16
  29. package/dist/mixins/server/auth.js +1 -1
  30. package/dist/mixins/server/auth.js.map +2 -2
  31. package/dist/mixins/server/entity.d.ts +7 -11
  32. package/dist/mixins/server/file.d.ts +7 -11
  33. package/dist/mixins/server/push.d.ts +7 -11
  34. package/dist/mixins/server/smtp.d.ts +7 -11
  35. package/dist/mixins/server/transaction.d.ts +7 -11
  36. package/dist/mixins/server/utils.d.ts +7 -11
  37. package/dist/react.js +1 -1
  38. package/dist/react.js.map +3 -3
  39. package/dist/types.d.ts +17 -10
  40. package/package.json +1 -1
@@ -6,9 +6,9 @@ export interface RequestOptions {
6
6
  hmacSecret: string;
7
7
  encryptRequests: boolean;
8
8
  csrfEnabled: boolean;
9
- csrfToken: string;
10
9
  csrfHeaderName: string;
11
- refreshCsrfToken: (() => Promise<string>) | null;
10
+ csrfCookieName: string;
11
+ refreshCsrfCookie: (() => Promise<void>) | null;
12
12
  }
13
13
  /**
14
14
  * Entity Server에 HTTP 요청을 보냅니다.
@@ -1,2 +1,2 @@
1
- import{derivePacketKey as E,encryptPacket as U,decryptPacket as N}from"./packet.js";import{buildHmacHeaders as B}from"./hmac.js";function v(e){return e.hmacSecret||e.token||e.anonymousPacketToken}function K(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"}function $(e,r){return e===403&&/csrf/i.test(r)?!0:/csrf/i.test(r)&&/expired|token validation failed/i.test(r)}async function P(e){if((e.headers.get("Content-Type")??"").includes("application/json")){const a=await e.json().catch(()=>null);if(a?.error)return a.error;if(a?.message)return a.message}return await e.text().catch(()=>"")||`HTTP ${e.status}`}async function I(e,r,y,a,k=!0,R={},h=!0){const{baseUrl:H,token:i,apiKey:T,hmacSecret:u,encryptRequests:q,anonymousPacketToken:f,csrfEnabled:x,csrfHeaderName:S,refreshCsrfToken:l}=e,g=k&&!!(T&&u),C=v(e),d=x&&K(r)&&!g;let c=e.csrfToken,m="application/json";const O=!i&&!g&&!!f;let o=null;if(a!=null)if(q&&!!C&&r!=="GET"&&r!=="HEAD"){const s=E(u,i||f);o=U(new TextEncoder().encode(JSON.stringify(a)),s),m="application/octet-stream"}else o=JSON.stringify(a);const j=t=>{const s={"Content-Type":m,...R};if(!g&&k&&i&&(s.Authorization=`Bearer ${i}`),O&&(s["X-Packet-Token"]=f),d&&t&&(s[S]=t),g){const A=o instanceof Uint8Array?o:typeof o=="string"?new TextEncoder().encode(o):new Uint8Array(0);Object.assign(s,B(r,y,A,T,u))}return s};d&&!c&&l&&(c=await l());const w=t=>fetch(H+y,{method:r,headers:j(t),...o!=null?{body:o}:{},credentials:"include"});let n=await w(c);if(!n.ok){const t=await P(n.clone());if(d&&l&&$(n.status,t))c=await l(),n=await w(c);else{const s=new Error(t);throw s.status=n.status,s}}if(!n.ok){const t=new Error(await P(n));throw t.status=n.status,t}const b=n.headers.get("Content-Type")??"";if(b.includes("application/octet-stream")){const t=E(u,i||f);return N(await n.arrayBuffer(),t)}if(!b.includes("application/json"))return await n.text();const p=await n.json();if(h&&!p.ok){const t=new Error(p.message??`EntityServer error (HTTP ${n.status})`);throw t.status=n.status,t}return p}export{I as entityRequest};
1
+ import{derivePacketKey as C,encryptPacket as v,decryptPacket as B}from"./packet.js";import{buildHmacHeaders as I}from"./hmac.js";function K(e){return e.hmacSecret||e.token||e.anonymousPacketToken}function $(e){return e!=="GET"&&e!=="HEAD"&&e!=="OPTIONS"}function m(e){if(typeof document>"u")return"";for(const n of document.cookie.split(";")){const a=n.indexOf("=");if(!(a<0)&&n.substring(0,a).trim()===e)return decodeURIComponent(n.substring(a+1).trim())}return""}function D(e,n){return e===403&&/csrf/i.test(n)?!0:/csrf/i.test(n)&&/expired|token validation failed/i.test(n)}async function R(e){if((e.headers.get("Content-Type")??"").includes("application/json")){const o=await e.json().catch(()=>null);if(o?.error)return o.error;if(o?.message)return o.message}return await e.text().catch(()=>"")||`HTTP ${e.status}`}async function M(e,n,a,o,T=!0,h={},x=!0){const{baseUrl:H,token:c,apiKey:w,hmacSecret:f,encryptRequests:q,anonymousPacketToken:l,csrfEnabled:O,csrfHeaderName:S,csrfCookieName:p,refreshCsrfCookie:d}=e,g=T&&!!(w&&f),N=K(e),y=O&&$(n)&&!g;let u=y?m(p):"",b="application/json";const U=!c&&!g&&!!l;let i=null;if(o!=null)if(q&&!!N&&n!=="GET"&&n!=="HEAD"){const s=C(f,c||l);i=v(new TextEncoder().encode(JSON.stringify(o)),s),b="application/octet-stream"}else i=JSON.stringify(o);const j=t=>{const s={"Content-Type":b,...h};if(!g&&T&&c&&(s.Authorization=`Bearer ${c}`),U&&(s["X-Packet-Token"]=l),y&&t&&(s[S]=t),g){const A=i instanceof Uint8Array?i:typeof i=="string"?new TextEncoder().encode(i):new Uint8Array(0);Object.assign(s,I(n,a,A,w,f))}return s};y&&!u&&d&&(await d(),u=m(p));const E=t=>fetch(H+a,{method:n,headers:j(t),...i!=null?{body:i}:{},credentials:"include"});let r=await E(u);if(!r.ok){const t=await R(r.clone());if(y&&d&&D(r.status,t))await d(),u=m(p),r=await E(u);else{const s=new Error(t);throw s.status=r.status,s}}if(!r.ok){const t=new Error(await R(r));throw t.status=r.status,t}const P=r.headers.get("Content-Type")??"";if(P.includes("application/octet-stream")){const t=C(f,c||l);return B(await r.arrayBuffer(),t)}if(!P.includes("application/json"))return await r.text();const k=await r.json();if(x&&!k.ok){const t=new Error(k.message??`EntityServer error (HTTP ${r.status})`);throw t.status=r.status,t}return k}export{M as entityRequest};
2
2
  //# sourceMappingURL=request.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/client/request.ts"],
4
- "sourcesContent": ["import { derivePacketKey, encryptPacket, decryptPacket } from \"./packet.js\";\nimport { buildHmacHeaders } from \"./hmac.js\";\n\nexport interface RequestOptions {\n baseUrl: string;\n token: string;\n anonymousPacketToken: string;\n apiKey: string;\n hmacSecret: string;\n encryptRequests: boolean;\n csrfEnabled: boolean;\n csrfToken: string;\n csrfHeaderName: string;\n refreshCsrfToken: (() => Promise<string>) | null;\n}\n\nfunction resolvePacketSource(opts: RequestOptions): string {\n return opts.hmacSecret || opts.token || opts.anonymousPacketToken;\n}\n\nfunction requiresCsrf(method: string): boolean {\n return method !== \"GET\" && method !== \"HEAD\" && method !== \"OPTIONS\";\n}\n\nfunction isCsrfError(status: number, message: string): boolean {\n if (status === 403 && /csrf/i.test(message)) {\n return true;\n }\n\n return (\n /csrf/i.test(message) &&\n /expired|token validation failed/i.test(message)\n );\n}\n\nasync function readErrorMessage(res: Response): Promise<string> {\n const contentType = res.headers.get(\"Content-Type\") ?? \"\";\n if (contentType.includes(\"application/json\")) {\n const data = (await res.json().catch(() => null)) as {\n error?: string;\n message?: string;\n } | null;\n if (data?.error) return data.error;\n if (data?.message) return data.message;\n }\n\n const text = await res.text().catch(() => \"\");\n return text || `HTTP ${res.status}`;\n}\n\n/**\n * Entity Server\uC5D0 HTTP \uC694\uCCAD\uC744 \uBCF4\uB0C5\uB2C8\uB2E4.\n *\n * - `encryptRequests` \uD65C\uC131\uD654 \uC2DC \uC778\uC99D\uB41C POST \uBC14\uB514\uB97C \uC790\uB3D9 \uC554\uD638\uD654\uD569\uB2C8\uB2E4.\n * - \uC751\uB2F5\uC774 `application/octet-stream`\uC774\uBA74 \uC790\uB3D9 \uBCF5\uD638\uD654\uD569\uB2C8\uB2E4.\n * - JSON \uC751\uB2F5\uC758 `ok`\uAC00 false\uC774\uBA74 \uC5D0\uB7EC\uB97C \uB358\uC9D1\uB2C8\uB2E4.\n */\nexport async function entityRequest<T>(\n opts: RequestOptions,\n method: string,\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders: Record<string, string> = {},\n requireOkShape = true,\n): Promise<T> {\n const {\n baseUrl,\n token,\n apiKey,\n hmacSecret,\n encryptRequests,\n anonymousPacketToken,\n csrfEnabled,\n csrfHeaderName,\n refreshCsrfToken,\n } = opts;\n const isHmacMode = withAuth && !!(apiKey && hmacSecret);\n const packetSource = resolvePacketSource(opts);\n const shouldUseCsrf = csrfEnabled && requiresCsrf(method) && !isHmacMode;\n let csrfToken = opts.csrfToken;\n let requestContentType = \"application/json\";\n const includeAnonymousPacketHeader =\n !token && !isHmacMode && !!anonymousPacketToken;\n\n let fetchBody: string | Uint8Array | null = null;\n if (body != null) {\n const shouldEncrypt =\n encryptRequests &&\n !!packetSource &&\n method !== \"GET\" &&\n method !== \"HEAD\";\n\n if (shouldEncrypt) {\n const key = derivePacketKey(\n hmacSecret,\n token || anonymousPacketToken,\n );\n fetchBody = encryptPacket(\n new TextEncoder().encode(JSON.stringify(body)),\n key,\n );\n requestContentType = \"application/octet-stream\";\n } else {\n fetchBody = JSON.stringify(body);\n }\n }\n\n const buildHeaders = (\n resolvedCsrfToken: string,\n ): Record<string, string> => {\n const headers: Record<string, string> = {\n \"Content-Type\": requestContentType,\n ...extraHeaders,\n };\n if (!isHmacMode && withAuth && token) {\n headers.Authorization = `Bearer ${token}`;\n }\n if (includeAnonymousPacketHeader) {\n headers[\"X-Packet-Token\"] = anonymousPacketToken;\n }\n if (shouldUseCsrf && resolvedCsrfToken) {\n headers[csrfHeaderName] = resolvedCsrfToken;\n }\n if (isHmacMode) {\n const bodyBytes =\n fetchBody instanceof Uint8Array\n ? fetchBody\n : typeof fetchBody === \"string\"\n ? new TextEncoder().encode(fetchBody)\n : new Uint8Array(0);\n Object.assign(\n headers,\n buildHmacHeaders(method, path, bodyBytes, apiKey, hmacSecret),\n );\n }\n return headers;\n };\n\n if (shouldUseCsrf && !csrfToken && refreshCsrfToken) {\n csrfToken = await refreshCsrfToken();\n }\n\n const executeRequest = (resolvedCsrfToken: string): Promise<Response> =>\n fetch(baseUrl + path, {\n method,\n headers: buildHeaders(resolvedCsrfToken),\n ...(fetchBody != null\n ? { body: fetchBody as RequestInit[\"body\"] }\n : {}),\n credentials: \"include\",\n });\n\n let res = await executeRequest(csrfToken);\n\n if (!res.ok) {\n const message = await readErrorMessage(res.clone());\n if (\n shouldUseCsrf &&\n refreshCsrfToken &&\n isCsrfError(res.status, message)\n ) {\n csrfToken = await refreshCsrfToken();\n res = await executeRequest(csrfToken);\n } else {\n const err = new Error(message);\n (err as { status?: number }).status = res.status;\n throw err;\n }\n }\n\n if (!res.ok) {\n const err = new Error(await readErrorMessage(res));\n (err as { status?: number }).status = res.status;\n throw err;\n }\n\n const contentType = res.headers.get(\"Content-Type\") ?? \"\";\n if (contentType.includes(\"application/octet-stream\")) {\n const key = derivePacketKey(hmacSecret, token || anonymousPacketToken);\n return decryptPacket<T>(await res.arrayBuffer(), key);\n }\n\n if (!contentType.includes(\"application/json\")) {\n return (await res.text()) as T;\n }\n\n const data = (await res.json()) as { ok?: boolean; message?: string };\n if (requireOkShape && !data.ok) {\n const err = new Error(\n data.message ?? `EntityServer error (HTTP ${res.status})`,\n );\n (err as { status?: number }).status = res.status;\n throw err;\n }\n\n return data as T;\n}\n"],
5
- "mappings": "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",
6
- "names": ["derivePacketKey", "encryptPacket", "decryptPacket", "buildHmacHeaders", "resolvePacketSource", "opts", "requiresCsrf", "method", "isCsrfError", "status", "message", "readErrorMessage", "res", "data", "entityRequest", "path", "body", "withAuth", "extraHeaders", "requireOkShape", "baseUrl", "token", "apiKey", "hmacSecret", "encryptRequests", "anonymousPacketToken", "csrfEnabled", "csrfHeaderName", "refreshCsrfToken", "isHmacMode", "packetSource", "shouldUseCsrf", "csrfToken", "requestContentType", "includeAnonymousPacketHeader", "fetchBody", "key", "buildHeaders", "resolvedCsrfToken", "headers", "bodyBytes", "executeRequest", "err", "contentType"]
4
+ "sourcesContent": ["import { derivePacketKey, encryptPacket, decryptPacket } from \"./packet.js\";\nimport { buildHmacHeaders } from \"./hmac.js\";\n\nexport interface RequestOptions {\n baseUrl: string;\n token: string;\n anonymousPacketToken: string;\n apiKey: string;\n hmacSecret: string;\n encryptRequests: boolean;\n csrfEnabled: boolean;\n csrfHeaderName: string;\n csrfCookieName: string;\n refreshCsrfCookie: (() => Promise<void>) | null;\n}\n\nfunction resolvePacketSource(opts: RequestOptions): string {\n return opts.hmacSecret || opts.token || opts.anonymousPacketToken;\n}\n\nfunction requiresCsrf(method: string): boolean {\n return method !== \"GET\" && method !== \"HEAD\" && method !== \"OPTIONS\";\n}\n\nfunction readCsrfCookie(name: string): string {\n if (typeof document === \"undefined\") return \"\";\n for (const chunk of document.cookie.split(\";\")) {\n const idx = chunk.indexOf(\"=\");\n if (idx < 0) continue;\n if (chunk.substring(0, idx).trim() === name) {\n return decodeURIComponent(chunk.substring(idx + 1).trim());\n }\n }\n return \"\";\n}\n\nfunction isCsrfError(status: number, message: string): boolean {\n if (status === 403 && /csrf/i.test(message)) {\n return true;\n }\n\n return (\n /csrf/i.test(message) &&\n /expired|token validation failed/i.test(message)\n );\n}\n\nasync function readErrorMessage(res: Response): Promise<string> {\n const contentType = res.headers.get(\"Content-Type\") ?? \"\";\n if (contentType.includes(\"application/json\")) {\n const data = (await res.json().catch(() => null)) as {\n error?: string;\n message?: string;\n } | null;\n if (data?.error) return data.error;\n if (data?.message) return data.message;\n }\n\n const text = await res.text().catch(() => \"\");\n return text || `HTTP ${res.status}`;\n}\n\n/**\n * Entity Server\uC5D0 HTTP \uC694\uCCAD\uC744 \uBCF4\uB0C5\uB2C8\uB2E4.\n *\n * - `encryptRequests` \uD65C\uC131\uD654 \uC2DC \uC778\uC99D\uB41C POST \uBC14\uB514\uB97C \uC790\uB3D9 \uC554\uD638\uD654\uD569\uB2C8\uB2E4.\n * - \uC751\uB2F5\uC774 `application/octet-stream`\uC774\uBA74 \uC790\uB3D9 \uBCF5\uD638\uD654\uD569\uB2C8\uB2E4.\n * - JSON \uC751\uB2F5\uC758 `ok`\uAC00 false\uC774\uBA74 \uC5D0\uB7EC\uB97C \uB358\uC9D1\uB2C8\uB2E4.\n */\nexport async function entityRequest<T>(\n opts: RequestOptions,\n method: string,\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders: Record<string, string> = {},\n requireOkShape = true,\n): Promise<T> {\n const {\n baseUrl,\n token,\n apiKey,\n hmacSecret,\n encryptRequests,\n anonymousPacketToken,\n csrfEnabled,\n csrfHeaderName,\n csrfCookieName,\n refreshCsrfCookie,\n } = opts;\n const isHmacMode = withAuth && !!(apiKey && hmacSecret);\n const packetSource = resolvePacketSource(opts);\n const shouldUseCsrf = csrfEnabled && requiresCsrf(method) && !isHmacMode;\n let csrfToken = shouldUseCsrf ? readCsrfCookie(csrfCookieName) : \"\";\n let requestContentType = \"application/json\";\n const includeAnonymousPacketHeader =\n !token && !isHmacMode && !!anonymousPacketToken;\n\n let fetchBody: string | Uint8Array | null = null;\n if (body != null) {\n const shouldEncrypt =\n encryptRequests &&\n !!packetSource &&\n method !== \"GET\" &&\n method !== \"HEAD\";\n\n if (shouldEncrypt) {\n const key = derivePacketKey(\n hmacSecret,\n token || anonymousPacketToken,\n );\n fetchBody = encryptPacket(\n new TextEncoder().encode(JSON.stringify(body)),\n key,\n );\n requestContentType = \"application/octet-stream\";\n } else {\n fetchBody = JSON.stringify(body);\n }\n }\n\n const buildHeaders = (\n resolvedCsrfToken: string,\n ): Record<string, string> => {\n const headers: Record<string, string> = {\n \"Content-Type\": requestContentType,\n ...extraHeaders,\n };\n if (!isHmacMode && withAuth && token) {\n headers.Authorization = `Bearer ${token}`;\n }\n if (includeAnonymousPacketHeader) {\n headers[\"X-Packet-Token\"] = anonymousPacketToken;\n }\n if (shouldUseCsrf && resolvedCsrfToken) {\n headers[csrfHeaderName] = resolvedCsrfToken;\n }\n if (isHmacMode) {\n const bodyBytes =\n fetchBody instanceof Uint8Array\n ? fetchBody\n : typeof fetchBody === \"string\"\n ? new TextEncoder().encode(fetchBody)\n : new Uint8Array(0);\n Object.assign(\n headers,\n buildHmacHeaders(method, path, bodyBytes, apiKey, hmacSecret),\n );\n }\n return headers;\n };\n\n if (shouldUseCsrf && !csrfToken && refreshCsrfCookie) {\n await refreshCsrfCookie();\n csrfToken = readCsrfCookie(csrfCookieName);\n }\n\n const executeRequest = (resolvedCsrfToken: string): Promise<Response> =>\n fetch(baseUrl + path, {\n method,\n headers: buildHeaders(resolvedCsrfToken),\n ...(fetchBody != null\n ? { body: fetchBody as RequestInit[\"body\"] }\n : {}),\n credentials: \"include\",\n });\n\n let res = await executeRequest(csrfToken);\n\n if (!res.ok) {\n const message = await readErrorMessage(res.clone());\n if (\n shouldUseCsrf &&\n refreshCsrfCookie &&\n isCsrfError(res.status, message)\n ) {\n await refreshCsrfCookie();\n csrfToken = readCsrfCookie(csrfCookieName);\n res = await executeRequest(csrfToken);\n } else {\n const err = new Error(message);\n (err as { status?: number }).status = res.status;\n throw err;\n }\n }\n\n if (!res.ok) {\n const err = new Error(await readErrorMessage(res));\n (err as { status?: number }).status = res.status;\n throw err;\n }\n\n const contentType = res.headers.get(\"Content-Type\") ?? \"\";\n if (contentType.includes(\"application/octet-stream\")) {\n const key = derivePacketKey(hmacSecret, token || anonymousPacketToken);\n return decryptPacket<T>(await res.arrayBuffer(), key);\n }\n\n if (!contentType.includes(\"application/json\")) {\n return (await res.text()) as T;\n }\n\n const data = (await res.json()) as { ok?: boolean; message?: string };\n if (requireOkShape && !data.ok) {\n const err = new Error(\n data.message ?? `EntityServer error (HTTP ${res.status})`,\n );\n (err as { status?: number }).status = res.status;\n throw err;\n }\n\n return data as T;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["derivePacketKey", "encryptPacket", "decryptPacket", "buildHmacHeaders", "resolvePacketSource", "opts", "requiresCsrf", "method", "readCsrfCookie", "name", "chunk", "idx", "isCsrfError", "status", "message", "readErrorMessage", "res", "data", "entityRequest", "path", "body", "withAuth", "extraHeaders", "requireOkShape", "baseUrl", "token", "apiKey", "hmacSecret", "encryptRequests", "anonymousPacketToken", "csrfEnabled", "csrfHeaderName", "csrfCookieName", "refreshCsrfCookie", "isHmacMode", "packetSource", "shouldUseCsrf", "csrfToken", "requestContentType", "includeAnonymousPacketHeader", "fetchBody", "key", "buildHeaders", "resolvedCsrfToken", "headers", "bodyBytes", "executeRequest", "err", "contentType"]
7
7
  }
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- function ae(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 ue}from"@noble/ciphers/chacha";import{sha256 as be}from"@noble/hashes/sha2";import{hkdf as xe}from"@noble/hashes/hkdf";var E=32,A=2,q=14,k=24,Re=16,Ce="entity-server:hkdf:v1",Se="entity-server:packet-encryption";function w(r){return r instanceof Uint8Array?r:new Uint8Array(r)}function ce(r,n=Se){return xe(be,new TextEncoder().encode(r),new TextEncoder().encode(Ce),new TextEncoder().encode(n),E)}function me(r,n=A,e=q){let t=w(r);return t.length<E?n:n+t[E-1]%e}function le(r,n,e=A,t=q){let s=w(r),i=w(n),o=me(i,e,t),a=crypto.getRandomValues(new Uint8Array(o)),u=crypto.getRandomValues(new Uint8Array(k)),h=ue(i,u).encrypt(s),p=new Uint8Array(o+k+h.length);return p.set(a,0),p.set(u,o),p.set(h,o+k),p}function de(r,n,e=A,t=q){let s=w(r),i=w(n),o=me(i,e,t);if(s.length<o+k+Re)throw new Error("Encrypted packet too short");let a=s.slice(o,o+k),u=s.slice(o+k);return ue(i,a).decrypt(u)}function v(r,n){return ce(r||n)}function he(r,n){return le(r,n)}function C(r,n){let e=de(r,n);return JSON.parse(new TextDecoder().decode(e))}function pe(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 C(r,t);if(r instanceof Uint8Array){let i=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);return C(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 _e}from"@noble/hashes/sha2";import{hmac as Be}from"@noble/hashes/hmac";function fe(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 h=[...Be(_e,new TextEncoder().encode(s),u)].map(p=>p.toString(16).padStart(2,"0")).join("");return{"X-API-Key":t,"X-Timestamp":i,"X-Nonce":o,"X-Signature":h}}function $e(r){return r.hmacSecret||r.token||r.anonymousPacketToken}function Ee(r){return r!=="GET"&&r!=="HEAD"&&r!=="OPTIONS"}function Ae(r,n){return r===403&&/csrf/i.test(n)?!0:/csrf/i.test(n)&&/expired|token validation failed/i.test(n)}async function Te(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 g(r,n,e,t,s=!0,i={},o=!0){let{baseUrl:a,token:u,apiKey:d,hmacSecret:h,encryptRequests:p,anonymousPacketToken:b,csrfEnabled:ge,csrfHeaderName:ke,refreshCsrfToken:x}=r,R=s&&!!(d&&h),Pe=$e(r),B=ge&&Ee(n)&&!R,y=r.csrfToken,se="application/json",ye=!u&&!R&&!!b,T=null;if(t!=null)if(p&&!!Pe&&n!=="GET"&&n!=="HEAD"){let f=v(h,u||b);T=he(new TextEncoder().encode(JSON.stringify(t)),f),se="application/octet-stream"}else T=JSON.stringify(t);let we=m=>{let f={"Content-Type":se,...i};if(!R&&s&&u&&(f.Authorization=`Bearer ${u}`),ye&&(f["X-Packet-Token"]=b),B&&m&&(f[ke]=m),R){let ve=T instanceof Uint8Array?T:typeof T=="string"?new TextEncoder().encode(T):new Uint8Array(0);Object.assign(f,fe(n,e,ve,d,h))}return f};B&&!y&&x&&(y=await x());let ie=m=>fetch(a+e,{method:n,headers:we(m),...T!=null?{body:T}:{},credentials:"include"}),l=await ie(y);if(!l.ok){let m=await Te(l.clone());if(B&&x&&Ae(l.status,m))y=await x(),l=await ie(y);else{let f=new Error(m);throw f.status=l.status,f}}if(!l.ok){let m=new Error(await Te(l));throw m.status=l.status,m}let oe=l.headers.get("Content-Type")??"";if(oe.includes("application/octet-stream")){let m=v(h,u||b);return C(await l.arrayBuffer(),m)}if(!oe.includes("application/json"))return await l.text();let $=await l.json();if(o&&!$.ok){let m=new Error($.message??`EntityServer error (HTTP ${l.status})`);throw m.status=l.status,m}return $}var S=class{baseUrl;token;anonymousPacketToken;apiKey;hmacSecret;encryptRequests;csrfEnabled;csrfToken;csrfHeaderName;csrfRefreshPath;csrfRefreshBuffer;activeTxId=null;keepSession;refreshBuffer;onTokenRefreshed;onSessionExpired;_sessionRefreshToken=null;_refreshTimer=null;_csrfRefreshTimer=null;_csrfRefreshPromise=null;constructor(n={}){let e=ae("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.csrfToken=n.csrfToken??"",this.csrfHeaderName=n.csrfHeaderName??"x-csrf-token",this.csrfRefreshPath=n.csrfRefreshPath??"/v1/csrf-token",this.csrfRefreshBuffer=n.csrfRefreshBuffer??60,this.keepSession=n.keepSession??!1,this.refreshBuffer=n.refreshBuffer??60,this.onTokenRefreshed=n.onTokenRefreshed,this.onSessionExpired=n.onSessionExpired}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,n.csrfEnabled||(this.csrfToken="",this.stopCsrfRefresh())),typeof n.csrfToken=="string"&&(this.csrfToken=n.csrfToken),typeof n.csrfHeaderName=="string"&&(this.csrfHeaderName=n.csrfHeaderName),typeof n.csrfRefreshPath=="string"&&(this.csrfRefreshPath=n.csrfRefreshPath),typeof n.csrfRefreshBuffer=="number"&&(this.csrfRefreshBuffer=n.csrfRefreshBuffer),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)}setToken(n){this.token=n}setAnonymousPacketToken(n){this.anonymousPacketToken=n}setApiKey(n){this.apiKey=n}setHmacSecret(n){this.hmacSecret=n}setEncryptRequests(n){this.encryptRequests=n}setCsrfToken(n){this.csrfToken=n}setCsrfEnabled(n){this.csrfEnabled=n,n||(this.csrfToken="",this.stopCsrfRefresh())}_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}_clearCsrfRefreshTimer(){this._csrfRefreshTimer!==null&&(clearTimeout(this._csrfRefreshTimer),this._csrfRefreshTimer=null)}stopCsrfRefresh(){this._clearCsrfRefreshTimer(),this._csrfRefreshPromise=null}_scheduleCsrfRefresh(n){if(this._clearCsrfRefreshTimer(),!this.csrfEnabled||!this.csrfRefreshPath)return;let e=Math.max((n-this.csrfRefreshBuffer)*1e3,0);this._csrfRefreshTimer=setTimeout(()=>{this.refreshCsrfToken().catch(()=>{this._clearCsrfRefreshTimer()})},e)}async refreshCsrfToken(){return!this.csrfEnabled||!this.csrfRefreshPath?"":(this._csrfRefreshPromise||(this._csrfRefreshPromise=(async()=>{let n=await fetch(`${this.baseUrl}${this.csrfRefreshPath}`,{method:"GET",credentials:"include"});if(!n.ok){let s=await n.text().catch(()=>""),i=new Error(s||`HTTP ${n.status}`);throw i.status=n.status,i}let e=await n.json().catch(()=>null),t=e&&typeof e=="object"&&"data"in e?e.data??null:e;if(!t?.enabled||typeof t.token!="string")throw new Error("CSRF token refresh failed");return this._applyCsrfHealth(t),this.csrfToken})().finally(()=>{this._csrfRefreshPromise=null})),this._csrfRefreshPromise)}_applyCsrfHealth(n){if(!n?.enabled){this.setCsrfEnabled(!1);return}this.csrfEnabled=!0,typeof n.token=="string"&&(this.csrfToken=n.token),typeof n.headerName=="string"&&(this.csrfHeaderName=n.headerName),typeof n.refreshPath=="string"&&(this.csrfRefreshPath=n.refreshPath),typeof n.expiresIn=="number"&&n.expiresIn>0&&this._scheduleCsrfRefresh(n.expiresIn)}readRequestBody(n,e="application/json",t=!1){let s=v(this.hmacSecret,this.token||this.anonymousPacketToken);return pe(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,csrfToken:this.csrfToken,csrfHeaderName:this.csrfHeaderName,refreshCsrfToken:this.csrfEnabled?()=>this.refreshCsrfToken():null}}get http(){let n=this;return{get(e,t=!0,s){return g(n._reqOpts,"GET",e,void 0,t,s,!1)},post(e,t,s=!0,i){return g(n._reqOpts,"POST",e,t,s,i,!1)},put(e,t,s=!0,i){return g(n._reqOpts,"PUT",e,t,s,i,!1)},patch(e,t,s=!0,i){return g(n._reqOpts,"PATCH",e,t,s,i,!1)},delete(e,t,s=!0,i){return g(n._reqOpts,"DELETE",e,t,s,i,!1)}}}requestBinary(n,e,t,s=!0){return this._requestBinary(n,e,t,s)}requestForm(n,e,t,s=!0){return this._requestForm(n,e,t,s)}requestFormBinary(n,e,t,s=!0){return this._requestFormBinary(n,e,t,s)}_request(n,e,t,s=!0,i){return g(this._reqOpts,n,e,t,s,i,!0)}async _requestBinary(n,e,t,s=!0){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 M(r){return class extends r{async checkHealth(){let t=await(await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include"})).json();return t.packet_encryption&&(this.encryptRequests=!0),typeof t.packet_token=="string"&&(this.anonymousPacketToken=t.packet_token),this._applyCsrfHealth(t.csrf),t}async login(e,t){let s=await this._request("POST","/v1/auth/login",{email:e,passwd:t},!1);return this.token=s.data.access_token,this.keepSession&&this._scheduleKeepSession(s.data.refresh_token,s.data.expires_in,i=>this.refreshToken(i)),s.data}async refreshToken(e){let t=await this._request("POST","/v1/auth/refresh",{refresh_token:e},!1);return this.token=t.data.access_token,this.keepSession&&this._scheduleKeepSession(e,t.data.expires_in,s=>this.refreshToken(s)),t.data}async logout(e){this.stopKeepSession();let t=await this._request("POST","/v1/auth/logout",{refresh_token:e},!1);return this.token="",t}me(){return this._request("GET","/v1/auth/me")}withdraw(e){return this._request("POST","/v1/auth/withdraw",e?{passwd:e}:{})}}}function O(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,d={page:1,limit:20,...u};return a&&(d.orderBy=o==="DESC"?`-${a}`:a),i?.length&&(d.fields=i.join(",")),this._request("POST",`/v1/entity/${e}/list?${c(d)}`,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 U(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}`}}}function G(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:d,pushEnabled:h=!0,transactionId:p}=i;return this.submit("account_device",{id:t,account_seq:e,push_token:s,push_enabled:h,...o?{platform:o}:{},...a?{device_type:a}:{},...u?{browser:u}:{},...d?{browser_version:d}:{}},{transactionId:p})}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 I(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 F(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 H(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 L(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 P=class extends H(F(U(I(G(L(O(M(S)))))))){};function j(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 K(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}`:""}`,!1)}getBoardPost(e){return this.http.get(`/v1/board/posts/${e}`,!1)}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 D(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 N(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 V(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 Q(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 z(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 X(r){return class extends r{friendtalkSend(e){return this.http.post("/v1/friendtalk/send",e)}}}function J(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 W(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 Y(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 Z(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 ee(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 ne(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 re(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 _=class extends z(X(ne(te(ee(re(Z(Y(W(J(N(Q(V(D(K(j(P)))))))))))))))){};var Mn=new P,On=new _;export{j as AccountAppMixin,L as AdminMixin,M as AuthMixin,K as BoardMixin,D as EmailVerifyMixin,_ as EntityAppServerApi,O as EntityMixin,P as EntityServerApi,U as FileMixin,N as OAuthMixin,Ce as PACKET_HKDF_SALT,Se as PACKET_INFO_LABEL,E as PACKET_KEY_SIZE,A as PACKET_MAGIC_MIN,q as PACKET_MAGIC_RANGE,k as PACKET_NONCE_SIZE,Re as PACKET_TAG_SIZE,V as PasswordResetMixin,G as PushMixin,I as SmtpMixin,F as TransactionMixin,Q as TwoFactorMixin,H as UtilsMixin,de as decryptPacket,ce as derivePacketKey,le as encryptPacket,On as entityAppServer,Mn as entityServer,me as packetMagicLenFromKey};
1
+ function ct(r){let n=import.meta;if(n?.env?.[r]!=null)return n.env[r];let t=globalThis.process;if(t?.env?.[r]!=null)return t.env[r]}function c(r){return Object.entries(r).filter(([,n])=>n!=null).map(([n,t])=>`${encodeURIComponent(n==="orderBy"?"order_by":n)}=${encodeURIComponent(String(t))}`).join("&")}import{xchacha20poly1305 as mt}from"@noble/ciphers/chacha";import{sha256 as Rt}from"@noble/hashes/sha2";import{hkdf as Ct}from"@noble/hashes/hkdf";var E=32,q=2,M=14,g=24,St=16,_t="entity-server:hkdf:v1",Bt="entity-server:packet-encryption";function w(r){return r instanceof Uint8Array?r:new Uint8Array(r)}function lt(r,n=Bt){return Ct(Rt,new TextEncoder().encode(r),new TextEncoder().encode(_t),new TextEncoder().encode(n),E)}function dt(r,n=q,t=M){let e=w(r);return e.length<E?n:n+e[E-1]%t}function ht(r,n,t=q,e=M){let s=w(r),i=w(n),o=dt(i,t,e),a=crypto.getRandomValues(new Uint8Array(o)),u=crypto.getRandomValues(new Uint8Array(g)),h=mt(i,u).encrypt(s),p=new Uint8Array(o+g+h.length);return p.set(a,0),p.set(u,o),p.set(h,o+g),p}function pt(r,n,t=q,e=M){let s=w(r),i=w(n),o=dt(i,t,e);if(s.length<o+g+St)throw new Error("Encrypted packet too short");let a=s.slice(o,o+g),u=s.slice(o+g);return mt(i,a).decrypt(u)}function v(r,n){return lt(r||n)}function Tt(r,n){return ht(r,n)}function S(r,n){let t=pt(r,n);return JSON.parse(new TextDecoder().decode(t))}function ft(r,n,t,e){let s=n.toLowerCase().includes("application/octet-stream");if(t&&!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 S(r,e);if(r instanceof Uint8Array){let i=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);return S(i,e)}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 $t}from"@noble/hashes/sha2";import{hmac as At}from"@noble/hashes/hmac";function kt(r,n,t,e,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+t.length);u.set(a,0),u.set(t,a.length);let h=[...At($t,new TextEncoder().encode(s),u)].map(p=>p.toString(16).padStart(2,"0")).join("");return{"X-API-Key":e,"X-Timestamp":i,"X-Nonce":o,"X-Signature":h}}function Et(r){return r.hmacSecret||r.token||r.anonymousPacketToken}function qt(r){return r!=="GET"&&r!=="HEAD"&&r!=="OPTIONS"}function O(r){if(typeof document>"u")return"";for(let n of document.cookie.split(";")){let t=n.indexOf("=");if(!(t<0)&&n.substring(0,t).trim()===r)return decodeURIComponent(n.substring(t+1).trim())}return""}function Mt(r,n){return r===403&&/csrf/i.test(n)?!0:/csrf/i.test(n)&&/expired|token validation failed/i.test(n)}async function gt(r){if((r.headers.get("Content-Type")??"").includes("application/json")){let e=await r.json().catch(()=>null);if(e?.error)return e.error;if(e?.message)return e.message}return await r.text().catch(()=>"")||`HTTP ${r.status}`}async function k(r,n,t,e,s=!0,i={},o=!0){let{baseUrl:a,token:u,apiKey:d,hmacSecret:h,encryptRequests:p,anonymousPacketToken:b,csrfEnabled:Pt,csrfHeaderName:yt,csrfCookieName:$,refreshCsrfCookie:x}=r,R=s&&!!(d&&h),wt=Et(r),C=Pt&&qt(n)&&!R,y=C?O($):"",ot="application/json",vt=!u&&!R&&!!b,f=null;if(e!=null)if(p&&!!wt&&n!=="GET"&&n!=="HEAD"){let T=v(h,u||b);f=Tt(new TextEncoder().encode(JSON.stringify(e)),T),ot="application/octet-stream"}else f=JSON.stringify(e);let bt=m=>{let T={"Content-Type":ot,...i};if(!R&&s&&u&&(T.Authorization=`Bearer ${u}`),vt&&(T["X-Packet-Token"]=b),C&&m&&(T[yt]=m),R){let xt=f instanceof Uint8Array?f:typeof f=="string"?new TextEncoder().encode(f):new Uint8Array(0);Object.assign(T,kt(n,t,xt,d,h))}return T};C&&!y&&x&&(await x(),y=O($));let at=m=>fetch(a+t,{method:n,headers:bt(m),...f!=null?{body:f}:{},credentials:"include"}),l=await at(y);if(!l.ok){let m=await gt(l.clone());if(C&&x&&Mt(l.status,m))await x(),y=O($),l=await at(y);else{let T=new Error(m);throw T.status=l.status,T}}if(!l.ok){let m=new Error(await gt(l));throw m.status=l.status,m}let ut=l.headers.get("Content-Type")??"";if(ut.includes("application/octet-stream")){let m=v(h,u||b);return S(await l.arrayBuffer(),m)}if(!ut.includes("application/json"))return await l.text();let A=await l.json();if(o&&!A.ok){let m=new Error(A.message??`EntityServer error (HTTP ${l.status})`);throw m.status=l.status,m}return A}var _=class{baseUrl;token;anonymousPacketToken;apiKey;hmacSecret;encryptRequests;csrfEnabled;csrfHeaderName;csrfCookieName;_csrfRefresher=null;activeTxId=null;keepSession;refreshBuffer;onTokenRefreshed;onSessionExpired;_sessionRefreshToken=null;_refreshTimer=null;_healthTickTimer=null;_healthTickPromise=null;constructor(n={}){let t=ct("VITE_ENTITY_SERVER_URL");this.baseUrl=(n.baseUrl??t??"").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,typeof n.healthTickInterval=="number"&&n.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(n.healthTickInterval))}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),typeof n.healthTickInterval=="number"&&n.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(n.healthTickInterval))}setToken(n){this.token=n}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}startHealthTick(n=300*1e3){this.stopHealthTick();let t=()=>{this._healthTickPromise||(this._healthTickPromise=(this._csrfRefresher?this._csrfRefresher():Promise.resolve()).catch(()=>{}).finally(()=>{this._healthTickPromise=null}))};t(),this._healthTickTimer=setInterval(t,n)}stopHealthTick(){this._healthTickTimer!==null&&(clearInterval(this._healthTickTimer),this._healthTickTimer=null),this._healthTickPromise=null}_scheduleKeepSession(n,t,e){this._clearRefreshTimer(),this._sessionRefreshToken=n;let s=Math.max((t-this.refreshBuffer)*1e3,0);this._refreshTimer=setTimeout(async()=>{if(this._sessionRefreshToken)try{let i=await e(this._sessionRefreshToken);this.onTokenRefreshed?.(i.access_token,i.expires_in),this._scheduleKeepSession(this._sessionRefreshToken,i.expires_in,e)}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}_applyCsrfHealth(){if(!(typeof document>"u")){for(let n of document.cookie.split(";")){let t=n.indexOf("=");if(!(t<0)&&n.substring(0,t).trim()===this.csrfCookieName){this.csrfEnabled=!!n.substring(t+1).trim();return}}this.csrfEnabled=!1}}readRequestBody(n,t="application/json",e=!1){let s=v(this.hmacSecret,this.token||this.anonymousPacketToken);return ft(n,t,e,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}}get http(){let n=this;return{get(t,e=!0,s){return k(n._reqOpts,"GET",t,void 0,e,s,!1)},post(t,e,s=!0,i){return k(n._reqOpts,"POST",t,e,s,i,!1)},put(t,e,s=!0,i){return k(n._reqOpts,"PUT",t,e,s,i,!1)},patch(t,e,s=!0,i){return k(n._reqOpts,"PATCH",t,e,s,i,!1)},delete(t,e,s=!0,i){return k(n._reqOpts,"DELETE",t,e,s,i,!1)}}}requestBinary(n,t,e,s=!0){return this._requestBinary(n,t,e,s)}requestForm(n,t,e,s=!0){return this._requestForm(n,t,e,s)}requestFormBinary(n,t,e,s=!0){return this._requestFormBinary(n,t,e,s)}_request(n,t,e,s=!0,i){return k(this._reqOpts,n,t,e,s,i,!0)}async _requestBinary(n,t,e,s=!0){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+t,{method:n,headers:i,...e!=null?{body:JSON.stringify(e)}:{},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,t,e,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+t,{method:n,headers:i,body:e,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,t,e,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+t,{method:n,headers:i,body:e,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 U(r){return class extends r{_csrfRefresher=()=>this.checkHealth().then(()=>{});async checkHealth(){let e=await(await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include"})).json();return typeof e.packet_token=="string"&&(this.anonymousPacketToken=e.packet_token),this._applyCsrfHealth(),e}async login(t,e){let s=await this._request("POST","/v1/auth/login",{email:t,passwd:e},!1);return this.token=s.data.access_token,this.keepSession&&this._scheduleKeepSession(s.data.refresh_token,s.data.expires_in,i=>this.refreshToken(i)),s.data}async refreshToken(t){let e=await this._request("POST","/v1/auth/refresh",{refresh_token:t},!1);return this.token=e.data.access_token,this.keepSession&&this._scheduleKeepSession(t,e.data.expires_in,s=>this.refreshToken(s)),e.data}async logout(t){this.stopKeepSession();let e=await this._request("POST","/v1/auth/logout",{refresh_token:t},!1);return this.token="",e}me(){return this._request("GET","/v1/auth/me")}withdraw(t){return this._request("POST","/v1/auth/withdraw",t?{passwd:t}:{})}}}function I(r){return class extends r{async transStart(){let t=await this._request("POST","/v1/transaction/start",void 0,!1);return this.activeTxId=t.transaction_id,this.activeTxId}transRollback(t){let e=t??this.activeTxId;return e?(this.activeTxId=null,this._request("POST",`/v1/transaction/rollback/${e}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}transCommit(t){let e=t??this.activeTxId;return e?(this.activeTxId=null,this._request("POST",`/v1/transaction/commit/${e}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}meta(t){return this._request("POST",`/v1/entity/${t}/meta`,{})}validate(t,e){return this.http.post(`/v1/entity/${t}/validate`,e)}get(t,e,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this._request("GET",`/v1/entity/${t}/${e}${i}`)}find(t,e,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this._request("POST",`/v1/entity/${t}/find${i}`,e??{})}list(t,e={}){let{conditions:s,fields:i,orderDir:o,orderBy:a,...u}=e,d={page:1,limit:20,...u};return a&&(d.orderBy=o==="DESC"?`-${a}`:a),i?.length&&(d.fields=i.join(",")),this._request("POST",`/v1/entity/${t}/list?${c(d)}`,s??{})}count(t,e){return this._request("POST",`/v1/entity/${t}/count`,e??{})}query(t,e){return this._request("POST",`/v1/entity/${t}/query`,e)}submit(t,e,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/${t}/submit${a}`,e,!0,o)}delete(t,e,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/${t}/delete/${e}${o}`,void 0,!0,u)}history(t,e,s={}){return this._request("GET",`/v1/entity/${t}/history/${e}?${c({page:1,limit:50,...s})}`)}rollback(t,e){return this._request("POST",`/v1/entity/${t}/rollback/${e}`)}}}function G(r){return class extends r{async fileUpload(t,e,s={}){let i=new FormData;return i.append("file",e,e instanceof File?e.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/${t}/upload`,i)}fileDownload(t,e){return this._requestBinary("POST",`/v1/files/${t}/download/${e}`,{})}fileDelete(t,e){return this._request("POST",`/v1/files/${t}/delete/${e}`,{})}fileList(t,e={}){return this._request("POST",`/v1/files/${t}/list`,e.refSeq?{ref_seq:e.refSeq}:{})}fileMeta(t,e){return this._request("POST",`/v1/files/${t}/meta/${e}`,{})}fileToken(t){return this._request("POST",`/v1/files/token/${t}`,{})}fileViewUrl(t,e={}){let s=e.download?"?download=true":"";return`${this.baseUrl}/v1/files/${t}${s}`}fileUrl(t){return`${this.baseUrl}/v1/files/${t}`}}}function F(r){return class extends r{push(t,e,s={}){return this.submit(t,e,s)}pushLogList(t={}){return this.list("push_log",t)}registerPushDevice(t,e,s,i={}){let{platform:o,deviceType:a,browser:u,browserVersion:d,pushEnabled:h=!0,transactionId:p}=i;return this.submit("account_device",{id:e,account_seq:t,push_token:s,push_enabled:h,...o?{platform:o}:{},...a?{device_type:a}:{},...u?{browser:u}:{},...d?{browser_version:d}:{}},{transactionId:p})}updatePushDeviceToken(t,e,s={}){let{pushEnabled:i=!0,transactionId:o}=s;return this.submit("account_device",{seq:t,push_token:e,push_enabled:i},{transactionId:o})}disablePushDevice(t,e={}){return this.submit("account_device",{seq:t,push_enabled:!1},{transactionId:e.transactionId})}}}function L(r){return class extends r{smtpSend(t){return this._request("POST","/v1/smtp/send",t)}smtpStatus(t){return this._request("POST",`/v1/smtp/status/${t}`,{})}smtpTemplatePreview(t){let e=t.split("/").map(encodeURIComponent).join("/");return fetch(`${this.baseUrl}/v1/smtp/template/${e}`,{credentials:"include"}).then(s=>s.text())}}}function H(r){return class extends r{transactionStart(t){return this._request("POST","/v1/transaction/start",t??{})}transactionCommit(t){return this._request("POST",`/v1/transaction/commit/${encodeURIComponent(t)}`,{})}transactionRollback(t){return this._request("POST",`/v1/transaction/rollback/${encodeURIComponent(t)}`,{})}}}function j(r){return class extends r{addressSido(){return this.http.get("/v1/utils/address/sido",!1)}addressSigungu(t){let e=new URLSearchParams({sido:t.sido}).toString();return this.http.get(`/v1/utils/address/sigungu?${e}`,!1)}addressDong(t){let e=new URLSearchParams({sido:t.sido,sigungu:t.sigungu}).toString();return this.http.get(`/v1/utils/address/dong?${e}`,!1)}addressClean(t){let e=new URLSearchParams({q:t.q}).toString();return this.http.get(`/v1/utils/address/clean?${e}`,!1)}qrcode(t,e={}){return this._requestBinary("POST","/v1/utils/qrcode",{content:t,...e})}qrcodeBase64(t,e={}){return this._request("POST","/v1/utils/qrcode/base64",{content:t,...e})}qrcodeText(t,e={}){return this._request("POST","/v1/utils/qrcode/text",{content:t,...e})}barcode(t,e={}){return this._requestBinary("POST","/v1/utils/barcode",{content:t,...e})}pdf2png(t,e={}){let s=new FormData;s.append("file",new Blob([t],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;e.dpi!=null&&i.set("dpi",String(e.dpi)),e.firstPage!=null&&i.set("first_page",String(e.firstPage)),e.lastPage!=null&&i.set("last_page",String(e.lastPage));let o=i.toString(),a="/v1/utils/pdf2png"+(o?`?${o}`:"");return this._requestFormBinary("POST",a,s)}pdf2pngByFileSeq(t,e={}){return this.requestBinary("POST",`/v1/utils/pdf2png/${t}`,e)}pdf2jpg(t,e={}){let s=new FormData;s.append("file",new Blob([t],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;e.dpi!=null&&i.set("dpi",String(e.dpi)),e.firstPage!=null&&i.set("first_page",String(e.firstPage)),e.lastPage!=null&&i.set("last_page",String(e.lastPage));let o=i.toString(),a="/v1/utils/pdf2jpg"+(o?`?${o}`:"");return this._requestFormBinary("POST",a,s)}pdf2jpgByFileSeq(t,e={}){return this.requestBinary("POST",`/v1/utils/pdf2jpg/${t}`,e)}}}function K(r){return class extends r{_adminPath(t){return`/v1/admin${t}`}_adminGet(t){return this.http.get(this._adminPath(t))}_adminPost(t,e){return this.http.post(this._adminPath(t),e)}_adminPut(t,e){return this.http.put(this._adminPath(t),e)}_adminPatch(t,e){return this.http.patch(this._adminPath(t),e)}_adminDelete(t,e){return this.http.delete(this._adminPath(t),e)}listAdminEntities(){return this._adminGet("/entities")}getAdminErdSchema(){return this._adminGet("/erd/schema")}batchEnsureAdminEntities(t){return this._adminPost("/entities/batch-ensure",t)}createAdminEntityConfig(t,e){return this._adminPost(`/${t}/create`,e)}getAdminEntityConfig(t){return this._adminGet(`/${t}/config`)}updateAdminEntityConfig(t,e){return this._adminPut(`/${t}/config`,e)}validateAdminEntityConfig(t,e){return this._adminPost(e?`/${e}/validate`:"/entity/validate",t)}normalizeAdminEntityConfig(t,e){return this._adminPost(e?`/${e}/normalize`:"/entity/normalize",t)}getAdminEntityStats(t,e){return this._adminPost(`/${t}/stats`,e)}reindexAdminEntity(t){return this._adminPost(`/${t}/reindex`)}syncAdminEntitySchema(t){return this._adminPost(`/${t}/sync-schema`)}resetAdminEntity(t){return this._adminPost(`/${t}/reset`)}truncateAdminEntity(t){return this._adminPost(`/${t}/truncate`)}dropAdminEntity(t){return this._adminPost(`/${t}/drop`)}resetAllAdmin(t){return this._adminPost("/reset-all",t)}listAdminConfigs(){return this._adminGet("/configs")}getAdminConfig(t){return this._adminGet(`/configs/${t}`)}updateAdminConfig(t,e){return this._adminPatch(`/configs/${t}`,e)}listAdminRoles(){return this._adminGet("/roles")}createAdminRole(t){return this._adminPost("/roles",t)}getAdminRole(t){return this._adminGet(`/roles/${t}`)}updateAdminRole(t,e){return this._adminPatch(`/roles/${t}`,e)}deleteAdminRole(t){return this._adminDelete(`/roles/${t}`)}listAdminApiKeys(){return this._adminGet("/api-keys")}createAdminApiKey(t){return this._adminPost("/api-keys",t)}getAdminApiKey(t){return this._adminGet(`/api-keys/${t}`)}updateAdminApiKey(t,e){return this._adminPatch(`/api-keys/${t}`,e)}deleteAdminApiKey(t){return this._adminDelete(`/api-keys/${t}`)}regenerateAdminApiKeySecret(t){return this._adminPost(`/api-keys/${t}/regenerate-secret`)}listAdminAccounts(){return this._adminGet("/accounts")}createAdminAccount(t){return this._adminPost("/accounts",t)}getAdminAccount(t){return this._adminGet(`/accounts/${t}`)}updateAdminAccount(t,e){return this._adminPatch(`/accounts/${t}`,e)}deleteAdminAccount(t){return this._adminDelete(`/accounts/${t}`)}listAdminLicenses(){return this._adminGet("/licenses")}createAdminLicense(t){return this._adminPost("/licenses",t)}getAdminLicense(t){return this._adminGet(`/licenses/${t}`)}updateAdminLicense(t,e){return this._adminPatch(`/licenses/${t}`,e)}deleteAdminLicense(t){return this._adminDelete(`/licenses/${t}`)}runAdminBackup(t){return this._adminPost("/backup/run",t)}getAdminBackupStatus(t){return this._adminPost("/backup/status",t)}listAdminBackups(t){return this._adminPost("/backup/list",t)}restoreAdminBackup(t){return this._adminPost("/backup/restore",t)}deleteAdminBackup(t){return this._adminPost("/backup/delete",t)}disableAdminAccountTwoFactor(t){return this._adminDelete(`/accounts/${t}/2fa`)}}}var P=class extends j(H(G(L(F(K(I(U(_)))))))){};function D(r){return class extends r{accountRegister(t){return this.http.post("/v1/account/register",t,!1)}accountWithdraw(t){return this.http.post("/v1/account/withdraw",t)}accountChangePassword(t){return this.http.post("/v1/account/change-password",t)}accountReactivate(t){return this.http.post("/v1/account/reactivate",t,!1)}listAccountBiometrics(){return this.http.get("/v1/account/biometric")}registerAccountBiometric(t){return this.http.post("/v1/account/biometric",t)}deleteAccountBiometric(t){return this.http.delete(`/v1/account/biometric/${t}`)}}}function N(r){return class extends r{listBoardCategories(t={}){let e=c(t);return this.http.get(`/v1/board/categories${e?`?${e}`:""}`,!1)}getBoardCategory(t){return this.http.get(`/v1/board/categories/${t}`,!1)}createBoardCategory(t){return this.http.post("/v1/board/categories",t)}updateBoardCategory(t,e){return this.http.put(`/v1/board/categories/${t}`,e)}deleteBoardCategory(t){return this.http.delete(`/v1/board/categories/${t}`)}listBoardPosts(t,e={}){let s=c(e);return this.http.get(`/v1/board/${t}/list${s?`?${s}`:""}`,!1)}getBoardPost(t){return this.http.get(`/v1/board/posts/${t}`,!1)}createBoardPost(t,e){return this.http.post(`/v1/board/${t}/submit`,e)}updateBoardPost(t,e){return this.http.put(`/v1/board/posts/${t}`,e)}deleteBoardPost(t){return this.http.delete(`/v1/board/posts/${t}`)}listBoardComments(t,e={}){let s=c(e);return this.http.get(`/v1/board/posts/${t}/comments${s?`?${s}`:""}`,!1)}createBoardComment(t,e){return this.http.post(`/v1/board/posts/${t}/comments/submit`,e)}updateBoardComment(t,e){return this.http.put(`/v1/board/comments/${t}`,e)}deleteBoardComment(t){return this.http.delete(`/v1/board/comments/${t}`)}listBoardFiles(t){return this.http.get(`/v1/board/posts/${t}/files`,!1)}async uploadBoardFile(t,e){let s=new FormData;return s.append("file",e,e instanceof File?e.name:"upload"),this.requestForm("POST",`/v1/board/posts/${t}/files`,s)}boardFileUrl(t){return`${this.baseUrl}/v1/board/files/${t}`}deleteBoardFile(t){return this.http.delete(`/v1/board/files/${t}`)}createBoardGuestPost(t,e){return this.http.post(`/v1/board/${t}/guest-submit`,e,!1)}authenticateBoardGuestPost(t,e){return this.http.post(`/v1/board/posts/${t}/guest-auth`,e,!1)}toggleBoardPostLike(t){return this.http.post(`/v1/board/posts/${t}/like`,{})}acceptBoardPost(t){return this.http.post(`/v1/board/posts/${t}/accept`,{})}rateBoardPost(t,e){return this.http.post(`/v1/board/posts/${t}/rating`,e)}rateBoardComment(t,e){return this.http.post(`/v1/board/comments/${t}/rating`,e)}listBoardTags(t={}){let e=c(t);return this.http.get(`/v1/board/tags${e?`?${e}`:""}`,!1)}setBoardPostTags(t,e){return this.http.put(`/v1/board/posts/${t}/tags`,e)}reportBoardPost(t,e){return this.http.post(`/v1/board/posts/${t}/report`,e)}reportBoardComment(t,e){return this.http.post(`/v1/board/comments/${t}/report`,e)}listBoardReports(t={}){let e=c(t);return this.http.get(`/v1/board/admin/reports${e?`?${e}`:""}`)}updateBoardReport(t,e){return this.http.patch(`/v1/board/admin/reports/${t}`,e)}markBoardPostRead(t){return this.http.post(`/v1/board/posts/${t}/read`,{})}listBoardMentions(t={}){let e=c(t);return this.http.get(`/v1/board/mentions${e?`?${e}`:""}`)}markBoardMentionRead(t){return this.http.patch(`/v1/board/mentions/${t}/read`,{})}}}function V(r){return class extends r{sendEmailVerification(t){return this.http.post("/v1/email-verify/send",t,!1)}confirmEmailVerification(t){return this.http.post("/v1/email-verify/confirm",t,!1)}activateEmailVerification(t){let e=c(t);return this.http.get(`/v1/email-verify/activate${e?`?${e}`:""}`,!1)}getEmailVerificationStatus(){return this.http.get("/v1/email-verify/status")}changeVerifiedEmail(t){return this.http.post("/v1/email-verify/change",t)}}}function Q(r){return class extends r{oauthAuthorizeUrl(t,e={}){let s=c(e);return`${this.baseUrl}/v1/oauth/${t}${s?`?${s}`:""}`}oauthCallback(t,e,s="POST"){if(s==="GET"){let i=c(e??{});return this.http.get(`/v1/oauth/${t}/callback${i?`?${i}`:""}`,!1)}return this.http.post(`/v1/oauth/${t}/callback`,e,!1)}linkOAuthAccount(t){return this.http.post("/v1/account/oauth/link",t)}unlinkOAuthAccount(t){return this.http.delete(`/v1/account/oauth/link/${t}`)}listOAuthProviders(){return this.http.get("/v1/account/oauth/providers")}refreshOAuthProviderToken(t,e){return this.http.post(`/v1/account/oauth/refresh/${t}`,e)}}}function z(r){return class extends r{requestPasswordReset(t){return this.http.post("/v1/password-reset/request",t,!1)}validatePasswordResetToken(t){return this.http.get(`/v1/password-reset/validate/${encodeURIComponent(t)}`,!1)}verifyPasswordReset(t){return this.http.post("/v1/password-reset/verify",t,!1)}}}function X(r){return class extends r{setupTwoFactor(t){return this.http.post("/v1/account/2fa/setup",t)}verifyTwoFactorSetup(t){return this.http.post("/v1/account/2fa/setup/verify",t,!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(t){return this.http.post("/v1/account/2fa/verify",t,!1)}recoverTwoFactorAccess(t){return this.http.post("/v1/account/2fa/recovery",t,!1)}}}function J(r){return class extends r{alimtalkSend(t){return this.http.post("/v1/alimtalk/send",t)}alimtalkStatus(t){return this.http.get(`/v1/alimtalk/status/${t}`,!1)}listAlimtalkTemplates(){return this.http.get("/v1/alimtalk/templates",!1)}alimtalkWebhook(t,e){return this.http.post(`/v1/alimtalk/webhook/${encodeURIComponent(t)}`,e,!1)}}}function W(r){return class extends r{friendtalkSend(t){return this.http.post("/v1/friendtalk/send",t)}}}function Y(r){return class extends r{listHolidays(t={}){let e=c(t);return this.http.get(`/v1/holidays${e?`?${e}`:""}`,!1)}getHolidayByDate(t){return this.http.get(`/v1/holidays/${encodeURIComponent(t)}`,!1)}syncHolidays(t){return this.http.post("/v1/holidays/sync",t)}}}function Z(r){return class extends r{identityRequest(t){return this.http.post("/v1/identity/request",t,!1)}identityCallback(t){return this.http.post("/v1/identity/callback",t,!1)}identityResult(t){return this.http.get(`/v1/identity/result/${encodeURIComponent(t)}`,!1)}identityVerifyCI(t){return this.http.post("/v1/identity/verify-ci",t)}}}function tt(r){return class extends r{llmChat(t){return this.http.post("/v1/llm/chat",t)}llmChatStream(t){return this.http.post("/v1/llm/chat/stream",t)}createLlmConversation(t){return this.http.post("/v1/llm/conversations",t)}sendLlmMessage(t,e){return this.http.post(`/v1/llm/conversations/${t}/messages`,e)}listLlmConversations(t={}){let e=c(t);return this.http.get(`/v1/llm/conversations${e?`?${e}`:""}`)}getLlmConversation(t){return this.http.get(`/v1/llm/conversations/${t}`)}updateLlmConversation(t,e){return this.http.patch(`/v1/llm/conversations/${t}`,e)}deleteLlmConversation(t){return this.http.delete(`/v1/llm/conversations/${t}`)}ragUploadDocument(t){return this.requestForm("POST","/v1/llm/rag/documents",t)}ragListDocuments(t={}){let e=c(t);return this.http.get(`/v1/llm/rag/documents${e?`?${e}`:""}`)}ragDeleteDocument(t){return this.http.delete(`/v1/llm/rag/documents/${encodeURIComponent(t)}`)}ragSearch(t){return this.http.post("/v1/llm/rag/search",t)}ragChat(t){return this.http.post("/v1/llm/rag/chat",t)}ragChatStream(t){return this.http.post("/v1/llm/rag/chat/stream",t)}ragRebuildIndex(t){return this.http.post("/v1/llm/rag/rebuild-index",t)}listLlmProviders(){return this.http.get("/v1/llm/providers")}getLlmUsage(t={}){let e=c(t);return this.http.get(`/v1/llm/usage${e?`?${e}`:""}`)}getLlmUsageSummary(t={}){let e=c(t);return this.http.get(`/v1/llm/usage/summary${e?`?${e}`:""}`)}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(t,e){return this.http.post(`/v1/llm/${encodeURIComponent(t)}/chat`,e)}llmTemplateChatStream(t,e){return this.http.post(`/v1/llm/${encodeURIComponent(t)}/chat/stream`,e)}listLlmChatbots(t={}){let e=c(t);return this.http.get(`/v1/llm/chatbots${e?`?${e}`:""}`)}createLlmChatbot(t){return this.http.post("/v1/llm/chatbots",t)}getLlmChatbot(t){return this.http.get(`/v1/llm/chatbots/${t}`)}updateLlmChatbot(t,e){return this.http.patch(`/v1/llm/chatbots/${t}`,e)}deleteLlmChatbot(t){return this.http.delete(`/v1/llm/chatbots/${t}`)}llmChatbotChat(t,e){return this.http.post(`/v1/llm/chatbots/${t}/chat`,e)}llmChatbotChatStream(t,e){return this.http.post(`/v1/llm/chatbots/${t}/chat/stream`,e)}listLlmChatbotSessions(t,e={}){let s=c(e);return this.http.get(`/v1/llm/chatbots/${t}/sessions${s?`?${s}`:""}`)}deleteLlmChatbotSession(t,e){return this.http.delete(`/v1/llm/chatbots/${t}/sessions/${e}`)}listLlmProfiles(t={}){let e=c(t);return this.http.get(`/v1/llm/profiles${e?`?${e}`:""}`)}upsertLlmProfile(t){return this.http.post("/v1/llm/profiles",t)}deleteLlmProfile(t){return this.http.delete(`/v1/llm/profiles/${t}`)}}}function et(r){return class extends r{ocrRecognize(t){return this.requestForm("POST","/v1/ocr/recognize",t)}ocrRecognizeAsync(t){return this.requestForm("POST","/v1/ocr/recognize/async",t)}ocrRecognizeByDocType(t,e){return this.requestForm("POST",`/v1/ocr/${encodeURIComponent(t)}`,e)}listOcrResults(t={}){let e=c(t);return this.http.get(`/v1/ocr/results${e?`?${e}`:""}`)}getOcrResult(t){return this.http.get(`/v1/ocr/results/${encodeURIComponent(t)}`)}getOcrResultText(t){return this.http.get(`/v1/ocr/results/${encodeURIComponent(t)}/text`)}deleteOcrResult(t){return this.http.delete(`/v1/ocr/results/${encodeURIComponent(t)}`)}getOcrQuota(){return this.http.get("/v1/ocr/quota")}}}function nt(r){return class extends r{pgCreateOrder(t){return this.http.post("/v1/pg/orders",t)}pgGetOrder(t){return this.http.get(`/v1/pg/orders/${encodeURIComponent(t)}`)}pgConfirmPayment(t){return this.http.post("/v1/pg/confirm",t)}pgCancelPayment(t,e){return this.http.post(`/v1/pg/orders/${encodeURIComponent(t)}/cancel`,e)}pgSyncPaymentStatus(t,e){return this.http.post(`/v1/pg/orders/${encodeURIComponent(t)}/sync`,e)}pgWebhook(t){return this.http.post("/v1/pg/webhook",t,!1)}pgGetClientConfig(){return this.http.get("/v1/pg/config",!1)}}}function rt(r){return class extends r{appPushSend(t){return this.http.post("/v1/push/send",t)}appPushBroadcast(t){return this.http.post("/v1/push/broadcast",t)}appPushStatus(t){return this.http.get(`/v1/push/status/${t}`)}appPushRegisterDevice(t){return this.http.post("/v1/push/device",t)}appPushUnregisterDevice(t){return this.http.delete(`/v1/push/device/${t}`)}}}function st(r){return class extends r{smsSend(t){return this.http.post("/v1/sms/send",t)}smsStatus(t){return this.http.get(`/v1/sms/status/${t}`,!1)}smsVerificationSend(t){return this.http.post("/v1/sms/verification/send",t,!1)}smsVerificationVerify(t){return this.http.post("/v1/sms/verification/verify",t,!1)}}}function it(r){return class extends r{taxinvoiceRegistIssue(t){return this.http.post("/v1/taxinvoice",t)}taxinvoiceRegister(t){return this.http.post("/v1/taxinvoice/register",t)}taxinvoiceIssue(t){return this.http.post(`/v1/taxinvoice/${t}/issue`,{})}taxinvoiceCancelIssue(t,e){return this.http.post(`/v1/taxinvoice/${t}/cancel`,e)}taxinvoiceGetState(t){return this.http.get(`/v1/taxinvoice/${t}/state`)}taxinvoiceGetDetail(t){return this.http.get(`/v1/taxinvoice/${t}`)}}}var B=class extends J(W(st(rt(nt(it(et(tt(Z(Y(Q(X(z(V(N(D(P)))))))))))))))){};var Un=new P,In=new B;export{D as AccountAppMixin,K as AdminMixin,U as AuthMixin,N as BoardMixin,V as EmailVerifyMixin,B as EntityAppServerApi,I as EntityMixin,P as EntityServerApi,G as FileMixin,Q as OAuthMixin,_t as PACKET_HKDF_SALT,Bt as PACKET_INFO_LABEL,E as PACKET_KEY_SIZE,q as PACKET_MAGIC_MIN,M as PACKET_MAGIC_RANGE,g as PACKET_NONCE_SIZE,St as PACKET_TAG_SIZE,z as PasswordResetMixin,F as PushMixin,L as SmtpMixin,H as TransactionMixin,X as TwoFactorMixin,j as UtilsMixin,pt as decryptPacket,lt as derivePacketKey,ht as encryptPacket,In as entityAppServer,Un as entityServer,dt as packetMagicLenFromKey};
2
2
  //# sourceMappingURL=index.js.map