entity-client 1.0.13 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/EntityAppServerApi.d.ts +480 -0
  2. package/dist/EntityServerApi.d.ts +249 -7
  3. package/dist/client/base.d.ts +35 -4
  4. package/dist/client/base.js +1 -1
  5. package/dist/client/base.js.map +3 -3
  6. package/dist/client/request.d.ts +6 -1
  7. package/dist/client/request.js +1 -1
  8. package/dist/client/request.js.map +3 -3
  9. package/dist/hooks/useEntityClient.d.ts +4 -4
  10. package/dist/hooks/useEntityClient.js +1 -1
  11. package/dist/hooks/useEntityClient.js.map +3 -3
  12. package/dist/index.js +1 -1
  13. package/dist/index.js.map +3 -3
  14. package/dist/mixins/app/plugins/alimtalk.d.ts +30 -0
  15. package/dist/mixins/app/plugins/friendtalk.d.ts +30 -0
  16. package/dist/mixins/app/plugins/holidays.d.ts +30 -0
  17. package/dist/mixins/app/plugins/identity.d.ts +30 -0
  18. package/dist/mixins/app/plugins/llm.d.ts +30 -0
  19. package/dist/mixins/app/plugins/ocr.d.ts +30 -0
  20. package/dist/mixins/app/plugins/pg.d.ts +30 -0
  21. package/dist/mixins/app/plugins/push.d.ts +30 -0
  22. package/dist/mixins/app/plugins/sms.d.ts +30 -0
  23. package/dist/mixins/app/plugins/taxinvoice.d.ts +30 -0
  24. package/dist/mixins/app/routes/account.d.ts +30 -0
  25. package/dist/mixins/app/routes/board.d.ts +30 -0
  26. package/dist/mixins/app/routes/board.js +1 -1
  27. package/dist/mixins/app/routes/board.js.map +2 -2
  28. package/dist/mixins/app/routes/email-verify.d.ts +30 -0
  29. package/dist/mixins/app/routes/oauth.d.ts +30 -0
  30. package/dist/mixins/app/routes/password-reset.d.ts +30 -0
  31. package/dist/mixins/app/routes/two-factor.d.ts +30 -0
  32. package/dist/mixins/server/admin.d.ts +30 -0
  33. package/dist/mixins/server/auth.d.ts +73 -8
  34. package/dist/mixins/server/auth.js +1 -1
  35. package/dist/mixins/server/auth.js.map +3 -3
  36. package/dist/mixins/server/entity.d.ts +30 -0
  37. package/dist/mixins/server/file.d.ts +30 -0
  38. package/dist/mixins/server/index.d.ts +2 -1
  39. package/dist/mixins/server/index.js +1 -1
  40. package/dist/mixins/server/index.js.map +3 -3
  41. package/dist/mixins/server/push.d.ts +30 -0
  42. package/dist/mixins/server/smtp.d.ts +30 -0
  43. package/dist/mixins/server/transaction.d.ts +30 -0
  44. package/dist/mixins/server/utils.d.ts +30 -0
  45. package/dist/react.js +1 -1
  46. package/dist/react.js.map +3 -3
  47. package/dist/types.d.ts +46 -11
  48. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- import{buildQuery as o}from"../../../client/utils.js";function u(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}`:""}`,!1)}getBoardPost(t){return this.http.get(`/v1/board/posts/${t}`,!1)}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{u as BoardMixin};
