@choiceform/shared-auth 0.1.15 → 0.1.17

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.
@@ -1,4 +1,11 @@
1
1
  import type { AuthInstance } from "../core";
2
+ /**
3
+ * 初始化认证状态(非 hook 版本)
4
+ * 可在 React Router 的 clientLoader 中调用
5
+ *
6
+ * @returns 是否已认证
7
+ */
8
+ export declare function initializeAuth(auth: AuthInstance): Promise<boolean>;
2
9
  /**
3
10
  * 认证初始化 hook
4
11
  * 在应用启动时检查 URL 中的 token 或 localStorage 中的 token
@@ -1 +1 @@
1
- {"version":3,"file":"use-auth-init.d.ts","sourceRoot":"","sources":["../../src/hooks/use-auth-init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,QAyC7C"}
1
+ {"version":3,"file":"use-auth-init.d.ts","sourceRoot":"","sources":["../../src/hooks/use-auth-init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAiDzE;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,QAQ7C"}
@@ -1,41 +1,62 @@
1
1
  import { useEffect } from "react";
2
+ /**
3
+ * 初始化认证状态(非 hook 版本)
4
+ * 可在 React Router 的 clientLoader 中调用
5
+ *
6
+ * @returns 是否已认证
7
+ */
8
+ export async function initializeAuth(auth) {
9
+ const { authActions, tokenStorage, authStore } = auth;
10
+ // 如果已经初始化,直接返回
11
+ if (authStore.isLoaded.get()) {
12
+ return authStore.isAuthenticated.get();
13
+ }
14
+ // 检查 URL 中的 token
15
+ const urlParams = new URLSearchParams(window.location.search);
16
+ let tokenFromUrl = urlParams.get("token");
17
+ if (tokenFromUrl) {
18
+ if (decodeURIComponent(tokenFromUrl) === tokenFromUrl) {
19
+ tokenFromUrl = encodeURIComponent(tokenFromUrl);
20
+ }
21
+ // 立即清理 URL 中的 token 参数(避免暴露)
22
+ urlParams.delete("token");
23
+ const newUrl = urlParams.toString()
24
+ ? `${window.location.pathname}?${urlParams.toString()}`
25
+ : window.location.pathname;
26
+ window.history.replaceState({}, "", newUrl);
27
+ // 使用 token 获取 session
28
+ try {
29
+ await authActions.fetchSessionWithToken(tokenFromUrl);
30
+ return authStore.isAuthenticated.get();
31
+ }
32
+ catch {
33
+ // Token 无效,继续检查 localStorage
34
+ }
35
+ }
36
+ // 检查 localStorage 中是否有存储的 token
37
+ const storedToken = tokenStorage.get();
38
+ if (storedToken) {
39
+ try {
40
+ await authActions.fetchSessionWithToken(storedToken);
41
+ return authStore.isAuthenticated.get();
42
+ }
43
+ catch {
44
+ // Token 无效,初始化为未认证状态
45
+ await authActions.initialize(null, true);
46
+ return false;
47
+ }
48
+ }
49
+ // 没有 token,标记为已加载
50
+ await authActions.initialize(null, true);
51
+ return false;
52
+ }
2
53
  /**
3
54
  * 认证初始化 hook
4
55
  * 在应用启动时检查 URL 中的 token 或 localStorage 中的 token
5
56
  */
6
57
  export function useAuthInit(auth) {
7
58
  useEffect(() => {
8
- async function initializeAuth() {
9
- const { authActions, tokenStorage } = auth;
10
- // 检查 URL 中的 token
11
- const urlParams = new URLSearchParams(window.location.search);
12
- let tokenFromUrl = urlParams.get("token");
13
- if (tokenFromUrl) {
14
- if (decodeURIComponent(tokenFromUrl) === tokenFromUrl) {
15
- tokenFromUrl = encodeURIComponent(tokenFromUrl);
16
- }
17
- // 立即清理 URL 中的 token 参数(避免暴露)
18
- urlParams.delete("token");
19
- const newUrl = urlParams.toString()
20
- ? `${window.location.pathname}?${urlParams.toString()}`
21
- : window.location.pathname;
22
- window.history.replaceState({}, "", newUrl);
23
- // 使用 token 获取 session
24
- await authActions.fetchSessionWithToken(tokenFromUrl);
25
- }
26
- else {
27
- // 检查 localStorage 中是否有存储的 token
28
- const storedToken = tokenStorage.get();
29
- if (storedToken) {
30
- await authActions.fetchSessionWithToken(storedToken);
31
- }
32
- else {
33
- // 没有 token,标记为已加载
34
- await authActions.initialize(null, true);
35
- }
36
- }
37
- }
38
- initializeAuth().catch((error) => {
59
+ initializeAuth(auth).catch((error) => {
39
60
  console.error("Failed to initialize auth:", error);
40
61
  // 即使认证初始化失败,也标记为已加载
41
62
  auth.authActions.initialize(null, true);
package/dist/index.d.ts CHANGED
@@ -14,6 +14,6 @@ export { createApiClient, createAuthApi, createOrganizationApi, createTeamApi, p
14
14
  export type { ApiClient, ApiClientConfig, ApiResponse, TokenStorage, UnauthorizedHandler, AuthApi, OrganizationApi, TeamApi, } from "./api";
15
15
  export { setupCompanionTeam } from "./services";
16
16
  export { getEnvVar, getAuthBaseUrl, extractSessionUser } from "./utils";
17
- export { useAuthInit } from "./hooks/use-auth-init";
17
+ export { useAuthInit, initializeAuth } from "./hooks/use-auth-init";
18
18
  export { createAuthClientFromConfig } from "./lib/auth-client";
19
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAM5C,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,OAAO,EACP,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAEhB,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAElB,IAAI,EACJ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,SAAS,CAAA;AAMhB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,eAAe,CAAA;AAMtB,OAAO,EACL,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,kBAAkB,GACnB,MAAM,OAAO,CAAA;AAEd,YAAY,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,OAAO,GACR,MAAM,OAAO,CAAA;AAMd,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAM/C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAMvE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAMnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAA;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAM5C,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,OAAO,EACP,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,EAEhB,YAAY,EACZ,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,4BAA4B,EAC5B,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,UAAU,EACV,cAAc,EACd,mBAAmB,EACnB,uBAAuB,EACvB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,kBAAkB,EAElB,IAAI,EACJ,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,SAAS,CAAA;AAMhB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,MAAM,eAAe,CAAA;AAMtB,OAAO,EACL,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,kBAAkB,GACnB,MAAM,OAAO,CAAA;AAEd,YAAY,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,OAAO,EACP,eAAe,EACf,OAAO,GACR,MAAM,OAAO,CAAA;AAMd,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAM/C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAMvE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAMnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAA"}
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ export { getEnvVar, getAuthBaseUrl, extractSessionUser } from "./utils";
30
30
  // ============================================================
31
31
  // Hooks
32
32
  // ============================================================
33
- export { useAuthInit } from "./hooks/use-auth-init";
33
+ export { useAuthInit, initializeAuth } from "./hooks/use-auth-init";
34
34
  // ============================================================
35
35
  // Better Auth Client
36
36
  // ============================================================
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@choiceform/shared-auth",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "description": "Shared authentication package for Choiceform projects",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",