entity-client 1.0.24 → 1.0.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/EntityAppServerApi.d.ts +33 -0
  2. package/dist/EntityServerApi.d.ts +16 -0
  3. package/dist/client/base.d.ts +11 -0
  4. package/dist/client/base.js +1 -1
  5. package/dist/client/base.js.map +3 -3
  6. package/dist/client/request.js +1 -1
  7. package/dist/client/request.js.map +3 -3
  8. package/dist/index.js +1 -1
  9. package/dist/index.js.map +3 -3
  10. package/dist/mixins/app/plugins/alimtalk.d.ts +2 -0
  11. package/dist/mixins/app/plugins/friendtalk.d.ts +2 -0
  12. package/dist/mixins/app/plugins/holidays.d.ts +2 -0
  13. package/dist/mixins/app/plugins/identity.d.ts +2 -0
  14. package/dist/mixins/app/plugins/llm.d.ts +2 -0
  15. package/dist/mixins/app/plugins/ocr.d.ts +2 -0
  16. package/dist/mixins/app/plugins/pg.d.ts +2 -0
  17. package/dist/mixins/app/plugins/push.d.ts +2 -0
  18. package/dist/mixins/app/plugins/sms.d.ts +2 -0
  19. package/dist/mixins/app/plugins/taxinvoice.d.ts +2 -0
  20. package/dist/mixins/app/routes/account.d.ts +2 -0
  21. package/dist/mixins/app/routes/board.d.ts +3 -0
  22. package/dist/mixins/app/routes/board.js +1 -1
  23. package/dist/mixins/app/routes/board.js.map +2 -2
  24. package/dist/mixins/app/routes/email-verify.d.ts +2 -0
  25. package/dist/mixins/app/routes/oauth.d.ts +2 -0
  26. package/dist/mixins/app/routes/password-reset.d.ts +2 -0
  27. package/dist/mixins/app/routes/two-factor.d.ts +2 -0
  28. package/dist/mixins/server/admin.d.ts +2 -0
  29. package/dist/mixins/server/auth.d.ts +2 -0
  30. package/dist/mixins/server/auth.js +1 -1
  31. package/dist/mixins/server/auth.js.map +3 -3
  32. package/dist/mixins/server/entity.d.ts +2 -0
  33. package/dist/mixins/server/file.d.ts +2 -0
  34. package/dist/mixins/server/push.d.ts +2 -0
  35. package/dist/mixins/server/smtp.d.ts +2 -0
  36. package/dist/mixins/server/transaction.d.ts +2 -0
  37. package/dist/mixins/server/utils.d.ts +2 -0
  38. package/dist/react.js +1 -1
  39. package/dist/react.js.map +3 -3
  40. package/package.json +1 -1
@@ -21,6 +21,7 @@ export declare function AlimtalkMixin<TBase extends GConstructor<EntityServerCli
21
21
  csrfRefresher: (() => Promise<void>) | null;
22
22
  requestAbortControllers: Map<string, AbortController>;
23
23
  activeTxId: string | null;
24
+ initialHealthFired: boolean;
24
25
  keepSession: boolean;
25
26
  refreshBuffer: number;
26
27
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -43,6 +44,7 @@ export declare function AlimtalkMixin<TBase extends GConstructor<EntityServerCli
43
44
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
44
45
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
45
46
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
47
+ fireInitialHealth(): void;
46
48
  setToken(token: string): void;
47
49
  setAccessTokenFromResponse(token: string): void;
48
50
  syncRealtimeWithToken(): void;
@@ -15,6 +15,7 @@ export declare function FriendtalkMixin<TBase extends GConstructor<EntityServerC
15
15
  csrfRefresher: (() => Promise<void>) | null;
16
16
  requestAbortControllers: Map<string, AbortController>;
17
17
  activeTxId: string | null;
18
+ initialHealthFired: boolean;
18
19
  keepSession: boolean;
19
20
  refreshBuffer: number;
20
21
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -37,6 +38,7 @@ export declare function FriendtalkMixin<TBase extends GConstructor<EntityServerC
37
38
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
38
39
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
39
40
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
41
+ fireInitialHealth(): void;
40
42
  setToken(token: string): void;
41
43
  setAccessTokenFromResponse(token: string): void;
42
44
  syncRealtimeWithToken(): void;
@@ -23,6 +23,7 @@ export declare function HolidaysMixin<TBase extends GConstructor<EntityServerCli
23
23
  csrfRefresher: (() => Promise<void>) | null;
24
24
  requestAbortControllers: Map<string, AbortController>;
25
25
  activeTxId: string | null;
26
+ initialHealthFired: boolean;
26
27
  keepSession: boolean;
27
28
  refreshBuffer: number;
28
29
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -45,6 +46,7 @@ export declare function HolidaysMixin<TBase extends GConstructor<EntityServerCli
45
46
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
46
47
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
47
48
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
49
+ fireInitialHealth(): void;
48
50
  setToken(token: string): void;
49
51
  setAccessTokenFromResponse(token: string): void;
50
52
  syncRealtimeWithToken(): void;
@@ -21,6 +21,7 @@ export declare function IdentityMixin<TBase extends GConstructor<EntityServerCli
21
21
  csrfRefresher: (() => Promise<void>) | null;
22
22
  requestAbortControllers: Map<string, AbortController>;
23
23
  activeTxId: string | null;
24
+ initialHealthFired: boolean;
24
25
  keepSession: boolean;
25
26
  refreshBuffer: number;
26
27
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -43,6 +44,7 @@ export declare function IdentityMixin<TBase extends GConstructor<EntityServerCli
43
44
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
44
45
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
45
46
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
47
+ fireInitialHealth(): void;
46
48
  setToken(token: string): void;
47
49
  setAccessTokenFromResponse(token: string): void;
48
50
  syncRealtimeWithToken(): void;
@@ -83,6 +83,7 @@ export declare function LlmMixin<TBase extends GConstructor<EntityServerClientBa
83
83
  csrfRefresher: (() => Promise<void>) | null;
84
84
  requestAbortControllers: Map<string, AbortController>;
85
85
  activeTxId: string | null;
86
+ initialHealthFired: boolean;
86
87
  keepSession: boolean;
87
88
  refreshBuffer: number;
88
89
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -105,6 +106,7 @@ export declare function LlmMixin<TBase extends GConstructor<EntityServerClientBa
105
106
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
106
107
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
107
108
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
109
+ fireInitialHealth(): void;
108
110
  setToken(token: string): void;
109
111
  setAccessTokenFromResponse(token: string): void;
110
112
  syncRealtimeWithToken(): void;
@@ -29,6 +29,7 @@ export declare function OcrMixin<TBase extends GConstructor<EntityServerClientBa
29
29
  csrfRefresher: (() => Promise<void>) | null;
30
30
  requestAbortControllers: Map<string, AbortController>;
31
31
  activeTxId: string | null;
32
+ initialHealthFired: boolean;
32
33
  keepSession: boolean;
33
34
  refreshBuffer: number;
34
35
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -51,6 +52,7 @@ export declare function OcrMixin<TBase extends GConstructor<EntityServerClientBa
51
52
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
52
53
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
53
54
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
55
+ fireInitialHealth(): void;
54
56
  setToken(token: string): void;
55
57
  setAccessTokenFromResponse(token: string): void;
56
58
  syncRealtimeWithToken(): void;
@@ -27,6 +27,7 @@ export declare function PgMixin<TBase extends GConstructor<EntityServerClientBas
27
27
  csrfRefresher: (() => Promise<void>) | null;
28
28
  requestAbortControllers: Map<string, AbortController>;
29
29
  activeTxId: string | null;
30
+ initialHealthFired: boolean;
30
31
  keepSession: boolean;
31
32
  refreshBuffer: number;
32
33
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -49,6 +50,7 @@ export declare function PgMixin<TBase extends GConstructor<EntityServerClientBas
49
50
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
50
51
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
51
52
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
53
+ fireInitialHealth(): void;
52
54
  setToken(token: string): void;
53
55
  setAccessTokenFromResponse(token: string): void;
54
56
  syncRealtimeWithToken(): void;
@@ -23,6 +23,7 @@ export declare function AppPushMixin<TBase extends GConstructor<EntityServerClie
23
23
  csrfRefresher: (() => Promise<void>) | null;
24
24
  requestAbortControllers: Map<string, AbortController>;
25
25
  activeTxId: string | null;
26
+ initialHealthFired: boolean;
26
27
  keepSession: boolean;
27
28
  refreshBuffer: number;
28
29
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -45,6 +46,7 @@ export declare function AppPushMixin<TBase extends GConstructor<EntityServerClie
45
46
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
46
47
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
47
48
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
49
+ fireInitialHealth(): void;
48
50
  setToken(token: string): void;
