@choiceform/shared-auth 0.1.14 → 0.1.16

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 (95) hide show
  1. package/README.md +106 -450
  2. package/dist/api/auth-api.d.ts +28 -0
  3. package/dist/api/auth-api.d.ts.map +1 -0
  4. package/dist/api/auth-api.js +133 -0
  5. package/dist/api/client.d.ts +34 -0
  6. package/dist/api/client.d.ts.map +1 -0
  7. package/dist/api/client.js +104 -0
  8. package/dist/api/index.d.ts +12 -0
  9. package/dist/api/index.d.ts.map +1 -0
  10. package/dist/api/index.js +7 -0
  11. package/dist/api/organization-api.d.ts +96 -0
  12. package/dist/api/organization-api.d.ts.map +1 -0
  13. package/dist/api/organization-api.js +228 -0
  14. package/dist/api/team-api.d.ts +57 -0
  15. package/dist/api/team-api.d.ts.map +1 -0
  16. package/dist/api/team-api.js +118 -0
  17. package/dist/config.d.ts +4 -57
  18. package/dist/config.d.ts.map +1 -1
  19. package/dist/config.js +4 -6
  20. package/dist/core.d.ts +114 -72
  21. package/dist/core.d.ts.map +1 -1
  22. package/dist/core.js +35 -17
  23. package/dist/hooks/use-auth-init.d.ts +10 -0
  24. package/dist/hooks/use-auth-init.d.ts.map +1 -1
  25. package/dist/hooks/use-auth-init.js +59 -31
  26. package/dist/index.d.ts +12 -15
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +26 -13
  29. package/dist/init.d.ts +133 -92
  30. package/dist/init.d.ts.map +1 -1
  31. package/dist/init.js +12 -14
  32. package/dist/lib/auth-client.d.ts +49 -54
  33. package/dist/lib/auth-client.d.ts.map +1 -1
  34. package/dist/lib/auth-client.js +10 -16
  35. package/dist/services/companion-team.d.ts +16 -0
  36. package/dist/services/companion-team.d.ts.map +1 -0
  37. package/dist/services/companion-team.js +73 -0
  38. package/dist/services/index.d.ts +5 -0
  39. package/dist/services/index.d.ts.map +1 -0
  40. package/dist/services/index.js +4 -0
  41. package/dist/store/actions.d.ts +45 -33
  42. package/dist/store/actions.d.ts.map +1 -1
  43. package/dist/store/actions.js +135 -106
  44. package/dist/store/index.d.ts +8 -0
  45. package/dist/store/index.d.ts.map +1 -0
  46. package/dist/store/index.js +7 -0
  47. package/dist/store/state.d.ts +10 -7
  48. package/dist/store/state.d.ts.map +1 -1
  49. package/dist/store/state.js +31 -23
  50. package/dist/store/utils.d.ts +22 -71
  51. package/dist/store/utils.d.ts.map +1 -1
  52. package/dist/store/utils.js +28 -146
  53. package/dist/types/auth.d.ts +107 -0
  54. package/dist/types/auth.d.ts.map +1 -0
  55. package/dist/types/auth.js +4 -0
  56. package/dist/types/index.d.ts +8 -0
  57. package/dist/types/index.d.ts.map +1 -0
  58. package/dist/types/index.js +4 -0
  59. package/dist/types/organization.d.ts +111 -0
  60. package/dist/types/organization.d.ts.map +1 -0
  61. package/dist/types/organization.js +4 -0
  62. package/dist/types/team.d.ts +52 -0
  63. package/dist/types/team.d.ts.map +1 -0
  64. package/dist/types/team.js +4 -0
  65. package/dist/types/user.d.ts +44 -0
  66. package/dist/types/user.d.ts.map +1 -0
  67. package/dist/types/user.js +4 -0
  68. package/dist/utils/date.d.ts +10 -0
  69. package/dist/utils/date.d.ts.map +1 -0
  70. package/dist/utils/date.js +13 -0
  71. package/dist/utils/env.d.ts +20 -0
  72. package/dist/utils/env.d.ts.map +1 -0
  73. package/dist/utils/env.js +23 -0
  74. package/dist/utils/index.d.ts +7 -0
  75. package/dist/utils/index.d.ts.map +1 -0
  76. package/dist/utils/index.js +6 -0
  77. package/dist/utils/user-mapper.d.ts +21 -0
  78. package/dist/utils/user-mapper.d.ts.map +1 -0
  79. package/dist/utils/user-mapper.js +55 -0
  80. package/package.json +3 -4
  81. package/dist/components/auth-sync.d.ts +0 -25
  82. package/dist/components/auth-sync.d.ts.map +0 -1
  83. package/dist/components/auth-sync.js +0 -346
  84. package/dist/components/protected-route.d.ts +0 -18
  85. package/dist/components/protected-route.d.ts.map +0 -1
  86. package/dist/components/protected-route.js +0 -34
  87. package/dist/components/sign-in-page.d.ts +0 -21
  88. package/dist/components/sign-in-page.d.ts.map +0 -1
  89. package/dist/components/sign-in-page.js +0 -31
  90. package/dist/core/init-auth-sync.d.ts +0 -7
  91. package/dist/core/init-auth-sync.d.ts.map +0 -1
  92. package/dist/core/init-auth-sync.js +0 -34
  93. package/dist/types.d.ts +0 -87
  94. package/dist/types.d.ts.map +0 -1
  95. package/dist/types.js +0 -4
