entity-client 1.0.13 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/EntityAppServerApi.d.ts +480 -0
  2. package/dist/EntityServerApi.d.ts +249 -7
  3. package/dist/client/base.d.ts +35 -4
  4. package/dist/client/base.js +1 -1
  5. package/dist/client/base.js.map +3 -3
  6. package/dist/client/request.d.ts +6 -1
  7. package/dist/client/request.js +1 -1
  8. package/dist/client/request.js.map +3 -3
  9. package/dist/hooks/useEntityClient.d.ts +4 -4
  10. package/dist/hooks/useEntityClient.js +1 -1
  11. package/dist/hooks/useEntityClient.js.map +3 -3
  12. package/dist/index.js +1 -1
  13. package/dist/index.js.map +3 -3
  14. package/dist/mixins/app/plugins/alimtalk.d.ts +30 -0
  15. package/dist/mixins/app/plugins/friendtalk.d.ts +30 -0
  16. package/dist/mixins/app/plugins/holidays.d.ts +30 -0
  17. package/dist/mixins/app/plugins/identity.d.ts +30 -0
  18. package/dist/mixins/app/plugins/llm.d.ts +30 -0
  19. package/dist/mixins/app/plugins/ocr.d.ts +30 -0
  20. package/dist/mixins/app/plugins/pg.d.ts +30 -0
  21. package/dist/mixins/app/plugins/push.d.ts +30 -0
  22. package/dist/mixins/app/plugins/sms.d.ts +30 -0
  23. package/dist/mixins/app/plugins/taxinvoice.d.ts +30 -0
  24. package/dist/mixins/app/routes/account.d.ts +30 -0
  25. package/dist/mixins/app/routes/board.d.ts +30 -0
  26. package/dist/mixins/app/routes/board.js +1 -1
  27. package/dist/mixins/app/routes/board.js.map +2 -2
  28. package/dist/mixins/app/routes/email-verify.d.ts +30 -0
  29. package/dist/mixins/app/routes/oauth.d.ts +30 -0
  30. package/dist/mixins/app/routes/password-reset.d.ts +30 -0
  31. package/dist/mixins/app/routes/two-factor.d.ts +30 -0
  32. package/dist/mixins/server/admin.d.ts +30 -0
  33. package/dist/mixins/server/auth.d.ts +73 -8
  34. package/dist/mixins/server/auth.js +1 -1
  35. package/dist/mixins/server/auth.js.map +3 -3
  36. package/dist/mixins/server/entity.d.ts +30 -0
  37. package/dist/mixins/server/file.d.ts +30 -0
  38. package/dist/mixins/server/index.d.ts +2 -1
  39. package/dist/mixins/server/index.js +1 -1
  40. package/dist/mixins/server/index.js.map +3 -3
  41. package/dist/mixins/server/push.d.ts +30 -0
  42. package/dist/mixins/server/smtp.d.ts +30 -0
  43. package/dist/mixins/server/transaction.d.ts +30 -0
  44. package/dist/mixins/server/utils.d.ts +30 -0
  45. package/dist/react.js +1 -1
  46. package/dist/react.js.map +3 -3
  47. package/dist/types.d.ts +46 -11
  48. package/package.json +1 -1
@@ -70,6 +70,19 @@ export declare function FileMixin<TBase extends GConstructor<EntityServerClientB
70
70
  _refreshTimer: ReturnType<typeof setTimeout> | null;
71
71
  _healthTickTimer: ReturnType<typeof setInterval> | null;
72
72
  _healthTickPromise: Promise<unknown> | null;
73
+ realtimeEnabled: boolean;
74
+ realtimePath: string;
75
+ realtimeAutoConnect: boolean;
76
+ realtimeAutoReconnect: boolean;
77
+ realtimeReconnectDelayMs: number;
78
+ realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
79
+ _realtimeSocket: WebSocket | null;
80
+ _realtimeConnectPromise: Promise<void> | null;
81
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
82
+ _realtimeShouldReconnect: boolean;
83
+ _realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
84
+ _realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
85
+ _realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
73
86
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
74
87
  setToken(token: string): void;
75
88
  setAnonymousPacketToken(token: string): void;
@@ -77,6 +90,17 @@ export declare function FileMixin<TBase extends GConstructor<EntityServerClientB
77
90
  setHmacSecret(secret: string): void;
78
91
  setEncryptRequests(value: boolean): void;
79
92
  setCsrfEnabled(enabled: boolean): void;
93
+ addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
94
+ removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
95
+ addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
96
+ removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
97
+ addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
98
+ removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
99
+ connectRealtime(): Promise<void>;
100
+ disconnectRealtime(reason?: string): void;
101
+ sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
102
+ subscribeRealtime(subscriptions: string[]): boolean;
103
+ unsubscribeRealtime(subscriptions: string[]): boolean;
80
104
  startHealthTick(intervalMs?: number): void;
81
105
  stopHealthTick(): void;
82
106
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -85,6 +109,12 @@ export declare function FileMixin<TBase extends GConstructor<EntityServerClientB
85
109
  }>): void;
86
110
  _clearRefreshTimer(): void;
87
111
  stopKeepSession(): void;
112
+ _applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
113
+ _buildRealtimeUrl(): string;
114
+ _handleRealtimeMessage(payload: unknown): void;
115
+ _scheduleRealtimeReconnect(reason: string): void;
116
+ _clearRealtimeReconnectTimer(): void;
117
+ _setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
88
118
  _applyCsrfHealth(): void;
89
119
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
90
120
  get _reqOpts(): import("../../client/request.js").RequestOptions;
@@ -1,4 +1,5 @@
1
- export { AuthMixin } from "./auth.js";
1
+ export { AuthMixin, isAuthLoginSuccessResponse } from "./auth.js";
2
+ export type { AuthLoginResponse, AuthLoginRequiresTwoFactorResponse, AuthLoginSetupRequiredResponse, AuthLoginSuccessData, AuthLoginSuccessResponse, } from "./auth.js";
2
3
  export { EntityMixin } from "./entity.js";
3
4
  export { FileMixin } from "./file.js";
4
5
  export { PushMixin } from "./push.js";
@@ -1,2 +1,2 @@
1
- import{AuthMixin as r}from"./auth.js";import{EntityMixin as t}from"./entity.js";import{FileMixin as m}from"./file.js";import{PushMixin as p}from"./push.js";import{SmtpMixin as M}from"./smtp.js";import{TransactionMixin as a}from"./transaction.js";import{UtilsMixin as l}from"./utils.js";import{AdminMixin as A}from"./admin.js";export{A as AdminMixin,r as AuthMixin,t as EntityMixin,m as FileMixin,p as PushMixin,M as SmtpMixin,a as TransactionMixin,l as UtilsMixin};
1
+ import{AuthMixin as e,isAuthLoginSuccessResponse as t}from"./auth.js";import{EntityMixin as r}from"./entity.js";import{FileMixin as p}from"./file.js";import{PushMixin as u}from"./push.js";import{SmtpMixin as f}from"./smtp.js";import{TransactionMixin as c}from"./transaction.js";import{UtilsMixin as M}from"./utils.js";import{AdminMixin as a}from"./admin.js";export{a as AdminMixin,e as AuthMixin,r as EntityMixin,p as FileMixin,u as PushMixin,f as SmtpMixin,c as TransactionMixin,M as UtilsMixin,t as isAuthLoginSuccessResponse};
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mixins/server/index.ts"],
4
- "sourcesContent": ["export { AuthMixin } from \"./auth.js\";\nexport { EntityMixin } from \"./entity.js\";\nexport { FileMixin } from \"./file.js\";\nexport { PushMixin } from \"./push.js\";\nexport { SmtpMixin } from \"./smtp.js\";\nexport { TransactionMixin } from \"./transaction.js\";\nexport { UtilsMixin } from \"./utils.js\";\nexport { AdminMixin } from \"./admin.js\";\n"],
5
- "mappings": "AAAA,OAAS,aAAAA,MAAiB,YAC1B,OAAS,eAAAC,MAAmB,cAC5B,OAAS,aAAAC,MAAiB,YAC1B,OAAS,aAAAC,MAAiB,YAC1B,OAAS,aAAAC,MAAiB,YAC1B,OAAS,oBAAAC,MAAwB,mBACjC,OAAS,cAAAC,MAAkB,aAC3B,OAAS,cAAAC,MAAkB",
6
- "names": ["AuthMixin", "EntityMixin", "FileMixin", "PushMixin", "SmtpMixin", "TransactionMixin", "UtilsMixin", "AdminMixin"]
4
+ "sourcesContent": ["export { AuthMixin, isAuthLoginSuccessResponse } from \"./auth.js\";\nexport type {\n AuthLoginResponse,\n AuthLoginRequiresTwoFactorResponse,\n AuthLoginSetupRequiredResponse,\n AuthLoginSuccessData,\n AuthLoginSuccessResponse,\n} from \"./auth.js\";\nexport { EntityMixin } from \"./entity.js\";\nexport { FileMixin } from \"./file.js\";\nexport { PushMixin } from \"./push.js\";\nexport { SmtpMixin } from \"./smtp.js\";\nexport { TransactionMixin } from \"./transaction.js\";\nexport { UtilsMixin } from \"./utils.js\";\nexport { AdminMixin } from \"./admin.js\";\n"],
5
+ "mappings": "AAAA,OAAS,aAAAA,EAAW,8BAAAC,MAAkC,YAQtD,OAAS,eAAAC,MAAmB,cAC5B,OAAS,aAAAC,MAAiB,YAC1B,OAAS,aAAAC,MAAiB,YAC1B,OAAS,aAAAC,MAAiB,YAC1B,OAAS,oBAAAC,MAAwB,mBACjC,OAAS,cAAAC,MAAkB,aAC3B,OAAS,cAAAC,MAAkB",
6
+ "names": ["AuthMixin", "isAuthLoginSuccessResponse", "EntityMixin", "FileMixin", "PushMixin", "SmtpMixin", "TransactionMixin", "UtilsMixin", "AdminMixin"]
7
7
  }
@@ -70,6 +70,19 @@ export declare function PushMixin<TBase extends GConstructor<WithSubmit>>(Base:
70
70
  _refreshTimer: ReturnType<typeof setTimeout> | null;
71
71
  _healthTickTimer: ReturnType<typeof setInterval> | null;
72
72
  _healthTickPromise: Promise<unknown> | null;
73
+ realtimeEnabled: boolean;
74
+ realtimePath: string;
75
+ realtimeAutoConnect: boolean;
76
+ realtimeAutoReconnect: boolean;
77
+ realtimeReconnectDelayMs: number;
78
+ realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
79
+ _realtimeSocket: WebSocket | null;
80
+ _realtimeConnectPromise: Promise<void> | null;
81
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
82
+ _realtimeShouldReconnect: boolean;
83
+ _realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
84
+ _realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
85
+ _realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
73
86
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
74
87
  setToken(token: string): void;
75
88
  setAnonymousPacketToken(token: string): void;
@@ -77,6 +90,17 @@ export declare function PushMixin<TBase extends GConstructor<WithSubmit>>(Base:
77
90
  setHmacSecret(secret: string): void;
78
91
  setEncryptRequests(value: boolean): void;
79
92
  setCsrfEnabled(enabled: boolean): void;
93
+ addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
94
+ removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
95
+ addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
96
+ removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
97
+ addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
98
+ removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
99
+ connectRealtime(): Promise<void>;
100
+ disconnectRealtime(reason?: string): void;
101
+ sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
102
+ subscribeRealtime(subscriptions: string[]): boolean;
103
+ unsubscribeRealtime(subscriptions: string[]): boolean;
80
104
  startHealthTick(intervalMs?: number): void;
81
105
  stopHealthTick(): void;
82
106
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -85,6 +109,12 @@ export declare function PushMixin<TBase extends GConstructor<WithSubmit>>(Base:
85
109
  }>): void;
86
110
  _clearRefreshTimer(): void;
87
111
  stopKeepSession(): void;
112
+ _applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
113
+ _buildRealtimeUrl(): string;
114
+ _handleRealtimeMessage(payload: unknown): void;
115
+ _scheduleRealtimeReconnect(reason: string): void;
116
+ _clearRealtimeReconnectTimer(): void;
117
+ _setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
88
118
  _applyCsrfHealth(): void;
89
119
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
90
120
  get _reqOpts(): import("../../client/request.js").RequestOptions;
@@ -34,6 +34,19 @@ export declare function SmtpMixin<TBase extends GConstructor<EntityServerClientB
34
34
  _refreshTimer: ReturnType<typeof setTimeout> | null;
35
35
  _healthTickTimer: ReturnType<typeof setInterval> | null;
36
36
  _healthTickPromise: Promise<unknown> | null;
37
+ realtimeEnabled: boolean;
38
+ realtimePath: string;
39
+ realtimeAutoConnect: boolean;
40
+ realtimeAutoReconnect: boolean;
41
+ realtimeReconnectDelayMs: number;
42
+ realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
43
+ _realtimeSocket: WebSocket | null;
44
+ _realtimeConnectPromise: Promise<void> | null;
45
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
46
+ _realtimeShouldReconnect: boolean;
47
+ _realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
48
+ _realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
49
+ _realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
37
50
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
38
51
  setToken(token: string): void;
39
52
  setAnonymousPacketToken(token: string): void;
@@ -41,6 +54,17 @@ export declare function SmtpMixin<TBase extends GConstructor<EntityServerClientB
41
54
  setHmacSecret(secret: string): void;
42
55
  setEncryptRequests(value: boolean): void;
43
56
  setCsrfEnabled(enabled: boolean): void;
57
+ addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
58
+ removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
59
+ addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
60
+ removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
61
+ addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
62
+ removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
63
+ connectRealtime(): Promise<void>;
64
+ disconnectRealtime(reason?: string): void;
65
+ sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
66
+ subscribeRealtime(subscriptions: string[]): boolean;
67
+ unsubscribeRealtime(subscriptions: string[]): boolean;
44
68
  startHealthTick(intervalMs?: number): void;
45
69
  stopHealthTick(): void;
46
70
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -49,6 +73,12 @@ export declare function SmtpMixin<TBase extends GConstructor<EntityServerClientB
49
73
  }>): void;