49
51
  setAccessTokenFromResponse(token: string): void;
50
52
  syncRealtimeWithToken(): void;
@@ -21,6 +21,7 @@ export declare function SmsMixin<TBase extends GConstructor<EntityServerClientBa
21
21
  csrfRefresher: (() => Promise<void>) | null;
22
22
  requestAbortControllers: Map<string, AbortController>;
23
23
  activeTxId: string | null;
24
+ initialHealthFired: boolean;
24
25
  keepSession: boolean;
25
26
  refreshBuffer: number;
26
27
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -43,6 +44,7 @@ export declare function SmsMixin<TBase extends GConstructor<EntityServerClientBa
43
44
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
44
45
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
45
46
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
47
+ fireInitialHealth(): void;
46
48
  setToken(token: string): void;
47
49
  setAccessTokenFromResponse(token: string): void;
48
50
  syncRealtimeWithToken(): void;
@@ -25,6 +25,7 @@ export declare function TaxinvoiceMixin<TBase extends GConstructor<EntityServerC
25
25
  csrfRefresher: (() => Promise<void>) | null;
26
26
  requestAbortControllers: Map<string, AbortController>;
27
27
  activeTxId: string | null;
28
+ initialHealthFired: boolean;
28
29
  keepSession: boolean;
29
30
  refreshBuffer: number;
30
31
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -47,6 +48,7 @@ export declare function TaxinvoiceMixin<TBase extends GConstructor<EntityServerC
47
48
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
48
49
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
49
50
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
51
+ fireInitialHealth(): void;
50
52
  setToken(token: string): void;
51
53
  setAccessTokenFromResponse(token: string): void;
52
54
  syncRealtimeWithToken(): void;
@@ -23,6 +23,7 @@ export declare function AccountAppMixin<TBase extends GConstructor<EntityServerC
23
23
  csrfRefresher: (() => Promise<void>) | null;
24
24
  requestAbortControllers: Map<string, AbortController>;
25
25
  activeTxId: string | null;
26
+ initialHealthFired: boolean;
26
27
  keepSession: boolean;
27
28
  refreshBuffer: number;
28
29
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -45,6 +46,7 @@ export declare function AccountAppMixin<TBase extends GConstructor<EntityServerC
45
46
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
46
47
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
47
48
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
49
+ fireInitialHealth(): void;
48
50
  setToken(token: string): void;
49
51
  setAccessTokenFromResponse(token: string): void;
50
52
  syncRealtimeWithToken(): void;
@@ -10,6 +10,7 @@ export declare function BoardMixin<TBase extends GConstructor<EntityServerClient
10
10
  getBoardPost<T = unknown>(seq: number): Promise<T>;
11
11
  createBoardPost<T = unknown>(category: string, body: Record<string, unknown>): Promise<T>;
12
12
  updateBoardPost<T = unknown>(seq: number, body: Record<string, unknown>): Promise<T>;
13
+ expireBoardPost<T = unknown>(seq: number): Promise<T>;
13
14
  deleteBoardPost<T = unknown>(seq: number): Promise<T>;
14
15
  listBoardComments<T = unknown>(postSeq: number, query?: Record<string, unknown>): Promise<T>;
15
16
  createBoardComment<T = unknown>(postSeq: number, body: Record<string, unknown>): Promise<T>;
@@ -46,6 +47,7 @@ export declare function BoardMixin<TBase extends GConstructor<EntityServerClient
46
47
  csrfRefresher: (() => Promise<void>) | null;
47
48
  requestAbortControllers: Map<string, AbortController>;
48
49
  activeTxId: string | null;
50
+ initialHealthFired: boolean;
49
51
  keepSession: boolean;
50
52
  refreshBuffer: number;
51
53
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -68,6 +70,7 @@ export declare function BoardMixin<TBase extends GConstructor<EntityServerClient
68
70
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
69
71
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
70
72
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
73
+ fireInitialHealth(): void;
71
74
  setToken(token: string): void;
72
75
  setAccessTokenFromResponse(token: string): void;
73
76
  syncRealtimeWithToken(): void;
@@ -1,2 +1,2 @@
1
- import{buildQuery as o}from"../../../client/utils.js";function a(e){return class extends e{listBoardCategories(t={}){const r=o(t);return this.http.get(`/v1/board/categories${r?`?${r}`:""}`,!1)}getBoardCategory(t){return this.http.get(`/v1/board/categories/${t}`,!1)}createBoardCategory(t){return this.http.post("/v1/board/categories",t)}updateBoardCategory(t,r){return this.http.put(`/v1/board/categories/${t}`,r)}deleteBoardCategory(t){return this.http.delete(`/v1/board/categories/${t}`)}listBoardPosts(t,r={}){const n=o(r);return this.http.get(`/v1/board/${t}/list${n?`?${n}`:""}`)}getBoardPost(t){return this.http.get(`/v1/board/posts/${t}`)}createBoardPost(t,r){return this.http.post(`/v1/board/${t}/submit`,r)}updateBoardPost(t,r){return this.http.put(`/v1/board/posts/${t}`,r)}deleteBoardPost(t){return this.http.delete(`/v1/board/posts/${t}`)}listBoardComments(t,r={}){const n=o(r);return this.http.get(`/v1/board/posts/${t}/comments${n?`?${n}`:""}`,!1)}createBoardComment(t,r){return this.http.post(`/v1/board/posts/${t}/comments/submit`,r)}updateBoardComment(t,r){return this.http.put(`/v1/board/comments/${t}`,r)}deleteBoardComment(t){return this.http.delete(`/v1/board/comments/${t}`)}listBoardFiles(t){return this.http.get(`/v1/board/posts/${t}/files`,!1)}async uploadBoardFile(t,r){const n=new FormData;return n.append("file",r,r instanceof File?r.name:"upload"),this.requestForm("POST",`/v1/board/posts/${t}/files`,n)}boardFileUrl(t){return`${this.baseUrl}/v1/board/files/${t}`}deleteBoardFile(t){return this.http.delete(`/v1/board/files/${t}`)}createBoardGuestPost(t,r){return this.http.post(`/v1/board/${t}/guest-submit`,r,!1)}authenticateBoardGuestPost(t,r){return this.http.post(`/v1/board/posts/${t}/guest-auth`,r,!1)}toggleBoardPostLike(t){return this.http.post(`/v1/board/posts/${t}/like`,{})}acceptBoardPost(t){return this.http.post(`/v1/board/posts/${t}/accept`,{})}rateBoardPost(t,r){return this.http.post(`/v1/board/posts/${t}/rating`,r)}rateBoardComment(t,r){return this.http.post(`/v1/board/comments/${t}/rating`,r)}listBoardTags(t={}){const r=o(t);return this.http.get(`/v1/board/tags${r?`?${r}`:""}`,!1)}setBoardPostTags(t,r){return this.http.put(`/v1/board/posts/${t}/tags`,r)}reportBoardPost(t,r){return this.http.post(`/v1/board/posts/${t}/report`,r)}reportBoardComment(t,r){return this.http.post(`/v1/board/comments/${t}/report`,r)}listBoardReports(t={}){const r=o(t);return this.http.get(`/v1/board/admin/reports${r?`?${r}`:""}`)}updateBoardReport(t,r){return this.http.patch(`/v1/board/admin/reports/${t}`,r)}markBoardPostRead(t){return this.http.post(`/v1/board/posts/${t}/read`,{})}listBoardMentions(t={}){const r=o(t);return this.http.get(`/v1/board/mentions${r?`?${r}`:""}`)}markBoardMentionRead(t){return this.http.patch(`/v1/board/mentions/${t}/read`,{})}}}export{a as BoardMixin};
1
+ import{buildQuery as o}from"../../../client/utils.js";function a(e){return class extends e{listBoardCategories(t={}){const r=o(t);return this.http.get(`/v1/board/categories${r?`?${r}`:""}`,!1)}getBoardCategory(t){return this.http.get(`/v1/board/categories/${t}`,!1)}createBoardCategory(t){return this.http.post("/v1/board/categories",t)}updateBoardCategory(t,r){return this.http.put(`/v1/board/categories/${t}`,r)}deleteBoardCategory(t){return this.http.delete(`/v1/board/categories/${t}`)}listBoardPosts(t,r={}){const n=o(r);return this.http.get(`/v1/board/${t}/list${n?`?${n}`:""}`)}getBoardPost(t){return this.http.get(`/v1/board/posts/${t}`)}createBoardPost(t,r){return this.http.post(`/v1/board/${t}/submit`,r)}updateBoardPost(t,r){return this.http.patch(`/v1/board/posts/${t}`,r)}expireBoardPost(t){return this.http.post(`/v1/board/posts/${t}/expire`,{})}deleteBoardPost(t){return this.http.delete(`/v1/board/posts/${t}`)}listBoardComments(t,r={}){const n=o(r);return this.http.get(`/v1/board/posts/${t}/comments${n?`?${n}`:""}`,!1)}createBoardComment(t,r){return this.http.post(`/v1/board/posts/${t}/comments/submit`,r)}updateBoardComment(t,r){return this.http.put(`/v1/board/comments/${t}`,r)}deleteBoardComment(t){return this.http.delete(`/v1/board/comments/${t}`)}listBoardFiles(t){return this.http.get(`/v1/board/posts/${t}/files`,!1)}async uploadBoardFile(t,r){const n=new FormData;return n.append("file",r,r instanceof File?r.name:"upload"),this.requestForm("POST",`/v1/board/posts/${t}/files`,n)}boardFileUrl(t){return`${this.baseUrl}/v1/board/files/${t}`}deleteBoardFile(t){return this.http.delete(`/v1/board/files/${t}`)}createBoardGuestPost(t,r){return this.http.post(`/v1/board/${t}/guest-submit`,r,!1)}authenticateBoardGuestPost(t,r){return this.http.post(`/v1/board/posts/${t}/guest-auth`,r,!1)}toggleBoardPostLike(t){return this.http.post(`/v1/board/posts/${t}/like`,{})}acceptBoardPost(t){return this.http.post(`/v1/board/posts/${t}/accept`,{})}rateBoardPost(t,r){return this.http.post(`/v1/board/posts/${t}/rating`,r)}rateBoardComment(t,r){return this.http.post(`/v1/board/comments/${t}/rating`,r)}listBoardTags(t={}){const r=o(t);return this.http.get(`/v1/board/tags${r?`?${r}`:""}`,!1)}setBoardPostTags(t,r){return this.http.put(`/v1/board/posts/${t}/tags`,r)}reportBoardPost(t,r){return this.http.post(`/v1/board/posts/${t}/report`,r)}reportBoardComment(t,r){return this.http.post(`/v1/board/comments/${t}/report`,r)}listBoardReports(t={}){const r=o(t);return this.http.get(`/v1/board/admin/reports${r?`?${r}`:""}`)}updateBoardReport(t,r){return this.http.patch(`/v1/board/admin/reports/${t}`,r)}markBoardPostRead(t){return this.http.post(`/v1/board/posts/${t}/read`,{})}listBoardMentions(t={}){const r=o(t);return this.http.get(`/v1/board/mentions${r?`?${r}`:""}`)}markBoardMentionRead(t){return this.http.patch(`/v1/board/mentions/${t}/read`,{})}}}export{a as BoardMixin};
2
2
  //# sourceMappingURL=board.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/mixins/app/routes/board.ts"],
