entity-client 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EntityAppServerApi.d.ts +16 -0
- package/dist/EntityServerApi.d.ts +9 -1
- package/dist/client/base.d.ts +1 -0
- package/dist/client/base.js +1 -1
- package/dist/client/base.js.map +2 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/mixins/app/plugins/alimtalk.d.ts +1 -0
- package/dist/mixins/app/plugins/friendtalk.d.ts +1 -0
- package/dist/mixins/app/plugins/holidays.d.ts +1 -0
- package/dist/mixins/app/plugins/identity.d.ts +1 -0
- package/dist/mixins/app/plugins/llm.d.ts +1 -0
- package/dist/mixins/app/plugins/ocr.d.ts +1 -0
- package/dist/mixins/app/plugins/pg.d.ts +1 -0
- package/dist/mixins/app/plugins/push.d.ts +1 -0
- package/dist/mixins/app/plugins/sms.d.ts +1 -0
- package/dist/mixins/app/plugins/taxinvoice.d.ts +1 -0
- package/dist/mixins/app/routes/account.d.ts +1 -0
- package/dist/mixins/app/routes/board.d.ts +1 -0
- package/dist/mixins/app/routes/email-verify.d.ts +1 -0
- package/dist/mixins/app/routes/oauth.d.ts +1 -0
- package/dist/mixins/app/routes/password-reset.d.ts +1 -0
- package/dist/mixins/app/routes/two-factor.d.ts +1 -0
- package/dist/mixins/server/admin.d.ts +1 -0
- package/dist/mixins/server/auth.d.ts +3 -1
- package/dist/mixins/server/auth.js +1 -1
- package/dist/mixins/server/auth.js.map +3 -3
- package/dist/mixins/server/entity.d.ts +1 -0
- package/dist/mixins/server/file.d.ts +1 -0
- package/dist/mixins/server/push.d.ts +1 -0
- package/dist/mixins/server/smtp.d.ts +1 -0
- package/dist/mixins/server/transaction.d.ts +1 -0
- package/dist/mixins/server/utils.d.ts +1 -0
- package/dist/react.js +1 -1
- package/dist/react.js.map +3 -3
- package/dist/types.d.ts +7 -0
- package/package.json +1 -1
|
@@ -20,6 +20,7 @@ declare const EntityAppServerApi_base: {
|
|
|
20
20
|
refreshBuffer: number;
|
|
21
21
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
22
22
|
onSessionExpired?: (error: Error) => void;
|
|
23
|
+
onHealthChange?: (online: boolean) => void;
|
|
23
24
|
_sessionRefreshToken: string | null;
|
|
24
25
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
25
26
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -75,6 +76,7 @@ declare const EntityAppServerApi_base: {
|
|
|
75
76
|
refreshBuffer: number;
|
|
76
77
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
77
78
|
onSessionExpired?: (error: Error) => void;
|
|
79
|
+
onHealthChange?: (online: boolean) => void;
|
|
78
80
|
_sessionRefreshToken: string | null;
|
|
79
81
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
80
82
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -133,6 +135,7 @@ declare const EntityAppServerApi_base: {
|
|
|
133
135
|
refreshBuffer: number;
|
|
134
136
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
135
137
|
onSessionExpired?: (error: Error) => void;
|
|
138
|
+
onHealthChange?: (online: boolean) => void;
|
|
136
139
|
_sessionRefreshToken: string | null;
|
|
137
140
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
138
141
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -192,6 +195,7 @@ declare const EntityAppServerApi_base: {
|
|
|
192
195
|
refreshBuffer: number;
|
|
193
196
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
194
197
|
onSessionExpired?: (error: Error) => void;
|
|
198
|
+
onHealthChange?: (online: boolean) => void;
|
|
195
199
|
_sessionRefreshToken: string | null;
|
|
196
200
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
197
201
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -253,6 +257,7 @@ declare const EntityAppServerApi_base: {
|
|
|
253
257
|
refreshBuffer: number;
|
|
254
258
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
255
259
|
onSessionExpired?: (error: Error) => void;
|
|
260
|
+
onHealthChange?: (online: boolean) => void;
|
|
256
261
|
_sessionRefreshToken: string | null;
|
|
257
262
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
258
263
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -313,6 +318,7 @@ declare const EntityAppServerApi_base: {
|
|
|
313
318
|
refreshBuffer: number;
|
|
314
319
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
315
320
|
onSessionExpired?: (error: Error) => void;
|
|
321
|
+
onHealthChange?: (online: boolean) => void;
|
|
316
322
|
_sessionRefreshToken: string | null;
|
|
317
323
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
318
324
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -375,6 +381,7 @@ declare const EntityAppServerApi_base: {
|
|
|
375
381
|
refreshBuffer: number;
|
|
376
382
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
377
383
|
onSessionExpired?: (error: Error) => void;
|
|
384
|
+
onHealthChange?: (online: boolean) => void;
|
|
378
385
|
_sessionRefreshToken: string | null;
|
|
379
386
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
380
387
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -464,6 +471,7 @@ declare const EntityAppServerApi_base: {
|
|
|
464
471
|
refreshBuffer: number;
|
|
465
472
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
466
473
|
onSessionExpired?: (error: Error) => void;
|
|
474
|
+
onHealthChange?: (online: boolean) => void;
|
|
467
475
|
_sessionRefreshToken: string | null;
|
|
468
476
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
469
477
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -522,6 +530,7 @@ declare const EntityAppServerApi_base: {
|
|
|
522
530
|
refreshBuffer: number;
|
|
523
531
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
524
532
|
onSessionExpired?: (error: Error) => void;
|
|
533
|
+
onHealthChange?: (online: boolean) => void;
|
|
525
534
|
_sessionRefreshToken: string | null;
|
|
526
535
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
527
536
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -583,6 +592,7 @@ declare const EntityAppServerApi_base: {
|
|
|
583
592
|
refreshBuffer: number;
|
|
584
593
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
585
594
|
onSessionExpired?: (error: Error) => void;
|
|
595
|
+
onHealthChange?: (online: boolean) => void;
|
|
586
596
|
_sessionRefreshToken: string | null;
|
|
587
597
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
588
598
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -643,6 +653,7 @@ declare const EntityAppServerApi_base: {
|
|
|
643
653
|
refreshBuffer: number;
|
|
644
654
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
645
655
|
onSessionExpired?: (error: Error) => void;
|
|
656
|
+
onHealthChange?: (online: boolean) => void;
|
|
646
657
|
_sessionRefreshToken: string | null;
|
|
647
658
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
648
659
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -704,6 +715,7 @@ declare const EntityAppServerApi_base: {
|
|
|
704
715
|
refreshBuffer: number;
|
|
705
716
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
706
717
|
onSessionExpired?: (error: Error) => void;
|
|
718
|
+
onHealthChange?: (online: boolean) => void;
|
|
707
719
|
_sessionRefreshToken: string | null;
|
|
708
720
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
709
721
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -763,6 +775,7 @@ declare const EntityAppServerApi_base: {
|
|
|
763
775
|
refreshBuffer: number;
|
|
764
776
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
765
777
|
onSessionExpired?: (error: Error) => void;
|
|
778
|
+
onHealthChange?: (online: boolean) => void;
|
|
766
779
|
_sessionRefreshToken: string | null;
|
|
767
780
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
768
781
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -822,6 +835,7 @@ declare const EntityAppServerApi_base: {
|
|
|
822
835
|
refreshBuffer: number;
|
|
823
836
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
824
837
|
onSessionExpired?: (error: Error) => void;
|
|
838
|
+
onHealthChange?: (online: boolean) => void;
|
|
825
839
|
_sessionRefreshToken: string | null;
|
|
826
840
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
827
841
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -909,6 +923,7 @@ declare const EntityAppServerApi_base: {
|
|
|
909
923
|
refreshBuffer: number;
|
|
910
924
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
911
925
|
onSessionExpired?: (error: Error) => void;
|
|
926
|
+
onHealthChange?: (online: boolean) => void;
|
|
912
927
|
_sessionRefreshToken: string | null;
|
|
913
928
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
914
929
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -973,6 +988,7 @@ declare const EntityAppServerApi_base: {
|
|
|
973
988
|
refreshBuffer: number;
|
|
974
989
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
975
990
|
onSessionExpired?: (error: Error) => void;
|
|
991
|
+
onHealthChange?: (online: boolean) => void;
|
|
976
992
|
_sessionRefreshToken: string | null;
|
|
977
993
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
978
994
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -51,6 +51,7 @@ declare const EntityServerApi_base: {
|
|
|
51
51
|
refreshBuffer: number;
|
|
52
52
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
53
53
|
onSessionExpired?: (error: Error) => void;
|
|
54
|
+
onHealthChange?: (online: boolean) => void;
|
|
54
55
|
_sessionRefreshToken: string | null;
|
|
55
56
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
56
57
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -108,6 +109,7 @@ declare const EntityServerApi_base: {
|
|
|
108
109
|
refreshBuffer: number;
|
|
109
110
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
110
111
|
onSessionExpired?: (error: Error) => void;
|
|
112
|
+
onHealthChange?: (online: boolean) => void;
|
|
111
113
|
_sessionRefreshToken: string | null;
|
|
112
114
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
113
115
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -194,6 +196,7 @@ declare const EntityServerApi_base: {
|
|
|
194
196
|
refreshBuffer: number;
|
|
195
197
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
196
198
|
onSessionExpired?: (error: Error) => void;
|
|
199
|
+
onHealthChange?: (online: boolean) => void;
|
|
197
200
|
_sessionRefreshToken: string | null;
|
|
198
201
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
199
202
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -257,6 +260,7 @@ declare const EntityServerApi_base: {
|
|
|
257
260
|
refreshBuffer: number;
|
|
258
261
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
259
262
|
onSessionExpired?: (error: Error) => void;
|
|
263
|
+
onHealthChange?: (online: boolean) => void;
|
|
260
264
|
_sessionRefreshToken: string | null;
|
|
261
265
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
262
266
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -338,6 +342,7 @@ declare const EntityServerApi_base: {
|
|
|
338
342
|
refreshBuffer: number;
|
|
339
343
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
340
344
|
onSessionExpired?: (error: Error) => void;
|
|
345
|
+
onHealthChange?: (online: boolean) => void;
|
|
341
346
|
_sessionRefreshToken: string | null;
|
|
342
347
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
343
348
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -454,6 +459,7 @@ declare const EntityServerApi_base: {
|
|
|
454
459
|
refreshBuffer: number;
|
|
455
460
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
456
461
|
onSessionExpired?: (error: Error) => void;
|
|
462
|
+
onHealthChange?: (online: boolean) => void;
|
|
457
463
|
_sessionRefreshToken: string | null;
|
|
458
464
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
459
465
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -574,6 +580,7 @@ declare const EntityServerApi_base: {
|
|
|
574
580
|
refreshBuffer: number;
|
|
575
581
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
576
582
|
onSessionExpired?: (error: Error) => void;
|
|
583
|
+
onHealthChange?: (online: boolean) => void;
|
|
577
584
|
_sessionRefreshToken: string | null;
|
|
578
585
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
579
586
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
@@ -616,8 +623,8 @@ declare const EntityServerApi_base: {
|
|
|
616
623
|
_csrfRefresher: () => Promise<void>;
|
|
617
624
|
checkHealth(): Promise<{
|
|
618
625
|
status: string;
|
|
619
|
-
packet_token?: string;
|
|
620
626
|
}>;
|
|
627
|
+
_readCookie(name: string): string | null;
|
|
621
628
|
login(email: string, password: string): Promise<{
|
|
622
629
|
access_token: string;
|
|
623
630
|
refresh_token: string;
|
|
@@ -654,6 +661,7 @@ declare const EntityServerApi_base: {
|
|
|
654
661
|
refreshBuffer: number;
|
|
655
662
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
656
663
|
onSessionExpired?: (error: Error) => void;
|
|
664
|
+
onHealthChange?: (online: boolean) => void;
|
|
657
665
|
_sessionRefreshToken: string | null;
|
|
658
666
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
659
667
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
package/dist/client/base.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ export declare class EntityServerClientBase {
|
|
|
18
18
|
refreshBuffer: number;
|
|
19
19
|
onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
|
|
20
20
|
onSessionExpired?: (error: Error) => void;
|
|
21
|
+
onHealthChange?: (online: boolean) => void;
|
|
21
22
|
_sessionRefreshToken: string | null;
|
|
22
23
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
23
24
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
package/dist/client/base.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{readEnv as c}from"./utils.js";import{derivePacketKey as f,parseRequestBody as
|
|
1
|
+
import{readEnv as c}from"./utils.js";import{derivePacketKey as f,parseRequestBody as l}from"./packet.js";import{entityRequest as h}from"./request.js";class y{baseUrl;token;anonymousPacketToken;apiKey;hmacSecret;encryptRequests;csrfEnabled;csrfHeaderName;csrfCookieName;_csrfRefresher=null;activeTxId=null;keepSession;refreshBuffer;onTokenRefreshed;onSessionExpired;onHealthChange;_sessionRefreshToken=null;_refreshTimer=null;_healthTickTimer=null;_healthTickPromise=null;constructor(e={}){const r=c("VITE_ENTITY_SERVER_URL");this.baseUrl=(e.baseUrl??r??"").replace(/\/$/,""),this.token=e.token??"",this.anonymousPacketToken=e.anonymousPacketToken??"",this.apiKey=e.apiKey??"",this.hmacSecret=e.hmacSecret??"",this.encryptRequests=e.encryptRequests??!1,this.csrfEnabled=e.csrfEnabled??!1,this.csrfHeaderName=e.csrfHeaderName??"x-csrf-token",this.csrfCookieName=e.csrfCookieName??"_csrf",this.keepSession=e.keepSession??!1,this.refreshBuffer=e.refreshBuffer??60,this.onTokenRefreshed=e.onTokenRefreshed,this.onSessionExpired=e.onSessionExpired,this.onHealthChange=e.onHealthChange,typeof e.healthTickInterval=="number"&&e.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(e.healthTickInterval))}configure(e){typeof e.baseUrl=="string"&&(this.baseUrl=e.baseUrl.replace(/\/$/,"")),typeof e.token=="string"&&(this.token=e.token),typeof e.anonymousPacketToken=="string"&&(this.anonymousPacketToken=e.anonymousPacketToken),typeof e.encryptRequests=="boolean"&&(this.encryptRequests=e.encryptRequests),typeof e.csrfEnabled=="boolean"&&(this.csrfEnabled=e.csrfEnabled),typeof e.csrfHeaderName=="string"&&(this.csrfHeaderName=e.csrfHeaderName),typeof e.csrfCookieName=="string"&&(this.csrfCookieName=e.csrfCookieName),typeof e.apiKey=="string"&&(this.apiKey=e.apiKey),typeof e.hmacSecret=="string"&&(this.hmacSecret=e.hmacSecret),typeof e.keepSession=="boolean"&&(this.keepSession=e.keepSession),typeof e.refreshBuffer=="number"&&(this.refreshBuffer=e.refreshBuffer),e.onTokenRefreshed&&(this.onTokenRefreshed=e.onTokenRefreshed),e.onSessionExpired&&(this.onSessionExpired=e.onSessionExpired),e.onHealthChange&&(this.onHealthChange=e.onHealthChange),typeof e.healthTickInterval=="number"&&e.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(e.healthTickInterval))}setToken(e){this.token=e}setAnonymousPacketToken(e){this.anonymousPacketToken=e}setApiKey(e){this.apiKey=e}setHmacSecret(e){this.hmacSecret=e}setEncryptRequests(e){this.encryptRequests=e}setCsrfEnabled(e){this.csrfEnabled=e}startHealthTick(e=300*1e3){this.stopHealthTick();const r=()=>{this._healthTickPromise||(this._healthTickPromise=(this._csrfRefresher?this._csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this._healthTickPromise=null}))};r(),this._healthTickTimer=setInterval(r,e)}stopHealthTick(){this._healthTickTimer!==null&&(clearInterval(this._healthTickTimer),this._healthTickTimer=null),this._healthTickPromise=null}_scheduleKeepSession(e,r,t){this._clearRefreshTimer(),this._sessionRefreshToken=e;const i=Math.max((r-this.refreshBuffer)*1e3,0);this._refreshTimer=setTimeout(async()=>{if(this._sessionRefreshToken)try{const s=await t(this._sessionRefreshToken);this.onTokenRefreshed?.(s.access_token,s.expires_in),this._scheduleKeepSession(this._sessionRefreshToken,s.expires_in,t)}catch(s){this._clearRefreshTimer(),this.onSessionExpired?.(s instanceof Error?s:new Error(String(s)))}},i)}_clearRefreshTimer(){this._refreshTimer!==null&&(clearTimeout(this._refreshTimer),this._refreshTimer=null)}stopKeepSession(){this._clearRefreshTimer(),this._sessionRefreshToken=null}_applyCsrfHealth(){if(!(typeof document>"u")){for(const e of document.cookie.split(";")){const r=e.indexOf("=");if(!(r<0)&&e.substring(0,r).trim()===this.csrfCookieName){this.csrfEnabled=!!e.substring(r+1).trim();return}}this.csrfEnabled=!1}}readRequestBody(e,r="application/json",t=!1){const i=f(this.hmacSecret,this.token||this.anonymousPacketToken);return l(e,r,t,i)}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(){const e=this;return{get(r,t=!0,i){return h(e._reqOpts,"GET",r,void 0,t,i,!1)},post(r,t,i=!0,s){return h(e._reqOpts,"POST",r,t,i,s,!1)},put(r,t,i=!0,s){return h(e._reqOpts,"PUT",r,t,i,s,!1)},patch(r,t,i=!0,s){return h(e._reqOpts,"PATCH",r,t,i,s,!1)},delete(r,t,i=!0,s){return h(e._reqOpts,"DELETE",r,t,i,s,!1)}}}requestBinary(e,r,t,i=!0){return this._requestBinary(e,r,t,i)}requestForm(e,r,t,i=!0){return this._requestForm(e,r,t,i)}requestFormBinary(e,r,t,i=!0){return this._requestFormBinary(e,r,t,i)}_request(e,r,t,i=!0,s){return h(this._reqOpts,e,r,t,i,s,!0)}async _requestBinary(e,r,t,i=!0){const s={"Content-Type":"application/json"};i&&this.token&&(s.Authorization=`Bearer ${this.token}`),this.apiKey&&(s["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+r,{method:e,headers:s,...t!=null?{body:JSON.stringify(t)}:{},credentials:"include"});if(!n.ok){const o=await n.text(),a=new Error(`HTTP ${n.status}: ${o}`);throw a.status=n.status,a}return n.arrayBuffer()}async _requestForm(e,r,t,i=!0){const s={};i&&this.token&&(s.Authorization=`Bearer ${this.token}`),this.apiKey&&(s["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+r,{method:e,headers:s,body:t,credentials:"include"}),o=await n.json();if(!o.ok){const a=new Error(o.message??`EntityServer error (HTTP ${n.status})`);throw a.status=n.status,a}return o}async _requestFormBinary(e,r,t,i=!0){const s={};i&&this.token&&(s.Authorization=`Bearer ${this.token}`),this.apiKey&&(s["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+r,{method:e,headers:s,body:t,credentials:"include"});if(!n.ok){const o=await n.text(),a=new Error(`HTTP ${n.status}: ${o}`);throw a.status=n.status,a}return n.arrayBuffer()}}export{y as EntityServerClientBase};
|
|
2
2
|
//# sourceMappingURL=base.js.map
|
package/dist/client/base.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/client/base.ts"],
|
|
4
|
-
"sourcesContent": ["import type { EntityServerClientOptions } from \"../types.js\";\nimport { readEnv } from \"./utils.js\";\nimport { derivePacketKey, parseRequestBody } from \"./packet.js\";\nimport { entityRequest, type RequestOptions } from \"./request.js\";\n\n// mixin \uD5EC\uD37C \uD0C0\uC785\nexport type GConstructor<T = object> = new (...args: any[]) => T;\n\nexport class EntityServerClientBase {\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 /** @internal health \uC7AC\uD638\uCD9C\uB85C CSRF \uCFE0\uD0A4 \uAC31\uC2E0 (AuthMixin\uC5D0\uC11C \uC124\uC815) */\n _csrfRefresher: (() => Promise<void>) | null = null;\n activeTxId: string | null = null;\n\n // \uC138\uC158 \uC720\uC9C0 \uAD00\uB828\n keepSession: boolean;\n refreshBuffer: number;\n onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;\n onSessionExpired?: (error: Error) => void;\n _sessionRefreshToken: string | null = null;\n _refreshTimer: ReturnType<typeof setTimeout> | null = null;\n _healthTickTimer: ReturnType<typeof setInterval> | null = null;\n _healthTickPromise: Promise<unknown> | null = null;\n // \u2500\u2500\u2500 \uCD08\uAE30\uD654 & \uC124\uC815 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * EntityServerClient \uC778\uC2A4\uD134\uC2A4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n *\n * \uAE30\uBCF8\uAC12:\n * - `baseUrl`: `VITE_ENTITY_SERVER_URL` \uB610\uB294 \uC0C1\uB300 \uACBD\uB85C(`\"\"`)\n */\n constructor(options: EntityServerClientOptions = {}) {\n const envBaseUrl = readEnv(\"VITE_ENTITY_SERVER_URL\");\n\n this.baseUrl = (options.baseUrl ?? envBaseUrl ?? \"\").replace(/\\/$/, \"\");\n this.token = options.token ?? \"\";\n this.anonymousPacketToken = options.anonymousPacketToken ?? \"\";\n this.apiKey = options.apiKey ?? \"\";\n this.hmacSecret = options.hmacSecret ?? \"\";\n this.encryptRequests = options.encryptRequests ?? false;\n this.csrfEnabled = options.csrfEnabled ?? false;\n this.csrfHeaderName = options.csrfHeaderName ?? \"x-csrf-token\";\n this.csrfCookieName = options.csrfCookieName ?? \"_csrf\";\n this.keepSession = options.keepSession ?? false;\n this.refreshBuffer = options.refreshBuffer ?? 60;\n this.onTokenRefreshed = options.onTokenRefreshed;\n this.onSessionExpired = options.onSessionExpired;\n if (typeof options.healthTickInterval === \"number\" && options.healthTickInterval > 0) {\n // _csrfRefresher\uB294 AuthMixin\uC5D0\uC11C \uC124\uC815\uB418\uBBC0\uB85C \uB2E4\uC74C tick\uC5D0 \uC2DC\uC791\n Promise.resolve().then(() => this.startHealthTick(options.healthTickInterval));\n }\n }\n\n /** baseUrl, token, encryptRequests \uAC12\uC744 \uB7F0\uD0C0\uC784\uC5D0 \uAC31\uC2E0\uD569\uB2C8\uB2E4. */\n configure(options: Partial<EntityServerClientOptions>): void {\n if (typeof options.baseUrl === \"string\") {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n }\n if (typeof options.token === \"string\") this.token = options.token;\n if (typeof options.anonymousPacketToken === \"string\") {\n this.anonymousPacketToken = options.anonymousPacketToken;\n }\n if (typeof options.encryptRequests === \"boolean\")\n this.encryptRequests = options.encryptRequests;\n if (typeof options.csrfEnabled === \"boolean\") {\n this.csrfEnabled = options.csrfEnabled;\n }\n if (typeof options.csrfHeaderName === \"string\") {\n this.csrfHeaderName = options.csrfHeaderName;\n }\n if (typeof options.csrfCookieName === \"string\") {\n this.csrfCookieName = options.csrfCookieName;\n }\n if (typeof options.apiKey === \"string\") this.apiKey = options.apiKey;\n if (typeof options.hmacSecret === \"string\")\n this.hmacSecret = options.hmacSecret;\n if (typeof options.keepSession === \"boolean\")\n this.keepSession = options.keepSession;\n if (typeof options.refreshBuffer === \"number\")\n this.refreshBuffer = options.refreshBuffer;\n if (options.onTokenRefreshed)\n this.onTokenRefreshed = options.onTokenRefreshed;\n if (options.onSessionExpired)\n this.onSessionExpired = options.onSessionExpired;\n if (typeof options.healthTickInterval === \"number\" && options.healthTickInterval > 0) {\n Promise.resolve().then(() => this.startHealthTick(options.healthTickInterval));\n }\n }\n\n /** \uC778\uC99D \uC694\uCCAD\uC5D0 \uC0AC\uC6A9\uD560 JWT Access Token\uC744 \uC124\uC815\uD569\uB2C8\uB2E4. */\n setToken(token: string): void {\n this.token = token;\n }\n\n /** \uC775\uBA85 \uD328\uD0B7 \uC554\uD638\uD654\uC6A9 \uD1A0\uD070\uC744 \uC124\uC815\uD569\uB2C8\uB2E4. */\n setAnonymousPacketToken(token: string): void {\n this.anonymousPacketToken = token;\n }\n\n /** HMAC \uC778\uC99D\uC6A9 API Key\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. */\n setApiKey(apiKey: string): void {\n this.apiKey = apiKey;\n }\n\n /** HMAC \uC778\uC99D\uC6A9 \uC2DC\uD06C\uB9BF\uC744 \uC124\uC815\uD569\uB2C8\uB2E4. */\n setHmacSecret(secret: string): void {\n this.hmacSecret = secret;\n }\n\n /** \uC554\uD638\uD654 \uC694\uCCAD \uD65C\uC131\uD654 \uC5EC\uBD80\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. */\n setEncryptRequests(value: boolean): void {\n this.encryptRequests = value;\n }\n\n setCsrfEnabled(enabled: boolean): void {\n this.csrfEnabled = enabled;\n }\n\n /**\n * \uC8FC\uAE30\uC801\uC73C\uB85C health \uCCB4\uD06C\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n * CSRF \uCFE0\uD0A4 \uAC31\uC2E0\uACFC \uC11C\uBC84 \uC0C1\uD0DC \uD655\uC778\uC744 \uC790\uB3D9\uD654\uD569\uB2C8\uB2E4.\n *\n * @param intervalMs \uD638\uCD9C \uC8FC\uAE30(ms). \uAE30\uBCF8\uAC12: 5\uBD84\n */\n startHealthTick(intervalMs: number = 5 * 60 * 1000): void {\n this.stopHealthTick();\n const tick = (): void => {\n if (this._healthTickPromise) return;\n this._healthTickPromise = (this._csrfRefresher ? this._csrfRefresher() : Promise.resolve())\n .catch(() => {/* \uB124\uD2B8\uC6CC\uD06C \uC624\uB958 \uBB34\uC2DC */})\n .finally(() => { this._healthTickPromise = null; });\n };\n tick(); // \uC989\uC2DC 1\uD68C \uC2E4\uD589\n this._healthTickTimer = setInterval(tick, intervalMs);\n }\n\n /** health tick \uD0C0\uC774\uBA38\uB97C \uC911\uC9C0\uD569\uB2C8\uB2E4. */\n stopHealthTick(): void {\n if (this._healthTickTimer !== null) {\n clearInterval(this._healthTickTimer);\n this._healthTickTimer = null;\n }\n this._healthTickPromise = null;\n }\n\n // \u2500\u2500\u2500 \uC138\uC158 \uC720\uC9C0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /** @internal \uC790\uB3D9 \uD1A0\uD070 \uAC31\uC2E0 \uD0C0\uC774\uBA38\uB97C \uC2DC\uC791\uD569\uB2C8\uB2E4. */\n _scheduleKeepSession(\n refreshToken: string,\n expiresIn: number,\n refreshFn: (\n rt: string,\n ) => Promise<{ access_token: string; expires_in: number }>,\n ): void {\n this._clearRefreshTimer();\n this._sessionRefreshToken = refreshToken;\n const delayMs = Math.max((expiresIn - this.refreshBuffer) * 1000, 0);\n this._refreshTimer = setTimeout(async () => {\n if (!this._sessionRefreshToken) return;\n try {\n const result = await refreshFn(this._sessionRefreshToken);\n this.onTokenRefreshed?.(result.access_token, result.expires_in);\n this._scheduleKeepSession(\n this._sessionRefreshToken,\n result.expires_in,\n refreshFn,\n );\n } catch (err) {\n this._clearRefreshTimer();\n this.onSessionExpired?.(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }, delayMs);\n }\n\n /** @internal \uC790\uB3D9 \uAC31\uC2E0 \uD0C0\uC774\uBA38\uB97C \uC815\uB9AC\uD569\uB2C8\uB2E4. */\n _clearRefreshTimer(): void {\n if (this._refreshTimer !== null) {\n clearTimeout(this._refreshTimer);\n this._refreshTimer = null;\n }\n }\n\n /**\n * \uC138\uC158 \uC720\uC9C0 \uD0C0\uC774\uBA38\uB97C \uC911\uC9C0\uD569\uB2C8\uB2E4.\n * `logout()` \uD638\uCD9C \uC2DC \uC790\uB3D9\uC73C\uB85C \uC911\uC9C0\uB418\uBA70, \uC9C1\uC811 \uD638\uCD9C\uC774 \uD544\uC694\uD55C \uACBD\uC6B0\uB294 \uB4DC\uBB45\uB2C8\uB2E4.\n */\n stopKeepSession(): void {\n this._clearRefreshTimer();\n this._sessionRefreshToken = null;\n }\n\n _applyCsrfHealth(): void {\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() === this.csrfCookieName) {\n this.csrfEnabled = !!chunk.substring(idx + 1).trim();\n return;\n }\n }\n this.csrfEnabled = false;\n }\n\n // \u2500\u2500\u2500 \uC694\uCCAD \uBCF8\uBB38 \uD30C\uC2F1 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * \uC694\uCCAD \uBC14\uB514\uB97C \uD30C\uC2F1\uD569\uB2C8\uB2E4.\n * `application/octet-stream`\uC774\uBA74 XChaCha20-Poly1305 \uBCF5\uD638\uD654, \uADF8 \uC678\uB294 JSON \uD30C\uC2F1\uD569\uB2C8\uB2E4.\n *\n * @param requireEncrypted `true`\uC774\uBA74 \uC554\uD638\uD654\uB41C \uC694\uCCAD\uB9CC \uD5C8\uC6A9\uD569\uB2C8\uB2E4.\n */\n readRequestBody<T = Record<string, unknown>>(\n body: ArrayBuffer | Uint8Array | string | T | null | undefined,\n contentType = \"application/json\",\n requireEncrypted = false,\n ): T {\n const key = derivePacketKey(\n this.hmacSecret,\n this.token || this.anonymousPacketToken,\n );\n return parseRequestBody<T>(body, contentType, requireEncrypted, key);\n }\n\n // \u2500\u2500\u2500 \uB0B4\uBD80 \uD5EC\uD37C \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n get _reqOpts(): RequestOptions {\n return {\n baseUrl: this.baseUrl,\n token: this.token,\n anonymousPacketToken: this.anonymousPacketToken,\n apiKey: this.apiKey,\n hmacSecret: this.hmacSecret,\n encryptRequests: this.encryptRequests,\n csrfEnabled: this.csrfEnabled,\n csrfHeaderName: this.csrfHeaderName,\n csrfCookieName: this.csrfCookieName,\n refreshCsrfCookie: this.csrfEnabled ? this._csrfRefresher : null,\n };\n }\n\n /**\n * \uCEE4\uC2A4\uD140 \uB77C\uC6B0\uD2B8 \uC9C1\uC811 \uD638\uCD9C\uC6A9 HTTP \uB124\uC784\uC2A4\uD398\uC774\uC2A4.\n * \uC778\uC99D\u00B7\uC554\uD638\uD654\u00B7HMAC \uB4F1 SDK \uC635\uC158\uC774 \uADF8\uB300\uB85C \uC801\uC6A9\uB429\uB2C8\uB2E4.\n *\n * @example\n * const res = await client.http.get<{ version: string }>(\"/api/v1/status\", false);\n * const res = await client.http.post<MyResponse>(\"/api/v1/custom\", { key: \"value\" });\n */\n get http() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n return {\n get<T>(\n path: string,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"GET\",\n path,\n undefined,\n withAuth,\n extraHeaders,\n false,\n );\n },\n post<T>(\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"POST\",\n path,\n body,\n withAuth,\n extraHeaders,\n false,\n );\n },\n put<T>(\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"PUT\",\n path,\n body,\n withAuth,\n extraHeaders,\n false,\n );\n },\n patch<T>(\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"PATCH\",\n path,\n body,\n withAuth,\n extraHeaders,\n false,\n );\n },\n delete<T>(\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"DELETE\",\n path,\n body,\n withAuth,\n extraHeaders,\n false,\n );\n },\n };\n }\n\n /**\n * \uC784\uC758 \uACBD\uB85C\uC5D0 \uC694\uCCAD\uC744 \uBCF4\uB0B4\uACE0 \uBC14\uC774\uB108\uB9AC(ArrayBuffer)\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.\n * \uC774\uBBF8\uC9C0, PDF, \uC555\uCD95 \uD30C\uC77C \uB4F1 \uBC14\uC774\uB108\uB9AC \uC751\uB2F5\uC774 \uC624\uB294 \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uC5D0 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n */\n requestBinary(\n method: string,\n path: string,\n body?: unknown,\n withAuth = true,\n ): Promise<ArrayBuffer> {\n return this._requestBinary(method, path, body, withAuth);\n }\n\n /**\n * multipart/form-data \uC694\uCCAD\uC744 \uBCF4\uB0C5\uB2C8\uB2E4. \uD30C\uC77C \uC5C5\uB85C\uB4DC \uB4F1\uC5D0 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n * \uC751\uB2F5\uC740 JSON\uC73C\uB85C \uD30C\uC2F1\uD558\uC5EC \uBC18\uD658\uD569\uB2C8\uB2E4.\n */\n requestForm<T>(\n method: string,\n path: string,\n form: FormData,\n withAuth = true,\n ): Promise<T> {\n return this._requestForm<T>(method, path, form, withAuth);\n }\n\n /**\n * multipart/form-data \uC694\uCCAD\uC744 \uBCF4\uB0B4\uACE0 \uBC14\uC774\uB108\uB9AC(ArrayBuffer)\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.\n */\n requestFormBinary(\n method: string,\n path: string,\n form: FormData,\n withAuth = true,\n ): Promise<ArrayBuffer> {\n return this._requestFormBinary(method, path, form, withAuth);\n }\n\n _request<T>(\n method: string,\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n this._reqOpts,\n method,\n path,\n body,\n withAuth,\n extraHeaders,\n true,\n );\n }\n\n /** PNG/\uBC14\uC774\uB108\uB9AC \uC751\uB2F5\uC744 ArrayBuffer\uB85C \uBC18\uD658\uD569\uB2C8\uB2E4. (QR, \uBC14\uCF54\uB4DC \uB4F1) */\n async _requestBinary(\n method: string,\n path: string,\n body?: unknown,\n withAuth = true,\n ): Promise<ArrayBuffer> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (withAuth && this.token)\n headers[\"Authorization\"] = `Bearer ${this.token}`;\n if (this.apiKey) headers[\"X-API-Key\"] = this.apiKey;\n\n const res = await fetch(this.baseUrl + path, {\n method,\n headers,\n ...(body != null ? { body: JSON.stringify(body) } : {}),\n credentials: \"include\",\n });\n\n if (!res.ok) {\n const text = await res.text();\n const err = new Error(`HTTP ${res.status}: ${text}`);\n (err as { status?: number }).status = res.status;\n throw err;\n }\n\n return res.arrayBuffer();\n }\n\n /** multipart/form-data \uC694\uCCAD\uC744 \uBCF4\uB0C5\uB2C8\uB2E4. (\uD30C\uC77C \uC5C5\uB85C\uB4DC \uB4F1) */\n async _requestForm<T>(\n method: string,\n path: string,\n form: FormData,\n withAuth = true,\n ): Promise<T> {\n const headers: Record<string, string> = {};\n if (withAuth && this.token)\n headers[\"Authorization\"] = `Bearer ${this.token}`;\n if (this.apiKey) headers[\"X-API-Key\"] = this.apiKey;\n\n const res = await fetch(this.baseUrl + path, {\n method,\n headers,\n body: form,\n credentials: \"include\",\n });\n\n const data = (await res.json()) as { ok?: boolean; message?: string };\n if (!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 return data as T;\n }\n\n /** multipart/form-data \uC694\uCCAD\uC744 \uBCF4\uB0B4\uACE0 \uBC14\uC774\uB108\uB9AC(ArrayBuffer)\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. */\n async _requestFormBinary(\n method: string,\n path: string,\n form: FormData,\n withAuth = true,\n ): Promise<ArrayBuffer> {\n const headers: Record<string, string> = {};\n if (withAuth && this.token)\n headers[\"Authorization\"] = `Bearer ${this.token}`;\n if (this.apiKey) headers[\"X-API-Key\"] = this.apiKey;\n\n const res = await fetch(this.baseUrl + path, {\n method,\n headers,\n body: form,\n credentials: \"include\",\n });\n\n if (!res.ok) {\n const text = await res.text();\n const err = new Error(`HTTP ${res.status}: ${text}`);\n (err as { status?: number }).status = res.status;\n throw err;\n }\n\n return res.arrayBuffer();\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA,OAAS,WAAAA,MAAe,aACxB,OAAS,mBAAAC,EAAiB,oBAAAC,MAAwB,cAClD,OAAS,iBAAAC,MAA0C,eAK5C,MAAMC,CAAuB,CAChC,QACA,MACA,qBACA,OACA,WACA,gBACA,YACA,eACA,eAEA,eAA+C,KAC/C,WAA4B,KAG5B,YACA,cACA,iBACA,iBACA,qBAAsC,KACtC,cAAsD,KACtD,iBAA0D,KAC1D,mBAA8C,KAS9C,YAAYC,EAAqC,CAAC,EAAG,CACjD,MAAMC,EAAaN,EAAQ,wBAAwB,EAEnD,KAAK,SAAWK,EAAQ,SAAWC,GAAc,IAAI,QAAQ,MAAO,EAAE,EACtE,KAAK,MAAQD,EAAQ,OAAS,GAC9B,KAAK,qBAAuBA,EAAQ,sBAAwB,GAC5D,KAAK,OAASA,EAAQ,QAAU,GAChC,KAAK,WAAaA,EAAQ,YAAc,GACxC,KAAK,gBAAkBA,EAAQ,iBAAmB,GAClD,KAAK,YAAcA,EAAQ,aAAe,GAC1C,KAAK,eAAiBA,EAAQ,gBAAkB,eAChD,KAAK,eAAiBA,EAAQ,gBAAkB,QAChD,KAAK,YAAcA,EAAQ,aAAe,GAC1C,KAAK,cAAgBA,EAAQ,eAAiB,GAC9C,KAAK,iBAAmBA,EAAQ,iBAChC,KAAK,iBAAmBA,EAAQ,
|
|
4
|
+
"sourcesContent": ["import type { EntityServerClientOptions } from \"../types.js\";\nimport { readEnv } from \"./utils.js\";\nimport { derivePacketKey, parseRequestBody } from \"./packet.js\";\nimport { entityRequest, type RequestOptions } from \"./request.js\";\n\n// mixin \uD5EC\uD37C \uD0C0\uC785\nexport type GConstructor<T = object> = new (...args: any[]) => T;\n\nexport class EntityServerClientBase {\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 /** @internal health \uC7AC\uD638\uCD9C\uB85C CSRF \uCFE0\uD0A4 \uAC31\uC2E0 (AuthMixin\uC5D0\uC11C \uC124\uC815) */\n _csrfRefresher: (() => Promise<void>) | null = null;\n activeTxId: string | null = null;\n\n // \uC138\uC158 \uC720\uC9C0 \uAD00\uB828\n keepSession: boolean;\n refreshBuffer: number;\n onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;\n onSessionExpired?: (error: Error) => void;\n onHealthChange?: (online: boolean) => void;\n _sessionRefreshToken: string | null = null;\n _refreshTimer: ReturnType<typeof setTimeout> | null = null;\n _healthTickTimer: ReturnType<typeof setInterval> | null = null;\n _healthTickPromise: Promise<unknown> | null = null;\n // \u2500\u2500\u2500 \uCD08\uAE30\uD654 & \uC124\uC815 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * EntityServerClient \uC778\uC2A4\uD134\uC2A4\uB97C \uC0DD\uC131\uD569\uB2C8\uB2E4.\n *\n * \uAE30\uBCF8\uAC12:\n * - `baseUrl`: `VITE_ENTITY_SERVER_URL` \uB610\uB294 \uC0C1\uB300 \uACBD\uB85C(`\"\"`)\n */\n constructor(options: EntityServerClientOptions = {}) {\n const envBaseUrl = readEnv(\"VITE_ENTITY_SERVER_URL\");\n\n this.baseUrl = (options.baseUrl ?? envBaseUrl ?? \"\").replace(/\\/$/, \"\");\n this.token = options.token ?? \"\";\n this.anonymousPacketToken = options.anonymousPacketToken ?? \"\";\n this.apiKey = options.apiKey ?? \"\";\n this.hmacSecret = options.hmacSecret ?? \"\";\n this.encryptRequests = options.encryptRequests ?? false;\n this.csrfEnabled = options.csrfEnabled ?? false;\n this.csrfHeaderName = options.csrfHeaderName ?? \"x-csrf-token\";\n this.csrfCookieName = options.csrfCookieName ?? \"_csrf\";\n this.keepSession = options.keepSession ?? false;\n this.refreshBuffer = options.refreshBuffer ?? 60;\n this.onTokenRefreshed = options.onTokenRefreshed;\n this.onSessionExpired = options.onSessionExpired;\n this.onHealthChange = options.onHealthChange;\n if (\n typeof options.healthTickInterval === \"number\" &&\n options.healthTickInterval > 0\n ) {\n // _csrfRefresher\uB294 AuthMixin\uC5D0\uC11C \uC124\uC815\uB418\uBBC0\uB85C \uB2E4\uC74C tick\uC5D0 \uC2DC\uC791\n Promise.resolve().then(() =>\n this.startHealthTick(options.healthTickInterval),\n );\n }\n }\n\n /** baseUrl, token, encryptRequests \uAC12\uC744 \uB7F0\uD0C0\uC784\uC5D0 \uAC31\uC2E0\uD569\uB2C8\uB2E4. */\n configure(options: Partial<EntityServerClientOptions>): void {\n if (typeof options.baseUrl === \"string\") {\n this.baseUrl = options.baseUrl.replace(/\\/$/, \"\");\n }\n if (typeof options.token === \"string\") this.token = options.token;\n if (typeof options.anonymousPacketToken === \"string\") {\n this.anonymousPacketToken = options.anonymousPacketToken;\n }\n if (typeof options.encryptRequests === \"boolean\")\n this.encryptRequests = options.encryptRequests;\n if (typeof options.csrfEnabled === \"boolean\") {\n this.csrfEnabled = options.csrfEnabled;\n }\n if (typeof options.csrfHeaderName === \"string\") {\n this.csrfHeaderName = options.csrfHeaderName;\n }\n if (typeof options.csrfCookieName === \"string\") {\n this.csrfCookieName = options.csrfCookieName;\n }\n if (typeof options.apiKey === \"string\") this.apiKey = options.apiKey;\n if (typeof options.hmacSecret === \"string\")\n this.hmacSecret = options.hmacSecret;\n if (typeof options.keepSession === \"boolean\")\n this.keepSession = options.keepSession;\n if (typeof options.refreshBuffer === \"number\")\n this.refreshBuffer = options.refreshBuffer;\n if (options.onTokenRefreshed)\n this.onTokenRefreshed = options.onTokenRefreshed;\n if (options.onSessionExpired)\n this.onSessionExpired = options.onSessionExpired;\n if (options.onHealthChange)\n this.onHealthChange = options.onHealthChange;\n if (\n typeof options.healthTickInterval === \"number\" &&\n options.healthTickInterval > 0\n ) {\n Promise.resolve().then(() =>\n this.startHealthTick(options.healthTickInterval),\n );\n }\n }\n\n /** \uC778\uC99D \uC694\uCCAD\uC5D0 \uC0AC\uC6A9\uD560 JWT Access Token\uC744 \uC124\uC815\uD569\uB2C8\uB2E4. */\n setToken(token: string): void {\n this.token = token;\n }\n\n /** \uC775\uBA85 \uD328\uD0B7 \uC554\uD638\uD654\uC6A9 \uD1A0\uD070\uC744 \uC124\uC815\uD569\uB2C8\uB2E4. */\n setAnonymousPacketToken(token: string): void {\n this.anonymousPacketToken = token;\n }\n\n /** HMAC \uC778\uC99D\uC6A9 API Key\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. */\n setApiKey(apiKey: string): void {\n this.apiKey = apiKey;\n }\n\n /** HMAC \uC778\uC99D\uC6A9 \uC2DC\uD06C\uB9BF\uC744 \uC124\uC815\uD569\uB2C8\uB2E4. */\n setHmacSecret(secret: string): void {\n this.hmacSecret = secret;\n }\n\n /** \uC554\uD638\uD654 \uC694\uCCAD \uD65C\uC131\uD654 \uC5EC\uBD80\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. */\n setEncryptRequests(value: boolean): void {\n this.encryptRequests = value;\n }\n\n setCsrfEnabled(enabled: boolean): void {\n this.csrfEnabled = enabled;\n }\n\n /**\n * \uC8FC\uAE30\uC801\uC73C\uB85C health \uCCB4\uD06C\uB97C \uC2E4\uD589\uD569\uB2C8\uB2E4.\n * CSRF \uCFE0\uD0A4 \uAC31\uC2E0\uACFC \uC11C\uBC84 \uC0C1\uD0DC \uD655\uC778\uC744 \uC790\uB3D9\uD654\uD569\uB2C8\uB2E4.\n *\n * @param intervalMs \uD638\uCD9C \uC8FC\uAE30(ms). \uAE30\uBCF8\uAC12: 5\uBD84\n */\n startHealthTick(intervalMs: number = 5 * 60 * 1000): void {\n this.stopHealthTick();\n const tick = (): void => {\n if (this._healthTickPromise) return;\n this._healthTickPromise = (\n this._csrfRefresher ? this._csrfRefresher() : Promise.resolve()\n )\n .then(() => {\n this.onHealthChange?.(true);\n })\n .catch(() => {\n this.onHealthChange?.(false);\n })\n .finally(() => {\n this._healthTickPromise = null;\n });\n };\n tick(); // \uC989\uC2DC 1\uD68C \uC2E4\uD589\n this._healthTickTimer = setInterval(tick, intervalMs);\n }\n\n /** health tick \uD0C0\uC774\uBA38\uB97C \uC911\uC9C0\uD569\uB2C8\uB2E4. */\n stopHealthTick(): void {\n if (this._healthTickTimer !== null) {\n clearInterval(this._healthTickTimer);\n this._healthTickTimer = null;\n }\n this._healthTickPromise = null;\n }\n\n // \u2500\u2500\u2500 \uC138\uC158 \uC720\uC9C0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /** @internal \uC790\uB3D9 \uD1A0\uD070 \uAC31\uC2E0 \uD0C0\uC774\uBA38\uB97C \uC2DC\uC791\uD569\uB2C8\uB2E4. */\n _scheduleKeepSession(\n refreshToken: string,\n expiresIn: number,\n refreshFn: (\n rt: string,\n ) => Promise<{ access_token: string; expires_in: number }>,\n ): void {\n this._clearRefreshTimer();\n this._sessionRefreshToken = refreshToken;\n const delayMs = Math.max((expiresIn - this.refreshBuffer) * 1000, 0);\n this._refreshTimer = setTimeout(async () => {\n if (!this._sessionRefreshToken) return;\n try {\n const result = await refreshFn(this._sessionRefreshToken);\n this.onTokenRefreshed?.(result.access_token, result.expires_in);\n this._scheduleKeepSession(\n this._sessionRefreshToken,\n result.expires_in,\n refreshFn,\n );\n } catch (err) {\n this._clearRefreshTimer();\n this.onSessionExpired?.(\n err instanceof Error ? err : new Error(String(err)),\n );\n }\n }, delayMs);\n }\n\n /** @internal \uC790\uB3D9 \uAC31\uC2E0 \uD0C0\uC774\uBA38\uB97C \uC815\uB9AC\uD569\uB2C8\uB2E4. */\n _clearRefreshTimer(): void {\n if (this._refreshTimer !== null) {\n clearTimeout(this._refreshTimer);\n this._refreshTimer = null;\n }\n }\n\n /**\n * \uC138\uC158 \uC720\uC9C0 \uD0C0\uC774\uBA38\uB97C \uC911\uC9C0\uD569\uB2C8\uB2E4.\n * `logout()` \uD638\uCD9C \uC2DC \uC790\uB3D9\uC73C\uB85C \uC911\uC9C0\uB418\uBA70, \uC9C1\uC811 \uD638\uCD9C\uC774 \uD544\uC694\uD55C \uACBD\uC6B0\uB294 \uB4DC\uBB45\uB2C8\uB2E4.\n */\n stopKeepSession(): void {\n this._clearRefreshTimer();\n this._sessionRefreshToken = null;\n }\n\n _applyCsrfHealth(): void {\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() === this.csrfCookieName) {\n this.csrfEnabled = !!chunk.substring(idx + 1).trim();\n return;\n }\n }\n this.csrfEnabled = false;\n }\n\n // \u2500\u2500\u2500 \uC694\uCCAD \uBCF8\uBB38 \uD30C\uC2F1 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * \uC694\uCCAD \uBC14\uB514\uB97C \uD30C\uC2F1\uD569\uB2C8\uB2E4.\n * `application/octet-stream`\uC774\uBA74 XChaCha20-Poly1305 \uBCF5\uD638\uD654, \uADF8 \uC678\uB294 JSON \uD30C\uC2F1\uD569\uB2C8\uB2E4.\n *\n * @param requireEncrypted `true`\uC774\uBA74 \uC554\uD638\uD654\uB41C \uC694\uCCAD\uB9CC \uD5C8\uC6A9\uD569\uB2C8\uB2E4.\n */\n readRequestBody<T = Record<string, unknown>>(\n body: ArrayBuffer | Uint8Array | string | T | null | undefined,\n contentType = \"application/json\",\n requireEncrypted = false,\n ): T {\n const key = derivePacketKey(\n this.hmacSecret,\n this.token || this.anonymousPacketToken,\n );\n return parseRequestBody<T>(body, contentType, requireEncrypted, key);\n }\n\n // \u2500\u2500\u2500 \uB0B4\uBD80 \uD5EC\uD37C \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n get _reqOpts(): RequestOptions {\n return {\n baseUrl: this.baseUrl,\n token: this.token,\n anonymousPacketToken: this.anonymousPacketToken,\n apiKey: this.apiKey,\n hmacSecret: this.hmacSecret,\n encryptRequests: this.encryptRequests,\n csrfEnabled: this.csrfEnabled,\n csrfHeaderName: this.csrfHeaderName,\n csrfCookieName: this.csrfCookieName,\n refreshCsrfCookie: this.csrfEnabled ? this._csrfRefresher : null,\n };\n }\n\n /**\n * \uCEE4\uC2A4\uD140 \uB77C\uC6B0\uD2B8 \uC9C1\uC811 \uD638\uCD9C\uC6A9 HTTP \uB124\uC784\uC2A4\uD398\uC774\uC2A4.\n * \uC778\uC99D\u00B7\uC554\uD638\uD654\u00B7HMAC \uB4F1 SDK \uC635\uC158\uC774 \uADF8\uB300\uB85C \uC801\uC6A9\uB429\uB2C8\uB2E4.\n *\n * @example\n * const res = await client.http.get<{ version: string }>(\"/api/v1/status\", false);\n * const res = await client.http.post<MyResponse>(\"/api/v1/custom\", { key: \"value\" });\n */\n get http() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n return {\n get<T>(\n path: string,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"GET\",\n path,\n undefined,\n withAuth,\n extraHeaders,\n false,\n );\n },\n post<T>(\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"POST\",\n path,\n body,\n withAuth,\n extraHeaders,\n false,\n );\n },\n put<T>(\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"PUT\",\n path,\n body,\n withAuth,\n extraHeaders,\n false,\n );\n },\n patch<T>(\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"PATCH\",\n path,\n body,\n withAuth,\n extraHeaders,\n false,\n );\n },\n delete<T>(\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n self._reqOpts,\n \"DELETE\",\n path,\n body,\n withAuth,\n extraHeaders,\n false,\n );\n },\n };\n }\n\n /**\n * \uC784\uC758 \uACBD\uB85C\uC5D0 \uC694\uCCAD\uC744 \uBCF4\uB0B4\uACE0 \uBC14\uC774\uB108\uB9AC(ArrayBuffer)\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.\n * \uC774\uBBF8\uC9C0, PDF, \uC555\uCD95 \uD30C\uC77C \uB4F1 \uBC14\uC774\uB108\uB9AC \uC751\uB2F5\uC774 \uC624\uB294 \uC5D4\uB4DC\uD3EC\uC778\uD2B8\uC5D0 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n */\n requestBinary(\n method: string,\n path: string,\n body?: unknown,\n withAuth = true,\n ): Promise<ArrayBuffer> {\n return this._requestBinary(method, path, body, withAuth);\n }\n\n /**\n * multipart/form-data \uC694\uCCAD\uC744 \uBCF4\uB0C5\uB2C8\uB2E4. \uD30C\uC77C \uC5C5\uB85C\uB4DC \uB4F1\uC5D0 \uC0AC\uC6A9\uD569\uB2C8\uB2E4.\n * \uC751\uB2F5\uC740 JSON\uC73C\uB85C \uD30C\uC2F1\uD558\uC5EC \uBC18\uD658\uD569\uB2C8\uB2E4.\n */\n requestForm<T>(\n method: string,\n path: string,\n form: FormData,\n withAuth = true,\n ): Promise<T> {\n return this._requestForm<T>(method, path, form, withAuth);\n }\n\n /**\n * multipart/form-data \uC694\uCCAD\uC744 \uBCF4\uB0B4\uACE0 \uBC14\uC774\uB108\uB9AC(ArrayBuffer)\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4.\n */\n requestFormBinary(\n method: string,\n path: string,\n form: FormData,\n withAuth = true,\n ): Promise<ArrayBuffer> {\n return this._requestFormBinary(method, path, form, withAuth);\n }\n\n _request<T>(\n method: string,\n path: string,\n body?: unknown,\n withAuth = true,\n extraHeaders?: Record<string, string>,\n ): Promise<T> {\n return entityRequest<T>(\n this._reqOpts,\n method,\n path,\n body,\n withAuth,\n extraHeaders,\n true,\n );\n }\n\n /** PNG/\uBC14\uC774\uB108\uB9AC \uC751\uB2F5\uC744 ArrayBuffer\uB85C \uBC18\uD658\uD569\uB2C8\uB2E4. (QR, \uBC14\uCF54\uB4DC \uB4F1) */\n async _requestBinary(\n method: string,\n path: string,\n body?: unknown,\n withAuth = true,\n ): Promise<ArrayBuffer> {\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (withAuth && this.token)\n headers[\"Authorization\"] = `Bearer ${this.token}`;\n if (this.apiKey) headers[\"X-API-Key\"] = this.apiKey;\n\n const res = await fetch(this.baseUrl + path, {\n method,\n headers,\n ...(body != null ? { body: JSON.stringify(body) } : {}),\n credentials: \"include\",\n });\n\n if (!res.ok) {\n const text = await res.text();\n const err = new Error(`HTTP ${res.status}: ${text}`);\n (err as { status?: number }).status = res.status;\n throw err;\n }\n\n return res.arrayBuffer();\n }\n\n /** multipart/form-data \uC694\uCCAD\uC744 \uBCF4\uB0C5\uB2C8\uB2E4. (\uD30C\uC77C \uC5C5\uB85C\uB4DC \uB4F1) */\n async _requestForm<T>(\n method: string,\n path: string,\n form: FormData,\n withAuth = true,\n ): Promise<T> {\n const headers: Record<string, string> = {};\n if (withAuth && this.token)\n headers[\"Authorization\"] = `Bearer ${this.token}`;\n if (this.apiKey) headers[\"X-API-Key\"] = this.apiKey;\n\n const res = await fetch(this.baseUrl + path, {\n method,\n headers,\n body: form,\n credentials: \"include\",\n });\n\n const data = (await res.json()) as { ok?: boolean; message?: string };\n if (!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 return data as T;\n }\n\n /** multipart/form-data \uC694\uCCAD\uC744 \uBCF4\uB0B4\uACE0 \uBC14\uC774\uB108\uB9AC(ArrayBuffer)\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. */\n async _requestFormBinary(\n method: string,\n path: string,\n form: FormData,\n withAuth = true,\n ): Promise<ArrayBuffer> {\n const headers: Record<string, string> = {};\n if (withAuth && this.token)\n headers[\"Authorization\"] = `Bearer ${this.token}`;\n if (this.apiKey) headers[\"X-API-Key\"] = this.apiKey;\n\n const res = await fetch(this.baseUrl + path, {\n method,\n headers,\n body: form,\n credentials: \"include\",\n });\n\n if (!res.ok) {\n const text = await res.text();\n const err = new Error(`HTTP ${res.status}: ${text}`);\n (err as { status?: number }).status = res.status;\n throw err;\n }\n\n return res.arrayBuffer();\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["readEnv", "derivePacketKey", "parseRequestBody", "entityRequest", "EntityServerClientBase", "options", "envBaseUrl", "token", "apiKey", "secret", "value", "enabled", "intervalMs", "tick", "refreshToken", "expiresIn", "refreshFn", "delayMs", "result", "err", "chunk", "idx", "body", "contentType", "requireEncrypted", "key", "self", "path", "withAuth", "extraHeaders", "method", "form", "headers", "res", "text", "data"]
|
|
7
7
|
}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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};
|
|
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,k=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(k)),h=mt(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 pt(r,n,t=q,e=M){let s=w(r),i=w(n),o=dt(i,t,e);if(s.length<o+k+St)throw new Error("Encrypted packet too short");let a=s.slice(o,o+k),u=s.slice(o+k);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 gt(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 kt(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 g(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,gt(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 kt(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 kt(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;onHealthChange;_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,this.onHealthChange=n.onHealthChange,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),n.onHealthChange&&(this.onHealthChange=n.onHealthChange),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()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).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 g(n._reqOpts,"GET",t,void 0,e,s,!1)},post(t,e,s=!0,i){return g(n._reqOpts,"POST",t,e,s,i,!1)},put(t,e,s=!0,i){return g(n._reqOpts,"PUT",t,e,s,i,!1)},patch(t,e,s=!0,i){return g(n._reqOpts,"PATCH",t,e,s,i,!1)},delete(t,e,s=!0,i){return g(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 g(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(),s=this._readCookie("anon_token");return s&&(this.anonymousPacketToken=s),this._applyCsrfHealth(),e}_readCookie(t){if(typeof document>"u")return null;let e=document.cookie.split(";").map(s=>s.trim()).find(s=>s.startsWith(`${t}=`));if(!e)return null;try{return decodeURIComponent(e.slice(t.length+1))}catch{return e.slice(t.length+1)}}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 H(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 F(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 L(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(L(G(F(H(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 W(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 J(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 W(J(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,k as PACKET_NONCE_SIZE,St as PACKET_TAG_SIZE,z as PasswordResetMixin,H as PushMixin,F as SmtpMixin,L 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
|