@choiceform/shared-auth 0.1.17 → 0.1.19

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 (100) hide show
  1. package/README.md +504 -121
  2. package/dist/__tests__/auth-utils.test.d.ts +5 -0
  3. package/dist/__tests__/auth-utils.test.d.ts.map +1 -0
  4. package/dist/__tests__/auth-utils.test.js +96 -0
  5. package/dist/__tests__/store.test.d.ts +5 -0
  6. package/dist/__tests__/store.test.d.ts.map +1 -0
  7. package/dist/__tests__/store.test.js +210 -0
  8. package/dist/__tests__/user-mapper.test.d.ts +5 -0
  9. package/dist/__tests__/user-mapper.test.d.ts.map +1 -0
  10. package/dist/__tests__/user-mapper.test.js +76 -0
  11. package/dist/api/auth-api.d.ts +93 -9
  12. package/dist/api/auth-api.d.ts.map +1 -1
  13. package/dist/api/auth-api.js +219 -80
  14. package/dist/api/client.d.ts +10 -0
  15. package/dist/api/client.d.ts.map +1 -1
  16. package/dist/api/client.js +10 -0
  17. package/dist/api/organization-api.d.ts +2 -7
  18. package/dist/api/organization-api.d.ts.map +1 -1
  19. package/dist/api/organization-api.js +2 -17
  20. package/dist/api/team-api.d.ts +1 -5
  21. package/dist/api/team-api.d.ts.map +1 -1
  22. package/dist/api/team-api.js +5 -11
  23. package/dist/config.js +1 -1
  24. package/dist/core.d.ts +257 -137
  25. package/dist/core.d.ts.map +1 -1
  26. package/dist/core.js +112 -28
  27. package/dist/hooks/index.d.ts +8 -0
  28. package/dist/hooks/index.d.ts.map +1 -0
  29. package/dist/hooks/index.js +7 -0
  30. package/dist/hooks/use-auth-init.d.ts +4 -0
  31. package/dist/hooks/use-auth-init.d.ts.map +1 -1
  32. package/dist/hooks/use-auth-init.js +16 -21
  33. package/dist/hooks/use-auth-sync.d.ts +60 -0
  34. package/dist/hooks/use-auth-sync.d.ts.map +1 -0
  35. package/dist/hooks/use-auth-sync.js +116 -0
  36. package/dist/hooks/use-email-verification.d.ts +85 -0
  37. package/dist/hooks/use-email-verification.d.ts.map +1 -0
  38. package/dist/hooks/use-email-verification.js +145 -0
  39. package/dist/hooks/use-protected-route.d.ts +67 -0
  40. package/dist/hooks/use-protected-route.d.ts.map +1 -0
  41. package/dist/hooks/use-protected-route.js +102 -0
  42. package/dist/index.d.ts +12 -6
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +45 -13
  45. package/dist/init.d.ts +236 -136
  46. package/dist/init.d.ts.map +1 -1
  47. package/dist/lib/auth-client.d.ts +108 -66
  48. package/dist/lib/auth-client.d.ts.map +1 -1
  49. package/dist/lib/auth-client.js +75 -2
  50. package/dist/services/auth-service.d.ts +101 -0
  51. package/dist/services/auth-service.d.ts.map +1 -0
  52. package/dist/services/auth-service.js +356 -0
  53. package/dist/services/callback-service.d.ts +33 -0
  54. package/dist/services/callback-service.d.ts.map +1 -0
  55. package/dist/services/callback-service.js +473 -0
  56. package/dist/services/companion-team.d.ts.map +1 -1
  57. package/dist/services/companion-team.js +41 -39
  58. package/dist/services/index.d.ts +3 -0
  59. package/dist/services/index.d.ts.map +1 -1
  60. package/dist/services/index.js +3 -0
  61. package/dist/services/referral-service.d.ts +54 -0
  62. package/dist/services/referral-service.d.ts.map +1 -0
  63. package/dist/services/referral-service.js +54 -0
  64. package/dist/store/actions.d.ts +54 -51
  65. package/dist/store/actions.d.ts.map +1 -1
  66. package/dist/store/actions.js +111 -243
  67. package/dist/store/computed.d.ts +72 -1
  68. package/dist/store/computed.d.ts.map +1 -1
  69. package/dist/store/computed.js +90 -3
  70. package/dist/store/index.d.ts +3 -3
  71. package/dist/store/index.d.ts.map +1 -1
  72. package/dist/store/index.js +2 -2
  73. package/dist/store/state.d.ts +10 -0
  74. package/dist/store/state.d.ts.map +1 -1
  75. package/dist/store/state.js +11 -1
  76. package/dist/store/utils.d.ts +3 -34
  77. package/dist/store/utils.d.ts.map +1 -1
  78. package/dist/store/utils.js +2 -22
  79. package/dist/types/auth.d.ts +106 -0
  80. package/dist/types/auth.d.ts.map +1 -1
  81. package/dist/types/callback.d.ts +35 -0
  82. package/dist/types/callback.d.ts.map +1 -0
  83. package/dist/types/callback.js +1 -0
  84. package/dist/types/index.d.ts +4 -3
  85. package/dist/types/index.d.ts.map +1 -1
  86. package/dist/types/organization.d.ts +19 -3
  87. package/dist/types/organization.d.ts.map +1 -1
  88. package/dist/types/team.d.ts +6 -2
  89. package/dist/types/team.d.ts.map +1 -1
  90. package/dist/types/user.d.ts +11 -3
  91. package/dist/types/user.d.ts.map +1 -1
  92. package/dist/utils/auth-utils.d.ts +60 -0
  93. package/dist/utils/auth-utils.d.ts.map +1 -0
  94. package/dist/utils/auth-utils.js +146 -0
  95. package/dist/utils/index.d.ts +1 -0
  96. package/dist/utils/index.d.ts.map +1 -1
  97. package/dist/utils/index.js +1 -0
  98. package/dist/utils/user-mapper.d.ts.map +1 -1
  99. package/dist/utils/user-mapper.js +4 -1
  100. package/package.json +17 -10
