@authticon/client 0.0.0-beta1 → 0.0.0-beta10

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 (72) hide show
  1. package/dist/Acccount.d.ts +9 -0
  2. package/dist/Acccount.d.ts.map +1 -0
  3. package/dist/Acccount.js +22 -0
  4. package/dist/Acccount.js.map +1 -0
  5. package/dist/Auth.d.ts +6 -0
  6. package/dist/Auth.d.ts.map +1 -1
  7. package/dist/Auth.js +20 -1
  8. package/dist/Auth.js.map +1 -1
  9. package/dist/Authticon.d.ts +105 -5
  10. package/dist/Authticon.d.ts.map +1 -1
  11. package/dist/Authticon.js +48 -1
  12. package/dist/Authticon.js.map +1 -1
  13. package/dist/Challange.d.ts +8 -0
  14. package/dist/Challange.d.ts.map +1 -0
  15. package/dist/Challange.js +24 -0
  16. package/dist/Challange.js.map +1 -0
  17. package/dist/CookieStorageAdapter.d.ts +14 -0
  18. package/dist/CookieStorageAdapter.d.ts.map +1 -0
  19. package/dist/CookieStorageAdapter.js +43 -0
  20. package/dist/CookieStorageAdapter.js.map +1 -0
  21. package/dist/CookieStorageAdapter.test.d.ts +2 -0
  22. package/dist/CookieStorageAdapter.test.d.ts.map +1 -0
  23. package/dist/CookieStorageAdapter.test.js +137 -0
  24. package/dist/CookieStorageAdapter.test.js.map +1 -0
  25. package/dist/TokenManager.d.ts +7 -3
  26. package/dist/TokenManager.d.ts.map +1 -1
  27. package/dist/TokenManager.js +13 -3
  28. package/dist/TokenManager.js.map +1 -1
  29. package/dist/TokenManager.test.js +1 -1
  30. package/dist/TokenStorage.d.ts +4 -0
  31. package/dist/TokenStorage.d.ts.map +1 -1
  32. package/dist/TokenStorage.js +15 -0
  33. package/dist/TokenStorage.js.map +1 -1
  34. package/dist/TokenStorage.test.js +61 -1
  35. package/dist/TokenStorage.test.js.map +1 -1
  36. package/dist/TokenVerifier.d.ts +3 -3
  37. package/dist/TokenVerifier.d.ts.map +1 -1
  38. package/dist/TokenVerifier.js +1 -1
  39. package/dist/TokenVerifier.js.map +1 -1
  40. package/dist/TwoFa.d.ts +26 -0
  41. package/dist/TwoFa.d.ts.map +1 -0
  42. package/dist/TwoFa.js +55 -0
  43. package/dist/TwoFa.js.map +1 -0
  44. package/dist/User.d.ts +25 -0
  45. package/dist/User.d.ts.map +1 -0
  46. package/dist/User.js +27 -0
  47. package/dist/User.js.map +1 -0
  48. package/dist/Users.d.ts +3 -3
  49. package/dist/Users.d.ts.map +1 -1
  50. package/dist/Users.js +7 -6
  51. package/dist/Users.js.map +1 -1
  52. package/dist/generated/index.d.ts +2 -2
  53. package/dist/generated/index.d.ts.map +1 -1
  54. package/dist/generated/index.js +1 -1
  55. package/dist/generated/index.js.map +1 -1
  56. package/dist/generated/sdk.gen.d.ts +14 -23
  57. package/dist/generated/sdk.gen.d.ts.map +1 -1
  58. package/dist/generated/sdk.gen.js +52 -117
  59. package/dist/generated/sdk.gen.js.map +1 -1
  60. package/dist/generated/types.gen.d.ts +235 -563
  61. package/dist/generated/types.gen.d.ts.map +1 -1
  62. package/dist/index.d.ts +3 -1
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +2 -1
  65. package/dist/index.js.map +1 -1
  66. package/dist/types.d.ts +12 -2
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/user.d.ts +48 -0
  69. package/dist/user.d.ts.map +1 -0
  70. package/dist/user.js +42 -0
  71. package/dist/user.js.map +1 -0
  72. package/package.json +3 -1
