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.
- package/dist/EntityAppServerApi.d.ts +33 -0
- package/dist/EntityServerApi.d.ts +16 -0
- package/dist/client/base.d.ts +11 -0
- package/dist/client/base.js +1 -1
- package/dist/client/base.js.map +3 -3
- package/dist/client/request.js +1 -1
- package/dist/client/request.js.map +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/mixins/app/plugins/alimtalk.d.ts +2 -0
- package/dist/mixins/app/plugins/friendtalk.d.ts +2 -0
- package/dist/mixins/app/plugins/holidays.d.ts +2 -0
- package/dist/mixins/app/plugins/identity.d.ts +2 -0
- package/dist/mixins/app/plugins/llm.d.ts +2 -0
- package/dist/mixins/app/plugins/ocr.d.ts +2 -0
- package/dist/mixins/app/plugins/pg.d.ts +2 -0
- package/dist/mixins/app/plugins/push.d.ts +2 -0
- package/dist/mixins/app/plugins/sms.d.ts +2 -0
- package/dist/mixins/app/plugins/taxinvoice.d.ts +2 -0
- package/dist/mixins/app/routes/account.d.ts +2 -0
- package/dist/mixins/app/routes/board.d.ts +3 -0
- package/dist/mixins/app/routes/board.js +1 -1
- package/dist/mixins/app/routes/board.js.map +2 -2
- package/dist/mixins/app/routes/email-verify.d.ts +2 -0
- package/dist/mixins/app/routes/oauth.d.ts +2 -0
- package/dist/mixins/app/routes/password-reset.d.ts +2 -0
- package/dist/mixins/app/routes/two-factor.d.ts +2 -0
- package/dist/mixins/server/admin.d.ts +2 -0
- package/dist/mixins/server/auth.d.ts +2 -0
- package/dist/mixins/server/auth.js +1 -1
- package/dist/mixins/server/auth.js.map +3 -3
- package/dist/mixins/server/entity.d.ts +2 -0
- package/dist/mixins/server/file.d.ts +2 -0
- package/dist/mixins/server/push.d.ts +2 -0
- package/dist/mixins/server/smtp.d.ts +2 -0
- package/dist/mixins/server/transaction.d.ts +2 -0
- package/dist/mixins/server/utils.d.ts +2 -0
- package/dist/react.js +1 -1
- package/dist/react.js.map +3 -3
- 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.
|
|
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(
|
|
5
|
-
"mappings": "AAAA,OAAS,cAAAA,MAAkB,2BAMpB,SAASC,EACZC,EACF,CACE,OAAO,cAA8BA,CAAK,CACtC,oBACIC,EAAiC,CAAC,EACxB,CACV,MAAMC,EAAKJ,EAAWG,CAAK,EAC3B,OAAO,KAAK,KAAK,IACb,uBAAuBC,EAAK,IAAIA,CAAE,GAAK,EAAE,GACzC,EACJ,CACJ,CAEA,iBAA8BC,EAAyB,CACnD,OAAO,KAAK,KAAK,
|
|
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": "AAAA,OAAS,cAAAA,MAAkB,2BAMpB,SAASC,EACZC,EACF,CACE,OAAO,cAA8BA,CAAK,CACtC,oBACIC,EAAiC,CAAC,EACxB,CACV,MAAMC,EAAKJ,EAAWG,CAAK,EAC3B,OAAO,KAAK,KAAK,IACb,uBAAuBC,EAAK,IAAIA,CAAE,GAAK,EAAE,GACzC,EACJ,CACJ,CAEA,iBAA8BC,EAAyB,CACnD,OAAO,KAAK,KAAK,IAAI,wBAAwBA,CAAG,GAAI,EAAK,CAC7D,CAEA,oBACIC,EACU,CACV,OAAO,KAAK,KAAK,KAAK,uBAAwBA,CAAI,CACtD,CAEA,oBACID,EACAC,EACU,CACV,OAAO,KAAK,KAAK,IAAI,wBAAwBD,CAAG,GAAIC,CAAI,CAC5D,CAEA,oBAAiCD,EAAyB,CACtD,OAAO,KAAK,KAAK,OAAO,wBAAwBA,CAAG,EAAE,CACzD,CAEA,eACIE,EACAJ,EAAiC,CAAC,EACxB,CACV,MAAMC,EAAKJ,EAAWG,CAAK,EAC3B,OAAO,KAAK,KAAK,IACb,aAAaI,CAAQ,QAAQH,EAAK,IAAIA,CAAE,GAAK,EAAE,EACnD,CACJ,CAEA,aAA0BC,EAAyB,CAC/C,OAAO,KAAK,KAAK,IAAI,mBAAmBA,CAAG,EAAE,CACjD,CAEA,gBACIE,EACAD,EACU,CACV,OAAO,KAAK,KAAK,KAAK,aAAaC,CAAQ,UAAWD,CAAI,CAC9D,CAEA,gBACID,EACAC,EACU,CACV,OAAO,KAAK,KAAK,MAAM,mBAAmBD,CAAG,GAAIC,CAAI,CACzD,CAEA,gBAA6BD,EAAyB,CAClD,OAAO,KAAK,KAAK,KAAK,mBAAmBA,CAAG,UAAW,CAAC,CAAC,CAC7D,CAEA,gBAA6BA,EAAyB,CAClD,OAAO,KAAK,KAAK,OAAO,mBAAmBA,CAAG,EAAE,CACpD,CAEA,kBACIG,EACAL,EAAiC,CAAC,EACxB,CACV,MAAMC,EAAKJ,EAAWG,CAAK,EAC3B,OAAO,KAAK,KAAK,IACb,mBAAmBK,CAAO,YAAYJ,EAAK,IAAIA,CAAE,GAAK,EAAE,GACxD,EACJ,CACJ,CAEA,mBACII,EACAF,EACU,CACV,OAAO,KAAK,KAAK,KACb,mBAAmBE,CAAO,mBAC1BF,CACJ,CACJ,CAEA,mBACID,EACAC,EACU,CACV,OAAO,KAAK,KAAK,IAAI,sBAAsBD,CAAG,GAAIC,CAAI,CAC1D,CAEA,mBAAgCD,EAAyB,CACrD,OAAO,KAAK,KAAK,OAAO,sBAAsBA,CAAG,EAAE,CACvD,CAEA,eAA4BG,EAA6B,CACrD,OAAO,KAAK,KAAK,IAAI,mBAAmBA,CAAO,SAAU,EAAK,CAClE,CAEA,MAAM,gBACFA,EACAC,EACU,CACV,MAAMC,EAAO,IAAI,SACjB,OAAAA,EAAK,OACD,OACAD,EACAA,aAAgB,KAAOA,EAAK,KAAO,QACvC,EACO,KAAK,YACR,OACA,mBAAmBD,CAAO,SAC1BE,CACJ,CACJ,CAEA,aAAaC,EAAsB,CAC/B,MAAO,GAAG,KAAK,OAAO,mBAAmBA,CAAI,EACjD,CAEA,gBAA6BA,EAA0B,CACnD,OAAO,KAAK,KAAK,OAAO,mBAAmBA,CAAI,EAAE,CACrD,CAEA,qBACIJ,EACAD,EACU,CACV,OAAO,KAAK,KAAK,KACb,aAAaC,CAAQ,gBACrBD,EACA,EACJ,CACJ,CAEA,2BACID,EACAC,EACU,CACV,OAAO,KAAK,KAAK,KACb,mBAAmBD,CAAG,cACtBC,EACA,EACJ,CACJ,CAEA,oBAAiCD,EAAyB,CACtD,OAAO,KAAK,KAAK,KAAK,mBAAmBA,CAAG,QAAS,CAAC,CAAC,CAC3D,CAEA,gBAA6BA,EAAyB,CAClD,OAAO,KAAK,KAAK,KAAK,mBAAmBA,CAAG,UAAW,CAAC,CAAC,CAC7D,CAEA,cACIA,EACAC,EACU,CACV,OAAO,KAAK,KAAK,KAAK,mBAAmBD,CAAG,UAAWC,CAAI,CAC/D,CAEA,iBACID,EACAC,EACU,CACV,OAAO,KAAK,KAAK,KAAK,sBAAsBD,CAAG,UAAWC,CAAI,CAClE,CAEA,cACIH,EAAiC,CAAC,EACxB,CACV,MAAMC,EAAKJ,EAAWG,CAAK,EAC3B,OAAO,KAAK,KAAK,IAAI,iBAAiBC,EAAK,IAAIA,CAAE,GAAK,EAAE,GAAI,EAAK,CACrE,CAEA,iBACIC,EACAC,EACU,CACV,OAAO,KAAK,KAAK,IAAI,mBAAmBD,CAAG,QAASC,CAAI,CAC5D,CAEA,gBACID,EACAC,EACU,CACV,OAAO,KAAK,KAAK,KAAK,mBAAmBD,CAAG,UAAWC,CAAI,CAC/D,CAEA,mBACID,EACAC,EACU,CACV,OAAO,KAAK,KAAK,KAAK,sBAAsBD,CAAG,UAAWC,CAAI,CAClE,CAEA,iBACIH,EAAiC,CAAC,EACxB,CACV,MAAMC,EAAKJ,EAAWG,CAAK,EAC3B,OAAO,KAAK,KAAK,IACb,0BAA0BC,EAAK,IAAIA,CAAE,GAAK,EAAE,EAChD,CACJ,CAEA,kBACIC,EACAC,EACU,CACV,OAAO,KAAK,KAAK,MAAM,2BAA2BD,CAAG,GAAIC,CAAI,CACjE,CAEA,kBAA+BD,EAAyB,CACpD,OAAO,KAAK,KAAK,KAAK,mBAAmBA,CAAG,QAAS,CAAC,CAAC,CAC3D,CAEA,kBACIF,EAAiC,CAAC,EACxB,CACV,MAAMC,EAAKJ,EAAWG,CAAK,EAC3B,OAAO,KAAK,KAAK,IAAI,qBAAqBC,EAAK,IAAIA,CAAE,GAAK,EAAE,EAAE,CAClE,CAEA,qBAAkCC,EAAyB,CACvD,OAAO,KAAK,KAAK,MAAM,sBAAsBA,CAAG,QAAS,CAAC,CAAC,CAC/D,CACJ,CACJ",
|
|
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
|
|
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": "AAIA,OAAS,iBAAAA,MAAqB,0BAyCvB,SAASC,EACZC,EACoC,CACpC,OACIA,EAAS,KAAO,IAChBA,EAAS,eAAiB,IAC1B,OAAOA,EAAS,MAAS,UACzBA,EAAS,OAAS,MAClB,iBAAkBA,EAAS,IAEnC,CAEO,SAASC,EACZC,EACF,CACE,OAAO,cAA6BA,CAAK,CACrC,qBAA6C,KAC7C,mBAAqB,GACrB,gCAAkC,GAGzB,2BAA2BC,EAAqB,CACrD,MAAM,2BAA2BA,CAAK,EACtC,KAAK,mBAAqBA,EAC1B,KAAK,gCAAkC,EAC3C,CAGA,cAAgB,IACZ,KAAK,YAAY,KAAK,WAAW,EAAE,KAAK,IAAM,CAAC,CAAC,EAcpD,MAAM,YAAYC,EAAgB,GAI/B,CACC,GAAI,CACA,MAAMC,EAAgB,KAAK,MACrBC,EAAkC,CAAC,EACrCF,IACAE,EAAQ,qBAAqB,EAAI,KAGrC,MAAMC,EAAM,MAAM,MAAM,GAAG,KAAK,OAAO,aAAc,CACjD,OAAQ,YAAY,QAAQ,GAAI,EAChC,YAAa,UACb,QAAAD,CACJ,CAAC,EACKE,EAAQ,MAAMD,EAAI,KAAK,EAMvBE,EAAcF,EAAI,QAAQ,IAAI,gBAAgB,EAChDE,IACA,KAAK,MAAQA,EACTL,GAAiBK,IAAgBJ,GACjC,KAAK,mBAAmBI,EAAa,CAAC,
|
|
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;
|