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.
- package/dist/EntityAppServerApi.d.ts +480 -0
- package/dist/EntityServerApi.d.ts +249 -7
- package/dist/client/base.d.ts +35 -4
- package/dist/client/base.js +1 -1
- package/dist/client/base.js.map +3 -3
- package/dist/client/request.d.ts +6 -1
- package/dist/client/request.js +1 -1
- package/dist/client/request.js.map +3 -3
- package/dist/hooks/useEntityClient.d.ts +4 -4
- package/dist/hooks/useEntityClient.js +1 -1
- package/dist/hooks/useEntityClient.js.map +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/mixins/app/plugins/alimtalk.d.ts +30 -0
- package/dist/mixins/app/plugins/friendtalk.d.ts +30 -0
- package/dist/mixins/app/plugins/holidays.d.ts +30 -0
- package/dist/mixins/app/plugins/identity.d.ts +30 -0
- package/dist/mixins/app/plugins/llm.d.ts +30 -0
- package/dist/mixins/app/plugins/ocr.d.ts +30 -0
- package/dist/mixins/app/plugins/pg.d.ts +30 -0
- package/dist/mixins/app/plugins/push.d.ts +30 -0
- package/dist/mixins/app/plugins/sms.d.ts +30 -0
- package/dist/mixins/app/plugins/taxinvoice.d.ts +30 -0
- package/dist/mixins/app/routes/account.d.ts +30 -0
- package/dist/mixins/app/routes/board.d.ts +30 -0
- package/dist/mixins/app/routes/board.js +1 -1
- package/dist/mixins/app/routes/board.js.map +2 -2
- package/dist/mixins/app/routes/email-verify.d.ts +30 -0
- package/dist/mixins/app/routes/oauth.d.ts +30 -0
- package/dist/mixins/app/routes/password-reset.d.ts +30 -0
- package/dist/mixins/app/routes/two-factor.d.ts +30 -0
- package/dist/mixins/server/admin.d.ts +30 -0
- package/dist/mixins/server/auth.d.ts +73 -8
- package/dist/mixins/server/auth.js +1 -1
- package/dist/mixins/server/auth.js.map +3 -3
- package/dist/mixins/server/entity.d.ts +30 -0
- package/dist/mixins/server/file.d.ts +30 -0
- package/dist/mixins/server/index.d.ts +2 -1
- package/dist/mixins/server/index.js +1 -1
- package/dist/mixins/server/index.js.map +3 -3
- package/dist/mixins/server/push.d.ts +30 -0
- package/dist/mixins/server/smtp.d.ts +30 -0
- package/dist/mixins/server/transaction.d.ts +30 -0
- package/dist/mixins/server/utils.d.ts +30 -0
- package/dist/react.js +1 -1
- package/dist/react.js.map +3 -3
- package/dist/types.d.ts +46 -11
- 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
|
-
|
|
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
|
|
847
|
+
refreshToken(refreshToken?: string): Promise<{
|
|
637
848
|
access_token: string;
|
|
849
|
+
refresh_token?: string;
|
|
638
850
|
expires_in: number;
|
|
639
851
|
}>;
|
|
640
|
-
logout(refreshToken
|
|
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;
|
package/dist/client/base.d.ts
CHANGED
|
@@ -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
|
-
/** @
|
|
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
|
-
/** @
|
|
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
|
* 요청 바디를 파싱합니다.
|
package/dist/client/base.js
CHANGED
|
@@ -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
|