1
+ import{buildQuery as o}from"../../../client/utils.js";function a(e){return class extends e{listBoardCategories(t={}){const r=o(t);return this.http.get(`/v1/board/categories${r?`?${r}`:""}`,!1)}getBoardCategory(t){return this.http.get(`/v1/board/categories/${t}`,!1)}createBoardCategory(t){return this.http.post("/v1/board/categories",t)}updateBoardCategory(t,r){return this.http.put(`/v1/board/categories/${t}`,r)}deleteBoardCategory(t){return this.http.delete(`/v1/board/categories/${t}`)}listBoardPosts(t,r={}){const n=o(r);return this.http.get(`/v1/board/${t}/list${n?`?${n}`:""}`)}getBoardPost(t){return this.http.get(`/v1/board/posts/${t}`)}createBoardPost(t,r){return this.http.post(`/v1/board/${t}/submit`,r)}updateBoardPost(t,r){return this.http.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(\n `/v1/board/${category}/list${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n getBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.get(\n `/v1/board/posts/${seq}`,\n false,\n );\n }\n\n createBoardPost<T = unknown>(\n category: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/${category}/submit`,\n body,\n );\n }\n\n updateBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/posts/${seq}`, body);\n }\n\n deleteBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/posts/${seq}`);\n }\n\n listBoardComments<T = unknown>(\n postSeq: number,\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/posts/${postSeq}/comments${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n createBoardComment<T = unknown>(\n postSeq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${postSeq}/comments/submit`,\n body,\n );\n }\n\n updateBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/comments/${seq}`, body);\n }\n\n deleteBoardComment<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/comments/${seq}`);\n }\n\n listBoardFiles<T = unknown>(postSeq: number): Promise<T> {\n return this.http.get(\n `/v1/board/posts/${postSeq}/files`,\n false,\n );\n }\n\n async uploadBoardFile<T = unknown>(\n postSeq: number,\n file: File | Blob,\n ): Promise<T> {\n const form = new FormData();\n form.append(\n \"file\",\n file,\n file instanceof File ? file.name : \"upload\",\n );\n return this.requestForm(\n \"POST\",\n `/v1/board/posts/${postSeq}/files`,\n form,\n );\n }\n\n boardFileUrl(uuid: string): string {\n return `${this.baseUrl}/v1/board/files/${uuid}`;\n }\n\n deleteBoardFile<T = unknown>(uuid: string): Promise<T> {\n return this.http.delete(`/v1/board/files/${uuid}`);\n }\n\n createBoardGuestPost<T = unknown>(\n category: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/${category}/guest-submit`,\n body,\n false,\n );\n }\n\n authenticateBoardGuestPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/guest-auth`,\n body,\n false,\n );\n }\n\n toggleBoardPostLike<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/like`, {});\n }\n\n acceptBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/accept`,\n {},\n );\n }\n\n rateBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/rating`,\n body,\n );\n }\n\n rateBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/comments/${seq}/rating`,\n body,\n );\n }\n\n listBoardTags<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/tags${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n setBoardPostTags<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/posts/${seq}/tags`, body);\n }\n\n reportBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/report`,\n body,\n );\n }\n\n reportBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/comments/${seq}/report`,\n body,\n );\n }\n\n listBoardReports<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/admin/reports${qs ? `?${qs}` : \"\"}`,\n );\n }\n\n updateBoardReport<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.patch(\n `/v1/board/admin/reports/${seq}`,\n body,\n );\n }\n\n markBoardPostRead<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/read`, {});\n }\n\n listBoardMentions<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/mentions${qs ? `?${qs}` : \"\"}`,\n );\n }\n\n markBoardMentionRead<T = unknown>(seq: number): Promise<T> {\n return this.http.patch(\n `/v1/board/mentions/${seq}/read`,\n {},\n );\n }\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { buildQuery } from \"../../../client/utils.js\";\nimport type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../../client/base.js\";\n\nexport function BoardMixin<TBase extends GConstructor<EntityServerClientBase>>(\n Base: TBase,\n) {\n return class BoardMixinClass extends Base {\n listBoardCategories<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/categories${qs ? `?${qs}` : \"\"}`,\n false,\n );\n }\n\n getBoardCategory<T = unknown>(seq: number): Promise<T> {\n return this.http.get(`/v1/board/categories/${seq}`, false);\n }\n\n createBoardCategory<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\"/v1/board/categories\", body);\n }\n\n updateBoardCategory<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/categories/${seq}`, body);\n }\n\n deleteBoardCategory<T = unknown>(seq: number): Promise<T> {\n return this.http.delete(`/v1/board/categories/${seq}`);\n }\n\n listBoardPosts<T = unknown>(\n category: string,\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/${category}/list${qs ? `?${qs}` : \"\"}`,\n );\n }\n\n getBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.get(`/v1/board/posts/${seq}`);\n }\n\n createBoardPost<T = unknown>(\n category: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/${category}/submit`, body);\n }\n\n updateBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.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(`/v1/board/posts/${postSeq}/files`, false);\n }\n\n async uploadBoardFile<T = unknown>(\n postSeq: number,\n file: File | Blob,\n ): Promise<T> {\n const form = new FormData();\n form.append(\n \"file\",\n file,\n file instanceof File ? file.name : \"upload\",\n );\n return this.requestForm(\n \"POST\",\n `/v1/board/posts/${postSeq}/files`,\n form,\n );\n }\n\n boardFileUrl(uuid: string): string {\n return `${this.baseUrl}/v1/board/files/${uuid}`;\n }\n\n deleteBoardFile<T = unknown>(uuid: string): Promise<T> {\n return this.http.delete(`/v1/board/files/${uuid}`);\n }\n\n createBoardGuestPost<T = unknown>(\n category: string,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/${category}/guest-submit`,\n body,\n false,\n );\n }\n\n authenticateBoardGuestPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(\n `/v1/board/posts/${seq}/guest-auth`,\n body,\n false,\n );\n }\n\n toggleBoardPostLike<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/like`, {});\n }\n\n acceptBoardPost<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/accept`, {});\n }\n\n rateBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/rating`, body);\n }\n\n rateBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/comments/${seq}/rating`, body);\n }\n\n listBoardTags<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(`/v1/board/tags${qs ? `?${qs}` : \"\"}`, false);\n }\n\n setBoardPostTags<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.put(`/v1/board/posts/${seq}/tags`, body);\n }\n\n reportBoardPost<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/report`, body);\n }\n\n reportBoardComment<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.post(`/v1/board/comments/${seq}/report`, body);\n }\n\n listBoardReports<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(\n `/v1/board/admin/reports${qs ? `?${qs}` : \"\"}`,\n );\n }\n\n updateBoardReport<T = unknown>(\n seq: number,\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.http.patch(`/v1/board/admin/reports/${seq}`, body);\n }\n\n markBoardPostRead<T = unknown>(seq: number): Promise<T> {\n return this.http.post(`/v1/board/posts/${seq}/read`, {});\n }\n\n listBoardMentions<T = unknown>(\n query: Record<string, unknown> = {},\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.http.get(`/v1/board/mentions${qs ? `?${qs}` : \"\"}`);\n }\n\n markBoardMentionRead<T = unknown>(seq: number): Promise<T> {\n return this.http.patch(`/v1/board/mentions/${seq}/read`, {});\n }\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["buildQuery", "BoardMixin", "Base", "query", "qs", "seq", "body", "category", "postSeq", "file", "form", "uuid"]
7
7
  }
