entity-client 1.0.13 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/EntityAppServerApi.d.ts +480 -0
- package/dist/EntityServerApi.d.ts +248 -7
- package/dist/client/base.d.ts +35 -4
- package/dist/client/base.js +1 -1
- package/dist/client/base.js.map +3 -3
- package/dist/client/request.d.ts +6 -1
- package/dist/client/request.js +1 -1
- package/dist/client/request.js.map +3 -3
- package/dist/hooks/useEntityClient.d.ts +4 -4
- package/dist/hooks/useEntityClient.js +1 -1
- package/dist/hooks/useEntityClient.js.map +3 -3
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/dist/mixins/app/plugins/alimtalk.d.ts +30 -0
- package/dist/mixins/app/plugins/friendtalk.d.ts +30 -0
- package/dist/mixins/app/plugins/holidays.d.ts +30 -0
- package/dist/mixins/app/plugins/identity.d.ts +30 -0
- package/dist/mixins/app/plugins/llm.d.ts +30 -0
- package/dist/mixins/app/plugins/ocr.d.ts +30 -0
- package/dist/mixins/app/plugins/pg.d.ts +30 -0
- package/dist/mixins/app/plugins/push.d.ts +30 -0
- package/dist/mixins/app/plugins/sms.d.ts +30 -0
- package/dist/mixins/app/plugins/taxinvoice.d.ts +30 -0
- package/dist/mixins/app/routes/account.d.ts +30 -0
- package/dist/mixins/app/routes/board.d.ts +30 -0
- package/dist/mixins/app/routes/board.js +1 -1
- package/dist/mixins/app/routes/board.js.map +2 -2
- package/dist/mixins/app/routes/email-verify.d.ts +30 -0
- package/dist/mixins/app/routes/oauth.d.ts +30 -0
- package/dist/mixins/app/routes/password-reset.d.ts +30 -0
- package/dist/mixins/app/routes/two-factor.d.ts +30 -0
- package/dist/mixins/server/admin.d.ts +30 -0
- package/dist/mixins/server/auth.d.ts +72 -8
- package/dist/mixins/server/auth.js +1 -1
- package/dist/mixins/server/auth.js.map +3 -3
- package/dist/mixins/server/entity.d.ts +30 -0
- package/dist/mixins/server/file.d.ts +30 -0
- package/dist/mixins/server/index.d.ts +2 -1
- package/dist/mixins/server/index.js +1 -1
- package/dist/mixins/server/index.js.map +3 -3
- package/dist/mixins/server/push.d.ts +30 -0
- package/dist/mixins/server/smtp.d.ts +30 -0
- package/dist/mixins/server/transaction.d.ts +30 -0
- package/dist/mixins/server/utils.d.ts +30 -0
- package/dist/react.js +1 -1
- package/dist/react.js.map +3 -3
- package/dist/types.d.ts +46 -11
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{buildQuery as o}from"../../../client/utils.js";function
|
|
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};
|
|
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(
|
|
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,IACb,wBAAwBA,CAAG,GAC3B,EACJ,CACJ,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,
|
|
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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",
|
|
6
6
|
"names": ["buildQuery", "BoardMixin", "Base", "query", "qs", "seq", "body", "category", "postSeq", "file", "form", "uuid"]
|
|
7
7
|
}
|
|
@@ -26,6 +26,19 @@ export declare function EmailVerifyMixin<TBase extends GConstructor<EntityServer
|
|
|
26
26
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
27
27
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
28
28
|
_healthTickPromise: Promise<unknown> | null;
|
|
29
|
+
realtimeEnabled: boolean;
|
|
30
|
+
realtimePath: string;
|
|
31
|
+
realtimeAutoConnect: boolean;
|
|
32
|
+
realtimeAutoReconnect: boolean;
|
|
33
|
+
realtimeReconnectDelayMs: number;
|
|
34
|
+
realtimeStatus: import("../../../types.js").RealtimeConnectionStatus;
|
|
35
|
+
_realtimeSocket: WebSocket | null;
|
|
36
|
+
_realtimeConnectPromise: Promise<void> | null;
|
|
37
|
+
_realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
|
|
38
|
+
_realtimeShouldReconnect: boolean;
|
|
39
|
+
_realtimeMessageListeners: Set<import("../../../types.js").RealtimeMessageListener>;
|
|
40
|
+
_realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
|
|
41
|
+
_realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
|
|
29
42
|
configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
|
|
30
43
|
setToken(token: string): void;
|
|
31
44
|
setAnonymousPacketToken(token: string): void;
|
|
@@ -33,6 +46,17 @@ export declare function EmailVerifyMixin<TBase extends GConstructor<EntityServer
|
|
|
33
46
|
setHmacSecret(secret: string): void;
|
|
34
47
|
setEncryptRequests(value: boolean): void;
|
|
35
48
|
setCsrfEnabled(enabled: boolean): void;
|
|
49
|
+
addRealtimeListener(listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
50
|
+
removeRealtimeListener(listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
51
|
+
addRealtimeStatusListener(listener: import("../../../types.js").RealtimeStatusListener): void;
|
|
52
|
+
removeRealtimeStatusListener(listener: import("../../../types.js").RealtimeStatusListener): void;
|
|
53
|
+
addRealtimeEventListener(eventName: string, listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
54
|
+
removeRealtimeEventListener(eventName: string, listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
55
|
+
connectRealtime(): Promise<void>;
|
|
56
|
+
disconnectRealtime(reason?: string): void;
|
|
57
|
+
sendRealtime(message: import("../../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
|
|
58
|
+
subscribeRealtime(subscriptions: string[]): boolean;
|
|
59
|
+
unsubscribeRealtime(subscriptions: string[]): boolean;
|
|
36
60
|
startHealthTick(intervalMs?: number): void;
|
|
37
61
|
stopHealthTick(): void;
|
|
38
62
|
_scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
|
|
@@ -41,6 +65,12 @@ export declare function EmailVerifyMixin<TBase extends GConstructor<EntityServer
|
|
|
41
65
|
}>): void;
|
|
42
66
|
_clearRefreshTimer(): void;
|
|
43
67
|
stopKeepSession(): void;
|
|
68
|
+
_applyRealtimeOptions(options?: boolean | import("../../../types.js").RealtimeClientOptions): void;
|
|
69
|
+
_buildRealtimeUrl(): string;
|
|
70
|
+
_handleRealtimeMessage(payload: unknown): void;
|
|
71
|
+
_scheduleRealtimeReconnect(reason: string): void;
|
|
72
|
+
_clearRealtimeReconnectTimer(): void;
|
|
73
|
+
_setRealtimeStatus(status: import("../../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
|
|
44
74
|
_applyCsrfHealth(): void;
|
|
45
75
|
readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
|
|
46
76
|
get _reqOpts(): import("../../../client/request.js").RequestOptions;
|
|
@@ -27,6 +27,19 @@ export declare function OAuthMixin<TBase extends GConstructor<EntityServerClient
|
|
|
27
27
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
28
28
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
29
29
|
_healthTickPromise: Promise<unknown> | null;
|
|
30
|
+
realtimeEnabled: boolean;
|
|
31
|
+
realtimePath: string;
|
|
32
|
+
realtimeAutoConnect: boolean;
|
|
33
|
+
realtimeAutoReconnect: boolean;
|
|
34
|
+
realtimeReconnectDelayMs: number;
|
|
35
|
+
realtimeStatus: import("../../../types.js").RealtimeConnectionStatus;
|
|
36
|
+
_realtimeSocket: WebSocket | null;
|
|
37
|
+
_realtimeConnectPromise: Promise<void> | null;
|
|
38
|
+
_realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
|
|
39
|
+
_realtimeShouldReconnect: boolean;
|
|
40
|
+
_realtimeMessageListeners: Set<import("../../../types.js").RealtimeMessageListener>;
|
|
41
|
+
_realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
|
|
42
|
+
_realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
|
|
30
43
|
configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
|
|
31
44
|
setToken(token: string): void;
|
|
32
45
|
setAnonymousPacketToken(token: string): void;
|
|
@@ -34,6 +47,17 @@ export declare function OAuthMixin<TBase extends GConstructor<EntityServerClient
|
|
|
34
47
|
setHmacSecret(secret: string): void;
|
|
35
48
|
setEncryptRequests(value: boolean): void;
|
|
36
49
|
setCsrfEnabled(enabled: boolean): void;
|
|
50
|
+
addRealtimeListener(listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
51
|
+
removeRealtimeListener(listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
52
|
+
addRealtimeStatusListener(listener: import("../../../types.js").RealtimeStatusListener): void;
|
|
53
|
+
removeRealtimeStatusListener(listener: import("../../../types.js").RealtimeStatusListener): void;
|
|
54
|
+
addRealtimeEventListener(eventName: string, listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
55
|
+
removeRealtimeEventListener(eventName: string, listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
56
|
+
connectRealtime(): Promise<void>;
|
|
57
|
+
disconnectRealtime(reason?: string): void;
|
|
58
|
+
sendRealtime(message: import("../../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
|
|
59
|
+
subscribeRealtime(subscriptions: string[]): boolean;
|
|
60
|
+
unsubscribeRealtime(subscriptions: string[]): boolean;
|
|
37
61
|
startHealthTick(intervalMs?: number): void;
|
|
38
62
|
stopHealthTick(): void;
|
|
39
63
|
_scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
|
|
@@ -42,6 +66,12 @@ export declare function OAuthMixin<TBase extends GConstructor<EntityServerClient
|
|
|
42
66
|
}>): void;
|
|
43
67
|
_clearRefreshTimer(): void;
|
|
44
68
|
stopKeepSession(): void;
|
|
69
|
+
_applyRealtimeOptions(options?: boolean | import("../../../types.js").RealtimeClientOptions): void;
|
|
70
|
+
_buildRealtimeUrl(): string;
|
|
71
|
+
_handleRealtimeMessage(payload: unknown): void;
|
|
72
|
+
_scheduleRealtimeReconnect(reason: string): void;
|
|
73
|
+
_clearRealtimeReconnectTimer(): void;
|
|
74
|
+
_setRealtimeStatus(status: import("../../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
|
|
45
75
|
_applyCsrfHealth(): void;
|
|
46
76
|
readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
|
|
47
77
|
get _reqOpts(): import("../../../client/request.js").RequestOptions;
|
|
@@ -26,6 +26,19 @@ export declare function PasswordResetMixin<TBase extends GConstructor<EntityServ
|
|
|
26
26
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
27
27
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
28
28
|
_healthTickPromise: Promise<unknown> | null;
|
|
29
|
+
realtimeEnabled: boolean;
|
|
30
|
+
realtimePath: string;
|
|
31
|
+
realtimeAutoConnect: boolean;
|
|
32
|
+
realtimeAutoReconnect: boolean;
|
|
33
|
+
realtimeReconnectDelayMs: number;
|
|
34
|
+
realtimeStatus: import("../../../types.js").RealtimeConnectionStatus;
|
|
35
|
+
_realtimeSocket: WebSocket | null;
|
|
36
|
+
_realtimeConnectPromise: Promise<void> | null;
|
|
37
|
+
_realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
|
|
38
|
+
_realtimeShouldReconnect: boolean;
|
|
39
|
+
_realtimeMessageListeners: Set<import("../../../types.js").RealtimeMessageListener>;
|
|
40
|
+
_realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
|
|
41
|
+
_realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
|
|
29
42
|
configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
|
|
30
43
|
setToken(token: string): void;
|
|
31
44
|
setAnonymousPacketToken(token: string): void;
|
|
@@ -33,6 +46,17 @@ export declare function PasswordResetMixin<TBase extends GConstructor<EntityServ
|
|
|
33
46
|
setHmacSecret(secret: string): void;
|
|
34
47
|
setEncryptRequests(value: boolean): void;
|
|
35
48
|
setCsrfEnabled(enabled: boolean): void;
|
|
49
|
+
addRealtimeListener(listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
50
|
+
removeRealtimeListener(listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
51
|
+
addRealtimeStatusListener(listener: import("../../../types.js").RealtimeStatusListener): void;
|
|
52
|
+
removeRealtimeStatusListener(listener: import("../../../types.js").RealtimeStatusListener): void;
|
|
53
|
+
addRealtimeEventListener(eventName: string, listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
54
|
+
removeRealtimeEventListener(eventName: string, listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
55
|
+
connectRealtime(): Promise<void>;
|
|
56
|
+
disconnectRealtime(reason?: string): void;
|
|
57
|
+
sendRealtime(message: import("../../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
|
|
58
|
+
subscribeRealtime(subscriptions: string[]): boolean;
|
|
59
|
+
unsubscribeRealtime(subscriptions: string[]): boolean;
|
|
36
60
|
startHealthTick(intervalMs?: number): void;
|
|
37
61
|
stopHealthTick(): void;
|
|
38
62
|
_scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
|
|
@@ -41,6 +65,12 @@ export declare function PasswordResetMixin<TBase extends GConstructor<EntityServ
|
|
|
41
65
|
}>): void;
|
|
42
66
|
_clearRefreshTimer(): void;
|
|
43
67
|
stopKeepSession(): void;
|
|
68
|
+
_applyRealtimeOptions(options?: boolean | import("../../../types.js").RealtimeClientOptions): void;
|
|
69
|
+
_buildRealtimeUrl(): string;
|
|
70
|
+
_handleRealtimeMessage(payload: unknown): void;
|
|
71
|
+
_scheduleRealtimeReconnect(reason: string): void;
|
|
72
|
+
_clearRealtimeReconnectTimer(): void;
|
|
73
|
+
_setRealtimeStatus(status: import("../../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
|
|
44
74
|
_applyCsrfHealth(): void;
|
|
45
75
|
readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
|
|
46
76
|
get _reqOpts(): import("../../../client/request.js").RequestOptions;
|
|
@@ -28,6 +28,19 @@ export declare function TwoFactorMixin<TBase extends GConstructor<EntityServerCl
|
|
|
28
28
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
29
29
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
30
30
|
_healthTickPromise: Promise<unknown> | null;
|
|
31
|
+
realtimeEnabled: boolean;
|
|
32
|
+
realtimePath: string;
|
|
33
|
+
realtimeAutoConnect: boolean;
|
|
34
|
+
realtimeAutoReconnect: boolean;
|
|
35
|
+
realtimeReconnectDelayMs: number;
|
|
36
|
+
realtimeStatus: import("../../../types.js").RealtimeConnectionStatus;
|
|
37
|
+
_realtimeSocket: WebSocket | null;
|
|
38
|
+
_realtimeConnectPromise: Promise<void> | null;
|
|
39
|
+
_realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
|
|
40
|
+
_realtimeShouldReconnect: boolean;
|
|
41
|
+
_realtimeMessageListeners: Set<import("../../../types.js").RealtimeMessageListener>;
|
|
42
|
+
_realtimeStatusListeners: Set<import("../../../types.js").RealtimeStatusListener>;
|
|
43
|
+
_realtimeEventListeners: Map<string, Set<import("../../../types.js").RealtimeMessageListener>>;
|
|
31
44
|
configure(options: Partial<import("../../../types.js").EntityServerClientOptions>): void;
|
|
32
45
|
setToken(token: string): void;
|
|
33
46
|
setAnonymousPacketToken(token: string): void;
|
|
@@ -35,6 +48,17 @@ export declare function TwoFactorMixin<TBase extends GConstructor<EntityServerCl
|
|
|
35
48
|
setHmacSecret(secret: string): void;
|
|
36
49
|
setEncryptRequests(value: boolean): void;
|
|
37
50
|
setCsrfEnabled(enabled: boolean): void;
|
|
51
|
+
addRealtimeListener(listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
52
|
+
removeRealtimeListener(listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
53
|
+
addRealtimeStatusListener(listener: import("../../../types.js").RealtimeStatusListener): void;
|
|
54
|
+
removeRealtimeStatusListener(listener: import("../../../types.js").RealtimeStatusListener): void;
|
|
55
|
+
addRealtimeEventListener(eventName: string, listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
56
|
+
removeRealtimeEventListener(eventName: string, listener: import("../../../types.js").RealtimeMessageListener): void;
|
|
57
|
+
connectRealtime(): Promise<void>;
|
|
58
|
+
disconnectRealtime(reason?: string): void;
|
|
59
|
+
sendRealtime(message: import("../../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
|
|
60
|
+
subscribeRealtime(subscriptions: string[]): boolean;
|
|
61
|
+
unsubscribeRealtime(subscriptions: string[]): boolean;
|
|
38
62
|
startHealthTick(intervalMs?: number): void;
|
|
39
63
|
stopHealthTick(): void;
|
|
40
64
|
_scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
|
|
@@ -43,6 +67,12 @@ export declare function TwoFactorMixin<TBase extends GConstructor<EntityServerCl
|
|
|
43
67
|
}>): void;
|
|
44
68
|
_clearRefreshTimer(): void;
|
|
45
69
|
stopKeepSession(): void;
|
|
70
|
+
_applyRealtimeOptions(options?: boolean | import("../../../types.js").RealtimeClientOptions): void;
|
|
71
|
+
_buildRealtimeUrl(): string;
|
|
72
|
+
_handleRealtimeMessage(payload: unknown): void;
|
|
73
|
+
_scheduleRealtimeReconnect(reason: string): void;
|
|
74
|
+
_clearRealtimeReconnectTimer(): void;
|
|
75
|
+
_setRealtimeStatus(status: import("../../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
|
|
46
76
|
_applyCsrfHealth(): void;
|
|
47
77
|
readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
|
|
48
78
|
get _reqOpts(): import("../../../client/request.js").RequestOptions;
|
|
@@ -72,6 +72,19 @@ export declare function AdminMixin<TBase extends GConstructor<EntityServerClient
|
|
|
72
72
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
73
73
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
74
74
|
_healthTickPromise: Promise<unknown> | null;
|
|
75
|
+
realtimeEnabled: boolean;
|
|
76
|
+
realtimePath: string;
|
|
77
|
+
realtimeAutoConnect: boolean;
|
|
78
|
+
realtimeAutoReconnect: boolean;
|
|
79
|
+
realtimeReconnectDelayMs: number;
|
|
80
|
+
realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
|
|
81
|
+
_realtimeSocket: WebSocket | null;
|
|
82
|
+
_realtimeConnectPromise: Promise<void> | null;
|
|
83
|
+
_realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
|
|
84
|
+
_realtimeShouldReconnect: boolean;
|
|
85
|
+
_realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
|
|
86
|
+
_realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
|
|
87
|
+
_realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
|
|
75
88
|
configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
|
|
76
89
|
setToken(token: string): void;
|
|
77
90
|
setAnonymousPacketToken(token: string): void;
|
|
@@ -79,6 +92,17 @@ export declare function AdminMixin<TBase extends GConstructor<EntityServerClient
|
|
|
79
92
|
setHmacSecret(secret: string): void;
|
|
80
93
|
setEncryptRequests(value: boolean): void;
|
|
81
94
|
setCsrfEnabled(enabled: boolean): void;
|
|
95
|
+
addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
|
|
96
|
+
removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
|
|
97
|
+
addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
|
|
98
|
+
removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
|
|
99
|
+
addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
|
|
100
|
+
removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
|
|
101
|
+
connectRealtime(): Promise<void>;
|
|
102
|
+
disconnectRealtime(reason?: string): void;
|
|
103
|
+
sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
|
|
104
|
+
subscribeRealtime(subscriptions: string[]): boolean;
|
|
105
|
+
unsubscribeRealtime(subscriptions: string[]): boolean;
|
|
82
106
|
startHealthTick(intervalMs?: number): void;
|
|
83
107
|
stopHealthTick(): void;
|
|
84
108
|
_scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
|
|
@@ -87,6 +111,12 @@ export declare function AdminMixin<TBase extends GConstructor<EntityServerClient
|
|
|
87
111
|
}>): void;
|
|
88
112
|
_clearRefreshTimer(): void;
|
|
89
113
|
stopKeepSession(): void;
|
|
114
|
+
_applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
|
|
115
|
+
_buildRealtimeUrl(): string;
|
|
116
|
+
_handleRealtimeMessage(payload: unknown): void;
|
|
117
|
+
_scheduleRealtimeReconnect(reason: string): void;
|
|
118
|
+
_clearRealtimeReconnectTimer(): void;
|
|
119
|
+
_setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
|
|
90
120
|
_applyCsrfHealth(): void;
|
|
91
121
|
readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
|
|
92
122
|
get _reqOpts(): import("../../client/request.js").RequestOptions;
|
|
@@ -1,4 +1,36 @@
|
|
|
1
1
|
import type { GConstructor, EntityServerClientBase } from "../../client/base.js";
|
|
2
|
+
export interface AuthLoginSuccessData {
|
|
3
|
+
access_token: string;
|
|
4
|
+
refresh_token: string;
|
|
5
|
+
expires_in: number;
|
|
6
|
+
force_password_change?: boolean;
|
|
7
|
+
password_expired?: boolean;
|
|
8
|
+
password_expires_in_days?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AuthLoginSuccessResponse {
|
|
11
|
+
ok: true;
|
|
12
|
+
data: AuthLoginSuccessData;
|
|
13
|
+
requires_2fa?: false;
|
|
14
|
+
}
|
|
15
|
+
export interface AuthLoginRequiresTwoFactorResponse {
|
|
16
|
+
ok: true;
|
|
17
|
+
requires_2fa: true;
|
|
18
|
+
data: {
|
|
19
|
+
two_factor_token: string;
|
|
20
|
+
expires_in: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export interface AuthLoginSetupRequiredResponse {
|
|
24
|
+
ok: false;
|
|
25
|
+
error: "2fa_setup_required";
|
|
26
|
+
message: string;
|
|
27
|
+
data: {
|
|
28
|
+
setup_token: string;
|
|
29
|
+
expires_in: number;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export type AuthLoginResponse = AuthLoginSuccessResponse | AuthLoginRequiresTwoFactorResponse | AuthLoginSetupRequiredResponse;
|
|
33
|
+
export declare function isAuthLoginSuccessResponse(response: AuthLoginResponse): response is AuthLoginSuccessResponse;
|
|
2
34
|
export declare function AuthMixin<TBase extends GConstructor<EntityServerClientBase>>(Base: TBase): {
|
|
3
35
|
new (...args: any[]): {
|
|
4
36
|
_csrfRefresher: () => Promise<void>;
|
|
@@ -12,30 +44,32 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
|
|
|
12
44
|
* await client.login(email, password);
|
|
13
45
|
* ```
|
|
14
46
|
*/
|
|
15
|
-
checkHealth(): Promise<{
|
|
47
|
+
checkHealth(bootstrapAuth?: boolean): Promise<{
|
|
16
48
|
status: string;
|
|
49
|
+
authenticated?: boolean;
|
|
17
50
|
}>;
|
|
18
51
|
/** document.cookie 또는 Node 환경에서 쿠키 값 읽기 (SSR 대응) */
|
|
19
52
|
_readCookie(name: string): string | null;
|
|
20
|
-
|
|
21
|
-
|
|
53
|
+
_ensurePublicAuthBootstrap(): Promise<void>;
|
|
54
|
+
/** 로그인 응답을 반환합니다. 성공 시에만 `access_token`을 내부 상태에 저장합니다. */
|
|
55
|
+
login(email: string, password: string): Promise<AuthLoginResponse>;
|
|
56
|
+
/** HttpOnly refresh cookie로 Access Token을 재발급받아 내부 토큰을 교체합니다. */
|
|
57
|
+
tokenRefresh(): Promise<{
|
|
22
58
|
access_token: string;
|
|
23
59
|
refresh_token: string;
|
|
24
60
|
expires_in: number;
|
|
25
|
-
force_password_change?: boolean;
|
|
26
|
-
password_expired?: boolean;
|
|
27
|
-
password_expires_in_days?: number;
|
|
28
61
|
}>;
|
|
29
62
|
/** Refresh Token으로 Access Token을 재발급받아 내부 토큰을 교체합니다. */
|
|
30
|
-
refreshToken(refreshToken
|
|
63
|
+
refreshToken(refreshToken?: string): Promise<{
|
|
31
64
|
access_token: string;
|
|
65
|
+
refresh_token?: string;
|
|
32
66
|
expires_in: number;
|
|
33
67
|
}>;
|
|
34
68
|
/**
|
|
35
69
|
* 서버에 로그아웃을 요청하고 내부 토큰을 초기화합니다.
|
|
36
70
|
* refresh_token을 서버에 전달해 무효화합니다.
|
|
37
71
|
*/
|
|
38
|
-
logout(refreshToken
|
|
72
|
+
logout(refreshToken?: string): Promise<{
|
|
39
73
|
ok: boolean;
|
|
40
74
|
}>;
|
|
41
75
|
/** 현재 로그인된 사용자 정보를 반환합니다. */
|
|
@@ -66,6 +100,19 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
|
|
|
66
100
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
67
101
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
68
102
|
_healthTickPromise: Promise<unknown> | null;
|
|
103
|
+
realtimeEnabled: boolean;
|
|
104
|
+
realtimePath: string;
|
|
105
|
+
realtimeAutoConnect: boolean;
|
|
106
|
+
realtimeAutoReconnect: boolean;
|
|
107
|
+
realtimeReconnectDelayMs: number;
|
|
108
|
+
realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
|
|
109
|
+
_realtimeSocket: WebSocket | null;
|
|
110
|
+
_realtimeConnectPromise: Promise<void> | null;
|
|
111
|
+
_realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
|
|
112
|
+
_realtimeShouldReconnect: boolean;
|
|
113
|
+
_realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
|
|
114
|
+
_realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
|
|
115
|
+
_realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
|
|
69
116
|
configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
|
|
70
117
|
setToken(token: string): void;
|
|
71
118
|
setAnonymousPacketToken(token: string): void;
|
|
@@ -73,6 +120,17 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
|
|
|
73
120
|
setHmacSecret(secret: string): void;
|
|
74
121
|
setEncryptRequests(value: boolean): void;
|
|
75
122
|
setCsrfEnabled(enabled: boolean): void;
|
|
123
|
+
addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
|
|
124
|
+
removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
|
|
125
|
+
addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
|
|
126
|
+
removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
|
|
127
|
+
addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
|
|
128
|
+
removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
|
|
129
|
+
connectRealtime(): Promise<void>;
|
|
130
|
+
disconnectRealtime(reason?: string): void;
|
|
131
|
+
sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
|
|
132
|
+
subscribeRealtime(subscriptions: string[]): boolean;
|
|
133
|
+
unsubscribeRealtime(subscriptions: string[]): boolean;
|
|
76
134
|
startHealthTick(intervalMs?: number): void;
|
|
77
135
|
stopHealthTick(): void;
|
|
78
136
|
_scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
|
|
@@ -81,6 +139,12 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
|
|
|
81
139
|
}>): void;
|
|
82
140
|
_clearRefreshTimer(): void;
|
|
83
141
|
stopKeepSession(): void;
|
|
142
|
+
_applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
|
|
143
|
+
_buildRealtimeUrl(): string;
|
|
144
|
+
_handleRealtimeMessage(payload: unknown): void;
|
|
145
|
+
_scheduleRealtimeReconnect(reason: string): void;
|
|
146
|
+
_clearRealtimeReconnectTimer(): void;
|
|
147
|
+
_setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
|
|
84
148
|
_applyCsrfHealth(): void;
|
|
85
149
|
readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
|
|
86
150
|
get _reqOpts(): import("../../client/request.js").RequestOptions;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
1
|
+
import{entityRequest as c}from"../../client/request.js";function h(n){return n.ok===!0&&n.requires_2fa!==!0&&typeof n.data=="object"&&n.data!==null&&"access_token"in n.data}function f(n){return class extends n{_csrfRefresher=()=>this.checkHealth(this.keepSession).then(()=>{});async checkHealth(e=!1){const t=this.token,s={};e&&(s["X-Session-Bootstrap"]="1");const o=await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include",headers:s}),r=await o.json(),i=o.headers.get("X-Access-Token");i&&(this.token=i,e&&i!==t&&this.onTokenRefreshed?.(i,0),e&&r.authenticated===!0&&this.realtimeEnabled&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{}));const a=this._readCookie("anon_token");return a&&(this.anonymousPacketToken=a,this.encryptRequests=!0),this._applyCsrfHealth(),e&&r.authenticated===!1&&t&&(this.disconnectRealtime("session_expired"),this.onSessionExpired?.(new Error("Session expired"))),r}_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 login(e,t){await this._ensurePublicAuthBootstrap();const s=await c(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(),this.realtimeEnabled&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{})),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,h 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\";\n\nexport function AuthMixin<TBase extends GConstructor<EntityServerClientBase>>(\n Base: TBase,\n) {\n return class AuthMixinClass extends Base {\n // AuthMixin \uCD08\uAE30\uD654: CSRF \uCFE0\uD0A4 \uAC31\uC2E0\uC744 \uC704\uD574 checkHealth\uB97C _csrfRefresher\uB85C \uB4F1\uB85D\n _csrfRefresher = (): Promise<void> => this.checkHealth().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(): Promise<{ status: string }> {\n const res = await fetch(`${this.baseUrl}/v1/health`, {\n signal: AbortSignal.timeout(3000),\n credentials: \"include\",\n });\n const data = (await res.json()) as { status: string };\n\n // anon_token \uCFE0\uD0A4\uC5D0\uC11C \uC775\uBA85 \uD328\uD0B7 \uD1A0\uD070 \uC77D\uAE30 \u2014 \uC874\uC7AC\uD558\uBA74 \uC11C\uBC84 \uD328\uD0B7 \uC554\uD638\uD654 \uD65C\uC131 \uC0C1\uD0DC\n const anonToken = this._readCookie(\"anon_token\");\n if (anonToken) {\n this.anonymousPacketToken = anonToken;\n this.encryptRequests = true;\n }\n\n this._applyCsrfHealth();\n return data;\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 /** \uB85C\uADF8\uC778 \uD6C4 `access_token`\uC744 \uB0B4\uBD80 \uC0C1\uD0DC\uC5D0 \uC800\uC7A5\uD569\uB2C8\uB2E4. */\n async login(\n email: string,\n password: string,\n ): Promise<{\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 const data = await this._request<{\n data: {\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 }>(\"POST\", \"/v1/auth/login\", { email, passwd: password }, false);\n this.token = data.data.access_token;\n if (this.keepSession)\n this._scheduleKeepSession(\n data.data.refresh_token,\n data.data.expires_in,\n (rt) => this.refreshToken(rt),\n );\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(\n refreshToken: string,\n ): Promise<{ access_token: string; expires_in: number }> {\n const data = await this._request<{\n data: { access_token: string; expires_in: number };\n }>(\n \"POST\",\n \"/v1/auth/refresh\",\n { refresh_token: refreshToken },\n false,\n );\n this.token = data.data.access_token;\n if (this.keepSession)\n this._scheduleKeepSession(\n refreshToken,\n data.data.expires_in,\n (rt) => this.refreshToken(rt),\n );\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 const data = await this._request<{ ok: boolean }>(\n \"POST\",\n \"/v1/auth/logout\",\n { refresh_token: refreshToken },\n false,\n );\n this.token = \"\";\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": "
|
|
6
|
-
"names": ["AuthMixin", "Base", "data", "anonToken", "name", "match", "c", "
|
|
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 // 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(\n bootstrapAuth = false,\n ): Promise<{ status: string; authenticated?: boolean }> {\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 };\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 if (\n bootstrapAuth &&\n data.authenticated === true &&\n this.realtimeEnabled &&\n this.realtimeAutoConnect\n ) {\n this.connectRealtime().catch(() => {});\n }\n }\n\n // anon_token \uCFE0\uD0A4\uC5D0\uC11C \uC775\uBA85 \uD328\uD0B7 \uD1A0\uD070 \uC77D\uAE30 \u2014 \uC874\uC7AC\uD558\uBA74 \uC11C\uBC84 \uD328\uD0B7 \uC554\uD638\uD654 \uD65C\uC131 \uC0C1\uD0DC\n const anonToken = this._readCookie(\"anon_token\");\n if (anonToken) {\n this.anonymousPacketToken = anonToken;\n this.encryptRequests = true;\n }\n\n this._applyCsrfHealth();\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 }\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 /** \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 if (this.realtimeEnabled && this.realtimeAutoConnect) {\n this.connectRealtime().catch(() => {});\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,CAErC,eAAiB,IACb,KAAK,YAAY,KAAK,WAAW,EAAE,KAAK,IAAM,CAAC,CAAC,EAcpD,MAAM,YACFC,EAAgB,GACoC,CACpD,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,EAKvBE,EAAcF,EAAI,QAAQ,IAAI,gBAAgB,EAChDE,IACA,KAAK,MAAQA,EACTL,GAAiBK,IAAgBJ,GACjC,KAAK,mBAAmBI,EAAa,CAAC,EAGtCL,GACAI,EAAK,gBAAkB,IACvB,KAAK,iBACL,KAAK,qBAEL,KAAK,gBAAgB,EAAE,MAAM,IAAM,CAAC,CAAC,GAK7C,MAAME,EAAY,KAAK,YAAY,YAAY,EAC/C,OAAIA,IACA,KAAK,qBAAuBA,EAC5B,KAAK,gBAAkB,IAG3B,KAAK,iBAAiB,EAElBN,GACAI,EAAK,gBAAkB,IACvBH,IAEA,KAAK,mBAAmB,iBAAiB,EACzC,KAAK,mBAAmB,IAAI,MAAM,iBAAiB,CAAC,GAEjDG,CACX,CAGA,YAAYG,EAA6B,CACrC,GAAI,OAAO,SAAa,IAAa,OAAO,KAC5C,MAAMC,EAAQ,SAAS,OAClB,MAAM,GAAG,EACT,IAAKC,GAAMA,EAAE,KAAK,CAAC,EACnB,KAAMA,GAAMA,EAAE,WAAW,GAAGF,CAAI,GAAG,CAAC,EACzC,GAAI,CAACC,EAAO,OAAO,KACnB,GAAI,CACA,OAAO,mBAAmBA,EAAM,MAAMD,EAAK,OAAS,CAAC,CAAC,CAC1D,MAAQ,CACJ,OAAOC,EAAM,MAAMD,EAAK,OAAS,CAAC,CACtC,CACJ,CAEA,MAAM,4BAA4C,CAK9C,GAJI,OAAO,SAAa,KAIpB,KAAK,QAAU,KAAK,WACpB,OAGJ,MAAMG,EACF,CAAC,CAAC,KAAK,sBAAwB,CAAC,CAAC,KAAK,YAAY,YAAY,EAC5DC,EAAgB,CAAC,CAAC,KAAK,YAAY,KAAK,cAAc,EAExDD,GAA2BC,GAAiB,KAAK,aAIrD,MAAM,KAAK,YAAY,EAAK,CAChC,CAGA,MAAM,MACFC,EACAC,EAC0B,CAC1B,MAAM,KAAK,2BAA2B,EAEtC,MAAMhB,EAAW,MAAMF,EACnB,KAAK,SACL,OACA,iBACA,CAAE,MAAAiB,EAAO,OAAQC,CAAS,EAC1B,GACA,CAAC,EACD,CAAE,eAAgB,GAAO,cAAe,CAAC,GAAG,CAAE,CAClD,EAEA,OAAIjB,EAA2BC,CAAQ,IACnC,KAAK,MAAQA,EAAS,KAAK,aAC3B,KAAK,iBAAiB,EAClB,KAAK,aAAe,KAAK,mBAAqB,MAC9C,KAAK,gBAAgB,EAErB,KAAK,iBAAmB,KAAK,qBAC7B,KAAK,gBAAgB,EAAE,MAAM,IAAM,CAAC,CAAC,GAItCA,CACX,CAGA,MAAM,cAIH,CACC,MAAMO,EAAO,MAAM,KAAK,SAMrB,OAAQ,yBAA0B,OAAW,EAAK,EACrD,YAAK,MAAQA,EAAK,KAAK,aACvB,KAAK,iBAAiB,EACfA,EAAK,IAChB,CAGA,MAAM,aAAaU,EAIhB,CACC,GAAI,CAACA,EACD,OAAO,KAAK,aAAa,EAG7B,MAAMV,EAAO,MAAM,KAAK,SAOpB,OACA,mBACA,CAAE,cAAeU,CAAa,EAC9B,EACJ,EACA,YAAK,MAAQV,EAAK,KAAK,aACvB,KAAK,iBAAiB,EACfA,EAAK,IAChB,CAMA,MAAM,OAAOU,EAAiD,CAC1D,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,mBAAmB,QAAQ,EAChC,MAAMV,EAAO,MAAM,KAAK,SACpB,OACA,kBACAU,EAAe,CAAE,cAAeA,CAAa,EAAI,OACjD,EACJ,EACA,YAAK,MAAQ,GACb,KAAK,iBAAiB,EACfV,CACX,CAGA,IAAqE,CACjE,OAAO,KAAK,SAAS,MAAO,aAAa,CAC7C,CAGA,SAASW,EAA2C,CAChD,OAAO,KAAK,SACR,OACA,oBACAA,EAAS,CAAE,OAAAA,CAAO,EAAI,CAAC,CAC3B,CACJ,CACJ,CACJ",
|
|
6
|
+
"names": ["entityRequest", "isAuthLoginSuccessResponse", "response", "AuthMixin", "Base", "bootstrapAuth", "previousToken", "headers", "res", "data", "accessToken", "anonToken", "name", "match", "c", "hasAnonymousPacketToken", "hasCsrfCookie", "email", "password", "refreshToken", "passwd"]
|
|
7
7
|
}
|
|
@@ -114,6 +114,19 @@ export declare function EntityMixin<TBase extends GConstructor<EntityServerClien
|
|
|
114
114
|
_refreshTimer: ReturnType<typeof setTimeout> | null;
|
|
115
115
|
_healthTickTimer: ReturnType<typeof setInterval> | null;
|
|
116
116
|
_healthTickPromise: Promise<unknown> | null;
|
|
117
|
+
realtimeEnabled: boolean;
|
|
118
|
+
realtimePath: string;
|
|
119
|
+
realtimeAutoConnect: boolean;
|
|
120
|
+
realtimeAutoReconnect: boolean;
|
|
121
|
+
realtimeReconnectDelayMs: number;
|
|
122
|
+
realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
|
|
123
|
+
_realtimeSocket: WebSocket | null;
|
|
124
|
+
_realtimeConnectPromise: Promise<void> | null;
|
|
125
|
+
_realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
|
|
126
|
+
_realtimeShouldReconnect: boolean;
|
|
127
|
+
_realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
|
|
128
|
+
_realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
|
|
129
|
+
_realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
|
|
117
130
|
configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
|
|
118
131
|
setToken(token: string): void;
|
|
119
132
|
setAnonymousPacketToken(token: string): void;
|
|
@@ -121,6 +134,17 @@ export declare function EntityMixin<TBase extends GConstructor<EntityServerClien
|
|
|
121
134
|
setHmacSecret(secret: string): void;
|
|
122
135
|
setEncryptRequests(value: boolean): void;
|
|
123
136
|
setCsrfEnabled(enabled: boolean): void;
|
|
137
|
+
addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
|
|
138
|
+
removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
|
|
139
|
+
addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
|
|
140
|
+
removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
|
|
141
|
+
addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
|
|
142
|
+
removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
|
|
143
|
+
connectRealtime(): Promise<void>;
|
|
144
|
+
disconnectRealtime(reason?: string): void;
|
|
145
|
+
sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
|
|
146
|
+
subscribeRealtime(subscriptions: string[]): boolean;
|
|
147
|
+
unsubscribeRealtime(subscriptions: string[]): boolean;
|
|
124
148
|
startHealthTick(intervalMs?: number): void;
|
|
125
149
|
stopHealthTick(): void;
|
|
126
150
|
_scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
|
|
@@ -129,6 +153,12 @@ export declare function EntityMixin<TBase extends GConstructor<EntityServerClien
|
|
|
129
153
|
}>): void;
|
|
130
154
|
_clearRefreshTimer(): void;
|
|
131
155
|
stopKeepSession(): void;
|
|
156
|
+
_applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
|
|
157
|
+
_buildRealtimeUrl(): string;
|
|
158
|
+
_handleRealtimeMessage(payload: unknown): void;
|
|
159
|
+
_scheduleRealtimeReconnect(reason: string): void;
|
|
160
|
+
_clearRealtimeReconnectTimer(): void;
|
|
161
|
+
_setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
|
|
132
162
|
_applyCsrfHealth(): void;
|
|
133
163
|
readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
|
|
134
164
|
get _reqOpts(): import("../../client/request.js").RequestOptions;
|