@choiceform/shared-auth 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -450
- package/dist/api/auth-api.d.ts +28 -0
- package/dist/api/auth-api.d.ts.map +1 -0
- package/dist/api/auth-api.js +133 -0
- package/dist/api/client.d.ts +34 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +104 -0
- package/dist/api/index.d.ts +12 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +7 -0
- package/dist/api/organization-api.d.ts +96 -0
- package/dist/api/organization-api.d.ts.map +1 -0
- package/dist/api/organization-api.js +228 -0
- package/dist/api/team-api.d.ts +57 -0
- package/dist/api/team-api.d.ts.map +1 -0
- package/dist/api/team-api.js +118 -0
- package/dist/config.d.ts +4 -50
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -6
- package/dist/core.d.ts +307 -1717
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +35 -17
- package/dist/index.d.ts +11 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -12
- package/dist/init.d.ts +326 -1732
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +13 -14
- package/dist/lib/auth-client.d.ts +232 -1689
- package/dist/lib/auth-client.d.ts.map +1 -1
- package/dist/lib/auth-client.js +10 -16
- package/dist/services/companion-team.d.ts +16 -0
- package/dist/services/companion-team.d.ts.map +1 -0
- package/dist/services/companion-team.js +73 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +4 -0
- package/dist/store/actions.d.ts +45 -30
- package/dist/store/actions.d.ts.map +1 -1
- package/dist/store/actions.js +139 -103
- package/dist/store/index.d.ts +8 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +7 -0
- package/dist/store/state.d.ts +10 -7
- package/dist/store/state.d.ts.map +1 -1
- package/dist/store/state.js +31 -23
- package/dist/store/utils.d.ts +22 -71
- package/dist/store/utils.d.ts.map +1 -1
- package/dist/store/utils.js +28 -146
- package/dist/types/auth.d.ts +107 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +4 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/organization.d.ts +111 -0
- package/dist/types/organization.d.ts.map +1 -0
- package/dist/types/organization.js +4 -0
- package/dist/types/team.d.ts +52 -0
- package/dist/types/team.d.ts.map +1 -0
- package/dist/types/team.js +4 -0
- package/dist/types/user.d.ts +44 -0
- package/dist/types/user.d.ts.map +1 -0
- package/dist/types/user.js +4 -0
- package/dist/utils/date.d.ts +10 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +13 -0
- package/dist/utils/env.d.ts +20 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/env.js +23 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/user-mapper.d.ts +21 -0
- package/dist/utils/user-mapper.d.ts.map +1 -0
- package/dist/utils/user-mapper.js +55 -0
- package/package.json +3 -4
- package/dist/components/auth-sync.d.ts +0 -25
- package/dist/components/auth-sync.d.ts.map +0 -1
- package/dist/components/auth-sync.js +0 -346
- package/dist/components/protected-route.d.ts +0 -18
- package/dist/components/protected-route.d.ts.map +0 -1
- package/dist/components/protected-route.js +0 -34
- package/dist/components/sign-in-page.d.ts +0 -21
- package/dist/components/sign-in-page.d.ts.map +0 -1
- package/dist/components/sign-in-page.js +0 -31
- package/dist/core/init-auth-sync.d.ts +0 -7
- package/dist/core/init-auth-sync.d.ts.map +0 -1
- package/dist/core/init-auth-sync.js +0 -34
- package/dist/types.d.ts +0 -87
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -4
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 组织相关类型定义
|
|
3
|
+
*/
|
|
4
|
+
export interface Organization {
|
|
5
|
+
createdAt: string;
|
|
6
|
+
id?: string;
|
|
7
|
+
logo?: string;
|
|
8
|
+
metadata?: string;
|
|
9
|
+
name: string;
|
|
10
|
+
slug?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CreateOrganizationRequest {
|
|
13
|
+
keepCurrentActiveOrganization?: boolean;
|
|
14
|
+
logo?: string;
|
|
15
|
+
metadata?: string;
|
|
16
|
+
name: string;
|
|
17
|
+
slug: string;
|
|
18
|
+
userId?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface UpdateOrganizationRequest {
|
|
21
|
+
data: Partial<Pick<Organization, "name" | "slug" | "logo" | "metadata">>;
|
|
22
|
+
organizationId?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface DeleteOrganizationRequest {
|
|
25
|
+
organizationId: string;
|
|
26
|
+
}
|
|
27
|
+
export interface SetActiveOrganizationRequest {
|
|
28
|
+
organizationId?: string;
|
|
29
|
+
organizationSlug?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CheckSlugRequest {
|
|
32
|
+
slug: string;
|
|
33
|
+
}
|
|
34
|
+
export type MemberRole = "owner" | "admin" | "member" | "guest";
|
|
35
|
+
export interface Member {
|
|
36
|
+
createdAt: string;
|
|
37
|
+
id?: string;
|
|
38
|
+
organizationId: string;
|
|
39
|
+
role: MemberRole;
|
|
40
|
+
userId: string;
|
|
41
|
+
}
|
|
42
|
+
/** 用户 metadata(嵌入在成员中) */
|
|
43
|
+
export interface UserMetadata {
|
|
44
|
+
color?: string;
|
|
45
|
+
}
|
|
46
|
+
/** 成员关联的用户信息 */
|
|
47
|
+
export interface MemberUser {
|
|
48
|
+
createdAt: string;
|
|
49
|
+
email: string;
|
|
50
|
+
emailVerified: boolean;
|
|
51
|
+
id: string;
|
|
52
|
+
image?: string;
|
|
53
|
+
metadata?: UserMetadata;
|
|
54
|
+
name: string;
|
|
55
|
+
updatedAt: string;
|
|
56
|
+
}
|
|
57
|
+
/** 包含用户信息的成员 */
|
|
58
|
+
export interface MemberWithUser extends Member {
|
|
59
|
+
user: MemberUser;
|
|
60
|
+
}
|
|
61
|
+
/** 完整组织信息(含成员和邀请列表) */
|
|
62
|
+
export interface FullOrganization extends Organization {
|
|
63
|
+
invitations?: Invitation[];
|
|
64
|
+
members: MemberWithUser[];
|
|
65
|
+
}
|
|
66
|
+
export interface RemoveMemberRequest {
|
|
67
|
+
memberIdOrEmail: string;
|
|
68
|
+
organizationId?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface UpdateMemberRoleRequest {
|
|
71
|
+
memberId: string;
|
|
72
|
+
organizationId?: string;
|
|
73
|
+
role: MemberRole;
|
|
74
|
+
}
|
|
75
|
+
export type InvitationStatus = "pending" | "accepted" | "rejected" | "canceled";
|
|
76
|
+
export interface Invitation {
|
|
77
|
+
email: string;
|
|
78
|
+
expiresAt: string;
|
|
79
|
+
id?: string;
|
|
80
|
+
inviterId: string;
|
|
81
|
+
organizationId: string;
|
|
82
|
+
role?: MemberRole;
|
|
83
|
+
status: InvitationStatus;
|
|
84
|
+
teamId?: string;
|
|
85
|
+
}
|
|
86
|
+
export interface InvitationDetail extends Invitation {
|
|
87
|
+
inviterEmail: string;
|
|
88
|
+
organizationName: string;
|
|
89
|
+
organizationSlug: string;
|
|
90
|
+
}
|
|
91
|
+
export interface InviteMemberRequest {
|
|
92
|
+
email: string;
|
|
93
|
+
organizationId?: string;
|
|
94
|
+
resend?: boolean;
|
|
95
|
+
role: MemberRole;
|
|
96
|
+
teamId?: string;
|
|
97
|
+
}
|
|
98
|
+
export interface CancelInvitationRequest {
|
|
99
|
+
invitationId: string;
|
|
100
|
+
}
|
|
101
|
+
export interface AcceptInvitationRequest {
|
|
102
|
+
invitationId: string;
|
|
103
|
+
}
|
|
104
|
+
export interface RejectInvitationRequest {
|
|
105
|
+
invitationId: string;
|
|
106
|
+
}
|
|
107
|
+
export interface InvitationResponse {
|
|
108
|
+
invitation: Invitation;
|
|
109
|
+
member: Member | null;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=organization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization.d.ts","sourceRoot":"","sources":["../../src/types/organization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 团队相关类型定义
|
|
3
|
+
*/
|
|
4
|
+
export interface TeamMetadata {
|
|
5
|
+
color?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
image?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface Team {
|
|
10
|
+
createdAt: string;
|
|
11
|
+
id: string;
|
|
12
|
+
metadata?: TeamMetadata;
|
|
13
|
+
name: string;
|
|
14
|
+
organizationId: string;
|
|
15
|
+
updatedAt?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface CreateTeamRequest {
|
|
18
|
+
name: string;
|
|
19
|
+
organizationId?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface UpdateTeamRequest {
|
|
22
|
+
data: {
|
|
23
|
+
metadata?: TeamMetadata;
|
|
24
|
+
name?: string;
|
|
25
|
+
};
|
|
26
|
+
teamId: string;
|
|
27
|
+
}
|
|
28
|
+
export interface DeleteTeamRequest {
|
|
29
|
+
organizationId?: string;
|
|
30
|
+
teamId: string;
|
|
31
|
+
}
|
|
32
|
+
export interface SetActiveTeamRequest {
|
|
33
|
+
teamId: string;
|
|
34
|
+
}
|
|
35
|
+
export interface TeamMember {
|
|
36
|
+
createdAt: string;
|
|
37
|
+
id: string;
|
|
38
|
+
teamId: string;
|
|
39
|
+
userId: string;
|
|
40
|
+
}
|
|
41
|
+
export interface AddTeamMemberRequest {
|
|
42
|
+
teamId: string;
|
|
43
|
+
userId: string;
|
|
44
|
+
}
|
|
45
|
+
export interface RemoveTeamMemberRequest {
|
|
46
|
+
teamId: string;
|
|
47
|
+
userId: string;
|
|
48
|
+
}
|
|
49
|
+
export interface ListTeamMembersRequest {
|
|
50
|
+
teamId: string;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=team.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用户和会话类型定义
|
|
3
|
+
*/
|
|
4
|
+
/** 用户 metadata */
|
|
5
|
+
export interface SessionUserMetadata {
|
|
6
|
+
color?: string;
|
|
7
|
+
}
|
|
8
|
+
/** 会话用户信息 */
|
|
9
|
+
export interface SessionUser {
|
|
10
|
+
activeOrganizationId?: string;
|
|
11
|
+
activeTeamId?: string;
|
|
12
|
+
banExpires?: string;
|
|
13
|
+
banReason?: string;
|
|
14
|
+
banned?: boolean;
|
|
15
|
+
createdAt: string;
|
|
16
|
+
email: string;
|
|
17
|
+
emailVerified: boolean;
|
|
18
|
+
id: string;
|
|
19
|
+
image?: string;
|
|
20
|
+
/** 伴生组织 ID(固定不变) */
|
|
21
|
+
inherentOrganizationId?: string;
|
|
22
|
+
/** 伴生团队 ID(固定不变) */
|
|
23
|
+
inherentTeamId?: string;
|
|
24
|
+
lastLoginAt?: string;
|
|
25
|
+
metadata?: SessionUserMetadata;
|
|
26
|
+
name: string;
|
|
27
|
+
role?: string;
|
|
28
|
+
updatedAt: string;
|
|
29
|
+
}
|
|
30
|
+
/** Better Auth Session */
|
|
31
|
+
export interface Session {
|
|
32
|
+
activeOrganizationId?: string;
|
|
33
|
+
activeTeamId?: string;
|
|
34
|
+
createdAt: string;
|
|
35
|
+
expiresAt: string;
|
|
36
|
+
id: string;
|
|
37
|
+
ipAddress?: string;
|
|
38
|
+
token: string;
|
|
39
|
+
updatedAt: string;
|
|
40
|
+
user: SessionUser;
|
|
41
|
+
userAgent?: string;
|
|
42
|
+
userId: string;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=user.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/utils/date.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG/E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 日期工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 将日期转换为 ISO 字符串
|
|
6
|
+
* @param date - 日期字符串或 Date 对象
|
|
7
|
+
* @returns ISO 格式的日期字符串,如果输入为空则返回 undefined
|
|
8
|
+
*/
|
|
9
|
+
export function toISOString(date) {
|
|
10
|
+
if (!date)
|
|
11
|
+
return undefined;
|
|
12
|
+
return typeof date === "string" ? date : new Date(date).toISOString();
|
|
13
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 环境变量工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 检查是否为开发环境
|
|
6
|
+
*/
|
|
7
|
+
export declare const isDev: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* 安全获取环境变量
|
|
10
|
+
* @param key - 环境变量名
|
|
11
|
+
* @returns 环境变量值,不存在则返回 undefined
|
|
12
|
+
*/
|
|
13
|
+
export declare function getEnvVar(key: string): string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* 获取 OneAuth API 基础 URL
|
|
16
|
+
* @param fallback - 默认值
|
|
17
|
+
* @returns OneAuth API 基础 URL
|
|
18
|
+
*/
|
|
19
|
+
export declare function getAuthBaseUrl(fallback?: string): string;
|
|
20
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,eAAO,MAAM,KAAK,SAAiE,CAAA;AAEnF;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,QAAQ,SAAkC,GAAG,MAAM,CAEjF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 环境变量工具函数
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* 检查是否为开发环境
|
|
6
|
+
*/
|
|
7
|
+
export const isDev = import.meta.env?.DEV ?? false;
|
|
8
|
+
/**
|
|
9
|
+
* 安全获取环境变量
|
|
10
|
+
* @param key - 环境变量名
|
|
11
|
+
* @returns 环境变量值,不存在则返回 undefined
|
|
12
|
+
*/
|
|
13
|
+
export function getEnvVar(key) {
|
|
14
|
+
return import.meta.env?.[key];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 获取 OneAuth API 基础 URL
|
|
18
|
+
* @param fallback - 默认值
|
|
19
|
+
* @returns OneAuth API 基础 URL
|
|
20
|
+
*/
|
|
21
|
+
export function getAuthBaseUrl(fallback = "https://oneauth.choiceform.io") {
|
|
22
|
+
return getEnvVar("VITE_ONEAUTH_BASE_URL") || fallback;
|
|
23
|
+
}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用户数据提取工具
|
|
3
|
+
*
|
|
4
|
+
* 从 better-auth API 响应中提取用户数据
|
|
5
|
+
* 由于 auth server 也是基于 better-auth,数据结构是一致的,
|
|
6
|
+
* 这里只做简单的数据提取和类型断言
|
|
7
|
+
*/
|
|
8
|
+
import type { SessionUser } from "../types";
|
|
9
|
+
/**
|
|
10
|
+
* 从服务器响应中提取用户数据
|
|
11
|
+
*
|
|
12
|
+
* 支持的数据结构:
|
|
13
|
+
* - 标准格式: { user: {...}, session: {...} }
|
|
14
|
+
* - 嵌套格式: { session: { user: {...} } }
|
|
15
|
+
* - 包装格式: { data: { user: {...} } }
|
|
16
|
+
*
|
|
17
|
+
* @param responseData - 服务器返回的响应数据
|
|
18
|
+
* @returns SessionUser 对象,失败返回 null
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractSessionUser(responseData: unknown): SessionUser | null;
|
|
21
|
+
//# sourceMappingURL=user-mapper.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 用户数据提取工具
|
|
3
|
+
*
|
|
4
|
+
* 从 better-auth API 响应中提取用户数据
|
|
5
|
+
* 由于 auth server 也是基于 better-auth,数据结构是一致的,
|
|
6
|
+
* 这里只做简单的数据提取和类型断言
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 从服务器响应中提取用户数据
|
|
10
|
+
*
|
|
11
|
+
* 支持的数据结构:
|
|
12
|
+
* - 标准格式: { user: {...}, session: {...} }
|
|
13
|
+
* - 嵌套格式: { session: { user: {...} } }
|
|
14
|
+
* - 包装格式: { data: { user: {...} } }
|
|
15
|
+
*
|
|
16
|
+
* @param responseData - 服务器返回的响应数据
|
|
17
|
+
* @returns SessionUser 对象,失败返回 null
|
|
18
|
+
*/
|
|
19
|
+
export function extractSessionUser(responseData) {
|
|
20
|
+
if (!responseData || typeof responseData !== "object")
|
|
21
|
+
return null;
|
|
22
|
+
const data = responseData;
|
|
23
|
+
// 尝试从不同的数据结构中提取用户信息
|
|
24
|
+
const rawUser = data.user || // 标准格式
|
|
25
|
+
data.session?.user || // 嵌套格式
|
|
26
|
+
data.data?.user; // 包装格式
|
|
27
|
+
if (!rawUser || typeof rawUser !== "object")
|
|
28
|
+
return null;
|
|
29
|
+
const user = rawUser;
|
|
30
|
+
// 验证必需字段
|
|
31
|
+
if (!user.id || !user.email)
|
|
32
|
+
return null;
|
|
33
|
+
// 提取 session 相关数据
|
|
34
|
+
const session = data.session;
|
|
35
|
+
// 直接返回,利用 better-auth 返回的数据结构
|
|
36
|
+
return {
|
|
37
|
+
activeOrganizationId: session?.activeOrganizationId,
|
|
38
|
+
activeTeamId: session?.activeTeamId,
|
|
39
|
+
banExpires: user.banExpires,
|
|
40
|
+
banReason: user.banReason,
|
|
41
|
+
banned: user.banned,
|
|
42
|
+
createdAt: String(user.createdAt ?? ""),
|
|
43
|
+
email: user.email,
|
|
44
|
+
emailVerified: user.emailVerified ?? false,
|
|
45
|
+
id: user.id,
|
|
46
|
+
image: user.image ?? undefined,
|
|
47
|
+
inherentOrganizationId: user.inherentOrganizationId,
|
|
48
|
+
inherentTeamId: user.inherentTeamId,
|
|
49
|
+
lastLoginAt: session?.createdAt ? String(session.createdAt) : undefined,
|
|
50
|
+
metadata: user.metadata,
|
|
51
|
+
name: user.name ?? "",
|
|
52
|
+
role: user.role,
|
|
53
|
+
updatedAt: String(user.updatedAt ?? ""),
|
|
54
|
+
};
|
|
55
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@choiceform/shared-auth",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.15",
|
|
4
4
|
"description": "Shared authentication package for Choiceform projects",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -42,12 +42,11 @@
|
|
|
42
42
|
"access": "public"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"better-auth": "^1.
|
|
45
|
+
"better-auth": "^1.4.4"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
48
|
-
"@choiceform/design-system": "^1.2.64",
|
|
49
48
|
"@legendapp/state": "v3.0.0-beta.26",
|
|
50
|
-
"better-auth": "^1.
|
|
49
|
+
"better-auth": "^1.4.4",
|
|
51
50
|
"react": ">=18.0.0",
|
|
52
51
|
"react-dom": ">=18.0.0"
|
|
53
52
|
},
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { AuthInstance } from "../core";
|
|
2
|
-
/**
|
|
3
|
-
* Better Auth 认证状态同步组件
|
|
4
|
-
*
|
|
5
|
-
* 功能说明:
|
|
6
|
-
* - 使用 better-auth 的 useSession hook 同步认证状态到 Legend State
|
|
7
|
-
* - 监听 authStore 状态,在用户登录成功后自动设置组织/团队上下文
|
|
8
|
-
* - 确保登录流程的完整性和权限上下文的正确性
|
|
9
|
-
*
|
|
10
|
-
* 技术实现:
|
|
11
|
-
* - 使用 Legend State 的 use$ hook 响应式监听状态变化
|
|
12
|
-
* - 使用 useRef 确保组织/团队设置只执行一次
|
|
13
|
-
* - 使用 useCallback 缓存映射函数,避免不必要的重渲染
|
|
14
|
-
* - 分离 session 同步和团队设置的逻辑,保持代码清晰
|
|
15
|
-
*
|
|
16
|
-
* 边缘情况处理:
|
|
17
|
-
* - Session 加载中:设置 loading 状态
|
|
18
|
-
* - Session 错误:清空用户信息,重置团队设置状态
|
|
19
|
-
* - 无 Session 但有用户:保持用户信息(可能从 token 加载)
|
|
20
|
-
* - 用户登出:重置团队设置状态,允许下次登录时重新设置
|
|
21
|
-
*/
|
|
22
|
-
export declare function AuthSync({ auth }: {
|
|
23
|
-
auth: AuthInstance;
|
|
24
|
-
}): null;
|
|
25
|
-
//# sourceMappingURL=auth-sync.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-sync.d.ts","sourceRoot":"","sources":["../../src/components/auth-sync.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAoS3C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,QA0FxD"}
|