@@ -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,33 @@ 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;
50
+ packet_encryption?: boolean;
17
51
  }>;
18
52
  /** document.cookie 또는 Node 환경에서 쿠키 값 읽기 (SSR 대응) */
19
53
  _readCookie(name: string): string | null;
20
- /** 로그인 후 `access_token`을 내부 상태에 저장합니다. */
21
- login(email: string, password: string): Promise<{
54
+ _ensurePublicAuthBootstrap(): Promise<void>;
55
+ /** 로그인 응답을 반환합니다. 성공 시에만 `access_token`을 내부 상태에 저장합니다. */
56
+ login(email: string, password: string): Promise<AuthLoginResponse>;
57
+ /** HttpOnly refresh cookie로 Access Token을 재발급받아 내부 토큰을 교체합니다. */
58
+ tokenRefresh(): Promise<{
22
59
  access_token: string;
23
60
  refresh_token: string;
24
61
  expires_in: number;
25
- force_password_change?: boolean;
26
- password_expired?: boolean;
27
- password_expires_in_days?: number;
28
62
  }>;
29
63
  /** Refresh Token으로 Access Token을 재발급받아 내부 토큰을 교체합니다. */
30
- refreshToken(refreshToken: string): Promise<{
64
+ refreshToken(refreshToken?: string): Promise<{
31
65
  access_token: string;
66
+ refresh_token?: string;
32
67
  expires_in: number;
33
68
  }>;
34
69
  /**
35
70
  * 서버에 로그아웃을 요청하고 내부 토큰을 초기화합니다.
36
71
  * refresh_token을 서버에 전달해 무효화합니다.
37
72
  */
38
- logout(refreshToken: string): Promise<{
73
+ logout(refreshToken?: string): Promise<{
39
74
  ok: boolean;
40
75
  }>;
41
76
  /** 현재 로그인된 사용자 정보를 반환합니다. */
@@ -66,6 +101,19 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
66
101
  _refreshTimer: ReturnType<typeof setTimeout> | null;
67
102
  _healthTickTimer: ReturnType<typeof setInterval> | null;
68
103
  _healthTickPromise: Promise<unknown> | null;
104
+ realtimeEnabled: boolean;
105
+ realtimePath: string;
106
+ realtimeAutoConnect: boolean;
107
+ realtimeAutoReconnect: boolean;
108
+ realtimeReconnectDelayMs: number;
109
+ realtimeStatus: import("../../types.js").RealtimeConnectionStatus;
110
+ _realtimeSocket: WebSocket | null;
111
+ _realtimeConnectPromise: Promise<void> | null;
112
+ _realtimeReconnectTimer: ReturnType<typeof setTimeout> | null;
113
+ _realtimeShouldReconnect: boolean;
114
+ _realtimeMessageListeners: Set<import("../../types.js").RealtimeMessageListener>;
115
+ _realtimeStatusListeners: Set<import("../../types.js").RealtimeStatusListener>;
116
+ _realtimeEventListeners: Map<string, Set<import("../../types.js").RealtimeMessageListener>>;
69
117
  configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
70
118
  setToken(token: string): void;
71
119
  setAnonymousPacketToken(token: string): void;
@@ -73,6 +121,17 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
73
121
  setHmacSecret(secret: string): void;
74
122
  setEncryptRequests(value: boolean): void;
75
123
  setCsrfEnabled(enabled: boolean): void;
124
+ addRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
125
+ removeRealtimeListener(listener: import("../../types.js").RealtimeMessageListener): void;
126
+ addRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
127
+ removeRealtimeStatusListener(listener: import("../../types.js").RealtimeStatusListener): void;
128
+ addRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
129
+ removeRealtimeEventListener(eventName: string, listener: import("../../types.js").RealtimeMessageListener): void;
130
+ connectRealtime(): Promise<void>;
131
+ disconnectRealtime(reason?: string): void;
132
+ sendRealtime(message: import("../../types.js").RealtimeEnvelope | Record<string, unknown>): boolean;
133
+ subscribeRealtime(subscriptions: string[]): boolean;
134
+ unsubscribeRealtime(subscriptions: string[]): boolean;
76
135
  startHealthTick(intervalMs?: number): void;
77
136
  stopHealthTick(): void;
78
137
  _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
@@ -81,6 +140,12 @@ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientB
81
140
  }>): void;
82
141
  _clearRefreshTimer(): void;
83
142
  stopKeepSession(): void;
143
+ _applyRealtimeOptions(options?: boolean | import("../../types.js").RealtimeClientOptions): void;
144
+ _buildRealtimeUrl(): string;
145
+ _handleRealtimeMessage(payload: unknown): void;
146
+ _scheduleRealtimeReconnect(reason: string): void;
147
+ _clearRealtimeReconnectTimer(): void;
148
+ _setRealtimeStatus(status: import("../../types.js").RealtimeConnectionStatus, reason?: string, error?: Error): void;
84
149
  _applyCsrfHealth(): void;
85
150
  readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
86
151
  get _reqOpts(): import("../../client/request.js").RequestOptions;
@@ -1,2 +1,2 @@
1
- function o(n){return class extends n{_csrfRefresher=()=>this.checkHealth().then(()=>{});async checkHealth(){const t=await(await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include"})).json(),s=this._readCookie("anon_token");return s&&(this.anonymousPacketToken=s,this.encryptRequests=!0),this._applyCsrfHealth(),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 login(e,t){const s=await this._request("POST","/v1/auth/login",{email:e,passwd:t},!1);return this.token=s.data.access_token,this.keepSession&&this._scheduleKeepSession(s.data.refresh_token,s.data.expires_in,r=>this.refreshToken(r)),s.data}async refreshToken(e){const t=await this._request("POST","/v1/auth/refresh",{refresh_token:e},!1);return this.token=t.data.access_token,this.keepSession&&this._scheduleKeepSession(e,t.data.expires_in,s=>this.refreshToken(s)),t.data}async logout(e){this.stopKeepSession();const t=await this._request("POST","/v1/auth/logout",{refresh_token:e},!1);return this.token="",t}me(){return this._request("GET","/v1/auth/me")}withdraw(e){return this._request("POST","/v1/auth/withdraw",e?{passwd:e}:{})}}}export{o as AuthMixin};
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 d(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 r=await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include",headers:s}),i=await r.json(),o=r.headers.get("X-Access-Token");o&&(this.token=o,e&&o!==t&&this.onTokenRefreshed?.(o,0),e&&i.authenticated===!0&&this.realtimeEnabled&&this.realtimeAutoConnect&&this.connectRealtime().catch(()=>{}));const a=this._readCookie("anon_token");return i.packet_encryption===!0&&a&&(this.anonymousPacketToken=a,this.encryptRequests=!0),this._applyCsrfHealth(),e&&i.authenticated===!1&&t&&(this.disconnectRealtime("session_expired"),this.onSessionExpired?.(new Error("Session expired"))),i}_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{d 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": "AAKO,SAASA,EACZC,EACF,CACE,OAAO,cAA6BA,CAAK,CAErC,eAAiB,IAAqB,KAAK,YAAY,EAAE,KAAK,IAAM,CAAC,CAAC,EActE,MAAM,aAA2C,CAK7C,MAAMC,EAAQ,MAJF,MAAM,MAAM,GAAG,KAAK,OAAO,aAAc,CACjD,OAAQ,YAAY,QAAQ,GAAI,EAChC,YAAa,SACjB,CAAC,GACuB,KAAK,EAGvBC,EAAY,KAAK,YAAY,YAAY,EAC/C,OAAIA,IACA,KAAK,qBAAuBA,EAC5B,KAAK,gBAAkB,IAG3B,KAAK,iBAAiB,EACfD,CACX,CAGA,YAAYE,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,CAGA,MAAM,MACFG,EACAC,EAQD,CACC,MAAMN,EAAO,MAAM,KAAK,SASrB,OAAQ,iBAAkB,CAAE,MAAAK,EAAO,OAAQC,CAAS,EAAG,EAAK,EAC/D,YAAK,MAAQN,EAAK,KAAK,aACnB,KAAK,aACL,KAAK,qBACDA,EAAK,KAAK,cACVA,EAAK,KAAK,WACTO,GAAO,KAAK,aAAaA,CAAE,CAChC,EACGP,EAAK,IAChB,CAGA,MAAM,aACFQ,EACqD,CACrD,MAAMR,EAAO,MAAM,KAAK,SAGpB,OACA,mBACA,CAAE,cAAeQ,CAAa,EAC9B,EACJ,EACA,YAAK,MAAQR,EAAK,KAAK,aACnB,KAAK,aACL,KAAK,qBACDQ,EACAR,EAAK,KAAK,WACTO,GAAO,KAAK,aAAaA,CAAE,CAChC,EACGP,EAAK,IAChB,CAMA,MAAM,OAAOQ,EAAgD,CACzD,KAAK,gBAAgB,EACrB,MAAMR,EAAO,MAAM,KAAK,SACpB,OACA,kBACA,CAAE,cAAeQ,CAAa,EAC9B,EACJ,EACA,YAAK,MAAQ,GACNR,CACX,CAGA,IAAqE,CACjE,OAAO,KAAK,SAAS,MAAO,aAAa,CAC7C,CAGA,SAASS,EAA2C,CAChD,OAAO,KAAK,SACR,OACA,oBACAA,EAAS,CAAE,OAAAA,CAAO,EAAI,CAAC,CAC3B,CACJ,CACJ,CACJ",
6
- "names": ["AuthMixin", "Base", "data", "anonToken", "name", "match", "c", "email", "password", "rt", "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 // 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 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 if (\n bootstrapAuth &&\n data.authenticated === true &&\n this.realtimeEnabled &&\n this.realtimeAutoConnect\n ) {\n this.connectRealtime().catch(() => {});\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 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": "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",
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;