50
74
  _clearRefreshTimer(): void;
51
75
  stopKeepSession(): void;
76
+ _applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
77
+ _buildRealtimeUrl(): string;
78
+ _handleRealtimeMessage(payload: unknown): void;
79
+ _scheduleRealtimeReconnect(reason: string): void;
80
+ _clearRealtimeReconnectTimer(): void;
81
+ _setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
52
82
  _applyCsrfHealth(): void;
53
83
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
54
84
  get _reqOpts(): import("../../client/request.js").RequestOptions;
@@ -27,6 +27,19 @@ export declare function TransactionMixin<TBase extends GConstructor<EntityServer
27
27
  _refreshTimer: ReturnType<typeof setTimeout> | null;
28
28
  _healthTickTimer: ReturnType<typeof setInterval> | null;
29
29
  _healthTickPromise: Promise<unknown> | null;
30
+ realtimeEnabled: boolean;
31
+ realtimePath: string;
32
+ realtimeAutoConnect: boolean;
33
+ realtimeAutoReconnect: boolean;
34
+ realtimeReconnectDelayMs: number;
35
+ realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
36
+ _realtimeSocket: WebSocket | null;
37
+ _realtimeConnectPromise: Promise<void> | null;
38
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
39
+ _realtimeShouldReconnect: boolean;
40
+ _realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
41
+ _realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
42
+ _realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
30
43
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
31
44
  setToken(token: string): void;
32
45
  setAnonymousPacketToken(token: string): void;
@@ -34,6 +47,17 @@ export declare function TransactionMixin<TBase extends GConstructor<EntityServer
34
47
  setHmacSecret(secret: string): void;
35
48
  setEncryptRequests(value: boolean): void;
36
49
  setCsrfEnabled(enabled: boolean): void;
50
+ addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
51
+ removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
52
+ addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
53
+ removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
54
+ addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
55
+ removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
56
+ connectRealtime(): Promise<void>;
57
+ disconnectRealtime(reason?: string): void;
58
+ sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
59
+ subscribeRealtime(subscriptions: string[]): boolean;
60
+ unsubscribeRealtime(subscriptions: string[]): boolean;
37
61
  startHealthTick(intervalMs?: number): void;
38
62
  stopHealthTick(): void;
39
63
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -42,6 +66,12 @@ export declare function TransactionMixin<TBase extends GConstructor<EntityServer
42
66
  }>): void;
43
67
  _clearRefreshTimer(): void;
44
68
  stopKeepSession(): void;
69
+ _applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
70
+ _buildRealtimeUrl(): string;
71
+ _handleRealtimeMessage(payload: unknown): void;
72
+ _scheduleRealtimeReconnect(reason: string): void;
73
+ _clearRealtimeReconnectTimer(): void;
74
+ _setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
45
75
  _applyCsrfHealth(): void;
46
76
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
47
77
  get _reqOpts(): import("../../client/request.js").RequestOptions;
@@ -83,6 +83,19 @@ export declare function UtilsMixin<TBase extends GConstructor<EntityServerClient
83
83
  _refreshTimer: ReturnType<typeof setTimeout> | null;
84
84
  _healthTickTimer: ReturnType<typeof setInterval> | null;
85
85
  _healthTickPromise: Promise<unknown> | null;
86
+ realtimeEnabled: boolean;
87
+ realtimePath: string;
88
+ realtimeAutoConnect: boolean;
89
+ realtimeAutoReconnect: boolean;
90
+ realtimeReconnectDelayMs: number;
91
+ realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
92
+ _realtimeSocket: WebSocket | null;
93
+ _realtimeConnectPromise: Promise<void> | null;
94
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
95
+ _realtimeShouldReconnect: boolean;
96
+ _realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
97
+ _realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
98
+ _realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
86
99
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
87
100
  setToken(token: string): void;
88
101
  setAnonymousPacketToken(token: string): void;
@@ -90,6 +103,17 @@ export declare function UtilsMixin<TBase extends GConstructor<EntityServerClient
90
103
  setHmacSecret(secret: string): void;
91
104
  setEncryptRequests(value: boolean): void;
92
105
  setCsrfEnabled(enabled: boolean): void;
106
+ addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
107
+ removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
108
+ addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
109
+ removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
110
+ addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
111
+ removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
112
+ connectRealtime(): Promise<void>;
113
+ disconnectRealtime(reason?: string): void;
114
+ sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
115
+ subscribeRealtime(subscriptions: string[]): boolean;
116
+ unsubscribeRealtime(subscriptions: string[]): boolean;
93
117
  startHealthTick(intervalMs?: number): void;
94
118
  stopHealthTick(): void;
95
119
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -98,6 +122,12 @@ export declare function UtilsMixin<TBase extends GConstructor<EntityServerClient
98
122
  }>): void;
99
123
  _clearRefreshTimer(): void;
100
124
  stopKeepSession(): void;
125
+ _applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
126
+ _buildRealtimeUrl(): string;
127
+ _handleRealtimeMessage(payload: unknown): void;
128
+ _scheduleRealtimeReconnect(reason: string): void;
129
+ _clearRealtimeReconnectTimer(): void;
130
+ _setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
101
131
  _applyCsrfHealth(): void;
102
132
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
103
133
  get _reqOpts(): import("../../client/request.js").RequestOptions;