@@ -0,0 +1,9 @@
1
+ import type { Client } from "./generated/client/index.js";
2
+ import { type PostApiV1AuthEmailChangeData, type PostApiV1AuthPasswordChangeData } from "./generated/index.js";
3
+ export declare class Account {
4
+ private readonly client;
5
+ constructor(client: Client);
6
+ changeEmail(params: PostApiV1AuthEmailChangeData['body']): Promise<null>;
7
+ changePassword(params: PostApiV1AuthPasswordChangeData['body']): Promise<null>;
8
+ }
9
+ //# sourceMappingURL=Acccount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Acccount.d.ts","sourceRoot":"","sources":["../src/Acccount.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAyD,KAAK,4BAA4B,EAAE,KAAK,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEtK,qBAAa,OAAO;IACJ,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAErC,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC,MAAM,CAAC;IAQxD,cAAc,CAAC,MAAM,EAAE,+BAA+B,CAAC,MAAM,CAAC;CAOvE"}
@@ -0,0 +1,22 @@
1
+ import { postApiV1AuthEmailChange, postApiV1AuthPasswordChange } from "./generated/index.js";
2
+ export class Account {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client;
6
+ }
7
+ async changeEmail(params) {
8
+ const { data } = await postApiV1AuthEmailChange({
9
+ client: this.client,
10
+ body: params
11
+ });
12
+ return data;
13
+ }
14
+ async changePassword(params) {
15
+ const { data } = await postApiV1AuthPasswordChange({
16
+ client: this.client,
17
+ body: params
18
+ });
19
+ return data;
20
+ }
21
+ }
22
+ //# sourceMappingURL=Acccount.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Acccount.js","sourceRoot":"","sources":["../src/Acccount.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,2BAA2B,EAA2E,MAAM,sBAAsB,CAAC;AAEtK,MAAM,OAAO,OAAO;IACa;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,WAAW,CAAC,MAA4C;QAC1D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,wBAAwB,CAAC;YAC5C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACf,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAA+C;QAChE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,2BAA2B,CAAC;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACf,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
package/dist/Auth.d.ts CHANGED
@@ -15,5 +15,11 @@ export declare class Auth {
15
15
  register(params: PostApiV1AuthRegisterData['body']): Promise<{
16
16
  userId: string;
17
17
  }>;
18
+ logout(refreshToken: string): Promise<{
19
+ success: boolean;
20
+ }>;
21
+ refresh(refreshToken: string): Promise<{
22
+ accessToken: string;
23
+ }>;
18
24
  }
19
25
  //# sourceMappingURL=Auth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAGlG,qBAAa,IAAI;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAErC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC;;;;;;;;;IAQ5C,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC,MAAM,CAAC;;;CAOzD"}
