entity-client 1.0.7

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 (82) hide show
  1. package/dist/EntityAppServerClient.d.ts +383 -0
  2. package/dist/EntityAppServerClient.js +2 -0
  3. package/dist/EntityAppServerClient.js.map +7 -0
  4. package/dist/EntityServerClient.d.ts +638 -0
  5. package/dist/EntityServerClient.js +2 -0
  6. package/dist/EntityServerClient.js.map +7 -0
  7. package/dist/client/base.d.ts +98 -0
  8. package/dist/client/base.js +2 -0
  9. package/dist/client/base.js.map +7 -0
  10. package/dist/client/hmac.d.ts +8 -0
  11. package/dist/client/hmac.js +2 -0
  12. package/dist/client/hmac.js.map +7 -0
  13. package/dist/client/packet.d.ts +24 -0
  14. package/dist/client/packet.js +2 -0
  15. package/dist/client/packet.js.map +7 -0
  16. package/dist/client/request.d.ts +20 -0
  17. package/dist/client/request.js +2 -0
  18. package/dist/client/request.js.map +7 -0
  19. package/dist/client/utils.d.ts +8 -0
  20. package/dist/client/utils.js +2 -0
  21. package/dist/client/utils.js.map +7 -0
  22. package/dist/hooks/useEntityServer.d.ts +104 -0
  23. package/dist/hooks/useEntityServer.js +2 -0
  24. package/dist/hooks/useEntityServer.js.map +7 -0
  25. package/dist/index.d.ts +10 -0
  26. package/dist/index.js +2 -0
  27. package/dist/index.js.map +7 -0
  28. package/dist/mixins/app/account.d.ts +64 -0
  29. package/dist/mixins/app/account.js +2 -0
  30. package/dist/mixins/app/account.js.map +7 -0
  31. package/dist/mixins/app/board.d.ts +87 -0
  32. package/dist/mixins/app/board.js +2 -0
  33. package/dist/mixins/app/board.js.map +7 -0
  34. package/dist/mixins/app/email-verify.d.ts +59 -0
  35. package/dist/mixins/app/email-verify.js +2 -0
  36. package/dist/mixins/app/email-verify.js.map +7 -0
  37. package/dist/mixins/app/index.d.ts +6 -0
  38. package/dist/mixins/app/index.js +2 -0
  39. package/dist/mixins/app/index.js.map +7 -0
  40. package/dist/mixins/app/oauth.d.ts +60 -0
  41. package/dist/mixins/app/oauth.js +2 -0
  42. package/dist/mixins/app/oauth.js.map +7 -0
  43. package/dist/mixins/app/password-reset.d.ts +59 -0
  44. package/dist/mixins/app/password-reset.js +2 -0
  45. package/dist/mixins/app/password-reset.js.map +7 -0
  46. package/dist/mixins/app/two-factor.d.ts +61 -0
  47. package/dist/mixins/app/two-factor.js +2 -0
  48. package/dist/mixins/app/two-factor.js.map +7 -0
  49. package/dist/mixins/auth.d.ts +115 -0
  50. package/dist/mixins/auth.js +2 -0
  51. package/dist/mixins/auth.js.map +7 -0
  52. package/dist/mixins/entity.d.ts +147 -0
  53. package/dist/mixins/entity.js +2 -0
  54. package/dist/mixins/entity.js.map +7 -0
  55. package/dist/mixins/file.d.ts +103 -0
  56. package/dist/mixins/file.js +2 -0
  57. package/dist/mixins/file.js.map +7 -0
  58. package/dist/mixins/push.d.ts +115 -0
  59. package/dist/mixins/push.js +2 -0
  60. package/dist/mixins/push.js.map +7 -0
  61. package/dist/mixins/server/admin.d.ts +105 -0
  62. package/dist/mixins/server/admin.js +2 -0
  63. package/dist/mixins/server/admin.js.map +7 -0
  64. package/dist/mixins/server/index.d.ts +7 -0
  65. package/dist/mixins/server/index.js +2 -0
  66. package/dist/mixins/server/index.js.map +7 -0
  67. package/dist/mixins/smtp.d.ts +65 -0
  68. package/dist/mixins/smtp.js +2 -0
  69. package/dist/mixins/smtp.js.map +7 -0
  70. package/dist/mixins/utils.d.ts +116 -0
  71. package/dist/mixins/utils.js +2 -0
  72. package/dist/mixins/utils.js.map +7 -0
  73. package/dist/packet.d.ts +11 -0
  74. package/dist/packet.js +2 -0
  75. package/dist/packet.js.map +7 -0
  76. package/dist/react.d.ts +1 -0
  77. package/dist/react.js +2 -0
  78. package/dist/react.js.map +7 -0
  79. package/dist/types.d.ts +250 -0
  80. package/dist/types.js +1 -0
  81. package/dist/types.js.map +7 -0
  82. package/package.json +57 -0
