entity-client 1.0.21 → 1.0.23
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/README.md +362 -362
- package/dist/EntityAppServerApi.d.ts +16 -16
- package/dist/EntityAppServerApi.js.map +1 -1
- package/dist/EntityServerApi.d.ts +8 -8
- package/dist/EntityServerApi.js.map +1 -1
- package/dist/client/base.d.ts +1 -1
- package/dist/client/base.js +1 -1
- package/dist/client/base.js.map +3 -3
- package/dist/client/hmac.js.map +1 -1
- package/dist/client/packet.js.map +1 -1
- package/dist/client/request.d.ts +2 -0
- package/dist/client/request.js +1 -1
- package/dist/client/request.js.map +3 -3
- package/dist/client/utils.js.map +1 -1
- package/dist/hooks/useEntityAppServer.js.map +1 -1
- package/dist/hooks/useEntityClient.js.map +1 -1
- package/dist/hooks/useEntityServer.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/mixins/app/index.js.map +1 -1
- package/dist/mixins/app/plugins/alimtalk.d.ts +1 -1
- package/dist/mixins/app/plugins/alimtalk.js.map +1 -1
- package/dist/mixins/app/plugins/friendtalk.d.ts +1 -1
- package/dist/mixins/app/plugins/friendtalk.js.map +1 -1
- package/dist/mixins/app/plugins/holidays.d.ts +1 -1
- package/dist/mixins/app/plugins/holidays.js.map +1 -1
- package/dist/mixins/app/plugins/identity.d.ts +1 -1
- package/dist/mixins/app/plugins/identity.js.map +1 -1
- package/dist/mixins/app/plugins/index.js.map +1 -1
- package/dist/mixins/app/plugins/llm.d.ts +1 -1
- package/dist/mixins/app/plugins/llm.js.map +1 -1
- package/dist/mixins/app/plugins/ocr.d.ts +1 -1
- package/dist/mixins/app/plugins/ocr.js.map +1 -1
- package/dist/mixins/app/plugins/pg.d.ts +1 -1
- package/dist/mixins/app/plugins/pg.js.map +1 -1
- package/dist/mixins/app/plugins/push.d.ts +1 -1
- package/dist/mixins/app/plugins/push.js.map +1 -1
- package/dist/mixins/app/plugins/sms.d.ts +1 -1
- package/dist/mixins/app/plugins/sms.js.map +1 -1
- package/dist/mixins/app/plugins/taxinvoice.d.ts +1 -1
- package/dist/mixins/app/plugins/taxinvoice.js.map +1 -1
- package/dist/mixins/app/routes/account.d.ts +1 -1
- package/dist/mixins/app/routes/account.js.map +1 -1
- package/dist/mixins/app/routes/board.d.ts +1 -1
- package/dist/mixins/app/routes/board.js.map +1 -1
- package/dist/mixins/app/routes/email-verify.d.ts +1 -1
- package/dist/mixins/app/routes/email-verify.js.map +1 -1
- package/dist/mixins/app/routes/oauth.d.ts +1 -1
- package/dist/mixins/app/routes/oauth.js.map +1 -1
- package/dist/mixins/app/routes/password-reset.d.ts +1 -1
- package/dist/mixins/app/routes/password-reset.js.map +1 -1
- package/dist/mixins/app/routes/two-factor.d.ts +1 -1
- package/dist/mixins/app/routes/two-factor.js.map +1 -1
- package/dist/mixins/server/admin.d.ts +1 -1
- package/dist/mixins/server/admin.js.map +1 -1
- package/dist/mixins/server/auth.d.ts +1 -1
- package/dist/mixins/server/auth.js +1 -1
- package/dist/mixins/server/auth.js.map +2 -2
- package/dist/mixins/server/entity.d.ts +1 -1
- package/dist/mixins/server/entity.js.map +1 -1
- package/dist/mixins/server/file.d.ts +1 -1
- package/dist/mixins/server/file.js.map +1 -1
- package/dist/mixins/server/index.js.map +1 -1
- package/dist/mixins/server/push.d.ts +1 -1
- package/dist/mixins/server/push.js.map +1 -1
- package/dist/mixins/server/smtp.d.ts +1 -1
- package/dist/mixins/server/smtp.js.map +1 -1
- package/dist/mixins/server/transaction.d.ts +1 -1
- package/dist/mixins/server/transaction.js.map +1 -1
- package/dist/mixins/server/utils.d.ts +1 -1
- package/dist/mixins/server/utils.js.map +1 -1
- package/dist/packet.js.map +1 -1
- package/dist/react.js +1 -1
- package/dist/react.js.map +3 -3
- package/dist/types.d.ts +0 -1
- package/package.json +57 -57
|
@@ -15,6 +15,7 @@ declare const EntityAppServerApi_base: {
|
|
|
15
15
|
csrfHeaderName: string;
|
|
16
16
|
csrfCookieName: string;
|
|
17
17
|
csrfRefresher: (() => Promise<void>) | null;
|
|
18
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
18
19
|
activeTxId: string | null;
|
|
19
20
|
keepSession: boolean;
|
|
20
21
|
refreshBuffer: number;
|
|
@@ -27,7 +28,6 @@ declare const EntityAppServerApi_base: {
|
|
|
27
28
|
healthTickPromise: Promise<unknown> | null;
|
|
28
29
|
realtimeEnabled: boolean;
|
|
29
30
|
realtimePath: string;
|
|
30
|
-
realtimeAutoConnect: boolean;
|
|
31
31
|
realtimeAutoReconnect: boolean;
|
|
32
32
|
realtimeReconnectDelayMs: number;
|
|
33
33
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -100,6 +100,7 @@ declare const EntityAppServerApi_base: {
|
|
|
100
100
|
csrfHeaderName: string;
|
|
101
101
|
csrfCookieName: string;
|
|
102
102
|
csrfRefresher: (() => Promise<void>) | null;
|
|
103
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
103
104
|
activeTxId: string | null;
|
|
104
105
|
keepSession: boolean;
|
|
105
106
|
refreshBuffer: number;
|
|
@@ -112,7 +113,6 @@ declare const EntityAppServerApi_base: {
|
|
|
112
113
|
healthTickPromise: Promise<unknown> | null;
|
|
113
114
|
realtimeEnabled: boolean;
|
|
114
115
|
realtimePath: string;
|
|
115
|
-
realtimeAutoConnect: boolean;
|
|
116
116
|
realtimeAutoReconnect: boolean;
|
|
117
117
|
realtimeReconnectDelayMs: number;
|
|
118
118
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -188,6 +188,7 @@ declare const EntityAppServerApi_base: {
|
|
|
188
188
|
csrfHeaderName: string;
|
|
189
189
|
csrfCookieName: string;
|
|
190
190
|
csrfRefresher: (() => Promise<void>) | null;
|
|
191
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
191
192
|
activeTxId: string | null;
|
|
192
193
|
keepSession: boolean;
|
|
193
194
|
refreshBuffer: number;
|
|
@@ -200,7 +201,6 @@ declare const EntityAppServerApi_base: {
|
|
|
200
201
|
healthTickPromise: Promise<unknown> | null;
|
|
201
202
|
realtimeEnabled: boolean;
|
|
202
203
|
realtimePath: string;
|
|
203
|
-
realtimeAutoConnect: boolean;
|
|
204
204
|
realtimeAutoReconnect: boolean;
|
|
205
205
|
realtimeReconnectDelayMs: number;
|
|
206
206
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -277,6 +277,7 @@ declare const EntityAppServerApi_base: {
|
|
|
277
277
|
csrfHeaderName: string;
|
|
278
278
|
csrfCookieName: string;
|
|
279
279
|
csrfRefresher: (() => Promise<void>) | null;
|
|
280
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
280
281
|
activeTxId: string | null;
|
|
281
282
|
keepSession: boolean;
|
|
282
283
|
refreshBuffer: number;
|
|
@@ -289,7 +290,6 @@ declare const EntityAppServerApi_base: {
|
|
|
289
290
|
healthTickPromise: Promise<unknown> | null;
|
|
290
291
|
realtimeEnabled: boolean;
|
|
291
292
|
realtimePath: string;
|
|
292
|
-
realtimeAutoConnect: boolean;
|
|
293
293
|
realtimeAutoReconnect: boolean;
|
|
294
294
|
realtimeReconnectDelayMs: number;
|
|
295
295
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -368,6 +368,7 @@ declare const EntityAppServerApi_base: {
|
|
|
368
368
|
csrfHeaderName: string;
|
|
369
369
|
csrfCookieName: string;
|
|
370
370
|
csrfRefresher: (() => Promise<void>) | null;
|
|
371
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
371
372
|
activeTxId: string | null;
|
|
372
373
|
keepSession: boolean;
|
|
373
374
|
refreshBuffer: number;
|
|
@@ -380,7 +381,6 @@ declare const EntityAppServerApi_base: {
|
|
|
380
381
|
healthTickPromise: Promise<unknown> | null;
|
|
381
382
|
realtimeEnabled: boolean;
|
|
382
383
|
realtimePath: string;
|
|
383
|
-
realtimeAutoConnect: boolean;
|
|
384
384
|
realtimeAutoReconnect: boolean;
|
|
385
385
|
realtimeReconnectDelayMs: number;
|
|
386
386
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -458,6 +458,7 @@ declare const EntityAppServerApi_base: {
|
|
|
458
458
|
csrfHeaderName: string;
|
|
459
459
|
csrfCookieName: string;
|
|
460
460
|
csrfRefresher: (() => Promise<void>) | null;
|
|
461
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
461
462
|
activeTxId: string | null;
|
|
462
463
|
keepSession: boolean;
|
|
463
464
|
refreshBuffer: number;
|
|
@@ -470,7 +471,6 @@ declare const EntityAppServerApi_base: {
|
|
|
470
471
|
healthTickPromise: Promise<unknown> | null;
|
|
471
472
|
realtimeEnabled: boolean;
|
|
472
473
|
realtimePath: string;
|
|
473
|
-
realtimeAutoConnect: boolean;
|
|
474
474
|
realtimeAutoReconnect: boolean;
|
|
475
475
|
realtimeReconnectDelayMs: number;
|
|
476
476
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -550,6 +550,7 @@ declare const EntityAppServerApi_base: {
|
|
|
550
550
|
csrfHeaderName: string;
|
|
551
551
|
csrfCookieName: string;
|
|
552
552
|
csrfRefresher: (() => Promise<void>) | null;
|
|
553
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
553
554
|
activeTxId: string | null;
|
|
554
555
|
keepSession: boolean;
|
|
555
556
|
refreshBuffer: number;
|
|
@@ -562,7 +563,6 @@ declare const EntityAppServerApi_base: {
|
|
|
562
563
|
healthTickPromise: Promise<unknown> | null;
|
|
563
564
|
realtimeEnabled: boolean;
|
|
564
565
|
realtimePath: string;
|
|
565
|
-
realtimeAutoConnect: boolean;
|
|
566
566
|
realtimeAutoReconnect: boolean;
|
|
567
567
|
realtimeReconnectDelayMs: number;
|
|
568
568
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -669,6 +669,7 @@ declare const EntityAppServerApi_base: {
|
|
|
669
669
|
csrfHeaderName: string;
|
|
670
670
|
csrfCookieName: string;
|
|
671
671
|
csrfRefresher: (() => Promise<void>) | null;
|
|
672
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
672
673
|
activeTxId: string | null;
|
|
673
674
|
keepSession: boolean;
|
|
674
675
|
refreshBuffer: number;
|
|
@@ -681,7 +682,6 @@ declare const EntityAppServerApi_base: {
|
|
|
681
682
|
healthTickPromise: Promise<unknown> | null;
|
|
682
683
|
realtimeEnabled: boolean;
|
|
683
684
|
realtimePath: string;
|
|
684
|
-
realtimeAutoConnect: boolean;
|
|
685
685
|
realtimeAutoReconnect: boolean;
|
|
686
686
|
realtimeReconnectDelayMs: number;
|
|
687
687
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -757,6 +757,7 @@ declare const EntityAppServerApi_base: {
|
|
|
757
757
|
csrfHeaderName: string;
|
|
758
758
|
csrfCookieName: string;
|
|
759
759
|
csrfRefresher: (() => Promise<void>) | null;
|
|
760
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
760
761
|
activeTxId: string | null;
|
|
761
762
|
keepSession: boolean;
|
|
762
763
|
refreshBuffer: number;
|
|
@@ -769,7 +770,6 @@ declare const EntityAppServerApi_base: {
|
|
|
769
770
|
healthTickPromise: Promise<unknown> | null;
|
|
770
771
|
realtimeEnabled: boolean;
|
|
771
772
|
realtimePath: string;
|
|
772
|
-
realtimeAutoConnect: boolean;
|
|
773
773
|
realtimeAutoReconnect: boolean;
|
|
774
774
|
realtimeReconnectDelayMs: number;
|
|
775
775
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -848,6 +848,7 @@ declare const EntityAppServerApi_base: {
|
|
|
848
848
|
csrfHeaderName: string;
|
|
849
849
|
csrfCookieName: string;
|
|
850
850
|
csrfRefresher: (() => Promise<void>) | null;
|
|
851
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
851
852
|
activeTxId: string | null;
|
|
852
853
|
keepSession: boolean;
|
|
853
854
|
refreshBuffer: number;
|
|
@@ -860,7 +861,6 @@ declare const EntityAppServerApi_base: {
|
|
|
860
861
|
healthTickPromise: Promise<unknown> | null;
|
|
861
862
|
realtimeEnabled: boolean;
|
|
862
863
|
realtimePath: string;
|
|
863
|
-
realtimeAutoConnect: boolean;
|
|
864
864
|
realtimeAutoReconnect: boolean;
|
|
865
865
|
realtimeReconnectDelayMs: number;
|
|
866
866
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -938,6 +938,7 @@ declare const EntityAppServerApi_base: {
|
|
|
938
938
|
csrfHeaderName: string;
|
|
939
939
|
csrfCookieName: string;
|
|
940
940
|
csrfRefresher: (() => Promise<void>) | null;
|
|
941
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
941
942
|
activeTxId: string | null;
|
|
942
943
|
keepSession: boolean;
|
|
943
944
|
refreshBuffer: number;
|
|
@@ -950,7 +951,6 @@ declare const EntityAppServerApi_base: {
|
|
|
950
951
|
healthTickPromise: Promise<unknown> | null;
|
|
951
952
|
realtimeEnabled: boolean;
|
|
952
953
|
realtimePath: string;
|
|
953
|
-
realtimeAutoConnect: boolean;
|
|
954
954
|
realtimeAutoReconnect: boolean;
|
|
955
955
|
realtimeReconnectDelayMs: number;
|
|
956
956
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -1029,6 +1029,7 @@ declare const EntityAppServerApi_base: {
|
|
|
1029
1029
|
csrfHeaderName: string;
|
|
1030
1030
|
csrfCookieName: string;
|
|
1031
1031
|
csrfRefresher: (() => Promise<void>) | null;
|
|
1032
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
1032
1033
|
activeTxId: string | null;
|
|
1033
1034
|
keepSession: boolean;
|
|
1034
1035
|
refreshBuffer: number;
|
|
@@ -1041,7 +1042,6 @@ declare const EntityAppServerApi_base: {
|
|
|
1041
1042
|
healthTickPromise: Promise<unknown> | null;
|
|
1042
1043
|
realtimeEnabled: boolean;
|
|
1043
1044
|
realtimePath: string;
|
|
1044
|
-
realtimeAutoConnect: boolean;
|
|
1045
1045
|
realtimeAutoReconnect: boolean;
|
|
1046
1046
|
realtimeReconnectDelayMs: number;
|
|
1047
1047
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -1118,6 +1118,7 @@ declare const EntityAppServerApi_base: {
|
|
|
1118
1118
|
csrfHeaderName: string;
|
|
1119
1119
|
csrfCookieName: string;
|
|
1120
1120
|
csrfRefresher: (() => Promise<void>) | null;
|
|
1121
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
1121
1122
|
activeTxId: string | null;
|
|
1122
1123
|
keepSession: boolean;
|
|
1123
1124
|
refreshBuffer: number;
|
|
@@ -1130,7 +1131,6 @@ declare const EntityAppServerApi_base: {
|
|
|
1130
1131
|
healthTickPromise: Promise<unknown> | null;
|
|
1131
1132
|
realtimeEnabled: boolean;
|
|
1132
1133
|
realtimePath: string;
|
|
1133
|
-
realtimeAutoConnect: boolean;
|
|
1134
1134
|
realtimeAutoReconnect: boolean;
|
|
1135
1135
|
realtimeReconnectDelayMs: number;
|
|
1136
1136
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -1207,6 +1207,7 @@ declare const EntityAppServerApi_base: {
|
|
|
1207
1207
|
csrfHeaderName: string;
|
|
1208
1208
|
csrfCookieName: string;
|
|
1209
1209
|
csrfRefresher: (() => Promise<void>) | null;
|
|
1210
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
1210
1211
|
activeTxId: string | null;
|
|
1211
1212
|
keepSession: boolean;
|
|
1212
1213
|
refreshBuffer: number;
|
|
@@ -1219,7 +1220,6 @@ declare const EntityAppServerApi_base: {
|
|
|
1219
1220
|
healthTickPromise: Promise<unknown> | null;
|
|
1220
1221
|
realtimeEnabled: boolean;
|
|
1221
1222
|
realtimePath: string;
|
|
1222
|
-
realtimeAutoConnect: boolean;
|
|
1223
1223
|
realtimeAutoReconnect: boolean;
|
|
1224
1224
|
realtimeReconnectDelayMs: number;
|
|
1225
1225
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -1324,6 +1324,7 @@ declare const EntityAppServerApi_base: {
|
|
|
1324
1324
|
csrfHeaderName: string;
|
|
1325
1325
|
csrfCookieName: string;
|
|
1326
1326
|
csrfRefresher: (() => Promise<void>) | null;
|
|
1327
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
1327
1328
|
activeTxId: string | null;
|
|
1328
1329
|
keepSession: boolean;
|
|
1329
1330
|
refreshBuffer: number;
|
|
@@ -1336,7 +1337,6 @@ declare const EntityAppServerApi_base: {
|
|
|
1336
1337
|
healthTickPromise: Promise<unknown> | null;
|
|
1337
1338
|
realtimeEnabled: boolean;
|
|
1338
1339
|
realtimePath: string;
|
|
1339
|
-
realtimeAutoConnect: boolean;
|
|
1340
1340
|
realtimeAutoReconnect: boolean;
|
|
1341
1341
|
realtimeReconnectDelayMs: number;
|
|
1342
1342
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -1418,6 +1418,7 @@ declare const EntityAppServerApi_base: {
|
|
|
1418
1418
|
csrfHeaderName: string;
|
|
1419
1419
|
csrfCookieName: string;
|
|
1420
1420
|
csrfRefresher: (() => Promise<void>) | null;
|
|
1421
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
1421
1422
|
activeTxId: string | null;
|
|
1422
1423
|
keepSession: boolean;
|
|
1423
1424
|
refreshBuffer: number;
|
|
@@ -1430,7 +1431,6 @@ declare const EntityAppServerApi_base: {
|
|
|
1430
1431
|
healthTickPromise: Promise<unknown> | null;
|
|
1431
1432
|
realtimeEnabled: boolean;
|
|
1432
1433
|
realtimePath: string;
|
|
1433
|
-
realtimeAutoConnect: boolean;
|
|
1434
1434
|
realtimeAutoReconnect: boolean;
|
|
1435
1435
|
realtimeReconnectDelayMs: number;
|
|
1436
1436
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/EntityAppServerApi.ts"],
|
|
4
|
-
"sourcesContent": ["import { EntityServerApi } from \"./EntityServerApi.js\";\
|
|
4
|
+
"sourcesContent": ["import { EntityServerApi } from \"./EntityServerApi.js\";\nimport {\n AccountAppMixin,\n BoardMixin,\n EmailVerifyMixin,\n OAuthMixin,\n PasswordResetMixin,\n TwoFactorMixin,\n} from \"./mixins/app/index.js\";\nimport {\n AlimtalkMixin,\n AppPushMixin,\n FriendtalkMixin,\n HolidaysMixin,\n IdentityMixin,\n LlmMixin,\n OcrMixin,\n PgMixin,\n SmsMixin,\n TaxinvoiceMixin,\n} from \"./mixins/app/plugins/index.js\";\n\nexport class EntityAppServerApi extends AlimtalkMixin(\n FriendtalkMixin(\n SmsMixin(\n AppPushMixin(\n PgMixin(\n TaxinvoiceMixin(\n OcrMixin(\n LlmMixin(\n IdentityMixin(\n HolidaysMixin(\n OAuthMixin(\n TwoFactorMixin(\n PasswordResetMixin(\n EmailVerifyMixin(\n BoardMixin(\n AccountAppMixin(\n EntityServerApi,\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n ),\n) {}\n"],
|
|
5
5
|
"mappings": "AAAA,OAAS,mBAAAA,MAAuB,uBAChC,OACI,mBAAAC,EACA,cAAAC,EACA,oBAAAC,EACA,cAAAC,EACA,sBAAAC,EACA,kBAAAC,MACG,wBACP,OACI,iBAAAC,EACA,gBAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,iBAAAC,EACA,YAAAC,EACA,YAAAC,EACA,WAAAC,EACA,YAAAC,EACA,mBAAAC,MACG,gCAEA,MAAMC,UAA2BV,EACpCE,EACIM,EACIP,EACIM,EACIE,EACIH,EACID,EACID,EACID,EACIN,EACIE,EACID,EACIF,EACID,EACID,EACID,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CAAE,CAAC",
|
|
6
6
|
"names": ["EntityServerApi", "AccountAppMixin", "BoardMixin", "EmailVerifyMixin", "OAuthMixin", "PasswordResetMixin", "TwoFactorMixin", "AlimtalkMixin", "AppPushMixin", "FriendtalkMixin", "HolidaysMixin", "IdentityMixin", "LlmMixin", "OcrMixin", "PgMixin", "SmsMixin", "TaxinvoiceMixin", "EntityAppServerApi"]
|
|
7
7
|
}
|
|
@@ -46,6 +46,7 @@ declare const EntityServerApi_base: {
|
|
|
46
46
|
csrfHeaderName: string;
|
|
47
47
|
csrfCookieName: string;
|
|
48
48
|
csrfRefresher: (() => Promise<void>) | null;
|
|
49
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
49
50
|
activeTxId: string | null;
|
|
50
51
|
keepSession: boolean;
|
|
51
52
|
refreshBuffer: number;
|
|
@@ -58,7 +59,6 @@ declare const EntityServerApi_base: {
|
|
|
58
59
|
healthTickPromise: Promise<unknown> | null;
|
|
59
60
|
realtimeEnabled: boolean;
|
|
60
61
|
realtimePath: string;
|
|
61
|
-
realtimeAutoConnect: boolean;
|
|
62
62
|
realtimeAutoReconnect: boolean;
|
|
63
63
|
realtimeReconnectDelayMs: number;
|
|
64
64
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -133,6 +133,7 @@ declare const EntityServerApi_base: {
|
|
|
133
133
|
csrfHeaderName: string;
|
|
134
134
|
csrfCookieName: string;
|
|
135
135
|
csrfRefresher: (() => Promise<void>) | null;
|
|
136
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
136
137
|
activeTxId: string | null;
|
|
137
138
|
keepSession: boolean;
|
|
138
139
|
refreshBuffer: number;
|
|
@@ -145,7 +146,6 @@ declare const EntityServerApi_base: {
|
|
|
145
146
|
healthTickPromise: Promise<unknown> | null;
|
|
146
147
|
realtimeEnabled: boolean;
|
|
147
148
|
realtimePath: string;
|
|
148
|
-
realtimeAutoConnect: boolean;
|
|
149
149
|
realtimeAutoReconnect: boolean;
|
|
150
150
|
realtimeReconnectDelayMs: number;
|
|
151
151
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -282,6 +282,7 @@ declare const EntityServerApi_base: {
|
|
|
282
282
|
csrfHeaderName: string;
|
|
283
283
|
csrfCookieName: string;
|
|
284
284
|
csrfRefresher: (() => Promise<void>) | null;
|
|
285
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
285
286
|
activeTxId: string | null;
|
|
286
287
|
keepSession: boolean;
|
|
287
288
|
refreshBuffer: number;
|
|
@@ -294,7 +295,6 @@ declare const EntityServerApi_base: {
|
|
|
294
295
|
healthTickPromise: Promise<unknown> | null;
|
|
295
296
|
realtimeEnabled: boolean;
|
|
296
297
|
realtimePath: string;
|
|
297
|
-
realtimeAutoConnect: boolean;
|
|
298
298
|
realtimeAutoReconnect: boolean;
|
|
299
299
|
realtimeReconnectDelayMs: number;
|
|
300
300
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -375,6 +375,7 @@ declare const EntityServerApi_base: {
|
|
|
375
375
|
csrfHeaderName: string;
|
|
376
376
|
csrfCookieName: string;
|
|
377
377
|
csrfRefresher: (() => Promise<void>) | null;
|
|
378
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
378
379
|
activeTxId: string | null;
|
|
379
380
|
keepSession: boolean;
|
|
380
381
|
refreshBuffer: number;
|
|
@@ -387,7 +388,6 @@ declare const EntityServerApi_base: {
|
|
|
387
388
|
healthTickPromise: Promise<unknown> | null;
|
|
388
389
|
realtimeEnabled: boolean;
|
|
389
390
|
realtimePath: string;
|
|
390
|
-
realtimeAutoConnect: boolean;
|
|
391
391
|
realtimeAutoReconnect: boolean;
|
|
392
392
|
realtimeReconnectDelayMs: number;
|
|
393
393
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -486,6 +486,7 @@ declare const EntityServerApi_base: {
|
|
|
486
486
|
csrfHeaderName: string;
|
|
487
487
|
csrfCookieName: string;
|
|
488
488
|
csrfRefresher: (() => Promise<void>) | null;
|
|
489
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
489
490
|
activeTxId: string | null;
|
|
490
491
|
keepSession: boolean;
|
|
491
492
|
refreshBuffer: number;
|
|
@@ -498,7 +499,6 @@ declare const EntityServerApi_base: {
|
|
|
498
499
|
healthTickPromise: Promise<unknown> | null;
|
|
499
500
|
realtimeEnabled: boolean;
|
|
500
501
|
realtimePath: string;
|
|
501
|
-
realtimeAutoConnect: boolean;
|
|
502
502
|
realtimeAutoReconnect: boolean;
|
|
503
503
|
realtimeReconnectDelayMs: number;
|
|
504
504
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -632,6 +632,7 @@ declare const EntityServerApi_base: {
|
|
|
632
632
|
csrfHeaderName: string;
|
|
633
633
|
csrfCookieName: string;
|
|
634
634
|
csrfRefresher: (() => Promise<void>) | null;
|
|
635
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
635
636
|
activeTxId: string | null;
|
|
636
637
|
keepSession: boolean;
|
|
637
638
|
refreshBuffer: number;
|
|
@@ -644,7 +645,6 @@ declare const EntityServerApi_base: {
|
|
|
644
645
|
healthTickPromise: Promise<unknown> | null;
|
|
645
646
|
realtimeEnabled: boolean;
|
|
646
647
|
realtimePath: string;
|
|
647
|
-
realtimeAutoConnect: boolean;
|
|
648
648
|
realtimeAutoReconnect: boolean;
|
|
649
649
|
realtimeReconnectDelayMs: number;
|
|
650
650
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -782,6 +782,7 @@ declare const EntityServerApi_base: {
|
|
|
782
782
|
csrfHeaderName: string;
|
|
783
783
|
csrfCookieName: string;
|
|
784
784
|
csrfRefresher: (() => Promise<void>) | null;
|
|
785
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
785
786
|
activeTxId: string | null;
|
|
786
787
|
keepSession: boolean;
|
|
787
788
|
refreshBuffer: number;
|
|
@@ -794,7 +795,6 @@ declare const EntityServerApi_base: {
|
|
|
794
795
|
healthTickPromise: Promise<unknown> | null;
|
|
795
796
|
realtimeEnabled: boolean;
|
|
796
797
|
realtimePath: string;
|
|
797
|
-
realtimeAutoConnect: boolean;
|
|
798
798
|
realtimeAutoReconnect: boolean;
|
|
799
799
|
realtimeReconnectDelayMs: number;
|
|
800
800
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -900,6 +900,7 @@ declare const EntityServerApi_base: {
|
|
|
900
900
|
csrfEnabled: boolean;
|
|
901
901
|
csrfHeaderName: string;
|
|
902
902
|
csrfCookieName: string;
|
|
903
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
903
904
|
activeTxId: string | null;
|
|
904
905
|
keepSession: boolean;
|
|
905
906
|
refreshBuffer: number;
|
|
@@ -912,7 +913,6 @@ declare const EntityServerApi_base: {
|
|
|
912
913
|
healthTickPromise: Promise<unknown> | null;
|
|
913
914
|
realtimeEnabled: boolean;
|
|
914
915
|
realtimePath: string;
|
|
915
|
-
realtimeAutoConnect: boolean;
|
|
916
916
|
realtimeAutoReconnect: boolean;
|
|
917
917
|
realtimeReconnectDelayMs: number;
|
|
918
918
|
realtimeStatus: import("./types.js").RealtimeConnectionStatus;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/EntityServerApi.ts"],
|
|
4
|
-
"sourcesContent": ["/**\
|
|
4
|
+
"sourcesContent": ["/**\n * @file EntityServerApi.ts\n * entity-server core route\uC6A9 Mixin \uC870\uD569 \uD074\uB77C\uC774\uC5B8\uD2B8.\n *\n * \uC808(section)\uBCC4 \uAD6C\uD604:\n * src/client/base.ts \u2014 \uC0C1\uD0DC\u00B7\uC0DD\uC131\uC790\u00B7\uACF5\uD1B5 \uD5EC\uD37C\n * src/mixins/server/* \u2014 entity-server core route mixin\n * src/mixins/app/* \u2014 entity-app-server plugin mixin\n */\nimport { EntityServerClientBase } from \"./client/base.js\";\nimport {\n AdminMixin,\n AuthMixin,\n EntityMixin,\n FileMixin,\n PushMixin,\n SmtpMixin,\n TransactionMixin,\n UtilsMixin,\n} from \"./mixins/server/index.js\";\n\n// \u2500\u2500\u2500 Composed class \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport class EntityServerApi extends UtilsMixin(\n TransactionMixin(\n FileMixin(\n SmtpMixin(\n PushMixin(\n AdminMixin(EntityMixin(AuthMixin(EntityServerClientBase))),\n ),\n ),\n ),\n ),\n) {}\n"],
|
|
5
5
|
"mappings": "AASA,OAAS,0BAAAA,MAA8B,mBACvC,OACI,cAAAC,EACA,aAAAC,EACA,eAAAC,EACA,aAAAC,EACA,aAAAC,EACA,aAAAC,EACA,oBAAAC,EACA,cAAAC,MACG,2BAIA,MAAMC,UAAwBD,EACjCD,EACIH,EACIE,EACID,EACIJ,EAAWE,EAAYD,EAAUF,CAAsB,CAAC,CAAC,CAC7D,CACJ,CACJ,CACJ,CACJ,CAAE,CAAC",
|
|
6
6
|
"names": ["EntityServerClientBase", "AdminMixin", "AuthMixin", "EntityMixin", "FileMixin", "PushMixin", "SmtpMixin", "TransactionMixin", "UtilsMixin", "EntityServerApi"]
|
|
7
7
|
}
|
package/dist/client/base.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare class EntityServerClientBase {
|
|
|
13
13
|
csrfCookieName: string;
|
|
14
14
|
/** @internal health 재호출로 CSRF 쿠키 갱신 (AuthMixin에서 설정) */
|
|
15
15
|
csrfRefresher: (() => Promise<void>) | null;
|
|
16
|
+
requestAbortControllers: Map<string, AbortController>;
|
|
16
17
|
activeTxId: string | null;
|
|
17
18
|
keepSession: boolean;
|
|
18
19
|
refreshBuffer: number;
|
|
@@ -25,7 +26,6 @@ export declare class EntityServerClientBase {
|
|
|
25
26
|
healthTickPromise: Promise<unknown> | null;
|
|
26
27
|
realtimeEnabled: boolean;
|
|
27
28
|
realtimePath: string;
|
|
28
|
-
realtimeAutoConnect: boolean;
|
|
29
29
|
realtimeAutoReconnect: boolean;
|
|
30
30
|
realtimeReconnectDelayMs: number;
|
|
31
31
|
realtimeStatus: RealtimeConnectionStatus;
|
package/dist/client/base.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
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 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;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,!1))}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,!1))}setToken(e){if(this.token=e,!e){this.disconnectRealtime("token_cleared");return}this.realtimeEnabled&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{})}setAccessTokenFromResponse(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}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,t=!0){this.stopHealthTick();const s=()=>{this.healthTickPromise||(this.healthTickPromise=(this.csrfRefresher?this.csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this.healthTickPromise=null}))};t&&s(),this.healthTickTimer=setInterval(s,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.setAccessTokenFromResponse(e)}}}prepareRequest(e){return Promise.resolve()}get http(){const e=this;return{get(t,s=!0,i,r){return e.prepareRequest(s).then(()=>l(e.reqOpts,"GET",t,void 0,s,i,r??!0))},post(t,s,i=!0,r,n){return e.prepareRequest(i).then(()=>l(e.reqOpts,"POST",t,s,i,r,n??!0))},put(t,s,i=!0,r,n){return e.prepareRequest(i).then(()=>l(e.reqOpts,"PUT",t,s,i,r,n??!0))},patch(t,s,i=!0,r,n){return e.prepareRequest(i).then(()=>l(e.reqOpts,"PATCH",t,s,i,r,n??!0))},delete(t,s,i=!0,r,n){return e.prepareRequest(i).then(()=>l(e.reqOpts,"DELETE",t,s,i,r,n??!0))}}}request(e,t,s,i=!0,r,n){return this.prepareRequest(i).then(()=>l(this.reqOpts,e,t,s,i,r,n??!0))}async requestBinary(e,t,s,i=!0){await this.prepareRequest(i);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{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 y{baseUrl;token;anonymousPacketToken;apiKey;hmacSecret;encryptRequests;csrfEnabled;csrfHeaderName;csrfCookieName;csrfRefresher=null;requestAbortControllers=new Map;activeTxId=null;keepSession;refreshBuffer;onTokenRefreshed;onSessionExpired;onHealthChange;sessionRefreshToken=null;refreshTimer=null;healthTickTimer=null;healthTickPromise=null;realtimeEnabled;realtimePath;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.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,!1))}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,!1))}setToken(e){this.token=e,e||this.disconnectRealtime("token_cleared")}setAccessTokenFromResponse(e){this.token=e,e||this.disconnectRealtime("token_cleared")}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 i=String(e).trim();i&&(this.realtimeEventListeners.has(i)||this.realtimeEventListeners.set(i,new Set),this.realtimeEventListeners.get(i).add(t))}removeRealtimeEventListener(e,t){const i=String(e).trim();if(!i)return;const s=this.realtimeEventListeners.get(i);s&&(s.delete(t),s.size===0&&this.realtimeEventListeners.delete(i))}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,i)=>{let s=!1;const r=()=>{s||(s=!0,this.realtimeConnectPromise=null,t())},n=a=>{s||(s=!0,this.realtimeConnectPromise=null,i(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),s||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,t=!0){this.stopHealthTick();const i=()=>{this.healthTickPromise||(this.healthTickPromise=(this.csrfRefresher?this.csrfRefresher():Promise.resolve()).then(()=>{this.onHealthChange?.(!0)}).catch(()=>{this.onHealthChange?.(!1)}).finally(()=>{this.healthTickPromise=null}))};t&&i(),this.healthTickTimer=setInterval(i,e)}stopHealthTick(){this.healthTickTimer!==null&&(clearInterval(this.healthTickTimer),this.healthTickTimer=null),this.healthTickPromise=null}scheduleKeepSession(e,t,i){this.clearRefreshTimer(),this.sessionRefreshToken=e;const s=Math.max((t-this.refreshBuffer)*1e3,0);this.refreshTimer=setTimeout(async()=>{if(this.sessionRefreshToken)try{const r=await i(this.sessionRefreshToken);this.onTokenRefreshed?.(r.access_token,r.expires_in),this.scheduleKeepSession(this.sessionRefreshToken,r.expires_in,i)}catch(r){this.clearRefreshTimer(),this.onSessionExpired?.(r instanceof Error?r:new Error(String(r)))}},s)}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.realtimeAutoReconnect=t.autoReconnect??!0,this.realtimeReconnectDelayMs=Math.max(250,t.reconnectDelayMs??3e3),!this.realtimeEnabled){this.disconnectRealtime("realtime_disabled");return}this.setRealtimeStatus("idle","realtime_enabled")}buildRealtimeUrl(){const e=this.baseUrl||m("VITE_ENTITY_SERVER_URL")||"",t=typeof window<"u"?window.location.origin:"",i=e||t;if(!i)throw new Error("Realtime connection requires baseUrl.");const s=new URL(i,t||void 0),r=s.pathname==="/"?"":s.pathname.replace(/\/+$/,""),n=`/${this.realtimePath.replace(/^\/+/,"")}`;return s.pathname=`${r}${n}`||n,s.search="",s.hash="",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 s of this.realtimeMessageListeners)s(t);const i=this.realtimeEventListeners.get(t.event);if(i)for(const s of i)s(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,i){const s=this.realtimeStatus;if(!(s===e&&typeof t>"u"&&typeof i>"u")){this.realtimeStatus=e;for(const r of this.realtimeStatusListeners)r({status:e,previousStatus:s,...t?{reason:t}:{},...i?{error:i}:{}})}}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",i=!1){const s=u(this.hmacSecret,this.token||this.anonymousPacketToken);return f(e,t,i,s)}get reqOpts(){return{baseUrl:this.baseUrl,token:this.token,anonymousPacketToken:this.anonymousPacketToken,apiKey:this.apiKey,hmacSecret:this.hmacSecret,encryptRequests:this.encryptRequests,csrfEnabled:this.csrfEnabled,csrfHeaderName:this.csrfHeaderName,csrfCookieName:this.csrfCookieName,refreshCsrfCookie:this.csrfEnabled?this.csrfRefresher:null,requestAbortControllers:this.requestAbortControllers,onAccessToken:e=>{this.setAccessTokenFromResponse(e)}}}prepareRequest(e){return Promise.resolve()}get http(){const e=this;return{get(t,i=!0,s,r){return e.prepareRequest(i).then(()=>l(e.reqOpts,"GET",t,void 0,i,s,r??!0))},post(t,i,s=!0,r,n){return e.prepareRequest(s).then(()=>l(e.reqOpts,"POST",t,i,s,r,n??!0))},put(t,i,s=!0,r,n){return e.prepareRequest(s).then(()=>l(e.reqOpts,"PUT",t,i,s,r,n??!0))},patch(t,i,s=!0,r,n){return e.prepareRequest(s).then(()=>l(e.reqOpts,"PATCH",t,i,s,r,n??!0))},delete(t,i,s=!0,r,n){return e.prepareRequest(s).then(()=>l(e.reqOpts,"DELETE",t,i,s,r,n??!0))}}}request(e,t,i,s=!0,r,n){return this.prepareRequest(s).then(()=>l(this.reqOpts,e,t,i,s,r,n??!0))}async requestBinary(e,t,i,s=!0){await this.prepareRequest(s);const r={"Content-Type":"application/json"};s&&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,...i!=null?{body:JSON.stringify(i)}:{},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,i,s=!0){const r={};s&&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:i,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,i,s=!0){const r={};s&&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:i,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{y as EntityServerClientBase};
|
|
2
2
|
//# sourceMappingURL=base.js.map
|