sa2kit 2.0.3 → 3.0.0
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 +1 -1
- package/dist/{UniversalFileService-GsP6D3Rc.d.ts → UniversalFileService-CC4d3wkc.d.ts} +2 -2
- package/dist/{UniversalFileService-BpvbZitV.d.mts → UniversalFileService-CzAE_G4V.d.mts} +2 -2
- package/dist/auth/client/index.d.mts +8 -27
- package/dist/auth/client/index.d.ts +8 -27
- package/dist/auth/client/index.js +9 -4
- package/dist/auth/client/index.mjs +2 -1
- package/dist/auth/components/index.d.mts +8 -225
- package/dist/auth/components/index.d.ts +8 -225
- package/dist/auth/components/index.js +62 -319
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/components/index.mjs +6 -316
- package/dist/auth/components/index.mjs.map +1 -1
- package/dist/auth/hooks/index.d.mts +11 -29
- package/dist/auth/hooks/index.d.ts +11 -29
- package/dist/auth/hooks/index.js +14 -3
- package/dist/auth/hooks/index.mjs +4 -1
- package/dist/auth/index.d.mts +17 -14
- package/dist/auth/index.d.ts +17 -14
- package/dist/auth/index.js +51 -90
- package/dist/auth/index.mjs +8 -7
- package/dist/auth/rn/index.d.mts +3087 -18
- package/dist/auth/rn/index.d.ts +3087 -18
- package/dist/auth/rn/index.js +396 -477
- package/dist/auth/rn/index.js.map +1 -1
- package/dist/auth/rn/index.mjs +384 -475
- package/dist/auth/rn/index.mjs.map +1 -1
- package/dist/auth/schema/index.d.mts +3 -788
- package/dist/auth/schema/index.d.ts +3 -788
- package/dist/auth/schema/index.js +17 -9
- package/dist/auth/schema/index.mjs +1 -1
- package/dist/auth/services/index.d.mts +1 -48
- package/dist/auth/services/index.d.ts +1 -48
- package/dist/auth/services/index.js +3 -20
- package/dist/auth/services/index.mjs +1 -2
- package/dist/{base-api-client-B3wZZoaH.d.ts → base-api-client-BpmcQt4Q.d.ts} +1 -1
- package/dist/{base-api-client-ACKKt13v.d.mts → base-api-client-CFIhZK4C.d.mts} +1 -1
- package/dist/{base-api-client-ACKKt13v.d.ts → base-api-client-CFIhZK4C.d.ts} +1 -1
- package/dist/{base-api-client-DrL35Ea2.d.mts → base-api-client-DXLsq2yz.d.mts} +1 -1
- package/dist/business/index.d.mts +1 -5
- package/dist/business/index.d.ts +1 -5
- package/dist/business/index.js +34 -1135
- package/dist/business/index.js.map +1 -1
- package/dist/business/index.mjs +5 -1105
- package/dist/business/index.mjs.map +1 -1
- package/dist/calendar/routes/index.d.mts +74 -1
- package/dist/calendar/routes/index.d.ts +74 -1
- package/dist/calendar/routes/index.js +186 -97
- package/dist/calendar/routes/index.js.map +1 -1
- package/dist/calendar/routes/index.mjs +178 -99
- package/dist/calendar/routes/index.mjs.map +1 -1
- package/dist/{chunk-IIVNHQEI.mjs → chunk-5GBDDXYL.mjs} +4 -3
- package/dist/chunk-5GBDDXYL.mjs.map +1 -0
- package/dist/chunk-7E3J7VAD.mjs +3 -0
- package/dist/chunk-7E3J7VAD.mjs.map +1 -0
- package/dist/chunk-B3CZ3HXJ.mjs +126 -0
- package/dist/chunk-B3CZ3HXJ.mjs.map +1 -0
- package/dist/chunk-CAYOQDBR.js +78 -0
- package/dist/chunk-CAYOQDBR.js.map +1 -0
- package/dist/{chunk-PTMSDNGO.mjs → chunk-CX2GHCAI.mjs} +4 -75
- package/dist/chunk-CX2GHCAI.mjs.map +1 -0
- package/dist/chunk-EBHPTFG6.mjs +82 -0
- package/dist/chunk-EBHPTFG6.mjs.map +1 -0
- package/dist/chunk-FOQEQWX5.js +4 -0
- package/dist/chunk-FOQEQWX5.js.map +1 -0
- package/dist/{chunk-YGI7UU2D.mjs → chunk-G4NFB2QA.mjs} +2 -2
- package/dist/chunk-G4NFB2QA.mjs.map +1 -0
- package/dist/chunk-G5HJGXGC.mjs +39 -0
- package/dist/chunk-G5HJGXGC.mjs.map +1 -0
- package/dist/{chunk-GSNGCENJ.js → chunk-GQZHGSRR.js} +2 -39
- package/dist/chunk-GQZHGSRR.js.map +1 -0
- package/dist/chunk-GS7XLKET.js +41 -0
- package/dist/chunk-GS7XLKET.js.map +1 -0
- package/dist/{chunk-7B5SI4OF.mjs → chunk-IBWDBBX5.mjs} +4 -3
- package/dist/chunk-IBWDBBX5.mjs.map +1 -0
- package/dist/chunk-IS7O4LPI.js +146 -0
- package/dist/chunk-IS7O4LPI.js.map +1 -0
- package/dist/chunk-LGHUCQIU.js +93 -0
- package/dist/chunk-LGHUCQIU.js.map +1 -0
- package/dist/chunk-LHJKLUM7.mjs +18 -0
- package/dist/chunk-LHJKLUM7.mjs.map +1 -0
- package/dist/chunk-LKBIVQBT.mjs +34 -0
- package/dist/chunk-LKBIVQBT.mjs.map +1 -0
- package/dist/chunk-MIDXG6LS.js +32 -0
- package/dist/chunk-MIDXG6LS.js.map +1 -0
- package/dist/chunk-MWSAH7ZG.mjs +42 -0
- package/dist/chunk-MWSAH7ZG.mjs.map +1 -0
- package/dist/{chunk-HCI6JQOU.mjs → chunk-MZOGYD4N.mjs} +7 -4
- package/dist/chunk-MZOGYD4N.mjs.map +1 -0
- package/dist/chunk-NDGHXVGS.js +25 -0
- package/dist/chunk-NDGHXVGS.js.map +1 -0
- package/dist/chunk-Q5VFBPMG.mjs +76 -0
- package/dist/chunk-Q5VFBPMG.mjs.map +1 -0
- package/dist/chunk-QDUBO567.js +1148 -0
- package/dist/chunk-QDUBO567.js.map +1 -0
- package/dist/{chunk-3CSCIRQY.js → chunk-QP5N3ER6.js} +6 -5
- package/dist/chunk-QP5N3ER6.js.map +1 -0
- package/dist/chunk-RWCD2CAD.mjs +1132 -0
- package/dist/chunk-RWCD2CAD.mjs.map +1 -0
- package/dist/{chunk-VQ54PUQV.js → chunk-S37OK2QG.js} +2 -2
- package/dist/chunk-S37OK2QG.js.map +1 -0
- package/dist/chunk-S3PUP7N4.js +20 -0
- package/dist/chunk-S3PUP7N4.js.map +1 -0
- package/dist/{chunk-QQ2WFYOD.js → chunk-S6YSGVWD.js} +4 -76
- package/dist/chunk-S6YSGVWD.js.map +1 -0
- package/dist/chunk-SFDJNKWC.js +22 -0
- package/dist/chunk-SFDJNKWC.js.map +1 -0
- package/dist/chunk-TTYCVBIQ.mjs +144 -0
- package/dist/chunk-TTYCVBIQ.mjs.map +1 -0
- package/dist/{chunk-HBF4HPRK.js → chunk-TXMX6PZR.js} +7 -3
- package/dist/chunk-TXMX6PZR.js.map +1 -0
- package/dist/chunk-VHN7PF5I.js +20 -0
- package/dist/chunk-VHN7PF5I.js.map +1 -0
- package/dist/chunk-VJNDOYEC.js +41 -0
- package/dist/chunk-VJNDOYEC.js.map +1 -0
- package/dist/chunk-XBZIS3MV.mjs +13 -0
- package/dist/chunk-XBZIS3MV.mjs.map +1 -0
- package/dist/chunk-XFOZ56FB.mjs +20 -0
- package/dist/chunk-XFOZ56FB.mjs.map +1 -0
- package/dist/chunk-Z23HAXHL.js +136 -0
- package/dist/chunk-Z23HAXHL.js.map +1 -0
- package/dist/chunk-ZF7DKR5A.mjs +26 -0
- package/dist/chunk-ZF7DKR5A.mjs.map +1 -0
- package/dist/common/auth/client/index.d.mts +3239 -0
- package/dist/common/auth/client/index.d.ts +3239 -0
- package/dist/common/auth/client/index.js +26 -0
- package/dist/common/auth/client/index.mjs +5 -0
- package/dist/common/auth/components/index.d.mts +374 -0
- package/dist/common/auth/components/index.d.ts +374 -0
- package/dist/common/auth/components/index.js +70 -0
- package/dist/common/auth/components/index.mjs +9 -0
- package/dist/common/auth/hooks/index.d.mts +75 -0
- package/dist/common/auth/hooks/index.d.ts +75 -0
- package/dist/common/auth/hooks/index.js +28 -0
- package/dist/common/auth/hooks/index.js.map +1 -0
- package/dist/common/auth/hooks/index.mjs +7 -0
- package/dist/common/auth/hooks/index.mjs.map +1 -0
- package/dist/common/auth/index.d.mts +14 -6
- package/dist/common/auth/index.d.ts +14 -6
- package/dist/common/auth/index.js +17 -8
- package/dist/common/auth/index.mjs +4 -3
- package/dist/common/auth/react/index.d.mts +3056 -0
- package/dist/common/auth/react/index.d.ts +3056 -0
- package/dist/common/auth/react/index.js +31 -0
- package/dist/common/auth/react/index.js.map +1 -0
- package/dist/common/auth/react/index.mjs +21 -0
- package/dist/common/auth/react/index.mjs.map +1 -0
- package/dist/common/auth/rn/index.d.mts +3138 -0
- package/dist/common/auth/rn/index.d.ts +3138 -0
- package/dist/common/auth/rn/index.js +348 -0
- package/dist/common/auth/rn/index.js.map +1 -0
- package/dist/common/auth/rn/index.mjs +327 -0
- package/dist/common/auth/rn/index.mjs.map +1 -0
- package/dist/common/auth/schema/index.d.mts +1479 -0
- package/dist/common/auth/schema/index.d.ts +1479 -0
- package/dist/common/auth/schema/index.js +49 -0
- package/dist/common/auth/schema/index.js.map +1 -0
- package/dist/common/auth/schema/index.mjs +4 -0
- package/dist/common/auth/schema/index.mjs.map +1 -0
- package/dist/common/auth/server/index.d.mts +7 -30
- package/dist/common/auth/server/index.d.ts +7 -30
- package/dist/common/auth/server/index.js +36 -79
- package/dist/common/auth/server/index.mjs +2 -5
- package/dist/common/auth/services/index.d.mts +14 -0
- package/dist/common/auth/services/index.d.ts +14 -0
- package/dist/common/auth/services/index.js +17 -0
- package/dist/common/auth/services/index.js.map +1 -0
- package/dist/common/auth/services/index.mjs +4 -0
- package/dist/common/auth/services/index.mjs.map +1 -0
- package/dist/common/index.d.mts +13 -5
- package/dist/common/index.d.ts +13 -5
- package/dist/common/index.js +19 -16
- package/dist/common/index.mjs +11 -8
- package/dist/common/request/index.js +5 -4
- package/dist/common/request/index.mjs +3 -2
- package/dist/common/storage/index.js +13 -12
- package/dist/common/storage/index.mjs +3 -2
- package/dist/festivalCard/index.d.mts +3 -3
- package/dist/festivalCard/index.d.ts +3 -3
- package/dist/festivalCard/routes/index.d.mts +1 -1
- package/dist/festivalCard/routes/index.d.ts +1 -1
- package/dist/festivalCard/server/index.d.mts +2 -2
- package/dist/festivalCard/server/index.d.ts +2 -2
- package/dist/{festivalCardService-BFCRhJrq.d.ts → festivalCardService-B3GsnNpV.d.ts} +1 -1
- package/dist/{festivalCardService-GriR2VMc.d.mts → festivalCardService-CWhrLNE9.d.mts} +1 -1
- package/dist/{index-DPYkrKZf.d.mts → index-BcjDRcKp.d.mts} +11 -6
- package/dist/{index-Bnh6VqFv.d.ts → index-BlpXrrTy.d.ts} +11 -6
- package/dist/{index-1Ag7IBXN.d.ts → index-DZ5iJtNO.d.mts} +2 -44
- package/dist/{index-DdeZSeTJ.d.mts → index-DZ5iJtNO.d.ts} +2 -44
- package/dist/index.d.mts +6296 -40
- package/dist/index.d.ts +6296 -40
- package/dist/index.js +1378 -2508
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1073 -2203
- package/dist/index.mjs.map +1 -1
- package/dist/mmd/admin/index.d.mts +1 -1
- package/dist/mmd/admin/index.d.ts +1 -1
- package/dist/mmd/index.d.mts +1 -1
- package/dist/mmd/index.d.ts +1 -1
- package/dist/mmd/server/index.d.mts +3 -3
- package/dist/mmd/server/index.d.ts +3 -3
- package/dist/request/index.js +4 -3
- package/dist/request/index.mjs +2 -1
- package/dist/session-BCXvGCnm.d.mts +81 -0
- package/dist/session-BCXvGCnm.d.ts +81 -0
- package/dist/storage/index.js +12 -11
- package/dist/storage/index.mjs +2 -1
- package/dist/{types-DyG3ZV9V.d.mts → types-B6B210gX.d.mts} +1 -1
- package/dist/{types-DyG3ZV9V.d.ts → types-B6B210gX.d.ts} +1 -1
- package/dist/{types-BTiaMsBz.d.mts → types-Bdnte5EN.d.mts} +1 -1
- package/dist/{types-tQfupO6d.d.mts → types-Cs0CLvrH.d.mts} +1 -1
- package/dist/{types-tQfupO6d.d.ts → types-Cs0CLvrH.d.ts} +1 -1
- package/dist/{types-ERmJyjx8.d.ts → types-_rFX1atk.d.ts} +1 -1
- package/dist/types.legacy-J-j-_ig_.d.mts +25 -0
- package/dist/types.legacy-J-j-_ig_.d.ts +25 -0
- package/dist/useAuthActions-7S5dL7Oh.d.mts +77 -0
- package/dist/useAuthActions-7S5dL7Oh.d.ts +77 -0
- package/dist/vocaloidBooth/server/index.d.mts +3 -3
- package/dist/vocaloidBooth/server/index.d.ts +3 -3
- package/package.json +59 -76
- package/dist/auth/legacy/core/index.d.mts +0 -42
- package/dist/auth/legacy/core/index.d.ts +0 -42
- package/dist/auth/legacy/core/index.js +0 -242
- package/dist/auth/legacy/core/index.js.map +0 -1
- package/dist/auth/legacy/core/index.mjs +0 -226
- package/dist/auth/legacy/core/index.mjs.map +0 -1
- package/dist/auth/legacy/db/index.d.mts +0 -5
- package/dist/auth/legacy/db/index.d.ts +0 -5
- package/dist/auth/legacy/db/index.js +0 -261
- package/dist/auth/legacy/db/index.js.map +0 -1
- package/dist/auth/legacy/db/index.mjs +0 -250
- package/dist/auth/legacy/db/index.mjs.map +0 -1
- package/dist/auth/legacy/index.d.mts +0 -5
- package/dist/auth/legacy/index.d.ts +0 -5
- package/dist/auth/legacy/index.js +0 -1107
- package/dist/auth/legacy/index.js.map +0 -1
- package/dist/auth/legacy/index.mjs +0 -1086
- package/dist/auth/legacy/index.mjs.map +0 -1
- package/dist/auth/legacy/logic/index.d.mts +0 -9
- package/dist/auth/legacy/logic/index.d.ts +0 -9
- package/dist/auth/legacy/logic/index.js +0 -194
- package/dist/auth/legacy/logic/index.js.map +0 -1
- package/dist/auth/legacy/logic/index.mjs +0 -187
- package/dist/auth/legacy/logic/index.mjs.map +0 -1
- package/dist/auth/legacy/miniapp/index.d.mts +0 -5
- package/dist/auth/legacy/miniapp/index.d.ts +0 -5
- package/dist/auth/legacy/miniapp/index.js +0 -506
- package/dist/auth/legacy/miniapp/index.js.map +0 -1
- package/dist/auth/legacy/miniapp/index.mjs +0 -487
- package/dist/auth/legacy/miniapp/index.mjs.map +0 -1
- package/dist/auth/legacy/routes/index.d.mts +0 -53
- package/dist/auth/legacy/routes/index.d.ts +0 -53
- package/dist/auth/legacy/routes/index.js +0 -278
- package/dist/auth/legacy/routes/index.js.map +0 -1
- package/dist/auth/legacy/routes/index.mjs +0 -271
- package/dist/auth/legacy/routes/index.mjs.map +0 -1
- package/dist/auth/legacy/schema/index.d.mts +0 -401
- package/dist/auth/legacy/schema/index.d.ts +0 -401
- package/dist/auth/legacy/schema/index.js +0 -50
- package/dist/auth/legacy/schema/index.js.map +0 -1
- package/dist/auth/legacy/schema/index.mjs +0 -44
- package/dist/auth/legacy/schema/index.mjs.map +0 -1
- package/dist/auth/legacy/server/index.d.mts +0 -13
- package/dist/auth/legacy/server/index.d.ts +0 -13
- package/dist/auth/legacy/server/index.js +0 -21
- package/dist/auth/legacy/server/index.js.map +0 -1
- package/dist/auth/legacy/server/index.mjs +0 -19
- package/dist/auth/legacy/server/index.mjs.map +0 -1
- package/dist/auth/legacy/services/index.d.mts +0 -40
- package/dist/auth/legacy/services/index.d.ts +0 -40
- package/dist/auth/legacy/services/index.js +0 -258
- package/dist/auth/legacy/services/index.js.map +0 -1
- package/dist/auth/legacy/services/index.mjs +0 -252
- package/dist/auth/legacy/services/index.mjs.map +0 -1
- package/dist/auth/legacy/ui/miniapp/index.d.mts +0 -10
- package/dist/auth/legacy/ui/miniapp/index.d.ts +0 -10
- package/dist/auth/legacy/ui/miniapp/index.js +0 -298
- package/dist/auth/legacy/ui/miniapp/index.js.map +0 -1
- package/dist/auth/legacy/ui/miniapp/index.mjs +0 -290
- package/dist/auth/legacy/ui/miniapp/index.mjs.map +0 -1
- package/dist/auth/legacy/ui/web/index.d.mts +0 -22
- package/dist/auth/legacy/ui/web/index.d.ts +0 -22
- package/dist/auth/legacy/ui/web/index.js +0 -899
- package/dist/auth/legacy/ui/web/index.js.map +0 -1
- package/dist/auth/legacy/ui/web/index.mjs +0 -889
- package/dist/auth/legacy/ui/web/index.mjs.map +0 -1
- package/dist/auth/legacy/web/index.d.mts +0 -5
- package/dist/auth/legacy/web/index.d.ts +0 -5
- package/dist/auth/legacy/web/index.js +0 -1107
- package/dist/auth/legacy/web/index.js.map +0 -1
- package/dist/auth/legacy/web/index.mjs +0 -1086
- package/dist/auth/legacy/web/index.mjs.map +0 -1
- package/dist/auth/middleware/index.d.mts +0 -75
- package/dist/auth/middleware/index.d.ts +0 -75
- package/dist/auth/middleware/index.js +0 -15
- package/dist/auth/middleware/index.mjs +0 -6
- package/dist/auth/routes/index.d.mts +0 -261
- package/dist/auth/routes/index.d.ts +0 -261
- package/dist/auth/routes/index.js +0 -59
- package/dist/auth/routes/index.mjs +0 -6
- package/dist/chunk-37HYTHEC.mjs +0 -90
- package/dist/chunk-37HYTHEC.mjs.map +0 -1
- package/dist/chunk-3CSCIRQY.js.map +0 -1
- package/dist/chunk-5WV35FPV.js +0 -131
- package/dist/chunk-5WV35FPV.js.map +0 -1
- package/dist/chunk-7B5SI4OF.mjs.map +0 -1
- package/dist/chunk-DCRD5CZB.js +0 -573
- package/dist/chunk-DCRD5CZB.js.map +0 -1
- package/dist/chunk-DDX4JKFS.js +0 -19
- package/dist/chunk-DDX4JKFS.js.map +0 -1
- package/dist/chunk-DV6M7MFP.js +0 -283
- package/dist/chunk-DV6M7MFP.js.map +0 -1
- package/dist/chunk-EQXPL7TN.mjs +0 -78
- package/dist/chunk-EQXPL7TN.mjs.map +0 -1
- package/dist/chunk-GSNGCENJ.js.map +0 -1
- package/dist/chunk-HBF4HPRK.js.map +0 -1
- package/dist/chunk-HCI6JQOU.mjs.map +0 -1
- package/dist/chunk-I44HXJ3X.mjs +0 -17
- package/dist/chunk-I44HXJ3X.mjs.map +0 -1
- package/dist/chunk-IIVNHQEI.mjs.map +0 -1
- package/dist/chunk-IJ4YYWE3.mjs +0 -122
- package/dist/chunk-IJ4YYWE3.mjs.map +0 -1
- package/dist/chunk-J4BEIZUC.js +0 -92
- package/dist/chunk-J4BEIZUC.js.map +0 -1
- package/dist/chunk-OKPWFVXC.js +0 -24
- package/dist/chunk-OKPWFVXC.js.map +0 -1
- package/dist/chunk-PNOTQAYK.mjs +0 -560
- package/dist/chunk-PNOTQAYK.mjs.map +0 -1
- package/dist/chunk-PTMSDNGO.mjs.map +0 -1
- package/dist/chunk-Q2IAL7YV.js +0 -36
- package/dist/chunk-Q2IAL7YV.js.map +0 -1
- package/dist/chunk-QQ2WFYOD.js.map +0 -1
- package/dist/chunk-VQ54PUQV.js.map +0 -1
- package/dist/chunk-W5JEGA76.mjs +0 -33
- package/dist/chunk-W5JEGA76.mjs.map +0 -1
- package/dist/chunk-YGI7UU2D.mjs.map +0 -1
- package/dist/chunk-ZCLQSI5F.mjs +0 -271
- package/dist/chunk-ZCLQSI5F.mjs.map +0 -1
- package/dist/drizzle-auth-service-D-pljzCD.d.mts +0 -145
- package/dist/drizzle-auth-service-D3qryE_I.d.ts +0 -145
- package/dist/index-DNKZ7-R_.d.mts +0 -184
- package/dist/index-DNKZ7-R_.d.ts +0 -184
- package/dist/types-C5vUWf9u.d.ts +0 -70
- package/dist/types-IYCqCk2g.d.mts +0 -70
- /package/dist/{auth/middleware → common/auth/client}/index.js.map +0 -0
- /package/dist/{auth/middleware → common/auth/client}/index.mjs.map +0 -0
- /package/dist/{auth/routes → common/auth/components}/index.js.map +0 -0
- /package/dist/{auth/routes → common/auth/components}/index.mjs.map +0 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { getAuthClientError, errorMessage } from './chunk-ZF7DKR5A.mjs';
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
function clientApi(client) {
|
|
5
|
+
return client;
|
|
6
|
+
}
|
|
7
|
+
function useAuthActions(authClient) {
|
|
8
|
+
const signInWithEmail = useCallback(
|
|
9
|
+
async (email, password) => {
|
|
10
|
+
try {
|
|
11
|
+
const result = await clientApi(authClient).signIn.email({ email, password });
|
|
12
|
+
const err = getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
|
|
13
|
+
return err ? { success: false, error: err } : { success: true };
|
|
14
|
+
} catch (e) {
|
|
15
|
+
return { success: false, error: errorMessage(e, "\u767B\u5F55\u5931\u8D25") };
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
[authClient]
|
|
19
|
+
);
|
|
20
|
+
const signInWithPhonePassword = useCallback(
|
|
21
|
+
async (phoneNumber, password) => {
|
|
22
|
+
try {
|
|
23
|
+
const result = await clientApi(authClient).signIn.phoneNumber({ phoneNumber, password });
|
|
24
|
+
const err = getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
|
|
25
|
+
return err ? { success: false, error: err } : { success: true };
|
|
26
|
+
} catch (e) {
|
|
27
|
+
return { success: false, error: errorMessage(e, "\u767B\u5F55\u5931\u8D25") };
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
[authClient]
|
|
31
|
+
);
|
|
32
|
+
const signUpWithEmail = useCallback(
|
|
33
|
+
async (email, password, name) => {
|
|
34
|
+
try {
|
|
35
|
+
const result = await clientApi(authClient).signUp.email({ email, password, name });
|
|
36
|
+
const err = getAuthClientError(result, "\u6CE8\u518C\u5931\u8D25");
|
|
37
|
+
return err ? { success: false, error: err } : { success: true };
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return { success: false, error: errorMessage(e, "\u6CE8\u518C\u5931\u8D25") };
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
[authClient]
|
|
43
|
+
);
|
|
44
|
+
const sendPhoneOtp = useCallback(
|
|
45
|
+
async (phoneNumber) => {
|
|
46
|
+
try {
|
|
47
|
+
const result = await clientApi(authClient).phoneNumber.sendOtp({ phoneNumber });
|
|
48
|
+
const err = getAuthClientError(result, "\u9A8C\u8BC1\u7801\u53D1\u9001\u5931\u8D25");
|
|
49
|
+
return err ? { success: false, error: err } : { success: true };
|
|
50
|
+
} catch (e) {
|
|
51
|
+
return { success: false, error: errorMessage(e, "\u9A8C\u8BC1\u7801\u53D1\u9001\u5931\u8D25") };
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
[authClient]
|
|
55
|
+
);
|
|
56
|
+
const verifyPhoneOtp = useCallback(
|
|
57
|
+
async (phoneNumber, code) => {
|
|
58
|
+
try {
|
|
59
|
+
const result = await clientApi(authClient).phoneNumber.verify({ phoneNumber, code });
|
|
60
|
+
const err = getAuthClientError(result, "\u9A8C\u8BC1\u5931\u8D25");
|
|
61
|
+
return err ? { success: false, error: err } : { success: true };
|
|
62
|
+
} catch (e) {
|
|
63
|
+
return { success: false, error: errorMessage(e, "\u9A8C\u8BC1\u5931\u8D25") };
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
[authClient]
|
|
67
|
+
);
|
|
68
|
+
const sendEmailOtp = useCallback(
|
|
69
|
+
async (email, type = "sign-in") => {
|
|
70
|
+
try {
|
|
71
|
+
const result = await clientApi(authClient).emailOtp.sendVerificationOtp({ email, type });
|
|
72
|
+
const err = getAuthClientError(result, "\u9A8C\u8BC1\u7801\u53D1\u9001\u5931\u8D25");
|
|
73
|
+
return err ? { success: false, error: err } : { success: true };
|
|
74
|
+
} catch (e) {
|
|
75
|
+
return { success: false, error: errorMessage(e, "\u9A8C\u8BC1\u7801\u53D1\u9001\u5931\u8D25") };
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
[authClient]
|
|
79
|
+
);
|
|
80
|
+
const signInWithEmailOtp = useCallback(
|
|
81
|
+
async (email, otp) => {
|
|
82
|
+
try {
|
|
83
|
+
const result = await clientApi(authClient).signIn.emailOtp({ email, otp });
|
|
84
|
+
const err = getAuthClientError(result, "\u767B\u5F55\u5931\u8D25");
|
|
85
|
+
return err ? { success: false, error: err } : { success: true };
|
|
86
|
+
} catch (e) {
|
|
87
|
+
return { success: false, error: errorMessage(e, "\u767B\u5F55\u5931\u8D25") };
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
[authClient]
|
|
91
|
+
);
|
|
92
|
+
const requestPhonePasswordReset = useCallback(
|
|
93
|
+
async (phoneNumber) => {
|
|
94
|
+
try {
|
|
95
|
+
const result = await clientApi(authClient).phoneNumber.requestPasswordReset({ phoneNumber });
|
|
96
|
+
const err = getAuthClientError(result, "\u53D1\u9001\u9A8C\u8BC1\u7801\u5931\u8D25");
|
|
97
|
+
return err ? { success: false, error: err } : { success: true };
|
|
98
|
+
} catch (e) {
|
|
99
|
+
return { success: false, error: errorMessage(e, "\u53D1\u9001\u9A8C\u8BC1\u7801\u5931\u8D25") };
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
[authClient]
|
|
103
|
+
);
|
|
104
|
+
const resetPhonePassword = useCallback(
|
|
105
|
+
async (phoneNumber, otp, newPassword) => {
|
|
106
|
+
try {
|
|
107
|
+
const result = await clientApi(authClient).phoneNumber.resetPassword({
|
|
108
|
+
phoneNumber,
|
|
109
|
+
otp,
|
|
110
|
+
newPassword
|
|
111
|
+
});
|
|
112
|
+
const err = getAuthClientError(result, "\u91CD\u7F6E\u5BC6\u7801\u5931\u8D25");
|
|
113
|
+
return err ? { success: false, error: err } : { success: true };
|
|
114
|
+
} catch (e) {
|
|
115
|
+
return { success: false, error: errorMessage(e, "\u91CD\u7F6E\u5BC6\u7801\u5931\u8D25") };
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
[authClient]
|
|
119
|
+
);
|
|
120
|
+
const signOut = useCallback(async () => {
|
|
121
|
+
try {
|
|
122
|
+
await clientApi(authClient).signOut();
|
|
123
|
+
return { success: true };
|
|
124
|
+
} catch (e) {
|
|
125
|
+
return { success: false, error: errorMessage(e, "\u9000\u51FA\u5931\u8D25") };
|
|
126
|
+
}
|
|
127
|
+
}, [authClient]);
|
|
128
|
+
return {
|
|
129
|
+
signInWithEmail,
|
|
130
|
+
signInWithPhonePassword,
|
|
131
|
+
signUpWithEmail,
|
|
132
|
+
sendPhoneOtp,
|
|
133
|
+
verifyPhoneOtp,
|
|
134
|
+
sendEmailOtp,
|
|
135
|
+
signInWithEmailOtp,
|
|
136
|
+
requestPhonePasswordReset,
|
|
137
|
+
resetPhonePassword,
|
|
138
|
+
signOut
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
export { useAuthActions };
|
|
143
|
+
//# sourceMappingURL=chunk-TTYCVBIQ.mjs.map
|
|
144
|
+
//# sourceMappingURL=chunk-TTYCVBIQ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/hooks/useAuthActions.ts"],"names":[],"mappings":";;;AAQA,SAAS,UAAU,MAAA,EAA2B;AAC5C,EAAA,OAAO,MAAA;AAqBT;AAEO,SAAS,eAAe,UAAA,EAA+B;AAC5D,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,OAAO,OAAe,QAAA,KAAqB;AACzC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,UAAU,CAAA,CAAE,OAAO,KAAA,CAAM,EAAE,KAAA,EAAO,QAAA,EAAU,CAAA;AAC3E,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,0BAAM,CAAA;AAC7C,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,0BAAM,CAAA,EAAE;AAAA,MACnE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,uBAAA,GAA0B,WAAA;AAAA,IAC9B,OAAO,aAAqB,QAAA,KAAqB;AAC/C,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,UAAU,CAAA,CAAE,OAAO,WAAA,CAAY,EAAE,WAAA,EAAa,QAAA,EAAU,CAAA;AACvF,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,0BAAM,CAAA;AAC7C,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,0BAAM,CAAA,EAAE;AAAA,MACnE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,OAAO,KAAA,EAAe,QAAA,EAAkB,IAAA,KAAiB;AACvD,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,UAAU,CAAA,CAAE,MAAA,CAAO,KAAA,CAAM,EAAE,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM,CAAA;AACjF,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,0BAAM,CAAA;AAC7C,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,0BAAM,CAAA,EAAE;AAAA,MACnE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,OAAO,WAAA,KAAwB;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,UAAU,EAAE,WAAA,CAAY,OAAA,CAAQ,EAAE,WAAA,EAAa,CAAA;AAC9E,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,4CAAS,CAAA;AAChD,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,4CAAS,CAAA,EAAE;AAAA,MACtE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,cAAA,GAAiB,WAAA;AAAA,IACrB,OAAO,aAAqB,IAAA,KAAiB;AAC3C,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,UAAU,CAAA,CAAE,YAAY,MAAA,CAAO,EAAE,WAAA,EAAa,IAAA,EAAM,CAAA;AACnF,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,0BAAM,CAAA;AAC7C,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,0BAAM,CAAA,EAAE;AAAA,MACnE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,OAAO,KAAA,EAAe,IAAA,GAA6D,SAAA,KAAc;AAC/F,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,UAAU,CAAA,CAAE,SAAS,mBAAA,CAAoB,EAAE,KAAA,EAAO,IAAA,EAAM,CAAA;AACvF,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,4CAAS,CAAA;AAChD,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,4CAAS,CAAA,EAAE;AAAA,MACtE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,OAAO,OAAe,GAAA,KAAgB;AACpC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,UAAU,CAAA,CAAE,OAAO,QAAA,CAAS,EAAE,KAAA,EAAO,GAAA,EAAK,CAAA;AACzE,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,0BAAM,CAAA;AAC7C,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,0BAAM,CAAA,EAAE;AAAA,MACnE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,yBAAA,GAA4B,WAAA;AAAA,IAChC,OAAO,WAAA,KAAwB;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,UAAU,EAAE,WAAA,CAAY,oBAAA,CAAqB,EAAE,WAAA,EAAa,CAAA;AAC3F,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,4CAAS,CAAA;AAChD,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,4CAAS,CAAA,EAAE;AAAA,MACtE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,kBAAA,GAAqB,WAAA;AAAA,IACzB,OAAO,WAAA,EAAqB,GAAA,EAAa,WAAA,KAAwB;AAC/D,MAAA,IAAI;AACF,QAAA,MAAM,SAAS,MAAM,SAAA,CAAU,UAAU,CAAA,CAAE,YAAY,aAAA,CAAc;AAAA,UACnE,WAAA;AAAA,UACA,GAAA;AAAA,UACA;AAAA,SACD,CAAA;AACD,QAAA,MAAM,GAAA,GAAM,kBAAA,CAAmB,MAAA,EAAQ,sCAAQ,CAAA;AAC/C,QAAA,OAAO,GAAA,GAAM,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,GAAA,EAAI,GAAI,EAAE,OAAA,EAAS,IAAA,EAAc;AAAA,MAClF,SAAS,CAAA,EAAG;AACV,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,sCAAQ,CAAA,EAAE;AAAA,MACrE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,MAAM,OAAA,GAAU,YAAY,YAAY;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,UAAU,CAAA,CAAE,OAAA,EAAQ;AACpC,MAAA,OAAO,EAAE,SAAS,IAAA,EAAc;AAAA,IAClC,SAAS,CAAA,EAAG;AACV,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAgB,OAAO,YAAA,CAAa,CAAA,EAAG,0BAAM,CAAA,EAAE;AAAA,IACnE;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,OAAO;AAAA,IACL,eAAA;AAAA,IACA,uBAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA,yBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AACF","file":"chunk-TTYCVBIQ.mjs","sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\nimport { errorMessage, getAuthClientError } from '../components/utils';\n\n/** Better Auth 客户端(vanilla 或 React 均可) */\nexport type AuthActionsClient = Record<string, unknown>;\n\nfunction clientApi(client: AuthActionsClient) {\n return client as {\n signIn: {\n email: (input: { email: string; password: string }) => Promise<unknown>;\n phoneNumber: (input: { phoneNumber: string; password: string }) => Promise<unknown>;\n emailOtp: (input: { email: string; otp: string }) => Promise<unknown>;\n };\n signUp: { email: (input: { email: string; password: string; name: string }) => Promise<unknown> };\n phoneNumber: {\n sendOtp: (input: { phoneNumber: string }) => Promise<unknown>;\n verify: (input: { phoneNumber: string; code: string }) => Promise<unknown>;\n requestPasswordReset: (input: { phoneNumber: string }) => Promise<unknown>;\n resetPassword: (input: { phoneNumber: string; otp: string; newPassword: string }) => Promise<unknown>;\n };\n emailOtp: {\n sendVerificationOtp: (input: {\n email: string;\n type: 'sign-in' | 'email-verification' | 'forget-password';\n }) => Promise<unknown>;\n };\n signOut: () => Promise<unknown>;\n };\n}\n\nexport function useAuthActions(authClient: AuthActionsClient) {\n const signInWithEmail = useCallback(\n async (email: string, password: string) => {\n try {\n const result = await clientApi(authClient).signIn.email({ email, password });\n const err = getAuthClientError(result, '登录失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '登录失败') };\n }\n },\n [authClient],\n );\n\n const signInWithPhonePassword = useCallback(\n async (phoneNumber: string, password: string) => {\n try {\n const result = await clientApi(authClient).signIn.phoneNumber({ phoneNumber, password });\n const err = getAuthClientError(result, '登录失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '登录失败') };\n }\n },\n [authClient],\n );\n\n const signUpWithEmail = useCallback(\n async (email: string, password: string, name: string) => {\n try {\n const result = await clientApi(authClient).signUp.email({ email, password, name });\n const err = getAuthClientError(result, '注册失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '注册失败') };\n }\n },\n [authClient],\n );\n\n const sendPhoneOtp = useCallback(\n async (phoneNumber: string) => {\n try {\n const result = await clientApi(authClient).phoneNumber.sendOtp({ phoneNumber });\n const err = getAuthClientError(result, '验证码发送失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '验证码发送失败') };\n }\n },\n [authClient],\n );\n\n const verifyPhoneOtp = useCallback(\n async (phoneNumber: string, code: string) => {\n try {\n const result = await clientApi(authClient).phoneNumber.verify({ phoneNumber, code });\n const err = getAuthClientError(result, '验证失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '验证失败') };\n }\n },\n [authClient],\n );\n\n const sendEmailOtp = useCallback(\n async (email: string, type: 'sign-in' | 'email-verification' | 'forget-password' = 'sign-in') => {\n try {\n const result = await clientApi(authClient).emailOtp.sendVerificationOtp({ email, type });\n const err = getAuthClientError(result, '验证码发送失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '验证码发送失败') };\n }\n },\n [authClient],\n );\n\n const signInWithEmailOtp = useCallback(\n async (email: string, otp: string) => {\n try {\n const result = await clientApi(authClient).signIn.emailOtp({ email, otp });\n const err = getAuthClientError(result, '登录失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '登录失败') };\n }\n },\n [authClient],\n );\n\n const requestPhonePasswordReset = useCallback(\n async (phoneNumber: string) => {\n try {\n const result = await clientApi(authClient).phoneNumber.requestPasswordReset({ phoneNumber });\n const err = getAuthClientError(result, '发送验证码失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '发送验证码失败') };\n }\n },\n [authClient],\n );\n\n const resetPhonePassword = useCallback(\n async (phoneNumber: string, otp: string, newPassword: string) => {\n try {\n const result = await clientApi(authClient).phoneNumber.resetPassword({\n phoneNumber,\n otp,\n newPassword,\n });\n const err = getAuthClientError(result, '重置密码失败');\n return err ? { success: false as const, error: err } : { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '重置密码失败') };\n }\n },\n [authClient],\n );\n\n const signOut = useCallback(async () => {\n try {\n await clientApi(authClient).signOut();\n return { success: true as const };\n } catch (e) {\n return { success: false as const, error: errorMessage(e, '退出失败') };\n }\n }, [authClient]);\n\n return {\n signInWithEmail,\n signInWithPhonePassword,\n signUpWithEmail,\n sendPhoneOtp,\n verifyPhoneOtp,\n sendEmailOtp,\n signInWithEmailOtp,\n requestPhonePasswordReset,\n resetPhonePassword,\n signOut,\n };\n}\n\nexport type UseAuthActionsReturn = ReturnType<typeof useAuthActions>;\n"]}
|
|
@@ -2,7 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
var react = require('react');
|
|
4
4
|
|
|
5
|
-
// src/common/auth/hooks/
|
|
5
|
+
// src/common/auth/hooks/useSession.ts
|
|
6
|
+
function useSession(authClient) {
|
|
7
|
+
return authClient.useSession();
|
|
8
|
+
}
|
|
6
9
|
function useAuth(apiClient) {
|
|
7
10
|
const [user, setUser] = react.useState(null);
|
|
8
11
|
const [isLoggedIn, setIsLoggedIn] = react.useState(false);
|
|
@@ -182,5 +185,6 @@ function useAuthForm(initialValues) {
|
|
|
182
185
|
|
|
183
186
|
exports.useAuth = useAuth;
|
|
184
187
|
exports.useAuthForm = useAuthForm;
|
|
185
|
-
|
|
186
|
-
//# sourceMappingURL=chunk-
|
|
188
|
+
exports.useSession = useSession;
|
|
189
|
+
//# sourceMappingURL=chunk-TXMX6PZR.js.map
|
|
190
|
+
//# sourceMappingURL=chunk-TXMX6PZR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/hooks/useSession.ts","../src/common/auth/hooks/useAuth.ts"],"names":["useState","useCallback","useEffect"],"mappings":";;;;;AAOO,SAAS,WAAW,UAAA,EAA8B;AACvD,EAAA,OAAO,WAAW,UAAA,EAAW;AAC/B;ACFO,SAAS,QAAQ,SAAA,EAAyC;AAC/D,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAsB,IAAI,CAAA;AAClD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAKtD,EAAA,MAAM,eAAA,GAAkBC,kBAAY,YAAY;AAC9C,IAAA,IAAI;AACF,MAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,eAAA,EAAgB;AAE/C,MAAA,IAAI,MAAA,EAAQ;AAEV,QAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,cAAA,EAAe;AAEhD,QAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,IAAA,EAAM;AACrC,UAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AACrB,UAAA,aAAA,CAAc,IAAI,CAAA;AAAA,QACpB,CAAA,MAAO;AAEL,UAAA,MAAM,UAAU,aAAA,EAAc;AAC9B,UAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,UAAA,aAAA,CAAc,KAAK,CAAA;AAAA,QACrB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,QAAA,aAAA,CAAc,KAAK,CAAA;AAAA,MACrB;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,qDAAa,GAAG,CAAA;AAC9B,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,kDAAU,CAAA;AACxD,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAKd,EAAA,MAAM,KAAA,GAAQA,iBAAA;AAAA,IACZ,OAAO,OAAe,QAAA,KAA0C;AAC9D,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,KAAA,CAAM,OAAO,QAAQ,CAAA;AAEtD,QAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,IAAA,EAAM;AACrC,UAAA,OAAA,CAAQ,QAAA,CAAS,KAAK,IAAI,CAAA;AAC1B,UAAA,aAAA,CAAc,IAAI,CAAA;AAClB,UAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,MAAM,QAAA,GAAW,SAAS,KAAA,IAAS,0BAAA;AACnC,UAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,UAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS;AAAA,QAC3C;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,QAAA,GAAW,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,kDAAA;AACtD,QAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS;AAAA,MAC3C,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAKA,EAAA,MAAM,QAAA,GAAWA,iBAAA;AAAA,IACf,OAAO,KAAA,EAAe,QAAA,EAAkB,QAAA,KAA0C;AAChF,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACF,QAAA,MAAM,WAAW,MAAM,SAAA,CAAU,QAAA,CAAS,KAAA,EAAO,UAAU,QAAQ,CAAA;AAEnE,QAAA,IAAI,QAAA,CAAS,OAAA,IAAW,QAAA,CAAS,IAAA,EAAM;AACrC,UAAA,OAAA,CAAQ,QAAA,CAAS,KAAK,IAAI,CAAA;AAC1B,UAAA,aAAA,CAAc,IAAI,CAAA;AAClB,UAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,QACzB,CAAA,MAAO;AACL,UAAA,MAAM,QAAA,GAAW,SAAS,KAAA,IAAS,0BAAA;AACnC,UAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,UAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS;AAAA,QAC3C;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,MAAM,QAAA,GAAW,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,kDAAA;AACtD,QAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,QAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,QAAA,EAAS;AAAA,MAC3C,CAAA,SAAE;AACA,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAClB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAKA,EAAA,MAAM,MAAA,GAASA,kBAAY,YAAY;AACrC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AAEb,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,MAAA,EAAO;AACvB,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,6BAAS,GAAG,CAAA;AAC1B,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,0BAAM,CAAA;AAEpD,MAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAKd,EAAA,MAAM,UAAA,GAAaA,kBAAY,MAAM;AACnC,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,eAAA,EAAgB;AAAA,EAClB,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,OAAO;AAAA;AAAA,IAEL,IAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA;AAAA;AAAA,IAGA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,EAAS,eAAA;AAAA,IACT;AAAA,GACF;AACF;AAaO,SAAS,YAA2C,aAAA,EAAkB;AAC3E,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIF,eAAY,aAAa,CAAA;AACrD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAA,CAA2C,EAAE,CAAA;AACzE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,cAAA,CAA4C,EAAE,CAAA;AAE5E,EAAA,MAAM,YAAA,GAAeC,iBAAA;AAAA,IACnB,CAAC,OAAgB,KAAA,KAAe;AAC9B,MAAA,SAAA,CAAU,CAAC,UAAa,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,KAAA,EAAM,CAAE,CAAA;AAEpD,MAAA,IAAI,MAAA,CAAO,KAAK,CAAA,EAAG;AACjB,QAAA,SAAA,CAAU,CAAC,IAAA,KAA2C;AACpD,UAAA,MAAM,SAAA,GAAY,EAAE,GAAG,IAAA,EAAK;AAC5B,UAAA,OAAO,UAAU,KAAK,CAAA;AACtB,UAAA,OAAO,SAAA;AAAA,QACT,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,UAAA,GAAaA,iBAAA,CAAY,CAAC,KAAA,KAAmB;AACjD,IAAA,UAAA,CAAW,CAAC,UAA6C,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,IAAA,EAAK,CAAE,CAAA;AAAA,EACtF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,QAAA,GAAWA,iBAAA;AAAA,IACf,CAAC,eAAA,KAAkF;AACjF,MAAA,MAAM,YAA8C,EAAC;AAErD,MAAA,MAAA,CAAO,IAAA,CAAK,eAAe,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AAC5C,QAAA,MAAM,KAAA,GAAQ,GAAA;AACd,QAAA,MAAM,IAAA,GAAO,gBAAgB,KAAK,CAAA;AAClC,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAChC,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,SAAA,CAAU,KAAK,CAAA,GAAI,KAAA;AAAA,UACrB;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,OAAO,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,KAAW,CAAA;AAAA,IAC3C,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM;AAC9B,IAAA,SAAA,CAAU,aAAa,CAAA;AACvB,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,UAAA,CAAW,EAAE,CAAA;AAAA,EACf,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF","file":"chunk-TXMX6PZR.js","sourcesContent":["'use client';\n\nimport type { Sa2kitAuthClient } from '../react';\n\n/**\n * 薄封装 Better Auth React `useSession`\n */\nexport function useSession(authClient: Sa2kitAuthClient) {\n return authClient.useSession();\n}\n\nexport type UseSessionReturn = ReturnType<typeof useSession>;\n","'use client';\n\nimport { useState, useEffect, useCallback } from 'react';\nimport type { User, IAuthClient as BaseApiClient, AuthResult, UseAuthReturn } from '../types';\n\nexport type { User, BaseApiClient, AuthResult, UseAuthReturn };\n\nexport function useAuth(apiClient: BaseApiClient): UseAuthReturn {\n const [user, setUser] = useState<User | null>(null);\n const [isLoggedIn, setIsLoggedIn] = useState(false);\n const [loading, setLoading] = useState(false);\n const [checkingAuth, setCheckingAuth] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n /**\n * 检查认证状态\n */\n const checkAuthStatus = useCallback(async () => {\n try {\n setCheckingAuth(true);\n setError(null);\n\n const isAuth = await apiClient.isAuthenticated();\n\n if (isAuth) {\n // 验证 token 并获取用户信息\n const response = await apiClient.getCurrentUser();\n\n if (response.success && response.data) {\n setUser(response.data);\n setIsLoggedIn(true);\n } else {\n // Token 无效,清除登录状态\n await apiClient.clearUserData();\n setUser(null);\n setIsLoggedIn(false);\n }\n } else {\n setUser(null);\n setIsLoggedIn(false);\n }\n } catch (err) {\n console.error('检查登录状态失败:', err);\n setError(err instanceof Error ? err.message : '检查登录状态失败');\n setUser(null);\n setIsLoggedIn(false);\n } finally {\n setCheckingAuth(false);\n }\n }, [apiClient]);\n\n /**\n * 用户登录\n */\n const login = useCallback(\n async (email: string, password: string): Promise<AuthResult> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.login(email, password);\n\n if (response.success && response.data) {\n setUser(response.data.user);\n setIsLoggedIn(true);\n return { success: true };\n } else {\n const errorMsg = response.error || '登录失败';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '登录失败,请重试';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n } finally {\n setLoading(false);\n }\n },\n [apiClient]\n );\n\n /**\n * 用户注册\n */\n const register = useCallback(\n async (email: string, password: string, username: string): Promise<AuthResult> => {\n setLoading(true);\n setError(null);\n\n try {\n const response = await apiClient.register(email, password, username);\n\n if (response.success && response.data) {\n setUser(response.data.user);\n setIsLoggedIn(true);\n return { success: true };\n } else {\n const errorMsg = response.error || '注册失败';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : '注册失败,请重试';\n setError(errorMsg);\n return { success: false, error: errorMsg };\n } finally {\n setLoading(false);\n }\n },\n [apiClient]\n );\n\n /**\n * 用户登出\n */\n const logout = useCallback(async () => {\n setLoading(true);\n setError(null);\n\n try {\n await apiClient.logout();\n setUser(null);\n setIsLoggedIn(false);\n } catch (err) {\n console.error('登出失败:', err);\n setError(err instanceof Error ? err.message : '登出失败');\n // 即使登出失败,也清除本地状态\n setUser(null);\n setIsLoggedIn(false);\n } finally {\n setLoading(false);\n }\n }, [apiClient]);\n\n /**\n * 清除错误信息\n */\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n // 组件挂载时检查认证状态\n useEffect(() => {\n checkAuthStatus();\n }, [checkAuthStatus]);\n\n return {\n // 状态\n user,\n isLoggedIn,\n loading,\n checkingAuth,\n error,\n\n // 操作方法\n login,\n register,\n logout,\n refresh: checkAuthStatus,\n clearError,\n };\n}\n\n/**\n * 表单验证 Hook\n *\n * @example\n * ```typescript\n * const { values, errors, handleChange, handleBlur, validate } = useAuthForm({\n * email: '',\n * password: ''\n * })\n * ```\n */\nexport function useAuthForm<T extends Record<string, any>>(initialValues: T) {\n const [values, setValues] = useState<T>(initialValues);\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof T, boolean>>>({});\n\n const handleChange = useCallback(\n (field: keyof T, value: any) => {\n setValues((prev: T) => ({ ...prev, [field]: value }));\n // 清除该字段的错误\n if (errors[field]) {\n setErrors((prev: Partial<Record<keyof T, string>>) => {\n const newErrors = { ...prev };\n delete newErrors[field];\n return newErrors;\n });\n }\n },\n [errors]\n );\n\n const handleBlur = useCallback((field: keyof T) => {\n setTouched((prev: Partial<Record<keyof T, boolean>>) => ({ ...prev, [field]: true }));\n }, []);\n\n const validate = useCallback(\n (validationRules: Partial<Record<keyof T, (value: any) => string | undefined>>) => {\n const newErrors: Partial<Record<keyof T, string>> = {};\n\n Object.keys(validationRules).forEach((key) => {\n const field = key as keyof T;\n const rule = validationRules[field];\n if (rule) {\n const error = rule(values[field]);\n if (error) {\n newErrors[field] = error;\n }\n }\n });\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n },\n [values]\n );\n\n const reset = useCallback(() => {\n setValues(initialValues);\n setErrors({});\n setTouched({});\n }, [initialValues]);\n\n return {\n values,\n errors,\n touched,\n handleChange,\n handleBlur,\n validate,\n reset,\n setValues,\n setErrors,\n };\n}\n\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var bcrypt = require('bcryptjs');
|
|
4
|
+
|
|
5
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
+
|
|
7
|
+
var bcrypt__default = /*#__PURE__*/_interopDefault(bcrypt);
|
|
8
|
+
|
|
9
|
+
// src/common/auth/services/password-utils.ts
|
|
10
|
+
async function hashPassword(password, saltRounds = 12) {
|
|
11
|
+
return bcrypt__default.default.hash(password, saltRounds);
|
|
12
|
+
}
|
|
13
|
+
async function verifyPassword(password, hashedPassword) {
|
|
14
|
+
return bcrypt__default.default.compare(password, hashedPassword);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
exports.hashPassword = hashPassword;
|
|
18
|
+
exports.verifyPassword = verifyPassword;
|
|
19
|
+
//# sourceMappingURL=chunk-VHN7PF5I.js.map
|
|
20
|
+
//# sourceMappingURL=chunk-VHN7PF5I.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/services/password-utils.ts"],"names":["bcrypt"],"mappings":";;;;;;;;;AAUA,eAAsB,YAAA,CAAa,QAAA,EAAkB,UAAA,GAAqB,EAAA,EAAqB;AAC7F,EAAA,OAAOA,uBAAA,CAAO,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AACzC;AAKA,eAAsB,cAAA,CAAe,UAAkB,cAAA,EAA0C;AAC/F,EAAA,OAAOA,uBAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,cAAc,CAAA;AAChD","file":"chunk-VHN7PF5I.js","sourcesContent":["/**\n * Auth Services - Password Utilities\n * 密码哈希相关工具函数\n */\n\nimport bcrypt from 'bcryptjs';\n\n/**\n * 哈希密码\n */\nexport async function hashPassword(password: string, saltRounds: number = 12): Promise<string> {\n return bcrypt.hash(password, saltRounds);\n}\n\n/**\n * 验证密码\n */\nexport async function verifyPassword(password: string, hashedPassword: string): Promise<boolean> {\n return bcrypt.compare(password, hashedPassword);\n}\n\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkIS7O4LPI_js = require('./chunk-IS7O4LPI.js');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
|
|
6
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
|
+
|
|
8
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
9
|
+
|
|
10
|
+
var AuthContext = React.createContext(null);
|
|
11
|
+
function AuthProvider({ authClient, children }) {
|
|
12
|
+
const session = authClient.useSession();
|
|
13
|
+
const actions = chunkIS7O4LPI_js.useAuthActions(authClient);
|
|
14
|
+
const user = session.data?.user ?? null;
|
|
15
|
+
const value = React.useMemo(
|
|
16
|
+
() => ({
|
|
17
|
+
authClient,
|
|
18
|
+
user,
|
|
19
|
+
isAuthenticated: !!user,
|
|
20
|
+
loading: session.isPending,
|
|
21
|
+
refreshSession: async () => {
|
|
22
|
+
await session.refetch();
|
|
23
|
+
},
|
|
24
|
+
...actions
|
|
25
|
+
}),
|
|
26
|
+
[authClient, user, session.isPending, session.refetch, actions]
|
|
27
|
+
);
|
|
28
|
+
return /* @__PURE__ */ React__default.default.createElement(AuthContext.Provider, { value }, children);
|
|
29
|
+
}
|
|
30
|
+
function useAuthContext() {
|
|
31
|
+
const ctx = React.useContext(AuthContext);
|
|
32
|
+
if (!ctx) {
|
|
33
|
+
throw new Error("useAuthContext \u5FC5\u987B\u5728 AuthProvider \u5185\u4F7F\u7528");
|
|
34
|
+
}
|
|
35
|
+
return ctx;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
exports.AuthProvider = AuthProvider;
|
|
39
|
+
exports.useAuthContext = useAuthContext;
|
|
40
|
+
//# sourceMappingURL=chunk-VJNDOYEC.js.map
|
|
41
|
+
//# sourceMappingURL=chunk-VJNDOYEC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/context/AuthProvider.tsx"],"names":["createContext","useAuthActions","useMemo","React","useContext"],"mappings":";;;;;;;;;AAwBA,IAAM,WAAA,GAAcA,oBAAuC,IAAI,CAAA;AAOxD,SAAS,YAAA,CAAa,EAAE,UAAA,EAAY,QAAA,EAAS,EAAsB;AACxE,EAAA,MAAM,OAAA,GAAU,WAAW,UAAA,EAAW;AACtC,EAAA,MAAM,OAAA,GAAUC,gCAAe,UAAU,CAAA;AAEzC,EAAA,MAAM,IAAA,GAAQ,OAAA,CAAQ,IAAA,EAAM,IAAA,IAAiC,IAAA;AAE7D,EAAA,MAAM,KAAA,GAAQC,aAAA;AAAA,IACZ,OAAO;AAAA,MACL,UAAA;AAAA,MACA,IAAA;AAAA,MACA,eAAA,EAAiB,CAAC,CAAC,IAAA;AAAA,MACnB,SAAS,OAAA,CAAQ,SAAA;AAAA,MACjB,gBAAgB,YAAY;AAC1B,QAAA,MAAM,QAAQ,OAAA,EAAQ;AAAA,MACxB,CAAA;AAAA,MACA,GAAG;AAAA,KACL,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,IAAA,EAAM,QAAQ,SAAA,EAAW,OAAA,CAAQ,SAAS,OAAO;AAAA,GAChE;AAEA,EAAA,uBAAOC,sBAAA,CAAA,aAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,SAAe,QAAS,CAAA;AACvD;AAEO,SAAS,cAAA,GAAmC;AACjD,EAAA,MAAM,GAAA,GAAMC,iBAAW,WAAW,CAAA;AAClC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,MAAM,mEAAqC,CAAA;AAAA,EACvD;AACA,EAAA,OAAO,GAAA;AACT","file":"chunk-VJNDOYEC.js","sourcesContent":["'use client';\n\nimport React, { createContext, useContext, useMemo } from 'react';\nimport type { Sa2kitAuthClient } from '../react';\nimport { useAuthActions, type UseAuthActionsReturn } from '../hooks/useAuthActions';\n\nexport type AuthUser = {\n id: string;\n email?: string;\n name?: string;\n phoneNumber?: string | null;\n role?: string;\n image?: string | null;\n [key: string]: unknown;\n};\n\nexport type AuthContextValue = UseAuthActionsReturn & {\n authClient: Sa2kitAuthClient;\n user: AuthUser | null;\n isAuthenticated: boolean;\n loading: boolean;\n refreshSession: () => Promise<void>;\n};\n\nconst AuthContext = createContext<AuthContextValue | null>(null);\n\nexport type AuthProviderProps = {\n authClient: Sa2kitAuthClient;\n children: React.ReactNode;\n};\n\nexport function AuthProvider({ authClient, children }: AuthProviderProps) {\n const session = authClient.useSession();\n const actions = useAuthActions(authClient);\n\n const user = (session.data?.user as AuthUser | undefined) ?? null;\n\n const value = useMemo<AuthContextValue>(\n () => ({\n authClient,\n user,\n isAuthenticated: !!user,\n loading: session.isPending,\n refreshSession: async () => {\n await session.refetch();\n },\n ...actions,\n }),\n [authClient, user, session.isPending, session.refetch, actions],\n );\n\n return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n\nexport function useAuthContext(): AuthContextValue {\n const ctx = useContext(AuthContext);\n if (!ctx) {\n throw new Error('useAuthContext 必须在 AuthProvider 内使用');\n }\n return ctx;\n}\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import bcrypt from 'bcryptjs';
|
|
2
|
+
|
|
3
|
+
// src/common/auth/services/password-utils.ts
|
|
4
|
+
async function hashPassword(password, saltRounds = 12) {
|
|
5
|
+
return bcrypt.hash(password, saltRounds);
|
|
6
|
+
}
|
|
7
|
+
async function verifyPassword(password, hashedPassword) {
|
|
8
|
+
return bcrypt.compare(password, hashedPassword);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { hashPassword, verifyPassword };
|
|
12
|
+
//# sourceMappingURL=chunk-XBZIS3MV.mjs.map
|
|
13
|
+
//# sourceMappingURL=chunk-XBZIS3MV.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/services/password-utils.ts"],"names":[],"mappings":";;;AAUA,eAAsB,YAAA,CAAa,QAAA,EAAkB,UAAA,GAAqB,EAAA,EAAqB;AAC7F,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,QAAA,EAAU,UAAU,CAAA;AACzC;AAKA,eAAsB,cAAA,CAAe,UAAkB,cAAA,EAA0C;AAC/F,EAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,cAAc,CAAA;AAChD","file":"chunk-XBZIS3MV.mjs","sourcesContent":["/**\n * Auth Services - Password Utilities\n * 密码哈希相关工具函数\n */\n\nimport bcrypt from 'bcryptjs';\n\n/**\n * 哈希密码\n */\nexport async function hashPassword(password: string, saltRounds: number = 12): Promise<string> {\n return bcrypt.hash(password, saltRounds);\n}\n\n/**\n * 验证密码\n */\nexport async function verifyPassword(password: string, hashedPassword: string): Promise<boolean> {\n return bcrypt.compare(password, hashedPassword);\n}\n\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createSa2kitAuthClient } from './chunk-LHJKLUM7.mjs';
|
|
2
|
+
import { STORAGE_KEYS, BaseApiClient, API_ROUTES } from './chunk-G4NFB2QA.mjs';
|
|
3
|
+
import { useSession, useAuthForm, useAuth } from './chunk-MZOGYD4N.mjs';
|
|
4
|
+
import { __export } from './chunk-MAI35PU6.mjs';
|
|
5
|
+
|
|
6
|
+
// src/common/auth/index.ts
|
|
7
|
+
var auth_exports = {};
|
|
8
|
+
__export(auth_exports, {
|
|
9
|
+
API_ROUTES: () => API_ROUTES,
|
|
10
|
+
BaseApiClient: () => BaseApiClient,
|
|
11
|
+
STORAGE_KEYS: () => STORAGE_KEYS,
|
|
12
|
+
createSa2kitAuthClient: () => createSa2kitAuthClient,
|
|
13
|
+
useAuth: () => useAuth,
|
|
14
|
+
useAuthForm: () => useAuthForm,
|
|
15
|
+
useSession: () => useSession
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
export { auth_exports };
|
|
19
|
+
//# sourceMappingURL=chunk-XFOZ56FB.mjs.map
|
|
20
|
+
//# sourceMappingURL=chunk-XFOZ56FB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/index.ts"],"names":[],"mappings":";;;;;;AAAA,IAAA,YAAA,GAAA;AAAA,QAAA,CAAA,YAAA,EAAA;AAAA,EAAA,UAAA,EAAA,MAAA,UAAA;AAAA,EAAA,aAAA,EAAA,MAAA,aAAA;AAAA,EAAA,YAAA,EAAA,MAAA,YAAA;AAAA,EAAA,sBAAA,EAAA,MAAA,sBAAA;AAAA,EAAA,OAAA,EAAA,MAAA,OAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,UAAA,EAAA,MAAA;AAAA,CAAA,CAAA","file":"chunk-XFOZ56FB.mjs","sourcesContent":["/**\n * @package sa2kit/common/auth\n *\n * Browser / client 安全入口(Better Auth 3.0)\n */\nexport { createSa2kitAuthClient, type Sa2kitAuthClient, type Sa2kitAuthClientOptions } from './client';\nexport { useSession, type UseSessionReturn } from './hooks/useSession';\n\n/** @deprecated 3.0 请使用 createSa2kitAuthClient + useSession */\nexport { useAuth, useAuthForm } from './hooks/useAuth';\n/** @deprecated 3.0 请使用 createSa2kitAuthClient */\nexport { BaseApiClient, API_ROUTES, STORAGE_KEYS } from './client';\n\nexport type { LoginFormState, RegisterFormState } from './components/types';\nexport * from './types';\n"]}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkLGHUCQIU_js = require('./chunk-LGHUCQIU.js');
|
|
4
|
+
var betterAuth = require('better-auth');
|
|
5
|
+
var drizzleAdapter = require('@better-auth/drizzle-adapter');
|
|
6
|
+
var plugins = require('better-auth/plugins');
|
|
7
|
+
var nextJs = require('better-auth/next-js');
|
|
8
|
+
|
|
9
|
+
// src/common/auth/server/plugins/dev-otp.ts
|
|
10
|
+
function createDevOtpLogger(enabled) {
|
|
11
|
+
if (!enabled || process.env.NODE_ENV === "production") {
|
|
12
|
+
return void 0;
|
|
13
|
+
}
|
|
14
|
+
return (channel, target, code) => {
|
|
15
|
+
console.info(`[sa2kit/auth][dev-otp][${channel}] ${target} => ${code}`);
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
var defaultPhoneValidator = (phoneNumber2) => /^1\d{10}$/.test(phoneNumber2);
|
|
19
|
+
var defaultTempEmailFromPhone = (phoneNumber2) => `${phoneNumber2.replace(/\D/g, "")}@phone.sa2kit.local`;
|
|
20
|
+
|
|
21
|
+
// src/common/auth/server/create-auth.ts
|
|
22
|
+
function createSa2kitAuth(config) {
|
|
23
|
+
if (!config.secret || config.secret.length < 32) {
|
|
24
|
+
throw new Error("createSa2kitAuth: secret \u81F3\u5C11 32 \u5B57\u7B26");
|
|
25
|
+
}
|
|
26
|
+
const devLog = createDevOtpLogger(config.logOtpInDev ?? process.env.NODE_ENV !== "production");
|
|
27
|
+
const phoneValidator = config.phoneNumberValidator ?? defaultPhoneValidator;
|
|
28
|
+
const auth = betterAuth.betterAuth({
|
|
29
|
+
appName: "sa2kit",
|
|
30
|
+
baseURL: config.baseURL,
|
|
31
|
+
basePath: config.basePath ?? "/api/auth",
|
|
32
|
+
secret: config.secret,
|
|
33
|
+
trustedOrigins: config.trustedOrigins,
|
|
34
|
+
database: drizzleAdapter.drizzleAdapter(config.db, {
|
|
35
|
+
provider: "pg",
|
|
36
|
+
schema: chunkLGHUCQIU_js.authDrizzleSchema
|
|
37
|
+
}),
|
|
38
|
+
emailAndPassword: {
|
|
39
|
+
enabled: true
|
|
40
|
+
},
|
|
41
|
+
user: {
|
|
42
|
+
additionalFields: {
|
|
43
|
+
role: {
|
|
44
|
+
type: "string",
|
|
45
|
+
required: false,
|
|
46
|
+
defaultValue: "USER",
|
|
47
|
+
input: false
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
plugins: [
|
|
52
|
+
plugins.bearer(),
|
|
53
|
+
plugins.emailOTP({
|
|
54
|
+
async sendVerificationOTP({ email, otp, type }) {
|
|
55
|
+
devLog?.("email", `${email} (${type})`, otp);
|
|
56
|
+
if (config.email?.sendVerificationOTP) {
|
|
57
|
+
await config.email.sendVerificationOTP(email, otp, type);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}),
|
|
61
|
+
plugins.phoneNumber({
|
|
62
|
+
allowedAttempts: 5,
|
|
63
|
+
phoneNumberValidator: phoneValidator,
|
|
64
|
+
async sendOTP({ phoneNumber: phone, code }) {
|
|
65
|
+
devLog?.("sms", phone, code);
|
|
66
|
+
if (config.sms?.sendOTP) {
|
|
67
|
+
void config.sms.sendOTP(phone, code);
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
signUpOnVerification: {
|
|
71
|
+
getTempEmail: defaultTempEmailFromPhone,
|
|
72
|
+
getTempName: (phone) => phone
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
]
|
|
76
|
+
});
|
|
77
|
+
return auth;
|
|
78
|
+
}
|
|
79
|
+
function mountNextAuthHandler(auth) {
|
|
80
|
+
return nextJs.toNextJsHandler(auth);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// src/common/auth/server/handler/hono.ts
|
|
84
|
+
function mountAuthHandler(auth) {
|
|
85
|
+
return (request) => auth.handler(request);
|
|
86
|
+
}
|
|
87
|
+
function createAuthRouteHandlers(auth) {
|
|
88
|
+
const handler = mountAuthHandler(auth);
|
|
89
|
+
return {
|
|
90
|
+
GET: handler,
|
|
91
|
+
POST: handler,
|
|
92
|
+
PUT: handler,
|
|
93
|
+
PATCH: handler,
|
|
94
|
+
DELETE: handler
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// src/common/auth/server/session.ts
|
|
99
|
+
async function getSessionUser(auth, request) {
|
|
100
|
+
const session2 = await auth.api.getSession({ headers: request.headers });
|
|
101
|
+
if (!session2?.user) return null;
|
|
102
|
+
const user2 = session2.user;
|
|
103
|
+
return {
|
|
104
|
+
id: user2.id,
|
|
105
|
+
email: user2.email,
|
|
106
|
+
name: user2.name,
|
|
107
|
+
role: user2.role,
|
|
108
|
+
phoneNumber: user2.phoneNumber ?? null
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async function getSessionUserNumeric(auth, request) {
|
|
112
|
+
const user2 = await getSessionUser(auth, request);
|
|
113
|
+
if (!user2) return null;
|
|
114
|
+
const numericId = Number.parseInt(user2.id, 10);
|
|
115
|
+
if (Number.isNaN(numericId)) return null;
|
|
116
|
+
const { id: _id, ...rest } = user2;
|
|
117
|
+
return { ...rest, id: numericId };
|
|
118
|
+
}
|
|
119
|
+
function createSessionValidator(auth) {
|
|
120
|
+
return {
|
|
121
|
+
getSessionUser: (request) => getSessionUser(auth, request),
|
|
122
|
+
getSessionUserNumeric: (request) => getSessionUserNumeric(auth, request)
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
exports.createAuthRouteHandlers = createAuthRouteHandlers;
|
|
127
|
+
exports.createSa2kitAuth = createSa2kitAuth;
|
|
128
|
+
exports.createSessionValidator = createSessionValidator;
|
|
129
|
+
exports.defaultPhoneValidator = defaultPhoneValidator;
|
|
130
|
+
exports.defaultTempEmailFromPhone = defaultTempEmailFromPhone;
|
|
131
|
+
exports.getSessionUser = getSessionUser;
|
|
132
|
+
exports.getSessionUserNumeric = getSessionUserNumeric;
|
|
133
|
+
exports.mountAuthHandler = mountAuthHandler;
|
|
134
|
+
exports.mountNextAuthHandler = mountNextAuthHandler;
|
|
135
|
+
//# sourceMappingURL=chunk-Z23HAXHL.js.map
|
|
136
|
+
//# sourceMappingURL=chunk-Z23HAXHL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/server/plugins/dev-otp.ts","../src/common/auth/server/create-auth.ts","../src/common/auth/server/handler/next.ts","../src/common/auth/server/handler/hono.ts","../src/common/auth/server/session.ts"],"names":["phoneNumber","betterAuth","drizzleAdapter","authDrizzleSchema","bearer","emailOTP","toNextJsHandler","session","user"],"mappings":"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","file":"chunk-Z23HAXHL.js","sourcesContent":["/**\n * 开发 / 测试环境 OTP 输出(禁止生产依赖)\n */\nexport function createDevOtpLogger(enabled: boolean) {\n if (!enabled || process.env.NODE_ENV === 'production') {\n return undefined;\n }\n return (channel: 'sms' | 'email', target: string, code: string) => {\n console.info(`[sa2kit/auth][dev-otp][${channel}] ${target} => ${code}`);\n };\n}\n\nexport const defaultPhoneValidator = (phoneNumber: string) => /^1\\d{10}$/.test(phoneNumber);\n\nexport const defaultTempEmailFromPhone = (phoneNumber: string) =>\n `${phoneNumber.replace(/\\D/g, '')}@phone.sa2kit.local`;\n","/**\n * Better Auth 服务端工厂(sa2kit 3.0 SSOT)\n */\nimport { betterAuth } from 'better-auth';\nimport { drizzleAdapter } from '@better-auth/drizzle-adapter';\nimport { emailOTP } from 'better-auth/plugins';\nimport { phoneNumber } from 'better-auth/plugins';\nimport { bearer } from 'better-auth/plugins';\nimport { authDrizzleSchema } from '../schema';\nimport type { Sa2kitAuthConfig, Sa2kitAuthInstance } from './types';\nimport {\n createDevOtpLogger,\n defaultPhoneValidator,\n defaultTempEmailFromPhone,\n} from './plugins/dev-otp';\n\nexport type { Sa2kitAuthInstance } from './types';\n\nexport function createSa2kitAuth(config: Sa2kitAuthConfig): Sa2kitAuthInstance {\n if (!config.secret || config.secret.length < 32) {\n throw new Error('createSa2kitAuth: secret 至少 32 字符');\n }\n\n const devLog = createDevOtpLogger(config.logOtpInDev ?? process.env.NODE_ENV !== 'production');\n const phoneValidator = config.phoneNumberValidator ?? defaultPhoneValidator;\n\n const auth = betterAuth({\n appName: 'sa2kit',\n baseURL: config.baseURL,\n basePath: config.basePath ?? '/api/auth',\n secret: config.secret,\n trustedOrigins: config.trustedOrigins,\n database: drizzleAdapter(config.db as never, {\n provider: 'pg',\n schema: authDrizzleSchema,\n }),\n emailAndPassword: {\n enabled: true,\n },\n user: {\n additionalFields: {\n role: {\n type: 'string',\n required: false,\n defaultValue: 'USER',\n input: false,\n },\n },\n },\n plugins: [\n bearer(),\n emailOTP({\n async sendVerificationOTP({ email, otp, type }) {\n devLog?.('email', `${email} (${type})`, otp);\n if (config.email?.sendVerificationOTP) {\n await config.email.sendVerificationOTP(email, otp, type);\n }\n },\n }),\n phoneNumber({\n allowedAttempts: 5,\n phoneNumberValidator: phoneValidator,\n async sendOTP({ phoneNumber: phone, code }) {\n devLog?.('sms', phone, code);\n if (config.sms?.sendOTP) {\n void config.sms.sendOTP(phone, code);\n }\n },\n signUpOnVerification: {\n getTempEmail: defaultTempEmailFromPhone,\n getTempName: (phone) => phone,\n },\n }),\n ],\n }) as unknown as Sa2kitAuthInstance;\n\n return auth;\n}\n","/**\n * Next.js App Router handler 挂载\n */\nimport { toNextJsHandler } from 'better-auth/next-js';\nimport type { Sa2kitAuthInstance } from '../create-auth';\n\nexport function mountNextAuthHandler(auth: Sa2kitAuthInstance) {\n return toNextJsHandler(auth);\n}\n","/**\n * Hono / 通用 fetch handler\n */\nimport type { Sa2kitAuthInstance } from '../create-auth';\n\nexport function mountAuthHandler(auth: Sa2kitAuthInstance) {\n return (request: Request) => auth.handler(request);\n}\n\nexport function createAuthRouteHandlers(auth: Sa2kitAuthInstance) {\n const handler = mountAuthHandler(auth);\n return {\n GET: handler,\n POST: handler,\n PUT: handler,\n PATCH: handler,\n DELETE: handler,\n };\n}\n","/**\n * 从 Request 解析 Better Auth session(替代自研 JWT validateApiAuth)\n */\nimport type { Sa2kitAuthInstance } from './types';\n\nexport type SessionUser = {\n id: string;\n email: string;\n name: string;\n role?: string;\n phoneNumber?: string | null;\n};\n\nexport async function getSessionUser(\n auth: Sa2kitAuthInstance,\n request: Request,\n): Promise<SessionUser | null> {\n const session = await auth.api.getSession({ headers: request.headers });\n if (!session?.user) return null;\n\n const user = session.user as SessionUser & { role?: string };\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n role: user.role,\n phoneNumber: (user as { phoneNumber?: string | null }).phoneNumber ?? null,\n };\n}\n\nexport type SessionUserNumeric = Omit<SessionUser, 'id'> & { id: number };\n\n/** 兼容 numeric id 消费方(legacy calendar 等) */\nexport async function getSessionUserNumeric(\n auth: Sa2kitAuthInstance,\n request: Request,\n): Promise<SessionUserNumeric | null> {\n const user = await getSessionUser(auth, request);\n if (!user) return null;\n const numericId = Number.parseInt(user.id, 10);\n if (Number.isNaN(numericId)) return null;\n const { id: _id, ...rest } = user;\n return { ...rest, id: numericId };\n}\n\nexport function createSessionValidator(auth: Sa2kitAuthInstance) {\n return {\n getSessionUser: (request: Request) => getSessionUser(auth, request),\n getSessionUserNumeric: (request: Request) => getSessionUserNumeric(auth, request),\n };\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// src/common/auth/components/utils.ts
|
|
2
|
+
function validatePhoneNumber(phone) {
|
|
3
|
+
return /^1[3-9]\d{9}$/.test(phone.trim());
|
|
4
|
+
}
|
|
5
|
+
function validatePassword(password) {
|
|
6
|
+
if (!password) return { valid: false, message: "\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A" };
|
|
7
|
+
if (password.length < 6) return { valid: false, message: "\u5BC6\u7801\u957F\u5EA6\u81F3\u5C11 6 \u4F4D" };
|
|
8
|
+
return { valid: true };
|
|
9
|
+
}
|
|
10
|
+
function validateEmail(email) {
|
|
11
|
+
return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.trim());
|
|
12
|
+
}
|
|
13
|
+
function getAuthClientError(result, fallback) {
|
|
14
|
+
const r = result;
|
|
15
|
+
if (!r?.error) return null;
|
|
16
|
+
return r.error.message ?? r.error.statusText ?? fallback;
|
|
17
|
+
}
|
|
18
|
+
function errorMessage(error, fallback) {
|
|
19
|
+
if (error instanceof Error && error.message) return error.message;
|
|
20
|
+
if (typeof error === "string") return error;
|
|
21
|
+
return fallback;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { errorMessage, getAuthClientError, validateEmail, validatePassword, validatePhoneNumber };
|
|
25
|
+
//# sourceMappingURL=chunk-ZF7DKR5A.mjs.map
|
|
26
|
+
//# sourceMappingURL=chunk-ZF7DKR5A.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/common/auth/components/utils.ts"],"names":[],"mappings":";AACO,SAAS,oBAAoB,KAAA,EAAwB;AAC1D,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AAC1C;AAEO,SAAS,iBAAiB,QAAA,EAAwD;AACvF,EAAA,IAAI,CAAC,QAAA,EAAU,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,SAAS,sCAAA,EAAS;AACxD,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,SAAS,+CAAA,EAAa;AACtE,EAAA,OAAO,EAAE,OAAO,IAAA,EAAK;AACvB;AAEO,SAAS,cAAc,KAAA,EAAwB;AACpD,EAAA,OAAO,4BAAA,CAA6B,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACvD;AAOO,SAAS,kBAAA,CAAmB,QAAiB,QAAA,EAAiC;AACnF,EAAA,MAAM,CAAA,GAAI,MAAA;AACV,EAAA,IAAI,CAAC,CAAA,EAAG,KAAA,EAAO,OAAO,IAAA;AACtB,EAAA,OAAO,CAAA,CAAE,KAAA,CAAM,OAAA,IAAW,CAAA,CAAE,MAAM,UAAA,IAAc,QAAA;AAClD;AAEO,SAAS,YAAA,CAAa,OAAgB,QAAA,EAA0B;AACrE,EAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,OAAA,SAAgB,KAAA,CAAM,OAAA;AAC1D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,KAAA;AACtC,EAAA,OAAO,QAAA;AACT","file":"chunk-ZF7DKR5A.mjs","sourcesContent":["/** 中国大陆手机号 */\nexport function validatePhoneNumber(phone: string): boolean {\n return /^1[3-9]\\d{9}$/.test(phone.trim());\n}\n\nexport function validatePassword(password: string): { valid: boolean; message?: string } {\n if (!password) return { valid: false, message: '密码不能为空' };\n if (password.length < 6) return { valid: false, message: '密码长度至少 6 位' };\n return { valid: true };\n}\n\nexport function validateEmail(email: string): boolean {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email.trim());\n}\n\ntype AuthClientResult = {\n error?: { message?: string; statusText?: string } | null;\n data?: unknown;\n};\n\nexport function getAuthClientError(result: unknown, fallback: string): string | null {\n const r = result as AuthClientResult | null | undefined;\n if (!r?.error) return null;\n return r.error.message ?? r.error.statusText ?? fallback;\n}\n\nexport function errorMessage(error: unknown, fallback: string): string {\n if (error instanceof Error && error.message) return error.message;\n if (typeof error === 'string') return error;\n return fallback;\n}\n"]}
|