@@ -0,0 +1,59 @@
1
+ import type { GConstructor, EntityServerClientBase } from "../../client/base.js";
2
+ export declare function EmailVerifyMixin<TBase extends GConstructor<EntityServerClientBase>>(Base: TBase): {
3
+ new (...args: any[]): {
4
+ sendEmailVerification<T = unknown>(body: Record<string, unknown>): Promise<T>;
5
+ confirmEmailVerification<T = unknown>(body: Record<string, unknown>): Promise<T>;
6
+ activateEmailVerification<T = unknown>(query: Record<string, unknown>): Promise<T>;
7
+ getEmailVerificationStatus<T = unknown>(): Promise<T>;
8
+ changeVerifiedEmail<T = unknown>(body: Record<string, unknown>): Promise<T>;
9
+ baseUrl: string;
10
+ token: string;
11
+ anonymousPacketToken: string;
12
+ apiKey: string;
13
+ hmacSecret: string;
14
+ encryptRequests: boolean;
15
+ csrfEnabled: boolean;
16
+ csrfToken: string;
17
+ csrfHeaderName: string;
18
+ csrfRefreshPath: string;
19
+ csrfRefreshBuffer: number;
20
+ activeTxId: string | null;
21
+ keepSession: boolean;
22
+ refreshBuffer: number;
23
+ onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
24
+ onSessionExpired?: (error: Error) => void;
25
+ _sessionRefreshToken: string | null;
26
+ _refreshTimer: ReturnType<typeof setTimeout> | null;
27
+ _csrfRefreshTimer: ReturnType<typeof setTimeout> | null;
28
+ _csrfRefreshPromise: Promise<string> | null;
29
+ configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
30
+ setToken(token: string): void;
31
+ setAnonymousPacketToken(token: string): void;
32
+ setApiKey(apiKey: string): void;
33
+ setHmacSecret(secret: string): void;
34
+ setEncryptRequests(value: boolean): void;
35
+ setCsrfToken(token: string): void;
36
+ setCsrfEnabled(enabled: boolean): void;
37
+ _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
38
+ access_token: string;
39
+ expires_in: number;
40
+ }>): void;
41
+ _clearRefreshTimer(): void;
42
+ stopKeepSession(): void;
43
+ _clearCsrfRefreshTimer(): void;
44
+ stopCsrfRefresh(): void;
45
+ _scheduleCsrfRefresh(expiresIn: number): void;
46
+ refreshCsrfToken(): Promise<string>;
47
+ _applyCsrfHealth(csrf?: import("../../types.js").EntityServerClientHealthCsrf | null): void;
48
+ readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
49
+ get _reqOpts(): import("../../client/request.js").RequestOptions;
50
+ requestJson<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
51
+ requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
52
+ requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
53
+ requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
54
+ _request<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
55
+ _requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
56
+ _requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
57
+ _requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
58
+ };
59
+ } & TBase;
@@ -0,0 +1,2 @@
1
+ import{buildQuery as r}from"../../client/utils.js";function a(i){return class extends i{sendEmailVerification(e){return this.requestJson("POST","/v1/email-verify/send",e,!1)}confirmEmailVerification(e){return this.requestJson("POST","/v1/email-verify/confirm",e,!1)}activateEmailVerification(e){const n=r(e);return this.requestJson("GET",`/v1/email-verify/activate${n?`?${n}`:""}`,void 0,!1)}getEmailVerificationStatus(){return this.requestJson("GET","/v1/email-verify/status")}changeVerifiedEmail(e){return this.requestJson("POST","/v1/email-verify/change",e)}}}export{a as EmailVerifyMixin};
2
+ //# sourceMappingURL=email-verify.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/mixins/app/email-verify.ts"],
4
+ "sourcesContent": ["import { buildQuery } from \"../../client/utils.js\";\nimport type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../client/base.js\";\n\nexport function EmailVerifyMixin<\n TBase extends GConstructor<EntityServerClientBase>,\n>(Base: TBase) {\n return class EmailVerifyMixinClass extends Base {\n sendEmailVerification<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\n \"POST\",\n \"/v1/email-verify/send\",\n body,\n false,\n );\n }\n\n confirmEmailVerification<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\n \"POST\",\n \"/v1/email-verify/confirm\",\n body,\n false,\n );\n }\n\n activateEmailVerification<T = unknown>(\n query: Record<string, unknown>,\n ): Promise<T> {\n const qs = buildQuery(query);\n return this.requestJson(\n \"GET\",\n `/v1/email-verify/activate${qs ? `?${qs}` : \"\"}`,\n undefined,\n false,\n );\n }\n\n getEmailVerificationStatus<T = unknown>(): Promise<T> {\n return this.requestJson(\"GET\", \"/v1/email-verify/status\");\n }\n\n changeVerifiedEmail<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\"POST\", \"/v1/email-verify/change\", body);\n }\n };\n}\n"],
5
+ "mappings": "AAAA,OAAS,cAAAA,MAAkB,wBAMpB,SAASC,EAEdC,EAAa,CACX,OAAO,cAAoCA,CAAK,CAC5C,sBACIC,EACU,CACV,OAAO,KAAK,YACR,OACA,wBACAA,EACA,EACJ,CACJ,CAEA,yBACIA,EACU,CACV,OAAO,KAAK,YACR,OACA,2BACAA,EACA,EACJ,CACJ,CAEA,0BACIC,EACU,CACV,MAAMC,EAAKL,EAAWI,CAAK,EAC3B,OAAO,KAAK,YACR,MACA,4BAA4BC,EAAK,IAAIA,CAAE,GAAK,EAAE,GAC9C,OACA,EACJ,CACJ,CAEA,4BAAsD,CAClD,OAAO,KAAK,YAAY,MAAO,yBAAyB,CAC5D,CAEA,oBACIF,EACU,CACV,OAAO,KAAK,YAAY,OAAQ,0BAA2BA,CAAI,CACnE,CACJ,CACJ",
6
+ "names": ["buildQuery", "EmailVerifyMixin", "Base", "body", "query", "qs"]
7
+ }
@@ -0,0 +1,6 @@
1
+ export { AccountAppMixin } from "./account.js";
2
+ export { BoardMixin } from "./board.js";
3
+ export { EmailVerifyMixin } from "./email-verify.js";
4
+ export { OAuthMixin } from "./oauth.js";
5
+ export { PasswordResetMixin } from "./password-reset.js";
6
+ export { TwoFactorMixin } from "./two-factor.js";
@@ -0,0 +1,2 @@
1
+ import{AccountAppMixin as i}from"./account.js";import{BoardMixin as t}from"./board.js";import{EmailVerifyMixin as p}from"./email-verify.js";import{OAuthMixin as m}from"./oauth.js";import{PasswordResetMixin as M}from"./password-reset.js";import{TwoFactorMixin as c}from"./two-factor.js";export{i as AccountAppMixin,t as BoardMixin,p as EmailVerifyMixin,m as OAuthMixin,M as PasswordResetMixin,c as TwoFactorMixin};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/mixins/app/index.ts"],
4
+ "sourcesContent": ["export { AccountAppMixin } from \"./account.js\";\nexport { BoardMixin } from \"./board.js\";\nexport { EmailVerifyMixin } from \"./email-verify.js\";\nexport { OAuthMixin } from \"./oauth.js\";\nexport { PasswordResetMixin } from \"./password-reset.js\";\nexport { TwoFactorMixin } from \"./two-factor.js\";\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB,eAChC,OAAS,cAAAC,MAAkB,aAC3B,OAAS,oBAAAC,MAAwB,oBACjC,OAAS,cAAAC,MAAkB,aAC3B,OAAS,sBAAAC,MAA0B,sBACnC,OAAS,kBAAAC,MAAsB",
6
+ "names": ["AccountAppMixin", "BoardMixin", "EmailVerifyMixin", "OAuthMixin", "PasswordResetMixin", "TwoFactorMixin"]
7
+ }
@@ -0,0 +1,60 @@
1
+ import type { GConstructor, EntityServerClientBase } from "../../client/base.js";
2
+ export declare function OAuthMixin<TBase extends GConstructor<EntityServerClientBase>>(Base: TBase): {
3
+ new (...args: any[]): {
4
+ oauthAuthorizeUrl(provider: string, query?: Record<string, unknown>): string;
5
+ oauthCallback<T = unknown>(provider: string, payload?: Record<string, unknown>, method?: "GET" | "POST"): Promise<T>;
6
+ linkOAuthAccount<T = unknown>(body: Record<string, unknown>): Promise<T>;
7
+ unlinkOAuthAccount<T = unknown>(provider: string): Promise<T>;
8
+ listOAuthProviders<T = unknown>(): Promise<T>;
9
+ refreshOAuthProviderToken<T = unknown>(provider: string, body?: Record<string, unknown>): Promise<T>;
10
+ baseUrl: string;
11
+ token: string;
12
+ anonymousPacketToken: string;
13
+ apiKey: string;
14
+ hmacSecret: string;
15
+ encryptRequests: boolean;
16
+ csrfEnabled: boolean;
17
+ csrfToken: string;
18
+ csrfHeaderName: string;
19
+ csrfRefreshPath: string;
20
+ csrfRefreshBuffer: number;
21
+ activeTxId: string | null;
22
+ keepSession: boolean;
23
+ refreshBuffer: number;
24
+ onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
25
+ onSessionExpired?: (error: Error) => void;
26
+ _sessionRefreshToken: string | null;
27
+ _refreshTimer: ReturnType<typeof setTimeout> | null;
28
+ _csrfRefreshTimer: ReturnType<typeof setTimeout> | null;
29
+ _csrfRefreshPromise: Promise<string> | null;
30
+ configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
31
+ setToken(token: string): void;
32
+ setAnonymousPacketToken(token: string): void;
33
+ setApiKey(apiKey: string): void;
34
+ setHmacSecret(secret: string): void;
35
+ setEncryptRequests(value: boolean): void;
36
+ setCsrfToken(token: string): void;
37
+ setCsrfEnabled(enabled: boolean): void;
38
+ _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
39
+ access_token: string;
40
+ expires_in: number;
41
+ }>): void;
42
+ _clearRefreshTimer(): void;
43
+ stopKeepSession(): void;
44
+ _clearCsrfRefreshTimer(): void;
45
+ stopCsrfRefresh(): void;
46
+ _scheduleCsrfRefresh(expiresIn: number): void;
47
+ refreshCsrfToken(): Promise<string>;
48
+ _applyCsrfHealth(csrf?: import("../../types.js").EntityServerClientHealthCsrf | null): void;
49
+ readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
50
+ get _reqOpts(): import("../../client/request.js").RequestOptions;
51
+ requestJson<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
52
+ requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
53
+ requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
54
+ requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
55
+ _request<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
56
+ _requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
57
+ _requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
58
+ _requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
59
+ };
60
+ } & TBase;
@@ -0,0 +1,2 @@
1
+ import{buildQuery as s}from"../../client/utils.js";function a(o){return class extends o{oauthAuthorizeUrl(n,t={}){const r=s(t);return`${this.baseUrl}/v1/oauth/${n}${r?`?${r}`:""}`}oauthCallback(n,t,r="POST"){if(r==="GET"){const e=s(t??{});return this.requestJson("GET",`/v1/oauth/${n}/callback${e?`?${e}`:""}`,void 0,!1)}return this.requestJson("POST",`/v1/oauth/${n}/callback`,t,!1)}linkOAuthAccount(n){return this.requestJson("POST","/v1/account/oauth/link",n)}unlinkOAuthAccount(n){return this.requestJson("DELETE",`/v1/account/oauth/link/${n}`)}listOAuthProviders(){return this.requestJson("GET","/v1/account/oauth/providers")}refreshOAuthProviderToken(n,t){return this.requestJson("POST",`/v1/account/oauth/refresh/${n}`,t)}}}export{a as OAuthMixin};
2
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/mixins/app/oauth.ts"],
4
+ "sourcesContent": ["import { buildQuery } from \"../../client/utils.js\";\nimport type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../client/base.js\";\n\nexport function OAuthMixin<TBase extends GConstructor<EntityServerClientBase>>(\n Base: TBase,\n) {\n return class OAuthMixinClass extends Base {\n oauthAuthorizeUrl(\n provider: string,\n query: Record<string, unknown> = {},\n ): string {\n const qs = buildQuery(query);\n return `${this.baseUrl}/v1/oauth/${provider}${qs ? `?${qs}` : \"\"}`;\n }\n\n oauthCallback<T = unknown>(\n provider: string,\n payload?: Record<string, unknown>,\n method: \"GET\" | \"POST\" = \"POST\",\n ): Promise<T> {\n if (method === \"GET\") {\n const qs = buildQuery(payload ?? {});\n return this.requestJson(\n \"GET\",\n `/v1/oauth/${provider}/callback${qs ? `?${qs}` : \"\"}`,\n undefined,\n false,\n );\n }\n\n return this.requestJson(\n \"POST\",\n `/v1/oauth/${provider}/callback`,\n payload,\n false,\n );\n }\n\n linkOAuthAccount<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\"POST\", \"/v1/account/oauth/link\", body);\n }\n\n unlinkOAuthAccount<T = unknown>(provider: string): Promise<T> {\n return this.requestJson(\n \"DELETE\",\n `/v1/account/oauth/link/${provider}`,\n );\n }\n\n listOAuthProviders<T = unknown>(): Promise<T> {\n return this.requestJson(\"GET\", \"/v1/account/oauth/providers\");\n }\n\n refreshOAuthProviderToken<T = unknown>(\n provider: string,\n body?: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\n \"POST\",\n `/v1/account/oauth/refresh/${provider}`,\n body,\n );\n }\n };\n}\n"],
5
+ "mappings": "AAAA,OAAS,cAAAA,MAAkB,wBAMpB,SAASC,EACZC,EACF,CACE,OAAO,cAA8BA,CAAK,CACtC,kBACIC,EACAC,EAAiC,CAAC,EAC5B,CACN,MAAMC,EAAKL,EAAWI,CAAK,EAC3B,MAAO,GAAG,KAAK,OAAO,aAAaD,CAAQ,GAAGE,EAAK,IAAIA,CAAE,GAAK,EAAE,EACpE,CAEA,cACIF,EACAG,EACAC,EAAyB,OACf,CACV,GAAIA,IAAW,MAAO,CAClB,MAAMF,EAAKL,EAAWM,GAAW,CAAC,CAAC,EACnC,OAAO,KAAK,YACR,MACA,aAAaH,CAAQ,YAAYE,EAAK,IAAIA,CAAE,GAAK,EAAE,GACnD,OACA,EACJ,CACJ,CAEA,OAAO,KAAK,YACR,OACA,aAAaF,CAAQ,YACrBG,EACA,EACJ,CACJ,CAEA,iBACIE,EACU,CACV,OAAO,KAAK,YAAY,OAAQ,yBAA0BA,CAAI,CAClE,CAEA,mBAAgCL,EAA8B,CAC1D,OAAO,KAAK,YACR,SACA,0BAA0BA,CAAQ,EACtC,CACJ,CAEA,oBAA8C,CAC1C,OAAO,KAAK,YAAY,MAAO,6BAA6B,CAChE,CAEA,0BACIA,EACAK,EACU,CACV,OAAO,KAAK,YACR,OACA,6BAA6BL,CAAQ,GACrCK,CACJ,CACJ,CACJ,CACJ",
6
+ "names": ["buildQuery", "OAuthMixin", "Base", "provider", "query", "qs", "payload", "method", "body"]
7
+ }
@@ -0,0 +1,59 @@
1
+ import type { GConstructor, EntityServerClientBase } from "../../client/base.js";
2
+ export declare function PasswordResetMixin<TBase extends GConstructor<EntityServerClientBase>>(Base: TBase): {
3
+ new (...args: any[]): {
4
+ requestPasswordReset<T = unknown>(body: {
5
+ email: string;
6
+ } | Record<string, unknown>): Promise<T>;
7
+ validatePasswordResetToken<T = unknown>(token: string): Promise<T>;
8
+ verifyPasswordReset<T = unknown>(body: Record<string, unknown>): Promise<T>;
9
+ baseUrl: string;
10
+ token: string;
11
+ anonymousPacketToken: string;
12
+ apiKey: string;
13
+ hmacSecret: string;
14
+ encryptRequests: boolean;
15
+ csrfEnabled: boolean;
16
+ csrfToken: string;
17
+ csrfHeaderName: string;
18
+ csrfRefreshPath: string;
19
+ csrfRefreshBuffer: number;
20
+ activeTxId: string | null;
21
+ keepSession: boolean;
22
+ refreshBuffer: number;
23
+ onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
24
+ onSessionExpired?: (error: Error) => void;
25
+ _sessionRefreshToken: string | null;
26
+ _refreshTimer: ReturnType<typeof setTimeout> | null;
27
+ _csrfRefreshTimer: ReturnType<typeof setTimeout> | null;
28
+ _csrfRefreshPromise: Promise<string> | null;
29
+ configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
30
+ setToken(token: string): void;
31
+ setAnonymousPacketToken(token: string): void;
32
+ setApiKey(apiKey: string): void;
33
+ setHmacSecret(secret: string): void;
34
+ setEncryptRequests(value: boolean): void;
35
+ setCsrfToken(token: string): void;
36
+ setCsrfEnabled(enabled: boolean): void;
37
+ _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
38
+ access_token: string;
39
+ expires_in: number;
40
+ }>): void;
41
+ _clearRefreshTimer(): void;
42
+ stopKeepSession(): void;
43
+ _clearCsrfRefreshTimer(): void;
44
+ stopCsrfRefresh(): void;
45
+ _scheduleCsrfRefresh(expiresIn: number): void;
46
+ refreshCsrfToken(): Promise<string>;
47
+ _applyCsrfHealth(csrf?: import("../../types.js").EntityServerClientHealthCsrf | null): void;
48
+ readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
49
+ get _reqOpts(): import("../../client/request.js").RequestOptions;
50
+ requestJson<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
51
+ requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
52
+ requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
53
+ requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
54
+ _request<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
55
+ _requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
56
+ _requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
57
+ _requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
58
+ };
59
+ } & TBase;
@@ -0,0 +1,2 @@
1
+ function t(s){return class extends s{requestPasswordReset(e){return this.requestJson("POST","/v1/password-reset/request",e,!1)}validatePasswordResetToken(e){return this.requestJson("GET",`/v1/password-reset/validate/${encodeURIComponent(e)}`,void 0,!1)}verifyPasswordReset(e){return this.requestJson("POST","/v1/password-reset/verify",e,!1)}}}export{t as PasswordResetMixin};
2
+ //# sourceMappingURL=password-reset.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/mixins/app/password-reset.ts"],
4
+ "sourcesContent": ["import type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../client/base.js\";\n\nexport function PasswordResetMixin<\n TBase extends GConstructor<EntityServerClientBase>,\n>(Base: TBase) {\n return class PasswordResetMixinClass extends Base {\n requestPasswordReset<T = unknown>(\n body: { email: string } | Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\n \"POST\",\n \"/v1/password-reset/request\",\n body,\n false,\n );\n }\n\n validatePasswordResetToken<T = unknown>(token: string): Promise<T> {\n return this.requestJson(\n \"GET\",\n `/v1/password-reset/validate/${encodeURIComponent(token)}`,\n undefined,\n false,\n );\n }\n\n verifyPasswordReset<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\n \"POST\",\n \"/v1/password-reset/verify\",\n body,\n false,\n );\n }\n };\n}\n"],
5
+ "mappings": "AAKO,SAASA,EAEdC,EAAa,CACX,OAAO,cAAsCA,CAAK,CAC9C,qBACIC,EACU,CACV,OAAO,KAAK,YACR,OACA,6BACAA,EACA,EACJ,CACJ,CAEA,2BAAwCC,EAA2B,CAC/D,OAAO,KAAK,YACR,MACA,+BAA+B,mBAAmBA,CAAK,CAAC,GACxD,OACA,EACJ,CACJ,CAEA,oBACID,EACU,CACV,OAAO,KAAK,YACR,OACA,4BACAA,EACA,EACJ,CACJ,CACJ,CACJ",
6
+ "names": ["PasswordResetMixin", "Base", "body", "token"]
7
+ }
@@ -0,0 +1,61 @@
1
+ import type { GConstructor, EntityServerClientBase } from "../../client/base.js";
2
+ export declare function TwoFactorMixin<TBase extends GConstructor<EntityServerClientBase>>(Base: TBase): {
3
+ new (...args: any[]): {
4
+ setupTwoFactor<T = unknown>(body?: Record<string, unknown>): Promise<T>;
5
+ verifyTwoFactorSetup<T = unknown>(body: Record<string, unknown>): Promise<T>;
6
+ disableTwoFactor<T = unknown>(): Promise<T>;
7
+ getTwoFactorStatus<T = unknown>(): Promise<T>;
8
+ regenerateTwoFactorRecoveryCodes<T = unknown>(): Promise<T>;
9
+ verifyTwoFactor<T = unknown>(body: Record<string, unknown>): Promise<T>;
10
+ recoverTwoFactorAccess<T = unknown>(body: Record<string, unknown>): Promise<T>;
11
+ baseUrl: string;
12
+ token: string;
13
+ anonymousPacketToken: string;
14
+ apiKey: string;
15
+ hmacSecret: string;
16
+ encryptRequests: boolean;
17
+ csrfEnabled: boolean;
18
+ csrfToken: string;
19
+ csrfHeaderName: string;
20
+ csrfRefreshPath: string;
21
+ csrfRefreshBuffer: number;
22
+ activeTxId: string | null;
23
+ keepSession: boolean;
24
+ refreshBuffer: number;
25
+ onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
26
+ onSessionExpired?: (error: Error) => void;
27
+ _sessionRefreshToken: string | null;
28
+ _refreshTimer: ReturnType<typeof setTimeout> | null;
29
+ _csrfRefreshTimer: ReturnType<typeof setTimeout> | null;
30
+ _csrfRefreshPromise: Promise<string> | null;
31
+ configure(options: Partial<import("../../types.js").EntityServerClientOptions>): void;
32
+ setToken(token: string): void;
33
+ setAnonymousPacketToken(token: string): void;
34
+ setApiKey(apiKey: string): void;
35
+ setHmacSecret(secret: string): void;
36
+ setEncryptRequests(value: boolean): void;
37
+ setCsrfToken(token: string): void;
38
+ setCsrfEnabled(enabled: boolean): void;
39
+ _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
40
+ access_token: string;
41
+ expires_in: number;
42
+ }>): void;
43
+ _clearRefreshTimer(): void;
44
+ stopKeepSession(): void;
45
+ _clearCsrfRefreshTimer(): void;
46
+ stopCsrfRefresh(): void;
47
+ _scheduleCsrfRefresh(expiresIn: number): void;
48
+ refreshCsrfToken(): Promise<string>;
49
+ _applyCsrfHealth(csrf?: import("../../types.js").EntityServerClientHealthCsrf | null): void;
50
+ readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
51
+ get _reqOpts(): import("../../client/request.js").RequestOptions;
52
+ requestJson<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
53
+ requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
54
+ requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
55
+ requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
56
+ _request<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
57
+ _requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
58
+ _requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
59
+ _requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
60
+ };
61
+ } & TBase;
@@ -0,0 +1,2 @@
1
+ function o(n){return class extends n{setupTwoFactor(e){return this.requestJson("POST","/v1/account/2fa/setup",e)}verifyTwoFactorSetup(e){return this.requestJson("POST","/v1/account/2fa/setup/verify",e,!1)}disableTwoFactor(){return this.requestJson("DELETE","/v1/account/2fa")}getTwoFactorStatus(){return this.requestJson("GET","/v1/account/2fa/status")}regenerateTwoFactorRecoveryCodes(){return this.requestJson("POST","/v1/account/2fa/recovery/regenerate")}verifyTwoFactor(e){return this.requestJson("POST","/v1/account/2fa/verify",e,!1)}recoverTwoFactorAccess(e){return this.requestJson("POST","/v1/account/2fa/recovery",e,!1)}}}export{o as TwoFactorMixin};
2
+ //# sourceMappingURL=two-factor.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/mixins/app/two-factor.ts"],
4
+ "sourcesContent": ["import type {\n GConstructor,\n EntityServerClientBase,\n} from \"../../client/base.js\";\n\nexport function TwoFactorMixin<\n TBase extends GConstructor<EntityServerClientBase>,\n>(Base: TBase) {\n return class TwoFactorMixinClass extends Base {\n setupTwoFactor<T = unknown>(\n body?: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\"POST\", \"/v1/account/2fa/setup\", body);\n }\n\n verifyTwoFactorSetup<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\n \"POST\",\n \"/v1/account/2fa/setup/verify\",\n body,\n false,\n );\n }\n\n disableTwoFactor<T = unknown>(): Promise<T> {\n return this.requestJson(\"DELETE\", \"/v1/account/2fa\");\n }\n\n getTwoFactorStatus<T = unknown>(): Promise<T> {\n return this.requestJson(\"GET\", \"/v1/account/2fa/status\");\n }\n\n regenerateTwoFactorRecoveryCodes<T = unknown>(): Promise<T> {\n return this.requestJson(\n \"POST\",\n \"/v1/account/2fa/recovery/regenerate\",\n );\n }\n\n verifyTwoFactor<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\n \"POST\",\n \"/v1/account/2fa/verify\",\n body,\n false,\n );\n }\n\n recoverTwoFactorAccess<T = unknown>(\n body: Record<string, unknown>,\n ): Promise<T> {\n return this.requestJson(\n \"POST\",\n \"/v1/account/2fa/recovery\",\n body,\n false,\n );\n }\n };\n}\n"],
5
+ "mappings": "AAKO,SAASA,EAEdC,EAAa,CACX,OAAO,cAAkCA,CAAK,CAC1C,eACIC,EACU,CACV,OAAO,KAAK,YAAY,OAAQ,wBAAyBA,CAAI,CACjE,CAEA,qBACIA,EACU,CACV,OAAO,KAAK,YACR,OACA,+BACAA,EACA,EACJ,CACJ,CAEA,kBAA4C,CACxC,OAAO,KAAK,YAAY,SAAU,iBAAiB,CACvD,CAEA,oBAA8C,CAC1C,OAAO,KAAK,YAAY,MAAO,wBAAwB,CAC3D,CAEA,kCAA4D,CACxD,OAAO,KAAK,YACR,OACA,qCACJ,CACJ,CAEA,gBACIA,EACU,CACV,OAAO,KAAK,YACR,OACA,yBACAA,EACA,EACJ,CACJ,CAEA,uBACIA,EACU,CACV,OAAO,KAAK,YACR,OACA,2BACAA,EACA,EACJ,CACJ,CACJ,CACJ",
6
+ "names": ["TwoFactorMixin", "Base", "body"]
7
+ }
@@ -0,0 +1,115 @@
1
+ import type { GConstructor, EntityServerClientBase } from "../client/base.js";
2
+ export declare function AuthMixin<TBase extends GConstructor<EntityServerClientBase>>(Base: TBase): {
3
+ new (...args: any[]): {
4
+ /**
5
+ * 서버 헬스 체크를 수행하고 패킷 암호화 활성 여부를 자동으로 감지합니다.
6
+ *
7
+ * 서버가 `packet_encryption: true`를 응답하면 이후 모든 요청에 암호화가 자동 적용됩니다.
8
+ *
9
+ * ```ts
10
+ * await client.checkHealth();
11
+ * await client.login(email, password);
12
+ * ```
13
+ */
14
+ checkHealth(): Promise<{
15
+ ok: boolean;
16
+ packet_encryption?: boolean;
17
+ packet_mode?: string;
18
+ packet_token?: string;
19
+ csrf?: import("../types").EntityServerClientHealthCsrf;
20
+ }>;
21
+ /** 로그인 후 `access_token`을 내부 상태에 저장합니다. */
22
+ login(email: string, password: string): Promise<{
23
+ access_token: string;
24
+ refresh_token: string;
25
+ expires_in: number;
26
+ force_password_change?: boolean;
27
+ password_expired?: boolean;
28
+ password_expires_in_days?: number;
29
+ }>;
30
+ /** Refresh Token으로 Access Token을 재발급받아 내부 토큰을 교체합니다. */
31
+ refreshToken(refreshToken: string): Promise<{
32
+ access_token: string;
33
+ expires_in: number;
34
+ }>;
35
+ /**
36
+ * 서버에 로그아웃을 요청하고 내부 토큰을 초기화합니다.
37
+ * refresh_token을 서버에 전달해 무효화합니다.
38
+ */
39
+ logout(refreshToken: string): Promise<{
40
+ ok: boolean;
41
+ }>;
42
+ /** 현재 로그인된 사용자 정보를 반환합니다. */
43
+ me<T = Record<string, unknown>>(): Promise<{
44
+ ok: boolean;
45
+ data: T;
46
+ }>;
47
+ /** 회원 탈퇴를 요청합니다. */
48
+ withdraw(passwd?: string): Promise<{
49
+ ok: boolean;
50
+ }>;
51
+ /**
52
+ * 휴면 계정을 재활성화합니다.
53
+ * 비밀번호 또는 OAuth(provider + code)로 본인 확인합니다.
54
+ */
55
+ reactivate(params: {
56
+ email: string;
57
+ passwd?: string;
58
+ provider?: string;
59
+ code?: string;
60
+ }): Promise<{
61
+ access_token: string;
62
+ refresh_token: string;
63
+ expires_in: number;
64
+ }>;
65
+ baseUrl: string;
66
+ token: string;
67
+ anonymousPacketToken: string;
68
+ apiKey: string;
69
+ hmacSecret: string;
70
+ encryptRequests: boolean;
71
+ csrfEnabled: boolean;
72
+ csrfToken: string;
73
+ csrfHeaderName: string;
74
+ csrfRefreshPath: string;
75
+ csrfRefreshBuffer: number;
76
+ activeTxId: string | null;
77
+ keepSession: boolean;
78
+ refreshBuffer: number;
79
+ onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
80
+ onSessionExpired?: (error: Error) => void;
81
+ _sessionRefreshToken: string | null;
82
+ _refreshTimer: ReturnType<typeof setTimeout> | null;
83
+ _csrfRefreshTimer: ReturnType<typeof setTimeout> | null;
84
+ _csrfRefreshPromise: Promise<string> | null;
85
+ configure(options: Partial<import("../types").EntityServerClientOptions>): void;
86
+ setToken(token: string): void;
87
+ setAnonymousPacketToken(token: string): void;
88
+ setApiKey(apiKey: string): void;
89
+ setHmacSecret(secret: string): void;
90
+ setEncryptRequests(value: boolean): void;
91
+ setCsrfToken(token: string): void;
92
+ setCsrfEnabled(enabled: boolean): void;
93
+ _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
94
+ access_token: string;
95
+ expires_in: number;
96
+ }>): void;
97
+ _clearRefreshTimer(): void;
98
+ stopKeepSession(): void;
99
+ _clearCsrfRefreshTimer(): void;
100
+ stopCsrfRefresh(): void;
101
+ _scheduleCsrfRefresh(expiresIn: number): void;
102
+ refreshCsrfToken(): Promise<string>;
103
+ _applyCsrfHealth(csrf?: import("../types").EntityServerClientHealthCsrf | null): void;
104
+ readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
105
+ get _reqOpts(): import("../client/request.js").RequestOptions;
106
+ requestJson<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
107
+ requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
108
+ requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
109
+ requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
110
+ _request<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
111
+ _requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
112
+ _requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
113
+ _requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
114
+ };
115
+ } & TBase;
@@ -0,0 +1,2 @@
1
+ function o(r){return class extends r{async checkHealth(){const e=await(await fetch(`${this.baseUrl}/v1/health`,{signal:AbortSignal.timeout(3e3),credentials:"include"})).json();return e.packet_encryption&&(this.encryptRequests=!0),typeof e.packet_token=="string"&&(this.anonymousPacketToken=e.packet_token),this._applyCsrfHealth(e.csrf),e}async login(t,e){const s=await this._request("POST","/v1/auth/login",{email:t,passwd:e},!1);return this.token=s.data.access_token,this.keepSession&&this._scheduleKeepSession(s.data.refresh_token,s.data.expires_in,n=>this.refreshToken(n)),s.data}async refreshToken(t){const e=await this._request("POST","/v1/auth/refresh",{refresh_token:t},!1);return this.token=e.data.access_token,this.keepSession&&this._scheduleKeepSession(t,e.data.expires_in,s=>this.refreshToken(s)),e.data}async logout(t){this.stopKeepSession();const e=await this._request("POST","/v1/auth/logout",{refresh_token:t},!1);return this.token="",e}me(){return this._request("GET","/v1/auth/me")}withdraw(t){return this._request("POST","/v1/auth/withdraw",t?{passwd:t}:{})}reactivate(t){return this._request("POST","/v1/auth/reactivate",t,!1)}}}export{o as AuthMixin};
2
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/mixins/auth.ts"],
4
+ "sourcesContent": ["import type { GConstructor, EntityServerClientBase } from \"../client/base.js\";\n\nexport function AuthMixin<TBase extends GConstructor<EntityServerClientBase>>(\n Base: TBase,\n) {\n return class AuthMixinClass extends Base {\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<{\n ok: boolean;\n packet_encryption?: boolean;\n packet_mode?: string;\n packet_token?: string;\n csrf?: import(\"../types\").EntityServerClientHealthCsrf;\n }> {\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 {\n ok: boolean;\n packet_encryption?: boolean;\n packet_mode?: string;\n packet_token?: string;\n csrf?: import(\"../types\").EntityServerClientHealthCsrf;\n };\n if (data.packet_encryption) this.encryptRequests = true;\n if (typeof data.packet_token === \"string\") {\n this.anonymousPacketToken = data.packet_token;\n }\n this._applyCsrfHealth(data.csrf);\n return data;\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 * \uD734\uBA74 \uACC4\uC815\uC744 \uC7AC\uD65C\uC131\uD654\uD569\uB2C8\uB2E4.\n * \uBE44\uBC00\uBC88\uD638 \uB610\uB294 OAuth(provider + code)\uB85C \uBCF8\uC778 \uD655\uC778\uD569\uB2C8\uB2E4.\n */\n reactivate(params: {\n email: string;\n passwd?: string;\n provider?: string;\n code?: string;\n }): Promise<{\n access_token: string;\n refresh_token: string;\n expires_in: number;\n }> {\n return this._request(\"POST\", \"/v1/auth/reactivate\", params, false);\n }\n };\n}\n"],
5
+ "mappings": "AAEO,SAASA,EACZC,EACF,CACE,OAAO,cAA6BA,CAAK,CAarC,MAAM,aAMH,CAKC,MAAMC,EAAQ,MAJF,MAAM,MAAM,GAAG,KAAK,OAAO,aAAc,CACjD,OAAQ,YAAY,QAAQ,GAAI,EAChC,YAAa,SACjB,CAAC,GACuB,KAAK,EAO7B,OAAIA,EAAK,oBAAmB,KAAK,gBAAkB,IAC/C,OAAOA,EAAK,cAAiB,WAC7B,KAAK,qBAAuBA,EAAK,cAErC,KAAK,iBAAiBA,EAAK,IAAI,EACxBA,CACX,CAGA,MAAM,MACFC,EACAC,EAQD,CACC,MAAMF,EAAO,MAAM,KAAK,SASrB,OAAQ,iBAAkB,CAAE,MAAAC,EAAO,OAAQC,CAAS,EAAG,EAAK,EAC/D,YAAK,MAAQF,EAAK,KAAK,aACnB,KAAK,aACL,KAAK,qBACDA,EAAK,KAAK,cACVA,EAAK,KAAK,WACTG,GAAO,KAAK,aAAaA,CAAE,CAChC,EACGH,EAAK,IAChB,CAGA,MAAM,aACFI,EACqD,CACrD,MAAMJ,EAAO,MAAM,KAAK,SAGpB,OACA,mBACA,CAAE,cAAeI,CAAa,EAC9B,EACJ,EACA,YAAK,MAAQJ,EAAK,KAAK,aACnB,KAAK,aACL,KAAK,qBACDI,EACAJ,EAAK,KAAK,WACTG,GAAO,KAAK,aAAaA,CAAE,CAChC,EACGH,EAAK,IAChB,CAMA,MAAM,OAAOI,EAAgD,CACzD,KAAK,gBAAgB,EACrB,MAAMJ,EAAO,MAAM,KAAK,SACpB,OACA,kBACA,CAAE,cAAeI,CAAa,EAC9B,EACJ,EACA,YAAK,MAAQ,GACNJ,CACX,CAGA,IAAqE,CACjE,OAAO,KAAK,SAAS,MAAO,aAAa,CAC7C,CAGA,SAASK,EAA2C,CAChD,OAAO,KAAK,SACR,OACA,oBACAA,EAAS,CAAE,OAAAA,CAAO,EAAI,CAAC,CAC3B,CACJ,CAMA,WAAWC,EASR,CACC,OAAO,KAAK,SAAS,OAAQ,sBAAuBA,EAAQ,EAAK,CACrE,CACJ,CACJ",
6
+ "names": ["AuthMixin", "Base", "data", "email", "password", "rt", "refreshToken", "passwd", "params"]
7
+ }
@@ -0,0 +1,147 @@
1
+ import type { EntityHistoryRecord, EntityListParams, EntityListResult, EntityQueryRequest } from "../types.js";
2
+ import type { GConstructor, EntityServerClientBase } from "../client/base.js";
3
+ export declare function EntityMixin<TBase extends GConstructor<EntityServerClientBase>>(Base: TBase): {
4
+ new (...args: any[]): {
5
+ /** 트랜잭션을 시작하고 활성 트랜잭션 ID를 저장합니다. */
6
+ transStart(): Promise<string>;
7
+ /** 활성 트랜잭션(또는 전달된 transactionId)을 롤백합니다. */
8
+ transRollback(transactionId?: string): Promise<{
9
+ ok: boolean;
10
+ }>;
11
+ /**
12
+ * 활성 트랜잭션(또는 전달된 transactionId)을 커밋합니다.
13
+ *
14
+ * @returns `results` 배열: commit된 각 작업의 `entity`, `action`, `seq`
15
+ */
16
+ transCommit(transactionId?: string): Promise<{
17
+ ok: boolean;
18
+ results: Array<{
19
+ entity: string;
20
+ action: string;
21
+ seq: number;
22
+ }>;
23
+ }>;
24
+ /** 엔티티 설정 메타데이터를 조회합니다. */
25
+ meta<T = unknown>(entity: string): Promise<{
26
+ ok: boolean;
27
+ data: T;
28
+ }>;
29
+ /** 엔티티 데이터를 저장 없이 검증합니다. */
30
+ validate<T = unknown>(entity: string, data: Record<string, unknown>): Promise<T>;
31
+ /** 시퀀스 ID로 엔티티 단건을 조회합니다. */
32
+ get<T = unknown>(entity: string, seq: number, opts?: {
33
+ skipHooks?: boolean;
34
+ }): Promise<{
35
+ ok: boolean;
36
+ data: T;
37
+ }>;
38
+ /** 조건으로 엔티티 단건을 조회합니다. data 컬럼을 완전히 복호화하여 반환합니다. */
39
+ find<T = unknown>(entity: string, conditions?: Record<string, unknown>, opts?: {
40
+ skipHooks?: boolean;
41
+ }): Promise<{
42
+ ok: boolean;
43
+ data: T;
44
+ }>;
45
+ /** 페이지네이션/정렬/필터 조건으로 엔티티 목록을 조회합니다. */
46
+ list<T = unknown>(entity: string, params?: EntityListParams): Promise<{
47
+ ok: boolean;
48
+ data: EntityListResult<T>;
49
+ }>;
50
+ /**
51
+ * 엔티티 총 건수를 조회합니다.
52
+ *
53
+ * @param conditions 필터 조건 (예: `{ status: "active" }`)
54
+ */
55
+ count(entity: string, conditions?: Record<string, unknown>): Promise<{
56
+ ok: boolean;
57
+ count: number;
58
+ }>;
59
+ /**
60
+ * 커스텀 SQL로 엔티티를 조회합니다.
61
+ *
62
+ * SELECT 전용이며 인덱스 테이블만 조회 가능합니다. JOIN 지원.
63
+ */
64
+ query<T = unknown>(entity: string, req: EntityQueryRequest): Promise<{
65
+ ok: boolean;
66
+ data: {
67
+ items: T[];
68
+ count: number;
69
+ };
70
+ }>;
71
+ /** 엔티티 데이터를 생성/수정(Submit)합니다. `seq`가 없으면 INSERT, 있으면 UPDATE입니다. */
72
+ submit(entity: string, data: Record<string, unknown>, opts?: {
73
+ transactionId?: string;
74
+ skipHooks?: boolean;
75
+ }): Promise<{
76
+ ok: boolean;
77
+ seq: number;
78
+ }>;
79
+ /** 시퀀스 ID로 엔티티를 삭제합니다(`hard=true`면 하드 삭제, 기본은 소프트 삭제). */
80
+ delete(entity: string, seq: number, opts?: {
81
+ transactionId?: string;
82
+ hard?: boolean;
83
+ skipHooks?: boolean;
84
+ }): Promise<{
85
+ ok: boolean;
86
+ deleted: number;
87
+ }>;
88
+ /** 엔티티 단건의 변경 이력을 조회합니다. */
89
+ history<T = unknown>(entity: string, seq: number, params?: Pick<EntityListParams, "page" | "limit">): Promise<{
90
+ ok: boolean;
91
+ data: EntityListResult<EntityHistoryRecord<T>>;
92
+ }>;
93
+ /** 특정 이력 시점으로 엔티티를 롤백합니다. */
94
+ rollback(entity: string, historySeq: number): Promise<{
95
+ ok: boolean;
96
+ }>;
97
+ baseUrl: string;
98
+ token: string;
99
+ anonymousPacketToken: string;
100
+ apiKey: string;
101
+ hmacSecret: string;
102
+ encryptRequests: boolean;
103
+ csrfEnabled: boolean;
104
+ csrfToken: string;
105
+ csrfHeaderName: string;
106
+ csrfRefreshPath: string;
107
+ csrfRefreshBuffer: number;
108
+ activeTxId: string | null;
109
+ keepSession: boolean;
110
+ refreshBuffer: number;
111
+ onTokenRefreshed?: (accessToken: string, expiresIn: number) => void;
112
+ onSessionExpired?: (error: Error) => void;
113
+ _sessionRefreshToken: string | null;
114
+ _refreshTimer: ReturnType<typeof setTimeout> | null;
115
+ _csrfRefreshTimer: ReturnType<typeof setTimeout> | null;
116
+ _csrfRefreshPromise: Promise<string> | null;
117
+ configure(options: Partial<import("../types.js").EntityServerClientOptions>): void;
118
+ setToken(token: string): void;
119
+ setAnonymousPacketToken(token: string): void;
120
+ setApiKey(apiKey: string): void;
121
+ setHmacSecret(secret: string): void;
122
+ setEncryptRequests(value: boolean): void;
123
+ setCsrfToken(token: string): void;
124
+ setCsrfEnabled(enabled: boolean): void;
125
+ _scheduleKeepSession(refreshToken: string, expiresIn: number, refreshFn: (rt: string) => Promise<{
126
+ access_token: string;
127
+ expires_in: number;
128
+ }>): void;
129
+ _clearRefreshTimer(): void;
130
+ stopKeepSession(): void;
131
+ _clearCsrfRefreshTimer(): void;
132
+ stopCsrfRefresh(): void;
133
+ _scheduleCsrfRefresh(expiresIn: number): void;
134
+ refreshCsrfToken(): Promise<string>;
135
+ _applyCsrfHealth(csrf?: import("../types.js").EntityServerClientHealthCsrf | null): void;
136
+ readRequestBody<T = Record<string, unknown>>(body: ArrayBuffer | Uint8Array | string | T | null | undefined, contentType?: string, requireEncrypted?: boolean): T;
137
+ get _reqOpts(): import("../client/request.js").RequestOptions;
138
+ requestJson<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
139
+ requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
140
+ requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
141
+ requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
142
+ _request<T>(method: string, path: string, body?: unknown, withAuth?: boolean, extraHeaders?: Record<string, string>): Promise<T>;
143
+ _requestBinary(method: string, path: string, body?: unknown, withAuth?: boolean): Promise<ArrayBuffer>;
144
+ _requestForm<T>(method: string, path: string, form: FormData, withAuth?: boolean): Promise<T>;
145
+ _requestFormBinary(method: string, path: string, form: FormData, withAuth?: boolean): Promise<ArrayBuffer>;
146
+ };
147
+ } & TBase;