package/dist/react.js CHANGED
@@ -1,2 +1,2 @@
1
- import{useCallback as _,useEffect as he,useMemo as Ae,useRef as Te,useState as fe}from"react";function A(r,n){let{singleton:e=!0,tokenResolver:t,baseUrl:s,token:i,resumeSession:o}=r,[a,u]=fe(!1),[T,h]=fe(null),d=Te(!0);he(()=>(d.current=!0,()=>{d.current=!1}),[]);let k=Ae(()=>{let l=e?n.singletonInstance:new n.ClientClass({baseUrl:s,token:i});e&&l.configure({baseUrl:s,token:i});let m=t?.();return typeof m=="string"&&l.setToken(m),l},[e,t,s,i,n.ClientClass,n.singletonInstance]),M=Te(o);he(()=>{let l=M.current;l&&k.refreshToken(l).catch(()=>{})},[k]);let g=_(async l=>{d.current&&(u(!0),h(null));try{return await l()}catch(m){let P=m instanceof Error?m:new Error(String(m));throw d.current&&h(P),P}finally{d.current&&u(!1)}},[]),x=_((l,m,P)=>g(()=>k.submit(l,m,P)),[k,g]),C=_((l,m,P)=>g(()=>k.delete(l,m,P)),[k,g]),R=_((l,m)=>g(()=>k.query(l,m)),[k,g]),I=_(()=>{u(!1),h(null)},[]);return{client:k,isPending:a,error:T,reset:I,submit:x,del:C,query:R}}function ke(r){let n=import.meta;if(n?.env?.[r]!=null)return n.env[r];let e=globalThis.process;if(e?.env?.[r]!=null)return e.env[r]}function c(r){return Object.entries(r).filter(([,n])=>n!=null).map(([n,e])=>`${encodeURIComponent(n==="orderBy"?"order_by":n)}=${encodeURIComponent(String(e))}`).join("&")}import{xchacha20poly1305 as ge}from"@noble/ciphers/chacha";import{sha256 as qe}from"@noble/hashes/sha2";import{hkdf as Ue}from"@noble/hashes/hkdf";var H=32,F=2,L=14,S=24,Oe=16,Me="entity-server:hkdf:v1",Ie="entity-server:packet-encryption";function B(r){return r instanceof Uint8Array?r:new Uint8Array(r)}function ye(r,n=Ie){return Ue(qe,new TextEncoder().encode(r),new TextEncoder().encode(Me),new TextEncoder().encode(n),H)}function Pe(r,n=F,e=L){let t=B(r);return t.length<H?n:n+t[H-1]%e}function we(r,n,e=F,t=L){let s=B(r),i=B(n),o=Pe(i,e,t),a=crypto.getRandomValues(new Uint8Array(o)),u=crypto.getRandomValues(new Uint8Array(S)),h=ge(i,u).encrypt(s),d=new Uint8Array(o+S+h.length);return d.set(a,0),d.set(u,o),d.set(h,o+S),d}function ve(r,n,e=F,t=L){let s=B(r),i=B(n),o=Pe(i,e,t);if(s.length<o+S+Oe)throw new Error("Encrypted packet too short");let a=s.slice(o,o+S),u=s.slice(o+S);return ge(i,a).decrypt(u)}function $(r,n){return ye(r||n)}function be(r,n){return we(r,n)}function q(r,n){let e=ve(r,n);return JSON.parse(new TextDecoder().decode(e))}function xe(r,n,e,t){let s=n.toLowerCase().includes("application/octet-stream");if(e&&!s)throw new Error("Encrypted request required: Content-Type must be application/octet-stream");if(s){if(r==null)throw new Error("Encrypted request body is empty");if(r instanceof ArrayBuffer)return q(r,t);if(r instanceof Uint8Array){let i=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);return q(i,t)}throw new Error("Encrypted request body must be ArrayBuffer or Uint8Array")}return r==null||r===""?{}:typeof r=="string"?JSON.parse(r):r}import{sha256 as Ge}from"@noble/hashes/sha2";import{hmac as He}from"@noble/hashes/hmac";function Ce(r,n,e,t,s){let i=String(Math.floor(Date.now()/1e3)),o=crypto.randomUUID(),a=new TextEncoder().encode(`${r}|${n}|${i}|${o}|`),u=new Uint8Array(a.length+e.length);u.set(a,0),u.set(e,a.length);let h=[...He(Ge,new TextEncoder().encode(s),u)].map(d=>d.toString(16).padStart(2,"0")).join("");return{"X-API-Key":t,"X-Timestamp":i,"X-Nonce":o,"X-Signature":h}}function Fe(r){return r.hmacSecret||r.token||r.anonymousPacketToken}function Le(r){return r!=="GET"&&r!=="HEAD"&&r!=="OPTIONS"}function U(r){if(typeof document>"u")return"";for(let n of document.cookie.split(";")){let e=n.indexOf("=");if(!(e<0)&&n.substring(0,e).trim()===r)return decodeURIComponent(n.substring(e+1).trim())}return""}function je(r,n){return r===403&&/csrf/i.test(n)?!0:/csrf/i.test(n)&&/expired|token validation failed/i.test(n)}async function Re(r){if((r.headers.get("Content-Type")??"").includes("application/json")){let t=await r.json().catch(()=>null);if(t?.error)return t.error;if(t?.message)return t.message}return await r.text().catch(()=>"")||`HTTP ${r.status}`}async function b(r,n,e,t,s=!0,i={},o=!0){let{baseUrl:a,token:u,apiKey:T,hmacSecret:h,encryptRequests:d,csrfEnabled:k,csrfHeaderName:M,csrfCookieName:g,refreshCsrfCookie:x}=r,C=r.anonymousPacketToken||U("anon_token"),R=s&&!!(T&&h),I=Fe(r),l=k&&Le(n)&&!R,m=l?U(g):"",P="application/json",_e=!u&&!R&&!!C,w=null;if(t!=null)if(d&&!!I&&n!=="GET"&&n!=="HEAD"){let y=$(h,u||C);w=be(new TextEncoder().encode(JSON.stringify(t)),y),P="application/octet-stream"}else w=JSON.stringify(t);let Be=p=>{let y={"Content-Type":P,...i};if(!R&&s&&u&&(y.Authorization=`Bearer ${u}`),_e&&(y["X-Packet-Token"]=C),l&&p&&(y[M]=p),R){let $e=w instanceof Uint8Array?w:typeof w=="string"?new TextEncoder().encode(w):new Uint8Array(0);Object.assign(y,Ce(n,e,$e,T,h))}return y};l&&!m&&x&&(await x(),m=U(g));let de=p=>fetch(a+e,{method:n,headers:Be(p),...w!=null?{body:w}:{},credentials:"include"}),f=await de(m);if(!f.ok){let p=await Re(f.clone());if(l&&x&&je(f.status,p))await x(),m=U(g),f=await de(m);else{let y=new Error(p);throw y.status=f.status,y}}if(!f.ok){let p=new Error(await Re(f));throw p.status=f.status,p}let pe=f.headers.get("Content-Type")??"";if(pe.includes("application/octet-stream")){let p=$(h,u||C);return q(await f.arrayBuffer(),p)}if(!pe.includes("application/json"))return await f.text();let G=await f.json();if(o&&!G.ok){let p=new Error(G.message??`EntityServer error (HTTP ${f.status})`);throw p.status=f.status,p}return G}var O=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 e=ke("VITE_ENTITY_SERVER_URL");this.baseUrl=(n.baseUrl??e??"").replace(/\/$/,""),this.token=n.token??"",this.anonymousPacketToken=n.anonymousPacketToken??"",this.apiKey=n.apiKey??"",this.hmacSecret=n.hmacSecret??"",this.encryptRequests=n.encryptRequests??!1,this.csrfEnabled=n.csrfEnabled??!1,this.csrfHeaderName=n.csrfHeaderName??"x-csrf-token",this.csrfCookieName=n.csrfCookieName??"_csrf",this.keepSession=n.keepSession??!1,this.refreshBuffer=n.refreshBuffer??60,this.onTokenRefreshed=n.onTokenRefreshed,this.onSessionExpired=n.onSessionExpired,this.onHealthChange=n.onHealthChange,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 e=()=>{this._healthTickPromise||(this._healthTickPromise=(this._csrfRefresher?this._csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this._healthTickPromise=null}))};e(),this._healthTickTimer=setInterval(e,n)}stopHealthTick(){this._healthTickTimer!==null&&(clearInterval(this._healthTickTimer),this._healthTickTimer=null),this._healthTickPromise=null}_scheduleKeepSession(n,e,t){this._clearRefreshTimer(),this._sessionRefreshToken=n;let s=Math.max((e-this.refreshBuffer)*1e3,0);this._refreshTimer=setTimeout(async()=>{if(this._sessionRefreshToken)try{let i=await t(this._sessionRefreshToken);this.onTokenRefreshed?.(i.access_token,i.expires_in),this._scheduleKeepSession(this._sessionRefreshToken,i.expires_in,t)}catch(i){this._clearRefreshTimer(),this.onSessionExpired?.(i instanceof Error?i:new Error(String(i)))}},s)}_clearRefreshTimer(){this._refreshTimer!==null&&(clearTimeout(this._refreshTimer),this._refreshTimer=null)}stopKeepSession(){this._clearRefreshTimer(),this._sessionRefreshToken=null}_applyCsrfHealth(){if(!(typeof document>"u")){for(let n of document.cookie.split(";")){let e=n.indexOf("=");if(!(e<0)&&n.substring(0,e).trim()===this.csrfCookieName){this.csrfEnabled=!!n.substring(e+1).trim();return}}this.csrfEnabled=!1}}readRequestBody(n,e="application/json",t=!1){let s=$(this.hmacSecret,this.token||this.anonymousPacketToken);return xe(n,e,t,s)}get _reqOpts(){return{baseUrl:this.baseUrl,token:this.token,anonymousPacketToken:this.anonymousPacketToken,apiKey:this.apiKey,hmacSecret:this.hmacSecret,encryptRequests:this.encryptRequests,csrfEnabled:this.csrfEnabled,csrfHeaderName:this.csrfHeaderName,csrfCookieName:this.csrfCookieName,refreshCsrfCookie:this.csrfEnabled?this._csrfRefresher:null}}get http(){let n=this;return{get(e,t=!0,s){return b(n._reqOpts,"GET",e,void 0,t,s,!1)},post(e,t,s=!0,i){return b(n._reqOpts,"POST",e,t,s,i,!1)},put(e,t,s=!0,i){return b(n._reqOpts,"PUT",e,t,s,i,!1)},patch(e,t,s=!0,i){return b(n._reqOpts,"PATCH",e,t,s,i,!1)},delete(e,t,s=!0,i){return b(n._reqOpts,"DELETE",e,t,s,i,!1)}}}requestBinary(n,e,t,s=!0){return this._requestBinary(n,e,t,s)}requestForm(n,e,t,s=!0){return this._requestForm(n,e,t,s)}requestFormBinary(n,e,t,s=!0){return this._requestFormBinary(n,e,t,s)}_request(n,e,t,s=!0,i){return b(this._reqOpts,n,e,t,s,i,!0)}async _requestBinary(n,e,t,s=!0){let i={"Content-Type":"application/json"};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,...t!=null?{body:JSON.stringify(t)}:{},credentials:"include"});if(!o.ok){let a=await o.text(),u=new Error(`HTTP ${o.status}: ${a}`);throw u.status=o.status,u}return o.arrayBuffer()}async _requestForm(n,e,t,s=!0){let i={};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,body:t,credentials:"include"}),a=await o.json();if(!a.ok){let u=new Error(a.message??`EntityServer error (HTTP ${o.status})`);throw u.status=o.status,u}return a}async _requestFormBinary(n,e,t,s=!0){let i={};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,body:t,credentials:"include"});if(!o.ok){let a=await o.text(),u=new Error(`HTTP ${o.status}: ${a}`);throw u.status=o.status,u}return o.arrayBuffer()}};function j(r){return class extends r{_csrfRefresher=()=>this.checkHealth().then(()=>{});async checkHealth(){let t=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.encryptRequests=!0),this._applyCsrfHealth(),t}_readCookie(e){if(typeof document>"u")return null;let t=document.cookie.split(";").map(s=>s.trim()).find(s=>s.startsWith(`${e}=`));if(!t)return null;try{return decodeURIComponent(t.slice(e.length+1))}catch{return t.slice(e.length+1)}}async login(e,t){let s=await this._request("POST","/v1/auth/login",{email:e,passwd:t},!1);return this.token=s.data.access_token,this.keepSession&&this._scheduleKeepSession(s.data.refresh_token,s.data.expires_in,i=>this.refreshToken(i)),s.data}async refreshToken(e){let t=await this._request("POST","/v1/auth/refresh",{refresh_token:e},!1);return this.token=t.data.access_token,this.keepSession&&this._scheduleKeepSession(e,t.data.expires_in,s=>this.refreshToken(s)),t.data}async logout(e){this.stopKeepSession();let t=await this._request("POST","/v1/auth/logout",{refresh_token:e},!1);return this.token="",t}me(){return this._request("GET","/v1/auth/me")}withdraw(e){return this._request("POST","/v1/auth/withdraw",e?{passwd:e}:{})}}}function K(r){return class extends r{async transStart(){let e=await this._request("POST","/v1/transaction/start",void 0,!1);return this.activeTxId=e.transaction_id,this.activeTxId}transRollback(e){let t=e??this.activeTxId;return t?(this.activeTxId=null,this._request("POST",`/v1/transaction/rollback/${t}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}transCommit(e){let t=e??this.activeTxId;return t?(this.activeTxId=null,this._request("POST",`/v1/transaction/commit/${t}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}meta(e){return this._request("POST",`/v1/entity/${e}/meta`,{})}validate(e,t){return this.http.post(`/v1/entity/${e}/validate`,t)}get(e,t,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this._request("GET",`/v1/entity/${e}/${t}${i}`)}find(e,t,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this._request("POST",`/v1/entity/${e}/find${i}`,t??{})}list(e,t={}){let{conditions:s,fields:i,orderDir:o,orderBy:a,...u}=t,T={page:1,limit:20,...u};return a&&(T.orderBy=o==="DESC"?`-${a}`:a),i?.length&&(T.fields=i.join(",")),this._request("POST",`/v1/entity/${e}/list?${c(T)}`,s??{})}count(e,t){return this._request("POST",`/v1/entity/${e}/count`,t??{})}query(e,t){return this._request("POST",`/v1/entity/${e}/query`,t)}submit(e,t,s={}){let i=s.transactionId??this.activeTxId,o=i?{"X-Transaction-ID":i}:void 0,a=s.skipHooks?"?skipHooks=true":"";return this._request("POST",`/v1/entity/${e}/submit${a}`,t,!0,o)}delete(e,t,s={}){let i=new URLSearchParams;s.hard&&i.set("hard","true"),s.skipHooks&&i.set("skipHooks","true");let o=i.size?`?${i}`:"",a=s.transactionId??this.activeTxId,u=a?{"X-Transaction-ID":a}:void 0;return this._request("POST",`/v1/entity/${e}/delete/${t}${o}`,void 0,!0,u)}history(e,t,s={}){return this._request("GET",`/v1/entity/${e}/history/${t}?${c({page:1,limit:50,...s})}`)}rollback(e,t){return this._request("POST",`/v1/entity/${e}/rollback/${t}`)}}}function D(r){return class extends r{async fileUpload(e,t,s={}){let i=new FormData;return i.append("file",t,t instanceof File?t.name:"upload"),s.refSeq!=null&&i.append("ref_seq",String(s.refSeq)),s.isPublic!=null&&i.append("is_public",s.isPublic?"true":"false"),this._requestForm("POST",`/v1/files/${e}/upload`,i)}fileDownload(e,t){return this._requestBinary("POST",`/v1/files/${e}/download/${t}`,{})}fileDelete(e,t){return this._request("POST",`/v1/files/${e}/delete/${t}`,{})}fileList(e,t={}){return this._request("POST",`/v1/files/${e}/list`,t.refSeq?{ref_seq:t.refSeq}:{})}fileMeta(e,t){return this._request("POST",`/v1/files/${e}/meta/${t}`,{})}fileToken(e){return this._request("POST",`/v1/files/token/${e}`,{})}fileViewUrl(e,t={}){let s=t.download?"?download=true":"";return`${this.baseUrl}/v1/files/${e}${s}`}fileUrl(e){return`${this.baseUrl}/v1/files/${e}`}}}function N(r){return class extends r{push(e,t,s={}){return this.submit(e,t,s)}pushLogList(e={}){return this.list("push_log",e)}registerPushDevice(e,t,s,i={}){let{platform:o,deviceType:a,browser:u,browserVersion:T,pushEnabled:h=!0,transactionId:d}=i;return this.submit("account_device",{id:t,account_seq:e,push_token:s,push_enabled:h,...o?{platform:o}:{},...a?{device_type:a}:{},...u?{browser:u}:{},...T?{browser_version:T}:{}},{transactionId:d})}updatePushDeviceToken(e,t,s={}){let{pushEnabled:i=!0,transactionId:o}=s;return this.submit("account_device",{seq:e,push_token:t,push_enabled:i},{transactionId:o})}disablePushDevice(e,t={}){return this.submit("account_device",{seq:e,push_enabled:!1},{transactionId:t.transactionId})}}}function V(r){return class extends r{smtpSend(e){return this._request("POST","/v1/smtp/send",e)}smtpStatus(e){return this._request("POST",`/v1/smtp/status/${e}`,{})}smtpTemplatePreview(e){let t=e.split("/").map(encodeURIComponent).join("/");return fetch(`${this.baseUrl}/v1/smtp/template/${t}`,{credentials:"include"}).then(s=>s.text())}}}function Q(r){return class extends r{transactionStart(e){return this._request("POST","/v1/transaction/start",e??{})}transactionCommit(e){return this._request("POST",`/v1/transaction/commit/${encodeURIComponent(e)}`,{})}transactionRollback(e){return this._request("POST",`/v1/transaction/rollback/${encodeURIComponent(e)}`,{})}}}function z(r){return class extends r{addressSido(){return this.http.get("/v1/utils/address/sido",!1)}addressSigungu(e){let t=new URLSearchParams({sido:e.sido}).toString();return this.http.get(`/v1/utils/address/sigungu?${t}`,!1)}addressDong(e){let t=new URLSearchParams({sido:e.sido,sigungu:e.sigungu}).toString();return this.http.get(`/v1/utils/address/dong?${t}`,!1)}addressClean(e){let t=new URLSearchParams({q:e.q}).toString();return this.http.get(`/v1/utils/address/clean?${t}`,!1)}qrcode(e,t={}){return this._requestBinary("POST","/v1/utils/qrcode",{content:e,...t})}qrcodeBase64(e,t={}){return this._request("POST","/v1/utils/qrcode/base64",{content:e,...t})}qrcodeText(e,t={}){return this._request("POST","/v1/utils/qrcode/text",{content:e,...t})}barcode(e,t={}){return this._requestBinary("POST","/v1/utils/barcode",{content:e,...t})}pdf2png(e,t={}){let s=new FormData;s.append("file",new Blob([e],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;t.dpi!=null&&i.set("dpi",String(t.dpi)),t.firstPage!=null&&i.set("first_page",String(t.firstPage)),t.lastPage!=null&&i.set("last_page",String(t.lastPage));let o=i.toString(),a="/v1/utils/pdf2png"+(o?`?${o}`:"");return this._requestFormBinary("POST",a,s)}pdf2pngByFileSeq(e,t={}){return this.requestBinary("POST",`/v1/utils/pdf2png/${e}`,t)}pdf2jpg(e,t={}){let s=new FormData;s.append("file",new Blob([e],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;t.dpi!=null&&i.set("dpi",String(t.dpi)),t.firstPage!=null&&i.set("first_page",String(t.firstPage)),t.lastPage!=null&&i.set("last_page",String(t.lastPage));let o=i.toString(),a="/v1/utils/pdf2jpg"+(o?`?${o}`:"");return this._requestFormBinary("POST",a,s)}pdf2jpgByFileSeq(e,t={}){return this.requestBinary("POST",`/v1/utils/pdf2jpg/${e}`,t)}}}function X(r){return class extends r{_adminPath(e){return`/v1/admin${e}`}_adminGet(e){return this.http.get(this._adminPath(e))}_adminPost(e,t){return this.http.post(this._adminPath(e),t)}_adminPut(e,t){return this.http.put(this._adminPath(e),t)}_adminPatch(e,t){return this.http.patch(this._adminPath(e),t)}_adminDelete(e,t){return this.http.delete(this._adminPath(e),t)}listAdminEntities(){return this._adminGet("/entities")}getAdminErdSchema(){return this._adminGet("/erd/schema")}batchEnsureAdminEntities(e){return this._adminPost("/entities/batch-ensure",e)}createAdminEntityConfig(e,t){return this._adminPost(`/${e}/create`,t)}getAdminEntityConfig(e){return this._adminGet(`/${e}/config`)}updateAdminEntityConfig(e,t){return this._adminPut(`/${e}/config`,t)}validateAdminEntityConfig(e,t){return this._adminPost(t?`/${t}/validate`:"/entity/validate",e)}normalizeAdminEntityConfig(e,t){return this._adminPost(t?`/${t}/normalize`:"/entity/normalize",e)}getAdminEntityStats(e,t){return this._adminPost(`/${e}/stats`,t)}reindexAdminEntity(e){return this._adminPost(`/${e}/reindex`)}syncAdminEntitySchema(e){return this._adminPost(`/${e}/sync-schema`)}resetAdminEntity(e){return this._adminPost(`/${e}/reset`)}truncateAdminEntity(e){return this._adminPost(`/${e}/truncate`)}dropAdminEntity(e){return this._adminPost(`/${e}/drop`)}resetAllAdmin(e){return this._adminPost("/reset-all",e)}listAdminConfigs(){return this._adminGet("/configs")}getAdminConfig(e){return this._adminGet(`/configs/${e}`)}updateAdminConfig(e,t){return this._adminPatch(`/configs/${e}`,t)}listAdminRoles(){return this._adminGet("/roles")}createAdminRole(e){return this._adminPost("/roles",e)}getAdminRole(e){return this._adminGet(`/roles/${e}`)}updateAdminRole(e,t){return this._adminPatch(`/roles/${e}`,t)}deleteAdminRole(e){return this._adminDelete(`/roles/${e}`)}listAdminApiKeys(){return this._adminGet("/api-keys")}createAdminApiKey(e){return this._adminPost("/api-keys",e)}getAdminApiKey(e){return this._adminGet(`/api-keys/${e}`)}updateAdminApiKey(e,t){return this._adminPatch(`/api-keys/${e}`,t)}deleteAdminApiKey(e){return this._adminDelete(`/api-keys/${e}`)}regenerateAdminApiKeySecret(e){return this._adminPost(`/api-keys/${e}/regenerate-secret`)}listAdminAccounts(){return this._adminGet("/accounts")}createAdminAccount(e){return this._adminPost("/accounts",e)}getAdminAccount(e){return this._adminGet(`/accounts/${e}`)}updateAdminAccount(e,t){return this._adminPatch(`/accounts/${e}`,t)}deleteAdminAccount(e){return this._adminDelete(`/accounts/${e}`)}listAdminLicenses(){return this._adminGet("/licenses")}createAdminLicense(e){return this._adminPost("/licenses",e)}getAdminLicense(e){return this._adminGet(`/licenses/${e}`)}updateAdminLicense(e,t){return this._adminPatch(`/licenses/${e}`,t)}deleteAdminLicense(e){return this._adminDelete(`/licenses/${e}`)}runAdminBackup(e){return this._adminPost("/backup/run",e)}getAdminBackupStatus(e){return this._adminPost("/backup/status",e)}listAdminBackups(e){return this._adminPost("/backup/list",e)}restoreAdminBackup(e){return this._adminPost("/backup/restore",e)}deleteAdminBackup(e){return this._adminPost("/backup/delete",e)}disableAdminAccountTwoFactor(e){return this._adminDelete(`/accounts/${e}/2fa`)}}}var v=class extends z(Q(D(V(N(X(K(j(O)))))))){};function W(r){return class extends r{accountRegister(e){return this.http.post("/v1/account/register",e,!1)}accountWithdraw(e){return this.http.post("/v1/account/withdraw",e)}accountChangePassword(e){return this.http.post("/v1/account/change-password",e)}accountReactivate(e){return this.http.post("/v1/account/reactivate",e,!1)}listAccountBiometrics(){return this.http.get("/v1/account/biometric")}registerAccountBiometric(e){return this.http.post("/v1/account/biometric",e)}deleteAccountBiometric(e){return this.http.delete(`/v1/account/biometric/${e}`)}}}function J(r){return class extends r{listBoardCategories(e={}){let t=c(e);return this.http.get(`/v1/board/categories${t?`?${t}`:""}`,!1)}getBoardCategory(e){return this.http.get(`/v1/board/categories/${e}`,!1)}createBoardCategory(e){return this.http.post("/v1/board/categories",e)}updateBoardCategory(e,t){return this.http.put(`/v1/board/categories/${e}`,t)}deleteBoardCategory(e){return this.http.delete(`/v1/board/categories/${e}`)}listBoardPosts(e,t={}){let s=c(t);return this.http.get(`/v1/board/${e}/list${s?`?${s}`:""}`,!1)}getBoardPost(e){return this.http.get(`/v1/board/posts/${e}`,!1)}createBoardPost(e,t){return this.http.post(`/v1/board/${e}/submit`,t)}updateBoardPost(e,t){return this.http.put(`/v1/board/posts/${e}`,t)}deleteBoardPost(e){return this.http.delete(`/v1/board/posts/${e}`)}listBoardComments(e,t={}){let s=c(t);return this.http.get(`/v1/board/posts/${e}/comments${s?`?${s}`:""}`,!1)}createBoardComment(e,t){return this.http.post(`/v1/board/posts/${e}/comments/submit`,t)}updateBoardComment(e,t){return this.http.put(`/v1/board/comments/${e}`,t)}deleteBoardComment(e){return this.http.delete(`/v1/board/comments/${e}`)}listBoardFiles(e){return this.http.get(`/v1/board/posts/${e}/files`,!1)}async uploadBoardFile(e,t){let s=new FormData;return s.append("file",t,t instanceof File?t.name:"upload"),this.requestForm("POST",`/v1/board/posts/${e}/files`,s)}boardFileUrl(e){return`${this.baseUrl}/v1/board/files/${e}`}deleteBoardFile(e){return this.http.delete(`/v1/board/files/${e}`)}createBoardGuestPost(e,t){return this.http.post(`/v1/board/${e}/guest-submit`,t,!1)}authenticateBoardGuestPost(e,t){return this.http.post(`/v1/board/posts/${e}/guest-auth`,t,!1)}toggleBoardPostLike(e){return this.http.post(`/v1/board/posts/${e}/like`,{})}acceptBoardPost(e){return this.http.post(`/v1/board/posts/${e}/accept`,{})}rateBoardPost(e,t){return this.http.post(`/v1/board/posts/${e}/rating`,t)}rateBoardComment(e,t){return this.http.post(`/v1/board/comments/${e}/rating`,t)}listBoardTags(e={}){let t=c(e);return this.http.get(`/v1/board/tags${t?`?${t}`:""}`,!1)}setBoardPostTags(e,t){return this.http.put(`/v1/board/posts/${e}/tags`,t)}reportBoardPost(e,t){return this.http.post(`/v1/board/posts/${e}/report`,t)}reportBoardComment(e,t){return this.http.post(`/v1/board/comments/${e}/report`,t)}listBoardReports(e={}){let t=c(e);return this.http.get(`/v1/board/admin/reports${t?`?${t}`:""}`)}updateBoardReport(e,t){return this.http.patch(`/v1/board/admin/reports/${e}`,t)}markBoardPostRead(e){return this.http.post(`/v1/board/posts/${e}/read`,{})}listBoardMentions(e={}){let t=c(e);return this.http.get(`/v1/board/mentions${t?`?${t}`:""}`)}markBoardMentionRead(e){return this.http.patch(`/v1/board/mentions/${e}/read`,{})}}}function Y(r){return class extends r{sendEmailVerification(e){return this.http.post("/v1/email-verify/send",e,!1)}confirmEmailVerification(e){return this.http.post("/v1/email-verify/confirm",e,!1)}activateEmailVerification(e){let t=c(e);return this.http.get(`/v1/email-verify/activate${t?`?${t}`:""}`,!1)}getEmailVerificationStatus(){return this.http.get("/v1/email-verify/status")}changeVerifiedEmail(e){return this.http.post("/v1/email-verify/change",e)}}}function Z(r){return class extends r{oauthAuthorizeUrl(e,t={}){let s=c(t);return`${this.baseUrl}/v1/oauth/${e}${s?`?${s}`:""}`}oauthCallback(e,t,s="POST"){if(s==="GET"){let i=c(t??{});return this.http.get(`/v1/oauth/${e}/callback${i?`?${i}`:""}`,!1)}return this.http.post(`/v1/oauth/${e}/callback`,t,!1)}linkOAuthAccount(e){return this.http.post("/v1/account/oauth/link",e)}unlinkOAuthAccount(e){return this.http.delete(`/v1/account/oauth/link/${e}`)}listOAuthProviders(){return this.http.get("/v1/account/oauth/providers")}refreshOAuthProviderToken(e,t){return this.http.post(`/v1/account/oauth/refresh/${e}`,t)}}}function ee(r){return class extends r{requestPasswordReset(e){return this.http.post("/v1/password-reset/request",e,!1)}validatePasswordResetToken(e){return this.http.get(`/v1/password-reset/validate/${encodeURIComponent(e)}`,!1)}verifyPasswordReset(e){return this.http.post("/v1/password-reset/verify",e,!1)}}}function te(r){return class extends r{setupTwoFactor(e){return this.http.post("/v1/account/2fa/setup",e)}verifyTwoFactorSetup(e){return this.http.post("/v1/account/2fa/setup/verify",e,!1)}disableTwoFactor(){return this.http.delete("/v1/account/2fa")}getTwoFactorStatus(){return this.http.get("/v1/account/2fa/status")}regenerateTwoFactorRecoveryCodes(){return this.http.post("/v1/account/2fa/recovery/regenerate")}verifyTwoFactor(e){return this.http.post("/v1/account/2fa/verify",e,!1)}recoverTwoFactorAccess(e){return this.http.post("/v1/account/2fa/recovery",e,!1)}}}function ne(r){return class extends r{alimtalkSend(e){return this.http.post("/v1/alimtalk/send",e)}alimtalkStatus(e){return this.http.get(`/v1/alimtalk/status/${e}`,!1)}listAlimtalkTemplates(){return this.http.get("/v1/alimtalk/templates",!1)}alimtalkWebhook(e,t){return this.http.post(`/v1/alimtalk/webhook/${encodeURIComponent(e)}`,t,!1)}}}function re(r){return class extends r{friendtalkSend(e){return this.http.post("/v1/friendtalk/send",e)}}}function se(r){return class extends r{listHolidays(e={}){let t=c(e);return this.http.get(`/v1/holidays${t?`?${t}`:""}`,!1)}getHolidayByDate(e){return this.http.get(`/v1/holidays/${encodeURIComponent(e)}`,!1)}syncHolidays(e){return this.http.post("/v1/holidays/sync",e)}}}function ie(r){return class extends r{identityRequest(e){return this.http.post("/v1/identity/request",e,!1)}identityCallback(e){return this.http.post("/v1/identity/callback",e,!1)}identityResult(e){return this.http.get(`/v1/identity/result/${encodeURIComponent(e)}`,!1)}identityVerifyCI(e){return this.http.post("/v1/identity/verify-ci",e)}}}function oe(r){return class extends r{llmChat(e){return this.http.post("/v1/llm/chat",e)}llmChatStream(e){return this.http.post("/v1/llm/chat/stream",e)}createLlmConversation(e){return this.http.post("/v1/llm/conversations",e)}sendLlmMessage(e,t){return this.http.post(`/v1/llm/conversations/${e}/messages`,t)}listLlmConversations(e={}){let t=c(e);return this.http.get(`/v1/llm/conversations${t?`?${t}`:""}`)}getLlmConversation(e){return this.http.get(`/v1/llm/conversations/${e}`)}updateLlmConversation(e,t){return this.http.patch(`/v1/llm/conversations/${e}`,t)}deleteLlmConversation(e){return this.http.delete(`/v1/llm/conversations/${e}`)}ragUploadDocument(e){return this.requestForm("POST","/v1/llm/rag/documents",e)}ragListDocuments(e={}){let t=c(e);return this.http.get(`/v1/llm/rag/documents${t?`?${t}`:""}`)}ragDeleteDocument(e){return this.http.delete(`/v1/llm/rag/documents/${encodeURIComponent(e)}`)}ragSearch(e){return this.http.post("/v1/llm/rag/search",e)}ragChat(e){return this.http.post("/v1/llm/rag/chat",e)}ragChatStream(e){return this.http.post("/v1/llm/rag/chat/stream",e)}ragRebuildIndex(e){return this.http.post("/v1/llm/rag/rebuild-index",e)}listLlmProviders(){return this.http.get("/v1/llm/providers")}getLlmUsage(e={}){let t=c(e);return this.http.get(`/v1/llm/usage${t?`?${t}`:""}`)}getLlmUsageSummary(e={}){let t=c(e);return this.http.get(`/v1/llm/usage/summary${t?`?${t}`:""}`)}getLlmCacheStats(){return this.http.get("/v1/llm/cache/stats")}clearLlmCache(){return this.http.delete("/v1/llm/cache")}listLlmTemplates(){return this.http.get("/v1/llm/templates")}llmTemplateChat(e,t){return this.http.post(`/v1/llm/${encodeURIComponent(e)}/chat`,t)}llmTemplateChatStream(e,t){return this.http.post(`/v1/llm/${encodeURIComponent(e)}/chat/stream`,t)}listLlmChatbots(e={}){let t=c(e);return this.http.get(`/v1/llm/chatbots${t?`?${t}`:""}`)}createLlmChatbot(e){return this.http.post("/v1/llm/chatbots",e)}getLlmChatbot(e){return this.http.get(`/v1/llm/chatbots/${e}`)}updateLlmChatbot(e,t){return this.http.patch(`/v1/llm/chatbots/${e}`,t)}deleteLlmChatbot(e){return this.http.delete(`/v1/llm/chatbots/${e}`)}llmChatbotChat(e,t){return this.http.post(`/v1/llm/chatbots/${e}/chat`,t)}llmChatbotChatStream(e,t){return this.http.post(`/v1/llm/chatbots/${e}/chat/stream`,t)}listLlmChatbotSessions(e,t={}){let s=c(t);return this.http.get(`/v1/llm/chatbots/${e}/sessions${s?`?${s}`:""}`)}deleteLlmChatbotSession(e,t){return this.http.delete(`/v1/llm/chatbots/${e}/sessions/${t}`)}listLlmProfiles(e={}){let t=c(e);return this.http.get(`/v1/llm/profiles${t?`?${t}`:""}`)}upsertLlmProfile(e){return this.http.post("/v1/llm/profiles",e)}deleteLlmProfile(e){return this.http.delete(`/v1/llm/profiles/${e}`)}}}function ae(r){return class extends r{ocrRecognize(e){return this.requestForm("POST","/v1/ocr/recognize",e)}ocrRecognizeAsync(e){return this.requestForm("POST","/v1/ocr/recognize/async",e)}ocrRecognizeByDocType(e,t){return this.requestForm("POST",`/v1/ocr/${encodeURIComponent(e)}`,t)}listOcrResults(e={}){let t=c(e);return this.http.get(`/v1/ocr/results${t?`?${t}`:""}`)}getOcrResult(e){return this.http.get(`/v1/ocr/results/${encodeURIComponent(e)}`)}getOcrResultText(e){return this.http.get(`/v1/ocr/results/${encodeURIComponent(e)}/text`)}deleteOcrResult(e){return this.http.delete(`/v1/ocr/results/${encodeURIComponent(e)}`)}getOcrQuota(){return this.http.get("/v1/ocr/quota")}}}function ue(r){return class extends r{pgCreateOrder(e){return this.http.post("/v1/pg/orders",e)}pgGetOrder(e){return this.http.get(`/v1/pg/orders/${encodeURIComponent(e)}`)}pgConfirmPayment(e){return this.http.post("/v1/pg/confirm",e)}pgCancelPayment(e,t){return this.http.post(`/v1/pg/orders/${encodeURIComponent(e)}/cancel`,t)}pgSyncPaymentStatus(e,t){return this.http.post(`/v1/pg/orders/${encodeURIComponent(e)}/sync`,t)}pgWebhook(e){return this.http.post("/v1/pg/webhook",e,!1)}pgGetClientConfig(){return this.http.get("/v1/pg/config",!1)}}}function ce(r){return class extends r{appPushSend(e){return this.http.post("/v1/push/send",e)}appPushBroadcast(e){return this.http.post("/v1/push/broadcast",e)}appPushStatus(e){return this.http.get(`/v1/push/status/${e}`)}appPushRegisterDevice(e){return this.http.post("/v1/push/device",e)}appPushUnregisterDevice(e){return this.http.delete(`/v1/push/device/${e}`)}}}function le(r){return class extends r{smsSend(e){return this.http.post("/v1/sms/send",e)}smsStatus(e){return this.http.get(`/v1/sms/status/${e}`,!1)}smsVerificationSend(e){return this.http.post("/v1/sms/verification/send",e,!1)}smsVerificationVerify(e){return this.http.post("/v1/sms/verification/verify",e,!1)}}}function me(r){return class extends r{taxinvoiceRegistIssue(e){return this.http.post("/v1/taxinvoice",e)}taxinvoiceRegister(e){return this.http.post("/v1/taxinvoice/register",e)}taxinvoiceIssue(e){return this.http.post(`/v1/taxinvoice/${e}/issue`,{})}taxinvoiceCancelIssue(e,t){return this.http.post(`/v1/taxinvoice/${e}/cancel`,t)}taxinvoiceGetState(e){return this.http.get(`/v1/taxinvoice/${e}/state`)}taxinvoiceGetDetail(e){return this.http.get(`/v1/taxinvoice/${e}`)}}}var E=class extends ne(re(le(ce(ue(me(ae(oe(ie(se(Z(te(ee(Y(J(W(v)))))))))))))))){};var Se=new v,Ee=new E;function tr(r={}){return A(r,{singletonInstance:Se,ClientClass:v})}function ir(r={}){return A(r,{singletonInstance:Ee,ClientClass:E})}export{ir as useEntityAppServer,A as useEntityClient,tr as useEntityServer};
1
+ import{useCallback as B,useEffect as ve,useMemo as Fe,useRef as Re,useState as Se}from"react";function L(r,n){let{singleton:e=!0,tokenResolver:t,baseUrl:s,token:i,resumeSession:o}=r,[a,u]=Se(!1),[h,g]=Se(null),l=Re(!0);ve(()=>(l.current=!0,()=>{l.current=!1}),[]);let f=Fe(()=>{let T=e?n.singletonInstance:new n.ClientClass({baseUrl:s,token:i});e&&T.configure({baseUrl:s,token:i});let m=t?.();return typeof m=="string"&&T.setToken(m),T},[e,t,s,i,n.ClientClass,n.singletonInstance]),b=Re(o);ve(()=>{if(b.current){if(f.checkHealth){f.checkHealth(!0).catch(()=>{});return}f.refreshToken(b.current).catch(()=>{})}},[f]);let v=B(async T=>{l.current&&(u(!0),g(null));try{return await T()}catch(m){let y=m instanceof Error?m:new Error(String(m));throw l.current&&g(y),y}finally{l.current&&u(!1)}},[]),F=B((T,m,y)=>v(()=>f.submit(T,m,y)),[f,v]),j=B((T,m,y)=>v(()=>f.delete(T,m,y)),[f,v]),E=B((T,m)=>v(()=>f.query(T,m)),[f,v]),S=B(()=>{u(!1),g(null)},[]);return{client:f,isPending:a,error:h,reset:S,submit:F,del:j,query:E}}function K(r){let n=import.meta;if(n?.env?.[r]!=null)return n.env[r];let e=globalThis.process;if(e?.env?.[r]!=null)return e.env[r]}function c(r){return Object.entries(r).filter(([,n])=>n!=null).map(([n,e])=>`${encodeURIComponent(n==="orderBy"?"order_by":n)}=${encodeURIComponent(String(e))}`).join("&")}import{xchacha20poly1305 as Ce}from"@noble/ciphers/chacha";import{sha256 as je}from"@noble/hashes/sha2";import{hkdf as De}from"@noble/hashes/hkdf";var V=32,z=2,Q=14,x=24,Ne=16,Ke="entity-server:hkdf:v1",Ve="entity-server:packet-encryption";function $(r){return r instanceof Uint8Array?r:new Uint8Array(r)}function xe(r,n=Ve){return De(je,new TextEncoder().encode(r),new TextEncoder().encode(Ke),new TextEncoder().encode(n),V)}function _e(r,n=z,e=Q){let t=$(r);return t.length<V?n:n+t[V-1]%e}function Ee(r,n,e=z,t=Q){let s=$(r),i=$(n),o=_e(i,e,t),a=crypto.getRandomValues(new Uint8Array(o)),u=crypto.getRandomValues(new Uint8Array(x)),g=Ce(i,u).encrypt(s),l=new Uint8Array(o+x+g.length);return l.set(a,0),l.set(u,o),l.set(g,o+x),l}function Ae(r,n,e=z,t=Q){let s=$(r),i=$(n),o=_e(i,e,t);if(s.length<o+x+Ne)throw new Error("Encrypted packet too short");let a=s.slice(o,o+x),u=s.slice(o+x);return Ce(i,a).decrypt(u)}function q(r,n){return xe(r||n)}function Be(r,n){return Ee(r,n)}function I(r,n){let e=Ae(r,n);return JSON.parse(new TextDecoder().decode(e))}function $e(r,n,e,t){let s=n.toLowerCase().includes("application/octet-stream");if(e&&!s)throw new Error("Encrypted request required: Content-Type must be application/octet-stream");if(s){if(r==null)throw new Error("Encrypted request body is empty");if(r instanceof ArrayBuffer)return I(r,t);if(r instanceof Uint8Array){let i=r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength);return I(i,t)}throw new Error("Encrypted request body must be ArrayBuffer or Uint8Array")}return r==null||r===""?{}:typeof r=="string"?JSON.parse(r):r}import{sha256 as ze}from"@noble/hashes/sha2";import{hmac as Qe}from"@noble/hashes/hmac";function qe(r,n,e,t,s){let i=String(Math.floor(Date.now()/1e3)),o=crypto.randomUUID(),a=new TextEncoder().encode(`${r}|${n}|${i}|${o}|`),u=new Uint8Array(a.length+e.length);u.set(a,0),u.set(e,a.length);let g=[...Qe(ze,new TextEncoder().encode(s),u)].map(l=>l.toString(16).padStart(2,"0")).join("");return{"X-API-Key":t,"X-Timestamp":i,"X-Nonce":o,"X-Signature":g}}function We(r){return r.hmacSecret||r.token||r.anonymousPacketToken}function Xe(r,n,e){return r.hmacSecret?r.hmacSecret:n&&r.token||e}function Je(r){return r?r.length<=8?`${r.slice(0,2)}...${r.slice(-2)}`:`${r.slice(0,4)}...${r.slice(-4)}`:""}function Ye(r){typeof console>"u"||typeof console.error!="function"||console.error("[entity-client] packet decrypt failed",{method:r.method,path:r.path,withAuth:r.withAuth,status:r.status,contentType:r.contentType,responsePacketSource:Je(r.responsePacketSource),tokenPresent:r.tokenPresent,anonymousPacketTokenPresent:r.anonymousPacketTokenPresent,hmacEnabled:r.hmacEnabled,error:r.error instanceof Error?{name:r.error.name,message:r.error.message,stack:r.error.stack}:r.error})}function Ze(r){return r!=="GET"&&r!=="HEAD"&&r!=="OPTIONS"}function H(r){if(typeof document>"u")return"";for(let n of document.cookie.split(";")){let e=n.indexOf("=");if(!(e<0)&&n.substring(0,e).trim()===r)return decodeURIComponent(n.substring(e+1).trim())}return""}function et(r,n){return r===403&&/csrf/i.test(n)?!0:/csrf/i.test(n)&&/expired|token validation failed/i.test(n)}async function Oe(r){if((r.headers.get("Content-Type")??"").includes("application/json")){let t=await r.json().catch(()=>null);if(t?.error)return t.error;if(t?.message)return t.message}return await r.text().catch(()=>"")||`HTTP ${r.status}`}async function w(r,n,e,t,s=!0,i={},o=!0){let a=typeof o=="boolean"?{requireOkShape:o}:o,u=a.requireOkShape??!0,h=new Set(a.allowStatuses??[]),{baseUrl:g,token:l,apiKey:f,hmacSecret:b,encryptRequests:v,csrfEnabled:F,csrfHeaderName:j,csrfCookieName:E,refreshCsrfCookie:S,onAccessToken:T}=r,m=r.anonymousPacketToken||H("anon_token"),y=s&&!!(f&&b),Ie=We(r),Pe=Xe(r,s,m),O=F&&Ze(n)&&!y,A=O?H(E):"",we="application/json",He=!y&&!!m,P=null;if(t!=null)if(v&&!!Ie&&s&&n!=="GET"&&n!=="HEAD"){let k=q(b,l||m);P=Be(new TextEncoder().encode(JSON.stringify(t)),k),we="application/octet-stream"}else P=JSON.stringify(t);let Ge=p=>{let k={...i},U=Object.keys(k).some(C=>C.toLowerCase()==="content-type");if(P!=null&&!U&&(k["Content-Type"]=we),!y&&s&&l&&(k.Authorization=`Bearer ${l}`),He&&(k["X-Packet-Token"]=m),O&&p&&(k[j]=p),y){let C=P instanceof Uint8Array?P:typeof P=="string"?new TextEncoder().encode(P):new Uint8Array(0);Object.assign(k,qe(n,e,C,f,b))}return k};O&&!A&&S&&(await S(),A=H(E));let be=p=>fetch(g+e,{method:n,headers:Ge(p),...P!=null?{body:P}:{},credentials:"include"}),d=await be(A);if(!d.ok){let p=await Oe(d.clone());if(O&&S&&et(d.status,p))await S(),A=H(E),d=await be(A);else if(!h.has(d.status)){let k=new Error(p);throw k.status=d.status,k}}if(!d.ok&&!h.has(d.status)){let p=new Error(await Oe(d));throw p.status=d.status,p}let M=d.headers.get("X-Access-Token")?.trim()??"",D=d.headers.get("Content-Type")??"";if(D.includes("application/octet-stream")){let p=q(b,Pe),k=await d.arrayBuffer(),U;try{U=I(k,p)}catch(C){throw Ye({method:n,path:e,withAuth:s,status:d.status,contentType:D,responsePacketSource:Pe,tokenPresent:!!l,anonymousPacketTokenPresent:!!m,hmacEnabled:!!b,error:C}),C}return M&&T?.(M),U}if(M&&T?.(M),!D.includes("application/json"))return await d.text();let N=await d.json();if(u&&!N.ok&&!h.has(d.status)){let p=new Error(N.message??`EntityServer error (HTTP ${d.status})`);throw p.status=d.status,p}return N}var W="/v1/realtime",G=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;realtimeEnabled;realtimePath;realtimeAutoConnect;realtimeAutoReconnect;realtimeReconnectDelayMs;realtimeStatus;_realtimeSocket=null;_realtimeConnectPromise=null;_realtimeReconnectTimer=null;_realtimeShouldReconnect=!1;_realtimeMessageListeners=new Set;_realtimeStatusListeners=new Set;_realtimeEventListeners=new Map;constructor(n={}){let e=K("VITE_ENTITY_SERVER_URL");this.baseUrl=(n.baseUrl??e??"").replace(/\/$/,""),this.token=n.token??"",this.anonymousPacketToken=n.anonymousPacketToken??"",this.apiKey=n.apiKey??"",this.hmacSecret=n.hmacSecret??"",this.encryptRequests=n.encryptRequests??!1,this.csrfEnabled=n.csrfEnabled??!1,this.csrfHeaderName=n.csrfHeaderName??"x-csrf-token",this.csrfCookieName=n.csrfCookieName??"_csrf",this.keepSession=n.keepSession??!1,this.refreshBuffer=n.refreshBuffer??60,this.onTokenRefreshed=n.onTokenRefreshed,this.onSessionExpired=n.onSessionExpired,this.onHealthChange=n.onHealthChange,this.realtimeEnabled=!1,this.realtimePath=W,this.realtimeAutoConnect=!0,this.realtimeAutoReconnect=!0,this.realtimeReconnectDelayMs=3e3,this.realtimeStatus="idle",this._applyRealtimeOptions(n.realtime),typeof n.healthTickInterval=="number"&&n.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(n.healthTickInterval))}configure(n){typeof n.baseUrl=="string"&&(this.baseUrl=n.baseUrl.replace(/\/$/,"")),typeof n.token=="string"&&(this.token=n.token),typeof n.anonymousPacketToken=="string"&&(this.anonymousPacketToken=n.anonymousPacketToken),typeof n.encryptRequests=="boolean"&&(this.encryptRequests=n.encryptRequests),typeof n.csrfEnabled=="boolean"&&(this.csrfEnabled=n.csrfEnabled),typeof n.csrfHeaderName=="string"&&(this.csrfHeaderName=n.csrfHeaderName),typeof n.csrfCookieName=="string"&&(this.csrfCookieName=n.csrfCookieName),typeof n.apiKey=="string"&&(this.apiKey=n.apiKey),typeof n.hmacSecret=="string"&&(this.hmacSecret=n.hmacSecret),typeof n.keepSession=="boolean"&&(this.keepSession=n.keepSession),typeof n.refreshBuffer=="number"&&(this.refreshBuffer=n.refreshBuffer),n.onTokenRefreshed&&(this.onTokenRefreshed=n.onTokenRefreshed),n.onSessionExpired&&(this.onSessionExpired=n.onSessionExpired),n.onHealthChange&&(this.onHealthChange=n.onHealthChange),typeof n.realtime<"u"&&this._applyRealtimeOptions(n.realtime),typeof n.healthTickInterval=="number"&&n.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(n.healthTickInterval))}setToken(n){if(this.token=n,!n){this.disconnectRealtime("token_cleared");return}this.realtimeEnabled&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{})}setAnonymousPacketToken(n){this.anonymousPacketToken=n}setApiKey(n){this.apiKey=n}setHmacSecret(n){this.hmacSecret=n}setEncryptRequests(n){this.encryptRequests=n}setCsrfEnabled(n){this.csrfEnabled=n}addRealtimeListener(n){this._realtimeMessageListeners.add(n)}removeRealtimeListener(n){this._realtimeMessageListeners.delete(n)}addRealtimeStatusListener(n){this._realtimeStatusListeners.add(n)}removeRealtimeStatusListener(n){this._realtimeStatusListeners.delete(n)}addRealtimeEventListener(n,e){let t=String(n).trim();t&&(this._realtimeEventListeners.has(t)||this._realtimeEventListeners.set(t,new Set),this._realtimeEventListeners.get(t).add(e))}removeRealtimeEventListener(n,e){let t=String(n).trim();if(!t)return;let s=this._realtimeEventListeners.get(t);s&&(s.delete(e),s.size===0&&this._realtimeEventListeners.delete(t))}async connectRealtime(){if(!this.realtimeEnabled){this._setRealtimeStatus("disabled","realtime_disabled");return}if(!this.token)throw new Error("Cannot open realtime connection without access token.");if(typeof WebSocket>"u")throw new Error("WebSocket is not available in this environment.");if(this._realtimeSocket&&this._realtimeSocket.readyState===WebSocket.OPEN)return;if(this._realtimeSocket&&this._realtimeSocket.readyState===WebSocket.CONNECTING&&this._realtimeConnectPromise)return this._realtimeConnectPromise;this._clearRealtimeReconnectTimer(),this._realtimeShouldReconnect=this.realtimeAutoReconnect,this._setRealtimeStatus("connecting","connect_requested");let n=new WebSocket(this._buildRealtimeUrl());return this._realtimeSocket=n,this._realtimeConnectPromise=new Promise((e,t)=>{let s=!1,i=()=>{s||(s=!0,this._realtimeConnectPromise=null,e())},o=a=>{s||(s=!0,this._realtimeConnectPromise=null,t(a))};n.addEventListener("open",()=>{this._setRealtimeStatus("open","socket_open"),i()}),n.addEventListener("message",a=>{this._handleRealtimeMessage(a.data)}),n.addEventListener("error",()=>{this._setRealtimeStatus("closed","socket_error",new Error("Realtime socket error."))}),n.addEventListener("close",a=>{this._realtimeSocket===n&&(this._realtimeSocket=null);let u=a.reason||"socket_closed",h=new Error(`Realtime socket closed (${a.code}${a.reason?`: ${a.reason}`:""}).`);this._setRealtimeStatus("closed",u,h),s||o(h),this._realtimeShouldReconnect&&this.realtimeEnabled&&this.realtimeAutoReconnect&&this.token&&this._scheduleRealtimeReconnect(u)})}),this._realtimeConnectPromise}disconnectRealtime(n="client_disconnect"){if(this._realtimeShouldReconnect=!1,this._clearRealtimeReconnectTimer(),this._realtimeSocket){let e=this._realtimeSocket;this._realtimeSocket=null;try{(e.readyState===WebSocket.OPEN||e.readyState===WebSocket.CONNECTING)&&e.close(1e3,n)}catch{}}this._realtimeConnectPromise=null,this._setRealtimeStatus(this.realtimeEnabled?"idle":"disabled",n)}sendRealtime(n){return!this._realtimeSocket||this._realtimeSocket.readyState!==WebSocket.OPEN?!1:(this._realtimeSocket.send(JSON.stringify(n)),!0)}subscribeRealtime(n){return this.sendRealtime({type:"subscribe",channel:"session",event:"session.subscribe",data:{subscriptions:n}})}unsubscribeRealtime(n){return this.sendRealtime({type:"unsubscribe",channel:"session",event:"session.unsubscribe",data:{subscriptions:n}})}startHealthTick(n=300*1e3){this.stopHealthTick();let e=()=>{this._healthTickPromise||(this._healthTickPromise=(this._csrfRefresher?this._csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this._healthTickPromise=null}))};e(),this._healthTickTimer=setInterval(e,n)}stopHealthTick(){this._healthTickTimer!==null&&(clearInterval(this._healthTickTimer),this._healthTickTimer=null),this._healthTickPromise=null}_scheduleKeepSession(n,e,t){this._clearRefreshTimer(),this._sessionRefreshToken=n;let s=Math.max((e-this.refreshBuffer)*1e3,0);this._refreshTimer=setTimeout(async()=>{if(this._sessionRefreshToken)try{let i=await t(this._sessionRefreshToken);this.onTokenRefreshed?.(i.access_token,i.expires_in),this._scheduleKeepSession(this._sessionRefreshToken,i.expires_in,t)}catch(i){this._clearRefreshTimer(),this.onSessionExpired?.(i instanceof Error?i:new Error(String(i)))}},s)}_clearRefreshTimer(){this._refreshTimer!==null&&(clearTimeout(this._refreshTimer),this._refreshTimer=null)}stopKeepSession(){this._clearRefreshTimer(),this._sessionRefreshToken=null}_applyRealtimeOptions(n){let e=typeof n=="boolean"?{enabled:n}:n??{};if(this.realtimeEnabled=e.enabled??!1,this.realtimePath=String(e.path??W).trim()||W,this.realtimeAutoConnect=e.autoConnect??!0,this.realtimeAutoReconnect=e.autoReconnect??!0,this.realtimeReconnectDelayMs=Math.max(250,e.reconnectDelayMs??3e3),!this.realtimeEnabled){this.disconnectRealtime("realtime_disabled");return}this._setRealtimeStatus("idle","realtime_enabled"),this.token&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{})}_buildRealtimeUrl(){let e=this.baseUrl||K("VITE_ENTITY_SERVER_URL")||""||(typeof window<"u"?window.location.origin:"");if(!e)throw new Error("Realtime connection requires baseUrl.");let t=new URL(this.realtimePath,e);return t.protocol=t.protocol==="https:"?"wss:":"ws:",t.searchParams.set("access_token",this.token),t.toString()}_handleRealtimeMessage(n){if(typeof n!="string")return;let e;try{e=JSON.parse(n)}catch{return}for(let s of this._realtimeMessageListeners)s(e);let t=this._realtimeEventListeners.get(e.event);if(t)for(let s of t)s(e)}_scheduleRealtimeReconnect(n){this._clearRealtimeReconnectTimer(),this._realtimeReconnectTimer=setTimeout(()=>{this._realtimeReconnectTimer=null,!(!this.realtimeEnabled||!this.token)&&(this._setRealtimeStatus("connecting",`${n}:reconnect`),this.connectRealtime().catch(()=>{}))},this.realtimeReconnectDelayMs)}_clearRealtimeReconnectTimer(){this._realtimeReconnectTimer!==null&&(clearTimeout(this._realtimeReconnectTimer),this._realtimeReconnectTimer=null)}_setRealtimeStatus(n,e,t){let s=this.realtimeStatus;if(!(s===n&&typeof e>"u"&&typeof t>"u")){this.realtimeStatus=n;for(let i of this._realtimeStatusListeners)i({status:n,previousStatus:s,...e?{reason:e}:{},...t?{error:t}:{}})}}_applyCsrfHealth(){if(!(typeof document>"u")){for(let n of document.cookie.split(";")){let e=n.indexOf("=");if(!(e<0)&&n.substring(0,e).trim()===this.csrfCookieName){this.csrfEnabled=!!n.substring(e+1).trim();return}}this.csrfEnabled=!1}}readRequestBody(n,e="application/json",t=!1){let s=q(this.hmacSecret,this.token||this.anonymousPacketToken);return $e(n,e,t,s)}get _reqOpts(){return{baseUrl:this.baseUrl,token:this.token,anonymousPacketToken:this.anonymousPacketToken,apiKey:this.apiKey,hmacSecret:this.hmacSecret,encryptRequests:this.encryptRequests,csrfEnabled:this.csrfEnabled,csrfHeaderName:this.csrfHeaderName,csrfCookieName:this.csrfCookieName,refreshCsrfCookie:this.csrfEnabled?this._csrfRefresher:null,onAccessToken:n=>{this.token=n}}}get http(){let n=this;return{get(e,t=!0,s){return w(n._reqOpts,"GET",e,void 0,t,s,!1)},post(e,t,s=!0,i){return w(n._reqOpts,"POST",e,t,s,i,!1)},put(e,t,s=!0,i){return w(n._reqOpts,"PUT",e,t,s,i,!1)},patch(e,t,s=!0,i){return w(n._reqOpts,"PATCH",e,t,s,i,!1)},delete(e,t,s=!0,i){return w(n._reqOpts,"DELETE",e,t,s,i,!1)}}}requestBinary(n,e,t,s=!0){return this._requestBinary(n,e,t,s)}requestForm(n,e,t,s=!0){return this._requestForm(n,e,t,s)}requestFormBinary(n,e,t,s=!0){return this._requestFormBinary(n,e,t,s)}_request(n,e,t,s=!0,i){return w(this._reqOpts,n,e,t,s,i,!0)}async _requestBinary(n,e,t,s=!0){let i={"Content-Type":"application/json"};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,...t!=null?{body:JSON.stringify(t)}:{},credentials:"include"});if(!o.ok){let a=await o.text(),u=new Error(`HTTP ${o.status}: ${a}`);throw u.status=o.status,u}return o.arrayBuffer()}async _requestForm(n,e,t,s=!0){let i={};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,body:t,credentials:"include"}),a=await o.json();if(!a.ok){let u=new Error(a.message??`EntityServer error (HTTP ${o.status})`);throw u.status=o.status,u}return a}async _requestFormBinary(n,e,t,s=!0){let i={};s&&this.token&&(i.Authorization=`Bearer ${this.token}`),this.apiKey&&(i["X-API-Key"]=this.apiKey);let o=await fetch(this.baseUrl+e,{method:n,headers:i,body:t,credentials:"include"});if(!o.ok){let a=await o.text(),u=new Error(`HTTP ${o.status}: ${a}`);throw u.status=o.status,u}return o.arrayBuffer()}};function Me(r){return r.ok===!0&&r.requires_2fa!==!0&&typeof r.data=="object"&&r.data!==null&&"access_token"in r.data}function X(r){return class extends r{_csrfRefresher=()=>this.checkHealth(this.keepSession).then(()=>{});async checkHealth(e=!1){let t=this.token,s={};e&&(s["X-Session-Bootstrap"]="1");let i=await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include",headers:s}),o=await i.json(),a=i.headers.get("X-Access-Token");a&&(this.token=a,e&&a!==t&&this.onTokenRefreshed?.(a,0),e&&o.authenticated===!0&&this.realtimeEnabled&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{}));let u=this._readCookie("anon_token");return o.packet_encryption===!0&&u&&(this.anonymousPacketToken=u,this.encryptRequests=!0),this._applyCsrfHealth(),e&&o.authenticated===!1&&t&&(this.disconnectRealtime("session_expired"),this.onSessionExpired?.(new Error("Session expired"))),o}_readCookie(e){if(typeof document>"u")return null;let t=document.cookie.split(";").map(s=>s.trim()).find(s=>s.startsWith(`${e}=`));if(!t)return null;try{return decodeURIComponent(t.slice(e.length+1))}catch{return t.slice(e.length+1)}}async _ensurePublicAuthBootstrap(){if(typeof document>"u"||this.apiKey&&this.hmacSecret)return;let e=!!this.anonymousPacketToken||!!this._readCookie("anon_token"),t=!!this._readCookie(this.csrfCookieName);e&&t&&this.csrfEnabled||await this.checkHealth(!1)}async login(e,t){await this._ensurePublicAuthBootstrap();let s=await w(this._reqOpts,"POST","/v1/auth/login",{email:e,passwd:t},!1,{},{requireOkShape:!1,allowStatuses:[403]});return Me(s)&&(this.token=s.data.access_token,this._applyCsrfHealth(),this.keepSession&&this._healthTickTimer===null&&this.startHealthTick(),this.realtimeEnabled&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{})),s}async tokenRefresh(){let e=await this._request("POST","/v1/auth/token_refresh",void 0,!1);return this.token=e.data.access_token,this._applyCsrfHealth(),e.data}async refreshToken(e){if(!e)return this.tokenRefresh();let t=await this._request("POST","/v1/auth/refresh",{refresh_token:e},!1);return this.token=t.data.access_token,this._applyCsrfHealth(),t.data}async logout(e){this.stopKeepSession(),this.stopHealthTick(),this.disconnectRealtime("logout");let t=await this._request("POST","/v1/auth/logout",e?{refresh_token:e}:void 0,!1);return this.token="",this._applyCsrfHealth(),t}me(){return this._request("GET","/v1/auth/me")}withdraw(e){return this._request("POST","/v1/auth/withdraw",e?{passwd:e}:{})}}}function J(r){return class extends r{async transStart(){let e=await this._request("POST","/v1/transaction/start",void 0,!1);return this.activeTxId=e.transaction_id,this.activeTxId}transRollback(e){let t=e??this.activeTxId;return t?(this.activeTxId=null,this._request("POST",`/v1/transaction/rollback/${t}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}transCommit(e){let t=e??this.activeTxId;return t?(this.activeTxId=null,this._request("POST",`/v1/transaction/commit/${t}`)):Promise.reject(new Error("No active transaction. Call transStart() first."))}meta(e){return this._request("POST",`/v1/entity/${e}/meta`,{})}validate(e,t){return this.http.post(`/v1/entity/${e}/validate`,t)}get(e,t,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this._request("GET",`/v1/entity/${e}/${t}${i}`)}find(e,t,s={}){let i=s.skipHooks?"?skipHooks=true":"";return this._request("POST",`/v1/entity/${e}/find${i}`,t??{})}list(e,t={}){let{conditions:s,fields:i,orderDir:o,orderBy:a,...u}=t,h={page:1,limit:20,...u};return a&&(h.orderBy=o==="DESC"?`-${a}`:a),i?.length&&(h.fields=i.join(",")),this._request("POST",`/v1/entity/${e}/list?${c(h)}`,s??{})}count(e,t){return this._request("POST",`/v1/entity/${e}/count`,t??{})}query(e,t){return this._request("POST",`/v1/entity/${e}/query`,t)}submit(e,t,s={}){let i=s.transactionId??this.activeTxId,o=i?{"X-Transaction-ID":i}:void 0,a=s.skipHooks?"?skipHooks=true":"";return this._request("POST",`/v1/entity/${e}/submit${a}`,t,!0,o)}delete(e,t,s={}){let i=new URLSearchParams;s.hard&&i.set("hard","true"),s.skipHooks&&i.set("skipHooks","true");let o=i.size?`?${i}`:"",a=s.transactionId??this.activeTxId,u=a?{"X-Transaction-ID":a}:void 0;return this._request("POST",`/v1/entity/${e}/delete/${t}${o}`,void 0,!0,u)}history(e,t,s={}){return this._request("GET",`/v1/entity/${e}/history/${t}?${c({page:1,limit:50,...s})}`)}rollback(e,t){return this._request("POST",`/v1/entity/${e}/rollback/${t}`)}}}function Y(r){return class extends r{async fileUpload(e,t,s={}){let i=new FormData;return i.append("file",t,t instanceof File?t.name:"upload"),s.refSeq!=null&&i.append("ref_seq",String(s.refSeq)),s.isPublic!=null&&i.append("is_public",s.isPublic?"true":"false"),this._requestForm("POST",`/v1/files/${e}/upload`,i)}fileDownload(e,t){return this._requestBinary("POST",`/v1/files/${e}/download/${t}`,{})}fileDelete(e,t){return this._request("POST",`/v1/files/${e}/delete/${t}`,{})}fileList(e,t={}){return this._request("POST",`/v1/files/${e}/list`,t.refSeq?{ref_seq:t.refSeq}:{})}fileMeta(e,t){return this._request("POST",`/v1/files/${e}/meta/${t}`,{})}fileToken(e){return this._request("POST",`/v1/files/token/${e}`,{})}fileViewUrl(e,t={}){let s=t.download?"?download=true":"";return`${this.baseUrl}/v1/files/${e}${s}`}fileUrl(e){return`${this.baseUrl}/v1/files/${e}`}}}function Z(r){return class extends r{push(e,t,s={}){return this.submit(e,t,s)}pushLogList(e={}){return this.list("push_log",e)}registerPushDevice(e,t,s,i={}){let{platform:o,deviceType:a,browser:u,browserVersion:h,pushEnabled:g=!0,transactionId:l}=i;return this.submit("account_device",{id:t,account_seq:e,push_token:s,push_enabled:g,...o?{platform:o}:{},...a?{device_type:a}:{},...u?{browser:u}:{},...h?{browser_version:h}:{}},{transactionId:l})}updatePushDeviceToken(e,t,s={}){let{pushEnabled:i=!0,transactionId:o}=s;return this.submit("account_device",{seq:e,push_token:t,push_enabled:i},{transactionId:o})}disablePushDevice(e,t={}){return this.submit("account_device",{seq:e,push_enabled:!1},{transactionId:t.transactionId})}}}function ee(r){return class extends r{smtpSend(e){return this._request("POST","/v1/smtp/send",e)}smtpStatus(e){return this._request("POST",`/v1/smtp/status/${e}`,{})}smtpTemplatePreview(e){let t=e.split("/").map(encodeURIComponent).join("/");return fetch(`${this.baseUrl}/v1/smtp/template/${t}`,{credentials:"include"}).then(s=>s.text())}}}function te(r){return class extends r{transactionStart(e){return this._request("POST","/v1/transaction/start",e??{})}transactionCommit(e){return this._request("POST",`/v1/transaction/commit/${encodeURIComponent(e)}`,{})}transactionRollback(e){return this._request("POST",`/v1/transaction/rollback/${encodeURIComponent(e)}`,{})}}}function ne(r){return class extends r{addressSido(){return this.http.get("/v1/utils/address/sido",!1)}addressSigungu(e){let t=new URLSearchParams({sido:e.sido}).toString();return this.http.get(`/v1/utils/address/sigungu?${t}`,!1)}addressDong(e){let t=new URLSearchParams({sido:e.sido,sigungu:e.sigungu}).toString();return this.http.get(`/v1/utils/address/dong?${t}`,!1)}addressClean(e){let t=new URLSearchParams({q:e.q}).toString();return this.http.get(`/v1/utils/address/clean?${t}`,!1)}qrcode(e,t={}){return this._requestBinary("POST","/v1/utils/qrcode",{content:e,...t})}qrcodeBase64(e,t={}){return this._request("POST","/v1/utils/qrcode/base64",{content:e,...t})}qrcodeText(e,t={}){return this._request("POST","/v1/utils/qrcode/text",{content:e,...t})}barcode(e,t={}){return this._requestBinary("POST","/v1/utils/barcode",{content:e,...t})}pdf2png(e,t={}){let s=new FormData;s.append("file",new Blob([e],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;t.dpi!=null&&i.set("dpi",String(t.dpi)),t.firstPage!=null&&i.set("first_page",String(t.firstPage)),t.lastPage!=null&&i.set("last_page",String(t.lastPage));let o=i.toString(),a="/v1/utils/pdf2png"+(o?`?${o}`:"");return this._requestFormBinary("POST",a,s)}pdf2pngByFileSeq(e,t={}){return this.requestBinary("POST",`/v1/utils/pdf2png/${e}`,t)}pdf2jpg(e,t={}){let s=new FormData;s.append("file",new Blob([e],{type:"application/pdf"}),"document.pdf");let i=new URLSearchParams;t.dpi!=null&&i.set("dpi",String(t.dpi)),t.firstPage!=null&&i.set("first_page",String(t.firstPage)),t.lastPage!=null&&i.set("last_page",String(t.lastPage));let o=i.toString(),a="/v1/utils/pdf2jpg"+(o?`?${o}`:"");return this._requestFormBinary("POST",a,s)}pdf2jpgByFileSeq(e,t={}){return this.requestBinary("POST",`/v1/utils/pdf2jpg/${e}`,t)}}}function re(r){return class extends r{_adminPath(e){return`/v1/admin${e}`}_adminGet(e){return this.http.get(this._adminPath(e))}_adminPost(e,t){return this.http.post(this._adminPath(e),t)}_adminPut(e,t){return this.http.put(this._adminPath(e),t)}_adminPatch(e,t){return this.http.patch(this._adminPath(e),t)}_adminDelete(e,t){return this.http.delete(this._adminPath(e),t)}listAdminEntities(){return this._adminGet("/entities")}getAdminErdSchema(){return this._adminGet("/erd/schema")}batchEnsureAdminEntities(e){return this._adminPost("/entities/batch-ensure",e)}createAdminEntityConfig(e,t){return this._adminPost(`/${e}/create`,t)}getAdminEntityConfig(e){return this._adminGet(`/${e}/config`)}updateAdminEntityConfig(e,t){return this._adminPut(`/${e}/config`,t)}validateAdminEntityConfig(e,t){return this._adminPost(t?`/${t}/validate`:"/entity/validate",e)}normalizeAdminEntityConfig(e,t){return this._adminPost(t?`/${t}/normalize`:"/entity/normalize",e)}getAdminEntityStats(e,t){return this._adminPost(`/${e}/stats`,t)}reindexAdminEntity(e){return this._adminPost(`/${e}/reindex`)}syncAdminEntitySchema(e){return this._adminPost(`/${e}/sync-schema`)}resetAdminEntity(e){return this._adminPost(`/${e}/reset`)}truncateAdminEntity(e){return this._adminPost(`/${e}/truncate`)}dropAdminEntity(e){return this._adminPost(`/${e}/drop`)}resetAllAdmin(e){return this._adminPost("/reset-all",e)}listAdminConfigs(){return this._adminGet("/configs")}getAdminConfig(e){return this._adminGet(`/configs/${e}`)}updateAdminConfig(e,t){return this._adminPatch(`/configs/${e}`,t)}listAdminRoles(){return this._adminGet("/roles")}createAdminRole(e){return this._adminPost("/roles",e)}getAdminRole(e){return this._adminGet(`/roles/${e}`)}updateAdminRole(e,t){return this._adminPatch(`/roles/${e}`,t)}deleteAdminRole(e){return this._adminDelete(`/roles/${e}`)}listAdminApiKeys(){return this._adminGet("/api-keys")}createAdminApiKey(e){return this._adminPost("/api-keys",e)}getAdminApiKey(e){return this._adminGet(`/api-keys/${e}`)}updateAdminApiKey(e,t){return this._adminPatch(`/api-keys/${e}`,t)}deleteAdminApiKey(e){return this._adminDelete(`/api-keys/${e}`)}regenerateAdminApiKeySecret(e){return this._adminPost(`/api-keys/${e}/regenerate-secret`)}listAdminAccounts(){return this._adminGet("/accounts")}createAdminAccount(e){return this._adminPost("/accounts",e)}getAdminAccount(e){return this._adminGet(`/accounts/${e}`)}updateAdminAccount(e,t){return this._adminPatch(`/accounts/${e}`,t)}deleteAdminAccount(e){return this._adminDelete(`/accounts/${e}`)}listAdminLicenses(){return this._adminGet("/licenses")}createAdminLicense(e){return this._adminPost("/licenses",e)}getAdminLicense(e){return this._adminGet(`/licenses/${e}`)}updateAdminLicense(e,t){return this._adminPatch(`/licenses/${e}`,t)}deleteAdminLicense(e){return this._adminDelete(`/licenses/${e}`)}runAdminBackup(e){return this._adminPost("/backup/run",e)}getAdminBackupStatus(e){return this._adminPost("/backup/status",e)}listAdminBackups(e){return this._adminPost("/backup/list",e)}restoreAdminBackup(e){return this._adminPost("/backup/restore",e)}deleteAdminBackup(e){return this._adminPost("/backup/delete",e)}disableAdminAccountTwoFactor(e){return this._adminDelete(`/accounts/${e}/2fa`)}}}var R=class extends ne(te(Y(ee(Z(re(J(X(G)))))))){};function se(r){return class extends r{accountRegister(e){return this.http.post("/v1/account/register",e,!1)}accountWithdraw(e){return this.http.post("/v1/account/withdraw",e)}accountChangePassword(e){return this.http.post("/v1/account/change-password",e)}accountReactivate(e){return this.http.post("/v1/account/reactivate",e,!1)}listAccountBiometrics(){return this.http.get("/v1/account/biometric")}registerAccountBiometric(e){return this.http.post("/v1/account/biometric",e)}deleteAccountBiometric(e){return this.http.delete(`/v1/account/biometric/${e}`)}}}function ie(r){return class extends r{listBoardCategories(e={}){let t=c(e);return this.http.get(`/v1/board/categories${t?`?${t}`:""}`,!1)}getBoardCategory(e){return this.http.get(`/v1/board/categories/${e}`,!1)}createBoardCategory(e){return this.http.post("/v1/board/categories",e)}updateBoardCategory(e,t){return this.http.put(`/v1/board/categories/${e}`,t)}deleteBoardCategory(e){return this.http.delete(`/v1/board/categories/${e}`)}listBoardPosts(e,t={}){let s=c(t);return this.http.get(`/v1/board/${e}/list${s?`?${s}`:""}`)}getBoardPost(e){return this.http.get(`/v1/board/posts/${e}`)}createBoardPost(e,t){return this.http.post(`/v1/board/${e}/submit`,t)}updateBoardPost(e,t){return this.http.put(`/v1/board/posts/${e}`,t)}deleteBoardPost(e){return this.http.delete(`/v1/board/posts/${e}`)}listBoardComments(e,t={}){let s=c(t);return this.http.get(`/v1/board/posts/${e}/comments${s?`?${s}`:""}`,!1)}createBoardComment(e,t){return this.http.post(`/v1/board/posts/${e}/comments/submit`,t)}updateBoardComment(e,t){return this.http.put(`/v1/board/comments/${e}`,t)}deleteBoardComment(e){return this.http.delete(`/v1/board/comments/${e}`)}listBoardFiles(e){return this.http.get(`/v1/board/posts/${e}/files`,!1)}async uploadBoardFile(e,t){let s=new FormData;return s.append("file",t,t instanceof File?t.name:"upload"),this.requestForm("POST",`/v1/board/posts/${e}/files`,s)}boardFileUrl(e){return`${this.baseUrl}/v1/board/files/${e}`}deleteBoardFile(e){return this.http.delete(`/v1/board/files/${e}`)}createBoardGuestPost(e,t){return this.http.post(`/v1/board/${e}/guest-submit`,t,!1)}authenticateBoardGuestPost(e,t){return this.http.post(`/v1/board/posts/${e}/guest-auth`,t,!1)}toggleBoardPostLike(e){return this.http.post(`/v1/board/posts/${e}/like`,{})}acceptBoardPost(e){return this.http.post(`/v1/board/posts/${e}/accept`,{})}rateBoardPost(e,t){return this.http.post(`/v1/board/posts/${e}/rating`,t)}rateBoardComment(e,t){return this.http.post(`/v1/board/comments/${e}/rating`,t)}listBoardTags(e={}){let t=c(e);return this.http.get(`/v1/board/tags${t?`?${t}`:""}`,!1)}setBoardPostTags(e,t){return this.http.put(`/v1/board/posts/${e}/tags`,t)}reportBoardPost(e,t){return this.http.post(`/v1/board/posts/${e}/report`,t)}reportBoardComment(e,t){return this.http.post(`/v1/board/comments/${e}/report`,t)}listBoardReports(e={}){let t=c(e);return this.http.get(`/v1/board/admin/reports${t?`?${t}`:""}`)}updateBoardReport(e,t){return this.http.patch(`/v1/board/admin/reports/${e}`,t)}markBoardPostRead(e){return this.http.post(`/v1/board/posts/${e}/read`,{})}listBoardMentions(e={}){let t=c(e);return this.http.get(`/v1/board/mentions${t?`?${t}`:""}`)}markBoardMentionRead(e){return this.http.patch(`/v1/board/mentions/${e}/read`,{})}}}function oe(r){return class extends r{sendEmailVerification(e){return this.http.post("/v1/email-verify/send",e,!1)}confirmEmailVerification(e){return this.http.post("/v1/email-verify/confirm",e,!1)}activateEmailVerification(e){let t=c(e);return this.http.get(`/v1/email-verify/activate${t?`?${t}`:""}`,!1)}getEmailVerificationStatus(){return this.http.get("/v1/email-verify/status")}changeVerifiedEmail(e){return this.http.post("/v1/email-verify/change",e)}}}function ae(r){return class extends r{oauthAuthorizeUrl(e,t={}){let s=c(t);return`${this.baseUrl}/v1/oauth/${e}${s?`?${s}`:""}`}oauthCallback(e,t,s="POST"){if(s==="GET"){let i=c(t??{});return this.http.get(`/v1/oauth/${e}/callback${i?`?${i}`:""}`,!1)}return this.http.post(`/v1/oauth/${e}/callback`,t,!1)}linkOAuthAccount(e){return this.http.post("/v1/account/oauth/link",e)}unlinkOAuthAccount(e){return this.http.delete(`/v1/account/oauth/link/${e}`)}listOAuthProviders(){return this.http.get("/v1/account/oauth/providers")}refreshOAuthProviderToken(e,t){return this.http.post(`/v1/account/oauth/refresh/${e}`,t)}}}function ue(r){return class extends r{requestPasswordReset(e){return this.http.post("/v1/password-reset/request",e,!1)}validatePasswordResetToken(e){return this.http.get(`/v1/password-reset/validate/${encodeURIComponent(e)}`,!1)}verifyPasswordReset(e){return this.http.post("/v1/password-reset/verify",e,!1)}}}function ce(r){return class extends r{setupTwoFactor(e){return this.http.post("/v1/account/2fa/setup",e)}verifyTwoFactorSetup(e){return this.http.post("/v1/account/2fa/setup/verify",e,!1)}disableTwoFactor(){return this.http.delete("/v1/account/2fa")}getTwoFactorStatus(){return this.http.get("/v1/account/2fa/status")}regenerateTwoFactorRecoveryCodes(){return this.http.post("/v1/account/2fa/recovery/regenerate")}verifyTwoFactor(e){return this.http.post("/v1/account/2fa/verify",e,!1)}recoverTwoFactorAccess(e){return this.http.post("/v1/account/2fa/recovery",e,!1)}}}function le(r){return class extends r{alimtalkSend(e){return this.http.post("/v1/alimtalk/send",e)}alimtalkStatus(e){return this.http.get(`/v1/alimtalk/status/${e}`,!1)}listAlimtalkTemplates(){return this.http.get("/v1/alimtalk/templates",!1)}alimtalkWebhook(e,t){return this.http.post(`/v1/alimtalk/webhook/${encodeURIComponent(e)}`,t,!1)}}}function me(r){return class extends r{friendtalkSend(e){return this.http.post("/v1/friendtalk/send",e)}}}function de(r){return class extends r{listHolidays(e={}){let t=c(e);return this.http.get(`/v1/holidays${t?`?${t}`:""}`,!1)}getHolidayByDate(e){return this.http.get(`/v1/holidays/${encodeURIComponent(e)}`,!1)}syncHolidays(e){return this.http.post("/v1/holidays/sync",e)}}}function he(r){return class extends r{identityRequest(e){return this.http.post("/v1/identity/request",e,!1)}identityCallback(e){return this.http.post("/v1/identity/callback",e,!1)}identityResult(e){return this.http.get(`/v1/identity/result/${encodeURIComponent(e)}`,!1)}identityVerifyCI(e){return this.http.post("/v1/identity/verify-ci",e)}}}function pe(r){return class extends r{llmChat(e){return this.http.post("/v1/llm/chat",e)}llmChatStream(e){return this.http.post("/v1/llm/chat/stream",e)}createLlmConversation(e){return this.http.post("/v1/llm/conversations",e)}sendLlmMessage(e,t){return this.http.post(`/v1/llm/conversations/${e}/messages`,t)}listLlmConversations(e={}){let t=c(e);return this.http.get(`/v1/llm/conversations${t?`?${t}`:""}`)}getLlmConversation(e){return this.http.get(`/v1/llm/conversations/${e}`)}updateLlmConversation(e,t){return this.http.patch(`/v1/llm/conversations/${e}`,t)}deleteLlmConversation(e){return this.http.delete(`/v1/llm/conversations/${e}`)}ragUploadDocument(e){return this.requestForm("POST","/v1/llm/rag/documents",e)}ragListDocuments(e={}){let t=c(e);return this.http.get(`/v1/llm/rag/documents${t?`?${t}`:""}`)}ragDeleteDocument(e){return this.http.delete(`/v1/llm/rag/documents/${encodeURIComponent(e)}`)}ragSearch(e){return this.http.post("/v1/llm/rag/search",e)}ragChat(e){return this.http.post("/v1/llm/rag/chat",e)}ragChatStream(e){return this.http.post("/v1/llm/rag/chat/stream",e)}ragRebuildIndex(e){return this.http.post("/v1/llm/rag/rebuild-index",e)}listLlmProviders(){return this.http.get("/v1/llm/providers")}getLlmUsage(e={}){let t=c(e);return this.http.get(`/v1/llm/usage${t?`?${t}`:""}`)}getLlmUsageSummary(e={}){let t=c(e);return this.http.get(`/v1/llm/usage/summary${t?`?${t}`:""}`)}getLlmCacheStats(){return this.http.get("/v1/llm/cache/stats")}clearLlmCache(){return this.http.delete("/v1/llm/cache")}listLlmTemplates(){return this.http.get("/v1/llm/templates")}llmTemplateChat(e,t){return this.http.post(`/v1/llm/${encodeURIComponent(e)}/chat`,t)}llmTemplateChatStream(e,t){return this.http.post(`/v1/llm/${encodeURIComponent(e)}/chat/stream`,t)}listLlmChatbots(e={}){let t=c(e);return this.http.get(`/v1/llm/chatbots${t?`?${t}`:""}`)}createLlmChatbot(e){return this.http.post("/v1/llm/chatbots",e)}getLlmChatbot(e){return this.http.get(`/v1/llm/chatbots/${e}`)}updateLlmChatbot(e,t){return this.http.patch(`/v1/llm/chatbots/${e}`,t)}deleteLlmChatbot(e){return this.http.delete(`/v1/llm/chatbots/${e}`)}llmChatbotChat(e,t){return this.http.post(`/v1/llm/chatbots/${e}/chat`,t)}llmChatbotChatStream(e,t){return this.http.post(`/v1/llm/chatbots/${e}/chat/stream`,t)}listLlmChatbotSessions(e,t={}){let s=c(t);return this.http.get(`/v1/llm/chatbots/${e}/sessions${s?`?${s}`:""}`)}deleteLlmChatbotSession(e,t){return this.http.delete(`/v1/llm/chatbots/${e}/sessions/${t}`)}listLlmProfiles(e={}){let t=c(e);return this.http.get(`/v1/llm/profiles${t?`?${t}`:""}`)}upsertLlmProfile(e){return this.http.post("/v1/llm/profiles",e)}deleteLlmProfile(e){return this.http.delete(`/v1/llm/profiles/${e}`)}}}function fe(r){return class extends r{ocrRecognize(e){return this.requestForm("POST","/v1/ocr/recognize",e)}ocrRecognizeAsync(e){return this.requestForm("POST","/v1/ocr/recognize/async",e)}ocrRecognizeByDocType(e,t){return this.requestForm("POST",`/v1/ocr/${encodeURIComponent(e)}`,t)}listOcrResults(e={}){let t=c(e);return this.http.get(`/v1/ocr/results${t?`?${t}`:""}`)}getOcrResult(e){return this.http.get(`/v1/ocr/results/${encodeURIComponent(e)}`)}getOcrResultText(e){return this.http.get(`/v1/ocr/results/${encodeURIComponent(e)}/text`)}deleteOcrResult(e){return this.http.delete(`/v1/ocr/results/${encodeURIComponent(e)}`)}getOcrQuota(){return this.http.get("/v1/ocr/quota")}}}function Te(r){return class extends r{pgCreateOrder(e){return this.http.post("/v1/pg/orders",e)}pgGetOrder(e){return this.http.get(`/v1/pg/orders/${encodeURIComponent(e)}`)}pgConfirmPayment(e){return this.http.post("/v1/pg/confirm",e)}pgCancelPayment(e,t){return this.http.post(`/v1/pg/orders/${encodeURIComponent(e)}/cancel`,t)}pgSyncPaymentStatus(e,t){return this.http.post(`/v1/pg/orders/${encodeURIComponent(e)}/sync`,t)}pgWebhook(e){return this.http.post("/v1/pg/webhook",e,!1)}pgGetClientConfig(){return this.http.get("/v1/pg/config",!1)}}}function ke(r){return class extends r{appPushSend(e){return this.http.post("/v1/push/send",e)}appPushBroadcast(e){return this.http.post("/v1/push/broadcast",e)}appPushStatus(e){return this.http.get(`/v1/push/status/${e}`)}appPushRegisterDevice(e){return this.http.post("/v1/push/device",e)}appPushUnregisterDevice(e){return this.http.delete(`/v1/push/device/${e}`)}}}function ge(r){return class extends r{smsSend(e){return this.http.post("/v1/sms/send",e)}smsStatus(e){return this.http.get(`/v1/sms/status/${e}`,!1)}smsVerificationSend(e){return this.http.post("/v1/sms/verification/send",e,!1)}smsVerificationVerify(e){return this.http.post("/v1/sms/verification/verify",e,!1)}}}function ye(r){return class extends r{taxinvoiceRegistIssue(e){return this.http.post("/v1/taxinvoice",e)}taxinvoiceRegister(e){return this.http.post("/v1/taxinvoice/register",e)}taxinvoiceIssue(e){return this.http.post(`/v1/taxinvoice/${e}/issue`,{})}taxinvoiceCancelIssue(e,t){return this.http.post(`/v1/taxinvoice/${e}/cancel`,t)}taxinvoiceGetState(e){return this.http.get(`/v1/taxinvoice/${e}/state`)}taxinvoiceGetDetail(e){return this.http.get(`/v1/taxinvoice/${e}`)}}}var _=class extends le(me(ge(ke(Te(ye(fe(pe(he(de(ae(ce(ue(oe(ie(se(R)))))))))))))))){};var Ue=new R,Le=new _;function pr(r={}){return L(r,{singletonInstance:Ue,ClientClass:R})}function gr(r={}){return L(r,{singletonInstance:Le,ClientClass:_})}export{gr as useEntityAppServer,L as useEntityClient,pr as useEntityServer};
2
2
  //# sourceMappingURL=react.js.map