sa2kit 2.0.4 → 3.1.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/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/ai/llm/ui/miniapp/index.d.mts +2 -2
- package/dist/ai/llm/ui/miniapp/index.d.ts +2 -2
- package/dist/ai/llm/ui/rn/index.d.mts +2 -2
- package/dist/ai/llm/ui/rn/index.d.ts +2 -2
- package/dist/ai/llm/ui/web/index.d.mts +3 -3
- package/dist/ai/llm/ui/web/index.d.ts +3 -3
- package/dist/analytics/index.d.mts +1 -1
- package/dist/analytics/index.d.ts +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-RJP2BRJD.mjs → chunk-4OOANEJV.mjs} +2 -2
- package/dist/{chunk-RJP2BRJD.mjs.map → chunk-4OOANEJV.mjs.map} +1 -1
- package/dist/chunk-5FUAQLGC.mjs +14 -0
- package/dist/chunk-5FUAQLGC.mjs.map +1 -0
- package/dist/{chunk-IIVNHQEI.mjs → chunk-5GBDDXYL.mjs} +4 -3
- package/dist/chunk-5GBDDXYL.mjs.map +1 -0
- package/dist/{chunk-S732H246.js → chunk-6PMXAK7F.js} +2 -2
- package/dist/{chunk-S732H246.js.map → chunk-6PMXAK7F.js.map} +1 -1
- package/dist/chunk-6YLCRWKM.mjs +8 -0
- package/dist/chunk-6YLCRWKM.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-HQLKOXG7.js +16 -0
- package/dist/chunk-HQLKOXG7.js.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-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-NDGHXVGS.js +25 -0
- package/dist/chunk-NDGHXVGS.js.map +1 -0
- package/dist/chunk-PA4ELVGI.js +20 -0
- package/dist/chunk-PA4ELVGI.js.map +1 -0
- package/dist/chunk-Q5VFBPMG.mjs +76 -0
- package/dist/chunk-Q5VFBPMG.mjs.map +1 -0
- package/dist/{chunk-WZDTNDYR.js → chunk-QSKLQX6H.js} +11 -11
- package/dist/{chunk-WZDTNDYR.js.map → chunk-QSKLQX6H.js.map} +1 -1
- package/dist/{chunk-QQ2WFYOD.js → chunk-S6YSGVWD.js} +4 -76
- package/dist/chunk-S6YSGVWD.js.map +1 -0
- package/dist/chunk-TNJ6LYX7.mjs +18 -0
- package/dist/chunk-TNJ6LYX7.mjs.map +1 -0
- package/dist/chunk-TTYCVBIQ.mjs +144 -0
- package/dist/chunk-TTYCVBIQ.mjs.map +1 -0
- package/dist/chunk-VJNDOYEC.js +41 -0
- package/dist/chunk-VJNDOYEC.js.map +1 -0
- package/dist/{chunk-J77KR2EV.mjs → chunk-WJ7IMUEJ.mjs} +3 -3
- package/dist/{chunk-J77KR2EV.mjs.map → chunk-WJ7IMUEJ.mjs.map} +1 -1
- package/dist/chunk-YTGUIRRH.js +10 -0
- package/dist/chunk-YTGUIRRH.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 +3209 -0
- package/dist/common/auth/client/index.d.ts +3209 -0
- package/dist/common/auth/client/index.js +13 -0
- package/dist/common/auth/client/index.mjs +4 -0
- package/dist/common/auth/components/index.d.mts +140 -0
- package/dist/common/auth/components/index.d.ts +140 -0
- package/dist/common/auth/components/index.js +899 -0
- package/dist/common/auth/components/index.js.map +1 -0
- package/dist/common/auth/components/index.mjs +875 -0
- package/dist/common/auth/components/index.mjs.map +1 -0
- package/dist/common/auth/hooks/index.d.mts +48 -0
- package/dist/common/auth/hooks/index.d.ts +48 -0
- package/dist/common/auth/hooks/index.js +19 -0
- package/dist/common/auth/hooks/index.mjs +6 -0
- package/dist/common/auth/index.d.mts +11 -7
- package/dist/common/auth/index.d.ts +11 -7
- package/dist/common/auth/index.js +7 -19
- package/dist/common/auth/index.mjs +3 -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 +3122 -0
- package/dist/common/auth/rn/index.d.ts +3122 -0
- package/dist/common/auth/rn/index.js +316 -0
- package/dist/common/auth/rn/index.js.map +1 -0
- package/dist/common/auth/rn/index.mjs +298 -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.mjs +4 -0
- package/dist/common/auth/server/index.d.mts +81 -25
- package/dist/common/auth/server/index.d.ts +81 -25
- package/dist/common/auth/server/index.js +146 -98
- package/dist/common/auth/server/index.js.map +1 -1
- package/dist/common/auth/server/index.mjs +125 -5
- package/dist/common/auth/server/index.mjs.map +1 -1
- 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 +20 -0
- package/dist/common/auth/services/index.js.map +1 -0
- package/dist/common/auth/services/index.mjs +13 -0
- package/dist/common/auth/services/index.mjs.map +1 -0
- package/dist/common/file/server/index.js +32 -32
- package/dist/common/file/server/index.mjs +3 -3
- package/dist/common/index.d.mts +13 -8
- package/dist/common/index.d.ts +13 -8
- package/dist/common/index.js +19 -18
- package/dist/common/index.mjs +8 -7
- 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/i18n/index.d.mts +1 -1
- package/dist/i18n/index.d.ts +1 -1
- package/dist/imageCrop/index.d.mts +3 -3
- package/dist/imageCrop/index.d.ts +3 -3
- package/dist/index-Bd7cKF1j.d.mts +50 -0
- package/dist/{index-CLB80GCP.d.mts → index-D0cqaQEH.d.mts} +5 -5
- package/dist/{index-CLB80GCP.d.ts → index-D0cqaQEH.d.ts} +5 -5
- package/dist/index-DRQxtCDw.d.ts +50 -0
- 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-BxZauNN_.d.ts → index-DoUo8IrU.d.mts} +8 -8
- package/dist/{index-BxZauNN_.d.mts → index-DoUo8IrU.d.ts} +8 -8
- package/dist/index.d.mts +6382 -105
- package/dist/index.d.ts +6382 -105
- package/dist/index.js +1037 -2616
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +976 -2555
- 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/ossFile/server/index.js +32 -32
- package/dist/ossFile/server/index.mjs +3 -3
- 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.ts → types-Cs0CLvrH.d.mts} +1 -1
- package/dist/{types-tQfupO6d.d.mts → types-Cs0CLvrH.d.ts} +1 -1
- package/dist/{types-ERmJyjx8.d.ts → types-_rFX1atk.d.ts} +1 -1
- package/dist/universalExport/index.d.mts +3 -3
- package/dist/universalExport/index.d.ts +3 -3
- package/dist/universalFile/index.d.mts +5 -5
- package/dist/universalFile/index.d.ts +5 -5
- package/dist/universalFile/server/index.js +62 -62
- package/dist/universalFile/server/index.mjs +2 -2
- 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 +44 -111
- package/dist/auth/client/index.d.mts +0 -32
- package/dist/auth/client/index.d.ts +0 -32
- package/dist/auth/client/index.js +0 -21
- package/dist/auth/client/index.mjs +0 -4
- package/dist/auth/components/index.d.mts +0 -227
- package/dist/auth/components/index.d.ts +0 -227
- package/dist/auth/components/index.js +0 -327
- package/dist/auth/components/index.js.map +0 -1
- package/dist/auth/components/index.mjs +0 -319
- package/dist/auth/components/index.mjs.map +0 -1
- package/dist/auth/hooks/index.d.mts +0 -31
- package/dist/auth/hooks/index.d.ts +0 -31
- package/dist/auth/hooks/index.js +0 -17
- package/dist/auth/hooks/index.mjs +0 -4
- package/dist/auth/index.d.mts +0 -18
- package/dist/auth/index.d.ts +0 -18
- package/dist/auth/index.js +0 -151
- package/dist/auth/index.mjs +0 -10
- 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.js.map +0 -1
- package/dist/auth/middleware/index.mjs +0 -6
- package/dist/auth/middleware/index.mjs.map +0 -1
- package/dist/auth/rn/index.d.mts +0 -64
- package/dist/auth/rn/index.d.ts +0 -64
- package/dist/auth/rn/index.js +0 -765
- package/dist/auth/rn/index.js.map +0 -1
- package/dist/auth/rn/index.mjs +0 -754
- package/dist/auth/rn/index.mjs.map +0 -1
- 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.js.map +0 -1
- package/dist/auth/routes/index.mjs +0 -6
- package/dist/auth/routes/index.mjs.map +0 -1
- package/dist/auth/schema/index.d.mts +0 -789
- package/dist/auth/schema/index.d.ts +0 -789
- package/dist/auth/schema/index.js +0 -41
- package/dist/auth/schema/index.js.map +0 -1
- package/dist/auth/schema/index.mjs +0 -4
- package/dist/auth/schema/index.mjs.map +0 -1
- package/dist/auth/services/index.d.mts +0 -48
- package/dist/auth/services/index.d.ts +0 -48
- package/dist/auth/services/index.js +0 -34
- package/dist/auth/services/index.js.map +0 -1
- package/dist/auth/services/index.mjs +0 -5
- package/dist/auth/services/index.mjs.map +0 -1
- package/dist/base-api-client-ACKKt13v.d.mts +0 -277
- package/dist/base-api-client-ACKKt13v.d.ts +0 -277
- package/dist/base-api-client-B3wZZoaH.d.ts +0 -103
- package/dist/base-api-client-DrL35Ea2.d.mts +0 -103
- package/dist/chunk-37HYTHEC.mjs +0 -90
- package/dist/chunk-37HYTHEC.mjs.map +0 -1
- package/dist/chunk-5WV35FPV.js +0 -131
- package/dist/chunk-5WV35FPV.js.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-HBF4HPRK.js +0 -186
- package/dist/chunk-HBF4HPRK.js.map +0 -1
- package/dist/chunk-HCI6JQOU.mjs +0 -183
- 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 +0 -216
- 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 +0 -212
- 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-Bnh6VqFv.d.ts +0 -35
- package/dist/index-DNKZ7-R_.d.mts +0 -184
- package/dist/index-DNKZ7-R_.d.ts +0 -184
- package/dist/index-DPYkrKZf.d.mts +0 -35
- package/dist/types-C5vUWf9u.d.ts +0 -70
- package/dist/types-C_W_CoUD.d.ts +0 -99
- package/dist/types-DCRvasyH.d.mts +0 -99
- package/dist/types-IYCqCk2g.d.mts +0 -70
- /package/dist/{auth → common/auth}/client/index.js.map +0 -0
- /package/dist/{auth → common/auth}/client/index.mjs.map +0 -0
- /package/dist/{auth → common/auth}/hooks/index.js.map +0 -0
- /package/dist/{auth → common/auth}/hooks/index.mjs.map +0 -0
- /package/dist/{auth → common/auth/schema}/index.js.map +0 -0
- /package/dist/{auth → common/auth/schema}/index.mjs.map +0 -0
package/dist/chunk-PNOTQAYK.mjs
DELETED
|
@@ -1,560 +0,0 @@
|
|
|
1
|
-
import { getTokenFromRequest } from './chunk-ZCLQSI5F.mjs';
|
|
2
|
-
|
|
3
|
-
// src/common/auth/routes/login.ts
|
|
4
|
-
function addCorsHeaders(response, config, request) {
|
|
5
|
-
if (!config.cors?.enabled) return response;
|
|
6
|
-
const origin = request.headers.get("origin");
|
|
7
|
-
const allowedOrigins = config.cors.origin;
|
|
8
|
-
if (allowedOrigins) {
|
|
9
|
-
if (typeof allowedOrigins === "string") {
|
|
10
|
-
response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
|
|
11
|
-
} else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
|
|
12
|
-
response.headers.set("Access-Control-Allow-Origin", origin);
|
|
13
|
-
}
|
|
14
|
-
} else {
|
|
15
|
-
response.headers.set("Access-Control-Allow-Origin", origin || "*");
|
|
16
|
-
}
|
|
17
|
-
if (config.cors.credentials) {
|
|
18
|
-
response.headers.set("Access-Control-Allow-Credentials", "true");
|
|
19
|
-
}
|
|
20
|
-
const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
|
|
21
|
-
response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
|
|
22
|
-
const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
|
|
23
|
-
response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
|
|
24
|
-
return response;
|
|
25
|
-
}
|
|
26
|
-
function createLoginHandler(config) {
|
|
27
|
-
return async (request) => {
|
|
28
|
-
let requestBody = {};
|
|
29
|
-
try {
|
|
30
|
-
requestBody = await request.json();
|
|
31
|
-
const { email, password } = requestBody;
|
|
32
|
-
if (!email || !password) {
|
|
33
|
-
const response2 = new Response(
|
|
34
|
-
JSON.stringify({
|
|
35
|
-
success: false,
|
|
36
|
-
error: "\u90AE\u7BB1\u548C\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A"
|
|
37
|
-
}),
|
|
38
|
-
{
|
|
39
|
-
status: 400,
|
|
40
|
-
headers: { "Content-Type": "application/json" }
|
|
41
|
-
}
|
|
42
|
-
);
|
|
43
|
-
return addCorsHeaders(response2, config, request);
|
|
44
|
-
}
|
|
45
|
-
const result = await config.authService.signIn(email, password);
|
|
46
|
-
if (config.analytics) {
|
|
47
|
-
try {
|
|
48
|
-
await config.analytics.track("user_login_success", {
|
|
49
|
-
userId: result.user.id,
|
|
50
|
-
userRole: result.user.role,
|
|
51
|
-
email: result.user.email,
|
|
52
|
-
loginMethod: "email_password",
|
|
53
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
54
|
-
});
|
|
55
|
-
} catch (analyticsError) {
|
|
56
|
-
console.error("Failed to track login analytics:", analyticsError);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const response = new Response(
|
|
60
|
-
JSON.stringify({
|
|
61
|
-
success: true,
|
|
62
|
-
data: {
|
|
63
|
-
user: result.user,
|
|
64
|
-
token: result.token
|
|
65
|
-
},
|
|
66
|
-
message: "\u767B\u5F55\u6210\u529F"
|
|
67
|
-
}),
|
|
68
|
-
{
|
|
69
|
-
status: 200,
|
|
70
|
-
headers: { "Content-Type": "application/json" }
|
|
71
|
-
}
|
|
72
|
-
);
|
|
73
|
-
if (config.cookieOptions) {
|
|
74
|
-
const cookieOptions = {
|
|
75
|
-
name: config.cookieOptions?.name || "auth_token",
|
|
76
|
-
httpOnly: config.cookieOptions?.httpOnly !== false,
|
|
77
|
-
secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === "production",
|
|
78
|
-
sameSite: config.cookieOptions?.sameSite || "lax",
|
|
79
|
-
maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7,
|
|
80
|
-
// 7天
|
|
81
|
-
path: config.cookieOptions?.path || "/"
|
|
82
|
-
};
|
|
83
|
-
const cookieValue = cookieOptions.name + "=" + result.token + "; HttpOnly=" + cookieOptions.httpOnly + "; Secure=" + cookieOptions.secure + "; SameSite=" + cookieOptions.sameSite + "; Max-Age=" + cookieOptions.maxAge + "; Path=" + cookieOptions.path;
|
|
84
|
-
response.headers.set("Set-Cookie", cookieValue);
|
|
85
|
-
}
|
|
86
|
-
return addCorsHeaders(response, config, request);
|
|
87
|
-
} catch (error) {
|
|
88
|
-
console.error("Login error:", error);
|
|
89
|
-
if (config.analytics) {
|
|
90
|
-
try {
|
|
91
|
-
await config.analytics.track("user_login_failed", {
|
|
92
|
-
errorMessage: error.message || "\u767B\u5F55\u5931\u8D25",
|
|
93
|
-
email: requestBody.email,
|
|
94
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
95
|
-
});
|
|
96
|
-
} catch (analyticsError) {
|
|
97
|
-
console.error("Failed to track login failure analytics:", analyticsError);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
const response = new Response(
|
|
101
|
-
JSON.stringify({
|
|
102
|
-
success: false,
|
|
103
|
-
error: error.message || "\u767B\u5F55\u5931\u8D25\uFF0C\u8BF7\u68C0\u67E5\u90AE\u7BB1\u548C\u5BC6\u7801"
|
|
104
|
-
}),
|
|
105
|
-
{
|
|
106
|
-
status: 401,
|
|
107
|
-
headers: { "Content-Type": "application/json" }
|
|
108
|
-
}
|
|
109
|
-
);
|
|
110
|
-
return addCorsHeaders(response, config, request);
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
function createLoginOptionsHandler(config) {
|
|
115
|
-
return async (request) => {
|
|
116
|
-
const response = new Response(null, {
|
|
117
|
-
status: 204,
|
|
118
|
-
headers: {
|
|
119
|
-
"Content-Length": "0"
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
return addCorsHeaders(response, config, request);
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// src/common/auth/routes/register.ts
|
|
127
|
-
function addCorsHeaders2(response, config, request) {
|
|
128
|
-
if (!config.cors?.enabled) return response;
|
|
129
|
-
const origin = request.headers.get("origin");
|
|
130
|
-
const allowedOrigins = config.cors.origin;
|
|
131
|
-
if (allowedOrigins) {
|
|
132
|
-
if (typeof allowedOrigins === "string") {
|
|
133
|
-
response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
|
|
134
|
-
} else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
|
|
135
|
-
response.headers.set("Access-Control-Allow-Origin", origin);
|
|
136
|
-
}
|
|
137
|
-
} else {
|
|
138
|
-
response.headers.set("Access-Control-Allow-Origin", origin || "*");
|
|
139
|
-
}
|
|
140
|
-
if (config.cors.credentials) {
|
|
141
|
-
response.headers.set("Access-Control-Allow-Credentials", "true");
|
|
142
|
-
}
|
|
143
|
-
const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
|
|
144
|
-
response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
|
|
145
|
-
const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
|
|
146
|
-
response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
|
|
147
|
-
return response;
|
|
148
|
-
}
|
|
149
|
-
function createRegisterHandler(config) {
|
|
150
|
-
return async (request) => {
|
|
151
|
-
try {
|
|
152
|
-
const { email, password, username } = await request.json();
|
|
153
|
-
if (!email || !password) {
|
|
154
|
-
const response2 = new Response(
|
|
155
|
-
JSON.stringify({
|
|
156
|
-
success: false,
|
|
157
|
-
error: "\u90AE\u7BB1\u548C\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A"
|
|
158
|
-
}),
|
|
159
|
-
{
|
|
160
|
-
status: 400,
|
|
161
|
-
headers: { "Content-Type": "application/json" }
|
|
162
|
-
}
|
|
163
|
-
);
|
|
164
|
-
return addCorsHeaders2(response2, config, request);
|
|
165
|
-
}
|
|
166
|
-
if (password.length < 6) {
|
|
167
|
-
const response2 = new Response(
|
|
168
|
-
JSON.stringify({
|
|
169
|
-
success: false,
|
|
170
|
-
error: "\u5BC6\u7801\u957F\u5EA6\u81F3\u5C11\u4E3A 6 \u4F4D"
|
|
171
|
-
}),
|
|
172
|
-
{
|
|
173
|
-
status: 400,
|
|
174
|
-
headers: { "Content-Type": "application/json" }
|
|
175
|
-
}
|
|
176
|
-
);
|
|
177
|
-
return addCorsHeaders2(response2, config, request);
|
|
178
|
-
}
|
|
179
|
-
const result = await config.authService.signUp(
|
|
180
|
-
email,
|
|
181
|
-
password,
|
|
182
|
-
username,
|
|
183
|
-
config.defaultRole || "USER"
|
|
184
|
-
);
|
|
185
|
-
if (config.analytics) {
|
|
186
|
-
try {
|
|
187
|
-
await config.analytics.track("user_register_success", {
|
|
188
|
-
userId: result.user.id,
|
|
189
|
-
email: result.user.email,
|
|
190
|
-
username: result.user.username,
|
|
191
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
192
|
-
});
|
|
193
|
-
} catch (analyticsError) {
|
|
194
|
-
console.error("Failed to track register analytics:", analyticsError);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
const response = new Response(
|
|
198
|
-
JSON.stringify({
|
|
199
|
-
success: true,
|
|
200
|
-
data: {
|
|
201
|
-
user: result.user,
|
|
202
|
-
token: result.token
|
|
203
|
-
},
|
|
204
|
-
message: "\u6CE8\u518C\u6210\u529F"
|
|
205
|
-
}),
|
|
206
|
-
{
|
|
207
|
-
status: 201,
|
|
208
|
-
headers: { "Content-Type": "application/json" }
|
|
209
|
-
}
|
|
210
|
-
);
|
|
211
|
-
if (config.cookieOptions) {
|
|
212
|
-
const cookieOptions = {
|
|
213
|
-
name: config.cookieOptions?.name || "auth_token",
|
|
214
|
-
httpOnly: config.cookieOptions?.httpOnly !== false,
|
|
215
|
-
secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === "production",
|
|
216
|
-
sameSite: config.cookieOptions?.sameSite || "lax",
|
|
217
|
-
maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7,
|
|
218
|
-
path: config.cookieOptions?.path || "/"
|
|
219
|
-
};
|
|
220
|
-
const cookieValue = cookieOptions.name + "=" + result.token + "; HttpOnly=" + cookieOptions.httpOnly + "; Secure=" + cookieOptions.secure + "; SameSite=" + cookieOptions.sameSite + "; Max-Age=" + cookieOptions.maxAge + "; Path=" + cookieOptions.path;
|
|
221
|
-
response.headers.set("Set-Cookie", cookieValue);
|
|
222
|
-
}
|
|
223
|
-
return addCorsHeaders2(response, config, request);
|
|
224
|
-
} catch (error) {
|
|
225
|
-
console.error("Register error:", error);
|
|
226
|
-
if (config.analytics) {
|
|
227
|
-
try {
|
|
228
|
-
await config.analytics.track("user_register_failed", {
|
|
229
|
-
errorMessage: error.message || "\u6CE8\u518C\u5931\u8D25",
|
|
230
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
231
|
-
});
|
|
232
|
-
} catch (analyticsError) {
|
|
233
|
-
console.error("Failed to track register failure analytics:", analyticsError);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
const response = new Response(
|
|
237
|
-
JSON.stringify({
|
|
238
|
-
success: false,
|
|
239
|
-
error: error.message || "\u6CE8\u518C\u5931\u8D25"
|
|
240
|
-
}),
|
|
241
|
-
{
|
|
242
|
-
status: 400,
|
|
243
|
-
headers: { "Content-Type": "application/json" }
|
|
244
|
-
}
|
|
245
|
-
);
|
|
246
|
-
return addCorsHeaders2(response, config, request);
|
|
247
|
-
}
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
function createRegisterOptionsHandler(config) {
|
|
251
|
-
return async (request) => {
|
|
252
|
-
const response = new Response(null, {
|
|
253
|
-
status: 204,
|
|
254
|
-
headers: {
|
|
255
|
-
"Content-Length": "0"
|
|
256
|
-
}
|
|
257
|
-
});
|
|
258
|
-
if (config.cors?.enabled) {
|
|
259
|
-
const origin = request.headers.get("origin");
|
|
260
|
-
const allowedOrigins = config.cors.origin;
|
|
261
|
-
if (allowedOrigins) {
|
|
262
|
-
if (typeof allowedOrigins === "string") {
|
|
263
|
-
response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
|
|
264
|
-
} else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
|
|
265
|
-
response.headers.set("Access-Control-Allow-Origin", origin);
|
|
266
|
-
}
|
|
267
|
-
} else {
|
|
268
|
-
response.headers.set("Access-Control-Allow-Origin", origin || "*");
|
|
269
|
-
}
|
|
270
|
-
if (config.cors.credentials) {
|
|
271
|
-
response.headers.set("Access-Control-Allow-Credentials", "true");
|
|
272
|
-
}
|
|
273
|
-
const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
|
|
274
|
-
response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
|
|
275
|
-
const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
|
|
276
|
-
response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
|
|
277
|
-
}
|
|
278
|
-
return response;
|
|
279
|
-
};
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// src/common/auth/routes/me.ts
|
|
283
|
-
function addCorsHeaders3(response, config, request) {
|
|
284
|
-
if (!config.cors?.enabled) return response;
|
|
285
|
-
const origin = request.headers.get("origin");
|
|
286
|
-
const allowedOrigins = config.cors.origin;
|
|
287
|
-
if (allowedOrigins) {
|
|
288
|
-
if (typeof allowedOrigins === "string") {
|
|
289
|
-
response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
|
|
290
|
-
} else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
|
|
291
|
-
response.headers.set("Access-Control-Allow-Origin", origin);
|
|
292
|
-
}
|
|
293
|
-
} else {
|
|
294
|
-
response.headers.set("Access-Control-Allow-Origin", origin || "*");
|
|
295
|
-
}
|
|
296
|
-
if (config.cors.credentials) {
|
|
297
|
-
response.headers.set("Access-Control-Allow-Credentials", "true");
|
|
298
|
-
}
|
|
299
|
-
const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
|
|
300
|
-
response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
|
|
301
|
-
const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
|
|
302
|
-
response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
|
|
303
|
-
return response;
|
|
304
|
-
}
|
|
305
|
-
function createMeHandler(config) {
|
|
306
|
-
return async (request) => {
|
|
307
|
-
try {
|
|
308
|
-
const token = getTokenFromRequest(request);
|
|
309
|
-
if (!token) {
|
|
310
|
-
const response2 = new Response(
|
|
311
|
-
JSON.stringify({
|
|
312
|
-
success: false,
|
|
313
|
-
error: "\u672A\u63D0\u4F9B\u8BA4\u8BC1\u4EE4\u724C"
|
|
314
|
-
}),
|
|
315
|
-
{
|
|
316
|
-
status: 401,
|
|
317
|
-
headers: { "Content-Type": "application/json" }
|
|
318
|
-
}
|
|
319
|
-
);
|
|
320
|
-
return addCorsHeaders3(response2, config, request);
|
|
321
|
-
}
|
|
322
|
-
const result = await config.authService.verifyToken(token);
|
|
323
|
-
const response = new Response(
|
|
324
|
-
JSON.stringify({
|
|
325
|
-
success: true,
|
|
326
|
-
data: result.user
|
|
327
|
-
}),
|
|
328
|
-
{
|
|
329
|
-
status: 200,
|
|
330
|
-
headers: { "Content-Type": "application/json" }
|
|
331
|
-
}
|
|
332
|
-
);
|
|
333
|
-
return addCorsHeaders3(response, config, request);
|
|
334
|
-
} catch (error) {
|
|
335
|
-
console.error("Get user info error:", error);
|
|
336
|
-
const response = new Response(
|
|
337
|
-
JSON.stringify({
|
|
338
|
-
success: false,
|
|
339
|
-
error: "\u8BA4\u8BC1\u5931\u8D25"
|
|
340
|
-
}),
|
|
341
|
-
{
|
|
342
|
-
status: 401,
|
|
343
|
-
headers: { "Content-Type": "application/json" }
|
|
344
|
-
}
|
|
345
|
-
);
|
|
346
|
-
return addCorsHeaders3(response, config, request);
|
|
347
|
-
}
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
function createMeOptionsHandler(config) {
|
|
351
|
-
return async (request) => {
|
|
352
|
-
const response = new Response(null, {
|
|
353
|
-
status: 204,
|
|
354
|
-
headers: {
|
|
355
|
-
"Content-Length": "0"
|
|
356
|
-
}
|
|
357
|
-
});
|
|
358
|
-
return addCorsHeaders3(response, config, request);
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
// src/common/auth/routes/logout.ts
|
|
363
|
-
function addCorsHeaders4(response, config, request) {
|
|
364
|
-
if (!config.cors?.enabled) return response;
|
|
365
|
-
const origin = request.headers.get("origin");
|
|
366
|
-
const allowedOrigins = config.cors.origin;
|
|
367
|
-
if (allowedOrigins) {
|
|
368
|
-
if (typeof allowedOrigins === "string") {
|
|
369
|
-
response.headers.set("Access-Control-Allow-Origin", allowedOrigins);
|
|
370
|
-
} else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {
|
|
371
|
-
response.headers.set("Access-Control-Allow-Origin", origin);
|
|
372
|
-
}
|
|
373
|
-
} else {
|
|
374
|
-
response.headers.set("Access-Control-Allow-Origin", origin || "*");
|
|
375
|
-
}
|
|
376
|
-
if (config.cors.credentials) {
|
|
377
|
-
response.headers.set("Access-Control-Allow-Credentials", "true");
|
|
378
|
-
}
|
|
379
|
-
const methods = config.cors.methods || ["GET", "POST", "PUT", "DELETE", "OPTIONS"];
|
|
380
|
-
response.headers.set("Access-Control-Allow-Methods", methods.join(", "));
|
|
381
|
-
const headers = config.cors.allowedHeaders || ["Content-Type", "Authorization"];
|
|
382
|
-
response.headers.set("Access-Control-Allow-Headers", headers.join(", "));
|
|
383
|
-
return response;
|
|
384
|
-
}
|
|
385
|
-
function createLogoutHandler(config) {
|
|
386
|
-
return async (request) => {
|
|
387
|
-
try {
|
|
388
|
-
const token = getTokenFromRequest(request);
|
|
389
|
-
if (!token) {
|
|
390
|
-
const response2 = new Response(
|
|
391
|
-
JSON.stringify({
|
|
392
|
-
success: false,
|
|
393
|
-
error: "\u672A\u63D0\u4F9B\u8BA4\u8BC1\u4EE4\u724C"
|
|
394
|
-
}),
|
|
395
|
-
{
|
|
396
|
-
status: 401,
|
|
397
|
-
headers: { "Content-Type": "application/json" }
|
|
398
|
-
}
|
|
399
|
-
);
|
|
400
|
-
return addCorsHeaders4(response2, config, request);
|
|
401
|
-
}
|
|
402
|
-
await config.authService.signOut(token);
|
|
403
|
-
if (config.analytics) {
|
|
404
|
-
try {
|
|
405
|
-
await config.analytics.track("user_logout", {
|
|
406
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
407
|
-
});
|
|
408
|
-
} catch (analyticsError) {
|
|
409
|
-
console.error("Failed to track logout analytics:", analyticsError);
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
const response = new Response(
|
|
413
|
-
JSON.stringify({
|
|
414
|
-
success: true,
|
|
415
|
-
message: "\u767B\u51FA\u6210\u529F"
|
|
416
|
-
}),
|
|
417
|
-
{
|
|
418
|
-
status: 200,
|
|
419
|
-
headers: { "Content-Type": "application/json" }
|
|
420
|
-
}
|
|
421
|
-
);
|
|
422
|
-
response.headers.set(
|
|
423
|
-
"Set-Cookie",
|
|
424
|
-
"auth_token=; HttpOnly; Secure; SameSite=Lax; Max-Age=0; Path=/"
|
|
425
|
-
);
|
|
426
|
-
return addCorsHeaders4(response, config, request);
|
|
427
|
-
} catch (error) {
|
|
428
|
-
console.error("Logout error:", error);
|
|
429
|
-
const response = new Response(
|
|
430
|
-
JSON.stringify({
|
|
431
|
-
success: false,
|
|
432
|
-
error: "\u767B\u51FA\u5931\u8D25"
|
|
433
|
-
}),
|
|
434
|
-
{
|
|
435
|
-
status: 500,
|
|
436
|
-
headers: { "Content-Type": "application/json" }
|
|
437
|
-
}
|
|
438
|
-
);
|
|
439
|
-
return addCorsHeaders4(response, config, request);
|
|
440
|
-
}
|
|
441
|
-
};
|
|
442
|
-
}
|
|
443
|
-
function createLogoutOptionsHandler(config) {
|
|
444
|
-
return async (request) => {
|
|
445
|
-
const response = new Response(null, {
|
|
446
|
-
status: 204,
|
|
447
|
-
headers: {
|
|
448
|
-
"Content-Length": "0"
|
|
449
|
-
}
|
|
450
|
-
});
|
|
451
|
-
return addCorsHeaders4(response, config, request);
|
|
452
|
-
};
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
// src/common/auth/routes/defaults.ts
|
|
456
|
-
function createDefaultBaseConfig(authService, overrides) {
|
|
457
|
-
return {
|
|
458
|
-
authService,
|
|
459
|
-
cors: {
|
|
460
|
-
enabled: true,
|
|
461
|
-
credentials: true,
|
|
462
|
-
...overrides?.cors
|
|
463
|
-
},
|
|
464
|
-
analytics: overrides?.analytics
|
|
465
|
-
};
|
|
466
|
-
}
|
|
467
|
-
function createDefaultLoginConfig(authService, overrides) {
|
|
468
|
-
return {
|
|
469
|
-
authService,
|
|
470
|
-
cors: {
|
|
471
|
-
enabled: true,
|
|
472
|
-
credentials: true,
|
|
473
|
-
...overrides?.cors
|
|
474
|
-
},
|
|
475
|
-
cookieOptions: {
|
|
476
|
-
name: "auth_token",
|
|
477
|
-
httpOnly: true,
|
|
478
|
-
secure: process.env.NODE_ENV === "production",
|
|
479
|
-
sameSite: "lax",
|
|
480
|
-
maxAge: 60 * 60 * 24 * 7,
|
|
481
|
-
// 7天
|
|
482
|
-
path: "/",
|
|
483
|
-
...overrides?.cookieOptions
|
|
484
|
-
},
|
|
485
|
-
analytics: overrides?.analytics
|
|
486
|
-
};
|
|
487
|
-
}
|
|
488
|
-
function createDefaultRegisterConfig(authService, overrides) {
|
|
489
|
-
return {
|
|
490
|
-
authService,
|
|
491
|
-
defaultRole: overrides?.defaultRole || "USER",
|
|
492
|
-
cors: {
|
|
493
|
-
enabled: true,
|
|
494
|
-
credentials: true,
|
|
495
|
-
...overrides?.cors
|
|
496
|
-
},
|
|
497
|
-
cookieOptions: overrides?.cookieOptions !== void 0 ? {
|
|
498
|
-
name: "auth_token",
|
|
499
|
-
httpOnly: true,
|
|
500
|
-
secure: process.env.NODE_ENV === "production",
|
|
501
|
-
sameSite: "lax",
|
|
502
|
-
maxAge: 60 * 60 * 24 * 7,
|
|
503
|
-
// 7天
|
|
504
|
-
path: "/",
|
|
505
|
-
...overrides.cookieOptions
|
|
506
|
-
} : void 0,
|
|
507
|
-
analytics: overrides?.analytics,
|
|
508
|
-
emailVerificationRequired: overrides?.emailVerificationRequired
|
|
509
|
-
};
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
// src/common/auth/routes/analytics-adapter.ts
|
|
513
|
-
function createAnalyticsAdapter(analyticsService, options) {
|
|
514
|
-
const config = {
|
|
515
|
-
platform: options?.platform || "backend",
|
|
516
|
-
appVersion: options?.appVersion || "1.0.0",
|
|
517
|
-
sdkVersion: options?.sdkVersion || "1.0.0",
|
|
518
|
-
deviceId: options?.deviceId || "server",
|
|
519
|
-
generateId: options?.generateId || (() => {
|
|
520
|
-
return Date.now() + "_" + Math.random().toString(36).substring(2, 15);
|
|
521
|
-
})
|
|
522
|
-
};
|
|
523
|
-
return {
|
|
524
|
-
track: async (eventName, properties) => {
|
|
525
|
-
try {
|
|
526
|
-
let eventType = "event";
|
|
527
|
-
if (eventName.includes("login_success")) {
|
|
528
|
-
eventType = "login";
|
|
529
|
-
} else if (eventName.includes("register_success")) {
|
|
530
|
-
eventType = "register";
|
|
531
|
-
} else if (eventName.includes("logout")) {
|
|
532
|
-
eventType = "logout";
|
|
533
|
-
} else if (eventName.includes("failed") || eventName.includes("error")) {
|
|
534
|
-
eventType = "error";
|
|
535
|
-
}
|
|
536
|
-
const event = {
|
|
537
|
-
id: config.generateId(),
|
|
538
|
-
eventType,
|
|
539
|
-
eventName,
|
|
540
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
541
|
-
priority: 1,
|
|
542
|
-
userId: properties.userId || "anonymous",
|
|
543
|
-
sessionId: properties.sessionId || "session_" + Date.now() + "_" + (properties.userId || "anonymous"),
|
|
544
|
-
deviceId: config.deviceId,
|
|
545
|
-
platform: config.platform,
|
|
546
|
-
appVersion: config.appVersion,
|
|
547
|
-
sdkVersion: config.sdkVersion,
|
|
548
|
-
properties
|
|
549
|
-
};
|
|
550
|
-
await analyticsService.insertAnalyticsEvents([event]);
|
|
551
|
-
} catch (error) {
|
|
552
|
-
console.error("Failed to track analytics:", error);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
};
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
export { createAnalyticsAdapter, createDefaultBaseConfig, createDefaultLoginConfig, createDefaultRegisterConfig, createLoginHandler, createLoginOptionsHandler, createLogoutHandler, createLogoutOptionsHandler, createMeHandler, createMeOptionsHandler, createRegisterHandler, createRegisterOptionsHandler };
|
|
559
|
-
//# sourceMappingURL=chunk-PNOTQAYK.mjs.map
|
|
560
|
-
//# sourceMappingURL=chunk-PNOTQAYK.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/auth/routes/login.ts","../src/common/auth/routes/register.ts","../src/common/auth/routes/me.ts","../src/common/auth/routes/logout.ts","../src/common/auth/routes/defaults.ts","../src/common/auth/routes/analytics-adapter.ts"],"names":["response","addCorsHeaders"],"mappings":"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","file":"chunk-PNOTQAYK.mjs","sourcesContent":["/**\n * Auth Routes - Login\n * 登录路由处理器\n */\n\nimport type { LoginRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: LoginRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建登录路由处理器\n *\n * @example\n * ```typescript\n * import { createLoginHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createLoginHandler({\n * authService: myAuthService,\n * analytics: myAnalytics,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createLoginHandler(config: LoginRouteConfig) {\n return async (request: Request) => {\n let requestBody: any = {};\n\n try {\n // 解析请求体\n requestBody = await request.json();\n const { email, password } = requestBody;\n\n // 验证必填字段\n if (!email || !password) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '邮箱和密码不能为空',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 执行登录\n const result = await config.authService.signIn(email, password);\n\n // 记录登录成功埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_login_success', {\n userId: result.user.id,\n userRole: result.user.role,\n email: result.user.email,\n loginMethod: 'email_password',\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track login analytics:', analyticsError);\n }\n }\n\n // 创建响应\n const response = new Response(\n JSON.stringify({\n success: true,\n data: {\n user: result.user,\n token: result.token,\n },\n message: '登录成功',\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 设置 Cookie(如果有配置)\n if (config.cookieOptions) {\n const cookieOptions = {\n name: config.cookieOptions?.name || 'auth_token',\n httpOnly: config.cookieOptions?.httpOnly !== false,\n secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === 'production',\n sameSite: config.cookieOptions?.sameSite || 'lax',\n maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7, // 7天\n path: config.cookieOptions?.path || '/',\n };\n\n // 设置 Set-Cookie header\n const cookieValue = (cookieOptions.name) + '=' + (result.token) + '; HttpOnly=' + (cookieOptions.httpOnly) + '; Secure=' + (cookieOptions.secure) + '; SameSite=' + (cookieOptions.sameSite) + '; Max-Age=' + (cookieOptions.maxAge) + '; Path=' + (cookieOptions.path);\n response.headers.set('Set-Cookie', cookieValue);\n }\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Login error:', error);\n\n // 记录登录失败埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_login_failed', {\n errorMessage: (error as any).message || '登录失败',\n email: requestBody.email,\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track login failure analytics:', analyticsError);\n }\n }\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: (error as any).message || '登录失败,请检查邮箱和密码',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createLoginOptionsHandler(config: LoginRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n\n","/**\n * Auth Routes - Register\n * 注册路由处理器\n */\n\nimport type { RegisterRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: RegisterRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建注册路由处理器\n *\n * @example\n * ```typescript\n * import { createRegisterHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createRegisterHandler({\n * authService: myAuthService,\n * defaultRole: 'USER',\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createRegisterHandler(config: RegisterRouteConfig) {\n return async (request: Request) => {\n try {\n // 解析请求体\n const { email, password, username } = await request.json();\n\n // 验证必填字段\n if (!email || !password) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '邮箱和密码不能为空',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 密码强度验证\n if (password.length < 6) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '密码长度至少为 6 位',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 执行注册\n const result = await config.authService.signUp(\n email,\n password,\n username,\n config.defaultRole || 'USER'\n );\n\n // 记录注册成功埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_register_success', {\n userId: result.user.id,\n email: result.user.email,\n username: result.user.username,\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track register analytics:', analyticsError);\n }\n }\n\n // 创建响应\n const response = new Response(\n JSON.stringify({\n success: true,\n data: {\n user: result.user,\n token: result.token,\n },\n message: '注册成功',\n } as ApiResponse),\n {\n status: 201,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 设置 Cookie(如果有配置)\n if (config.cookieOptions) {\n const cookieOptions = {\n name: config.cookieOptions?.name || 'auth_token',\n httpOnly: config.cookieOptions?.httpOnly !== false,\n secure: config.cookieOptions?.secure !== false && process.env.NODE_ENV === 'production',\n sameSite: config.cookieOptions?.sameSite || 'lax',\n maxAge: config.cookieOptions?.maxAge || 60 * 60 * 24 * 7,\n path: config.cookieOptions?.path || '/',\n };\n\n const cookieValue = (cookieOptions.name) + '=' + (result.token) + '; HttpOnly=' + (cookieOptions.httpOnly) + '; Secure=' + (cookieOptions.secure) + '; SameSite=' + (cookieOptions.sameSite) + '; Max-Age=' + (cookieOptions.maxAge) + '; Path=' + (cookieOptions.path);\n response.headers.set('Set-Cookie', cookieValue);\n }\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Register error:', error);\n\n // 记录注册失败埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_register_failed', {\n errorMessage: (error as any).message || '注册失败',\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track register failure analytics:', analyticsError);\n }\n }\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: (error as any).message || '注册失败',\n } as ApiResponse),\n {\n status: 400,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createRegisterOptionsHandler(config: RegisterRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n // 复用 addCorsHeaders 函数\n if (config.cors?.enabled) {\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n }\n\n return response;\n };\n}\n\n","/**\n * Auth Routes - Me\n * 获取当前用户信息路由处理器\n */\n\nimport { getTokenFromRequest } from '../services';\nimport type { BaseRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: BaseRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建获取当前用户信息路由处理器\n *\n * @example\n * ```typescript\n * import { createMeHandler } from 'sa2kit/auth/routes';\n *\n * export const GET = createMeHandler({\n * authService: myAuthService,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createMeHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n try {\n // 获取 token\n const token = getTokenFromRequest(request);\n\n if (!token) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '未提供认证令牌',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 验证 token 并获取用户信息\n const result = await config.authService.verifyToken(token);\n\n const response = new Response(\n JSON.stringify({\n success: true,\n data: result.user,\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Get user info error:', error);\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '认证失败',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createMeOptionsHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n","/**\n * Auth Routes - Logout\n * 登出路由处理器\n */\n\nimport { getTokenFromRequest } from '../services';\nimport type { BaseRouteConfig, ApiResponse } from './types';\n\n/**\n * 添加 CORS 头到响应\n */\nfunction addCorsHeaders(response: Response, config: BaseRouteConfig, request: Request): Response {\n if (!config.cors?.enabled) return response;\n\n const origin = request.headers.get('origin');\n const allowedOrigins = config.cors.origin;\n\n // 处理允许的源\n if (allowedOrigins) {\n if (typeof allowedOrigins === 'string') {\n response.headers.set('Access-Control-Allow-Origin', allowedOrigins);\n } else if (Array.isArray(allowedOrigins) && origin && allowedOrigins.includes(origin)) {\n response.headers.set('Access-Control-Allow-Origin', origin);\n }\n } else {\n // 默认允许所有源\n response.headers.set('Access-Control-Allow-Origin', origin || '*');\n }\n\n if (config.cors.credentials) {\n response.headers.set('Access-Control-Allow-Credentials', 'true');\n }\n\n const methods = config.cors.methods || ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'];\n response.headers.set('Access-Control-Allow-Methods', methods.join(', '));\n\n const headers = config.cors.allowedHeaders || ['Content-Type', 'Authorization'];\n response.headers.set('Access-Control-Allow-Headers', headers.join(', '));\n\n return response;\n}\n\n/**\n * 创建登出路由处理器\n *\n * @example\n * ```typescript\n * import { createLogoutHandler } from 'sa2kit/auth/routes';\n *\n * export const POST = createLogoutHandler({\n * authService: myAuthService,\n * cors: { enabled: true },\n * });\n * ```\n */\nexport function createLogoutHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n try {\n // 获取 token\n const token = getTokenFromRequest(request);\n\n if (!token) {\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '未提供认证令牌',\n } as ApiResponse),\n {\n status: 401,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n return addCorsHeaders(response, config, request);\n }\n\n // 删除会话\n await config.authService.signOut(token);\n\n // 记录登出埋点\n if (config.analytics) {\n try {\n await config.analytics.track('user_logout', {\n timestamp: new Date().toISOString(),\n });\n } catch (analyticsError) {\n console.error('Failed to track logout analytics:', analyticsError);\n }\n }\n\n // 创建响应并清除 Cookie\n const response = new Response(\n JSON.stringify({\n success: true,\n message: '登出成功',\n } as ApiResponse),\n {\n status: 200,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n // 清除 auth_token cookie\n response.headers.set(\n 'Set-Cookie',\n 'auth_token=; HttpOnly; Secure; SameSite=Lax; Max-Age=0; Path=/'\n );\n\n return addCorsHeaders(response, config, request);\n } catch (error) {\n console.error('Logout error:', error);\n\n const response = new Response(\n JSON.stringify({\n success: false,\n error: '登出失败',\n } as ApiResponse),\n {\n status: 500,\n headers: { 'Content-Type': 'application/json' },\n }\n );\n\n return addCorsHeaders(response, config, request);\n }\n };\n}\n\n/**\n * 创建 CORS 预检请求处理器\n */\nexport function createLogoutOptionsHandler(config: BaseRouteConfig) {\n return async (request: Request) => {\n const response = new Response(null, {\n status: 204,\n headers: {\n 'Content-Length': '0',\n },\n });\n\n return addCorsHeaders(response, config, request);\n };\n}\n","/**\n * Auth Routes - Default Configurations\n * 默认路由配置\n */\n\nimport type { \n BaseRouteConfig, \n LoginRouteConfig, \n RegisterRouteConfig \n} from './types';\nimport type { DrizzleAuthService } from '../services';\n\n/**\n * 创建默认的基础路由配置\n */\nexport function createDefaultBaseConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<BaseRouteConfig>\n): BaseRouteConfig {\n return {\n authService,\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n analytics: overrides?.analytics,\n };\n}\n\n/**\n * 创建默认的登录路由配置\n */\nexport function createDefaultLoginConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<LoginRouteConfig>\n): LoginRouteConfig {\n return {\n authService,\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n cookieOptions: {\n name: 'auth_token',\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n maxAge: 60 * 60 * 24 * 7, // 7天\n path: '/',\n ...overrides?.cookieOptions,\n },\n analytics: overrides?.analytics,\n };\n}\n\n/**\n * 创建默认的注册路由配置\n */\nexport function createDefaultRegisterConfig(\n authService: DrizzleAuthService,\n overrides?: Partial<RegisterRouteConfig>\n): RegisterRouteConfig {\n return {\n authService,\n defaultRole: overrides?.defaultRole || 'USER',\n cors: {\n enabled: true,\n credentials: true,\n ...overrides?.cors,\n },\n cookieOptions: overrides?.cookieOptions !== undefined ? {\n name: 'auth_token',\n httpOnly: true,\n secure: process.env.NODE_ENV === 'production',\n sameSite: 'lax',\n maxAge: 60 * 60 * 24 * 7, // 7天\n path: '/',\n ...overrides.cookieOptions,\n } : undefined,\n analytics: overrides?.analytics,\n emailVerificationRequired: overrides?.emailVerificationRequired,\n };\n}\n\n","/**\n * Auth Routes - Analytics Adapter\n * 埋点适配器,用于适配不同的埋点服务\n */\n\n/**\n * 埋点事件接口\n */\nexport interface AnalyticsEvent {\n id: string;\n eventType: string;\n eventName: string;\n timestamp: string;\n priority: number;\n userId: string;\n sessionId: string;\n deviceId: string;\n platform: string;\n appVersion: string;\n sdkVersion: string;\n properties: Record<string, any>;\n}\n\n/**\n * 埋点服务接口\n */\nexport interface AnalyticsService {\n insertAnalyticsEvents(events: AnalyticsEvent[]): Promise<void>;\n}\n\n/**\n * 创建埋点适配器\n *\n * @param analyticsService 埋点服务实例\n * @param options 可选配置\n * @returns 符合 sa2kit 格式的埋点函数\n *\n * @example\n * ```typescript\n * import { createAnalyticsAdapter } from 'sa2kit/auth/routes';\n * import { analyticsService } from '@/lib/analytics';\n *\n * const analytics = createAnalyticsAdapter(analyticsService, {\n * platform: 'backend',\n * appVersion: '1.0.0',\n * });\n *\n * // 在路由配置中使用\n * const config = createDefaultLoginConfig(authService, {\n * analytics,\n * });\n * ```\n */\nexport function createAnalyticsAdapter(\n analyticsService: AnalyticsService,\n options?: {\n platform?: string;\n appVersion?: string;\n sdkVersion?: string;\n deviceId?: string;\n generateId?: () => string;\n }\n): {\n track: (eventName: string, properties: any) => Promise<void>;\n} {\n // 默认配置\n const config = {\n platform: options?.platform || 'backend',\n appVersion: options?.appVersion || '1.0.0',\n sdkVersion: options?.sdkVersion || '1.0.0',\n deviceId: options?.deviceId || 'server',\n generateId: options?.generateId || (() => {\n // 简单的 ID 生成器(仅用于浏览器环境)\n return (Date.now()) + '_' + (Math.random().toString(36).substring(2, 15));\n }),\n };\n\n return {\n track: async (eventName: string, properties: any) => {\n try {\n // 推断事件类型\n let eventType = 'event';\n if (eventName.includes('login_success')) {\n eventType = 'login';\n } else if (eventName.includes('register_success')) {\n eventType = 'register';\n } else if (eventName.includes('logout')) {\n eventType = 'logout';\n } else if (eventName.includes('failed') || eventName.includes('error')) {\n eventType = 'error';\n }\n\n // 构建埋点事件\n const event: AnalyticsEvent = {\n id: config.generateId(),\n eventType,\n eventName,\n timestamp: new Date().toISOString(),\n priority: 1,\n userId: properties.userId || 'anonymous',\n sessionId: properties.sessionId || 'session_' + (Date.now()) + '_' + (properties.userId || 'anonymous'),\n deviceId: config.deviceId,\n platform: config.platform,\n appVersion: config.appVersion,\n sdkVersion: config.sdkVersion,\n properties,\n };\n\n // 插入埋点事件\n await analyticsService.insertAnalyticsEvents([event]);\n } catch (error) {\n console.error('Failed to track analytics:', error);\n }\n },\n };\n}\n\n"]}
|