4
- "sourcesContent": ["import { buildQuery } from \"../../../client/utils.js\";\nimport type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../../client/base.js\";\n\nexport function BoardMixin<TBase extends GConstructor<EntityServerClientBase>>(\n Base: TBase,\n) {\n return class BoardMixinClass extends Base {\n listBoardCategories<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/categories${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n getBoardCategory<T = unknown>(seq: number): Promise<T> {\n return this.http.get(\n `/v1/board/categories/${seq}`,\n false,\n );\n }\n\n createBoardCategory<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\"/v1/board/categories\", body);\n }\n\n updateBoardCategory<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/categories/${seq}`, body);\n }\n\n deleteBoardCategory<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/categories/${seq}`);\n }\n\n listBoardPosts<T = unknown>(\n category: string,\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(`/v1/board/${category}/list${qs ? `?${qs}` : \"\"}`);\n }\n\n getBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.get(`/v1/board/posts/${seq}`);\n }\n\n createBoardPost<T = unknown>(\n category: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/${category}/submit`,\n body,\n );\n }\n\n updateBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/posts/${seq}`, body);\n }\n\n deleteBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/posts/${seq}`);\n }\n\n listBoardComments<T = unknown>(\n postSeq: number,\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/posts/${postSeq}/comments${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n createBoardComment<T = unknown>(\n postSeq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${postSeq}/comments/submit`,\n body,\n );\n }\n\n updateBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/comments/${seq}`, body);\n }\n\n deleteBoardComment<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/comments/${seq}`);\n }\n\n listBoardFiles<T = unknown>(postSeq: number): Promise<T> {\n return this.http.get(\n `/v1/board/posts/${postSeq}/files`,\n false,\n );\n }\n\n async uploadBoardFile<T = unknown>(\n postSeq: number,\n file: File | Blob,\n ): Promise<T> {\n const form = new FormData();\n form.append(\n \"file\",\n file,\n file instanceof File ? file.name : \"upload\",\n );\n return this.requestForm(\n \"POST\",\n `/v1/board/posts/${postSeq}/files`,\n form,\n );\n }\n\n boardFileUrl(uuid: string): string {\n return `${this.baseUrl}/v1/board/files/${uuid}`;\n }\n\n deleteBoardFile<T = unknown>(uuid: string): Promise<T> {\n return this.http.delete(`/v1/board/files/${uuid}`);\n }\n\n createBoardGuestPost<T = unknown>(\n category: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/${category}/guest-submit`,\n body,\n false,\n );\n }\n\n authenticateBoardGuestPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/guest-auth`,\n body,\n false,\n );\n }\n\n toggleBoardPostLike<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/like`, {});\n }\n\n acceptBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/accept`,\n {},\n );\n }\n\n rateBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/rating`,\n body,\n );\n }\n\n rateBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/comments/${seq}/rating`,\n body,\n );\n }\n\n listBoardTags<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/tags${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n setBoardPostTags<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/posts/${seq}/tags`, body);\n }\n\n reportBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/report`,\n body,\n );\n }\n\n reportBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/comments/${seq}/report`,\n body,\n );\n }\n\n listBoardReports<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/admin/reports${qs ? `?${qs}` : \"\"}`,\n );\n }\n\n updateBoardReport<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.patch(\n `/v1/board/admin/reports/${seq}`,\n body,\n );\n }\n\n markBoardPostRead<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/read`, {});\n }\n\n listBoardMentions<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/mentions${qs ? `?${qs}` : \"\"}`,\n );\n }\n\n markBoardMentionRead<T = unknown>(seq: number): Promise<T> {\n return this.http.patch(\n `/v1/board/mentions/${seq}/read`,\n {},\n );\n }\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { buildQuery } from \"../../../client/utils.js\";\nimport type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../../client/base.js\";\n\nexport function BoardMixin<TBase extends GConstructor<EntityServerClientBase>>(\n Base: TBase,\n) {\n return class BoardMixinClass extends Base {\n listBoardCategories<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/categories${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n getBoardCategory<T = unknown>(seq: number): Promise<T> {\n return this.http.get(`/v1/board/categories/${seq}`, false);\n }\n\n createBoardCategory<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\"/v1/board/categories\", body);\n }\n\n updateBoardCategory<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/categories/${seq}`, body);\n }\n\n deleteBoardCategory<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/categories/${seq}`);\n }\n\n listBoardPosts<T = unknown>(\n category: string,\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/${category}/list${qs ? `?${qs}` : \"\"}`,\n );\n }\n\n getBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.get(`/v1/board/posts/${seq}`);\n }\n\n createBoardPost<T = unknown>(\n category: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/${category}/submit`, body);\n }\n\n updateBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.patch(`/v1/board/posts/${seq}`, body);\n }\n\n expireBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/expire`, {});\n }\n\n deleteBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/posts/${seq}`);\n }\n\n listBoardComments<T = unknown>(\n postSeq: number,\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/posts/${postSeq}/comments${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n createBoardComment<T = unknown>(\n postSeq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${postSeq}/comments/submit`,\n body,\n );\n }\n\n updateBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/comments/${seq}`, body);\n }\n\n deleteBoardComment<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/comments/${seq}`);\n }\n\n listBoardFiles<T = unknown>(postSeq: number): Promise<T> {\n return this.http.get(`/v1/board/posts/${postSeq}/files`, false);\n }\n\n async uploadBoardFile<T = unknown>(\n postSeq: number,\n file: File | Blob,\n ): Promise<T> {\n const form = new FormData();\n form.append(\n \"file\",\n file,\n file instanceof File ? file.name : \"upload\",\n );\n return this.requestForm(\n \"POST\",\n `/v1/board/posts/${postSeq}/files`,\n form,\n );\n }\n\n boardFileUrl(uuid: string): string {\n return `${this.baseUrl}/v1/board/files/${uuid}`;\n }\n\n deleteBoardFile<T = unknown>(uuid: string): Promise<T> {\n return this.http.delete(`/v1/board/files/${uuid}`);\n }\n\n createBoardGuestPost<T = unknown>(\n category: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/${category}/guest-submit`,\n body,\n false,\n );\n }\n\n authenticateBoardGuestPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/guest-auth`,\n body,\n false,\n );\n }\n\n toggleBoardPostLike<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/like`, {});\n }\n\n acceptBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/accept`, {});\n }\n\n rateBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/rating`, body);\n }\n\n rateBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/comments/${seq}/rating`, body);\n }\n\n listBoardTags<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(`/v1/board/tags${qs ? `?${qs}` : \"\"}`, false);\n }\n\n setBoardPostTags<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/posts/${seq}/tags`, body);\n }\n\n reportBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/report`, body);\n }\n\n reportBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/comments/${seq}/report`, body);\n }\n\n listBoardReports<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/admin/reports${qs ? `?${qs}` : \"\"}`,\n );\n }\n\n updateBoardReport<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.patch(`/v1/board/admin/reports/${seq}`, body);\n }\n\n markBoardPostRead<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/read`, {});\n }\n\n listBoardMentions<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(`/v1/board/mentions${qs ? `?${qs}` : \"\"}`);\n }\n\n markBoardMentionRead<T = unknown>(seq: number): Promise<T> {\n return this.http.patch(`/v1/board/mentions/${seq}/read`, {});\n }\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["buildQuery", "BoardMixin", "Base", "query", "qs", "seq", "body", "category", "postSeq", "file", "form", "uuid"]
7
7
  }