@@ -1 +1 @@
1
- {"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../src/types/organization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../src/types/organization.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * 团队相关类型定义
3
3
  */
4
4
  export interface TeamMetadata {
5
+ [key: string]: unknown;
5
6
  color?: string;
6
7
  description?: string;
7
8
  image?: string;
@@ -9,12 +10,15 @@ export interface TeamMetadata {
9
10
  export interface Team {
10
11
  createdAt: string;
11
12
  id: string;
12
- metadata?: TeamMetadata;
13
+ /** 继承自用户 ID(伴生团队时存在) */
14
+ inherentFrom?: string;
15
+ metadata: TeamMetadata;
13
16
  name: string;
14
17
  organizationId: string;
15
18
  updatedAt?: string;
16
19
  }
17
20
  export interface CreateTeamRequest {
21
+ metadata?: TeamMetadata;
18
22
  name: string;
19
23
  organizationId?: string;
20
24
  }
@@ -30,7 +34,7 @@ export interface DeleteTeamRequest {
30
34
  teamId: string;
31
35
  }
32
36
  export interface SetActiveTeamRequest {
33
- teamId: string;
37
+ teamId: string | null;
34
38
  }
35
39
  export interface TeamMember {
36
40
  createdAt: string;
@@ -1 +1 @@
1
- {"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/types/team.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,QAAQ,CAAC,EAAE,YAAY,CAAA;QACvB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;CACf;AAMD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;CACf"}
1
+ {"version":3,"file":"team.d.ts","sourceRoot":"","sources":["../../src/types/team.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,IAAI;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,wBAAwB;IACxB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,YAAY,CAAA;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAA;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE;QACJ,QAAQ,CAAC,EAAE,YAAY,CAAA;QACvB,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAMD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;CACf"}
@@ -3,7 +3,9 @@
3
3
  */
4
4
  /** 用户 metadata */
5
5
  export interface SessionUserMetadata {
6
+ [key: string]: unknown;
6
7
  color?: string;
8
+ description?: string;
7
9
  }
8
10
  /** 会话用户信息 */
9
11
  export interface SessionUser {
@@ -17,13 +19,19 @@ export interface SessionUser {
17
19
  emailVerified: boolean;
18
20
  id: string;
19
21
  image?: string;
20
- /** 伴生组织 ID(固定不变) */
22
+ /** 伴生组织 ID(固定不变,onboard 后存在) */
21
23
  inherentOrganizationId?: string;
22
- /** 伴生团队 ID(固定不变) */
24
+ /** 伴生团队 ID(固定不变,onboard 后存在) */
23
25
  inherentTeamId?: string;
24
26
  lastLoginAt?: string;
25
- metadata?: SessionUserMetadata;
27
+ /** 最后登录方式(credential、github 等) */
28
+ lastLoginMethod?: string;
29
+ metadata: SessionUserMetadata;
26
30
  name: string;
31
+ /** 用户自己的邀请码(只读,注册时自动生成) */
32
+ referralCode?: string;
33
+ /** 推荐人的用户 ID */
34
+ referredBy?: string;
27
35
  role?: string;
28
36
  updatedAt: string;
29
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kBAAkB;AAClB,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,aAAa;AACb,MAAM,WAAW,WAAW;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,OAAO,CAAA;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,oBAAoB;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,mBAAmB,CAAA;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,0BAA0B;AAC1B,MAAM,WAAW,OAAO;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf"}
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,kBAAkB;AAClB,MAAM,WAAW,mBAAmB;IAClC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,aAAa;AACb,MAAM,WAAW,WAAW;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,OAAO,CAAA;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,gCAAgC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,gCAAgC;IAChC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,EAAE,mBAAmB,CAAA;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,gBAAgB;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,0BAA0B;AAC1B,MAAM,WAAW,OAAO;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,EAAE,EAAE,MAAM,CAAA;IACV,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * 认证工具函数
3
+ */
4
+ /**
5
+ * 验证邮箱格式
6
+ *
7
+ * @param email - 要验证的邮箱
8
+ * @returns 如果是有效的邮箱格式返回 true,否则返回 false
9
+ */
10
+ export declare function isValidEmail(email: string): boolean;
11
+ /**
12
+ * Better Auth 已知错误代码
13
+ */
14
+ export declare const AUTH_ERROR_CODES: readonly ["PASSWORD_TOO_SHORT", "PASSWORD_TOO_LONG", "INVALID_EMAIL_OR_PASSWORD", "INVALID_EMAIL", "INVALID_PASSWORD", "USER_NOT_FOUND", "USER_ALREADY_EXISTS", "EMAIL_NOT_VERIFIED", "TOO_MANY_REQUESTS", "INVALID_TOKEN", "SESSION_EXPIRED", "UNAUTHORIZED", "FORBIDDEN", "METADATA_IS_REQUIRED"];
15
+ export type AuthErrorCode = (typeof AUTH_ERROR_CODES)[number];
16
+ /**
17
+ * 解析的认证错误结构
18
+ */
19
+ export interface ParsedAuthError {
20
+ /** 错误代码(如果有) */
21
+ code: AuthErrorCode | null;
22
+ /** 是否是已知的错误代码 */
23
+ isKnownError: boolean;
24
+ /** 原始错误消息 */
25
+ message: string;
26
+ }
27
+ /**
28
+ * 解析 Better Auth 错误
29
+ *
30
+ * 支持的格式:
31
+ * - JSON: {"code":"PASSWORD_TOO_SHORT","message":"..."}
32
+ * - 纯文本错误消息
33
+ *
34
+ * 注意:此函数只解析错误,不翻译。翻译由项目自行处理。
35
+ *
36
+ * @param error - 错误字符串
37
+ * @returns 解析后的错误结构
38
+ */
39
+ export declare function parseAuthError(error: string | null): ParsedAuthError;
40
+ /**
41
+ * 检查错误是否是 token 过期
42
+ */
43
+ export declare function isTokenExpiredError(error: string | ParsedAuthError | null): boolean;
44
+ /**
45
+ * 从用户名生成邮箱本地部分(注册时如果没有提供 name,使用 email 前缀)
46
+ */
47
+ export declare function getNameFromEmail(email: string): string;
48
+ /**
49
+ * 构建带参数的 URL
50
+ */
51
+ export declare function buildAuthUrl(basePath: string, params: Record<string, string | undefined | null>): string;
52
+ /**
53
+ * 构建相对路径带参数
54
+ */
55
+ export declare function buildAuthPath(path: string, params: Record<string, string | undefined | null>): string;
56
+ /**
57
+ * 清除 URL 中的认证相关参数
58
+ */
59
+ export declare function clearAuthParams(): void;
60
+ //# sourceMappingURL=auth-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-utils.d.ts","sourceRoot":"","sources":["../../src/utils/auth-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,qSAenB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,gBAAgB;IAChB,IAAI,EAAE,aAAa,GAAG,IAAI,CAAA;IAC1B,iBAAiB;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,eAAe,CAsCpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,GAAG,OAAO,CAcnF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAChD,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,GAChD,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAiBtC"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * 认证工具函数
3
+ */
4
+ /**
5
+ * 验证邮箱格式
6
+ *
7
+ * @param email - 要验证的邮箱
8
+ * @returns 如果是有效的邮箱格式返回 true,否则返回 false
9
+ */
10
+ export function isValidEmail(email) {
11
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
12
+ return emailRegex.test(email);
13
+ }
14
+ /**
15
+ * Better Auth 已知错误代码
16
+ */
17
+ export const AUTH_ERROR_CODES = [
18
+ "PASSWORD_TOO_SHORT",
19
+ "PASSWORD_TOO_LONG",
20
+ "INVALID_EMAIL_OR_PASSWORD",
21
+ "INVALID_EMAIL",
22
+ "INVALID_PASSWORD",
23
+ "USER_NOT_FOUND",
24
+ "USER_ALREADY_EXISTS",
25
+ "EMAIL_NOT_VERIFIED",
26
+ "TOO_MANY_REQUESTS",
27
+ "INVALID_TOKEN",
28
+ "SESSION_EXPIRED",
29
+ "UNAUTHORIZED",
30
+ "FORBIDDEN",
31
+ "METADATA_IS_REQUIRED",
32
+ ];
33
+ /**
34
+ * 解析 Better Auth 错误
35
+ *
36
+ * 支持的格式:
37
+ * - JSON: {"code":"PASSWORD_TOO_SHORT","message":"..."}
38
+ * - 纯文本错误消息
39
+ *
40
+ * 注意:此函数只解析错误,不翻译。翻译由项目自行处理。
41
+ *
42
+ * @param error - 错误字符串
43
+ * @returns 解析后的错误结构
44
+ */
45
+ export function parseAuthError(error) {
46
+ if (!error) {
47
+ return { code: null, message: "", isKnownError: false };
48
+ }
49
+ // 尝试解析 JSON 格式的错误
50
+ try {
51
+ const parsed = JSON.parse(error);
52
+ if (parsed.code && typeof parsed.code === "string") {
53
+ const code = parsed.code;
54
+ const isKnown = AUTH_ERROR_CODES.includes(code);
55
+ return {
56
+ code: isKnown ? code : null,
57
+ message: parsed.message || error,
58
+ isKnownError: isKnown,
59
+ };
60
+ }
61
+ }
62
+ catch {
63
+ // 不是 JSON 格式
64
+ }
65
+ // 检查错误消息是否包含已知的错误代码
66
+ for (const code of AUTH_ERROR_CODES) {
67
+ if (error.includes(code)) {
68
+ return {
69
+ code,
70
+ message: error,
71
+ isKnownError: true,
72
+ };
73
+ }
74
+ }
75
+ // 返回原始错误消息
76
+ return {
77
+ code: null,
78
+ message: error,
79
+ isKnownError: false,
80
+ };
81
+ }
82
+ /**
83
+ * 检查错误是否是 token 过期
84
+ */
85
+ export function isTokenExpiredError(error) {
86
+ if (!error)
87
+ return false;
88
+ const parsed = typeof error === "string" ? parseAuthError(error) : error;
89
+ if (parsed.code === "INVALID_TOKEN" || parsed.code === "SESSION_EXPIRED") {
90
+ return true;
91
+ }
92
+ if (parsed.message.includes("expired")) {
93
+ return true;
94
+ }
95
+ return false;
96
+ }
97
+ /**
98
+ * 从用户名生成邮箱本地部分(注册时如果没有提供 name,使用 email 前缀)
99
+ */
100
+ export function getNameFromEmail(email) {
101
+ return email.split("@")[0] || "";
102
+ }
103
+ /**
104
+ * 构建带参数的 URL
105
+ */
106
+ export function buildAuthUrl(basePath, params) {
107
+ const url = new URL(basePath, window.location.origin);
108
+ for (const [key, value] of Object.entries(params)) {
109
+ if (value !== undefined && value !== null) {
110
+ url.searchParams.set(key, value);
111
+ }
112
+ }
113
+ return url.toString();
114
+ }
115
+ /**
116
+ * 构建相对路径带参数
117
+ */
118
+ export function buildAuthPath(path, params) {
119
+ const searchParams = new URLSearchParams();
120
+ for (const [key, value] of Object.entries(params)) {
121
+ if (value !== undefined && value !== null) {
122
+ searchParams.set(key, value);
123
+ }
124
+ }
125
+ const queryString = searchParams.toString();
126
+ return queryString ? `${path}?${queryString}` : path;
127
+ }
128
+ /**
129
+ * 清除 URL 中的认证相关参数
130
+ */
131
+ export function clearAuthParams() {
132
+ if (typeof window === "undefined")
133
+ return;
134
+ const url = new URL(window.location.href);
135
+ const paramsToRemove = ["token", "isNew", "type", "error"];
136
+ let hasChanges = false;
137
+ for (const param of paramsToRemove) {
138
+ if (url.searchParams.has(param)) {
139
+ url.searchParams.delete(param);
140
+ hasChanges = true;
141
+ }
142
+ }
143
+ if (hasChanges) {
144
+ window.history.replaceState({}, "", url.pathname + url.search);
145
+ }
146
+ }
@@ -4,4 +4,5 @@
4
4
  export { toISOString } from "./date";
5
5
  export { isDev, getEnvVar, getAuthBaseUrl } from "./env";
6
6
  export { extractSessionUser } from "./user-mapper";
7
+ export { isValidEmail, parseAuthError, isTokenExpiredError, getNameFromEmail, buildAuthUrl, buildAuthPath, clearAuthParams, AUTH_ERROR_CODES, type AuthErrorCode, type ParsedAuthError, } from "./auth-utils";
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,OAAO,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EACL,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAA"}
@@ -4,3 +4,4 @@
4
4
  export { toISOString } from "./date";
5
5
  export { isDev, getEnvVar, getAuthBaseUrl } from "./env";
6
6
  export { extractSessionUser } from "./user-mapper";
7
+ export { isValidEmail, parseAuthError, isTokenExpiredError, getNameFromEmail, buildAuthUrl, buildAuthPath, clearAuthParams, AUTH_ERROR_CODES, } from "./auth-utils";
@@ -1 +1 @@
1
- {"version":3,"file":"user-mapper.d.ts","sourceRoot":"","sources":["../../src/utils/user-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAA;AAEhE;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAyC5E"}
1
+ {"version":3,"file":"user-mapper.d.ts","sourceRoot":"","sources":["../../src/utils/user-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAuB,MAAM,UAAU,CAAA;AAEhE;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CA4C5E"}
@@ -47,8 +47,11 @@ export function extractSessionUser(responseData) {
47
47
  inherentOrganizationId: user.inherentOrganizationId,
48
48
  inherentTeamId: user.inherentTeamId,
49
49
  lastLoginAt: session?.createdAt ? String(session.createdAt) : undefined,
50
- metadata: user.metadata,
50
+ lastLoginMethod: user.lastLoginMethod,
51
+ metadata: user.metadata ?? {},
51
52
  name: user.name ?? "",
53
+ referralCode: user.referralCode,
54
+ referredBy: user.referredBy,
52
55
  role: user.role,
53
56
  updatedAt: String(user.updatedAt ?? ""),
54
57
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@choiceform/shared-auth",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "Shared authentication package for Choiceform projects",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,12 +16,6 @@
16
16
  "dist",
17
17
  "README.md"
18
18
  ],
19
- "scripts": {
20
- "build": "tsc",
21
- "dev": "tsc --watch",
22
- "clean": "rimraf dist",
23
- "prepublishOnly": "pnpm run build"
24
- },
25
19
  "repository": {
26
20
  "type": "git",
27
21
  "url": "git+https://github.com/choiceform/automation.git",
@@ -45,15 +39,28 @@
45
39
  "better-auth": "^1.4.4"
46
40
  },
47
41
  "peerDependencies": {
48
- "@legendapp/state": "v3.0.0-beta.26",
42
+ "@legendapp/state": "v3.0.0-beta.30",
49
43
  "better-auth": "^1.4.4",
50
44
  "react": ">=18.0.0",
51
45
  "react-dom": ">=18.0.0"
52
46
  },
53
47
  "devDependencies": {
48
+ "@legendapp/state": "v3.0.0-beta.30",
49
+ "@testing-library/react": "^16.3.0",
54
50
  "@types/react": "18.2.71",
55
51
  "@types/react-dom": "18.2.22",
52
+ "happy-dom": "^18.0.1",
53
+ "react": "18.2.0",
54
+ "react-dom": "18.2.0",
55
+ "rimraf": "^6.0.1",
56
56
  "typescript": "^5.5.3",
57
- "rimraf": "^6.0.1"
57
+ "vitest": "^3.2.4"
58
+ },
59
+ "scripts": {
60
+ "build": "tsc",
61
+ "dev": "tsc --watch",
62
+ "clean": "rimraf dist",
63
+ "test": "vitest run",
64
+ "test:watch": "vitest"
58
65
  }
59
- }
66
+ }