sa2kit 1.6.30 → 1.6.32
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/AliyunOSSProvider-4W47OFEK.mjs +6 -0
- package/dist/{AliyunOSSProvider-KJYRIZES.mjs.map → AliyunOSSProvider-4W47OFEK.mjs.map} +1 -1
- package/dist/AliyunOSSProvider-HCNGDJL7.js +15 -0
- package/dist/{AliyunOSSProvider-FWAKUB2T.js.map → AliyunOSSProvider-HCNGDJL7.js.map} +1 -1
- package/dist/ConfigService-3DIC6C3Q.js +21 -0
- package/dist/{ConfigService-7MEZXKJ5.js.map → ConfigService-3DIC6C3Q.js.map} +1 -1
- package/dist/ConfigService-V6ZK273Z.mjs +4 -0
- package/dist/{ConfigService-BV57YYFW.mjs.map → ConfigService-V6ZK273Z.mjs.map} +1 -1
- package/dist/LocalStorageProvider-3RVPCQB3.mjs +6 -0
- package/dist/{LocalStorageProvider-RTPMUOZ2.mjs.map → LocalStorageProvider-3RVPCQB3.mjs.map} +1 -1
- package/dist/LocalStorageProvider-PP7MA5OT.js +15 -0
- package/dist/{LocalStorageProvider-XSRCUXOU.js.map → LocalStorageProvider-PP7MA5OT.js.map} +1 -1
- package/dist/PMXParser-2VTA737I.js +13 -0
- package/dist/{PMXParser-YBS3B6HM.js.map → PMXParser-2VTA737I.js.map} +1 -1
- package/dist/PMXParser-RNVQL76A.mjs +4 -0
- package/dist/{PMXParser-L6IWHL4I.mjs.map → PMXParser-RNVQL76A.mjs.map} +1 -1
- package/dist/analytics/index.js +46 -45
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs +45 -44
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/analytics/server/index.js +4 -4
- package/dist/analytics/server/index.js.map +1 -1
- package/dist/analytics/server/index.mjs +4 -4
- package/dist/analytics/server/index.mjs.map +1 -1
- package/dist/api/index.js +5 -5
- package/dist/api/index.js.map +1 -1
- package/dist/api/index.mjs +5 -5
- package/dist/api/index.mjs.map +1 -1
- package/dist/audioDetection/index.js +17 -16
- package/dist/audioDetection/index.js.map +1 -1
- package/dist/audioDetection/index.mjs +17 -16
- package/dist/audioDetection/index.mjs.map +1 -1
- package/dist/auth/client/index.js +4 -4
- package/dist/auth/client/index.mjs +1 -1
- package/dist/auth/components/index.js +3 -3
- package/dist/auth/components/index.js.map +1 -1
- package/dist/auth/components/index.mjs +3 -3
- package/dist/auth/components/index.mjs.map +1 -1
- package/dist/auth/index.js +29 -29
- package/dist/auth/index.mjs +5 -5
- package/dist/auth/middleware/index.js +3 -3
- package/dist/auth/middleware/index.mjs +2 -2
- package/dist/auth/routes/index.js +14 -14
- package/dist/auth/routes/index.mjs +2 -2
- package/dist/auth/services/index.js +7 -7
- package/dist/auth/services/index.mjs +1 -1
- package/dist/calendar/index.js +146 -182
- package/dist/calendar/index.js.map +1 -1
- package/dist/calendar/index.mjs +139 -175
- package/dist/calendar/index.mjs.map +1 -1
- package/dist/calendar/routes/index.js +1 -1
- package/dist/calendar/routes/index.js.map +1 -1
- package/dist/calendar/routes/index.mjs +1 -1
- package/dist/calendar/routes/index.mjs.map +1 -1
- package/dist/{chunk-5YQ5B7IZ.js → chunk-24HGREE6.js} +5 -5
- package/dist/{chunk-5YQ5B7IZ.js.map → chunk-24HGREE6.js.map} +1 -1
- package/dist/{chunk-6PRFP5EG.js → chunk-25OFOKNF.js} +6 -6
- package/dist/chunk-25OFOKNF.js.map +1 -0
- package/dist/{chunk-KQGP6BTS.mjs → chunk-3DXPQ4YV.mjs} +6 -6
- package/dist/chunk-3DXPQ4YV.mjs.map +1 -0
- package/dist/{chunk-3BGPZN4X.mjs → chunk-3NHAT7D4.mjs} +12 -12
- package/dist/chunk-3NHAT7D4.mjs.map +1 -0
- package/dist/{chunk-MW4BCIZC.mjs → chunk-4HC6M7FK.mjs} +3 -3
- package/dist/chunk-4HC6M7FK.mjs.map +1 -0
- package/dist/{chunk-ESRCX5TQ.mjs → chunk-52TN2QSS.mjs} +3 -3
- package/dist/{chunk-ESRCX5TQ.mjs.map → chunk-52TN2QSS.mjs.map} +1 -1
- package/dist/{chunk-CNTILN5J.mjs → chunk-5YQ62BKX.mjs} +20 -19
- package/dist/chunk-5YQ62BKX.mjs.map +1 -0
- package/dist/{chunk-6W5BMXJG.js → chunk-6OWNMJKG.js} +4 -4
- package/dist/{chunk-6W5BMXJG.js.map → chunk-6OWNMJKG.js.map} +1 -1
- package/dist/{chunk-DUHZ7VZP.js → chunk-7VRT55ZD.js} +3 -3
- package/dist/chunk-7VRT55ZD.js.map +1 -0
- package/dist/{chunk-3WOAPLEG.mjs → chunk-EB4NR623.mjs} +27 -26
- package/dist/chunk-EB4NR623.mjs.map +1 -0
- package/dist/chunk-EI27JKND.mjs +1988 -0
- package/dist/chunk-EI27JKND.mjs.map +1 -0
- package/dist/{chunk-CD77U7LZ.js → chunk-GBPLX42J.js} +9 -9
- package/dist/chunk-GBPLX42J.js.map +1 -0
- package/dist/{chunk-TFQF2HDO.mjs → chunk-HDEOCX2L.mjs} +12 -12
- package/dist/chunk-HDEOCX2L.mjs.map +1 -0
- package/dist/{chunk-TV3VKRJK.mjs → chunk-HDMIOOZY.mjs} +38 -68
- package/dist/chunk-HDMIOOZY.mjs.map +1 -0
- package/dist/{chunk-OPPF3326.js → chunk-HJ6MH7J7.js} +39 -69
- package/dist/chunk-HJ6MH7J7.js.map +1 -0
- package/dist/chunk-KO73EBUT.js +80 -0
- package/dist/chunk-KO73EBUT.js.map +1 -0
- package/dist/{chunk-6YKMCPQI.mjs → chunk-KZKIH4AS.mjs} +4 -4
- package/dist/chunk-KZKIH4AS.mjs.map +1 -0
- package/dist/{chunk-LX4XX6W7.js → chunk-L47ZOYHL.js} +15 -89
- package/dist/chunk-L47ZOYHL.js.map +1 -0
- package/dist/{chunk-6MQUBPKB.mjs → chunk-LJ4CCSSY.mjs} +3 -3
- package/dist/{chunk-6MQUBPKB.mjs.map → chunk-LJ4CCSSY.mjs.map} +1 -1
- package/dist/{chunk-TOC5FSHP.js → chunk-NJ2SNXBJ.js} +12 -12
- package/dist/chunk-NJ2SNXBJ.js.map +1 -0
- package/dist/{chunk-OCR5DS4C.mjs → chunk-PE5EAHZK.mjs} +3 -3
- package/dist/chunk-PE5EAHZK.mjs.map +1 -0
- package/dist/{chunk-LZHMNOED.js → chunk-Q5EDCKQA.js} +26 -26
- package/dist/chunk-Q5EDCKQA.js.map +1 -0
- package/dist/{chunk-CLKKZSPZ.js → chunk-RBKGYWME.js} +20 -19
- package/dist/chunk-RBKGYWME.js.map +1 -0
- package/dist/{chunk-VRTRSEEH.mjs → chunk-RSJSZ7QH.mjs} +11 -11
- package/dist/chunk-RSJSZ7QH.mjs.map +1 -0
- package/dist/{chunk-E7RGBAYJ.js → chunk-TDCDEBGP.js} +30 -29
- package/dist/chunk-TDCDEBGP.js.map +1 -0
- package/dist/{chunk-JZXJQMVE.js → chunk-UIFFDRTE.js} +11 -11
- package/dist/chunk-UIFFDRTE.js.map +1 -0
- package/dist/{chunk-T5OZHYVM.mjs → chunk-UKT3PLON.mjs} +13 -85
- package/dist/chunk-UKT3PLON.mjs.map +1 -0
- package/dist/{chunk-UOFTHYIH.js → chunk-UL6XJGUZ.js} +4 -4
- package/dist/chunk-UL6XJGUZ.js.map +1 -0
- package/dist/chunk-VVWQTO4Y.mjs +77 -0
- package/dist/chunk-VVWQTO4Y.mjs.map +1 -0
- package/dist/{chunk-A3UP56MS.js → chunk-WA67GZSZ.js} +3 -3
- package/dist/chunk-WA67GZSZ.js.map +1 -0
- package/dist/{chunk-OLHGZXN3.mjs → chunk-WEEXCPSE.mjs} +5 -5
- package/dist/chunk-WEEXCPSE.mjs.map +1 -0
- package/dist/chunk-XGBE4SUV.js +2093 -0
- package/dist/chunk-XGBE4SUV.js.map +1 -0
- package/dist/{chunk-QU5OT4DF.js → chunk-XJ7ZAGC5.js} +5 -5
- package/dist/chunk-XJ7ZAGC5.js.map +1 -0
- package/dist/{chunk-ZI25QCHD.mjs → chunk-YOTQG4NP.mjs} +25 -25
- package/dist/chunk-YOTQG4NP.mjs.map +1 -0
- package/dist/{chunk-QAT2RWAO.mjs → chunk-Z36R3P62.mjs} +7 -7
- package/dist/chunk-Z36R3P62.mjs.map +1 -0
- package/dist/{chunk-7Z5LLJ3A.js → chunk-ZWQJSZEY.js} +13 -13
- package/dist/chunk-ZWQJSZEY.js.map +1 -0
- package/dist/config/index.js +6 -6
- package/dist/config/index.js.map +1 -1
- package/dist/config/index.mjs +6 -6
- package/dist/config/index.mjs.map +1 -1
- package/dist/config/server/index.js +37 -37
- package/dist/config/server/index.js.map +1 -1
- package/dist/config/server/index.mjs +37 -37
- package/dist/config/server/index.mjs.map +1 -1
- package/dist/i18n/index.d.mts +2 -2
- package/dist/i18n/index.d.ts +2 -2
- package/dist/i18n/index.js +16 -17
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/index.mjs +16 -17
- package/dist/i18n/index.mjs.map +1 -1
- package/dist/imageCrop/index.js +11 -10
- package/dist/imageCrop/index.js.map +1 -1
- package/dist/imageCrop/index.mjs +11 -10
- package/dist/imageCrop/index.mjs.map +1 -1
- package/dist/index.d.mts +185 -100
- package/dist/index.d.ts +185 -100
- package/dist/index.js +225 -249
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +80 -104
- package/dist/index.mjs.map +1 -1
- package/dist/logger/index.js +6 -6
- package/dist/logger/index.mjs +1 -1
- package/dist/mikuFusionGame/index.d.mts +112 -0
- package/dist/mikuFusionGame/index.d.ts +112 -0
- package/dist/mikuFusionGame/index.js +680 -0
- package/dist/mikuFusionGame/index.js.map +1 -0
- package/dist/mikuFusionGame/index.mjs +667 -0
- package/dist/mikuFusionGame/index.mjs.map +1 -0
- package/dist/mmd/admin/index.js +11 -10
- package/dist/mmd/admin/index.js.map +1 -1
- package/dist/mmd/admin/index.mjs +11 -10
- package/dist/mmd/admin/index.mjs.map +1 -1
- package/dist/mmd/index.js +223 -241
- package/dist/mmd/index.js.map +1 -1
- package/dist/mmd/index.mjs +220 -238
- package/dist/mmd/index.mjs.map +1 -1
- package/dist/mmd/server/index.js +6 -6
- package/dist/mmd/server/index.js.map +1 -1
- package/dist/mmd/server/index.mjs +6 -6
- package/dist/mmd/server/index.mjs.map +1 -1
- package/dist/music/index.js +16 -16
- package/dist/music/index.mjs +2 -2
- package/dist/music/server/index.js +8 -8
- package/dist/music/server/index.mjs +1 -1
- package/dist/request/index.js +2 -2
- package/dist/request/index.js.map +1 -1
- package/dist/request/index.mjs +2 -2
- package/dist/request/index.mjs.map +1 -1
- package/dist/storage/index.js +15 -14
- package/dist/storage/index.mjs +3 -2
- package/dist/testYourself/admin/index.js +3 -3
- package/dist/testYourself/admin/index.mjs +1 -1
- package/dist/testYourself/index.js +22 -22
- package/dist/testYourself/index.js.map +1 -1
- package/dist/testYourself/index.mjs +14 -14
- package/dist/testYourself/index.mjs.map +1 -1
- package/dist/testYourself/server/index.js +4 -4
- package/dist/testYourself/server/index.mjs +1 -1
- package/dist/universalExport/index.d.mts +3 -3
- package/dist/universalExport/index.d.ts +3 -3
- package/dist/universalExport/index.js +48 -47
- package/dist/universalExport/index.js.map +1 -1
- package/dist/universalExport/index.mjs +48 -47
- package/dist/universalExport/index.mjs.map +1 -1
- package/dist/universalExport/server/index.js +29 -29
- package/dist/universalExport/server/index.js.map +1 -1
- package/dist/universalExport/server/index.mjs +28 -28
- package/dist/universalExport/server/index.mjs.map +1 -1
- package/dist/universalFile/index.d.mts +3 -3
- package/dist/universalFile/index.d.ts +3 -3
- package/dist/universalFile/index.js +73 -72
- package/dist/universalFile/index.js.map +1 -1
- package/dist/universalFile/index.mjs +73 -72
- package/dist/universalFile/index.mjs.map +1 -1
- package/dist/universalFile/server/index.js +258 -260
- package/dist/universalFile/server/index.js.map +1 -1
- package/dist/universalFile/server/index.mjs +244 -246
- package/dist/universalFile/server/index.mjs.map +1 -1
- package/dist/utils/index.js +11 -11
- package/dist/utils/index.mjs +2 -2
- package/package.json +25 -31
- package/dist/AliyunOSSProvider-FWAKUB2T.js +0 -15
- package/dist/AliyunOSSProvider-KJYRIZES.mjs +0 -6
- package/dist/ConfigService-7MEZXKJ5.js +0 -21
- package/dist/ConfigService-BV57YYFW.mjs +0 -4
- package/dist/LocalStorageProvider-RTPMUOZ2.mjs +0 -6
- package/dist/LocalStorageProvider-XSRCUXOU.js +0 -15
- package/dist/PMXParser-L6IWHL4I.mjs +0 -4
- package/dist/PMXParser-YBS3B6HM.js +0 -13
- package/dist/chunk-3BGPZN4X.mjs.map +0 -1
- package/dist/chunk-3WOAPLEG.mjs.map +0 -1
- package/dist/chunk-6PRFP5EG.js.map +0 -1
- package/dist/chunk-6YKMCPQI.mjs.map +0 -1
- package/dist/chunk-7Z5LLJ3A.js.map +0 -1
- package/dist/chunk-A3UP56MS.js.map +0 -1
- package/dist/chunk-CD77U7LZ.js.map +0 -1
- package/dist/chunk-CLKKZSPZ.js.map +0 -1
- package/dist/chunk-CNTILN5J.mjs.map +0 -1
- package/dist/chunk-DUHZ7VZP.js.map +0 -1
- package/dist/chunk-DW2ZTOCV.js +0 -1727
- package/dist/chunk-DW2ZTOCV.js.map +0 -1
- package/dist/chunk-E7RGBAYJ.js.map +0 -1
- package/dist/chunk-JZXJQMVE.js.map +0 -1
- package/dist/chunk-KQGP6BTS.mjs.map +0 -1
- package/dist/chunk-LFG6FPM5.mjs +0 -1597
- package/dist/chunk-LFG6FPM5.mjs.map +0 -1
- package/dist/chunk-LX4XX6W7.js.map +0 -1
- package/dist/chunk-LZHMNOED.js.map +0 -1
- package/dist/chunk-MW4BCIZC.mjs.map +0 -1
- package/dist/chunk-OCR5DS4C.mjs.map +0 -1
- package/dist/chunk-OLHGZXN3.mjs.map +0 -1
- package/dist/chunk-OPPF3326.js.map +0 -1
- package/dist/chunk-QAT2RWAO.mjs.map +0 -1
- package/dist/chunk-QU5OT4DF.js.map +0 -1
- package/dist/chunk-T5OZHYVM.mjs.map +0 -1
- package/dist/chunk-TFQF2HDO.mjs.map +0 -1
- package/dist/chunk-TOC5FSHP.js.map +0 -1
- package/dist/chunk-TV3VKRJK.mjs.map +0 -1
- package/dist/chunk-UOFTHYIH.js.map +0 -1
- package/dist/chunk-VRTRSEEH.mjs.map +0 -1
- package/dist/chunk-ZI25QCHD.mjs.map +0 -1
|
@@ -1,79 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkKO73EBUT_js = require('./chunk-KO73EBUT.js');
|
|
4
4
|
var chunkDGUM43GV_js = require('./chunk-DGUM43GV.js');
|
|
5
|
-
var react = require('react');
|
|
6
|
-
|
|
7
|
-
function useStorage(storage, key, defaultValue) {
|
|
8
|
-
const [value, setValue] = react.useState(defaultValue);
|
|
9
|
-
const [loading, setLoading] = react.useState(true);
|
|
10
|
-
react.useEffect(() => {
|
|
11
|
-
const loadValue = async () => {
|
|
12
|
-
try {
|
|
13
|
-
const stored = await storage.getItem(key);
|
|
14
|
-
if (stored !== null) {
|
|
15
|
-
setValue(JSON.parse(stored));
|
|
16
|
-
}
|
|
17
|
-
} catch (error) {
|
|
18
|
-
console.error(`Error reading storage key "${key}":`, error);
|
|
19
|
-
} finally {
|
|
20
|
-
setLoading(false);
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
void loadValue();
|
|
24
|
-
}, [storage, key]);
|
|
25
|
-
const updateValue = react.useCallback(
|
|
26
|
-
async (newValue) => {
|
|
27
|
-
try {
|
|
28
|
-
setValue(newValue);
|
|
29
|
-
await storage.setItem(key, JSON.stringify(newValue));
|
|
30
|
-
if ("dispatchChange" in storage && typeof storage.dispatchChange === "function") {
|
|
31
|
-
storage.dispatchChange(key, JSON.stringify(newValue));
|
|
32
|
-
}
|
|
33
|
-
} catch (error) {
|
|
34
|
-
console.error(`Error setting storage key "${key}":`, error);
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
[storage, key]
|
|
38
|
-
);
|
|
39
|
-
const removeValue = react.useCallback(async () => {
|
|
40
|
-
try {
|
|
41
|
-
setValue(defaultValue);
|
|
42
|
-
await storage.removeItem(key);
|
|
43
|
-
if ("dispatchChange" in storage && typeof storage.dispatchChange === "function") {
|
|
44
|
-
storage.dispatchChange(key, null);
|
|
45
|
-
}
|
|
46
|
-
} catch (error) {
|
|
47
|
-
console.error(`Error removing storage key "${key}":`, error);
|
|
48
|
-
}
|
|
49
|
-
}, [storage, key, defaultValue]);
|
|
50
|
-
react.useEffect(() => {
|
|
51
|
-
if (!storage.addChangeListener) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const cleanup = storage.addChangeListener((changedKey, newValue) => {
|
|
55
|
-
if (changedKey === key) {
|
|
56
|
-
try {
|
|
57
|
-
if (newValue === null) {
|
|
58
|
-
setValue(defaultValue);
|
|
59
|
-
} else {
|
|
60
|
-
setValue(JSON.parse(newValue));
|
|
61
|
-
}
|
|
62
|
-
} catch (error) {
|
|
63
|
-
console.error("Error parsing storage change event:", error);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
return cleanup;
|
|
68
|
-
}, [storage, key, defaultValue]);
|
|
69
|
-
return [value, updateValue, removeValue, loading];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// src/storage/hooks/useLocalStorage.ts
|
|
73
|
-
var webStorage = new chunkQU5OT4DF_js.WebStorageAdapter();
|
|
74
|
-
function useLocalStorage(key, defaultValue) {
|
|
75
|
-
return useStorage(webStorage, key, defaultValue);
|
|
76
|
-
}
|
|
77
5
|
|
|
78
6
|
// src/storage/adapters/react-native-adapter.ts
|
|
79
7
|
var AsyncStorage = null;
|
|
@@ -90,7 +18,7 @@ var ReactNativeStorageAdapter = class {
|
|
|
90
18
|
try {
|
|
91
19
|
return await AsyncStorage.getItem(key);
|
|
92
20
|
} catch (error) {
|
|
93
|
-
console.error(
|
|
21
|
+
console.error('[ReactNativeStorage] Error getting item "' + key + '":', error);
|
|
94
22
|
return null;
|
|
95
23
|
}
|
|
96
24
|
}
|
|
@@ -102,7 +30,7 @@ var ReactNativeStorageAdapter = class {
|
|
|
102
30
|
await AsyncStorage.setItem(key, value);
|
|
103
31
|
this.notifyListeners(key, value);
|
|
104
32
|
} catch (error) {
|
|
105
|
-
console.error(
|
|
33
|
+
console.error('[ReactNativeStorage] Error setting item "' + key + '":', error);
|
|
106
34
|
throw error;
|
|
107
35
|
}
|
|
108
36
|
}
|
|
@@ -114,7 +42,7 @@ var ReactNativeStorageAdapter = class {
|
|
|
114
42
|
await AsyncStorage.removeItem(key);
|
|
115
43
|
this.notifyListeners(key, null);
|
|
116
44
|
} catch (error) {
|
|
117
|
-
console.error(
|
|
45
|
+
console.error('[ReactNativeStorage] Error removing item "' + key + '":', error);
|
|
118
46
|
throw error;
|
|
119
47
|
}
|
|
120
48
|
}
|
|
@@ -149,7 +77,7 @@ var ReactNativeStorageAdapter = class {
|
|
|
149
77
|
// src/storage/hooks/useAsyncStorage.ts
|
|
150
78
|
var asyncStorage = new ReactNativeStorageAdapter();
|
|
151
79
|
function useAsyncStorage(key, defaultValue) {
|
|
152
|
-
return useStorage(asyncStorage, key, defaultValue);
|
|
80
|
+
return chunkKO73EBUT_js.useStorage(asyncStorage, key, defaultValue);
|
|
153
81
|
}
|
|
154
82
|
|
|
155
83
|
// src/storage/adapters/miniapp-adapter.ts
|
|
@@ -205,7 +133,7 @@ var MiniAppStorageAdapter = class {
|
|
|
205
133
|
if (error.errMsg?.includes("data not found")) {
|
|
206
134
|
return null;
|
|
207
135
|
}
|
|
208
|
-
console.error(
|
|
136
|
+
console.error('[MiniAppStorage] Error getting item "' + key + '":', error);
|
|
209
137
|
return null;
|
|
210
138
|
}
|
|
211
139
|
}
|
|
@@ -221,7 +149,7 @@ var MiniAppStorageAdapter = class {
|
|
|
221
149
|
await Taro.setStorage({ key, data: value });
|
|
222
150
|
this.notifyListeners(key, value);
|
|
223
151
|
} catch (error) {
|
|
224
|
-
console.error(
|
|
152
|
+
console.error('[MiniAppStorage] Error setting item "' + key + '":', error);
|
|
225
153
|
throw error;
|
|
226
154
|
}
|
|
227
155
|
}
|
|
@@ -237,7 +165,7 @@ var MiniAppStorageAdapter = class {
|
|
|
237
165
|
await Taro.removeStorage({ key });
|
|
238
166
|
this.notifyListeners(key, null);
|
|
239
167
|
} catch (error) {
|
|
240
|
-
console.error(
|
|
168
|
+
console.error('[MiniAppStorage] Error removing item "' + key + '":', error);
|
|
241
169
|
throw error;
|
|
242
170
|
}
|
|
243
171
|
}
|
|
@@ -276,7 +204,7 @@ var MiniAppStorageAdapter = class {
|
|
|
276
204
|
// src/storage/hooks/useTaroStorage.ts
|
|
277
205
|
var taroStorage = new MiniAppStorageAdapter();
|
|
278
206
|
function useTaroStorage(key, defaultValue) {
|
|
279
|
-
return useStorage(taroStorage, key, defaultValue);
|
|
207
|
+
return chunkKO73EBUT_js.useStorage(taroStorage, key, defaultValue);
|
|
280
208
|
}
|
|
281
209
|
|
|
282
210
|
// src/storage/adapters/electron-adapter.ts
|
|
@@ -292,7 +220,7 @@ var ElectronStorageAdapter = class {
|
|
|
292
220
|
try {
|
|
293
221
|
return localStorage.getItem(key);
|
|
294
222
|
} catch (error) {
|
|
295
|
-
console.error(
|
|
223
|
+
console.error('[ElectronStorage] Error getting item "' + key + '":', error);
|
|
296
224
|
return null;
|
|
297
225
|
}
|
|
298
226
|
}
|
|
@@ -311,7 +239,7 @@ var ElectronStorageAdapter = class {
|
|
|
311
239
|
);
|
|
312
240
|
}
|
|
313
241
|
} catch (error) {
|
|
314
|
-
console.error(
|
|
242
|
+
console.error('[ElectronStorage] Error setting item "' + key + '":', error);
|
|
315
243
|
throw error;
|
|
316
244
|
}
|
|
317
245
|
}
|
|
@@ -330,7 +258,7 @@ var ElectronStorageAdapter = class {
|
|
|
330
258
|
);
|
|
331
259
|
}
|
|
332
260
|
} catch (error) {
|
|
333
|
-
console.error(
|
|
261
|
+
console.error('[ElectronStorage] Error removing item "' + key + '":', error);
|
|
334
262
|
throw error;
|
|
335
263
|
}
|
|
336
264
|
}
|
|
@@ -425,7 +353,7 @@ var ElectronStorageAdapter = class {
|
|
|
425
353
|
// src/storage/hooks/useElectronStorage.ts
|
|
426
354
|
var electronStorage = new ElectronStorageAdapter();
|
|
427
355
|
function useElectronStorage(key, defaultValue) {
|
|
428
|
-
return useStorage(electronStorage, key, defaultValue);
|
|
356
|
+
return chunkKO73EBUT_js.useStorage(electronStorage, key, defaultValue);
|
|
429
357
|
}
|
|
430
358
|
|
|
431
359
|
exports.ElectronStorageAdapter = ElectronStorageAdapter;
|
|
@@ -433,8 +361,6 @@ exports.MiniAppStorageAdapter = MiniAppStorageAdapter;
|
|
|
433
361
|
exports.ReactNativeStorageAdapter = ReactNativeStorageAdapter;
|
|
434
362
|
exports.useAsyncStorage = useAsyncStorage;
|
|
435
363
|
exports.useElectronStorage = useElectronStorage;
|
|
436
|
-
exports.useLocalStorage = useLocalStorage;
|
|
437
|
-
exports.useStorage = useStorage;
|
|
438
364
|
exports.useTaroStorage = useTaroStorage;
|
|
439
|
-
//# sourceMappingURL=chunk-
|
|
440
|
-
//# sourceMappingURL=chunk-
|
|
365
|
+
//# sourceMappingURL=chunk-L47ZOYHL.js.map
|
|
366
|
+
//# sourceMappingURL=chunk-L47ZOYHL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/storage/adapters/react-native-adapter.ts","../src/storage/hooks/useAsyncStorage.ts","../src/storage/adapters/miniapp-adapter.ts","../src/storage/hooks/useTaroStorage.ts","../src/storage/adapters/electron-adapter.ts","../src/storage/hooks/useElectronStorage.ts"],"names":["__require","useStorage"],"mappings":"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","file":"chunk-L47ZOYHL.js","sourcesContent":["/**\n * React Native 平台存储适配器 (AsyncStorage)\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 动态导入 AsyncStorage(避免在非 RN 环境报错)\nlet AsyncStorage: any = null;\n\ntry {\n AsyncStorage = require('@react-native-async-storage/async-storage').default;\n} catch (e) {\n // AsyncStorage 不可用(非 React Native 环境)\n // 这是正常的,不需要警告\n}\n\nexport class ReactNativeStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n if (!AsyncStorage) return null;\n\n try {\n return await AsyncStorage.getItem(key);\n } catch (error) {\n console.error('[ReactNativeStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.setItem(key, value);\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[ReactNativeStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.removeItem(key);\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[ReactNativeStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n if (!AsyncStorage) {\n throw new Error('AsyncStorage is not available');\n }\n\n try {\n await AsyncStorage.clear();\n } catch (error) {\n console.error('[ReactNativeStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // React Native 没有原生的跨实例存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n","'use client';\n\n/**\n * React Native AsyncStorage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ReactNativeStorageAdapter } from '../adapters/react-native-adapter';\n\n// 创建单例适配器\nconst asyncStorage = new ReactNativeStorageAdapter();\n\n/**\n * React Native 的 AsyncStorage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useAsyncStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(asyncStorage, key, defaultValue);\n}\n\n","/**\n * 小程序平台存储适配器 (wx.storage / Taro.storage)\n * 仅在小程序环境下加载和使用\n */\n\nimport type { StorageAdapter } from '../types';\n\n// 延迟加载 Taro(仅在小程序环境)\nlet Taro: any = null;\nlet taroLoadPromise: Promise<void> | null = null;\nlet isMiniAppEnvironment: boolean | null = null;\n\n/**\n * 检测是否是小程序环境\n */\nfunction checkIsMiniApp(): boolean {\n if (isMiniAppEnvironment !== null) return isMiniAppEnvironment;\n\n // 服务端环境,不是小程序\n if (typeof window === 'undefined') {\n isMiniAppEnvironment = false;\n return false;\n }\n\n // 检测是否有小程序全局对象\n const globalObj = window as any;\n isMiniAppEnvironment = !!(\n globalObj.wx || // 微信小程序\n globalObj.my || // 支付宝小程序\n globalObj.swan || // 百度小程序\n globalObj.tt || // 抖音小程序\n globalObj.qq || // QQ 小程序\n globalObj.Taro // Taro 环境\n );\n\n return isMiniAppEnvironment;\n}\n\n/**\n * 加载 Taro(仅在小程序环境)\n */\nasync function loadTaro() {\n // 如果不是小程序环境,直接返回\n if (!checkIsMiniApp()) {\n return;\n }\n\n if (Taro) return;\n if (taroLoadPromise) return taroLoadPromise;\n\n taroLoadPromise = (async () => {\n try {\n // 使用动态导入,仅在小程序环境加载\n // 使用 Function 构造器来避免 TypeScript 在编译时解析模块\n const importTaro = new Function('return import(\"@tarojs/taro\")');\n const taroModule = await importTaro();\n Taro = taroModule.default || taroModule;\n } catch (e) {\n // Taro 不可用(非小程序环境或未安装)\n console.warn('[MiniAppStorage] Taro is not available. This is expected in non-MiniApp environments.');\n }\n })();\n\n return taroLoadPromise;\n}\n\nexport class MiniAppStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n // 非小程序环境,直接返回 null\n if (!checkIsMiniApp()) {\n return null;\n }\n\n await loadTaro();\n if (!Taro) return null;\n\n try {\n const result = await Taro.getStorage({ key });\n return result.data;\n } catch (error: any) {\n // 如果 key 不存在,Taro 会抛出错误\n if (error.errMsg?.includes('data not found')) {\n return null;\n }\n console.error('[MiniAppStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.setStorage({ key, data: value });\n this.notifyListeners(key, value);\n } catch (error) {\n console.error('[MiniAppStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.removeStorage({ key });\n this.notifyListeners(key, null);\n } catch (error) {\n console.error('[MiniAppStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n // 非小程序环境,抛出错误\n if (!checkIsMiniApp()) {\n throw new Error('[MiniAppStorage] This adapter can only be used in MiniApp environment');\n }\n\n await loadTaro();\n if (!Taro) {\n throw new Error('[MiniAppStorage] Taro is not available');\n }\n\n try {\n await Taro.clearStorage();\n } catch (error) {\n console.error('[MiniAppStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n addChangeListener(callback: (key: string, value: string | null) => void): () => void {\n // 小程序没有原生的存储监听,我们使用内存中的监听器\n if (!this.listeners.has('*')) {\n this.listeners.set('*', new Set());\n }\n\n this.listeners.get('*')!.add(callback);\n\n // 返回清理函数\n return () => {\n this.listeners.get('*')?.delete(callback);\n };\n }\n\n private notifyListeners(key: string, value: string | null): void {\n const globalListeners = this.listeners.get('*');\n if (globalListeners) {\n globalListeners.forEach((callback) => callback(key, value));\n }\n }\n}\n\n","'use client';\n\n/**\n * 小程序 Taro Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { MiniAppStorageAdapter } from '../adapters/miniapp-adapter';\n\n// 创建单例适配器\nconst taroStorage = new MiniAppStorageAdapter();\n\n/**\n * 小程序的 Taro Storage Hook\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n */\nexport function useTaroStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(taroStorage, key, defaultValue);\n}\n\n","/**\n * Electron 桌面端存储适配器\n *\n * Electron 渲染进程可以使用 localStorage(和 Web 相同)\n * 但我们提供专门的适配器以支持未来可能的主进程存储需求\n */\n\nimport type { StorageAdapter } from '../types';\n\n/**\n * 检查 localStorage 是否可用(Electron 渲染进程)\n */\nconst hasLocalStorage = typeof window !== 'undefined' && typeof window.localStorage !== 'undefined';\n\nexport class ElectronStorageAdapter implements StorageAdapter {\n private listeners: Map<string, Set<(key: string, value: string | null) => void>> = new Map();\n\n async getItem(key: string): Promise<string | null> {\n // 非 Electron 或无 localStorage 环境返回 null\n if (!hasLocalStorage) {\n return null;\n }\n\n try {\n return localStorage.getItem(key);\n } catch (error) {\n console.error('[ElectronStorage] Error getting item \"' + (key) + '\":', error);\n return null;\n }\n }\n\n async setItem(key: string, value: string): Promise<void> {\n // 非 Electron 或无 localStorage 环境静默忽略\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.setItem(key, value);\n this.notifyListeners(key, value);\n\n // 触发自定义事件(用于跨窗口同步)\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key, value },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error setting item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async removeItem(key: string): Promise<void> {\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.removeItem(key);\n this.notifyListeners(key, null);\n\n // 触发自定义事件\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key, value: null },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error removing item \"' + (key) + '\":', error);\n throw error;\n }\n }\n\n async clear(): Promise<void> {\n if (!hasLocalStorage) {\n return;\n }\n\n try {\n localStorage.clear();\n\n // 通知所有监听器\n this.listeners.forEach((listeners, key) => {\n listeners.forEach((listener) => {\n listener(key, null);\n });\n });\n\n // 触发自定义事件\n if (typeof window !== 'undefined') {\n window.dispatchEvent(\n new CustomEvent('electron-storage-change', {\n detail: { key: '*', value: null },\n })\n );\n }\n } catch (error) {\n console.error('[ElectronStorage] Error clearing storage:', error);\n throw error;\n }\n }\n\n /**\n * 添加存储变化监听器\n * 支持跨 Electron 窗口同步\n */\n addChangeListener(listener: (key: string, newValue: string | null) => void): () => void {\n // 添加到监听器集合\n const allListeners = this.listeners.get('*') || new Set();\n allListeners.add(listener);\n this.listeners.set('*', allListeners);\n\n // Storage 事件监听(同源窗口)\n const storageHandler = (e: StorageEvent) => {\n if (e.key) {\n listener(e.key, e.newValue);\n }\n };\n\n // 自定义事件监听(Electron 窗口间通信)\n const customHandler = (e: Event) => {\n const customEvent = e as CustomEvent;\n const { key, value } = customEvent.detail;\n if (key === '*') {\n // clear 操作\n this.listeners.forEach((_, k) => listener(k, null));\n } else {\n listener(key, value);\n }\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('storage', storageHandler);\n window.addEventListener('electron-storage-change', customHandler);\n }\n\n // 返回清理函数\n return () => {\n allListeners.delete(listener);\n if (allListeners.size === 0) {\n this.listeners.delete('*');\n }\n\n if (typeof window !== 'undefined') {\n window.removeEventListener('storage', storageHandler);\n window.removeEventListener('electron-storage-change', customHandler);\n }\n };\n }\n\n removeChangeListener(listener: (key: string, newValue: string | null) => void): void {\n const allListeners = this.listeners.get('*');\n if (allListeners) {\n allListeners.delete(listener);\n if (allListeners.size === 0) {\n this.listeners.delete('*');\n }\n }\n }\n\n /**\n * 通知监听器\n */\n private notifyListeners(key: string, value: string | null): void {\n // 通知特定 key 的监听器\n const keyListeners = this.listeners.get(key);\n if (keyListeners) {\n keyListeners.forEach((listener) => {\n listener(key, value);\n });\n }\n\n // 通知通配符监听器\n const allListeners = this.listeners.get('*');\n if (allListeners) {\n allListeners.forEach((listener) => {\n listener(key, value);\n });\n }\n }\n}\n\n","'use client';\n\n/**\n * Electron 桌面端 Storage Hook\n * 基于通用 useStorage 的便捷封装\n */\n\nimport { useStorage } from './useStorage';\nimport { ElectronStorageAdapter } from '../adapters/electron-adapter';\n\n// 创建单例适配器\nconst electronStorage = new ElectronStorageAdapter();\n\n/**\n * Electron 桌面端的 Storage Hook\n *\n * 在 Electron 渲染进程中使用 localStorage\n * 支持跨窗口同步\n *\n * @param key - 存储键名\n * @param defaultValue - 默认值\n * @returns [value, setValue, removeValue, isLoading]\n *\n * @example\n * ```tsx\n * const [token, setToken, removeToken] = useElectronStorage('auth-token', '')\n * ```\n */\nexport function useElectronStorage<T>(\n key: string,\n defaultValue: T\n): [T, (value: T) => void, () => void, boolean] {\n return useStorage(electronStorage, key, defaultValue);\n}\n\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getTokenFromRequest, verifyJwtToken } from './chunk-
|
|
1
|
+
import { getTokenFromRequest, verifyJwtToken } from './chunk-PE5EAHZK.mjs';
|
|
2
2
|
|
|
3
3
|
// src/auth/server.ts
|
|
4
4
|
async function validateApiAuth(request) {
|
|
@@ -29,5 +29,5 @@ async function validateApiAuthNumeric(request) {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export { validateApiAuth, validateApiAuthNumeric };
|
|
32
|
-
//# sourceMappingURL=chunk-
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
32
|
+
//# sourceMappingURL=chunk-LJ4CCSSY.mjs.map
|
|
33
|
+
//# sourceMappingURL=chunk-LJ4CCSSY.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/auth/server.ts"],"names":["user"],"mappings":";;;AAOA,eAAsB,gBAAgB,OAAA,EAAsB;AAC1D,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,oBAAoB,OAAO,CAAA;AACzC,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAInB,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,UAAA,IAAc,iBAAA;AACzC,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,KAAA,EAAO,MAAM,CAAA;AAElD,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,QAAQ,OAAO,IAAA;AAExC,IAAA,OAAO;AAAA,MACL,IAAI,OAAA,CAAQ,MAAA;AAAA,MACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,MAAM,OAAA,CAAQ;AAAA,KAChB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,6CAAe,KAAK,CAAA;AAClC,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMA,eAAsB,uBAAuB,OAAA,EAAsB;AACjE,EAAA,MAAMA,KAAAA,GAAO,MAAM,eAAA,CAAgB,OAAO,CAAA;AAC1C,EAAA,IAAI,CAACA,OAAM,OAAO,IAAA;AAElB,EAAA,OAAO;AAAA,IACL,GAAGA,KAAAA;AAAA,IACH,EAAA,EAAI,QAAA,CAASA,KAAAA,CAAK,EAAA,EAAI,EAAE;AAAA,GAC1B;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/auth/server.ts"],"names":["user"],"mappings":";;;AAOA,eAAsB,gBAAgB,OAAA,EAAsB;AAC1D,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,oBAAoB,OAAO,CAAA;AACzC,IAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AAInB,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,UAAA,IAAc,iBAAA;AACzC,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe,KAAA,EAAO,MAAM,CAAA;AAElD,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,QAAQ,OAAO,IAAA;AAExC,IAAA,OAAO;AAAA,MACL,IAAI,OAAA,CAAQ,MAAA;AAAA,MACZ,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,MAAM,OAAA,CAAQ;AAAA,KAChB;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,6CAAe,KAAK,CAAA;AAClC,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAMA,eAAsB,uBAAuB,OAAA,EAAsB;AACjE,EAAA,MAAMA,KAAAA,GAAO,MAAM,eAAA,CAAgB,OAAO,CAAA;AAC1C,EAAA,IAAI,CAACA,OAAM,OAAO,IAAA;AAElB,EAAA,OAAO;AAAA,IACL,GAAGA,KAAAA;AAAA,IACH,EAAA,EAAI,QAAA,CAASA,KAAAA,CAAK,EAAA,EAAI,EAAE;AAAA,GAC1B;AACF","file":"chunk-LJ4CCSSY.mjs","sourcesContent":["import { NextRequest } from 'next/server';\nimport { getTokenFromRequest, verifyJwtToken } from './services';\n\n/**\n * 验证 API 请求的身份\n * 从请求头中获取 Token 并验证,返回用户信息\n */\nexport async function validateApiAuth(request: NextRequest) {\n try {\n const token = getTokenFromRequest(request);\n if (!token) return null;\n\n // 注意:这里需要 JWT_SECRET,在演示环境中可能没有\n // 这是一个基础实现,实际使用时需要确保环境变量正确\n const secret = process.env.JWT_SECRET || 'your-secret-key';\n const payload = await verifyJwtToken(token, secret);\n \n if (!payload || !payload.userId) return null;\n\n return {\n id: payload.userId,\n email: payload.email,\n username: payload.username,\n role: payload.role,\n };\n } catch (error) {\n console.error('API 身份验证失败:', error);\n return null;\n }\n}\n\n/**\n * 验证 API 请求的身份(针对使用数字 ID 的项目)\n * 将 string 类型的 userId 转换为 number 类型\n */\nexport async function validateApiAuthNumeric(request: NextRequest) {\n const user = await validateApiAuth(request);\n if (!user) return null;\n \n return {\n ...user,\n id: parseInt(user.id, 10)\n };\n}\n\n\n\n\n\n\n"]}
|
|
@@ -54,14 +54,14 @@ var LocalStorageAdapter = class {
|
|
|
54
54
|
configs[index] = { ...config, updatedAt: Date.now() };
|
|
55
55
|
await this.saveAllConfigsData(configs);
|
|
56
56
|
} else {
|
|
57
|
-
throw new Error(
|
|
57
|
+
throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728: " + id);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
async setDefaultConfig(id) {
|
|
61
61
|
if (typeof window === "undefined") return;
|
|
62
62
|
const config = await this.getConfig(id);
|
|
63
63
|
if (!config) {
|
|
64
|
-
throw new Error(
|
|
64
|
+
throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728: " + id);
|
|
65
65
|
}
|
|
66
66
|
const configs = await this.getAllConfigsData();
|
|
67
67
|
configs.forEach((c) => c.isDefault = c.id === id);
|
|
@@ -105,13 +105,13 @@ var MemoryStorageAdapter = class {
|
|
|
105
105
|
}
|
|
106
106
|
async updateConfig(id, config) {
|
|
107
107
|
if (!this.configs.has(id)) {
|
|
108
|
-
throw new Error(
|
|
108
|
+
throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728: " + id);
|
|
109
109
|
}
|
|
110
110
|
this.configs.set(id, { ...config, updatedAt: Date.now() });
|
|
111
111
|
}
|
|
112
112
|
async setDefaultConfig(id) {
|
|
113
113
|
if (!this.configs.has(id)) {
|
|
114
|
-
throw new Error(
|
|
114
|
+
throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728: " + id);
|
|
115
115
|
}
|
|
116
116
|
this.configs.forEach((c) => c.isDefault = c.id === id);
|
|
117
117
|
this.defaultConfigId = id;
|
|
@@ -154,7 +154,7 @@ var ConfigService = class {
|
|
|
154
154
|
* 生成唯一ID
|
|
155
155
|
*/
|
|
156
156
|
generateId() {
|
|
157
|
-
return
|
|
157
|
+
return "config_" + Date.now() + "_" + Math.random().toString(36).substring(2, 9);
|
|
158
158
|
}
|
|
159
159
|
/**
|
|
160
160
|
* 保存配置
|
|
@@ -230,7 +230,7 @@ var ConfigService = class {
|
|
|
230
230
|
async updateConfig(id, updates) {
|
|
231
231
|
const existing = await this.getConfig(id);
|
|
232
232
|
if (!existing) {
|
|
233
|
-
throw new Error(
|
|
233
|
+
throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728: " + id);
|
|
234
234
|
}
|
|
235
235
|
const updated = {
|
|
236
236
|
...existing,
|
|
@@ -282,7 +282,7 @@ var ConfigService = class {
|
|
|
282
282
|
async exportConfig(id) {
|
|
283
283
|
const config = await this.getConfig(id);
|
|
284
284
|
if (!config) {
|
|
285
|
-
throw new Error(
|
|
285
|
+
throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728: " + id);
|
|
286
286
|
}
|
|
287
287
|
return JSON.stringify(config, null, 2);
|
|
288
288
|
}
|
|
@@ -306,7 +306,7 @@ var ConfigService = class {
|
|
|
306
306
|
}
|
|
307
307
|
return newConfig;
|
|
308
308
|
} catch (error) {
|
|
309
|
-
throw new Error(
|
|
309
|
+
throw new Error("\u5BFC\u5165\u914D\u7F6E\u5931\u8D25: " + error);
|
|
310
310
|
}
|
|
311
311
|
}
|
|
312
312
|
/**
|
|
@@ -315,12 +315,12 @@ var ConfigService = class {
|
|
|
315
315
|
async duplicateConfig(id, newName) {
|
|
316
316
|
const original = await this.getConfig(id);
|
|
317
317
|
if (!original) {
|
|
318
|
-
throw new Error(
|
|
318
|
+
throw new Error("\u914D\u7F6E\u4E0D\u5B58\u5728: " + id);
|
|
319
319
|
}
|
|
320
320
|
const duplicated = {
|
|
321
321
|
...original,
|
|
322
322
|
id: this.generateId(),
|
|
323
|
-
name: newName ||
|
|
323
|
+
name: newName || original.name + " (\u526F\u672C)",
|
|
324
324
|
createdAt: Date.now(),
|
|
325
325
|
updatedAt: Date.now(),
|
|
326
326
|
isDefault: false
|
|
@@ -354,5 +354,5 @@ function getDefaultConfigService() {
|
|
|
354
354
|
exports.ConfigService = ConfigService;
|
|
355
355
|
exports.createConfigService = createConfigService;
|
|
356
356
|
exports.getDefaultConfigService = getDefaultConfigService;
|
|
357
|
-
//# sourceMappingURL=chunk-
|
|
358
|
-
//# sourceMappingURL=chunk-
|
|
357
|
+
//# sourceMappingURL=chunk-NJ2SNXBJ.js.map
|
|
358
|
+
//# sourceMappingURL=chunk-NJ2SNXBJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/testYourself/server/ConfigService.ts"],"names":[],"mappings":"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","file":"chunk-NJ2SNXBJ.js","sourcesContent":["/**\n * 测测你是什么 - 配置管理服务\n * Test Yourself - Configuration Management Service\n * \n * 服务端逻辑:配置的增删改查\n */\n\nimport type { SavedConfig, TestConfig, ConfigListItem } from '../types';\n\nexport interface ConfigServiceOptions {\n /** 存储类型 */\n storageType?: 'localStorage' | 'memory' | 'custom';\n /** 自定义存储适配器 */\n customStorage?: IConfigStorage;\n /** 是否启用缓存 */\n enableCache?: boolean;\n}\n\n/**\n * 配置存储适配器接口\n */\nexport interface IConfigStorage {\n /** 保存配置 */\n saveConfig(config: SavedConfig): Promise<void>;\n /** 获取配置 */\n getConfig(id: string): Promise<SavedConfig | null>;\n /** 获取所有配置列表 */\n getAllConfigs(): Promise<SavedConfig[]>;\n /** 删除配置 */\n deleteConfig(id: string): Promise<void>;\n /** 更新配置 */\n updateConfig(id: string, config: SavedConfig): Promise<void>;\n /** 设置默认配置 */\n setDefaultConfig(id: string): Promise<void>;\n /** 获取默认配置 */\n getDefaultConfig(): Promise<SavedConfig | null>;\n}\n\n/**\n * LocalStorage 存储适配器\n */\nclass LocalStorageAdapter implements IConfigStorage {\n private readonly STORAGE_KEY = 'test-yourself-configs';\n private readonly DEFAULT_KEY = 'test-yourself-default-config';\n\n private async getAllConfigsData(): Promise<SavedConfig[]> {\n if (typeof window === 'undefined') return [];\n \n try {\n const data = localStorage.getItem(this.STORAGE_KEY);\n return data ? JSON.parse(data) : [];\n } catch (error) {\n console.error('读取配置失败:', error);\n return [];\n }\n }\n\n private async saveAllConfigsData(configs: SavedConfig[]): Promise<void> {\n if (typeof window === 'undefined') return;\n \n try {\n localStorage.setItem(this.STORAGE_KEY, JSON.stringify(configs));\n } catch (error) {\n console.error('保存配置失败:', error);\n throw error;\n }\n }\n\n async saveConfig(config: SavedConfig): Promise<void> {\n const configs = await this.getAllConfigsData();\n const existingIndex = configs.findIndex(c => c.id === config.id);\n \n if (existingIndex >= 0) {\n configs[existingIndex] = config;\n } else {\n configs.push(config);\n }\n \n await this.saveAllConfigsData(configs);\n }\n\n async getConfig(id: string): Promise<SavedConfig | null> {\n const configs = await this.getAllConfigsData();\n return configs.find(c => c.id === id) || null;\n }\n\n async getAllConfigs(): Promise<SavedConfig[]> {\n return this.getAllConfigsData();\n }\n\n async deleteConfig(id: string): Promise<void> {\n const configs = await this.getAllConfigsData();\n const filtered = configs.filter(c => c.id !== id);\n await this.saveAllConfigsData(filtered);\n }\n\n async updateConfig(id: string, config: SavedConfig): Promise<void> {\n const configs = await this.getAllConfigsData();\n const index = configs.findIndex(c => c.id === id);\n \n if (index >= 0) {\n configs[index] = { ...config, updatedAt: Date.now() };\n await this.saveAllConfigsData(configs);\n } else {\n throw new Error('配置不存在: ' + (id));\n }\n }\n\n async setDefaultConfig(id: string): Promise<void> {\n if (typeof window === 'undefined') return;\n \n const config = await this.getConfig(id);\n if (!config) {\n throw new Error('配置不存在: ' + (id));\n }\n \n // 清除其他配置的默认标记\n const configs = await this.getAllConfigsData();\n configs.forEach(c => c.isDefault = c.id === id);\n await this.saveAllConfigsData(configs);\n \n // 保存默认配置ID\n localStorage.setItem(this.DEFAULT_KEY, id);\n }\n\n async getDefaultConfig(): Promise<SavedConfig | null> {\n if (typeof window === 'undefined') return null;\n \n try {\n const defaultId = localStorage.getItem(this.DEFAULT_KEY);\n if (defaultId) {\n return await this.getConfig(defaultId);\n }\n \n // 如果没有设置默认配置,返回第一个标记为默认的配置\n const configs = await this.getAllConfigsData();\n return configs.find(c => c.isDefault) || null;\n } catch (error) {\n console.error('获取默认配置失败:', error);\n return null;\n }\n }\n}\n\n/**\n * 内存存储适配器(用于测试或SSR)\n */\nclass MemoryStorageAdapter implements IConfigStorage {\n private configs: Map<string, SavedConfig> = new Map();\n private defaultConfigId: string | null = null;\n\n async saveConfig(config: SavedConfig): Promise<void> {\n this.configs.set(config.id, config);\n }\n\n async getConfig(id: string): Promise<SavedConfig | null> {\n return this.configs.get(id) || null;\n }\n\n async getAllConfigs(): Promise<SavedConfig[]> {\n return Array.from(this.configs.values());\n }\n\n async deleteConfig(id: string): Promise<void> {\n this.configs.delete(id);\n if (this.defaultConfigId === id) {\n this.defaultConfigId = null;\n }\n }\n\n async updateConfig(id: string, config: SavedConfig): Promise<void> {\n if (!this.configs.has(id)) {\n throw new Error('配置不存在: ' + (id));\n }\n this.configs.set(id, { ...config, updatedAt: Date.now() });\n }\n\n async setDefaultConfig(id: string): Promise<void> {\n if (!this.configs.has(id)) {\n throw new Error('配置不存在: ' + (id));\n }\n \n // 清除其他配置的默认标记\n this.configs.forEach(c => c.isDefault = c.id === id);\n this.defaultConfigId = id;\n }\n\n async getDefaultConfig(): Promise<SavedConfig | null> {\n if (this.defaultConfigId) {\n return this.configs.get(this.defaultConfigId) || null;\n }\n \n // 返回第一个标记为默认的配置\n for (const config of this.configs.values()) {\n if (config.isDefault) {\n return config;\n }\n }\n \n return null;\n }\n}\n\n/**\n * 配置管理服务\n */\nexport class ConfigService {\n private storage: IConfigStorage;\n private cache: Map<string, SavedConfig> = new Map();\n private enableCache: boolean;\n\n constructor(options: ConfigServiceOptions = {}) {\n const {\n storageType = 'localStorage',\n customStorage,\n enableCache = true,\n } = options;\n\n this.enableCache = enableCache;\n\n if (customStorage) {\n this.storage = customStorage;\n } else if (storageType === 'memory') {\n this.storage = new MemoryStorageAdapter();\n } else {\n this.storage = new LocalStorageAdapter();\n }\n }\n\n /**\n * 初始化服务(如果需要)\n */\n async init(): Promise<void> {\n // 基础类不需要初始化,但子类或适配器可能需要\n }\n\n /**\n * 生成唯一ID\n */\n private generateId(): string {\n return 'config_' + (Date.now()) + '_' + (Math.random().toString(36).substring(2, 9));\n }\n\n /**\n * 保存配置\n */\n async saveConfig(config: SavedConfig): Promise<void> {\n await this.storage.saveConfig(config);\n\n if (config.isDefault) {\n await this.storage.setDefaultConfig(config.id);\n }\n\n if (this.enableCache) {\n this.cache.set(config.id, config);\n }\n }\n\n /**\n * 创建新配置\n */\n async createConfig(\n name: string,\n config: TestConfig,\n description?: string,\n isDefault = false\n ): Promise<SavedConfig> {\n const savedConfig: SavedConfig = {\n id: this.generateId(),\n name,\n description,\n config,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault,\n };\n\n await this.storage.saveConfig(savedConfig);\n\n if (isDefault) {\n await this.storage.setDefaultConfig(savedConfig.id);\n }\n\n if (this.enableCache) {\n this.cache.set(savedConfig.id, savedConfig);\n }\n\n return savedConfig;\n }\n\n /**\n * 获取配置\n */\n async getConfig(id: string): Promise<SavedConfig | null> {\n // 先查缓存\n if (this.enableCache && this.cache.has(id)) {\n return this.cache.get(id)!;\n }\n\n const config = await this.storage.getConfig(id);\n\n if (config && this.enableCache) {\n this.cache.set(id, config);\n }\n\n return config;\n }\n\n /**\n * 获取所有配置列表\n */\n async getAllConfigs(): Promise<SavedConfig[]> {\n return await this.storage.getAllConfigs();\n }\n\n /**\n * 获取配置列表(精简版)\n */\n async getConfigList(): Promise<ConfigListItem[]> {\n const configs = await this.getAllConfigs();\n return configs.map(c => ({\n id: c.id,\n name: c.name,\n description: c.description,\n resultCount: c.config.results.length,\n createdAt: c.createdAt,\n updatedAt: c.updatedAt,\n isDefault: c.isDefault,\n }));\n }\n\n /**\n * 更新配置\n */\n async updateConfig(\n id: string,\n updates: {\n name?: string;\n description?: string;\n config?: TestConfig;\n isDefault?: boolean;\n }\n ): Promise<SavedConfig> {\n const existing = await this.getConfig(id);\n if (!existing) {\n throw new Error('配置不存在: ' + (id));\n }\n\n const updated: SavedConfig = {\n ...existing,\n ...updates,\n updatedAt: Date.now(),\n };\n\n await this.storage.updateConfig(id, updated);\n\n if (updates.isDefault) {\n await this.storage.setDefaultConfig(id);\n }\n\n if (this.enableCache) {\n this.cache.set(id, updated);\n }\n\n return updated;\n }\n\n /**\n * 删除配置\n */\n async deleteConfig(id: string): Promise<void> {\n await this.storage.deleteConfig(id);\n\n if (this.enableCache) {\n this.cache.delete(id);\n }\n }\n\n /**\n * 设置默认配置\n */\n async setDefaultConfig(id: string): Promise<void> {\n await this.storage.setDefaultConfig(id);\n\n // 清理缓存,让下次获取时重新加载\n if (this.enableCache) {\n this.cache.clear();\n }\n }\n\n /**\n * 获取默认配置\n */\n async getDefaultConfig(): Promise<SavedConfig | null> {\n return await this.storage.getDefaultConfig();\n }\n\n /**\n * 清空缓存\n */\n clearCache(): void {\n this.cache.clear();\n }\n\n /**\n * 导出配置(JSON格式)\n */\n async exportConfig(id: string): Promise<string> {\n const config = await this.getConfig(id);\n if (!config) {\n throw new Error('配置不存在: ' + (id));\n }\n return JSON.stringify(config, null, 2);\n }\n\n /**\n * 导入配置\n */\n async importConfig(jsonString: string): Promise<SavedConfig> {\n try {\n const data = JSON.parse(jsonString) as SavedConfig;\n \n // 生成新ID,避免冲突\n const newConfig: SavedConfig = {\n ...data,\n id: this.generateId(),\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault: false, // 导入的配置不设为默认\n };\n\n await this.storage.saveConfig(newConfig);\n\n if (this.enableCache) {\n this.cache.set(newConfig.id, newConfig);\n }\n\n return newConfig;\n } catch (error) {\n throw new Error('导入配置失败: ' + (error));\n }\n }\n\n /**\n * 复制配置\n */\n async duplicateConfig(id: string, newName?: string): Promise<SavedConfig> {\n const original = await this.getConfig(id);\n if (!original) {\n throw new Error('配置不存在: ' + (id));\n }\n\n const duplicated: SavedConfig = {\n ...original,\n id: this.generateId(),\n name: newName || (original.name) + ' (副本)',\n createdAt: Date.now(),\n updatedAt: Date.now(),\n isDefault: false,\n };\n\n await this.storage.saveConfig(duplicated);\n\n if (this.enableCache) {\n this.cache.set(duplicated.id, duplicated);\n }\n\n return duplicated;\n }\n\n /**\n * 批量删除配置\n */\n async deleteConfigs(ids: string[]): Promise<void> {\n for (const id of ids) {\n await this.deleteConfig(id);\n }\n }\n}\n\n/**\n * 创建默认配置服务实例\n */\nexport function createConfigService(options?: ConfigServiceOptions): ConfigService {\n return new ConfigService(options);\n}\n\n/**\n * 默认配置服务实例(单例)\n */\nlet defaultServiceInstance: ConfigService | null = null;\n\nexport function getDefaultConfigService(): ConfigService {\n if (!defaultServiceInstance) {\n defaultServiceInstance = createConfigService();\n }\n return defaultServiceInstance;\n}\n\n\n"]}
|
|
@@ -55,7 +55,7 @@ var DrizzleAuthService = class {
|
|
|
55
55
|
}
|
|
56
56
|
if (this.config.checkSecretStrength && process.env.NODE_ENV === "production" && this.config.jwtSecret.length < 32) {
|
|
57
57
|
throw new Error(
|
|
58
|
-
|
|
58
|
+
"JWT_SECRET is too short (" + this.config.jwtSecret.length + " chars, minimum 32 required in production)"
|
|
59
59
|
);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -269,5 +269,5 @@ var DrizzleAuthService = class {
|
|
|
269
269
|
};
|
|
270
270
|
|
|
271
271
|
export { DrizzleAuthService, generateToken, getTokenFromRequest, hashPassword, verifyJwtToken, verifyPassword };
|
|
272
|
-
//# sourceMappingURL=chunk-
|
|
273
|
-
//# sourceMappingURL=chunk-
|
|
272
|
+
//# sourceMappingURL=chunk-PE5EAHZK.mjs.map
|
|
273
|
+
//# sourceMappingURL=chunk-PE5EAHZK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/auth/services/password-utils.ts","../src/auth/services/token-utils.ts","../src/auth/services/drizzle-auth-service.ts"],"names":[],"mappings":"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","file":"chunk-PE5EAHZK.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","/**\n * Auth Services - Token Utilities\n * Token 相关工具函数\n */\n\nimport jwt from 'jsonwebtoken';\nimport type { UserRole } from '../schema/enums';\n\n/**\n * JWT Payload\n */\nexport interface JwtPayload {\n userId: string;\n email: string;\n username?: string;\n role: UserRole;\n iat?: number;\n exp?: number;\n}\n\n/**\n * 生成 JWT Token\n */\nexport function generateToken(\n payload: Omit<JwtPayload, 'iat' | 'exp'>,\n secret: string,\n expiresIn: string | number = '7d'\n): string {\n return jwt.sign(payload, secret, { expiresIn } as jwt.SignOptions);\n}\n\n/**\n * 验证 JWT Token\n */\nexport function verifyJwtToken(token: string, secret: string): JwtPayload {\n return jwt.verify(token, secret) as JwtPayload;\n}\n\n/**\n * 从请求中获取 Token\n * 优先从 Cookie 读取(Web),兼容 Authorization Header(Mobile/API)\n */\nexport function getTokenFromRequest(request: Request): string | null {\n // 🔐 优先从 httpOnly Cookie 读取(Web 管理后台,更安全)\n const cookieHeader = request.headers.get('Cookie');\n if (cookieHeader) {\n // 匹配 auth_token\n const match = cookieHeader.match(/auth_token=([^;]+)/);\n if (match && match[1]) {\n return match[1];\n }\n }\n\n // 🔄 兼容从 Authorization Header 读取(移动端、小程序、API 调用)\n const authHeader = request.headers.get('Authorization');\n if (authHeader && authHeader.startsWith('Bearer ')) {\n const token = authHeader.substring(7);\n return token || null;\n }\n\n return null;\n}\n\n","/**\n * Auth Services - Drizzle Auth Service\n * 基于 Drizzle ORM 的认证服务\n */\n\nimport { eq, and, gt } from 'drizzle-orm';\nimport { randomBytes } from 'crypto';\nimport { user, session } from '../schema';\nimport { hashPassword, verifyPassword } from './password-utils';\nimport { generateToken, verifyJwtToken } from './token-utils';\nimport type {\n AuthServiceConfig,\n AuthResult,\n VerifyResult,\n UserInfo,\n SessionInfo,\n} from './types';\nimport type { UserRole } from '../schema/enums';\n\n/**\n * Drizzle 认证服务类\n *\n * @example\n * ```typescript\n * import { DrizzleAuthService } from '@qhr123/sa2kit/auth/services';\n * import { db } from './db';\n *\n * const authService = new DrizzleAuthService({\n * db,\n * jwtSecret: process.env.JWT_SECRET!,\n * jwtExpiresIn: '7d',\n * });\n *\n * // 用户注册\n * const result = await authService.signUp('user@example.com', 'password123', 'username');\n *\n * // 用户登录\n * const loginResult = await authService.signIn('user@example.com', 'password123');\n * ```\n */\nexport class DrizzleAuthService {\n private config: Required<AuthServiceConfig>;\n\n constructor(config: AuthServiceConfig) {\n // 设置默认值\n this.config = {\n db: config.db,\n jwtSecret: config.jwtSecret,\n jwtExpiresIn: config.jwtExpiresIn || '7d',\n saltRounds: config.saltRounds || 12,\n checkSecretStrength: config.checkSecretStrength !== false,\n };\n\n // 验证配置\n this.validateConfig();\n }\n\n /**\n * 验证配置\n */\n private validateConfig(): void {\n if (!this.config.jwtSecret) {\n throw new Error(\n 'JWT_SECRET is required. Please provide jwtSecret in config. ' +\n \"You can generate a secure secret with: node -e \\\"console.log(require('crypto').randomBytes(64).toString('hex'))\\\"\"\n );\n }\n\n // 生产环境检查密钥强度\n if (\n this.config.checkSecretStrength &&\n process.env.NODE_ENV === 'production' &&\n this.config.jwtSecret.length < 32\n ) {\n throw new Error(\n 'JWT_SECRET is too short (' + (this.config.jwtSecret.length) + ' chars, minimum 32 required in production)'\n );\n }\n }\n\n /**\n * 用户注册\n */\n async signUp(\n email: string,\n password: string,\n username?: string,\n role: UserRole = 'USER'\n ): Promise<AuthResult> {\n try {\n // 检查用户是否已存在\n const existingUser = await this.config.db\n .select()\n .from(user)\n .where(eq(user.email, email))\n .limit(1);\n\n if (existingUser.length > 0) {\n throw new Error('用户已存在');\n }\n\n // 哈希密码\n const hashedPassword = await hashPassword(password, this.config.saltRounds);\n\n // 创建用户\n const [newUser] = await this.config.db\n .insert(user)\n .values({\n id: randomBytes(16).toString('hex'),\n email,\n password: hashedPassword,\n username: username || email.split('@')[0],\n role,\n emailVerified: false,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n })\n .returning();\n\n // 生成 JWT token\n const token = generateToken(\n {\n userId: newUser.id,\n email: newUser.email,\n role: newUser.role as UserRole,\n },\n this.config.jwtSecret,\n this.config.jwtExpiresIn\n );\n\n // 创建会话\n await this.createSession(newUser.id, token);\n\n return {\n user: {\n id: newUser.id,\n email: newUser.email,\n username: newUser.username,\n role: newUser.role as UserRole,\n },\n token,\n };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * 用户登录\n */\n async signIn(email: string, password: string): Promise<AuthResult> {\n try {\n // 查找用户\n const [foundUser] = await this.config.db\n .select()\n .from(user)\n .where(eq(user.email, email))\n .limit(1);\n\n if (!foundUser) {\n throw new Error('邮箱或密码错误');\n }\n\n // 验证密码\n if (!foundUser.password) {\n throw new Error('用户密码未设置');\n }\n\n const isPasswordValid = await verifyPassword(password, foundUser.password);\n if (!isPasswordValid) {\n throw new Error('邮箱或密码错误');\n }\n\n // 生成 JWT token\n const token = generateToken(\n {\n userId: foundUser.id,\n email: foundUser.email,\n role: foundUser.role as UserRole,\n },\n this.config.jwtSecret,\n this.config.jwtExpiresIn\n );\n\n // 创建会话\n await this.createSession(foundUser.id, token);\n\n return {\n user: {\n id: foundUser.id,\n email: foundUser.email,\n username: foundUser.username,\n role: foundUser.role as UserRole,\n },\n token,\n };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * 验证 Token\n */\n async verifyToken(token: string): Promise<VerifyResult> {\n try {\n // 验证 JWT\n const decoded = verifyJwtToken(token, this.config.jwtSecret);\n\n // 检查会话是否存在且未过期\n const [foundSession] = await this.config.db\n .select()\n .from(session)\n .where(\n and(eq(session.token, token), gt(session.expiresAt, new Date().toISOString()))\n )\n .limit(1);\n\n if (!foundSession) {\n throw new Error('会话无效或已过期');\n }\n\n // 获取用户信息\n const [foundUser] = await this.config.db\n .select()\n .from(user)\n .where(eq(user.id, decoded.userId))\n .limit(1);\n\n if (!foundUser) {\n throw new Error('用户不存在');\n }\n\n return {\n user: {\n id: foundUser.id,\n email: foundUser.email,\n username: foundUser.username,\n role: foundUser.role as UserRole,\n },\n session: foundSession as SessionInfo,\n };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * 创建会话\n */\n async createSession(\n userId: string,\n token: string,\n ipAddress?: string,\n userAgent?: string\n ): Promise<void> {\n const expiresAt = new Date();\n expiresAt.setDate(expiresAt.getDate() + 7); // 7天后过期\n\n await this.config.db.insert(session).values({\n id: randomBytes(16).toString('hex'),\n userId,\n token,\n expiresAt: expiresAt.toISOString(),\n ipAddress,\n userAgent,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n });\n }\n\n /**\n * 删除会话(登出)\n */\n async signOut(token: string): Promise<{ success: boolean }> {\n try {\n await this.config.db.delete(session).where(eq(session.token, token));\n return { success: true };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * 获取会话\n */\n async getSession(token: string): Promise<VerifyResult | null> {\n try {\n return await this.verifyToken(token);\n } catch (error) {\n return null;\n }\n }\n\n /**\n * 检查管理员权限\n */\n async requireAdmin(token: string): Promise<VerifyResult> {\n const result = await this.verifyToken(token);\n if (!['ADMIN', 'SUPER_ADMIN'].includes(result.user.role)) {\n throw new Error('需要管理员权限');\n }\n return result;\n }\n\n /**\n * 检查超级管理员权限\n */\n async requireSuperAdmin(token: string): Promise<VerifyResult> {\n const result = await this.verifyToken(token);\n if (result.user.role !== 'SUPER_ADMIN') {\n throw new Error('需要超级管理员权限');\n }\n return result;\n }\n\n /**\n * 通过用户 ID 获取用户信息\n */\n async getUserById(userId: string): Promise<UserInfo | null> {\n try {\n const [foundUser] = await this.config.db\n .select()\n .from(user)\n .where(eq(user.id, userId))\n .limit(1);\n\n if (!foundUser) {\n return null;\n }\n\n return {\n id: foundUser.id,\n email: foundUser.email,\n username: foundUser.username,\n role: foundUser.role as UserRole,\n };\n } catch (error) {\n return null;\n }\n }\n\n /**\n * 通过邮箱获取用户信息\n */\n async getUserByEmail(email: string): Promise<UserInfo | null> {\n try {\n const [foundUser] = await this.config.db\n .select()\n .from(user)\n .where(eq(user.email, email))\n .limit(1);\n\n if (!foundUser) {\n return null;\n }\n\n return {\n id: foundUser.id,\n email: foundUser.email,\n username: foundUser.username,\n role: foundUser.role as UserRole,\n };\n } catch (error) {\n return null;\n }\n }\n}\n\n"]}
|