@@ -18,6 +18,7 @@ export declare function EmailVerifyMixin<TBase extends GConstructor<EntityServer
18
18
  csrfRefresher: (() => Promise<void>) | null;
19
19
  requestAbortControllers: Map<string, AbortController>;
20
20
  activeTxId: string | null;
21
+ initialHealthFired: boolean;
21
22
  keepSession: boolean;
22
23
  refreshBuffer: number;
23
24
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -40,6 +41,7 @@ export declare function EmailVerifyMixin<TBase extends GConstructor<EntityServer
40
41
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
41
42
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
42
43
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
44
+ fireInitialHealth(): void;
43
45
  setToken(token: string): void;
44
46
  setAccessTokenFromResponse(token: string): void;
45
47
  syncRealtimeWithToken(): void;
@@ -19,6 +19,7 @@ export declare function OAuthMixin<TBase extends GConstructor<EntityServerClient
19
19
  csrfRefresher: (() => Promise<void>) | null;
20
20
  requestAbortControllers: Map<string, AbortController>;
21
21
  activeTxId: string | null;
22
+ initialHealthFired: boolean;
22
23
  keepSession: boolean;
23
24
  refreshBuffer: number;
24
25
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -41,6 +42,7 @@ export declare function OAuthMixin<TBase extends GConstructor<EntityServerClient
41
42
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
42
43
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
43
44
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
45
+ fireInitialHealth(): void;
44
46
  setToken(token: string): void;
45
47
  setAccessTokenFromResponse(token: string): void;
46
48
  syncRealtimeWithToken(): void;
@@ -18,6 +18,7 @@ export declare function PasswordResetMixin<TBase extends GConstructor<EntityServ
18
18
  csrfRefresher: (() => Promise<void>) | null;
19
19
  requestAbortControllers: Map<string, AbortController>;
20
20
  activeTxId: string | null;
21
+ initialHealthFired: boolean;
21
22
  keepSession: boolean;
22
23
  refreshBuffer: number;
23
24
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -40,6 +41,7 @@ export declare function PasswordResetMixin<TBase extends GConstructor<EntityServ
40
41
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
41
42
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
42
43
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
44
+ fireInitialHealth(): void;
43
45
  setToken(token: string): void;
44
46
  setAccessTokenFromResponse(token: string): void;
45
47
  syncRealtimeWithToken(): void;
@@ -20,6 +20,7 @@ export declare function TwoFactorMixin<TBase extends GConstructor<EntityServerCl
20
20
  csrfRefresher: (() => Promise<void>) | null;
21
21
  requestAbortControllers: Map<string, AbortController>;
22
22
  activeTxId: string | null;
23
+ initialHealthFired: boolean;
23
24
  keepSession: boolean;
24
25
  refreshBuffer: number;
25
26
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -42,6 +43,7 @@ export declare function TwoFactorMixin<TBase extends GConstructor<EntityServerCl
42
43
  realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
43
44
  realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
44
45
  configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
46
+ fireInitialHealth(): void;
45
47
  setToken(token: string): void;
46
48
  setAccessTokenFromResponse(token: string): void;
47
49
  syncRealtimeWithToken(): void;
@@ -64,6 +64,7 @@ export declare function AdminMixin<TBase extends GConstructor<EntityServerClient
64
64
  csrfRefresher: (() => Promise<void>) | null;
65
65
  requestAbortControllers: Map<string, AbortController>;
66
66
  activeTxId: string | null;
67
+ initialHealthFired: boolean;
67
68
  keepSession: boolean;
68
69
  refreshBuffer: number;
69
70
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -86,6 +87,7 @@ export declare function AdminMixin<TBase extends GConstructor<EntityServerClient
86
87
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
87
88
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
88
89
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
90
+ fireInitialHealth(): void;
89
91
  setToken(token: string): void;
90
92
  setAccessTokenFromResponse(token: string): void;
91
93
  syncRealtimeWithToken(): void;
@@ -100,6 +100,7 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
100
100
  csrfCookieName: string;
101
101
  requestAbortControllers: Map<string, AbortController>;
102
102
  activeTxId: string | null;
103
+ initialHealthFired: boolean;
103
104
  keepSession: boolean;
104
105
  refreshBuffer: number;
105
106
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -122,6 +123,7 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
122
123
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
123
124
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
124
125
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
126
+ fireInitialHealth(): void;
125
127
  setToken(token: string): void;
126
128
  syncRealtimeWithToken(): void;
127
129
  setAnonymousPacketToken(token: string): void;