1
+ {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE1D,OAAO,KAAK,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAGlG,qBAAa,IAAI;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAErC,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC;;;;;;;;;IAQ5C,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC,MAAM,CAAC;;;IAQlD,MAAM,CAAC,YAAY,EAAE,MAAM;;;IAU3B,OAAO,CAAC,YAAY,EAAE,MAAM;;;CASnC"}
package/dist/Auth.js CHANGED
@@ -1,4 +1,4 @@
1
- import { postApiV1AuthLogin, postApiV1AuthRegister } from "./generated/sdk.gen.js";
1
+ import { postApiV1AuthLogin, postApiV1AuthLogout, postApiV1AuthRegister, postApiV1AuthTokenRefresh } from "./generated/sdk.gen.js";
2
2
  export class Auth {
3
3
  client;
4
4
  constructor(client) {
@@ -20,5 +20,24 @@ export class Auth {
20
20
  return data;
21
21
  }
22
22
  ;
23
+ async logout(refreshToken) {
24
+ const { data } = await postApiV1AuthLogout({
25
+ client: this.client,
26
+ body: {
27
+ refreshToken
28
+ }
29
+ });
30
+ return data;
31
+ }
32
+ ;
33
+ async refresh(refreshToken) {
34
+ const { data } = await postApiV1AuthTokenRefresh({
35
+ client: this.client,
36
+ body: {
37
+ refreshToken
38
+ }
39
+ });
40
+ return data;
41
+ }
23
42
  }
24
43
  //# sourceMappingURL=Auth.js.map
package/dist/Auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.js","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAInF,MAAM,OAAO,IAAI;IACc;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,KAAK,CAAC,MAAsC;QAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAA,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,MAAyC;QACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,qBAAqB,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAA,CAAC;CACH"}
1
+ {"version":3,"file":"Auth.js","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AAInI,MAAM,OAAO,IAAI;IACc;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,KAAK,CAAC,MAAsC;QAChD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,kBAAkB,CAAC;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAA,CAAC;IAEF,KAAK,CAAC,QAAQ,CAAC,MAAyC;QACtD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,qBAAqB,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,MAAM;SACb,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAA,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,YAAoB;QAC/B,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,mBAAmB,CAAC;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE;gBACJ,YAAY;aACb;SACF,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAA,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,YAAoB;QAChC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,yBAAyB,CAAC;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE;gBACJ,YAAY;aACb;SACF,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -1,21 +1,121 @@
1
+ import { Account } from "./Acccount.js";
1
2
  import { Auth } from "./Auth.js";
3
+ import { Challange } from "./Challange.js";
4
+ import type { PostApiV1AuthLoginData } from "./generated/index.js";
2
5
  import { TokenManager } from "./TokenManager.js";
6
+ import { TwoFa } from "./TwoFa.js";
3
7
  import type { CookieAdapter, TokenStorageOptions } from "./types.js";
4
8
  import { Users } from "./Users.js";
5
- type ClientOptions = {
9
+ type ClientOptions<C extends CookieAdapter> = {
6
10
  readonly apiKey: string;
7
11
  readonly baseURL?: string;
8
12
  readonly jwksUrl?: string;
9
13
  readonly jwksCacheTtlMs?: number;
10
- readonly cookies?: CookieAdapter;
14
+ readonly cookies?: C;
11
15
  readonly tokenStorage?: TokenStorageOptions;
12
16
  };
13
- export declare class Authticon {
17
+ export declare class Authticon<Payload extends Record<string, any>, C extends CookieAdapter> {
14
18
  private readonly client;
15
19
  readonly auth: Auth;
16
20
  readonly users: Users;
17
- readonly tokens: TokenManager;
18
- constructor(options: ClientOptions);
21
+ readonly tokens: TokenManager<Payload>;
22
+ readonly twoFa: TwoFa;
23
+ readonly account: Account;
24
+ readonly challange: Challange;
25
+ private readonly cookiesAdapter?;
26
+ constructor(options: ClientOptions<C>);
27
+ hasSession(): boolean;
28
+ verifyToken(): Promise<import("./types.js").AccessTokenPayload<Payload>>;
29
+ getUser(): Promise<import("./types.js").JWTPayload & Payload & {
30
+ auth: {
31
+ logout: () => Promise<{
32
+ success: boolean;
33
+ }>;
34
+ refresh: () => Promise<void>;
35
+ };
36
+ account: {
37
+ changeEmail: (newEmail: string) => Promise<null>;
38
+ changePassword: (newPassword: string, oldPassword: string) => Promise<null>;
39
+ };
40
+ twoFa: {
41
+ enabled: boolean;
42
+ type: "email" | "sms" | "app";
43
+ getSecret: () => Promise<{
44
+ secret: string;
45
+ uri: string;
46
+ }>;
47
+ enablePhone: () => Promise<{
48
+ success: boolean;
49
+ }>;
50
+ enableEmail: () => Promise<{
51
+ success: boolean;
52
+ }>;
53
+ enableApp: (token: string) => Promise<{
54
+ success: boolean;
55
+ }>;
56
+ disable: (token: string) => Promise<{
57
+ success: boolean;
58
+ }>;
59
+ };
60
+ challange: {
61
+ startPhone: (phone: string) => Promise<null>;
62
+ completePhone: (phone: string, code: string) => Promise<null>;
63
+ };
64
+ authticon: {
65
+ sessionId: string;
66
+ userId: string;
67
+ projectId: string;
68
+ role: "guest" | "user";
69
+ twoFaEnabled: boolean;
70
+ twoFaType: "email" | "sms" | "app";
71
+ };
72
+ }>;
73
+ cookies(): C;
74
+ login(params: PostApiV1AuthLoginData["body"]): Promise<import("./types.js").JWTPayload & Payload & {
75
+ auth: {
76
+ logout: () => Promise<{
77
+ success: boolean;
78
+ }>;
79
+ refresh: () => Promise<void>;
80
+ };
81
+ account: {
82
+ changeEmail: (newEmail: string) => Promise<null>;
83
+ changePassword: (newPassword: string, oldPassword: string) => Promise<null>;
84
+ };
85
+ twoFa: {
86
+ enabled: boolean;
87
+ type: "email" | "sms" | "app";
88
+ getSecret: () => Promise<{
89
+ secret: string;
90
+ uri: string;
91
+ }>;
92
+ enablePhone: () => Promise<{
93
+ success: boolean;
94
+ }>;
95
+ enableEmail: () => Promise<{
96
+ success: boolean;
97
+ }>;
98
+ enableApp: (token: string) => Promise<{
99
+ success: boolean;
100
+ }>;
101
+ disable: (token: string) => Promise<{
102
+ success: boolean;
103
+ }>;
104
+ };
105
+ challange: {
106
+ startPhone: (phone: string) => Promise<null>;
107
+ completePhone: (phone: string, code: string) => Promise<null>;
108
+ };
109
+ authticon: {
110
+ sessionId: string;
111
+ userId: string;
112
+ projectId: string;
113
+ role: "guest" | "user";
114
+ twoFaEnabled: boolean;
115
+ twoFaType: "email" | "sms" | "app";
116
+ };
117
+ }>;
19
118
  }
119
+ export declare function createAuthticon<Payload extends Record<string, any> = Record<string, any>, C extends CookieAdapter = CookieAdapter>(options: ClientOptions<C>): Authticon<Payload, C>;
20
120
  export {};
21
121
  //# sourceMappingURL=Authticon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Authticon.d.ts","sourceRoot":"","sources":["../src/Authticon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,KAAK,aAAa,GAAG;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAC7C,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;gBAElB,OAAO,EAAE,aAAa;CAwBnC"}
1
+ {"version":3,"file":"Authticon.d.ts","sourceRoot":"","sources":["../src/Authticon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,KAAK,aAAa,CAAC,CAAC,SAAS,aAAa,IAAI;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrB,QAAQ,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CAC7C,CAAC;AAEF,qBAAa,SAAS,CACpB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,CAAC,SAAS,aAAa;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAI;gBAExB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC;IA4B9B,UAAU;IAIJ,WAAW;IAUX,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKb,OAAO;IAOD,KAAK,CAAC,MAAM,EAAE,sBAAsB,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU1D;AAED,wBAAgB,eAAe,CAC7B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,aAAa,GAAG,aAAa,EACvC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,yBAE1B"}
package/dist/Authticon.js CHANGED
@@ -1,14 +1,22 @@
1
+ import { Account } from "./Acccount.js";
1
2
  import { Auth } from "./Auth.js";
3
+ import { Challange } from "./Challange.js";
2
4
  import { createClient } from "./generated/client/index.js";
3
5
  import { TokenManager } from "./TokenManager.js";
6
+ import { TwoFa } from "./TwoFa.js";
7
+ import { createAuthticonUser } from "./user.js";
4
8
  import { Users } from "./Users.js";
5
9
  export class Authticon {
6
10
  client;
7
11
  auth;
8
12
  users;
9
13
  tokens;
14
+ twoFa;
15
+ account;
16
+ challange;
17
+ cookiesAdapter;
10
18
  constructor(options) {
11
- const baseURL = options.baseURL ?? "https://authticon.com/api/v1";
19
+ const baseURL = options.baseURL ?? "https://authticon.com";
12
20
  this.client = createClient({
13
21
  baseURL,
14
22
  headers: {
@@ -16,8 +24,12 @@ export class Authticon {
16
24
  },
17
25
  throwOnError: true,
18
26
  });
27
+ this.cookiesAdapter = options.cookies;
19
28
  this.auth = new Auth(this.client);
20
29
  this.users = new Users(this.client);
30
+ this.twoFa = new TwoFa(this.client);
31
+ this.account = new Account(this.client);
32
+ this.challange = new Challange(this.client);
21
33
  const jwksUrl = options.jwksUrl ?? `${new URL(baseURL).origin}/.well-known/jwks.json`;
22
34
  this.tokens = new TokenManager(this.client, {
23
35
  jwksUrl,
@@ -26,5 +38,40 @@ export class Authticon {
26
38
  storage: options.tokenStorage,
27
39
  });
28
40
  }
41
+ hasSession() {
42
+ return this.tokens.hasStorage() && this.tokens.getAccessToken() !== null;
43
+ }
44
+ async verifyToken() {
45
+ if (await this.tokens.isAccessTokenExpired()) {
46
+ const result = await this.auth.refresh(this.tokens.getRefreshToken());
47
+ if ("accessToken" in result) {
48
+ this.tokens.setAccessToken(result.accessToken);
49
+ }
50
+ }
51
+ return this.tokens.verifyToken();
52
+ }
53
+ async getUser() {
54
+ const payload = await this.verifyToken();
55
+ return createAuthticonUser(this, payload);
56
+ }
57
+ cookies() {
58
+ if (!this.cookiesAdapter) {
59
+ throw new Error("Cookies not set");
60
+ }
61
+ return this.cookiesAdapter;
62
+ }
63
+ async login(params) {
64
+ const result = await this.auth.login(params);
65
+ if ("accessToken" in result) {
66
+ this.tokens.save(result);
67
+ }
68
+ if (params.rememberToken) {
69
+ this.tokens.setRememberToken(params.rememberToken);
70
+ }
71
+ return this.getUser();
72
+ }
73
+ }
74
+ export function createAuthticon(options) {
75
+ return new Authticon(options);
29
76
  }
30
77
  //# sourceMappingURL=Authticon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Authticon.js","sourceRoot":"","sources":["../src/Authticon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAe,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAWnC,MAAM,OAAO,SAAS;IACH,MAAM,CAAS;IACvB,IAAI,CAAO;IACX,KAAK,CAAQ;IACb,MAAM,CAAe;IAE9B,YAAY,OAAsB;QAChC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,8BAA8B,CAAC;QAElE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;YACzB,OAAO;YACP,OAAO,EAAE;gBACP,WAAW,EAAE,OAAO,CAAC,MAAM;aAC5B;YACD,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,OAAO,GACX,OAAO,CAAC,OAAO,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,wBAAwB,CAAC;QAExE,IAAI,CAAC,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;YAC1C,OAAO;YACP,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,OAAO,EAAE,OAAO,CAAC,YAAY;SAC9B,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"Authticon.js","sourceRoot":"","sources":["../src/Authticon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Client } from "./generated/client/index.js";
2
+ export declare class Challange {
3
+ private readonly client;
4
+ constructor(client: Client);
5
+ startPhone(userId: string, phone: string): Promise<null>;
6
+ completePhone(userId: string, phone: string, code: string): Promise<null>;
7
+ }
8
+ //# sourceMappingURL=Challange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Challange.d.ts","sourceRoot":"","sources":["../src/Challange.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAG1D,qBAAa,SAAS;IACN,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAErC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IASxC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAQlE"}
@@ -0,0 +1,24 @@
1
+ import { patchApiV1UsersByUserIdChallangePhone, postApiV1UsersByUserIdChallangePhone } from "./generated/index.js";
2
+ export class Challange {
3
+ client;
4
+ constructor(client) {
5
+ this.client = client;
6
+ }
7
+ async startPhone(userId, phone) {
8
+ const { data } = await postApiV1UsersByUserIdChallangePhone({
9
+ client: this.client,
10
+ path: { userId },
11
+ body: { phone }
12
+ });
13
+ return data;
14
+ }
15
+ async completePhone(userId, phone, code) {
16
+ const { data } = await patchApiV1UsersByUserIdChallangePhone({
17
+ client: this.client,
18
+ path: { userId },
19
+ body: { phone, code }
20
+ });
21
+ return data;
22
+ }
23
+ }
24
+ //# sourceMappingURL=Challange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Challange.js","sourceRoot":"","sources":["../src/Challange.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qCAAqC,EAAE,oCAAoC,EAAE,MAAM,sBAAsB,CAAC;AAEnH,MAAM,OAAO,SAAS;IACW;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,KAAa;QAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,oCAAoC,CAAC;YACxD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,EAAE,KAAK,EAAE;SAClB,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,KAAa,EAAE,IAAY;QAC3D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,qCAAqC,CAAC;YACzD,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,EAAE,MAAM,EAAE;YAChB,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE;SACxB,CAAC,CAAA;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import type { CookieAdapter, CookieSetOptions } from "./types.js";
2
+ export declare class CookieStorageAdapter implements CookieAdapter {
3
+ private readonly cookies;
4
+ private readonly setCookies;
5
+ constructor(request: Request);
6
+ get(name: string): string | null;
7
+ set(name: string, value: string, options: CookieSetOptions): void;
8
+ remove(name: string): void;
9
+ stringifySetCookies(): string[];
10
+ stringifyCookies(): string;
11
+ applyToResponse(response: Response): void;
12
+ }
13
+ export declare function createCookieStorageAdapter(request: Request): CookieStorageAdapter;
14
+ //# sourceMappingURL=CookieStorageAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieStorageAdapter.d.ts","sourceRoot":"","sources":["../src/CookieStorageAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElE,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8C;gBAE7D,OAAO,EAAE,OAAO;IAW5B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAIhC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAUjE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK1B,mBAAmB,IAAI,MAAM,EAAE;IAM/B,gBAAgB,IAAI,MAAM;IAI1B,eAAe,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAM1C;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,GACf,oBAAoB,CAEtB"}
@@ -0,0 +1,43 @@
1
+ import * as cookiesUtils from "cookie";
2
+ export class CookieStorageAdapter {
3
+ cookies;
4
+ setCookies = {};
5
+ constructor(request) {
6
+ this.cookies = cookiesUtils.parseCookie(request.headers.get("Cookie") || "");
7
+ for (const raw of request.headers.getSetCookie()) {
8
+ const cookie = cookiesUtils.parseSetCookie(raw);
9
+ this.setCookies[cookie.name] = cookie;
10
+ }
11
+ }
12
+ get(name) {
13
+ return this.cookies[name] || null;
14
+ }
15
+ set(name, value, options) {
16
+ this.setCookies[name] = {
17
+ name,
18
+ value,
19
+ ...options,
20
+ sameSite: options.sameSite.toLowerCase(),
21
+ };
22
+ }
23
+ remove(name) {
24
+ delete this.cookies[name];
25
+ delete this.setCookies[name];
26
+ }
27
+ stringifySetCookies() {
28
+ return Object.values(this.setCookies).map((cookie) => cookiesUtils.stringifySetCookie(cookie));
29
+ }
30
+ stringifyCookies() {
31
+ return cookiesUtils.stringifyCookie(this.cookies);
32
+ }
33
+ applyToResponse(response) {
34
+ response.headers.set("Cookie", this.stringifyCookies());
35
+ for (const cookie of this.stringifySetCookies()) {
36
+ response.headers.append("Set-Cookie", cookie);
37
+ }
38
+ }
39
+ }
40
+ export function createCookieStorageAdapter(request) {
41
+ return new CookieStorageAdapter(request);
42
+ }
43
+ //# sourceMappingURL=CookieStorageAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieStorageAdapter.js","sourceRoot":"","sources":["../src/CookieStorageAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,QAAQ,CAAC;AAGvC,MAAM,OAAO,oBAAoB;IACd,OAAO,CAAuB;IAC9B,UAAU,GAA2C,EAAE,CAAC;IAEzE,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,WAAW,CACrC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CACpC,CAAC;QAEF,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;YACjD,MAAM,MAAM,GAAG,YAAY,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QACxC,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,OAAyB;QACxD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG;YACtB,IAAI;YACJ,KAAK;YACL,GAAG,OAAO;YACV,QAAQ,EACN,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAwC;SACvE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,mBAAmB;QACjB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACnD,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CACxC,CAAC;IACJ,CAAC;IAED,gBAAgB;QACd,OAAO,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC;IAED,eAAe,CAAC,QAAkB;QAChC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QACxD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAChD,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAgB;IAEhB,OAAO,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=CookieStorageAdapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieStorageAdapter.test.d.ts","sourceRoot":"","sources":["../src/CookieStorageAdapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,137 @@
1
+ import { describe, it, expect, beforeEach } from "vitest";
2
+ import { CookieStorageAdapter, createCookieStorageAdapter, } from "./CookieStorageAdapter.js";
3
+ const defaultSetOptions = {
4
+ path: "/",
5
+ secure: true,
6
+ sameSite: "Lax",
7
+ maxAge: 900,
8
+ };
9
+ const makeRequest = (cookieHeader) => new Request("http://localhost", {
10
+ headers: cookieHeader ? { Cookie: cookieHeader } : {},
11
+ });
12
+ describe("CookieStorageAdapter", () => {
13
+ let adapter;
14
+ beforeEach(() => {
15
+ adapter = new CookieStorageAdapter(makeRequest("foo=bar; token=abc123"));
16
+ });
17
+ describe("get", () => {
18
+ it("should return the value of an existing cookie", () => {
19
+ expect(adapter.get("foo")).toBe("bar");
20
+ expect(adapter.get("token")).toBe("abc123");
21
+ });
22
+ it("should return null for a missing cookie", () => {
23
+ expect(adapter.get("nonexistent")).toBeNull();
24
+ });
25
+ it("should handle empty cookie string", () => {
26
+ const empty = new CookieStorageAdapter(makeRequest(""));
27
+ expect(empty.get("anything")).toBeNull();
28
+ });
29
+ });
30
+ describe("set", () => {
31
+ it("should not affect get (request cookies are immutable)", () => {
32
+ adapter.set("new_cookie", "val", defaultSetOptions);
33
+ expect(adapter.get("new_cookie")).toBeNull();
34
+ });
35
+ it("should not overwrite request cookies in get", () => {
36
+ adapter.set("foo", "baz", defaultSetOptions);
37
+ expect(adapter.get("foo")).toBe("bar");
38
+ });
39
+ it("should include the cookie in stringifySetCookies output", () => {
40
+ adapter.set("sid", "s1", defaultSetOptions);
41
+ const result = adapter.stringifySetCookies();
42
+ expect(result).toHaveLength(1);
43
+ const cookie = result[0];
44
+ expect(cookie).toContain("sid=s1");
45
+ expect(cookie).toContain("Path=/");
46
+ expect(cookie).toContain("Secure");
47
+ expect(cookie).toContain("SameSite=Lax");
48
+ expect(cookie).toContain("Max-Age=900");
49
+ });
50
+ it("should pass sameSite through to the underlying cookie lib", () => {
51
+ adapter.set("x", "1", { ...defaultSetOptions, sameSite: "Strict" });
52
+ const result = adapter.stringifySetCookies();
53
+ expect(result.some((c) => c.includes("SameSite=Strict"))).toBe(true);
54
+ });
55
+ });
56
+ describe("remove", () => {
57
+ it("should make get return null for the removed cookie", () => {
58
+ adapter.remove("foo");
59
+ expect(adapter.get("foo")).toBeNull();
60
+ });
61
+ it("should exclude removed cookie from stringifyCookies", () => {
62
+ adapter.remove("foo");
63
+ const result = adapter.stringifyCookies();
64
+ expect(result).not.toContain("foo=");
65
+ expect(result).toContain("token=abc123");
66
+ });
67
+ it("should exclude removed cookie from stringifySetCookies", () => {
68
+ adapter.set("foo", "new", defaultSetOptions);
69
+ adapter.remove("foo");
70
+ const result = adapter.stringifySetCookies();
71
+ expect(result.every((c) => !c.includes("foo="))).toBe(true);
72
+ });
73
+ it("should be a no-op for a nonexistent cookie", () => {
74
+ adapter.remove("ghost");
75
+ expect(adapter.get("foo")).toBe("bar");
76
+ expect(adapter.get("token")).toBe("abc123");
77
+ });
78
+ });
79
+ describe("stringifySetCookies", () => {
80
+ it("should return empty array when no cookies were set", () => {
81
+ expect(adapter.stringifySetCookies()).toEqual([]);
82
+ });
83
+ it("should return one entry per set cookie", () => {
84
+ adapter.set("a", "1", defaultSetOptions);
85
+ adapter.set("b", "2", defaultSetOptions);
86
+ const result = adapter.stringifySetCookies();
87
+ expect(result).toHaveLength(2);
88
+ expect(result[0]).toContain("a=1");
89
+ expect(result[1]).toContain("b=2");
90
+ });
91
+ });
92
+ describe("stringifyCookies", () => {
93
+ it("should serialize initial cookies", () => {
94
+ const result = adapter.stringifyCookies();
95
+ expect(result).toContain("foo=bar");
96
+ expect(result).toContain("token=abc123");
97
+ });
98
+ it("should not include cookies added via set", () => {
99
+ adapter.set("extra", "yes", defaultSetOptions);
100
+ expect(adapter.stringifyCookies()).not.toContain("extra=yes");
101
+ });
102
+ it("should return empty string for empty adapter", () => {
103
+ const empty = new CookieStorageAdapter(makeRequest(""));
104
+ expect(empty.stringifyCookies()).toBe("");
105
+ });
106
+ });
107
+ describe("applyToResponse", () => {
108
+ it("should set Cookie header on response", () => {
109
+ const response = new Response();
110
+ adapter.applyToResponse(response);
111
+ const cookieHeader = response.headers.get("Cookie");
112
+ expect(cookieHeader).toContain("foo=bar");
113
+ expect(cookieHeader).toContain("token=abc123");
114
+ });
115
+ it("should set Set-Cookie header when cookies were set", () => {
116
+ adapter.set("sid", "session1", defaultSetOptions);
117
+ const response = new Response();
118
+ adapter.applyToResponse(response);
119
+ const setCookieHeader = response.headers.get("Set-Cookie");
120
+ expect(setCookieHeader).toContain("sid=session1");
121
+ });
122
+ it("should not set Set-Cookie header when no cookies were set", () => {
123
+ const response = new Response();
124
+ adapter.applyToResponse(response);
125
+ expect(response.headers.has("Set-Cookie")).toBe(false);
126
+ });
127
+ });
128
+ });
129
+ describe("createCookieStorageAdapter", () => {
130
+ it("should return a CookieStorageAdapter instance", () => {
131
+ const request = makeRequest("key=value");
132
+ const adapter = createCookieStorageAdapter(request);
133
+ expect(adapter).toBeInstanceOf(CookieStorageAdapter);
134
+ expect(adapter.get("key")).toBe("value");
135
+ });
136
+ });
137
+ //# sourceMappingURL=CookieStorageAdapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieStorageAdapter.test.js","sourceRoot":"","sources":["../src/CookieStorageAdapter.test.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,20 @@
1
- import type { JWTPayload, TokenManagerOptions, TokenPair } from "./types.js";
2
1
  import type { Client } from "./generated/client/index.js";
3
- export declare class TokenManager {
2
+ import type { AccessTokenPayload, JWTPayload, TokenManagerOptions, TokenPair } from "./types.js";
3
+ export declare class TokenManager<Payload extends Record<string, any> = Record<string, any>> {
4
4
  private readonly client;
5
5
  private readonly verifier;
6
6
  private readonly storage;
7
7
  constructor(client: Client, options: TokenManagerOptions);
8
8
  private requireStorage;
9
- readonly verifyToken: (token: string) => Promise<JWTPayload>;
9
+ readonly verifyToken: (token?: string) => Promise<AccessTokenPayload<Payload>>;
10
10
  readonly clearKeyCache: () => void;
11
11
  readonly save: (tokens: TokenPair) => void;
12
+ readonly setAccessToken: (accessToken: string) => void;
12
13
  readonly getAccessToken: () => string | null;
13
14
  readonly getRefreshToken: () => string | null;
15
+ readonly setRememberToken: (rememberToken: string) => void;
16
+ readonly getRememberToken: () => string | null;
17
+ readonly isAccessTokenExpired: () => Promise<boolean>;
14
18
  readonly getAll: () => TokenPair | null;
15
19
  readonly clear: () => void;
16
20
  readonly hasStorage: () => boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"TokenManager.d.ts","sourceRoot":"","sources":["../src/TokenManager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE7E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAE1D,qBAAa,YAAY;IAIX,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAEjB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB;IAOzE,OAAO,CAAC,cAAc;IAStB,QAAQ,CAAC,WAAW,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,UAAU,CAAC,CAC9B;IAEnC,QAAQ,CAAC,aAAa,QAAO,IAAI,CAAkC;IAEnE,QAAQ,CAAC,IAAI,GAAI,QAAQ,SAAS,KAAG,IAAI,CACJ;IAErC,QAAQ,CAAC,cAAc,QAAO,MAAM,GAAG,IAAI,CACF;IAEzC,QAAQ,CAAC,eAAe,QAAO,MAAM,GAAG,IAAI,CACF;IAE1C,QAAQ,CAAC,MAAM,QAAO,SAAS,GAAG,IAAI,CACL;IAEjC,QAAQ,CAAC,KAAK,QAAO,IAAI,CAAkC;IAE3D,QAAQ,CAAC,UAAU,QAAO,OAAO,CAA0B;IAE3D,QAAQ,CAAC,uBAAuB,QAAa,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAIrE;IAEI,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM;;;CAS/C"}
1
+ {"version":3,"file":"TokenManager.d.ts","sourceRoot":"","sources":["../src/TokenManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAI1D,OAAO,KAAK,EACV,kBAAkB,EAClB,UAAU,EACV,mBAAmB,EACnB,SAAS,EACV,MAAM,YAAY,CAAC;AAEpB,qBAAa,YAAY,CACvB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAMvD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;gBAG3B,MAAM,EAAE,MAAM,EAC/B,OAAO,EAAE,mBAAmB;IAQ9B,OAAO,CAAC,cAAc;IAStB,QAAQ,CAAC,WAAW,GAClB,QAAQ,MAAM,KACb,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAC2B;IAElE,QAAQ,CAAC,aAAa,QAAO,IAAI,CAAkC;IAEnE,QAAQ,CAAC,IAAI,GAAI,QAAQ,SAAS,KAAG,IAAI,CACJ;IAErC,QAAQ,CAAC,cAAc,GAAI,aAAa,MAAM,KAAG,IAAI,CACD;IAEpD,QAAQ,CAAC,cAAc,QAAO,MAAM,GAAG,IAAI,CACF;IAEzC,QAAQ,CAAC,eAAe,QAAO,MAAM,GAAG,IAAI,CACF;IAE1C,QAAQ,CAAC,gBAAgB,GAAI,eAAe,MAAM,KAAG,IAAI,CACD;IAExD,QAAQ,CAAC,gBAAgB,QAAO,MAAM,GAAG,IAAI,CACF;IAE3C,QAAQ,CAAC,oBAAoB,QAAa,OAAO,CAAC,OAAO,CAAC,CAKxD;IAEF,QAAQ,CAAC,MAAM,QAAO,SAAS,GAAG,IAAI,CAAmC;IAEzE,QAAQ,CAAC,KAAK,QAAO,IAAI,CAAkC;IAE3D,QAAQ,CAAC,UAAU,QAAO,OAAO,CAA0B;IAE3D,QAAQ,CAAC,uBAAuB,QAAa,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAIrE;IAEI,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM;;;CAS/C"}