@@ -1,198 +1,80 @@
1
1
  /**
2
- * 获取当前用户
2
+ * Store 工具函数
3
3
  */
4
4
  export function getCurrentUser(authStore) {
5
5
  return authStore.user.get();
6
6
  }
7
- /**
8
- * 获取当前用户ID
9
- */
10
7
  export function getCurrentUserId(authStore) {
11
- return authStore.user.get()?.id || null;
12
- }
13
- /**
14
- * 安全获取当前用户ID
15
- */
16
- export function getCurrentUserIdSafe(authStore) {
17
- return getCurrentUserId(authStore);
8
+ return authStore.user.get()?.id ?? null;
18
9
  }
19
- /**
20
- * 检查是否已认证
21
- */
22
10
  export function isAuthenticated(authStore) {
23
11
  return authStore.isAuthenticated.get();
24
12
  }
25
- /**
26
- * 检查是否正在加载
27
- */
28
13
  export function isLoading(authStore) {
29
14
  return authStore.loading.get();
30
15
  }
31
- /**
32
- * 检查是否已加载
33
- */
34
16
  export function isLoaded(authStore) {
35
17
  return authStore.isLoaded.get();
36
18
  }
37
- /**
38
- * 等待认证完成
39
- * 使用轮询方式检查认证状态(简单但有效)
40
- *
41
- * 注意:如果长时间未加载,Promise 不会自动 reject
42
- * 建议在外层添加超时处理
43
- */
44
19
  export async function waitForAuth(authStore) {
20
+ if (authStore.isLoaded.get())
21
+ return;
45
22
  return new Promise((resolve) => {
46
- // 如果已经加载,立即 resolve
47
- if (authStore.isLoaded.get()) {
48
- resolve();
49
- return;
50
- }
51
- const checkAuth = () => {
23
+ const check = () => {
52
24
  if (authStore.isLoaded.get()) {
53
25
  resolve();
54
26
  }
55
27
  else {
56
- setTimeout(checkAuth, 100);
28
+ setTimeout(check, 100);
57
29
  }
58
30
  };
59
- checkAuth();
31
+ check();
60
32
  });
61
33
  }
62
- /**
63
- * 获取认证令牌
64
- */
65
- export async function getAuthToken(authStore, tokenStorage, authActions, authClient) {
66
- // 首先从存储中获取 token
67
- const storedToken = tokenStorage.get();
68
- if (storedToken) {
69
- // 如果有 token 但没有用户信息,尝试获取 session
70
- if (!authStore.user.get()) {
71
- await authActions.fetchSessionWithToken(storedToken);
72
- }
73
- return storedToken;
74
- }
75
- // 如果没有存储的 token,尝试从 session 获取
76
- const sessionData = await authClient.getSession();
77
- const sessionToken = sessionData?.data?.session?.token || null;
78
- if (sessionToken) {
79
- tokenStorage.save(sessionToken);
80
- }
81
- return sessionToken;
34
+ export function getAuthTokenSync(tokenStorage) {
35
+ return tokenStorage.get();
82
36
  }
83
- /**
84
- * 获取认证头
85
- */
86
- export async function getAuthHeaders(authStore, tokenStorage, authActions, authClient) {
87
- const token = await getAuthToken(authStore, tokenStorage, authActions, authClient);
88
- if (!token) {
37
+ export async function getAuthToken(tokenStorage) {
38
+ return tokenStorage.get();
39
+ }
40
+ export function getAuthHeadersSync(tokenStorage) {
41
+ const token = tokenStorage.get();
42
+ if (!token)
89
43
  return {};
90
- }
91
- return {
92
- Authorization: `Bearer ${encodeURIComponent(token)}`,
93
- };
44
+ return { Authorization: `Bearer ${encodeURIComponent(token)}` };
45
+ }
46
+ export async function getAuthHeaders(tokenStorage) {
47
+ return getAuthHeadersSync(tokenStorage);
94
48
  }
95
- /**
96
- * 处理 401 响应
97
- */
98
49
  export function handle401Response(response, authActions) {
99
50
  if (response.status === 401) {
100
51
  authActions.handleUnauthorized();
101
52
  }
102
53
  return response;
103
54
  }
104
- /**
105
- * API 客户端工具
106
- */
107
- export function createApiClient(authStore, tokenStorage, authActions, authClient) {
108
- return {
109
- async get(url, options) {
110
- const headers = await getAuthHeaders(authStore, tokenStorage, authActions, authClient);
111
- const response = await fetch(url, {
112
- ...options,
113
- method: "GET",
114
- headers: {
115
- ...headers,
116
- ...options?.headers,
117
- },
118
- });
119
- return handle401Response(response, authActions);
120
- },
121
- async post(url, body, options) {
122
- const headers = await getAuthHeaders(authStore, tokenStorage, authActions, authClient);
123
- const response = await fetch(url, {
124
- ...options,
125
- method: "POST",
126
- headers: {
127
- "Content-Type": "application/json",
128
- ...headers,
129
- ...options?.headers,
130
- },
131
- body: body ? JSON.stringify(body) : undefined,
132
- });
133
- return handle401Response(response, authActions);
134
- },
135
- async put(url, body, options) {
136
- const headers = await getAuthHeaders(authStore, tokenStorage, authActions, authClient);
137
- const response = await fetch(url, {
138
- ...options,
139
- method: "PUT",
140
- headers: {
141
- "Content-Type": "application/json",
142
- ...headers,
143
- ...options?.headers,
144
- },
145
- body: body ? JSON.stringify(body) : undefined,
146
- });
147
- return handle401Response(response, authActions);
148
- },
149
- async delete(url, options) {
150
- const headers = await getAuthHeaders(authStore, tokenStorage, authActions, authClient);
151
- const response = await fetch(url, {
152
- ...options,
153
- method: "DELETE",
154
- headers: {
155
- ...headers,
156
- ...options?.headers,
157
- },
158
- });
159
- return handle401Response(response, authActions);
160
- },
161
- };
162
- }
163
- /**
164
- * 用户管理器
165
- */
166
55
  export function createUserManager(authStore) {
167
56
  return {
168
- getUser() {
169
- return getCurrentUser(authStore);
170
- },
171
- getUserId() {
172
- return getCurrentUserId(authStore);
173
- },
57
+ getUser: () => getCurrentUser(authStore),
58
+ getUserId: () => getCurrentUserId(authStore),
174
59
  };
175
60
  }
176
61
  /**
177
- * 从 AuthInstance 创建绑定好的工具函数集合
178
- * 这样就不需要在每个项目中重复包装工具函数
62
+ * 创建绑定好的工具函数集合
179
63
  */
180
64
  export function createBoundAuthUtils(instance) {
181
- const { authStore, tokenStorage, authActions, authClient } = instance;
65
+ const { authStore, tokenStorage, apiClient } = instance;
182
66
  return {
183
- // Store 访问
184
67
  getCurrentUser: () => getCurrentUser(authStore),
185
68
  getCurrentUserId: () => getCurrentUserId(authStore),
186
- getCurrentUserIdSafe: () => getCurrentUserIdSafe(authStore),
187
69
  isAuthenticated: () => isAuthenticated(authStore),
188
70
  isLoading: () => isLoading(authStore),
189
71
  isLoaded: () => isLoaded(authStore),
190
72
  waitForAuth: () => waitForAuth(authStore),
191
- // 需要多个参数的函数
192
- getAuthToken: () => getAuthToken(authStore, tokenStorage, authActions, authClient),
193
- getAuthHeaders: () => getAuthHeaders(authStore, tokenStorage, authActions, authClient),
194
- // 已创建的实例
195
- apiClient: createApiClient(authStore, tokenStorage, authActions, authClient),
73
+ getAuthToken: () => getAuthToken(tokenStorage),
74
+ getAuthTokenSync: () => getAuthTokenSync(tokenStorage),
75
+ getAuthHeaders: () => getAuthHeaders(tokenStorage),
76
+ getAuthHeadersSync: () => getAuthHeadersSync(tokenStorage),
77
+ apiClient,
196
78
  userManager: createUserManager(authStore),
197
79
  };
198
80
  }
@@ -0,0 +1,107 @@
1
+ /**
2
+ * 认证状态和配置类型
3
+ */
4
+ import type { SessionUser } from "./user";
5
+ /** 更新用户请求 */
6
+ export interface UpdateUserRequest {
7
+ color?: string;
8
+ image?: string;
9
+ name?: string;
10
+ }
11
+ /** Magic Link 登录请求 */
12
+ export interface MagicLinkRequest {
13
+ callbackURL?: string;
14
+ email: string;
15
+ errorCallbackURL?: string;
16
+ name?: string;
17
+ newUserCallbackURL?: string;
18
+ }
19
+ /** Magic Link 登录方法签名 */
20
+ export type SignInWithMagicLink = (options: {
21
+ callbackURL: string;
22
+ email: string;
23
+ name?: string;
24
+ newUserCallbackURL?: string;
25
+ }) => Promise<unknown>;
26
+ /** Email/Password 登录方法签名 */
27
+ export type SignInWithEmail = (credentials: {
28
+ email: string;
29
+ password: string;
30
+ }, options?: {
31
+ onError?: (context: {
32
+ error: Error;
33
+ }) => void;
34
+ onSuccess?: (context: {
35
+ response: Response;
36
+ }) => void;
37
+ }) => Promise<unknown>;
38
+ /** Email/Password 注册方法签名 */
39
+ export type SignUpWithEmail = (credentials: {
40
+ email: string;
41
+ name: string;
42
+ password: string;
43
+ }, options?: {
44
+ onError?: (context: {
45
+ error: Error;
46
+ }) => void;
47
+ onSuccess?: (context: {
48
+ response: Response;
49
+ }) => void;
50
+ }) => Promise<unknown>;
51
+ /** 伴生团队设置选项 */
52
+ export interface CompanionTeamOptions {
53
+ isNewUser?: boolean;
54
+ onComplete?: () => void;
55
+ onError?: (error: Error) => void;
56
+ }
57
+ /** Better Auth signIn 方法接口 */
58
+ export interface AuthClientSignIn {
59
+ email?: SignInWithEmail;
60
+ magicLink?: SignInWithMagicLink;
61
+ social: (options: {
62
+ callbackURL: string;
63
+ errorCallbackURL?: string;
64
+ newUserCallbackURL?: string;
65
+ provider: string;
66
+ }) => Promise<unknown>;
67
+ }
68
+ /** Better Auth signUp 方法接口 */
69
+ export interface AuthClientSignUp {
70
+ email?: SignUpWithEmail;
71
+ }
72
+ /** Better Auth 客户端接口 */
73
+ export interface AuthClientMethods {
74
+ signIn: AuthClientSignIn;
75
+ signOut: () => Promise<unknown>;
76
+ signUp?: AuthClientSignUp;
77
+ }
78
+ /** 认证状态(Legend State store) */
79
+ export interface AuthState {
80
+ error: string | null;
81
+ isAuthenticated: boolean;
82
+ isLoaded: boolean;
83
+ loading: boolean;
84
+ token: string | null;
85
+ user: SessionUser | null;
86
+ }
87
+ /** Better Auth 插件类型 */
88
+ export type BetterAuthPlugin = ReturnType<typeof import("better-auth/client/plugins").adminClient>;
89
+ /** 认证配置 */
90
+ export interface AuthConfig {
91
+ /** OneAuth API 基础 URL */
92
+ baseURL: string;
93
+ /** 获取 session 的端点路径 @default '/v1/auth/get-session' */
94
+ getSessionEndpoint?: string;
95
+ /** Better Auth 插件列表 */
96
+ plugins?: BetterAuthPlugin[];
97
+ /** 跳过错误时的 token 清除 @default false */
98
+ skipTokenCleanupOnError?: boolean;
99
+ /** Token 存储 key @default 'auth-token' */
100
+ tokenStorageKey?: string;
101
+ }
102
+ /** 默认配置类型 */
103
+ export type DefaultAuthConfig = Required<Pick<AuthConfig, "baseURL" | "getSessionEndpoint" | "tokenStorageKey">> & {
104
+ plugins: BetterAuthPlugin[];
105
+ skipTokenCleanupOnError: false;
106
+ };
107
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/types/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 认证状态和配置类型
3
+ */
4
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 类型定义导出
3
+ */
4
+ export type { SessionUser, SessionUserMetadata, Session } from "./user";
5
+ export type { AuthClientMethods, AuthClientSignIn, AuthClientSignUp, AuthConfig, AuthState, BetterAuthPlugin, CompanionTeamOptions, DefaultAuthConfig, MagicLinkRequest, SignInWithEmail, SignInWithMagicLink, SignUpWithEmail, UpdateUserRequest, } from "./auth";
6
+ export type { Organization, FullOrganization, CreateOrganizationRequest, UpdateOrganizationRequest, DeleteOrganizationRequest, SetActiveOrganizationRequest, CheckSlugRequest, MemberRole, Member, MemberUser, MemberWithUser, RemoveMemberRequest, UpdateMemberRoleRequest, InvitationStatus, Invitation, InvitationDetail, InviteMemberRequest, CancelInvitationRequest, AcceptInvitationRequest, RejectInvitationRequest, InvitationResponse, } from "./organization";
7
+ export type { Team, CreateTeamRequest, UpdateTeamRequest, DeleteTeamRequest, SetActiveTeamRequest, TeamMember, AddTeamMemberRequest, RemoveTeamMemberRequest, ListTeamMembersRequest, } from "./team";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAA;AACvE,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,iBAAiB,GAClB,MAAM,QAAQ,CAAA;AAGf,YAAY,EAEV,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,gBAAgB,EAEhB,UAAU,EACV,MAAM,EACN,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EAEvB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,gBAAgB,CAAA;AAGvB,YAAY,EAEV,IAAI,EACJ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EAEpB,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,QAAQ,CAAA"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * 类型定义导出
3
+ */
4
+ export {};
@@ -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,4 @@
1
+ /**
2
+ * 组织相关类型定义
3
+ */
4
+ export {};
@@ -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,4 @@
1
+ /**
2
+ * 团队相关类型定义
3
+ */
4
+ export {};
@@ -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,4 @@
1
+ /**
2
+ * 用户和会话类型定义
3
+ */
4
+ export {};
@@ -0,0 +1,10 @@
1
+ /**
2
+ * 日期工具函数
3
+ */
4
+ /**
5
+ * 将日期转换为 ISO 字符串
6
+ * @param date - 日期字符串或 Date 对象
7
+ * @returns ISO 格式的日期字符串,如果输入为空则返回 undefined
8
+ */
9
+ export declare function toISOString(date: string | Date | undefined): string | undefined;
10
+ //# sourceMappingURL=date.d.ts.map
@@ -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"}