@@ -1,2 +1,2 @@
1
- import{entityRequest as u}from"../../client/request.js";function h(o){return o.ok===!0&&o.requires_2fa!==!0&&typeof o.data=="object"&&o.data!==null&&"access_token"in o.data}function d(o){return class extends o{authBootstrapPromise=null;authBootstrapToken="";authBootstrapAnonymousCompleted=!1;setAccessTokenFromResponse(e){super.setAccessTokenFromResponse(e),this.authBootstrapToken=e,this.authBootstrapAnonymousCompleted=!1}csrfRefresher=()=>this.checkHealth(this.keepSession).then(()=>{});async checkHealth(e=!1){try{const t=this.token,s={};e&&(s["X-Session-Bootstrap"]="1");const i=await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include",headers:s}),r=await i.json(),n=i.headers.get("X-Access-Token");n&&(this.token=n,e&&n!==t&&this.onTokenRefreshed?.(n,0));const a=this.readCookie("anon_token");return r.packet_encryption===!0&&a&&(this.anonymousPacketToken=a,this.encryptRequests=!0),this.applyCsrfHealth(),this.onHealthChange?.(!0),e&&r.authenticated===!1&&t&&(this.disconnectRealtime("session_expired"),this.onSessionExpired?.(new Error("Session expired"))),r}catch(t){throw this.onHealthChange?.(!1),t}}readCookie(e){if(typeof document>"u")return null;const t=document.cookie.split(";").map(s=>s.trim()).find(s=>s.startsWith(`${e}=`));if(!t)return null;try{return decodeURIComponent(t.slice(e.length+1))}catch{return t.slice(e.length+1)}}async ensurePublicAuthBootstrap(){if(typeof document>"u"||this.apiKey&&this.hmacSecret)return;const e=!!this.anonymousPacketToken||!!this.readCookie("anon_token"),t=!!this.readCookie(this.csrfCookieName);e&&t&&this.csrfEnabled||await this.checkHealth(!1)}async ensureAuthenticatedRequestBootstrap(){if(!(typeof document>"u")&&!(this.apiKey&&this.hmacSecret)){if(this.token){if(this.authBootstrapToken===this.token)return}else if(this.authBootstrapAnonymousCompleted)return;return this.authBootstrapPromise?this.authBootstrapPromise:(this.authBootstrapPromise=this.checkHealth(!0).then(()=>{this.token?this.authBootstrapToken=this.token:this.authBootstrapAnonymousCompleted=!0}).finally(()=>{this.authBootstrapPromise=null}),this.authBootstrapPromise)}}async prepareRequest(e){await super.prepareRequest(e),e&&await this.ensureAuthenticatedRequestBootstrap()}async login(e,t){await this.ensurePublicAuthBootstrap();const s=await u(this.reqOpts,"POST","/v1/auth/login",{email:e,passwd:t},!1,{},{requireOkShape:!1,allowStatuses:[403]});return h(s)&&(this.token=s.data.access_token,this.applyCsrfHealth(),this.keepSession&&this.healthTickTimer===null&&this.startHealthTick()),s}async tokenRefresh(){const e=await this.request("POST","/v1/auth/token_refresh",void 0,!1);return this.token=e.data.access_token,this.applyCsrfHealth(),e.data}async refreshToken(e){if(!e)return this.tokenRefresh();const t=await this.request("POST","/v1/auth/refresh",{refresh_token:e},!1);return this.token=t.data.access_token,this.applyCsrfHealth(),t.data}async logout(e){this.stopKeepSession(),this.stopHealthTick(),this.disconnectRealtime("logout");const t=await this.request("POST","/v1/auth/logout",e?{refresh_token:e}:void 0,!1);return this.token="",this.applyCsrfHealth(),t}me(){return this.request("GET","/v1/auth/me")}withdraw(e){return this.request("POST","/v1/auth/withdraw",e?{passwd:e}:{})}}}export{d as AuthMixin,h as isAuthLoginSuccessResponse};
1
+ import{entityRequest as u}from"../../client/request.js";function c(o){return o.ok===!0&&o.requires_2fa!==!0&&typeof o.data=="object"&&o.data!==null&&"access_token"in o.data}function f(o){return class extends o{authBootstrapPromise=null;authBootstrapToken="";authBootstrapAnonymousCompleted=!1;setAccessTokenFromResponse(e){super.setAccessTokenFromResponse(e),this.authBootstrapToken=e,this.authBootstrapAnonymousCompleted=!1}csrfRefresher=()=>this.checkHealth(this.keepSession).then(()=>{});async checkHealth(e=!1){try{const t=this.token,s={};e&&(s["X-Session-Bootstrap"]="1");const r=await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include",headers:s}),i=await r.json(),n=r.headers.get("X-Access-Token");n&&(this.token=n,e&&n!==t&&this.onTokenRefreshed?.(n,0));const h=r.headers.get("X-Packet-Encryption")==="1"||i.packet_encryption===!0,a=this.readCookie("anon_token");return h&&a&&(this.anonymousPacketToken=a,this.encryptRequests=!0),this.applyCsrfHealth(),this.onHealthChange?.(!0),e&&i.authenticated===!1&&t&&(this.disconnectRealtime("session_expired"),this.onSessionExpired?.(new Error("Session expired"))),i}catch(t){throw this.onHealthChange?.(!1),t}}readCookie(e){if(typeof document>"u")return null;const t=document.cookie.split(";").map(s=>s.trim()).find(s=>s.startsWith(`${e}=`));if(!t)return null;try{return decodeURIComponent(t.slice(e.length+1))}catch{return t.slice(e.length+1)}}async ensurePublicAuthBootstrap(){if(typeof document>"u"||this.apiKey&&this.hmacSecret)return;const e=!!this.anonymousPacketToken||!!this.readCookie("anon_token"),t=!!this.readCookie(this.csrfCookieName);e&&t&&this.csrfEnabled||await this.checkHealth(!1)}async ensureAuthenticatedRequestBootstrap(){if(!(typeof document>"u")&&!(this.apiKey&&this.hmacSecret)){if(this.token){if(this.authBootstrapToken===this.token)return}else if(this.authBootstrapAnonymousCompleted)return;return this.authBootstrapPromise?this.authBootstrapPromise:(this.authBootstrapPromise=this.checkHealth(!0).then(()=>{this.token?this.authBootstrapToken=this.token:this.authBootstrapAnonymousCompleted=!0}).finally(()=>{this.authBootstrapPromise=null}),this.authBootstrapPromise)}}async prepareRequest(e){await super.prepareRequest(e),e&&await this.ensureAuthenticatedRequestBootstrap()}async login(e,t){await this.ensurePublicAuthBootstrap();const s=await u(this.reqOpts,"POST","/v1/auth/login",{email:e,passwd:t},!1,{},{requireOkShape:!1,allowStatuses:[403]});return c(s)&&(this.token=s.data.access_token,this.applyCsrfHealth(),this.keepSession&&this.healthTickTimer===null&&this.startHealthTick()),s}async tokenRefresh(){const e=await this.request("POST","/v1/auth/token_refresh",void 0,!1);return this.token=e.data.access_token,this.applyCsrfHealth(),e.data}async refreshToken(e){if(!e)return this.tokenRefresh();const t=await this.request("POST","/v1/auth/refresh",{refresh_token:e},!1);return this.token=t.data.access_token,this.applyCsrfHealth(),t.data}async logout(e){this.stopKeepSession(),this.stopHealthTick(),this.disconnectRealtime("logout");const t=await this.request("POST","/v1/auth/logout",e?{refresh_token:e}:void 0,!1);return this.token="",this.applyCsrfHealth(),t}me(){return this.request("GET","/v1/auth/me")}withdraw(e){return this.request("POST","/v1/auth/withdraw",e?{passwd:e}:{})}}}export{f as AuthMixin,c as isAuthLoginSuccessResponse};
2
2
  //# sourceMappingURL=auth.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mixins/server/auth.ts"],
4
- "sourcesContent": ["import type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../client/base.js\";\nimport { entityRequest } from \"../../client/request.js\";\n\nexport interface AuthLoginSuccessData {\n access_token: string;\n refresh_token: string;\n expires_in: number;\n force_password_change?: boolean;\n password_expired?: boolean;\n password_expires_in_days?: number;\n}\n\nexport interface AuthLoginSuccessResponse {\n ok: true;\n data: AuthLoginSuccessData;\n requires_2fa?: false;\n}\n\nexport interface AuthLoginRequiresTwoFactorResponse {\n ok: true;\n requires_2fa: true;\n data: {\n two_factor_token: string;\n expires_in: number;\n };\n}\n\nexport interface AuthLoginSetupRequiredResponse {\n ok: false;\n error: \"2fa_setup_required\";\n message: string;\n data: {\n setup_token: string;\n expires_in: number;\n };\n}\n\nexport type AuthLoginResponse =\n | AuthLoginSuccessResponse\n | AuthLoginRequiresTwoFactorResponse\n | AuthLoginSetupRequiredResponse;\n\nexport function isAuthLoginSuccessResponse(\n response: AuthLoginResponse,\n): response is AuthLoginSuccessResponse {\n return (\n response.ok === true &&\n response.requires_2fa !== true &&\n typeof response.data === \"object\" &&\n response.data !== null &&\n \"access_token\" in response.data\n );\n}\n\nexport function AuthMixin<TBase extends GConstructor<EntityServerClientBase>>(\n Base: TBase,\n) {\n return class AuthMixinClass extends Base {\n authBootstrapPromise: Promise<void> | null = null;\n authBootstrapToken = \"\";\n authBootstrapAnonymousCompleted = false;\n\n /** \uC751\uB2F5 \uD5E4\uB354 access token \uAC31\uC2E0 \uC2DC bootstrap \uAE30\uC900 \uD1A0\uD070\uB3C4 \uD568\uAED8 \uB9DE\uCD98\uB2E4. */\n override setAccessTokenFromResponse(token: string): void {\n super.setAccessTokenFromResponse(token);\n this.authBootstrapToken = token;\n this.authBootstrapAnonymousCompleted = false;\n }\n\n // health tick\uC774 \uCF1C\uC838 \uC788\uC73C\uBA74 keepSession \uC5EC\uBD80\uC5D0 \uB530\uB77C \uC138\uC158 \uBD80\uD2B8\uC2A4\uD2B8\uB7A9\uAE4C\uC9C0 \uD568\uAED8 \uCC98\uB9AC\uD569\uB2C8\uB2E4.\n csrfRefresher = (): Promise<void> =>\n this.checkHealth(this.keepSession).then(() => {});\n\n // \u2500\u2500\u2500 \uC778\uC99D \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * \uC11C\uBC84 \uD5EC\uC2A4 \uCCB4\uD06C\uB97C \uC218\uD589\uD558\uACE0 \uD328\uD0B7 \uC554\uD638\uD654 \uD65C\uC131 \uC5EC\uBD80\uB97C \uC790\uB3D9\uC73C\uB85C \uAC10\uC9C0\uD569\uB2C8\uB2E4.\n *\n * \uC11C\uBC84\uAC00 `packet_encryption: true`\uB97C \uC751\uB2F5\uD558\uBA74 \uC774\uD6C4 \uBAA8\uB4E0 \uC694\uCCAD\uC5D0 \uC554\uD638\uD654\uAC00 \uC790\uB3D9 \uC801\uC6A9\uB429\uB2C8\uB2E4.\n *\n * ```ts\n * await client.checkHealth();\n * await client.login(email, password);\n * ```\n */\n async checkHealth(bootstrapAuth = false): Promise<{\n status: string;\n authenticated?: boolean;\n packet_encryption?: boolean;\n }> {\n try {\n const previousToken = this.token;\n const headers: Record<string, string> = {};\n if (bootstrapAuth) {\n headers[\"X-Session-Bootstrap\"] = \"1\";\n }\n\n const res = await fetch(`${this.baseUrl}/v1/health`, {\n signal: AbortSignal.timeout(3000),\n credentials: \"include\",\n headers,\n });\n const data = (await res.json()) as {\n status: string;\n authenticated?: boolean;\n packet_encryption?: boolean;\n };\n\n const accessToken = res.headers.get(\"X-Access-Token\");\n if (accessToken) {\n this.token = accessToken;\n if (bootstrapAuth && accessToken !== previousToken) {\n this.onTokenRefreshed?.(accessToken, 0);\n }\n }\n\n // \uD328\uD0B7 \uC554\uD638\uD654\uB294 health \uC751\uB2F5\uC774 \uBA85\uC2DC\uC801\uC73C\uB85C \uD65C\uC131\uC774\uB77C\uACE0 \uC54C\uB824\uC904 \uB54C\uB9CC \uC790\uB3D9 \uD65C\uC131\uD654\uD55C\uB2E4.\n const anonToken = this.readCookie(\"anon_token\");\n if (data.packet_encryption === true && anonToken) {\n this.anonymousPacketToken = anonToken;\n this.encryptRequests = true;\n }\n\n this.applyCsrfHealth();\n this.onHealthChange?.(true);\n if (\n bootstrapAuth &&\n data.authenticated === false &&\n previousToken\n ) {\n this.disconnectRealtime(\"session_expired\");\n this.onSessionExpired?.(new Error(\"Session expired\"));\n }\n return data;\n } catch (error) {\n this.onHealthChange?.(false);\n throw error;\n }\n }\n\n /** document.cookie \uB610\uB294 Node \uD658\uACBD\uC5D0\uC11C \uCFE0\uD0A4 \uAC12 \uC77D\uAE30 (SSR \uB300\uC751) */\n readCookie(name: string): string | null {\n if (typeof document === \"undefined\") return null;\n const match = document.cookie\n .split(\";\")\n .map((c) => c.trim())\n .find((c) => c.startsWith(`${name}=`));\n if (!match) return null;\n try {\n return decodeURIComponent(match.slice(name.length + 1));\n } catch {\n return match.slice(name.length + 1);\n }\n }\n\n async ensurePublicAuthBootstrap(): Promise<void> {\n if (typeof document === \"undefined\") {\n return;\n }\n\n if (this.apiKey && this.hmacSecret) {\n return;\n }\n\n const hasAnonymousPacketToken =\n !!this.anonymousPacketToken || !!this.readCookie(\"anon_token\");\n const hasCsrfCookie = !!this.readCookie(this.csrfCookieName);\n\n if (hasAnonymousPacketToken && hasCsrfCookie && this.csrfEnabled) {\n return;\n }\n\n await this.checkHealth(false);\n }\n\n // \uC778\uC99D \uC694\uCCAD \uC804\uC5D0 health \uAE30\uBC18 \uC138\uC158 \uBD80\uD2B8\uC2A4\uD2B8\uB7A9\uC744 \uD55C \uBC88 \uBCF4\uC7A5\uD569\uB2C8\uB2E4.\n async ensureAuthenticatedRequestBootstrap(): Promise<void> {\n if (typeof document === \"undefined\") {\n return;\n }\n\n if (this.apiKey && this.hmacSecret) {\n return;\n }\n\n if (this.token) {\n if (this.authBootstrapToken === this.token) {\n return;\n }\n } else if (this.authBootstrapAnonymousCompleted) {\n return;\n }\n\n if (this.authBootstrapPromise) {\n return this.authBootstrapPromise;\n }\n\n this.authBootstrapPromise = this.checkHealth(true)\n .then(() => {\n if (this.token) {\n this.authBootstrapToken = this.token;\n } else {\n this.authBootstrapAnonymousCompleted = true;\n }\n })\n .finally(() => {\n this.authBootstrapPromise = null;\n });\n\n return this.authBootstrapPromise;\n }\n\n // \uC778\uC99D \uC694\uCCAD \uC804 \uC790\uB3D9 health \uBD80\uD2B8\uC2A4\uD2B8\uB7A9\uC744 \uC218\uD589\uD569\uB2C8\uB2E4.\n override async prepareRequest(withAuth: boolean): Promise<void> {\n await super.prepareRequest(withAuth);\n if (!withAuth) {\n return;\n }\n\n await this.ensureAuthenticatedRequestBootstrap();\n }\n\n /** \uB85C\uADF8\uC778 \uC751\uB2F5\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4. \uC131\uACF5 \uC2DC\uC5D0\uB9CC `access_token`\uC744 \uB0B4\uBD80 \uC0C1\uD0DC\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4. */\n async login(\n email: string,\n password: string,\n ): Promise<AuthLoginResponse> {\n await this.ensurePublicAuthBootstrap();\n\n const response = await entityRequest<AuthLoginResponse>(\n this.reqOpts,\n \"POST\",\n \"/v1/auth/login\",\n { email, passwd: password },\n false,\n {},\n { requireOkShape: false, allowStatuses: [403] },\n );\n\n if (isAuthLoginSuccessResponse(response)) {\n this.token = response.data.access_token;\n this.applyCsrfHealth();\n if (this.keepSession && this.healthTickTimer === null) {\n this.startHealthTick();\n }\n }\n\n return response;\n }\n\n /** HttpOnly refresh cookie\uB85C Access Token\uC744 \uC7AC\uBC1C\uAE09\uBC1B\uC544 \uB0B4\uBD80 \uD1A0\uD070\uC744 \uAD50\uCCB4\uD569\uB2C8\uB2E4. */\n async tokenRefresh(): Promise<{\n access_token: string;\n refresh_token: string;\n expires_in: number;\n }> {\n const data = await this.request<{\n data: {\n access_token: string;\n refresh_token: string;\n expires_in: number;\n };\n }>(\"POST\", \"/v1/auth/token_refresh\", undefined, false);\n this.token = data.data.access_token;\n this.applyCsrfHealth();\n return data.data;\n }\n\n /** Refresh Token\uC73C\uB85C Access Token\uC744 \uC7AC\uBC1C\uAE09\uBC1B\uC544 \uB0B4\uBD80 \uD1A0\uD070\uC744 \uAD50\uCCB4\uD569\uB2C8\uB2E4. */\n async refreshToken(refreshToken?: string): Promise<{\n access_token: string;\n refresh_token?: string;\n expires_in: number;\n }> {\n if (!refreshToken) {\n return this.tokenRefresh();\n }\n\n const data = await this.request<{\n data: {\n access_token: string;\n refresh_token: string;\n expires_in: number;\n };\n }>(\n \"POST\",\n \"/v1/auth/refresh\",\n { refresh_token: refreshToken },\n false,\n );\n this.token = data.data.access_token;\n this.applyCsrfHealth();\n return data.data;\n }\n\n /**\n * \uC11C\uBC84\uC5D0 \uB85C\uADF8\uC544\uC6C3\uC744 \uC694\uCCAD\uD558\uACE0 \uB0B4\uBD80 \uD1A0\uD070\uC744 \uCD08\uAE30\uD654\uD569\uB2C8\uB2E4.\n * refresh_token\uC744 \uC11C\uBC84\uC5D0 \uC804\uB2EC\uD574 \uBB34\uD6A8\uD654\uD569\uB2C8\uB2E4.\n */\n async logout(refreshToken?: string): Promise<{ ok: boolean }> {\n this.stopKeepSession();\n this.stopHealthTick();\n this.disconnectRealtime(\"logout\");\n const data = await this.request<{ ok: boolean }>(\n \"POST\",\n \"/v1/auth/logout\",\n refreshToken ? { refresh_token: refreshToken } : undefined,\n false,\n );\n this.token = \"\";\n this.applyCsrfHealth();\n return data;\n }\n\n /** \uD604\uC7AC \uB85C\uADF8\uC778\uB41C \uC0AC\uC6A9\uC790 \uC815\uBCF4\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. */\n me<T = Record<string, unknown>>(): Promise<{ ok: boolean; data: T }> {\n return this.request(\"GET\", \"/v1/auth/me\");\n }\n\n /** \uD68C\uC6D0 \uD0C8\uD1F4\uB97C \uC694\uCCAD\uD569\uB2C8\uB2E4. */\n withdraw(passwd?: string): Promise<{ ok: boolean }> {\n return this.request(\n \"POST\",\n \"/v1/auth/withdraw\",\n passwd ? { passwd } : {},\n );\n }\n };\n}\n"],
5
- "mappings": "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",
6
- "names": ["entityRequest", "isAuthLoginSuccessResponse", "response", "AuthMixin", "Base", "token", "bootstrapAuth", "previousToken", "headers", "res", "data", "accessToken", "anonToken", "error", "name", "match", "c", "hasAnonymousPacketToken", "hasCsrfCookie", "withAuth", "email", "password", "refreshToken", "passwd"]
4
+ "sourcesContent": ["import type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../client/base.js\";\nimport { entityRequest } from \"../../client/request.js\";\n\nexport interface AuthLoginSuccessData {\n access_token: string;\n refresh_token: string;\n expires_in: number;\n force_password_change?: boolean;\n password_expired?: boolean;\n password_expires_in_days?: number;\n}\n\nexport interface AuthLoginSuccessResponse {\n ok: true;\n data: AuthLoginSuccessData;\n requires_2fa?: false;\n}\n\nexport interface AuthLoginRequiresTwoFactorResponse {\n ok: true;\n requires_2fa: true;\n data: {\n two_factor_token: string;\n expires_in: number;\n };\n}\n\nexport interface AuthLoginSetupRequiredResponse {\n ok: false;\n error: \"2fa_setup_required\";\n message: string;\n data: {\n setup_token: string;\n expires_in: number;\n };\n}\n\nexport type AuthLoginResponse =\n | AuthLoginSuccessResponse\n | AuthLoginRequiresTwoFactorResponse\n | AuthLoginSetupRequiredResponse;\n\nexport function isAuthLoginSuccessResponse(\n response: AuthLoginResponse,\n): response is AuthLoginSuccessResponse {\n return (\n response.ok === true &&\n response.requires_2fa !== true &&\n typeof response.data === \"object\" &&\n response.data !== null &&\n \"access_token\" in response.data\n );\n}\n\nexport function AuthMixin<TBase extends GConstructor<EntityServerClientBase>>(\n Base: TBase,\n) {\n return class AuthMixinClass extends Base {\n authBootstrapPromise: Promise<void> | null = null;\n authBootstrapToken = \"\";\n authBootstrapAnonymousCompleted = false;\n\n /** \uC751\uB2F5 \uD5E4\uB354 access token \uAC31\uC2E0 \uC2DC bootstrap \uAE30\uC900 \uD1A0\uD070\uB3C4 \uD568\uAED8 \uB9DE\uCD98\uB2E4. */\n override setAccessTokenFromResponse(token: string): void {\n super.setAccessTokenFromResponse(token);\n this.authBootstrapToken = token;\n this.authBootstrapAnonymousCompleted = false;\n }\n\n // health tick\uC774 \uCF1C\uC838 \uC788\uC73C\uBA74 keepSession \uC5EC\uBD80\uC5D0 \uB530\uB77C \uC138\uC158 \uBD80\uD2B8\uC2A4\uD2B8\uB7A9\uAE4C\uC9C0 \uD568\uAED8 \uCC98\uB9AC\uD569\uB2C8\uB2E4.\n csrfRefresher = (): Promise<void> =>\n this.checkHealth(this.keepSession).then(() => {});\n\n // \u2500\u2500\u2500 \uC778\uC99D \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * \uC11C\uBC84 \uD5EC\uC2A4 \uCCB4\uD06C\uB97C \uC218\uD589\uD558\uACE0 \uD328\uD0B7 \uC554\uD638\uD654 \uD65C\uC131 \uC5EC\uBD80\uB97C \uC790\uB3D9\uC73C\uB85C \uAC10\uC9C0\uD569\uB2C8\uB2E4.\n *\n * \uC11C\uBC84\uAC00 `packet_encryption: true`\uB97C \uC751\uB2F5\uD558\uBA74 \uC774\uD6C4 \uBAA8\uB4E0 \uC694\uCCAD\uC5D0 \uC554\uD638\uD654\uAC00 \uC790\uB3D9 \uC801\uC6A9\uB429\uB2C8\uB2E4.\n *\n * ```ts\n * await client.checkHealth();\n * await client.login(email, password);\n * ```\n */\n async checkHealth(bootstrapAuth = false): Promise<{\n status: string;\n authenticated?: boolean;\n packet_encryption?: boolean;\n }> {\n try {\n const previousToken = this.token;\n const headers: Record<string, string> = {};\n if (bootstrapAuth) {\n headers[\"X-Session-Bootstrap\"] = \"1\";\n }\n\n const res = await fetch(`${this.baseUrl}/v1/health`, {\n signal: AbortSignal.timeout(3000),\n credentials: \"include\",\n headers,\n });\n const data = (await res.json()) as {\n status: string;\n authenticated?: boolean;\n packet_encryption?: boolean;\n };\n\n const accessToken = res.headers.get(\"X-Access-Token\");\n if (accessToken) {\n this.token = accessToken;\n if (bootstrapAuth && accessToken !== previousToken) {\n this.onTokenRefreshed?.(accessToken, 0);\n }\n }\n\n // \uD328\uD0B7 \uC554\uD638\uD654\uB294 health \uAC00 \uBA85\uC2DC\uC801\uC73C\uB85C \uD65C\uC131\uC774\uB77C\uACE0 \uC54C\uB824\uC904 \uB54C\uB9CC \uC790\uB3D9 \uD65C\uC131\uD654\uD55C\uB2E4.\n // AS \uB294 `X-Packet-Encryption: 1` \uD5E4\uB354\uB85C, ES \uC9C1\uACB0\uC740 \uBCF8\uBB38 `packet_encryption`\uC73C\uB85C \uC54C\uB9B0\uB2E4.\n const packetEncryptionEnabled =\n res.headers.get(\"X-Packet-Encryption\") === \"1\" ||\n data.packet_encryption === true;\n const anonToken = this.readCookie(\"anon_token\");\n if (packetEncryptionEnabled && anonToken) {\n this.anonymousPacketToken = anonToken;\n this.encryptRequests = true;\n }\n\n this.applyCsrfHealth();\n this.onHealthChange?.(true);\n if (\n bootstrapAuth &&\n data.authenticated === false &&\n previousToken\n ) {\n this.disconnectRealtime(\"session_expired\");\n this.onSessionExpired?.(new Error(\"Session expired\"));\n }\n return data;\n } catch (error) {\n this.onHealthChange?.(false);\n throw error;\n }\n }\n\n /** document.cookie \uB610\uB294 Node \uD658\uACBD\uC5D0\uC11C \uCFE0\uD0A4 \uAC12 \uC77D\uAE30 (SSR \uB300\uC751) */\n readCookie(name: string): string | null {\n if (typeof document === \"undefined\") return null;\n const match = document.cookie\n .split(\";\")\n .map((c) => c.trim())\n .find((c) => c.startsWith(`${name}=`));\n if (!match) return null;\n try {\n return decodeURIComponent(match.slice(name.length + 1));\n } catch {\n return match.slice(name.length + 1);\n }\n }\n\n async ensurePublicAuthBootstrap(): Promise<void> {\n if (typeof document === \"undefined\") {\n return;\n }\n\n if (this.apiKey && this.hmacSecret) {\n return;\n }\n\n const hasAnonymousPacketToken =\n !!this.anonymousPacketToken || !!this.readCookie(\"anon_token\");\n const hasCsrfCookie = !!this.readCookie(this.csrfCookieName);\n\n if (hasAnonymousPacketToken && hasCsrfCookie && this.csrfEnabled) {\n return;\n }\n\n await this.checkHealth(false);\n }\n\n // \uC778\uC99D \uC694\uCCAD \uC804\uC5D0 health \uAE30\uBC18 \uC138\uC158 \uBD80\uD2B8\uC2A4\uD2B8\uB7A9\uC744 \uD55C \uBC88 \uBCF4\uC7A5\uD569\uB2C8\uB2E4.\n async ensureAuthenticatedRequestBootstrap(): Promise<void> {\n if (typeof document === \"undefined\") {\n return;\n }\n\n if (this.apiKey && this.hmacSecret) {\n return;\n }\n\n if (this.token) {\n if (this.authBootstrapToken === this.token) {\n return;\n }\n } else if (this.authBootstrapAnonymousCompleted) {\n return;\n }\n\n if (this.authBootstrapPromise) {\n return this.authBootstrapPromise;\n }\n\n this.authBootstrapPromise = this.checkHealth(true)\n .then(() => {\n if (this.token) {\n this.authBootstrapToken = this.token;\n } else {\n this.authBootstrapAnonymousCompleted = true;\n }\n })\n .finally(() => {\n this.authBootstrapPromise = null;\n });\n\n return this.authBootstrapPromise;\n }\n\n // \uC778\uC99D \uC694\uCCAD \uC804 \uC790\uB3D9 health \uBD80\uD2B8\uC2A4\uD2B8\uB7A9\uC744 \uC218\uD589\uD569\uB2C8\uB2E4.\n override async prepareRequest(withAuth: boolean): Promise<void> {\n await super.prepareRequest(withAuth);\n if (!withAuth) {\n return;\n }\n\n await this.ensureAuthenticatedRequestBootstrap();\n }\n\n /** \uB85C\uADF8\uC778 \uC751\uB2F5\uC744 \uBC18\uD658\uD569\uB2C8\uB2E4. \uC131\uACF5 \uC2DC\uC5D0\uB9CC `access_token`\uC744 \uB0B4\uBD80 \uC0C1\uD0DC\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4. */\n async login(\n email: string,\n password: string,\n ): Promise<AuthLoginResponse> {\n await this.ensurePublicAuthBootstrap();\n\n const response = await entityRequest<AuthLoginResponse>(\n this.reqOpts,\n \"POST\",\n \"/v1/auth/login\",\n { email, passwd: password },\n false,\n {},\n { requireOkShape: false, allowStatuses: [403] },\n );\n\n if (isAuthLoginSuccessResponse(response)) {\n this.token = response.data.access_token;\n this.applyCsrfHealth();\n if (this.keepSession && this.healthTickTimer === null) {\n this.startHealthTick();\n }\n }\n\n return response;\n }\n\n /** HttpOnly refresh cookie\uB85C Access Token\uC744 \uC7AC\uBC1C\uAE09\uBC1B\uC544 \uB0B4\uBD80 \uD1A0\uD070\uC744 \uAD50\uCCB4\uD569\uB2C8\uB2E4. */\n async tokenRefresh(): Promise<{\n access_token: string;\n refresh_token: string;\n expires_in: number;\n }> {\n const data = await this.request<{\n data: {\n access_token: string;\n refresh_token: string;\n expires_in: number;\n };\n }>(\"POST\", \"/v1/auth/token_refresh\", undefined, false);\n this.token = data.data.access_token;\n this.applyCsrfHealth();\n return data.data;\n }\n\n /** Refresh Token\uC73C\uB85C Access Token\uC744 \uC7AC\uBC1C\uAE09\uBC1B\uC544 \uB0B4\uBD80 \uD1A0\uD070\uC744 \uAD50\uCCB4\uD569\uB2C8\uB2E4. */\n async refreshToken(refreshToken?: string): Promise<{\n access_token: string;\n refresh_token?: string;\n expires_in: number;\n }> {\n if (!refreshToken) {\n return this.tokenRefresh();\n }\n\n const data = await this.request<{\n data: {\n access_token: string;\n refresh_token: string;\n expires_in: number;\n };\n }>(\n \"POST\",\n \"/v1/auth/refresh\",\n { refresh_token: refreshToken },\n false,\n );\n this.token = data.data.access_token;\n this.applyCsrfHealth();\n return data.data;\n }\n\n /**\n * \uC11C\uBC84\uC5D0 \uB85C\uADF8\uC544\uC6C3\uC744 \uC694\uCCAD\uD558\uACE0 \uB0B4\uBD80 \uD1A0\uD070\uC744 \uCD08\uAE30\uD654\uD569\uB2C8\uB2E4.\n * refresh_token\uC744 \uC11C\uBC84\uC5D0 \uC804\uB2EC\uD574 \uBB34\uD6A8\uD654\uD569\uB2C8\uB2E4.\n */\n async logout(refreshToken?: string): Promise<{ ok: boolean }> {\n this.stopKeepSession();\n this.stopHealthTick();\n this.disconnectRealtime(\"logout\");\n const data = await this.request<{ ok: boolean }>(\n \"POST\",\n \"/v1/auth/logout\",\n refreshToken ? { refresh_token: refreshToken } : undefined,\n false,\n );\n this.token = \"\";\n this.applyCsrfHealth();\n return data;\n }\n\n /** \uD604\uC7AC \uB85C\uADF8\uC778\uB41C \uC0AC\uC6A9\uC790 \uC815\uBCF4\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. */\n me<T = Record<string, unknown>>(): Promise<{ ok: boolean; data: T }> {\n return this.request(\"GET\", \"/v1/auth/me\");\n }\n\n /** \uD68C\uC6D0 \uD0C8\uD1F4\uB97C \uC694\uCCAD\uD569\uB2C8\uB2E4. */\n withdraw(passwd?: string): Promise<{ ok: boolean }> {\n return this.request(\n \"POST\",\n \"/v1/auth/withdraw\",\n passwd ? { passwd } : {},\n );\n }\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["entityRequest", "isAuthLoginSuccessResponse", "response", "AuthMixin", "Base", "token", "bootstrapAuth", "previousToken", "headers", "res", "data", "accessToken", "packetEncryptionEnabled", "anonToken", "error", "name", "match", "c", "hasAnonymousPacketToken", "hasCsrfCookie", "withAuth", "email", "password", "refreshToken", "passwd"]
7
7
  }
@@ -106,6 +106,7 @@ export declare function EntityMixin<TBase extends GConstructor<EntityServerClien
106
106
  csrfRefresher: (() => Promise<void>) | null;
107
107
  requestAbortControllers: Map<string, AbortController>;
108
108
  activeTxId: string | null;
109
+ initialHealthFired: boolean;
109
110
  keepSession: boolean;
110
111
  refreshBuffer: number;
111
112
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -128,6 +129,7 @@ export declare function EntityMixin<TBase extends GConstructor<EntityServerClien
128
129
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
129
130
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
130
131
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
132
+ fireInitialHealth(): void;
131
133
  setToken(token: string): void;
132
134
  setAccessTokenFromResponse(token: string): void;
133
135
  syncRealtimeWithToken(): void;
@@ -104,6 +104,7 @@ export declare function FileMixin<TBase extends GConstructor<EntityServerClientB
104
104
  csrfRefresher: (() => Promise<void>) | null;
105
105
  requestAbortControllers: Map<string, AbortController>;
106
106
  activeTxId: string | null;
107
+ initialHealthFired: boolean;
107
108
  keepSession: boolean;
108
109
  refreshBuffer: number;
109
110
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -126,6 +127,7 @@ export declare function FileMixin<TBase extends GConstructor<EntityServerClientB
126
127
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
127
128
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
128
129
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
130
+ fireInitialHealth(): void;
129
131
  setToken(token: string): void;
130
132
  setAccessTokenFromResponse(token: string): void;
131
133
  syncRealtimeWithToken(): void;
@@ -62,6 +62,7 @@ export declare function PushMixin<TBase extends GConstructor<WithSubmit>>(Base:
62
62
  csrfRefresher: (() => Promise<void>) | null;
63
63
  requestAbortControllers: Map<string, AbortController>;
64
64
  activeTxId: string | null;
65
+ initialHealthFired: boolean;
65
66
  keepSession: boolean;
66
67
  refreshBuffer: number;
67
68
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -84,6 +85,7 @@ export declare function PushMixin<TBase extends GConstructor<WithSubmit>>(Base:
84
85
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
85
86
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
86
87
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
88
+ fireInitialHealth(): void;
87
89
  setToken(token: string): void;
88
90
  setAccessTokenFromResponse(token: string): void;
89
91
  syncRealtimeWithToken(): void;
@@ -26,6 +26,7 @@ export declare function SmtpMixin<TBase extends GConstructor<EntityServerClientB
26
26
  csrfRefresher: (() => Promise<void>) | null;
27
27
  requestAbortControllers: Map<string, AbortController>;
28
28
  activeTxId: string | null;
29
+ initialHealthFired: boolean;
29
30
  keepSession: boolean;
30
31
  refreshBuffer: number;
31
32
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -48,6 +49,7 @@ export declare function SmtpMixin<TBase extends GConstructor<EntityServerClientB
48
49
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
49
50
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
50
51
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
52
+ fireInitialHealth(): void;
51
53
  setToken(token: string): void;
52
54
  setAccessTokenFromResponse(token: string): void;
53
55
  syncRealtimeWithToken(): void;
@@ -19,6 +19,7 @@ export declare function TransactionMixin<TBase extends GConstructor<EntityServer
19
19
  csrfRefresher: (() => Promise<void>) | null;
20
20
  requestAbortControllers: Map<string, AbortController>;
21
21
  activeTxId: string | null;
22
+ initialHealthFired: boolean;
22
23
  keepSession: boolean;
23
24
  refreshBuffer: number;
24
25
  onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
@@ -41,6 +42,7 @@ export declare function TransactionMixin<TBase extends GConstructor<EntityServer
41
42
  realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
42
43
  realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
43
44
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
45
+ fireInitialHealth(): void;
44
46
  setToken(token: string): void;
45
47
  setAccessTokenFromResponse(token: string): void;
46
48
  syncRealtimeWithToken(): void;