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
@@ -56,6 +56,19 @@ declare const EntityServerApi_base: {
56
56
  _refreshTimer: ReturnType<typeof setTimeout> | null;
57
57
  _healthTickTimer: ReturnType<typeof setInterval> | null;
58
58
  _healthTickPromise: Promise<unknown> | null;
59
+ realtimeEnabled: boolean;
60
+ realtimePath: string;
61
+ realtimeAutoConnect: boolean;
62
+ realtimeAutoReconnect: boolean;
63
+ realtimeReconnectDelayMs: number;
64
+ realtimeStatus: import("./types.js").RealtimeConnectionStatus;
65
+ _realtimeSocket: WebSocket | null;
66
+ _realtimeConnectPromise: Promise<void> | null;
67
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
68
+ _realtimeShouldReconnect: boolean;
69
+ _realtimeMessageListeners: Set<import("./types.js").RealtimeMessageListener>;
70
+ _realtimeStatusListeners: Set<import("./types.js").RealtimeStatusListener>;
71
+ _realtimeEventListeners: Map<string, Set<import("./types.js").RealtimeMessageListener>>;
59
72
  configure(options: Partial<import("./types.js").EntityServerClientOptions>): void;
60
73
  setToken(token: string): void;
61
74
  setAnonymousPacketToken(token: string): void;
@@ -63,6 +76,17 @@ declare const EntityServerApi_base: {
63
76
  setHmacSecret(secret: string): void;
64
77
  setEncryptRequests(value: boolean): void;
65
78
  setCsrfEnabled(enabled: boolean): void;
79
+ addRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
80
+ removeRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
81
+ addRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
82
+ removeRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
83
+ addRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
84
+ removeRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
85
+ connectRealtime(): Promise<void>;
86
+ disconnectRealtime(reason?: string): void;
87
+ sendRealtime(message: import("./types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
88
+ subscribeRealtime(subscriptions: string[]): boolean;
89
+ unsubscribeRealtime(subscriptions: string[]): boolean;
66
90
  startHealthTick(intervalMs?: number): void;
67
91
  stopHealthTick(): void;
68
92
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -71,6 +95,12 @@ declare const EntityServerApi_base: {
71
95
  }>): void;
72
96
  _clearRefreshTimer(): void;
73
97
  stopKeepSession(): void;
98
+ _applyRealtimeOptions(options?: boolean | import("./types.js").RealtimeClientOptions): void;
99
+ _buildRealtimeUrl(): string;
100
+ _handleRealtimeMessage(payload: unknown): void;
101
+ _scheduleRealtimeReconnect(reason: string): void;
102
+ _clearRealtimeReconnectTimer(): void;
103
+ _setRealtimeStatus(status: import("./types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
74
104
  _applyCsrfHealth(): void;
75
105
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
76
106
  get _reqOpts(): import("./client/request.js").RequestOptions;
@@ -114,6 +144,19 @@ declare const EntityServerApi_base: {
114
144
  _refreshTimer: ReturnType<typeof setTimeout> | null;
115
145
  _healthTickTimer: ReturnType<typeof setInterval> | null;
116
146
  _healthTickPromise: Promise<unknown> | null;
147
+ realtimeEnabled: boolean;
148
+ realtimePath: string;
149
+ realtimeAutoConnect: boolean;
150
+ realtimeAutoReconnect: boolean;
151
+ realtimeReconnectDelayMs: number;
152
+ realtimeStatus: import("./types.js").RealtimeConnectionStatus;
153
+ _realtimeSocket: WebSocket | null;
154
+ _realtimeConnectPromise: Promise<void> | null;
155
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
156
+ _realtimeShouldReconnect: boolean;
157
+ _realtimeMessageListeners: Set<import("./types.js").RealtimeMessageListener>;
158
+ _realtimeStatusListeners: Set<import("./types.js").RealtimeStatusListener>;
159
+ _realtimeEventListeners: Map<string, Set<import("./types.js").RealtimeMessageListener>>;
117
160
  configure(options: Partial<import("./types.js").EntityServerClientOptions>): void;
118
161
  setToken(token: string): void;
119
162
  setAnonymousPacketToken(token: string): void;
@@ -121,6 +164,17 @@ declare const EntityServerApi_base: {
121
164
  setHmacSecret(secret: string): void;
122
165
  setEncryptRequests(value: boolean): void;
123
166
  setCsrfEnabled(enabled: boolean): void;
167
+ addRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
168
+ removeRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
169
+ addRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
170
+ removeRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
171
+ addRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
172
+ removeRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
173
+ connectRealtime(): Promise<void>;
174
+ disconnectRealtime(reason?: string): void;
175
+ sendRealtime(message: import("./types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
176
+ subscribeRealtime(subscriptions: string[]): boolean;
177
+ unsubscribeRealtime(subscriptions: string[]): boolean;
124
178
  startHealthTick(intervalMs?: number): void;
125
179
  stopHealthTick(): void;
126
180
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -129,6 +183,12 @@ declare const EntityServerApi_base: {
129
183
  }>): void;
130
184
  _clearRefreshTimer(): void;
131
185
  stopKeepSession(): void;
186
+ _applyRealtimeOptions(options?: boolean | import("./types.js").RealtimeClientOptions): void;
187
+ _buildRealtimeUrl(): string;
188
+ _handleRealtimeMessage(payload: unknown): void;
189
+ _scheduleRealtimeReconnect(reason: string): void;
190
+ _clearRealtimeReconnectTimer(): void;
191
+ _setRealtimeStatus(status: import("./types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
132
192
  _applyCsrfHealth(): void;
133
193
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
134
194
  get _reqOpts(): import("./client/request.js").RequestOptions;
@@ -201,6 +261,19 @@ declare const EntityServerApi_base: {
201
261
  _refreshTimer: ReturnType<typeof setTimeout> | null;
202
262
  _healthTickTimer: ReturnType<typeof setInterval> | null;
203
263
  _healthTickPromise: Promise<unknown> | null;
264
+ realtimeEnabled: boolean;
265
+ realtimePath: string;
266
+ realtimeAutoConnect: boolean;
267
+ realtimeAutoReconnect: boolean;
268
+ realtimeReconnectDelayMs: number;
269
+ realtimeStatus: import("./types.js").RealtimeConnectionStatus;
270
+ _realtimeSocket: WebSocket | null;
271
+ _realtimeConnectPromise: Promise<void> | null;
272
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
273
+ _realtimeShouldReconnect: boolean;
274
+ _realtimeMessageListeners: Set<import("./types.js").RealtimeMessageListener>;
275
+ _realtimeStatusListeners: Set<import("./types.js").RealtimeStatusListener>;
276
+ _realtimeEventListeners: Map<string, Set<import("./types.js").RealtimeMessageListener>>;
204
277
  configure(options: Partial<import("./types.js").EntityServerClientOptions>): void;
205
278
  setToken(token: string): void;
206
279
  setAnonymousPacketToken(token: string): void;
@@ -208,6 +281,17 @@ declare const EntityServerApi_base: {
208
281
  setHmacSecret(secret: string): void;
209
282
  setEncryptRequests(value: boolean): void;
210
283
  setCsrfEnabled(enabled: boolean): void;
284
+ addRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
285
+ removeRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
286
+ addRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
287
+ removeRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
288
+ addRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
289
+ removeRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
290
+ connectRealtime(): Promise<void>;
291
+ disconnectRealtime(reason?: string): void;
292
+ sendRealtime(message: import("./types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
293
+ subscribeRealtime(subscriptions: string[]): boolean;
294
+ unsubscribeRealtime(subscriptions: string[]): boolean;
211
295
  startHealthTick(intervalMs?: number): void;
212
296
  stopHealthTick(): void;
213
297
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -216,6 +300,12 @@ declare const EntityServerApi_base: {
216
300
  }>): void;
217
301
  _clearRefreshTimer(): void;
218
302
  stopKeepSession(): void;
303
+ _applyRealtimeOptions(options?: boolean | import("./types.js").RealtimeClientOptions): void;
304
+ _buildRealtimeUrl(): string;
305
+ _handleRealtimeMessage(payload: unknown): void;
306
+ _scheduleRealtimeReconnect(reason: string): void;
307
+ _clearRealtimeReconnectTimer(): void;
308
+ _setRealtimeStatus(status: import("./types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
219
309
  _applyCsrfHealth(): void;
220
310
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
221
311
  get _reqOpts(): import("./client/request.js").RequestOptions;
@@ -265,6 +355,19 @@ declare const EntityServerApi_base: {
265
355
  _refreshTimer: ReturnType<typeof setTimeout> | null;
266
356
  _healthTickTimer: ReturnType<typeof setInterval> | null;
267
357
  _healthTickPromise: Promise<unknown> | null;
358
+ realtimeEnabled: boolean;
359
+ realtimePath: string;
360
+ realtimeAutoConnect: boolean;
361
+ realtimeAutoReconnect: boolean;
362
+ realtimeReconnectDelayMs: number;
363
+ realtimeStatus: import("./types.js").RealtimeConnectionStatus;
364
+ _realtimeSocket: WebSocket | null;
365
+ _realtimeConnectPromise: Promise<void> | null;
366
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
367
+ _realtimeShouldReconnect: boolean;
368
+ _realtimeMessageListeners: Set<import("./types.js").RealtimeMessageListener>;
369
+ _realtimeStatusListeners: Set<import("./types.js").RealtimeStatusListener>;
370
+ _realtimeEventListeners: Map<string, Set<import("./types.js").RealtimeMessageListener>>;
268
371
  configure(options: Partial<import("./types.js").EntityServerClientOptions>): void;
269
372
  setToken(token: string): void;
270
373
  setAnonymousPacketToken(token: string): void;
@@ -272,6 +375,17 @@ declare const EntityServerApi_base: {
272
375
  setHmacSecret(secret: string): void;
273
376
  setEncryptRequests(value: boolean): void;
274
377
  setCsrfEnabled(enabled: boolean): void;
378
+ addRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
379
+ removeRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
380
+ addRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
381
+ removeRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
382
+ addRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
383
+ removeRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
384
+ connectRealtime(): Promise<void>;
385
+ disconnectRealtime(reason?: string): void;
386
+ sendRealtime(message: import("./types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
387
+ subscribeRealtime(subscriptions: string[]): boolean;
388
+ unsubscribeRealtime(subscriptions: string[]): boolean;
275
389
  startHealthTick(intervalMs?: number): void;
276
390
  stopHealthTick(): void;
277
391
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -280,6 +394,12 @@ declare const EntityServerApi_base: {
280
394
  }>): void;
281
395
  _clearRefreshTimer(): void;
282
396
  stopKeepSession(): void;
397
+ _applyRealtimeOptions(options?: boolean | import("./types.js").RealtimeClientOptions): void;
398
+ _buildRealtimeUrl(): string;
399
+ _handleRealtimeMessage(payload: unknown): void;
400
+ _scheduleRealtimeReconnect(reason: string): void;
401
+ _clearRealtimeReconnectTimer(): void;
402
+ _setRealtimeStatus(status: import("./types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
283
403
  _applyCsrfHealth(): void;
284
404
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
285
405
  get _reqOpts(): import("./client/request.js").RequestOptions;
@@ -347,6 +467,19 @@ declare const EntityServerApi_base: {
347
467
  _refreshTimer: ReturnType<typeof setTimeout> | null;
348
468
  _healthTickTimer: ReturnType<typeof setInterval> | null;
349
469
  _healthTickPromise: Promise<unknown> | null;
470
+ realtimeEnabled: boolean;
471
+ realtimePath: string;
472
+ realtimeAutoConnect: boolean;
473
+ realtimeAutoReconnect: boolean;
474
+ realtimeReconnectDelayMs: number;
475
+ realtimeStatus: import("./types.js").RealtimeConnectionStatus;
476
+ _realtimeSocket: WebSocket | null;
477
+ _realtimeConnectPromise: Promise<void> | null;
478
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
479
+ _realtimeShouldReconnect: boolean;
480
+ _realtimeMessageListeners: Set<import("./types.js").RealtimeMessageListener>;
481
+ _realtimeStatusListeners: Set<import("./types.js").RealtimeStatusListener>;
482
+ _realtimeEventListeners: Map<string, Set<import("./types.js").RealtimeMessageListener>>;
350
483
  configure(options: Partial<import("./types.js").EntityServerClientOptions>): void;
351
484
  setToken(token: string): void;
352
485
  setAnonymousPacketToken(token: string): void;
@@ -354,6 +487,17 @@ declare const EntityServerApi_base: {
354
487
  setHmacSecret(secret: string): void;
355
488
  setEncryptRequests(value: boolean): void;
356
489
  setCsrfEnabled(enabled: boolean): void;
490
+ addRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
491
+ removeRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
492
+ addRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
493
+ removeRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
494
+ addRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
495
+ removeRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
496
+ connectRealtime(): Promise<void>;
497
+ disconnectRealtime(reason?: string): void;
498
+ sendRealtime(message: import("./types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
499
+ subscribeRealtime(subscriptions: string[]): boolean;
500
+ unsubscribeRealtime(subscriptions: string[]): boolean;
357
501
  startHealthTick(intervalMs?: number): void;
358
502
  stopHealthTick(): void;
359
503
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -362,6 +506,12 @@ declare const EntityServerApi_base: {
362
506
  }>): void;
363
507
  _clearRefreshTimer(): void;
364
508
  stopKeepSession(): void;
509
+ _applyRealtimeOptions(options?: boolean | import("./types.js").RealtimeClientOptions): void;
510
+ _buildRealtimeUrl(): string;
511
+ _handleRealtimeMessage(payload: unknown): void;
512
+ _scheduleRealtimeReconnect(reason: string): void;
513
+ _clearRealtimeReconnectTimer(): void;
514
+ _setRealtimeStatus(status: import("./types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
365
515
  _applyCsrfHealth(): void;
366
516
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
367
517
  get _reqOpts(): import("./client/request.js").RequestOptions;
@@ -464,6 +614,19 @@ declare const EntityServerApi_base: {
464
614
  _refreshTimer: ReturnType<typeof setTimeout> | null;
465
615
  _healthTickTimer: ReturnType<typeof setInterval> | null;
466
616
  _healthTickPromise: Promise<unknown> | null;
617
+ realtimeEnabled: boolean;
618
+ realtimePath: string;
619
+ realtimeAutoConnect: boolean;
620
+ realtimeAutoReconnect: boolean;
621
+ realtimeReconnectDelayMs: number;
622
+ realtimeStatus: import("./types.js").RealtimeConnectionStatus;
623
+ _realtimeSocket: WebSocket | null;
624
+ _realtimeConnectPromise: Promise<void> | null;
625
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
626
+ _realtimeShouldReconnect: boolean;
627
+ _realtimeMessageListeners: Set<import("./types.js").RealtimeMessageListener>;
628
+ _realtimeStatusListeners: Set<import("./types.js").RealtimeStatusListener>;
629
+ _realtimeEventListeners: Map<string, Set<import("./types.js").RealtimeMessageListener>>;
467
630
  configure(options: Partial<import("./types.js").EntityServerClientOptions>): void;
468
631
  setToken(token: string): void;
469
632
  setAnonymousPacketToken(token: string): void;
@@ -471,6 +634,17 @@ declare const EntityServerApi_base: {
471
634
  setHmacSecret(secret: string): void;
472
635
  setEncryptRequests(value: boolean): void;
473
636
  setCsrfEnabled(enabled: boolean): void;
637
+ addRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
638
+ removeRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
639
+ addRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
640
+ removeRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
641
+ addRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
642
+ removeRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
643
+ connectRealtime(): Promise<void>;
644
+ disconnectRealtime(reason?: string): void;
645
+ sendRealtime(message: import("./types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
646
+ subscribeRealtime(subscriptions: string[]): boolean;
647
+ unsubscribeRealtime(subscriptions: string[]): boolean;
474
648
  startHealthTick(intervalMs?: number): void;
475
649
  stopHealthTick(): void;
476
650
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -479,6 +653,12 @@ declare const EntityServerApi_base: {
479
653
  }>): void;
480
654
  _clearRefreshTimer(): void;
481
655
  stopKeepSession(): void;
656
+ _applyRealtimeOptions(options?: boolean | import("./types.js").RealtimeClientOptions): void;
657
+ _buildRealtimeUrl(): string;
658
+ _handleRealtimeMessage(payload: unknown): void;
659
+ _scheduleRealtimeReconnect(reason: string): void;
660
+ _clearRealtimeReconnectTimer(): void;
661
+ _setRealtimeStatus(status: import("./types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
482
662
  _applyCsrfHealth(): void;
483
663
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
484
664
  get _reqOpts(): import("./client/request.js").RequestOptions;
@@ -585,6 +765,19 @@ declare const EntityServerApi_base: {
585
765
  _refreshTimer: ReturnType<typeof setTimeout> | null;
586
766
  _healthTickTimer: ReturnType<typeof setInterval> | null;
587
767
  _healthTickPromise: Promise<unknown> | null;
768
+ realtimeEnabled: boolean;
769
+ realtimePath: string;
770
+ realtimeAutoConnect: boolean;
771
+ realtimeAutoReconnect: boolean;
772
+ realtimeReconnectDelayMs: number;
773
+ realtimeStatus: import("./types.js").RealtimeConnectionStatus;
774
+ _realtimeSocket: WebSocket | null;
775
+ _realtimeConnectPromise: Promise<void> | null;
776
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
777
+ _realtimeShouldReconnect: boolean;
778
+ _realtimeMessageListeners: Set<import("./types.js").RealtimeMessageListener>;
779
+ _realtimeStatusListeners: Set<import("./types.js").RealtimeStatusListener>;
780
+ _realtimeEventListeners: Map<string, Set<import("./types.js").RealtimeMessageListener>>;
588
781
  configure(options: Partial<import("./types.js").EntityServerClientOptions>): void;
589
782
  setToken(token: string): void;
590
783
  setAnonymousPacketToken(token: string): void;
@@ -592,6 +785,17 @@ declare const EntityServerApi_base: {
592
785
  setHmacSecret(secret: string): void;
593
786
  setEncryptRequests(value: boolean): void;
594
787
  setCsrfEnabled(enabled: boolean): void;
788
+ addRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
789
+ removeRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
790
+ addRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
791
+ removeRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
792
+ addRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
793
+ removeRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
794
+ connectRealtime(): Promise<void>;
795
+ disconnectRealtime(reason?: string): void;
796
+ sendRealtime(message: import("./types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
797
+ subscribeRealtime(subscriptions: string[]): boolean;
798
+ unsubscribeRealtime(subscriptions: string[]): boolean;
595
799
  startHealthTick(intervalMs?: number): void;
596
800
  stopHealthTick(): void;
597
801
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -600,6 +804,12 @@ declare const EntityServerApi_base: {
600
804
  }>): void;
601
805
  _clearRefreshTimer(): void;
602
806
  stopKeepSession(): void;
807
+ _applyRealtimeOptions(options?: boolean | import("./types.js").RealtimeClientOptions): void;
808
+ _buildRealtimeUrl(): string;
809
+ _handleRealtimeMessage(payload: unknown): void;
810
+ _scheduleRealtimeReconnect(reason: string): void;
811
+ _clearRealtimeReconnectTimer(): void;
812
+ _setRealtimeStatus(status: import("./types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
603
813
  _applyCsrfHealth(): void;
604
814
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
605
815
  get _reqOpts(): import("./client/request.js").RequestOptions;
@@ -621,23 +831,25 @@ declare const EntityServerApi_base: {
621
831
  } & {
622
832
  new (...args: any[]): {
623
833
  _csrfRefresher: () => Promise<void>;
624
- checkHealth(): Promise<{
834
+ checkHealth(bootstrapAuth?: boolean): Promise<{
625
835
  status: string;
836
+ authenticated?: boolean;
837
+ packet_encryption?: boolean;
626
838
  }>;
627
839
  _readCookie(name: string): string | null;
628
- login(email: string, password: string): Promise<{
840
+ _ensurePublicAuthBootstrap(): Promise<void>;
841
+ login(email: string, password: string): Promise<import("./index.js").AuthLoginResponse>;
842
+ tokenRefresh(): Promise<{
629
843
  access_token: string;
630
844
  refresh_token: string;
631
845
  expires_in: number;
632
- force_password_change?: boolean;
633
- password_expired?: boolean;
634
- password_expires_in_days?: number;
635
846
  }>;
636
- refreshToken(refreshToken: string): Promise<{
847
+ refreshToken(refreshToken?: string): Promise<{
637
848
  access_token: string;
849
+ refresh_token?: string;
638
850
  expires_in: number;
639
851
  }>;
640
- logout(refreshToken: string): Promise<{
852
+ logout(refreshToken?: string): Promise<{
641
853
  ok: boolean;
642
854
  }>;
643
855
  me<T = Record<string, unknown>>(): Promise<{
@@ -666,6 +878,19 @@ declare const EntityServerApi_base: {
666
878
  _refreshTimer: ReturnType<typeof setTimeout> | null;
667
879
  _healthTickTimer: ReturnType<typeof setInterval> | null;
668
880
  _healthTickPromise: Promise<unknown> | null;
881
+ realtimeEnabled: boolean;
882
+ realtimePath: string;
883
+ realtimeAutoConnect: boolean;
884
+ realtimeAutoReconnect: boolean;
885
+ realtimeReconnectDelayMs: number;
886
+ realtimeStatus: import("./types.js").RealtimeConnectionStatus;
887
+ _realtimeSocket: WebSocket | null;
888
+ _realtimeConnectPromise: Promise<void> | null;
889
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
890
+ _realtimeShouldReconnect: boolean;
891
+ _realtimeMessageListeners: Set<import("./types.js").RealtimeMessageListener>;
892
+ _realtimeStatusListeners: Set<import("./types.js").RealtimeStatusListener>;
893
+ _realtimeEventListeners: Map<string, Set<import("./types.js").RealtimeMessageListener>>;
669
894
  configure(options: Partial<import("./types.js").EntityServerClientOptions>): void;
670
895
  setToken(token: string): void;
671
896
  setAnonymousPacketToken(token: string): void;
@@ -673,6 +898,17 @@ declare const EntityServerApi_base: {
673
898
  setHmacSecret(secret: string): void;
674
899
  setEncryptRequests(value: boolean): void;
675
900
  setCsrfEnabled(enabled: boolean): void;
901
+ addRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
902
+ removeRealtimeListener(listener: import("./types.js").RealtimeMessageListener): void;
903
+ addRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
904
+ removeRealtimeStatusListener(listener: import("./types.js").RealtimeStatusListener): void;
905
+ addRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
906
+ removeRealtimeEventListener(eventName: string, listener: import("./types.js").RealtimeMessageListener): void;
907
+ connectRealtime(): Promise<void>;
908
+ disconnectRealtime(reason?: string): void;
909
+ sendRealtime(message: import("./types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
910
+ subscribeRealtime(subscriptions: string[]): boolean;
911
+ unsubscribeRealtime(subscriptions: string[]): boolean;
676
912
  startHealthTick(intervalMs?: number): void;
677
913
  stopHealthTick(): void;
678
914
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -681,6 +917,12 @@ declare const EntityServerApi_base: {
681
917
  }>): void;
682
918
  _clearRefreshTimer(): void;
683
919
  stopKeepSession(): void;
920
+ _applyRealtimeOptions(options?: boolean | import("./types.js").RealtimeClientOptions): void;
921
+ _buildRealtimeUrl(): string;
922
+ _handleRealtimeMessage(payload: unknown): void;
923
+ _scheduleRealtimeReconnect(reason: string): void;
924
+ _clearRealtimeReconnectTimer(): void;
925
+ _setRealtimeStatus(status: import("./types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
684
926
  _applyCsrfHealth(): void;
685
927
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
686
928
  get _reqOpts(): import("./client/request.js").RequestOptions;
@@ -1,4 +1,4 @@
1
- import type { EntityServerClientOptions } from "../types.js";
1
+ import type { EntityServerClientOptions, RealtimeClientOptions, RealtimeConnectionStatus, RealtimeEnvelope, RealtimeMessageListener, RealtimeStatusListener } from "../types.js";
2
2
  import { type RequestOptions } from "./request.js";
3
3
  export type GConstructor<T = object> = new (...args: any[]) => T;
4
4
  export declare class EntityServerClientBase {
@@ -23,6 +23,19 @@ export declare class EntityServerClientBase {
23
23
  _refreshTimer: ReturnType<typeof setTimeout> | null;
24
24
  _healthTickTimer: ReturnType<typeof setInterval> | null;
25
25
  _healthTickPromise: Promise<unknown> | null;
26
+ realtimeEnabled: boolean;
27
+ realtimePath: string;
28
+ realtimeAutoConnect: boolean;
29
+ realtimeAutoReconnect: boolean;
30
+ realtimeReconnectDelayMs: number;
31
+ realtimeStatus: RealtimeConnectionStatus;
32
+ _realtimeSocket: WebSocket | null;
33
+ _realtimeConnectPromise: Promise<void> | null;
34
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
35
+ _realtimeShouldReconnect: boolean;
36
+ _realtimeMessageListeners: Set<RealtimeMessageListener>;
37
+ _realtimeStatusListeners: Set<RealtimeStatusListener>;
38
+ _realtimeEventListeners: Map<string, Set<RealtimeMessageListener>>;
26
39
  /**
27
40
  * EntityServerClient 인스턴스를 생성합니다.
28
41
  *
@@ -43,27 +56,45 @@ export declare class EntityServerClientBase {
43
56
  /** 암호화 요청 활성화 여부를 설정합니다. */
44
57
  setEncryptRequests(value: boolean): void;
45
58
  setCsrfEnabled(enabled: boolean): void;
59
+ addRealtimeListener(listener: RealtimeMessageListener): void;
60
+ removeRealtimeListener(listener: RealtimeMessageListener): void;
61
+ addRealtimeStatusListener(listener: RealtimeStatusListener): void;
62
+ removeRealtimeStatusListener(listener: RealtimeStatusListener): void;
63
+ addRealtimeEventListener(eventName: string, listener: RealtimeMessageListener): void;
64
+ removeRealtimeEventListener(eventName: string, listener: RealtimeMessageListener): void;
65
+ connectRealtime(): Promise<void>;
66
+ disconnectRealtime(reason?: string): void;
67
+ sendRealtime(message: RealtimeEnvelope | Record<string, unknown>): boolean;
68
+ subscribeRealtime(subscriptions: string[]): boolean;
69
+ unsubscribeRealtime(subscriptions: string[]): boolean;
46
70
  /**
47
71
  * 주기적으로 health 체크를 실행합니다.
48
72
  * CSRF 쿠키 갱신과 서버 상태 확인을 자동화합니다.
73
+ * keepSession=true 이면 각 tick에서 세션 부트스트랩도 함께 시도합니다.
49
74
  *
50
75
  * @param intervalMs 호출 주기(ms). 기본값: 5분
51
76
  */
52
77
  startHealthTick(intervalMs?: number): void;
53
78
  /** health tick 타이머를 중지합니다. */
54
79
  stopHealthTick(): void;
55
- /** @internal 자동 토큰 갱신 타이머를 시작합니다. */
80
+ /** @deprecated 세션 연장은 health tick 기반 부트스트랩으로 대체되었습니다. */
56
81
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
57
82
  access_token: string;
58
83
  expires_in: number;
59
84
  }>): void;
60
- /** @internal 자동 갱신 타이머를 정리합니다. */
85
+ /** @deprecated 세션 연장은 health tick 기반 부트스트랩으로 대체되었습니다. */
61
86
  _clearRefreshTimer(): void;
62
87
  /**
63
- * 세션 유지 타이머를 중지합니다.
88
+ * 세션 자동 연장을 중지합니다.
64
89
  * `logout()` 호출 시 자동으로 중지되며, 직접 호출이 필요한 경우는 드뭅니다.
65
90
  */
66
91
  stopKeepSession(): void;
92
+ _applyRealtimeOptions(options?: boolean | RealtimeClientOptions): void;
93
+ _buildRealtimeUrl(): string;
94
+ _handleRealtimeMessage(payload: unknown): void;
95
+ _scheduleRealtimeReconnect(reason: string): void;
96
+ _clearRealtimeReconnectTimer(): void;
97
+ _setRealtimeStatus(status: RealtimeConnectionStatus, reason?: string, error?: Error): void;
67
98
  _applyCsrfHealth(): void;
68
99
  /**
69
100
  * 요청 바디를 파싱합니다.
@@ -1,2 +1,2 @@
1
- import{readEnv as c}from"./utils.js";import{derivePacketKey as f,parseRequestBody as l}from"./packet.js";import{entityRequest as h}from"./request.js";class y{baseUrl;token;anonymousPacketToken;apiKey;hmacSecret;encryptRequests;csrfEnabled;csrfHeaderName;csrfCookieName;_csrfRefresher=null;activeTxId=null;keepSession;refreshBuffer;onTokenRefreshed;onSessionExpired;onHealthChange;_sessionRefreshToken=null;_refreshTimer=null;_healthTickTimer=null;_healthTickPromise=null;constructor(e={}){const r=c("VITE_ENTITY_SERVER_URL");this.baseUrl=(e.baseUrl??r??"").replace(/\/$/,""),this.token=e.token??"",this.anonymousPacketToken=e.anonymousPacketToken??"",this.apiKey=e.apiKey??"",this.hmacSecret=e.hmacSecret??"",this.encryptRequests=e.encryptRequests??!1,this.csrfEnabled=e.csrfEnabled??!1,this.csrfHeaderName=e.csrfHeaderName??"x-csrf-token",this.csrfCookieName=e.csrfCookieName??"_csrf",this.keepSession=e.keepSession??!1,this.refreshBuffer=e.refreshBuffer??60,this.onTokenRefreshed=e.onTokenRefreshed,this.onSessionExpired=e.onSessionExpired,this.onHealthChange=e.onHealthChange,typeof e.healthTickInterval=="number"&&e.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(e.healthTickInterval))}configure(e){typeof e.baseUrl=="string"&&(this.baseUrl=e.baseUrl.replace(/\/$/,"")),typeof e.token=="string"&&(this.token=e.token),typeof e.anonymousPacketToken=="string"&&(this.anonymousPacketToken=e.anonymousPacketToken),typeof e.encryptRequests=="boolean"&&(this.encryptRequests=e.encryptRequests),typeof e.csrfEnabled=="boolean"&&(this.csrfEnabled=e.csrfEnabled),typeof e.csrfHeaderName=="string"&&(this.csrfHeaderName=e.csrfHeaderName),typeof e.csrfCookieName=="string"&&(this.csrfCookieName=e.csrfCookieName),typeof e.apiKey=="string"&&(this.apiKey=e.apiKey),typeof e.hmacSecret=="string"&&(this.hmacSecret=e.hmacSecret),typeof e.keepSession=="boolean"&&(this.keepSession=e.keepSession),typeof e.refreshBuffer=="number"&&(this.refreshBuffer=e.refreshBuffer),e.onTokenRefreshed&&(this.onTokenRefreshed=e.onTokenRefreshed),e.onSessionExpired&&(this.onSessionExpired=e.onSessionExpired),e.onHealthChange&&(this.onHealthChange=e.onHealthChange),typeof e.healthTickInterval=="number"&&e.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(e.healthTickInterval))}setToken(e){this.token=e}setAnonymousPacketToken(e){this.anonymousPacketToken=e}setApiKey(e){this.apiKey=e}setHmacSecret(e){this.hmacSecret=e}setEncryptRequests(e){this.encryptRequests=e}setCsrfEnabled(e){this.csrfEnabled=e}startHealthTick(e=300*1e3){this.stopHealthTick();const r=()=>{this._healthTickPromise||(this._healthTickPromise=(this._csrfRefresher?this._csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this._healthTickPromise=null}))};r(),this._healthTickTimer=setInterval(r,e)}stopHealthTick(){this._healthTickTimer!==null&&(clearInterval(this._healthTickTimer),this._healthTickTimer=null),this._healthTickPromise=null}_scheduleKeepSession(e,r,t){this._clearRefreshTimer(),this._sessionRefreshToken=e;const i=Math.max((r-this.refreshBuffer)*1e3,0);this._refreshTimer=setTimeout(async()=>{if(this._sessionRefreshToken)try{const s=await t(this._sessionRefreshToken);this.onTokenRefreshed?.(s.access_token,s.expires_in),this._scheduleKeepSession(this._sessionRefreshToken,s.expires_in,t)}catch(s){this._clearRefreshTimer(),this.onSessionExpired?.(s instanceof Error?s:new Error(String(s)))}},i)}_clearRefreshTimer(){this._refreshTimer!==null&&(clearTimeout(this._refreshTimer),this._refreshTimer=null)}stopKeepSession(){this._clearRefreshTimer(),this._sessionRefreshToken=null}_applyCsrfHealth(){if(!(typeof document>"u")){for(const e of document.cookie.split(";")){const r=e.indexOf("=");if(!(r<0)&&e.substring(0,r).trim()===this.csrfCookieName){this.csrfEnabled=!!e.substring(r+1).trim();return}}this.csrfEnabled=!1}}readRequestBody(e,r="application/json",t=!1){const i=f(this.hmacSecret,this.token||this.anonymousPacketToken);return l(e,r,t,i)}get _reqOpts(){return{baseUrl:this.baseUrl,token:this.token,anonymousPacketToken:this.anonymousPacketToken,apiKey:this.apiKey,hmacSecret:this.hmacSecret,encryptRequests:this.encryptRequests,csrfEnabled:this.csrfEnabled,csrfHeaderName:this.csrfHeaderName,csrfCookieName:this.csrfCookieName,refreshCsrfCookie:this.csrfEnabled?this._csrfRefresher:null}}get http(){const e=this;return{get(r,t=!0,i){return h(e._reqOpts,"GET",r,void 0,t,i,!1)},post(r,t,i=!0,s){return h(e._reqOpts,"POST",r,t,i,s,!1)},put(r,t,i=!0,s){return h(e._reqOpts,"PUT",r,t,i,s,!1)},patch(r,t,i=!0,s){return h(e._reqOpts,"PATCH",r,t,i,s,!1)},delete(r,t,i=!0,s){return h(e._reqOpts,"DELETE",r,t,i,s,!1)}}}requestBinary(e,r,t,i=!0){return this._requestBinary(e,r,t,i)}requestForm(e,r,t,i=!0){return this._requestForm(e,r,t,i)}requestFormBinary(e,r,t,i=!0){return this._requestFormBinary(e,r,t,i)}_request(e,r,t,i=!0,s){return h(this._reqOpts,e,r,t,i,s,!0)}async _requestBinary(e,r,t,i=!0){const s={"Content-Type":"application/json"};i&&this.token&&(s.Authorization=`Bearer ${this.token}`),this.apiKey&&(s["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+r,{method:e,headers:s,...t!=null?{body:JSON.stringify(t)}:{},credentials:"include"});if(!n.ok){const o=await n.text(),a=new Error(`HTTP ${n.status}: ${o}`);throw a.status=n.status,a}return n.arrayBuffer()}async _requestForm(e,r,t,i=!0){const s={};i&&this.token&&(s.Authorization=`Bearer ${this.token}`),this.apiKey&&(s["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+r,{method:e,headers:s,body:t,credentials:"include"}),o=await n.json();if(!o.ok){const a=new Error(o.message??`EntityServer error (HTTP ${n.status})`);throw a.status=n.status,a}return o}async _requestFormBinary(e,r,t,i=!0){const s={};i&&this.token&&(s.Authorization=`Bearer ${this.token}`),this.apiKey&&(s["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+r,{method:e,headers:s,body:t,credentials:"include"});if(!n.ok){const o=await n.text(),a=new Error(`HTTP ${n.status}: ${o}`);throw a.status=n.status,a}return n.arrayBuffer()}}export{y as EntityServerClientBase};
1
+ import{readEnv as m}from"./utils.js";import{derivePacketKey as u,parseRequestBody as f}from"./packet.js";import{entityRequest as l}from"./request.js";const c="/v1/realtime";class T{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(e={}){const t=m("VITE_ENTITY_SERVER_URL");this.baseUrl=(e.baseUrl??t??"").replace(/\/$/,""),this.token=e.token??"",this.anonymousPacketToken=e.anonymousPacketToken??"",this.apiKey=e.apiKey??"",this.hmacSecret=e.hmacSecret??"",this.encryptRequests=e.encryptRequests??!1,this.csrfEnabled=e.csrfEnabled??!1,this.csrfHeaderName=e.csrfHeaderName??"x-csrf-token",this.csrfCookieName=e.csrfCookieName??"_csrf",this.keepSession=e.keepSession??!1,this.refreshBuffer=e.refreshBuffer??60,this.onTokenRefreshed=e.onTokenRefreshed,this.onSessionExpired=e.onSessionExpired,this.onHealthChange=e.onHealthChange,this.realtimeEnabled=!1,this.realtimePath=c,this.realtimeAutoConnect=!0,this.realtimeAutoReconnect=!0,this.realtimeReconnectDelayMs=3e3,this.realtimeStatus="idle",this._applyRealtimeOptions(e.realtime),typeof e.healthTickInterval=="number"&&e.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(e.healthTickInterval))}configure(e){typeof e.baseUrl=="string"&&(this.baseUrl=e.baseUrl.replace(/\/$/,"")),typeof e.token=="string"&&(this.token=e.token),typeof e.anonymousPacketToken=="string"&&(this.anonymousPacketToken=e.anonymousPacketToken),typeof e.encryptRequests=="boolean"&&(this.encryptRequests=e.encryptRequests),typeof e.csrfEnabled=="boolean"&&(this.csrfEnabled=e.csrfEnabled),typeof e.csrfHeaderName=="string"&&(this.csrfHeaderName=e.csrfHeaderName),typeof e.csrfCookieName=="string"&&(this.csrfCookieName=e.csrfCookieName),typeof e.apiKey=="string"&&(this.apiKey=e.apiKey),typeof e.hmacSecret=="string"&&(this.hmacSecret=e.hmacSecret),typeof e.keepSession=="boolean"&&(this.keepSession=e.keepSession),typeof e.refreshBuffer=="number"&&(this.refreshBuffer=e.refreshBuffer),e.onTokenRefreshed&&(this.onTokenRefreshed=e.onTokenRefreshed),e.onSessionExpired&&(this.onSessionExpired=e.onSessionExpired),e.onHealthChange&&(this.onHealthChange=e.onHealthChange),typeof e.realtime<"u"&&this._applyRealtimeOptions(e.realtime),typeof e.healthTickInterval=="number"&&e.healthTickInterval>0&&Promise.resolve().then(()=>this.startHealthTick(e.healthTickInterval))}setToken(e){if(this.token=e,!e){this.disconnectRealtime("token_cleared");return}this.realtimeEnabled&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{})}setAnonymousPacketToken(e){this.anonymousPacketToken=e}setApiKey(e){this.apiKey=e}setHmacSecret(e){this.hmacSecret=e}setEncryptRequests(e){this.encryptRequests=e}setCsrfEnabled(e){this.csrfEnabled=e}addRealtimeListener(e){this._realtimeMessageListeners.add(e)}removeRealtimeListener(e){this._realtimeMessageListeners.delete(e)}addRealtimeStatusListener(e){this._realtimeStatusListeners.add(e)}removeRealtimeStatusListener(e){this._realtimeStatusListeners.delete(e)}addRealtimeEventListener(e,t){const s=String(e).trim();s&&(this._realtimeEventListeners.has(s)||this._realtimeEventListeners.set(s,new Set),this._realtimeEventListeners.get(s).add(t))}removeRealtimeEventListener(e,t){const s=String(e).trim();if(!s)return;const i=this._realtimeEventListeners.get(s);i&&(i.delete(t),i.size===0&&this._realtimeEventListeners.delete(s))}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");const e=new WebSocket(this._buildRealtimeUrl());return this._realtimeSocket=e,this._realtimeConnectPromise=new Promise((t,s)=>{let i=!1;const r=()=>{i||(i=!0,this._realtimeConnectPromise=null,t())},n=a=>{i||(i=!0,this._realtimeConnectPromise=null,s(a))};e.addEventListener("open",()=>{this._setRealtimeStatus("open","socket_open"),r()}),e.addEventListener("message",a=>{this._handleRealtimeMessage(a.data)}),e.addEventListener("error",()=>{this._setRealtimeStatus("closed","socket_error",new Error("Realtime socket error."))}),e.addEventListener("close",a=>{this._realtimeSocket===e&&(this._realtimeSocket=null);const o=a.reason||"socket_closed",h=new Error(`Realtime socket closed (${a.code}${a.reason?`: ${a.reason}`:""}).`);this._setRealtimeStatus("closed",o,h),i||n(h),this._realtimeShouldReconnect&&this.realtimeEnabled&&this.realtimeAutoReconnect&&this.token&&this._scheduleRealtimeReconnect(o)})}),this._realtimeConnectPromise}disconnectRealtime(e="client_disconnect"){if(this._realtimeShouldReconnect=!1,this._clearRealtimeReconnectTimer(),this._realtimeSocket){const t=this._realtimeSocket;this._realtimeSocket=null;try{(t.readyState===WebSocket.OPEN||t.readyState===WebSocket.CONNECTING)&&t.close(1e3,e)}catch{}}this._realtimeConnectPromise=null,this._setRealtimeStatus(this.realtimeEnabled?"idle":"disabled",e)}sendRealtime(e){return!this._realtimeSocket||this._realtimeSocket.readyState!==WebSocket.OPEN?!1:(this._realtimeSocket.send(JSON.stringify(e)),!0)}subscribeRealtime(e){return this.sendRealtime({type:"subscribe",channel:"session",event:"session.subscribe",data:{subscriptions:e}})}unsubscribeRealtime(e){return this.sendRealtime({type:"unsubscribe",channel:"session",event:"session.unsubscribe",data:{subscriptions:e}})}startHealthTick(e=300*1e3){this.stopHealthTick();const t=()=>{this._healthTickPromise||(this._healthTickPromise=(this._csrfRefresher?this._csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this._healthTickPromise=null}))};t(),this._healthTickTimer=setInterval(t,e)}stopHealthTick(){this._healthTickTimer!==null&&(clearInterval(this._healthTickTimer),this._healthTickTimer=null),this._healthTickPromise=null}_scheduleKeepSession(e,t,s){this._clearRefreshTimer(),this._sessionRefreshToken=e;const i=Math.max((t-this.refreshBuffer)*1e3,0);this._refreshTimer=setTimeout(async()=>{if(this._sessionRefreshToken)try{const r=await s(this._sessionRefreshToken);this.onTokenRefreshed?.(r.access_token,r.expires_in),this._scheduleKeepSession(this._sessionRefreshToken,r.expires_in,s)}catch(r){this._clearRefreshTimer(),this.onSessionExpired?.(r instanceof Error?r:new Error(String(r)))}},i)}_clearRefreshTimer(){this._refreshTimer!==null&&(clearTimeout(this._refreshTimer),this._refreshTimer=null)}stopKeepSession(){this._clearRefreshTimer(),this._sessionRefreshToken=null}_applyRealtimeOptions(e){const t=typeof e=="boolean"?{enabled:e}:e??{};if(this.realtimeEnabled=t.enabled??!1,this.realtimePath=String(t.path??c).trim()||c,this.realtimeAutoConnect=t.autoConnect??!0,this.realtimeAutoReconnect=t.autoReconnect??!0,this.realtimeReconnectDelayMs=Math.max(250,t.reconnectDelayMs??3e3),!this.realtimeEnabled){this.disconnectRealtime("realtime_disabled");return}this._setRealtimeStatus("idle","realtime_enabled"),this.token&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{})}_buildRealtimeUrl(){const t=this.baseUrl||m("VITE_ENTITY_SERVER_URL")||""||(typeof window<"u"?window.location.origin:"");if(!t)throw new Error("Realtime connection requires baseUrl.");const s=new URL(this.realtimePath,t);return s.protocol=s.protocol==="https:"?"wss:":"ws:",s.searchParams.set("access_token",this.token),s.toString()}_handleRealtimeMessage(e){if(typeof e!="string")return;let t;try{t=JSON.parse(e)}catch{return}for(const i of this._realtimeMessageListeners)i(t);const s=this._realtimeEventListeners.get(t.event);if(s)for(const i of s)i(t)}_scheduleRealtimeReconnect(e){this._clearRealtimeReconnectTimer(),this._realtimeReconnectTimer=setTimeout(()=>{this._realtimeReconnectTimer=null,!(!this.realtimeEnabled||!this.token)&&(this._setRealtimeStatus("connecting",`${e}:reconnect`),this.connectRealtime().catch(()=>{}))},this.realtimeReconnectDelayMs)}_clearRealtimeReconnectTimer(){this._realtimeReconnectTimer!==null&&(clearTimeout(this._realtimeReconnectTimer),this._realtimeReconnectTimer=null)}_setRealtimeStatus(e,t,s){const i=this.realtimeStatus;if(!(i===e&&typeof t>"u"&&typeof s>"u")){this.realtimeStatus=e;for(const r of this._realtimeStatusListeners)r({status:e,previousStatus:i,...t?{reason:t}:{},...s?{error:s}:{}})}}_applyCsrfHealth(){if(!(typeof document>"u")){for(const e of document.cookie.split(";")){const t=e.indexOf("=");if(!(t<0)&&e.substring(0,t).trim()===this.csrfCookieName){this.csrfEnabled=!!e.substring(t+1).trim();return}}this.csrfEnabled=!1}}readRequestBody(e,t="application/json",s=!1){const i=u(this.hmacSecret,this.token||this.anonymousPacketToken);return f(e,t,s,i)}get _reqOpts(){return{baseUrl:this.baseUrl,token:this.token,anonymousPacketToken:this.anonymousPacketToken,apiKey:this.apiKey,hmacSecret:this.hmacSecret,encryptRequests:this.encryptRequests,csrfEnabled:this.csrfEnabled,csrfHeaderName:this.csrfHeaderName,csrfCookieName:this.csrfCookieName,refreshCsrfCookie:this.csrfEnabled?this._csrfRefresher:null,onAccessToken:e=>{this.token=e}}}get http(){const e=this;return{get(t,s=!0,i){return l(e._reqOpts,"GET",t,void 0,s,i,!1)},post(t,s,i=!0,r){return l(e._reqOpts,"POST",t,s,i,r,!1)},put(t,s,i=!0,r){return l(e._reqOpts,"PUT",t,s,i,r,!1)},patch(t,s,i=!0,r){return l(e._reqOpts,"PATCH",t,s,i,r,!1)},delete(t,s,i=!0,r){return l(e._reqOpts,"DELETE",t,s,i,r,!1)}}}requestBinary(e,t,s,i=!0){return this._requestBinary(e,t,s,i)}requestForm(e,t,s,i=!0){return this._requestForm(e,t,s,i)}requestFormBinary(e,t,s,i=!0){return this._requestFormBinary(e,t,s,i)}_request(e,t,s,i=!0,r){return l(this._reqOpts,e,t,s,i,r,!0)}async _requestBinary(e,t,s,i=!0){const r={"Content-Type":"application/json"};i&&this.token&&(r.Authorization=`Bearer ${this.token}`),this.apiKey&&(r["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+t,{method:e,headers:r,...s!=null?{body:JSON.stringify(s)}:{},credentials:"include"});if(!n.ok){const a=await n.text(),o=new Error(`HTTP ${n.status}: ${a}`);throw o.status=n.status,o}return n.arrayBuffer()}async _requestForm(e,t,s,i=!0){const r={};i&&this.token&&(r.Authorization=`Bearer ${this.token}`),this.apiKey&&(r["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+t,{method:e,headers:r,body:s,credentials:"include"}),a=await n.json();if(!a.ok){const o=new Error(a.message??`EntityServer error (HTTP ${n.status})`);throw o.status=n.status,o}return a}async _requestFormBinary(e,t,s,i=!0){const r={};i&&this.token&&(r.Authorization=`Bearer ${this.token}`),this.apiKey&&(r["X-API-Key"]=this.apiKey);const n=await fetch(this.baseUrl+t,{method:e,headers:r,body:s,credentials:"include"});if(!n.ok){const a=await n.text(),o=new Error(`HTTP ${n.status}: ${a}`);throw o.status=n.status,o}return n.arrayBuffer()}}export{T as EntityServerClientBase};
2
2
  //# sourceMappingURL=base.js.map