sa2kit 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/AliyunOSSProvider-7IOT5U6M.js +15 -0
- package/dist/{AliyunOSSProvider-4GRL2FJB.js.map → AliyunOSSProvider-7IOT5U6M.js.map} +1 -1
- package/dist/AliyunOSSProvider-ZXZM7OQA.mjs +6 -0
- package/dist/{AliyunOSSProvider-QNVFIZ7Q.mjs.map → AliyunOSSProvider-ZXZM7OQA.mjs.map} +1 -1
- package/dist/LocalStorageProvider-KJKRCKBS.js +15 -0
- package/dist/{LocalStorageProvider-PFA2DMIJ.js.map → LocalStorageProvider-KJKRCKBS.js.map} +1 -1
- package/dist/LocalStorageProvider-O22465NY.mjs +6 -0
- package/dist/{LocalStorageProvider-J5RHV37G.mjs.map → LocalStorageProvider-O22465NY.mjs.map} +1 -1
- package/dist/{chunk-SLKOEYFH.js → chunk-2234T4A6.js} +5 -5
- package/dist/chunk-2234T4A6.js.map +1 -0
- package/dist/{chunk-HQLKOXG7.js → chunk-36KGNXKW.js} +3 -3
- package/dist/{chunk-HQLKOXG7.js.map → chunk-36KGNXKW.js.map} +1 -1
- package/dist/{chunk-BCE6RUZV.js → chunk-375C7WL7.js} +19 -19
- package/dist/chunk-375C7WL7.js.map +1 -0
- package/dist/{chunk-VMTEDX5H.js → chunk-3J24Z4MB.js} +34 -318
- package/dist/chunk-3J24Z4MB.js.map +1 -0
- package/dist/{chunk-PBI7FKMB.js → chunk-3QCATFQV.js} +3 -3
- package/dist/chunk-3QCATFQV.js.map +1 -0
- package/dist/{chunk-FXQOXLDE.js → chunk-3R6JHA6D.js} +4 -4
- package/dist/chunk-3R6JHA6D.js.map +1 -0
- package/dist/{chunk-ZRAW3HXA.js → chunk-4OXKHV7J.js} +3 -3
- package/dist/chunk-4OXKHV7J.js.map +1 -0
- package/dist/chunk-4PJM4752.js +4 -0
- package/dist/{chunk-5USIS3UM.js.map → chunk-4PJM4752.js.map} +1 -1
- package/dist/{chunk-3Z43XGA4.mjs → chunk-65JRVC3F.mjs} +4 -4
- package/dist/{chunk-3Z43XGA4.mjs.map → chunk-65JRVC3F.mjs.map} +1 -1
- package/dist/{chunk-Q5EDCKQA.js → chunk-6HL54I2B.js} +16 -16
- package/dist/chunk-6HL54I2B.js.map +1 -0
- package/dist/chunk-6V2MIQPF.mjs +77 -0
- package/dist/chunk-6V2MIQPF.mjs.map +1 -0
- package/dist/{chunk-C6KV7VTZ.mjs → chunk-7CRU2Y5X.mjs} +5 -5
- package/dist/chunk-7CRU2Y5X.mjs.map +1 -0
- package/dist/chunk-7PMT4L4I.js +324 -0
- package/dist/chunk-7PMT4L4I.js.map +1 -0
- package/dist/{chunk-XJ7ZAGC5.js → chunk-7VVZHFEM.js} +3 -3
- package/dist/chunk-7VVZHFEM.js.map +1 -0
- package/dist/chunk-AWHGIKTQ.js +56 -0
- package/dist/{chunk-FHLTPXAR.js.map → chunk-AWHGIKTQ.js.map} +1 -1
- package/dist/chunk-B3GYF6TY.js +37 -0
- package/dist/{chunk-2Y7BKFKZ.js.map → chunk-B3GYF6TY.js.map} +1 -1
- package/dist/{chunk-5FUAQLGC.mjs → chunk-BDBJFOXM.mjs} +3 -3
- package/dist/{chunk-5FUAQLGC.mjs.map → chunk-BDBJFOXM.mjs.map} +1 -1
- package/dist/{chunk-ZGVB35L2.mjs → chunk-BTW3SWQN.mjs} +3 -3
- package/dist/chunk-BTW3SWQN.mjs.map +1 -0
- package/dist/{chunk-I5ZPEDNR.mjs → chunk-CHYSSZ4E.mjs} +10 -10
- package/dist/chunk-CHYSSZ4E.mjs.map +1 -0
- package/dist/{chunk-FIUBFREP.mjs → chunk-DO6QYAZV.mjs} +5 -5
- package/dist/chunk-DO6QYAZV.mjs.map +1 -0
- package/dist/{chunk-MBANGIG3.mjs → chunk-DTR53LQO.mjs} +6 -6
- package/dist/chunk-DTR53LQO.mjs.map +1 -0
- package/dist/{chunk-EQXPL7TN.mjs → chunk-EI2S4XDG.mjs} +16 -5
- package/dist/chunk-EI2S4XDG.mjs.map +1 -0
- package/dist/{chunk-GSNGCENJ.js → chunk-EOZHUI46.js} +16 -4
- package/dist/chunk-EOZHUI46.js.map +1 -0
- package/dist/{chunk-25OFOKNF.js → chunk-F2BZIU67.js} +18 -5
- package/dist/chunk-F2BZIU67.js.map +1 -0
- package/dist/{chunk-AQPU2AXH.js → chunk-F2TEJSCP.js} +10 -10
- package/dist/chunk-F2TEJSCP.js.map +1 -0
- package/dist/{chunk-UCOE6SET.js → chunk-FCLS5R24.js} +3 -3
- package/dist/chunk-FCLS5R24.js.map +1 -0
- package/dist/{chunk-3NHAT7D4.mjs → chunk-FUA6ZGMI.mjs} +27 -12
- package/dist/chunk-FUA6ZGMI.mjs.map +1 -0
- package/dist/chunk-FY2X3LYR.mjs +3 -0
- package/dist/{chunk-VRN76M56.mjs.map → chunk-FY2X3LYR.mjs.map} +1 -1
- package/dist/{chunk-V7EVKD5G.mjs → chunk-GS4SAW25.mjs} +4 -4
- package/dist/chunk-GS4SAW25.mjs.map +1 -0
- package/dist/chunk-H56ICWUO.js +321 -0
- package/dist/chunk-H56ICWUO.js.map +1 -0
- package/dist/{chunk-HDMIOOZY.mjs → chunk-HG34SGMN.mjs} +4 -4
- package/dist/chunk-HG34SGMN.mjs.map +1 -0
- package/dist/chunk-HL4H2HF6.js +279 -0
- package/dist/chunk-HL4H2HF6.js.map +1 -0
- package/dist/chunk-IJIQUMAK.mjs +272 -0
- package/dist/chunk-IJIQUMAK.mjs.map +1 -0
- package/dist/{imageCrop/index.mjs → chunk-KEZFTDZT.mjs} +24 -6
- package/dist/chunk-KEZFTDZT.mjs.map +1 -0
- package/dist/{chunk-KQ643L7Z.js → chunk-KHOVC2KL.js} +3 -3
- package/dist/chunk-KHOVC2KL.js.map +1 -0
- package/dist/{chunk-6PMXAK7F.js → chunk-KRBSTLKC.js} +57 -57
- package/dist/chunk-KRBSTLKC.js.map +1 -0
- package/dist/chunk-KVYHCGRY.js +2011 -0
- package/dist/chunk-KVYHCGRY.js.map +1 -0
- package/dist/{chunk-G7UBMCUT.mjs → chunk-LZ5YTMMP.mjs} +3 -3
- package/dist/chunk-LZ5YTMMP.mjs.map +1 -0
- package/dist/{chunk-WW4GE6CZ.js → chunk-MJ6XJGAL.js} +23 -119
- package/dist/chunk-MJ6XJGAL.js.map +1 -0
- package/dist/{chunk-NCRP2YHY.mjs → chunk-MKLXCV4Z.mjs} +8 -96
- package/dist/chunk-MKLXCV4Z.mjs.map +1 -0
- package/dist/chunk-MMDSZIXD.mjs +286 -0
- package/dist/chunk-MMDSZIXD.mjs.map +1 -0
- package/dist/{chunk-TC5YU6A4.mjs → chunk-N2O3OX5Y.mjs} +3 -3
- package/dist/chunk-N2O3OX5Y.mjs.map +1 -0
- package/dist/{chunk-3FRAIS4T.mjs → chunk-O6NNSPWD.mjs} +5 -5
- package/dist/{chunk-3FRAIS4T.mjs.map → chunk-O6NNSPWD.mjs.map} +1 -1
- package/dist/chunk-OIRZXSYM.js +80 -0
- package/dist/chunk-OIRZXSYM.js.map +1 -0
- package/dist/{chunk-Q5VFBPMG.mjs → chunk-P7JQRNBJ.mjs} +3 -3
- package/dist/chunk-P7JQRNBJ.mjs.map +1 -0
- package/dist/{chunk-BIHYZA67.mjs → chunk-PLIG5257.mjs} +18 -18
- package/dist/chunk-PLIG5257.mjs.map +1 -0
- package/dist/chunk-QIF4MG5V.mjs +283 -0
- package/dist/chunk-QIF4MG5V.mjs.map +1 -0
- package/dist/{chunk-4OOANEJV.mjs → chunk-RHECN4E2.mjs} +21 -21
- package/dist/chunk-RHECN4E2.mjs.map +1 -0
- package/dist/{chunk-YOTQG4NP.mjs → chunk-RHHTZTIN.mjs} +4 -4
- package/dist/chunk-RHHTZTIN.mjs.map +1 -0
- package/dist/{chunk-G6NSKJMH.js → chunk-RRQ2X26Z.js} +4 -4
- package/dist/chunk-RRQ2X26Z.js.map +1 -0
- package/dist/{chunk-4WBCWJSN.js → chunk-RST2T54Y.js} +7 -7
- package/dist/chunk-RST2T54Y.js.map +1 -0
- package/dist/{chunk-R2DXTE2L.js → chunk-RVNQI6BI.js} +4 -4
- package/dist/chunk-RVNQI6BI.js.map +1 -0
- package/dist/{chunk-SKFEJPMJ.mjs → chunk-S3K4LTRI.mjs} +6 -6
- package/dist/chunk-S3K4LTRI.mjs.map +1 -0
- package/dist/{chunk-ZM2SZJTZ.js → chunk-SWZ5XNF6.js} +9 -9
- package/dist/chunk-SWZ5XNF6.js.map +1 -0
- package/dist/{chunk-QSKLQX6H.js → chunk-U7HNBCBS.js} +16 -16
- package/dist/chunk-U7HNBCBS.js.map +1 -0
- package/dist/{chunk-CIVO4R6N.mjs → chunk-UJS3YSD3.mjs} +3 -3
- package/dist/chunk-UJS3YSD3.mjs.map +1 -0
- package/dist/{chunk-G6HXNQ2U.mjs → chunk-UJUWDF7M.mjs} +8 -8
- package/dist/chunk-UJUWDF7M.mjs.map +1 -0
- package/dist/{chunk-CAYOQDBR.js → chunk-UR5NENGE.js} +3 -3
- package/dist/chunk-UR5NENGE.js.map +1 -0
- package/dist/{chunk-QXAOXBVB.mjs → chunk-V7HGBDCB.mjs} +3 -3
- package/dist/chunk-V7HGBDCB.mjs.map +1 -0
- package/dist/{chunk-ATUCZXJY.js → chunk-V7RLIZMN.js} +14 -4
- package/dist/chunk-V7RLIZMN.js.map +1 -0
- package/dist/{chunk-ACUFEDVQ.js → chunk-VCKXK6V5.js} +9 -9
- package/dist/chunk-VCKXK6V5.js.map +1 -0
- package/dist/{chunk-XUS5ACKR.mjs → chunk-VIEXDTNF.mjs} +3 -3
- package/dist/chunk-VIEXDTNF.mjs.map +1 -0
- package/dist/{imageCrop/index.js → chunk-VN2DULIA.js} +24 -5
- package/dist/chunk-VN2DULIA.js.map +1 -0
- package/dist/{chunk-S6YSGVWD.js → chunk-VNWMRUY6.js} +31 -87
- package/dist/chunk-VNWMRUY6.js.map +1 -0
- package/dist/{chunk-3DXPQ4YV.mjs → chunk-VYK4M2D6.mjs} +18 -6
- package/dist/chunk-VYK4M2D6.mjs.map +1 -0
- package/dist/{chunk-WEEXCPSE.mjs → chunk-WB4H6ZUW.mjs} +3 -3
- package/dist/chunk-WB4H6ZUW.mjs.map +1 -0
- package/dist/{chunk-GWNBVGDT.mjs → chunk-WM3AEJ2E.mjs} +6 -257
- package/dist/chunk-WM3AEJ2E.mjs.map +1 -0
- package/dist/{chunk-CX2GHCAI.mjs → chunk-X5GINUGI.mjs} +26 -81
- package/dist/chunk-X5GINUGI.mjs.map +1 -0
- package/dist/{chunk-DIF5VRL3.mjs → chunk-XB7GUEHZ.mjs} +14 -5
- package/dist/chunk-XB7GUEHZ.mjs.map +1 -0
- package/dist/{chunk-ZLYPALF3.js → chunk-XE5RGZ3B.js} +11 -11
- package/dist/chunk-XE5RGZ3B.js.map +1 -0
- package/dist/{chunk-WJ7IMUEJ.mjs → chunk-XNTIMVSL.mjs} +7 -7
- package/dist/chunk-XNTIMVSL.mjs.map +1 -0
- package/dist/{chunk-ZWQJSZEY.js → chunk-Y7WHUKJF.js} +28 -12
- package/dist/chunk-Y7WHUKJF.js.map +1 -0
- package/dist/{components/index.mjs → chunk-YIRPPMCN.mjs} +305 -785
- package/dist/chunk-YIRPPMCN.mjs.map +1 -0
- package/dist/{chunk-KH6RQ4J5.js → chunk-Z2SNB5LJ.js} +3 -3
- package/dist/chunk-Z2SNB5LJ.js.map +1 -0
- package/dist/{chunk-HJ6MH7J7.js → chunk-ZOP7YIVX.js} +17 -17
- package/dist/chunk-ZOP7YIVX.js.map +1 -0
- package/dist/{chunk-HJZHQW5R.mjs → chunk-ZUZLWHH5.mjs} +3 -3
- package/dist/chunk-ZUZLWHH5.mjs.map +1 -0
- package/dist/{ai → common/ai}/llm/core/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/core/index.d.ts +3 -3
- package/dist/{ai/llm → common/ai/llm/core}/index.js +14 -14
- package/dist/{ai/llm → common/ai/llm/core}/index.mjs +3 -3
- package/dist/{ai → common/ai}/llm/electron/index.d.mts +3 -3
- package/dist/{ai/llm/web → common/ai/llm/electron}/index.d.ts +3 -3
- package/dist/common/ai/llm/electron/index.js +67 -0
- package/dist/common/ai/llm/electron/index.mjs +10 -0
- package/dist/{ai → common/ai}/llm/index.d.mts +2 -2
- package/dist/{ai → common/ai}/llm/index.d.ts +2 -2
- package/dist/{ai/llm/core → common/ai/llm}/index.js +13 -13
- package/dist/{ai/llm/core → common/ai/llm}/index.mjs +2 -2
- package/dist/{ai → common/ai}/llm/miniapp/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/miniapp/index.d.ts +3 -3
- package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.js +16 -16
- package/dist/{ai/llm/rn → common/ai/llm/miniapp}/index.mjs +4 -4
- package/dist/{ai → common/ai}/llm/rn/index.d.mts +3 -3
- package/dist/{ai → common/ai}/llm/rn/index.d.ts +3 -3
- package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.js +16 -16
- package/dist/{ai/llm/miniapp → common/ai/llm/rn}/index.mjs +4 -4
- package/dist/common/ai/llm/ui/electron/index.d.mts +5 -0
- package/dist/common/ai/llm/ui/electron/index.d.ts +5 -0
- package/dist/common/ai/llm/ui/electron/index.js +22 -0
- package/dist/common/ai/llm/ui/electron/index.mjs +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.d.mts +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.d.ts +9 -0
- package/dist/common/ai/llm/ui/miniapp/index.js +14 -0
- package/dist/common/ai/llm/ui/miniapp/index.mjs +5 -0
- package/dist/common/ai/llm/ui/rn/index.d.mts +9 -0
- package/dist/common/ai/llm/ui/rn/index.d.ts +9 -0
- package/dist/common/ai/llm/ui/rn/index.js +14 -0
- package/dist/common/ai/llm/ui/rn/index.mjs +5 -0
- package/dist/{ai → common/ai}/llm/ui/web/index.d.mts +7 -7
- package/dist/{ai → common/ai}/llm/ui/web/index.d.ts +7 -7
- package/dist/common/ai/llm/ui/web/index.js +21 -0
- package/dist/common/ai/llm/ui/web/index.mjs +8 -0
- package/dist/{ai → common/ai}/llm/web/index.d.mts +3 -3
- package/dist/{ai/llm/electron → common/ai/llm/web}/index.d.ts +3 -3
- package/dist/common/ai/llm/web/index.js +66 -0
- package/dist/common/ai/llm/web/index.mjs +9 -0
- package/dist/{analytics → common/analytics}/index.d.mts +1 -1
- package/dist/{analytics → common/analytics}/index.d.ts +1 -1
- package/dist/{analytics → common/analytics}/index.js +79 -79
- package/dist/{analytics → common/analytics}/index.mjs +3 -3
- package/dist/{analytics → common/analytics}/server/index.js +2 -2
- package/dist/common/analytics/server/index.js.map +1 -0
- package/dist/{analytics → common/analytics}/server/index.mjs +2 -2
- package/dist/common/analytics/server/index.mjs.map +1 -0
- package/dist/{api → common/api}/index.d.mts +3 -3
- package/dist/{api → common/api}/index.d.ts +3 -3
- package/dist/common/api/index.js +21 -0
- package/dist/common/api/index.mjs +4 -0
- package/dist/common/auth/components/index.d.mts +9 -9
- package/dist/common/auth/components/index.d.ts +9 -9
- package/dist/common/auth/index.js +6 -6
- package/dist/common/auth/index.mjs +2 -2
- package/dist/common/auth/react/index.d.mts +3 -3
- package/dist/common/auth/react/index.d.ts +3 -3
- package/dist/common/auth/rn/index.d.mts +2 -2
- package/dist/common/auth/rn/index.d.ts +2 -2
- package/dist/common/auth/rn/index.js +2 -2
- package/dist/common/auth/rn/index.js.map +1 -1
- package/dist/common/auth/rn/index.mjs +1 -1
- package/dist/common/auth/rn/index.mjs.map +1 -1
- package/dist/common/components/index.d.mts +4 -0
- package/dist/common/components/index.d.ts +4 -0
- package/dist/common/components/index.js +414 -0
- package/dist/common/components/index.mjs +9 -0
- package/dist/{config → common/config}/index.d.mts +1 -1
- package/dist/{config → common/config}/index.d.ts +1 -1
- package/dist/common/config/index.js +21 -0
- package/dist/common/config/index.mjs +4 -0
- package/dist/{config → common/config}/server/index.js +5 -5
- package/dist/common/config/server/index.js.map +1 -0
- package/dist/{config → common/config}/server/index.mjs +5 -5
- package/dist/common/config/server/index.mjs.map +1 -0
- package/dist/common/export/index.d.mts +2 -2
- package/dist/common/export/index.d.ts +2 -2
- package/dist/common/export/index.js +67 -67
- package/dist/common/export/index.mjs +3 -3
- package/dist/common/export/server/index.d.mts +2 -2
- package/dist/common/export/server/index.d.ts +2 -2
- package/dist/common/export/server/index.js +76 -48
- package/dist/common/export/server/index.mjs +3 -3
- package/dist/common/file/index.d.mts +2 -2
- package/dist/common/file/index.d.ts +2 -2
- package/dist/common/file/index.js +27 -27
- package/dist/common/file/index.mjs +5 -5
- package/dist/common/file/server/index.d.mts +2 -2
- package/dist/common/file/server/index.d.ts +2 -2
- package/dist/common/file/server/index.js +58 -50
- package/dist/common/file/server/index.mjs +8 -8
- package/dist/{i18n → common/i18n}/index.d.mts +1 -1
- package/dist/{i18n → common/i18n}/index.d.ts +1 -1
- package/dist/{i18n → common/i18n}/index.js +18 -18
- package/dist/{i18n → common/i18n}/index.mjs +2 -2
- package/dist/common/imageCrop/index.d.mts +2 -0
- package/dist/common/imageCrop/index.d.ts +2 -0
- package/dist/common/imageCrop/index.js +61 -0
- package/dist/common/imageCrop/index.mjs +4 -0
- package/dist/common/index.d.mts +16 -16
- package/dist/common/index.d.ts +16 -16
- package/dist/common/index.js +75 -67
- package/dist/common/index.mjs +26 -26
- package/dist/common/logger/index.d.mts +1 -1
- package/dist/common/logger/index.d.ts +1 -1
- package/dist/common/logger/index.js +6 -7
- package/dist/common/logger/index.mjs +1 -2
- package/dist/{ossFile → common/ossFile}/index.d.mts +6 -6
- package/dist/{ossFile → common/ossFile}/index.d.ts +6 -6
- package/dist/{ossFile → common/ossFile}/index.js +26 -26
- package/dist/{ossFile → common/ossFile}/index.mjs +5 -5
- package/dist/{ossFile/server/index.d.ts → common/ossFile/server/index.d.mts} +7 -7
- package/dist/{ossFile/server/index.d.mts → common/ossFile/server/index.d.ts} +7 -7
- package/dist/{ossFile → common/ossFile}/server/index.js +60 -52
- package/dist/{ossFile → common/ossFile}/server/index.mjs +10 -10
- package/dist/common/platform/index.js +8 -8
- package/dist/common/platform/index.mjs +4 -4
- package/dist/common/request/index.d.mts +1 -1
- package/dist/common/request/index.d.ts +1 -1
- package/dist/common/request/index.js +5 -6
- package/dist/common/request/index.mjs +2 -3
- package/dist/common/storage/index.d.mts +1 -1
- package/dist/common/storage/index.d.ts +1 -1
- package/dist/common/storage/index.js +17 -17
- package/dist/common/storage/index.mjs +5 -5
- package/dist/{universalExport → common/universalExport}/index.d.mts +6 -86
- package/dist/{universalExport → common/universalExport}/index.d.ts +6 -86
- package/dist/{universalExport → common/universalExport}/index.js +67 -67
- package/dist/common/universalExport/index.mjs +5 -0
- package/dist/{universalExport → common/universalExport}/server/index.d.mts +3 -84
- package/dist/{universalExport → common/universalExport}/server/index.d.ts +3 -84
- package/dist/common/universalExport/server/index.js +151 -0
- package/dist/common/universalExport/server/index.mjs +6 -0
- package/dist/{universalFile/index.d.ts → common/universalFile/index.d.mts} +9 -9
- package/dist/{universalFile/index.d.mts → common/universalFile/index.d.ts} +9 -9
- package/dist/{universalFile → common/universalFile}/index.js +63 -63
- package/dist/common/universalFile/index.js.map +1 -0
- package/dist/{universalFile → common/universalFile}/index.mjs +4 -4
- package/dist/common/universalFile/index.mjs.map +1 -0
- package/dist/{universalFile → common/universalFile}/server/index.d.mts +5 -5
- package/dist/{universalFile → common/universalFile}/server/index.d.ts +5 -5
- package/dist/{universalFile → common/universalFile}/server/index.js +68 -68
- package/dist/{universalFile → common/universalFile}/server/index.mjs +8 -8
- package/dist/common/utils/index.d.mts +1 -1
- package/dist/common/utils/index.d.ts +1 -1
- package/dist/common/utils/index.js +11 -12
- package/dist/common/utils/index.mjs +2 -3
- package/dist/{index-WrR57hKT.d.ts → index-BRLygK4h.d.ts} +2 -2
- package/dist/{request/index.d.mts → index-BWNK5mH2.d.ts} +19 -2
- package/dist/{utils/index.d.mts → index-BiCK6gg6.d.mts} +19 -1
- package/dist/{utils/index.d.ts → index-BiCK6gg6.d.ts} +19 -1
- package/dist/{index-DoUo8IrU.d.mts → index-BxZauNN_.d.mts} +8 -8
- package/dist/{index-DoUo8IrU.d.ts → index-BxZauNN_.d.ts} +8 -8
- package/dist/{request/index.d.ts → index-C-P2yBTH.d.mts} +19 -2
- package/dist/{index-D0cqaQEH.d.mts → index-CLB80GCP.d.mts} +5 -5
- package/dist/{index-D0cqaQEH.d.ts → index-CLB80GCP.d.ts} +5 -5
- package/dist/{index-2G9Dxjvt.d.ts → index-CT4K2z-O.d.ts} +2 -2
- package/dist/{index-qcOvRVuN.d.mts → index-D6RJTGce.d.mts} +2 -2
- package/dist/{storage/index.d.ts → index-DA7L9JlE.d.mts} +26 -3
- package/dist/{imageCrop/index.d.mts → index-DXVph21C.d.mts} +40 -4
- package/dist/{imageCrop/index.d.ts → index-DXVph21C.d.ts} +40 -4
- package/dist/{index-CYuUB8aF.d.mts → index-DzyK789B.d.mts} +2 -2
- package/dist/{logger/index.d.mts → index-FVJZCEtm.d.mts} +21 -1
- package/dist/{logger/index.d.ts → index-FVJZCEtm.d.ts} +21 -1
- package/dist/{storage/index.d.mts → index-nD9vPCZT.d.ts} +26 -3
- package/dist/{components/index.d.mts → index-nOmIv2BG.d.mts} +159 -5
- package/dist/{components/index.d.ts → index-nOmIv2BG.d.ts} +159 -5
- package/dist/{path-qjVnH8qU.d.ts → path-Bzc7hj1N.d.ts} +5 -1
- package/dist/{path-DkaHQSyW.d.mts → path-DN_65vhO.d.mts} +5 -1
- package/dist/{types-3ujSNAXb.d.mts → utils-Dm3O1rAa.d.mts} +81 -1
- package/dist/{types-3ujSNAXb.d.ts → utils-Dm3O1rAa.d.ts} +81 -1
- package/package.json +292 -312
- package/dist/AliyunOSSProvider-4GRL2FJB.js +0 -15
- package/dist/AliyunOSSProvider-QNVFIZ7Q.mjs +0 -6
- package/dist/CollisionBalls-BpHufX3H.d.mts +0 -41
- package/dist/CollisionBalls-BpHufX3H.d.ts +0 -41
- package/dist/ConfigService-BxK06xP6.d.mts +0 -262
- package/dist/ConfigService-BxK06xP6.d.ts +0 -262
- package/dist/LocalStorageProvider-J5RHV37G.mjs +0 -6
- package/dist/LocalStorageProvider-PFA2DMIJ.js +0 -15
- package/dist/UniversalFileService-CC4d3wkc.d.ts +0 -139
- package/dist/UniversalFileService-CzAE_G4V.d.mts +0 -139
- package/dist/ai/llm/electron/index.js +0 -66
- package/dist/ai/llm/electron/index.mjs +0 -9
- package/dist/ai/llm/ui/electron/index.d.mts +0 -5
- package/dist/ai/llm/ui/electron/index.d.ts +0 -5
- package/dist/ai/llm/ui/electron/index.js +0 -21
- package/dist/ai/llm/ui/electron/index.mjs +0 -8
- package/dist/ai/llm/ui/miniapp/index.d.mts +0 -9
- package/dist/ai/llm/ui/miniapp/index.d.ts +0 -9
- package/dist/ai/llm/ui/miniapp/index.js +0 -14
- package/dist/ai/llm/ui/miniapp/index.mjs +0 -5
- package/dist/ai/llm/ui/rn/index.d.mts +0 -9
- package/dist/ai/llm/ui/rn/index.d.ts +0 -9
- package/dist/ai/llm/ui/rn/index.js +0 -14
- package/dist/ai/llm/ui/rn/index.mjs +0 -5
- package/dist/ai/llm/ui/web/index.js +0 -20
- package/dist/ai/llm/ui/web/index.mjs +0 -7
- package/dist/ai/llm/web/index.js +0 -65
- package/dist/ai/llm/web/index.mjs +0 -8
- package/dist/analytics/server/index.js.map +0 -1
- package/dist/analytics/server/index.mjs.map +0 -1
- package/dist/api/index.js +0 -21
- package/dist/api/index.mjs +0 -4
- package/dist/audioDetection/index.d.mts +0 -449
- package/dist/audioDetection/index.d.ts +0 -449
- package/dist/audioDetection/index.js +0 -1244
- package/dist/audioDetection/index.js.map +0 -1
- package/dist/audioDetection/index.mjs +0 -1227
- package/dist/audioDetection/index.mjs.map +0 -1
- package/dist/boothVaultService-Cn4WPhjg.d.mts +0 -83
- package/dist/boothVaultService-Cn4WPhjg.d.ts +0 -83
- package/dist/business/index.d.mts +0 -2
- package/dist/business/index.d.ts +0 -2
- package/dist/business/index.js +0 -581
- package/dist/business/index.js.map +0 -1
- package/dist/business/index.mjs +0 -575
- package/dist/business/index.mjs.map +0 -1
- package/dist/calendar/index.d.mts +0 -1325
- package/dist/calendar/index.d.ts +0 -1325
- package/dist/calendar/index.js +0 -5964
- package/dist/calendar/index.js.map +0 -1
- package/dist/calendar/index.mjs +0 -5878
- package/dist/calendar/index.mjs.map +0 -1
- package/dist/calendar/routes/index.d.mts +0 -191
- package/dist/calendar/routes/index.d.ts +0 -191
- package/dist/calendar/routes/index.js +0 -844
- package/dist/calendar/routes/index.js.map +0 -1
- package/dist/calendar/routes/index.mjs +0 -826
- package/dist/calendar/routes/index.mjs.map +0 -1
- package/dist/chunk-25OFOKNF.js.map +0 -1
- package/dist/chunk-2Y7BKFKZ.js +0 -37
- package/dist/chunk-3CSCIRQY.js +0 -17
- package/dist/chunk-3CSCIRQY.js.map +0 -1
- package/dist/chunk-3DXPQ4YV.mjs.map +0 -1
- package/dist/chunk-3NHAT7D4.mjs.map +0 -1
- package/dist/chunk-4FDUURSD.js +0 -22
- package/dist/chunk-4FDUURSD.js.map +0 -1
- package/dist/chunk-4OOANEJV.mjs.map +0 -1
- package/dist/chunk-4WBCWJSN.js.map +0 -1
- package/dist/chunk-5GBDDXYL.mjs +0 -23
- package/dist/chunk-5GBDDXYL.mjs.map +0 -1
- package/dist/chunk-5USIS3UM.js +0 -4
- package/dist/chunk-6PMXAK7F.js.map +0 -1
- package/dist/chunk-7B5SI4OF.mjs +0 -15
- package/dist/chunk-7B5SI4OF.mjs.map +0 -1
- package/dist/chunk-ACUFEDVQ.js.map +0 -1
- package/dist/chunk-AQPU2AXH.js.map +0 -1
- package/dist/chunk-ATUCZXJY.js.map +0 -1
- package/dist/chunk-BCE6RUZV.js.map +0 -1
- package/dist/chunk-BIHYZA67.mjs.map +0 -1
- package/dist/chunk-C6KV7VTZ.mjs.map +0 -1
- package/dist/chunk-CAYOQDBR.js.map +0 -1
- package/dist/chunk-CIVO4R6N.mjs.map +0 -1
- package/dist/chunk-CX2GHCAI.mjs.map +0 -1
- package/dist/chunk-DIF5VRL3.mjs.map +0 -1
- package/dist/chunk-EQXPL7TN.mjs.map +0 -1
- package/dist/chunk-FCEBAWN6.js +0 -18
- package/dist/chunk-FCEBAWN6.js.map +0 -1
- package/dist/chunk-FHIE5MTC.mjs +0 -541
- package/dist/chunk-FHIE5MTC.mjs.map +0 -1
- package/dist/chunk-FHLTPXAR.js +0 -56
- package/dist/chunk-FIUBFREP.mjs.map +0 -1
- package/dist/chunk-FXQOXLDE.js.map +0 -1
- package/dist/chunk-G6HXNQ2U.mjs.map +0 -1
- package/dist/chunk-G6NSKJMH.js.map +0 -1
- package/dist/chunk-G7UBMCUT.mjs.map +0 -1
- package/dist/chunk-GSNGCENJ.js.map +0 -1
- package/dist/chunk-GWNBVGDT.mjs.map +0 -1
- package/dist/chunk-HDMIOOZY.mjs.map +0 -1
- package/dist/chunk-HJ6MH7J7.js.map +0 -1
- package/dist/chunk-HJZHQW5R.mjs.map +0 -1
- package/dist/chunk-I5ZPEDNR.mjs.map +0 -1
- package/dist/chunk-KH6RQ4J5.js.map +0 -1
- package/dist/chunk-KQ643L7Z.js.map +0 -1
- package/dist/chunk-LFB5EIIM.mjs +0 -31
- package/dist/chunk-LFB5EIIM.mjs.map +0 -1
- package/dist/chunk-MBANGIG3.mjs.map +0 -1
- package/dist/chunk-NCRP2YHY.mjs.map +0 -1
- package/dist/chunk-NDGHXVGS.js +0 -25
- package/dist/chunk-NDGHXVGS.js.map +0 -1
- package/dist/chunk-NDPO5OMC.js +0 -563
- package/dist/chunk-NDPO5OMC.js.map +0 -1
- package/dist/chunk-PBI7FKMB.js.map +0 -1
- package/dist/chunk-Q5EDCKQA.js.map +0 -1
- package/dist/chunk-Q5VFBPMG.mjs.map +0 -1
- package/dist/chunk-QSKLQX6H.js.map +0 -1
- package/dist/chunk-QXAOXBVB.mjs.map +0 -1
- package/dist/chunk-R2DXTE2L.js.map +0 -1
- package/dist/chunk-RTD2WHQQ.mjs +0 -16
- package/dist/chunk-RTD2WHQQ.mjs.map +0 -1
- package/dist/chunk-S6YSGVWD.js.map +0 -1
- package/dist/chunk-SKFEJPMJ.mjs.map +0 -1
- package/dist/chunk-SLKOEYFH.js.map +0 -1
- package/dist/chunk-TC5YU6A4.mjs.map +0 -1
- package/dist/chunk-UCOE6SET.js.map +0 -1
- package/dist/chunk-UIYKZ73N.js +0 -36
- package/dist/chunk-UIYKZ73N.js.map +0 -1
- package/dist/chunk-V7EVKD5G.mjs.map +0 -1
- package/dist/chunk-VMTEDX5H.js.map +0 -1
- package/dist/chunk-VRN76M56.mjs +0 -3
- package/dist/chunk-VXFUXZN5.mjs +0 -20
- package/dist/chunk-VXFUXZN5.mjs.map +0 -1
- package/dist/chunk-WEEXCPSE.mjs.map +0 -1
- package/dist/chunk-WJ7IMUEJ.mjs.map +0 -1
- package/dist/chunk-WW4GE6CZ.js.map +0 -1
- package/dist/chunk-XJ7ZAGC5.js.map +0 -1
- package/dist/chunk-XUS5ACKR.mjs.map +0 -1
- package/dist/chunk-YOTQG4NP.mjs.map +0 -1
- package/dist/chunk-ZGVB35L2.mjs.map +0 -1
- package/dist/chunk-ZLYPALF3.js.map +0 -1
- package/dist/chunk-ZM2SZJTZ.js.map +0 -1
- package/dist/chunk-ZRAW3HXA.js.map +0 -1
- package/dist/chunk-ZWQJSZEY.js.map +0 -1
- package/dist/components/index.js +0 -2516
- package/dist/components/index.js.map +0 -1
- package/dist/components/index.mjs.map +0 -1
- package/dist/config/index.js +0 -21
- package/dist/config/index.mjs +0 -4
- package/dist/config/server/index.js.map +0 -1
- package/dist/config/server/index.mjs.map +0 -1
- package/dist/drizzle-schema-BNhqj2AZ.d.mts +0 -1114
- package/dist/drizzle-schema-BNhqj2AZ.d.ts +0 -1114
- package/dist/festivalCard/index.d.mts +0 -76
- package/dist/festivalCard/index.d.ts +0 -76
- package/dist/festivalCard/index.js +0 -1492
- package/dist/festivalCard/index.js.map +0 -1
- package/dist/festivalCard/index.mjs +0 -1475
- package/dist/festivalCard/index.mjs.map +0 -1
- package/dist/festivalCard/routes/index.d.mts +0 -42
- package/dist/festivalCard/routes/index.d.ts +0 -42
- package/dist/festivalCard/routes/index.js +0 -361
- package/dist/festivalCard/routes/index.js.map +0 -1
- package/dist/festivalCard/routes/index.mjs +0 -356
- package/dist/festivalCard/routes/index.mjs.map +0 -1
- package/dist/festivalCard/server/index.d.mts +0 -120
- package/dist/festivalCard/server/index.d.ts +0 -120
- package/dist/festivalCard/server/index.js +0 -272
- package/dist/festivalCard/server/index.js.map +0 -1
- package/dist/festivalCard/server/index.mjs +0 -265
- package/dist/festivalCard/server/index.mjs.map +0 -1
- package/dist/festivalCardService-B3GsnNpV.d.ts +0 -13
- package/dist/festivalCardService-CWhrLNE9.d.mts +0 -13
- package/dist/imageCrop/index.js.map +0 -1
- package/dist/imageCrop/index.mjs.map +0 -1
- package/dist/index-Bjem5rWn.d.mts +0 -17
- package/dist/index-C5U-2hJq.d.ts +0 -23
- package/dist/index-CifSBBP2.d.ts +0 -17
- package/dist/index-D0K4ehme.d.mts +0 -20
- package/dist/index-DLnfKN-a.d.mts +0 -23
- package/dist/index-DSel44Ke.d.mts +0 -93
- package/dist/index-DSel44Ke.d.ts +0 -93
- package/dist/index-DZ5iJtNO.d.mts +0 -102
- package/dist/index-DZ5iJtNO.d.ts +0 -102
- package/dist/index-Da7qdkgW.d.ts +0 -20
- package/dist/index-DrPcMJPc.d.mts +0 -250
- package/dist/index-DrPcMJPc.d.ts +0 -250
- package/dist/index-oLUvfqT8.d.ts +0 -20
- package/dist/index-pe38RDgC.d.mts +0 -20
- package/dist/index.d.mts +0 -11611
- package/dist/index.d.ts +0 -11611
- package/dist/index.js +0 -17230
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -16954
- package/dist/index.mjs.map +0 -1
- package/dist/logger/index.js +0 -29
- package/dist/logger/index.mjs +0 -4
- package/dist/mikuContest/ui/web/index.d.mts +0 -2
- package/dist/mikuContest/ui/web/index.d.ts +0 -2
- package/dist/mikuContest/ui/web/index.js +0 -353
- package/dist/mikuContest/ui/web/index.js.map +0 -1
- package/dist/mikuContest/ui/web/index.mjs +0 -343
- package/dist/mikuContest/ui/web/index.mjs.map +0 -1
- package/dist/mikuFireworks3D/index.d.mts +0 -268
- package/dist/mikuFireworks3D/index.d.ts +0 -268
- package/dist/mikuFireworks3D/index.js +0 -1267
- package/dist/mikuFireworks3D/index.js.map +0 -1
- package/dist/mikuFireworks3D/index.mjs +0 -1228
- package/dist/mikuFireworks3D/index.mjs.map +0 -1
- package/dist/mikuFusionGame/index.d.mts +0 -117
- package/dist/mikuFusionGame/index.d.ts +0 -117
- package/dist/mikuFusionGame/index.js +0 -1208
- package/dist/mikuFusionGame/index.js.map +0 -1
- package/dist/mikuFusionGame/index.mjs +0 -1195
- package/dist/mikuFusionGame/index.mjs.map +0 -1
- package/dist/mmd/admin/index.d.mts +0 -487
- package/dist/mmd/admin/index.d.ts +0 -487
- package/dist/mmd/admin/index.js +0 -1058
- package/dist/mmd/admin/index.js.map +0 -1
- package/dist/mmd/admin/index.mjs +0 -1027
- package/dist/mmd/admin/index.mjs.map +0 -1
- package/dist/mmd/index.d.mts +0 -2467
- package/dist/mmd/index.d.ts +0 -2467
- package/dist/mmd/index.js +0 -10119
- package/dist/mmd/index.js.map +0 -1
- package/dist/mmd/index.mjs +0 -10028
- package/dist/mmd/index.mjs.map +0 -1
- package/dist/mmd/server/index.d.mts +0 -139
- package/dist/mmd/server/index.d.ts +0 -139
- package/dist/mmd/server/index.js +0 -424
- package/dist/mmd/server/index.js.map +0 -1
- package/dist/mmd/server/index.mjs +0 -404
- package/dist/mmd/server/index.mjs.map +0 -1
- package/dist/music/index.d.mts +0 -74
- package/dist/music/index.d.ts +0 -74
- package/dist/music/index.js +0 -830
- package/dist/music/index.js.map +0 -1
- package/dist/music/index.mjs +0 -809
- package/dist/music/index.mjs.map +0 -1
- package/dist/music/server/index.d.mts +0 -1
- package/dist/music/server/index.d.ts +0 -1
- package/dist/music/server/index.js +0 -194
- package/dist/music/server/index.js.map +0 -1
- package/dist/music/server/index.mjs +0 -182
- package/dist/music/server/index.mjs.map +0 -1
- package/dist/navigation/index.d.mts +0 -93
- package/dist/navigation/index.d.ts +0 -93
- package/dist/navigation/index.js +0 -453
- package/dist/navigation/index.js.map +0 -1
- package/dist/navigation/index.mjs +0 -443
- package/dist/navigation/index.mjs.map +0 -1
- package/dist/portfolio/index.d.mts +0 -66
- package/dist/portfolio/index.d.ts +0 -66
- package/dist/portfolio/index.js +0 -736
- package/dist/portfolio/index.js.map +0 -1
- package/dist/portfolio/index.mjs +0 -724
- package/dist/portfolio/index.mjs.map +0 -1
- package/dist/qqbot/server/index.d.mts +0 -216
- package/dist/qqbot/server/index.d.ts +0 -216
- package/dist/qqbot/server/index.js +0 -394
- package/dist/qqbot/server/index.js.map +0 -1
- package/dist/qqbot/server/index.mjs +0 -385
- package/dist/qqbot/server/index.mjs.map +0 -1
- package/dist/qqbot/ui/web/index.d.mts +0 -10
- package/dist/qqbot/ui/web/index.d.ts +0 -10
- package/dist/qqbot/ui/web/index.js +0 -105
- package/dist/qqbot/ui/web/index.js.map +0 -1
- package/dist/qqbot/ui/web/index.mjs +0 -99
- package/dist/qqbot/ui/web/index.mjs.map +0 -1
- package/dist/request/index.js +0 -22
- package/dist/request/index.mjs +0 -5
- package/dist/screenReceiver/index.d.mts +0 -86
- package/dist/screenReceiver/index.d.ts +0 -86
- package/dist/screenReceiver/index.js +0 -281
- package/dist/screenReceiver/index.js.map +0 -1
- package/dist/screenReceiver/index.mjs +0 -273
- package/dist/screenReceiver/index.mjs.map +0 -1
- package/dist/storage/index.js +0 -48
- package/dist/storage/index.mjs +0 -7
- package/dist/testYourself/admin/index.d.mts +0 -58
- package/dist/testYourself/admin/index.d.ts +0 -58
- package/dist/testYourself/admin/index.js +0 -1009
- package/dist/testYourself/admin/index.js.map +0 -1
- package/dist/testYourself/admin/index.mjs +0 -1002
- package/dist/testYourself/admin/index.mjs.map +0 -1
- package/dist/testYourself/index.d.mts +0 -53
- package/dist/testYourself/index.d.ts +0 -53
- package/dist/testYourself/index.js +0 -2551
- package/dist/testYourself/index.js.map +0 -1
- package/dist/testYourself/index.mjs +0 -2531
- package/dist/testYourself/index.mjs.map +0 -1
- package/dist/testYourself/server/index.d.mts +0 -1029
- package/dist/testYourself/server/index.d.ts +0 -1029
- package/dist/testYourself/server/index.js +0 -825
- package/dist/testYourself/server/index.js.map +0 -1
- package/dist/testYourself/server/index.mjs +0 -816
- package/dist/testYourself/server/index.mjs.map +0 -1
- package/dist/types-B6B210gX.d.mts +0 -270
- package/dist/types-B6B210gX.d.ts +0 -270
- package/dist/types-Bdnte5EN.d.mts +0 -292
- package/dist/types-Cs0CLvrH.d.mts +0 -70
- package/dist/types-Cs0CLvrH.d.ts +0 -70
- package/dist/types-HorDyIRv.d.mts +0 -303
- package/dist/types-HorDyIRv.d.ts +0 -303
- package/dist/types-_rFX1atk.d.ts +0 -292
- package/dist/universalExport/index.mjs +0 -5
- package/dist/universalExport/server/index.js +0 -123
- package/dist/universalExport/server/index.mjs +0 -6
- package/dist/universalFile/index.js.map +0 -1
- package/dist/universalFile/index.mjs.map +0 -1
- package/dist/universalFile/server/index.js.map +0 -1
- package/dist/universalFile/server/index.mjs.map +0 -1
- package/dist/utils/index.js +0 -46
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/index.mjs +0 -5
- package/dist/utils/index.mjs.map +0 -1
- package/dist/vocaloidBooth/index.d.mts +0 -64
- package/dist/vocaloidBooth/index.d.ts +0 -64
- package/dist/vocaloidBooth/index.js +0 -376
- package/dist/vocaloidBooth/index.js.map +0 -1
- package/dist/vocaloidBooth/index.mjs +0 -362
- package/dist/vocaloidBooth/index.mjs.map +0 -1
- package/dist/vocaloidBooth/server/index.d.mts +0 -111
- package/dist/vocaloidBooth/server/index.d.ts +0 -111
- package/dist/vocaloidBooth/server/index.js +0 -247
- package/dist/vocaloidBooth/server/index.js.map +0 -1
- package/dist/vocaloidBooth/server/index.mjs +0 -237
- package/dist/vocaloidBooth/server/index.mjs.map +0 -1
- package/dist/vocaloidBooth/web/index.d.mts +0 -3
- package/dist/vocaloidBooth/web/index.d.ts +0 -3
- package/dist/vocaloidBooth/web/index.js +0 -376
- package/dist/vocaloidBooth/web/index.js.map +0 -1
- package/dist/vocaloidBooth/web/index.mjs +0 -362
- package/dist/vocaloidBooth/web/index.mjs.map +0 -1
- /package/dist/{ai → common/ai}/llm/core/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/core/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/electron/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/electron/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/miniapp/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/miniapp/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/rn/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/rn/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/electron/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/electron/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/miniapp/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/miniapp/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/rn/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/rn/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/web/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/ui/web/index.mjs.map +0 -0
- /package/dist/{ai → common/ai}/llm/web/index.js.map +0 -0
- /package/dist/{ai → common/ai}/llm/web/index.mjs.map +0 -0
- /package/dist/{analytics → common/analytics}/index.js.map +0 -0
- /package/dist/{analytics → common/analytics}/index.mjs.map +0 -0
- /package/dist/{analytics → common/analytics}/server/index.d.mts +0 -0
- /package/dist/{analytics → common/analytics}/server/index.d.ts +0 -0
- /package/dist/{api → common/api}/index.js.map +0 -0
- /package/dist/{api → common/api}/index.mjs.map +0 -0
- /package/dist/{config → common/components}/index.js.map +0 -0
- /package/dist/{config → common/components}/index.mjs.map +0 -0
- /package/dist/{i18n → common/config}/index.js.map +0 -0
- /package/dist/{i18n → common/config}/index.mjs.map +0 -0
- /package/dist/{config → common/config}/server/index.d.mts +0 -0
- /package/dist/{config → common/config}/server/index.d.ts +0 -0
- /package/dist/{logger → common/i18n}/index.js.map +0 -0
- /package/dist/{logger → common/i18n}/index.mjs.map +0 -0
- /package/dist/{ossFile → common/imageCrop}/index.js.map +0 -0
- /package/dist/{ossFile → common/imageCrop}/index.mjs.map +0 -0
- /package/dist/{ossFile/server → common/ossFile}/index.js.map +0 -0
- /package/dist/{ossFile/server → common/ossFile}/index.mjs.map +0 -0
- /package/dist/{request → common/ossFile/server}/index.js.map +0 -0
- /package/dist/{request → common/ossFile/server}/index.mjs.map +0 -0
- /package/dist/{storage → common/universalExport}/index.js.map +0 -0
- /package/dist/{storage → common/universalExport}/index.mjs.map +0 -0
- /package/dist/{universalExport → common/universalExport/server}/index.js.map +0 -0
- /package/dist/{universalExport → common/universalExport/server}/index.mjs.map +0 -0
- /package/dist/{universalExport → common/universalFile}/server/index.js.map +0 -0
- /package/dist/{universalExport → common/universalFile}/server/index.mjs.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/common/config/server/types.ts","../../../../src/common/config/server/schema.ts","../../../../src/common/config/server/engine.ts","../../../../src/common/config/server/service.ts","../../../../src/common/config/server/templates.ts","../../../../src/common/config/server/factory.ts","../../../../src/common/config/server/database-config.ts"],"names":["ConfigCategory","pgTable","text","jsonb","timestamp","sql","uniqueIndex","boolean","integer","index","eq","crypto","defaultLogger"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 配置系统类型定义\n * ConfigEngine V2 - 数据驱动的配置管理\n */\n\n// ==================== 基础类型 ====================\n\nexport type ConfigType = 'string' | 'number' | 'boolean' | 'json' | 'enum' | 'url' | 'email';\n\nexport type UiComponentType =\n | 'input'\n | 'textarea'\n | 'select'\n | 'switch'\n | 'slider'\n | 'color-picker';\n\nexport type ConfigStatus = 'active' | 'deprecated' | 'disabled';\n\nexport type ChangeType = 'create' | 'update' | 'delete';\n\n// ==================== 配置定义 ====================\n\n/**\n * 验证规则\n */\nexport interface ValidationRules {\n /** 最小值(数字) */\n min?: number;\n /** 最大值(数字) */\n max?: number;\n /** 最小长度(字符串) */\n minLength?: number;\n /** 最大长度(字符串) */\n maxLength?: number;\n /** 正则表达式 */\n pattern?: string;\n /** 是否为邮箱 */\n email?: boolean;\n /** 是否为 URL */\n url?: boolean;\n /** 自定义验证函数名 */\n custom?: string;\n}\n\n/**\n * UI 组件属性\n */\nexport interface UiProps {\n /** 占位符 */\n placeholder?: string;\n /** 帮助文本 */\n helpText?: string;\n /** 前缀 */\n prefix?: string;\n /** 后缀 */\n suffix?: string;\n /** 步长(数字输入) */\n step?: number;\n /** 行数(文本域) */\n rows?: number;\n /** 是否禁用 */\n disabled?: boolean;\n /** 最大值(滑块) */\n max?: number;\n /** 最小值(滑块) */\n min?: number;\n}\n\n/**\n * 枚举选项\n */\nexport interface EnumOption {\n /** 显示标签 */\n label: string;\n /** 实际值 */\n value: any;\n /** 描述 */\n description?: string;\n /** 图标 */\n icon?: string;\n}\n\n/**\n * 配置定义(完整)\n */\nexport interface ConfigDefinition {\n // 基本信息\n id?: number;\n key: string;\n category: string;\n name: string;\n description?: string;\n\n // 类型和验证\n type: ConfigType;\n validationRules?: ValidationRules;\n\n // UI 配置\n uiComponent?: UiComponentType;\n uiProps?: UiProps;\n\n // 安全和权限\n isSensitive?: boolean;\n isRequired?: boolean;\n isReadonly?: boolean;\n requiredPermission?: string;\n\n // 默认值和选项\n defaultValue?: any;\n enumOptions?: EnumOption[];\n\n // 依赖和条件\n dependsOn?: string[];\n showIf?: Record<string, any>;\n\n // 分组和排序\n groupName?: string;\n sortOrder?: number;\n\n // 版本和状态\n version?: number;\n status?: ConfigStatus;\n\n // 标签\n tags?: string[];\n\n // 元数据\n createdAt?: Date | string;\n updatedAt?: Date | string;\n createdBy?: number;\n}\n\n/**\n * 配置定义(用于创建)\n */\nexport type ConfigDefinitionCreate = Omit<ConfigDefinition, 'id' | 'createdAt' | 'updatedAt'>;\n\n/**\n * 配置定义(用于更新)\n */\nexport type ConfigDefinitionUpdate = Partial<ConfigDefinitionCreate>;\n\n/**\n * 配置定义(带值)\n */\nexport interface ConfigDefinitionWithValue extends ConfigDefinition {\n value: any;\n displayValue?: any; // 用于敏感信息掩码\n}\n\n// ==================== 配置值 ====================\n\n/**\n * 配置值\n */\nexport interface ConfigValue {\n key: string;\n value: any;\n}\n\n// ==================== 配置历史 ====================\n\n/**\n * 配置变更历史\n */\nexport interface ConfigHistoryRecord {\n id?: number;\n configKey: string;\n oldValue?: string;\n newValue?: string;\n changeType: ChangeType;\n changedBy?: number;\n changedAt?: Date | string;\n reason?: string;\n ipAddress?: string;\n userAgent?: string;\n}\n\n/**\n * 配置历史(用于创建)\n */\nexport type ConfigHistoryCreate = Omit<ConfigHistoryRecord, 'id' | 'changedAt'>;\n\n// ==================== 验证结果 ====================\n\n/**\n * 验证结果\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\n// ==================== API 响应 ====================\n\n/**\n * API 成功响应\n */\nexport interface ApiSuccessResponse<T = any> {\n success: true;\n data: T;\n message?: string;\n}\n\n/**\n * API 错误响应\n */\nexport interface ApiErrorResponse {\n success: false;\n error: string;\n details?: any;\n}\n\n/**\n * API 响应(联合类型)\n */\nexport type ApiResponse<T = any> = ApiSuccessResponse<T> | ApiErrorResponse;\n\n// ==================== 配置分组 ====================\n\n/**\n * 配置分组(UI 展示用)\n */\nexport interface ConfigGroup {\n groupName: string;\n definitions: ConfigDefinitionWithValue[];\n}\n\n/**\n * 分类配置(UI 展示用)\n */\nexport interface CategoryConfigs {\n category: string;\n groups: ConfigGroup[];\n}\n\n// ==================== 批量操作 ====================\n\n/**\n * 批量注册配置定义\n */\nexport interface BatchRegisterRequest {\n definitions: ConfigDefinitionCreate[];\n}\n\n/**\n * 批量更新配置值\n */\nexport interface BatchUpdateValuesRequest {\n values: Array<{\n key: string;\n value: any;\n }>;\n}\n\n// ==================== 配置元数据 ====================\n\n/**\n * 配置元数据缓存\n */\nexport interface ConfigMetadataCache {\n category: string;\n type: ConfigType;\n isSensitive: boolean;\n isRequired: boolean;\n defaultDescription?: string;\n}\n\n// ==================== 配置分类和模板 ====================\n\n/**\n * 配置分类枚举\n */\nexport enum ConfigCategory {\n DATABASE = 'database',\n STORAGE = 'storage',\n AI_SERVICE = 'ai_service',\n EMAIL = 'email',\n SECURITY = 'security',\n SYSTEM = 'system',\n MOBILE = 'mobile',\n WECHAT = 'wechat',\n}\n\n/**\n * 配置项(用于模板)\n */\nexport interface ConfigItem {\n key: string;\n value: any;\n category: ConfigCategory;\n type: ConfigType;\n isRequired: boolean;\n isSensitive: boolean;\n description?: string;\n defaultValue?: any;\n group?: string; // 配置分组\n isGroupTemplate?: boolean; // 是否为组模板(可多次实例化)\n groupFields?: string[]; // 组内字段列表(用于多实例配置)\n}\n\n","/**\n * 配置管理模块 - Drizzle ORM Schema\n *\n * 包含4个核心表:\n * 1. system_configs - 系统配置值表\n * 2. config_metadata - 配置元数据表\n * 3. config_definitions - 配置定义表(ConfigEngine核心)\n * 4. config_history - 配置变更历史表\n */\n\nimport {\n pgTable,\n text,\n jsonb,\n timestamp,\n boolean,\n integer,\n uniqueIndex,\n index,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\n/**\n * 系统配置值表\n * 存储实际的配置键值对\n */\nexport const systemConfigs = pgTable(\n 'system_configs',\n {\n id: text().primaryKey().notNull(),\n key: text().notNull(),\n value: jsonb().notNull(),\n description: text(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n },\n (table) => [\n uniqueIndex('system_configs_key_key').using(\n 'btree',\n table.key.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 配置元数据表\n * 存储配置的类型、类别和验证规则等元数据\n */\nexport const configMetadata = pgTable('config_metadata', {\n key: text().primaryKey().notNull(),\n category: text().notNull(),\n type: text().default('string').notNull(),\n isSensitive: boolean().default(false).notNull(),\n isRequired: boolean().default(false).notNull(),\n defaultDescription: text(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n});\n\n/**\n * 配置定义表(ConfigEngine 核心)\n * 数据驱动的配置管理系统核心表\n */\nexport const configDefinitions = pgTable(\n 'config_definitions',\n {\n id: integer().primaryKey().generatedAlwaysAsIdentity(),\n key: text().notNull(),\n category: text().notNull(),\n name: text().notNull(),\n description: text(),\n\n // 类型和验证\n type: text().notNull(), // string, number, boolean, json, enum, url, email\n validationRules: jsonb(), // 验证规则 JSON\n\n // UI 配置\n uiComponent: text().default('input'), // input, textarea, select, switch, slider\n uiProps: jsonb(), // UI 组件属性\n\n // 安全和权限\n isSensitive: boolean().default(false).notNull(),\n isRequired: boolean().default(false).notNull(),\n isReadonly: boolean().default(false).notNull(),\n requiredPermission: text(),\n\n // 默认值和选项\n defaultValue: text(),\n enumOptions: jsonb(), // 枚举选项\n\n // 依赖和条件\n dependsOn: text().array(), // 依赖的配置项\n showIf: jsonb(), // 显示条件\n\n // 分组和排序\n groupName: text(),\n sortOrder: integer().default(0).notNull(),\n\n // 版本和状态\n version: integer().default(1).notNull(),\n status: text().default('active').notNull(), // active, deprecated, disabled\n\n // 标签\n tags: text().array(),\n\n // 元数据\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n createdBy: integer(),\n },\n (table) => [\n uniqueIndex('config_definitions_key_key').using(\n 'btree',\n table.key.asc().nullsLast().op('text_ops')\n ),\n index('config_definitions_category_idx').using(\n 'btree',\n table.category.asc().nullsLast().op('text_ops')\n ),\n index('config_definitions_status_idx').using(\n 'btree',\n table.status.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 配置变更历史表\n * 记录所有配置的变更历史,用于审计和回滚\n */\nexport const configHistory = pgTable(\n 'config_history',\n {\n id: integer().primaryKey().generatedAlwaysAsIdentity(),\n configKey: text().notNull(),\n oldValue: text(),\n newValue: text(),\n changeType: text().notNull(), // create, update, delete\n changedBy: integer(),\n changedAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n reason: text(),\n ipAddress: text(),\n userAgent: text(),\n },\n (table) => [\n index('config_history_key_idx').using(\n 'btree',\n table.configKey.asc().nullsLast().op('text_ops')\n ),\n index('config_history_date_idx').using(\n 'btree',\n table.changedAt.asc().nullsLast().op('timestamp_ops')\n ),\n ]\n);\n\n","/**\n * ConfigEngine V2 - 数据驱动的配置管理引擎\n *\n * 核心功能:\n * 1. 从数据库加载配置定义\n * 2. 配置值的验证和管理\n * 3. 配置变更历史记录\n * 4. 敏感信息加密/解密\n *\n * 使用方法:\n * ```typescript\n * import { ConfigEngine } from 'sa2kit/config/server';\n *\n * const engine = new ConfigEngine(db);\n * await engine.initialize();\n *\n * // 获取配置值\n * const value = await engine.getValue('config_key');\n *\n * // 设置配置值\n * await engine.setValue('config_key', 'new_value', userId);\n * ```\n */\n\nimport * as crypto from 'crypto';\nimport { eq } from 'drizzle-orm';\nimport type {\n ConfigDefinition,\n ConfigDefinitionCreate,\n ConfigDefinitionWithValue,\n ValidationResult,\n ValidationRules,\n ConfigHistoryCreate,\n ConfigType,\n} from './types';\n\n// 数据库表类型 - 需要从外部传入或注入\ninterface SystemConfig {\n id: string;\n key: string;\n value: any;\n description?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface ConfigDefinitionRow {\n id: number;\n key: string;\n category: string;\n name: string;\n description?: string | null;\n type: string;\n validationRules?: any;\n uiComponent?: string | null;\n uiProps?: any;\n isSensitive: boolean;\n isRequired: boolean;\n isReadonly: boolean;\n requiredPermission?: string | null;\n defaultValue?: string | null;\n enumOptions?: any;\n dependsOn?: string[] | null;\n showIf?: any;\n groupName?: string | null;\n sortOrder: number;\n version: number;\n status: string;\n tags?: string[] | null;\n createdAt: string;\n updatedAt: string;\n createdBy?: number | null;\n}\n\n/**\n * 数据库接口(使用Drizzle ORM)\n * 使用 any 类型以避免复杂的类型推导\n */\nexport type DatabaseClient = any;\n\n/**\n * 数据库表定义\n */\nexport interface DatabaseTables {\n systemConfigs: any;\n configDefinitions?: any;\n configMetadata?: any;\n configHistory: any;\n}\n\n/**\n * 日志接口\n */\nexport interface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\n/**\n * ConfigEngine 配置选项\n */\nexport interface ConfigEngineOptions {\n /** 数据库客户端 */\n db: DatabaseClient;\n /** 数据库表定义 */\n tables: DatabaseTables;\n /** 加密密钥 */\n encryptionKey?: string;\n /** 日志记录器 */\n logger?: Logger;\n}\n\n/**\n * 默认日志记录器\n */\nconst defaultLogger: Logger = {\n info: (message: string, ...args: any[]) => console.log('[ConfigEngine] ' + (message), ...args),\n warn: (message: string, ...args: any[]) => console.warn('[ConfigEngine] ' + (message), ...args),\n error: (message: string, ...args: any[]) => console.error('[ConfigEngine] ' + (message), ...args),\n};\n\n/**\n * 配置引擎类\n */\nexport class ConfigEngine {\n private definitionsCache = new Map<string, ConfigDefinition>();\n private encryptionKey: string;\n private initialized = false;\n private db: DatabaseClient;\n private tables: DatabaseTables;\n private logger: Logger;\n\n constructor(options: ConfigEngineOptions) {\n this.db = options.db;\n this.tables = options.tables;\n this.logger = options.logger || defaultLogger;\n\n // 使用环境变量作为加密密钥\n this.encryptionKey = options.encryptionKey || process.env.CONFIG_ENCRYPTION_KEY || 'default-config-key-2024';\n\n if (this.encryptionKey === 'default-config-key-2024') {\n this.logger.warn('⚠️ 使用默认加密密钥,生产环境请设置 CONFIG_ENCRYPTION_KEY 环境变量');\n }\n }\n\n /**\n * 初始化配置引擎\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n try {\n await this.loadDefinitions();\n this.initialized = true;\n this.logger.info('✅ ConfigEngine 初始化成功');\n } catch (error) {\n this.logger.error('❌ ConfigEngine 初始化失败:', error);\n throw error;\n }\n }\n\n /**\n * 从数据库加载所有配置定义到缓存\n */\n async loadDefinitions(): Promise<void> {\n try {\n const definitions = await this.db\n .select()\n .from(this.tables.configDefinitions)\n .where(eq(this.tables.configDefinitions.status, 'active'));\n\n this.definitionsCache.clear();\n\n (definitions as ConfigDefinitionRow[]).forEach((def) => {\n const definition: ConfigDefinition = {\n id: def.id,\n key: def.key,\n category: def.category,\n name: def.name,\n description: def.description || undefined,\n type: def.type as ConfigType,\n validationRules: def.validationRules\n ? JSON.parse(JSON.stringify(def.validationRules))\n : undefined,\n uiComponent: def.uiComponent as any,\n uiProps: def.uiProps ? JSON.parse(JSON.stringify(def.uiProps)) : undefined,\n isSensitive: def.isSensitive,\n isRequired: def.isRequired,\n isReadonly: def.isReadonly,\n requiredPermission: def.requiredPermission || undefined,\n defaultValue: def.defaultValue || undefined,\n enumOptions: def.enumOptions ? JSON.parse(JSON.stringify(def.enumOptions)) : undefined,\n dependsOn: def.dependsOn || undefined,\n showIf: def.showIf ? JSON.parse(JSON.stringify(def.showIf)) : undefined,\n groupName: def.groupName || undefined,\n sortOrder: def.sortOrder,\n version: def.version,\n status: def.status as any,\n tags: def.tags || undefined,\n createdAt: def.createdAt,\n updatedAt: def.updatedAt,\n createdBy: def.createdBy || undefined,\n };\n\n this.definitionsCache.set(def.key, definition);\n });\n\n this.logger.info('✅ 已加载 ' + (definitions.length) + ' 个配置定义');\n } catch (error) {\n this.logger.error('❌ 加载配置定义失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取单个配置定义\n */\n getDefinition(key: string): ConfigDefinition | undefined {\n return this.definitionsCache.get(key);\n }\n\n /**\n * 获取所有配置定义\n */\n getAllDefinitions(): ConfigDefinition[] {\n return Array.from(this.definitionsCache.values());\n }\n\n /**\n * 获取指定分类的配置定义\n */\n getDefinitionsByCategory(category: string): ConfigDefinition[] {\n return this.getAllDefinitions()\n .filter((def) => def.category === category)\n .sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0));\n }\n\n /**\n * 验证配置值\n */\n async validate(key: string, value: any): Promise<ValidationResult> {\n const definition = this.getDefinition(key);\n\n if (!definition) {\n return {\n valid: false,\n errors: ['配置定义不存在'],\n };\n }\n\n const errors: string[] = [];\n\n // 必填验证\n if (definition.isRequired && (value === null || value === undefined || value === '')) {\n errors.push('此配置项为必填');\n return { valid: false, errors };\n }\n\n // 空值跳过后续验证\n if (value === null || value === undefined || value === '') {\n return { valid: true, errors: [] };\n }\n\n // 类型验证\n const typeError = this.validateType(value, definition.type);\n if (typeError) {\n errors.push(typeError);\n }\n\n // 规则验证\n if (definition.validationRules && typeError === null) {\n const ruleErrors = this.validateRules(value, definition.validationRules);\n errors.push(...ruleErrors);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * 获取配置的完整数据(定义 + 值)\n */\n async getConfigsWithValues(category?: string): Promise<ConfigDefinitionWithValue[]> {\n // 确保已初始化\n if (!this.initialized) {\n await this.initialize();\n }\n\n // 获取定义\n const definitions = category\n ? this.getDefinitionsByCategory(category)\n : this.getAllDefinitions();\n\n // 获取所有配置值\n const configValues = await this.db.select().from(this.tables.systemConfigs);\n const valueMap = new Map((configValues as SystemConfig[]).map((v) => [v.key, v.value]));\n\n // 合并定义和值\n const result: ConfigDefinitionWithValue[] = definitions.map((def) => {\n let value = valueMap.get(def.key) ?? def.defaultValue;\n let displayValue = value;\n\n // 解密敏感配置\n if (def.isSensitive && value && typeof value === 'string') {\n try {\n value = this.decrypt(value);\n // 掩码显示\n displayValue = this.maskValue(value);\n } catch (error) {\n this.logger.warn('解密配置 ' + (def.key) + ' 失败:', error);\n }\n }\n\n return {\n ...def,\n value,\n displayValue,\n };\n });\n\n return result;\n }\n\n /**\n * 获取单个配置值\n */\n async getValue(key: string): Promise<any> {\n const definition = this.getDefinition(key);\n if (!definition) {\n return undefined;\n }\n\n const configs = await this.db\n .select()\n .from(this.tables.systemConfigs)\n .where(eq(this.tables.systemConfigs.key, key))\n .limit(1);\n\n if (configs.length === 0) {\n return definition.defaultValue;\n }\n\n let value = (configs[0] as SystemConfig).value;\n\n // 解密敏感配置\n if (definition.isSensitive && value && typeof value === 'string') {\n try {\n value = this.decrypt(value);\n } catch (error) {\n this.logger.warn('解密配置 ' + (key) + ' 失败:', error);\n }\n }\n\n return value;\n }\n\n /**\n * 设置配置值\n */\n async setValue(\n key: string,\n value: any,\n userId: number = 0,\n options?: {\n reason?: string;\n ipAddress?: string;\n userAgent?: string;\n }\n ): Promise<void> {\n // 验证配置值\n const validation = await this.validate(key, value);\n if (!validation.valid) {\n throw new Error('配置验证失败: ' + (validation.errors.join(', ')));\n }\n\n const definition = this.getDefinition(key);\n if (!definition) {\n throw new Error('配置定义不存在');\n }\n\n // 获取旧值(用于历史记录)\n const oldConfigs = await this.db\n .select()\n .from(this.tables.systemConfigs)\n .where(eq(this.tables.systemConfigs.key, key))\n .limit(1);\n\n const oldValue = oldConfigs.length > 0 ? (oldConfigs[0] as SystemConfig).value : undefined;\n\n // 加密敏感配置\n let finalValue = value;\n if (definition.isSensitive && value) {\n finalValue = this.encrypt(String(value));\n }\n\n // 保存配置值\n if (oldConfigs.length > 0) {\n await this.db\n .update(this.tables.systemConfigs)\n .set({\n value: finalValue,\n updatedAt: new Date().toISOString(),\n })\n .where(eq(this.tables.systemConfigs.key, key));\n } else {\n // 生成 ID\n const id = crypto.randomUUID();\n await this.db.insert(this.tables.systemConfigs).values({\n id,\n key,\n value: finalValue,\n description: definition.description,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n });\n }\n\n // 记录历史\n await this.recordHistory({\n configKey: key,\n oldValue: oldValue ? JSON.stringify(oldValue) : undefined,\n newValue: JSON.stringify(value),\n changeType: oldValue ? 'update' : 'create',\n changedBy: userId,\n reason: options?.reason,\n ipAddress: options?.ipAddress,\n userAgent: options?.userAgent,\n });\n\n this.logger.info('✅ 配置已' + (oldValue ? '更新' : '创建') + ': ' + (key));\n }\n\n /**\n * 批量设置配置值\n */\n async setValues(\n values: Array<{ key: string; value: any }>,\n userId: number = 0,\n options?: {\n reason?: string;\n ipAddress?: string;\n userAgent?: string;\n }\n ): Promise<void> {\n for (const item of values) {\n await this.setValue(item.key, item.value, userId, options);\n }\n }\n\n /**\n * 注册新配置定义\n */\n async registerDefinition(definition: ConfigDefinitionCreate, userId: number = 0): Promise<void> {\n try {\n await this.db.insert(this.tables.configDefinitions).values({\n key: definition.key,\n category: definition.category,\n name: definition.name,\n description: definition.description,\n type: definition.type,\n validationRules: definition.validationRules\n ? JSON.stringify(definition.validationRules)\n : null,\n uiComponent: definition.uiComponent || 'input',\n uiProps: definition.uiProps ? JSON.stringify(definition.uiProps) : null,\n isSensitive: definition.isSensitive || false,\n isRequired: definition.isRequired || false,\n isReadonly: definition.isReadonly || false,\n requiredPermission: definition.requiredPermission,\n defaultValue: definition.defaultValue,\n enumOptions: definition.enumOptions ? JSON.stringify(definition.enumOptions) : null,\n dependsOn: definition.dependsOn,\n showIf: definition.showIf ? JSON.stringify(definition.showIf) : null,\n groupName: definition.groupName,\n sortOrder: definition.sortOrder || 0,\n version: definition.version || 1,\n status: definition.status || 'active',\n tags: definition.tags,\n createdBy: userId,\n updatedAt: new Date().toISOString(),\n });\n\n // 重新加载定义缓存\n await this.loadDefinitions();\n\n this.logger.info('✅ 注册新配置定义: ' + (definition.key));\n } catch (error) {\n this.logger.error(`❌ 注册配置定义失败:`, error);\n throw error;\n }\n }\n\n /**\n * 批量注册配置定义\n */\n async registerDefinitions(\n definitions: ConfigDefinitionCreate[],\n userId: number = 0\n ): Promise<void> {\n for (const definition of definitions) {\n await this.registerDefinition(definition, userId);\n }\n }\n\n /**\n * 记录配置变更历史\n */\n private async recordHistory(record: ConfigHistoryCreate): Promise<void> {\n try {\n await this.db.insert(this.tables.configHistory).values({\n ...record,\n changedAt: new Date().toISOString(),\n });\n } catch (error) {\n this.logger.error('❌ 记录配置历史失败:', error);\n // 不抛出错误,避免影响主流程\n }\n }\n\n /**\n * 获取配置变更历史\n */\n async getHistory(key: string, limit: number = 50): Promise<any[]> {\n try {\n const history = await this.db\n .select()\n .from(this.tables.configHistory)\n .where(eq(this.tables.configHistory.configKey, key))\n .orderBy(this.tables.configHistory.changedAt)\n .limit(limit);\n\n return history;\n } catch (error) {\n this.logger.error('❌ 获取配置历史失败:', error);\n return [];\n }\n }\n\n // ==================== 私有辅助方法 ====================\n\n /**\n * 类型验证\n */\n private validateType(value: any, type: ConfigType): string | null {\n switch (type) {\n case 'string':\n return typeof value === 'string' ? null : '值必须是字符串';\n\n case 'number':\n return typeof value === 'number' && !isNaN(value) ? null : '值必须是数字';\n\n case 'boolean':\n return typeof value === 'boolean' ? null : '值必须是布尔值';\n\n case 'json':\n try {\n if (typeof value === 'string') {\n JSON.parse(value);\n }\n return null;\n } catch {\n return '值必须是有效的 JSON';\n }\n\n case 'url':\n try {\n new URL(value);\n return null;\n } catch {\n return '值必须是有效的 URL';\n }\n\n case 'email':\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value) ? null : '值必须是有效的邮箱地址';\n\n case 'enum':\n return null; // 枚举验证在规则验证中处理\n\n default:\n return null;\n }\n }\n\n /**\n * 规则验证\n */\n private validateRules(value: any, rules: ValidationRules): string[] {\n const errors: string[] = [];\n\n if (rules.min !== undefined && value < rules.min) {\n errors.push('值不能小于 ' + (rules.min));\n }\n\n if (rules.max !== undefined && value > rules.max) {\n errors.push('值不能大于 ' + (rules.max));\n }\n\n if (rules.minLength !== undefined && String(value).length < rules.minLength) {\n errors.push('长度不能小于 ' + (rules.minLength));\n }\n\n if (rules.maxLength !== undefined && String(value).length > rules.maxLength) {\n errors.push('长度不能大于 ' + (rules.maxLength));\n }\n\n if (rules.pattern && !new RegExp(rules.pattern).test(String(value))) {\n errors.push('值不符合要求的格式');\n }\n\n return errors;\n }\n\n /**\n * 加密\n */\n private encrypt(value: string): string {\n const algorithm = 'aes-256-cbc';\n const key = crypto.scryptSync(this.encryptionKey, 'salt', 32);\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(algorithm, key, iv);\n let encrypted = cipher.update(value, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n return iv.toString('hex') + ':' + encrypted;\n }\n\n /**\n * 解密\n */\n private decrypt(encrypted: string): string {\n const algorithm = 'aes-256-cbc';\n const key = crypto.scryptSync(this.encryptionKey, 'salt', 32);\n const parts = encrypted.split(':');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new Error('无效的加密数据格式');\n }\n const [ivHex, encryptedData] = parts;\n const iv = Buffer.from(ivHex, 'hex');\n const decipher = crypto.createDecipheriv(algorithm, key, iv);\n let decrypted = decipher.update(encryptedData, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n return decrypted;\n }\n\n /**\n * 掩码显示敏感值\n */\n private maskValue(value: string): string {\n if (!value) return '';\n const len = value.length;\n if (len <= 8) {\n return '*'.repeat(len);\n }\n return value.substring(0, 4) + '*'.repeat(len - 8) + value.substring(len - 4);\n }\n}\n\n","/**\n * ConfigService - 简化的配置管理服务\n *\n * 提供更简单的API来管理配置,封装ConfigEngine的复杂性\n *\n * 使用方法:\n * ```typescript\n * import { ConfigService } from 'sa2kit/config/server';\n * import { ConfigCategory, ConfigType } from 'sa2kit/config/server';\n *\n * const service = new ConfigService({ db, tables });\n *\n * // 获取配置\n * const apiKey = await service.getConfig('api_key', 'default-key');\n *\n * // 设置配置\n * await service.setConfig('api_key', 'new-key');\n *\n * // 获取分类下的所有配置\n * const storageConfigs = await service.getConfigsByCategory(ConfigCategory.STORAGE);\n * ```\n */\n\nimport crypto from 'crypto';\nimport { eq } from 'drizzle-orm';\nimport { ConfigEngine, type DatabaseClient, type DatabaseTables, type Logger } from './engine';\nimport { ConfigCategory, type ConfigType, type ConfigItem } from './types';\n\n/**\n * 配置模板(用于初始化默认配置)\n */\nexport type ConfigTemplates = Record<string, ConfigItem[]>;\n\n/**\n * ConfigService 配置选项\n */\nexport interface ConfigServiceOptions {\n /** 数据库客户端 */\n db: DatabaseClient;\n /** 数据库表定义 */\n tables: DatabaseTables;\n /** 加密密钥 */\n encryptionKey?: string;\n /** 日志记录器 */\n logger?: Logger;\n /** 配置模板 */\n templates?: ConfigTemplates;\n}\n\n/**\n * 默认日志记录器\n */\nconst defaultLogger: Logger = {\n info: (message: string, ...args: any[]) => console.log('[ConfigService] ' + (message), ...args),\n warn: (message: string, ...args: any[]) => console.warn('[ConfigService] ' + (message), ...args),\n error: (message: string, ...args: any[]) => console.error('[ConfigService] ' + (message), ...args),\n};\n\n/**\n * 配置管理服务类\n */\nexport class ConfigService {\n private configCache: Map<string, any> = new Map();\n private metadataCache: Map<\n string,\n {\n category: string;\n type: ConfigType;\n isSensitive: boolean;\n isRequired: boolean;\n defaultDescription?: string;\n }\n > = new Map();\n private encryptionKey: string;\n private db: DatabaseClient;\n private tables: DatabaseTables;\n private logger: Logger;\n private templates: ConfigTemplates;\n\n constructor(options: ConfigServiceOptions) {\n this.db = options.db;\n this.tables = options.tables;\n this.logger = options.logger || defaultLogger;\n this.templates = options.templates || {};\n\n // 使用环境变量或默认密钥作为加密密钥\n this.encryptionKey = options.encryptionKey || process.env.CONFIG_ENCRYPTION_KEY || 'default-config-key-2024';\n\n // 初始化时加载配置和元数据\n this.loadConfigsFromDatabase();\n this.loadMetadataFromDatabase();\n }\n\n // 从数据库加载元数据\n private async loadMetadataFromDatabase() {\n if (!this.tables.configMetadata) {\n this.logger.info('配置元数据表未提供,跳过元数据加载');\n return;\n }\n\n try {\n const metadata = await this.db.select().from(this.tables.configMetadata);\n metadata.forEach((meta: any) => {\n this.metadataCache.set(meta.key, {\n category: meta.category,\n type: meta.type as ConfigType,\n isSensitive: meta.isSensitive,\n isRequired: meta.isRequired,\n defaultDescription: meta.defaultDescription || undefined,\n });\n });\n this.logger.info('已加载 ' + (metadata.length) + ' 条配置元数据');\n } catch (error) {\n // 如果表不存在,使用模板作为后备\n this.logger.warn(\n '配置元数据表不存在,使用模板数据',\n error instanceof Error ? error.message : String(error)\n );\n // 不抛出错误,继续使用模板\n }\n }\n\n // 从数据库加载配置到缓存\n private async loadConfigsFromDatabase(): Promise<void> {\n try {\n const configs = await this.db.select().from(this.tables.systemConfigs);\n\n configs.forEach((config: any) => {\n let value = config.value;\n\n // 如果是敏感配置,解密\n if (this.isSensitiveConfig(config.key)) {\n try {\n value = this.decrypt(config.value as string);\n this.logger.info('✅ 成功解密配置: ' + (config.key));\n } catch (error) {\n this.logger.error('❌ 解密配置失败: ' + (config.key), error);\n // 跳过该配置,不加入缓存\n return;\n }\n }\n\n this.configCache.set(config.key, value);\n });\n\n this.logger.info('已加载 ' + (configs.length) + ' 个配置项');\n } catch (error) {\n this.logger.error('加载配置失败', error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n // 获取配置值\n public async getConfig(key: string, defaultValue?: any): Promise<any> {\n if (!key) {\n return defaultValue;\n }\n\n // 优先从环境变量获取\n const envValue = process.env[key.toUpperCase()];\n if (envValue !== undefined) {\n return this.parseValue(envValue, this.getConfigType(key));\n }\n\n // 从缓存获取\n if (this.configCache.has(key)) {\n return this.configCache.get(key);\n }\n\n // 从数据库获取\n try {\n const [config] = await this.db\n .select()\n .from(this.tables.systemConfigs)\n .where(eq(this.tables.systemConfigs.key, key))\n .limit(1);\n\n if (config) {\n let value = config.value;\n\n if (this.isSensitiveConfig(key)) {\n try {\n value = this.decrypt(config.value as string);\n this.logger.info('✅ 成功解密配置: ' + (key) + ', 长度: ' + (value?.length));\n } catch (error) {\n this.logger.error('❌ 解密配置失败: ' + (key), error);\n throw new Error('配置 ' + (key) + ' 解密失败');\n }\n }\n\n this.configCache.set(key, value);\n return value;\n }\n } catch (error) {\n this.logger.error(\n '获取配置 ' + (key) + ' 失败',\n error instanceof Error ? error : new Error(String(error))\n );\n }\n\n return defaultValue;\n }\n\n // 设置配置值\n public async setConfig(key: string, value: any, description?: string): Promise<void> {\n try {\n const category = this.getConfigCategory(key);\n const type = this.getConfigType(key);\n const isSensitive = this.isSensitiveConfig(key);\n\n // 验证配置值\n const validatedValue = this.validateValue(value, type);\n\n // 敏感配置需要加密\n const storageValue = isSensitive ? this.encrypt(validatedValue) : validatedValue;\n\n // 保存到数据库\n const existing = await this.db\n .select()\n .from(this.tables.systemConfigs)\n .where(eq(this.tables.systemConfigs.key, key))\n .limit(1);\n\n if (existing.length > 0) {\n await this.db\n .update(this.tables.systemConfigs)\n .set({\n value: storageValue,\n description: description || this.getConfigDescription(key),\n updatedAt: new Date().toISOString(),\n })\n .where(eq(this.tables.systemConfigs.key, key));\n } else {\n await this.db.insert(this.tables.systemConfigs).values({\n id: crypto.randomBytes(16).toString('hex'),\n key,\n value: storageValue,\n description: description || this.getConfigDescription(key),\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n });\n }\n\n // 更新缓存\n this.configCache.set(key, validatedValue);\n\n this.logger.info('配置 ' + (key) + ' 已更新');\n } catch (error) {\n this.logger.error(\n '设置配置 ' + (key) + ' 失败',\n error instanceof Error ? error : new Error(String(error))\n );\n throw error;\n }\n }\n\n // 获取分类下的所有配置\n public async getConfigsByCategory(category: ConfigCategory): Promise<Record<string, any>> {\n const configs: Record<string, any> = {};\n const template = this.templates[category] || [];\n\n for (const item of template) {\n configs[item.key] = await this.getConfig(item.key, item.defaultValue);\n }\n\n return configs;\n }\n\n // 批量设置配置\n public async setConfigs(configs: Record<string, any>): Promise<void> {\n for (const [key, value] of Object.entries(configs)) {\n await this.setConfig(key, value);\n }\n }\n\n // 删除配置\n public async deleteConfig(key: string): Promise<void> {\n try {\n await this.db.delete(this.tables.systemConfigs).where(eq(this.tables.systemConfigs.key, key));\n\n this.configCache.delete(key);\n this.logger.info('配置 ' + (key) + ' 已删除');\n } catch (error) {\n this.logger.error(\n '删除配置 ' + (key) + ' 失败',\n error instanceof Error ? error : new Error(String(error))\n );\n throw error;\n }\n }\n\n // 获取所有配置(用于管理界面)\n public async getAllConfigs(): Promise<Record<string, any>> {\n const allConfigs: Record<string, any> = {};\n\n // 先获取数据库中所有实际存在的配置\n const dbConfigs = await this.db.select().from(this.tables.systemConfigs);\n const dbConfigKeys = new Set(dbConfigs.map((c: any) => c.key));\n\n for (const [category, items] of Object.entries(this.templates)) {\n allConfigs[category] = {};\n\n for (const item of items) {\n // 只显示数据库中实际存在的配置\n if (dbConfigKeys.has(item.key)) {\n const value = await this.getConfig(item.key, item.defaultValue);\n allConfigs[category][item.key] = {\n ...item,\n value: item.isSensitive ? '' : value, // 敏感信息隐藏\n isStored: true, // 标记为已存储\n };\n }\n }\n }\n\n return allConfigs;\n }\n\n // 刷新配置缓存\n public async refreshCache(): Promise<void> {\n this.configCache.clear();\n await this.loadConfigsFromDatabase();\n }\n\n // 配置验证\n public validateConfig(key: string, value: any): boolean {\n const type = this.getConfigType(key);\n const isRequired = this.isRequiredConfig(key);\n\n if (isRequired && (value === undefined || value === null || value === '')) {\n throw new Error('配置 ' + (key) + ' 是必需的');\n }\n\n try {\n this.validateValue(value, type);\n return true;\n } catch (error: any) {\n throw new Error('配置 ' + (key) + ' 值无效: ' + (error.message));\n }\n }\n\n // 私有方法:加密\n private encrypt(text: string): string {\n const algorithm = 'aes-256-cbc';\n const key = crypto.scryptSync(this.encryptionKey, 'salt', 32);\n const iv = crypto.randomBytes(16);\n\n const cipher = crypto.createCipheriv(algorithm, key, iv);\n let encrypted = cipher.update(text, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n return iv.toString('hex') + ':' + encrypted;\n }\n\n // 私有方法:解密\n private decrypt(encryptedText: string): string {\n const algorithm = 'aes-256-cbc';\n const key = crypto.scryptSync(this.encryptionKey, 'salt', 32);\n\n const parts = encryptedText.split(':');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new Error('无效的加密数据格式');\n }\n\n const iv = Buffer.from(parts[0], 'hex');\n const encrypted = parts[1];\n\n const decipher = crypto.createDecipheriv(algorithm, key, iv);\n let decrypted = decipher.update(encrypted, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n\n return decrypted;\n }\n\n // 私有方法:解析值类型\n private parseValue(value: string, type: ConfigType): any {\n switch (type) {\n case 'number':\n return parseInt(value);\n case 'boolean':\n return value.toLowerCase() === 'true';\n case 'json':\n return JSON.parse(value);\n default:\n return value;\n }\n }\n\n // 私有方法:验证值\n private validateValue(value: any, type: ConfigType): any {\n switch (type) {\n case 'string':\n return String(value);\n case 'number':\n const num = Number(value);\n if (isNaN(num)) throw new Error('值必须是数字');\n return num;\n case 'boolean':\n return Boolean(value);\n case 'json':\n if (typeof value === 'string') {\n return JSON.parse(value);\n }\n return value;\n default:\n return value;\n }\n }\n\n // 私有方法:获取配置类型\n private getConfigType(key: string): ConfigType {\n const metadata = this.metadataCache.get(key);\n return metadata?.type || 'string';\n }\n\n // 私有方法:获取配置分类\n private getConfigCategory(key: string): ConfigCategory {\n const metadata = this.metadataCache.get(key);\n return (metadata?.category as ConfigCategory) || ConfigCategory.SYSTEM;\n }\n\n // 私有方法:检查是否为敏感配置\n private isSensitiveConfig(key: string): boolean {\n const metadata = this.metadataCache.get(key);\n return metadata?.isSensitive || false;\n }\n\n // 私有方法:检查是否为必需配置\n private isRequiredConfig(key: string): boolean {\n const metadata = this.metadataCache.get(key);\n return metadata?.isRequired || false;\n }\n\n // 私有方法:获取配置描述\n private getConfigDescription(key: string): string {\n const metadata = this.metadataCache.get(key);\n return metadata?.defaultDescription || '';\n }\n\n // 新增方法:创建或更新配置元数据\n public async setConfigMetadata(\n key: string,\n category: string,\n type: ConfigType = 'string',\n options: {\n isSensitive?: boolean;\n isRequired?: boolean;\n defaultDescription?: string;\n } = {}\n ): Promise<void> {\n if (!this.tables.configMetadata) {\n this.logger.warn('配置元数据表未提供,跳过元数据设置');\n return;\n }\n\n try {\n const now = new Date().toISOString();\n const existing = await this.db\n .select()\n .from(this.tables.configMetadata)\n .where(eq(this.tables.configMetadata.key, key))\n .limit(1);\n\n if (existing.length > 0) {\n await this.db\n .update(this.tables.configMetadata)\n .set({\n category,\n type,\n isSensitive: options.isSensitive ?? false,\n isRequired: options.isRequired ?? false,\n defaultDescription: options.defaultDescription,\n updatedAt: now,\n })\n .where(eq(this.tables.configMetadata.key, key));\n } else {\n await this.db.insert(this.tables.configMetadata).values({\n key,\n category,\n type,\n isSensitive: options.isSensitive ?? false,\n isRequired: options.isRequired ?? false,\n defaultDescription: options.defaultDescription,\n createdAt: now,\n updatedAt: now,\n });\n }\n\n // 更新缓存\n this.metadataCache.set(key, {\n category,\n type,\n isSensitive: options.isSensitive ?? false,\n isRequired: options.isRequired ?? false,\n defaultDescription: options.defaultDescription,\n });\n\n this.logger.info('配置元数据 ' + (key) + ' 已更新');\n } catch (error) {\n this.logger.error(\n '设置配置元数据 ' + (key) + ' 失败',\n error instanceof Error ? error : new Error(String(error))\n );\n throw error;\n }\n }\n}\n\n/**\n * 创建ConfigService实例的工厂函数\n */\nexport function createConfigService(options: ConfigServiceOptions): ConfigService {\n return new ConfigService(options);\n}\n\n","/**\n * 配置模板\n *\n * 提供常用的配置项模板,可用于初始化默认配置\n */\n\nimport { ConfigCategory, type ConfigType, type ConfigItem } from './types';\n\n/**\n * 配置模板类型\n */\nexport type ConfigTemplates = Record<string, ConfigItem[]>;\n\n/**\n * 默认配置模板\n *\n * 包含常见的配置项,可作为参考或直接使用\n */\nexport const DEFAULT_CONFIG_TEMPLATES: ConfigTemplates = {\n // 数据库相关的业务配置(非连接配置)\n [ConfigCategory.DATABASE]: [\n {\n key: 'database_pool_size',\n value: 10,\n category: ConfigCategory.DATABASE,\n type: 'number',\n isRequired: false,\n isSensitive: false,\n description: '数据库连接池大小',\n defaultValue: 10,\n group: '连接池配置',\n },\n {\n key: 'database_query_timeout',\n value: 30000,\n category: ConfigCategory.DATABASE,\n type: 'number',\n isRequired: false,\n isSensitive: false,\n description: '数据库查询超时时间(毫秒)',\n defaultValue: 30000,\n group: '连接池配置',\n },\n {\n key: 'enable_query_logging',\n value: false,\n category: ConfigCategory.DATABASE,\n type: 'boolean',\n isRequired: false,\n isSensitive: false,\n description: '启用数据库查询日志',\n defaultValue: false,\n group: '连接池配置',\n },\n ],\n\n // 存储配置\n [ConfigCategory.STORAGE]: [\n {\n key: 'storage_type',\n value: 'local',\n category: ConfigCategory.STORAGE,\n type: 'string',\n isRequired: true,\n isSensitive: false,\n description: '存储类型(local/aliyun-oss/aws-s3)',\n defaultValue: 'local',\n group: '基础配置',\n },\n {\n key: 'upload_max_size',\n value: 10485760,\n category: ConfigCategory.STORAGE,\n type: 'number',\n isRequired: false,\n isSensitive: false,\n description: '最大上传文件大小(字节)',\n defaultValue: 10485760,\n group: '上传配置',\n },\n ],\n\n // 安全配置\n [ConfigCategory.SECURITY]: [\n {\n key: 'jwt_secret',\n value: '',\n category: ConfigCategory.SECURITY,\n type: 'string',\n isRequired: true,\n isSensitive: true,\n description: 'JWT签名密钥',\n },\n {\n key: 'jwt_expires_in',\n value: '7d',\n category: ConfigCategory.SECURITY,\n type: 'string',\n isRequired: true,\n isSensitive: false,\n description: 'JWT过期时间',\n defaultValue: '7d',\n },\n {\n key: 'enable_rate_limiting',\n value: true,\n category: ConfigCategory.SECURITY,\n type: 'boolean',\n isRequired: false,\n isSensitive: false,\n description: '启用API速率限制',\n defaultValue: true,\n },\n ],\n\n // 系统配置\n [ConfigCategory.SYSTEM]: [\n {\n key: 'app_name',\n value: 'My App',\n category: ConfigCategory.SYSTEM,\n type: 'string',\n isRequired: true,\n isSensitive: false,\n description: '应用名称',\n defaultValue: 'My App',\n },\n {\n key: 'maintenance_mode',\n value: false,\n category: ConfigCategory.SYSTEM,\n type: 'boolean',\n isRequired: false,\n isSensitive: false,\n description: '维护模式',\n defaultValue: false,\n },\n {\n key: 'log_level',\n value: 'info',\n category: ConfigCategory.SYSTEM,\n type: 'string',\n isRequired: false,\n isSensitive: false,\n description: '日志级别',\n defaultValue: 'info',\n },\n ],\n};\n\n/**\n * 创建自定义配置模板\n *\n * @param templates 配置模板\n * @returns 合并后的配置模板\n */\nexport function createConfigTemplates(templates: Partial<ConfigTemplates>): ConfigTemplates {\n const filteredTemplates: ConfigTemplates = { ...DEFAULT_CONFIG_TEMPLATES };\n\n Object.keys(templates).forEach((key) => {\n const value = templates[key];\n if (value !== undefined) {\n filteredTemplates[key] = value;\n }\n });\n\n return filteredTemplates;\n}\n\n","/**\n * 配置服务工厂函数\n *\n * 提供便捷的工厂函数来创建 ConfigService 和 ConfigEngine 实例\n */\n\nimport { ConfigService, type ConfigServiceOptions } from './service';\nimport { ConfigEngine, type ConfigEngineOptions } from './engine';\n\n/**\n * 创建 ConfigService 实例的工厂函数\n */\nexport function createConfigService(options: ConfigServiceOptions): ConfigService {\n return new ConfigService(options);\n}\n\n/**\n * 创建 ConfigEngine 实例的工厂函数\n */\nexport function createConfigEngine(options: ConfigEngineOptions): ConfigEngine {\n return new ConfigEngine(options);\n}\n\n/**\n * 创建全局单例的 ConfigService 工厂\n *\n * @example\n * ```typescript\n * const getConfigService = createGlobalConfigService({\n * db,\n * tables: { systemConfigs, configMetadata, configHistory }\n * });\n *\n * // 在任何地方使用\n * const service = getConfigService();\n * ```\n */\nexport function createGlobalConfigService(options: ConfigServiceOptions): () => ConfigService {\n let instance: ConfigService | null = null;\n\n return () => {\n if (!instance) {\n instance = new ConfigService(options);\n }\n return instance;\n };\n}\n\n/**\n * 创建全局单例的 ConfigEngine 工厂\n *\n * @example\n * ```typescript\n * const getConfigEngine = createGlobalConfigEngine({\n * db,\n * tables: { systemConfigs, configDefinitions, configHistory }\n * });\n *\n * // 在任何地方使用\n * const engine = getConfigEngine();\n * await engine.initialize();\n * ```\n */\nexport function createGlobalConfigEngine(options: ConfigEngineOptions): () => ConfigEngine {\n let instance: ConfigEngine | null = null;\n let isInitializing = false;\n\n return () => {\n if (!instance) {\n instance = new ConfigEngine(options);\n\n // 自动初始化(仅一次)\n if (!isInitializing) {\n isInitializing = true;\n instance.initialize().catch((error) => {\n console.error('[ConfigEngine] 初始化失败:', error);\n });\n }\n }\n return instance;\n };\n}\n\n\n\n\n\n\n\n\n","/**\n * 数据库连接配置管理\n *\n * 注意:这些配置应该从环境变量读取,不存储在数据库中\n * 因为它们是连接数据库本身所需的基础配置\n */\n\nexport interface DatabaseConnectionConfig {\n host: string;\n port: number;\n database: string;\n username: string;\n password: string;\n ssl?: boolean;\n poolSize?: number;\n queryTimeout?: number;\n}\n\nexport interface RedisConnectionConfig {\n host: string;\n port: number;\n password?: string;\n database?: number;\n keyPrefix?: string;\n}\n\n/**\n * 从环境变量解析数据库连接配置\n */\nexport function getDatabaseConfig(): DatabaseConnectionConfig {\n const databaseUrl = process.env.DATABASE_URL;\n\n if (databaseUrl) {\n // 解析 DATABASE_URL\n const url = new URL(databaseUrl);\n return {\n host: url.hostname,\n port: parseInt(url.port) || 5432,\n database: url.pathname.slice(1), // 移除开头的 /\n username: url.username,\n password: url.password,\n ssl: url.searchParams.get('sslmode') === 'require',\n poolSize: parseInt(process.env.DB_POOL_SIZE || '10'),\n queryTimeout: parseInt(process.env.DB_QUERY_TIMEOUT || '30000'),\n };\n }\n\n // 兜底:从单独的环境变量读取\n return {\n host: process.env.DB_HOST || process.env.POSTGRES_HOST || 'localhost',\n port: parseInt(process.env.DB_PORT || process.env.POSTGRES_PORT || '5432'),\n database: process.env.DB_NAME || process.env.POSTGRES_DB || 'lyricnote',\n username: process.env.DB_USER || process.env.POSTGRES_USER || 'lyricnote',\n password: process.env.DB_PASSWORD || process.env.POSTGRES_PASSWORD || '',\n ssl: process.env.DB_SSL === 'true',\n poolSize: parseInt(process.env.DB_POOL_SIZE || '10'),\n queryTimeout: parseInt(process.env.DB_QUERY_TIMEOUT || '30000'),\n };\n}\n\n/**\n * 从环境变量解析 Redis 连接配置\n */\nexport function getRedisConfig(): RedisConnectionConfig {\n const redisUrl = process.env.REDIS_URL;\n\n if (redisUrl) {\n const url = new URL(redisUrl);\n return {\n host: url.hostname,\n port: parseInt(url.port) || 6379,\n password: url.password || undefined,\n database: parseInt(url.pathname.slice(1)) || 0,\n keyPrefix: process.env.REDIS_KEY_PREFIX || 'lyricnote:',\n };\n }\n\n return {\n host: process.env.REDIS_HOST || 'localhost',\n port: parseInt(process.env.REDIS_PORT || '6379'),\n password: process.env.REDIS_PASSWORD || undefined,\n database: parseInt(process.env.REDIS_DB || '0'),\n keyPrefix: process.env.REDIS_KEY_PREFIX || 'lyricnote:',\n };\n}\n\n/**\n * 生成数据库连接 URL\n */\nexport function buildDatabaseUrl(config: DatabaseConnectionConfig): string {\n const { host, port, database, username, password, ssl } = config;\n let url = 'postgresql://' + (username) + ':' + (password) + '@' + (host) + ':' + (port) + '/' + (database);\n\n if (ssl) {\n url += '?sslmode=require';\n }\n\n return url;\n}\n\n/**\n * 生成 Redis 连接 URL\n */\nexport function buildRedisUrl(config: RedisConnectionConfig): string {\n const { host, port, password, database } = config;\n let url = `redis://`;\n\n if (password) {\n url += ':' + (password) + '@';\n }\n\n url += (host) + ':' + (port);\n\n if (database && database !== 0) {\n url += '/' + (database);\n }\n\n return url;\n}\n\n/**\n * 验证数据库连接配置\n */\nexport function validateDatabaseConfig(config: DatabaseConnectionConfig): string[] {\n const errors: string[] = [];\n\n if (!config.host) errors.push('数据库主机地址不能为空');\n if (!config.port || config.port < 1 || config.port > 65535) errors.push('数据库端口号无效');\n if (!config.database) errors.push('数据库名不能为空');\n if (!config.username) errors.push('数据库用户名不能为空');\n if (!config.password) errors.push('数据库密码不能为空');\n\n return errors;\n}\n\n/**\n * 显示数据库连接配置(用于管理界面只读显示)\n * 敏感信息会被掩码处理\n */\nexport function getDatabaseConfigForDisplay(): Record<string, any> {\n const config = getDatabaseConfig();\n\n return {\n // 只显示非敏感信息\n host: config.host,\n port: config.port,\n database: config.database,\n username: config.username,\n password: config.password ? '***' : '',\n ssl: config.ssl || false,\n poolSize: config.poolSize,\n queryTimeout: config.queryTimeout,\n // 连接状态\n connectionString: 'postgresql://' + (config.username) + ':***@' + (config.host) + ':' + (config.port) + '/' + (config.database),\n source: process.env.DATABASE_URL ? 'DATABASE_URL' : 'Environment Variables',\n };\n}\n\n\n\n\n\n\n\n\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import '
|
|
1
|
+
import '../../../chunk-MAI35PU6.mjs';
|
|
2
2
|
import { pgTable, timestamp, text, jsonb, uniqueIndex, boolean, integer, index } from 'drizzle-orm/pg-core';
|
|
3
3
|
import { sql, eq } from 'drizzle-orm';
|
|
4
4
|
import * as crypto from 'crypto';
|
|
5
5
|
import crypto__default from 'crypto';
|
|
6
6
|
|
|
7
|
-
// src/config/server/types.ts
|
|
7
|
+
// src/common/config/server/types.ts
|
|
8
8
|
var ConfigCategory = /* @__PURE__ */ ((ConfigCategory2) => {
|
|
9
9
|
ConfigCategory2["DATABASE"] = "database";
|
|
10
10
|
ConfigCategory2["STORAGE"] = "storage";
|
|
@@ -868,7 +868,7 @@ function createConfigService(options) {
|
|
|
868
868
|
return new ConfigService(options);
|
|
869
869
|
}
|
|
870
870
|
|
|
871
|
-
// src/config/server/templates.ts
|
|
871
|
+
// src/common/config/server/templates.ts
|
|
872
872
|
var DEFAULT_CONFIG_TEMPLATES = {
|
|
873
873
|
// 数据库相关的业务配置(非连接配置)
|
|
874
874
|
["database" /* DATABASE */]: [
|
|
@@ -1008,7 +1008,7 @@ function createConfigTemplates(templates) {
|
|
|
1008
1008
|
return filteredTemplates;
|
|
1009
1009
|
}
|
|
1010
1010
|
|
|
1011
|
-
// src/config/server/factory.ts
|
|
1011
|
+
// src/common/config/server/factory.ts
|
|
1012
1012
|
function createConfigEngine(options) {
|
|
1013
1013
|
return new ConfigEngine(options);
|
|
1014
1014
|
}
|
|
@@ -1038,7 +1038,7 @@ function createGlobalConfigEngine(options) {
|
|
|
1038
1038
|
};
|
|
1039
1039
|
}
|
|
1040
1040
|
|
|
1041
|
-
// src/config/server/database-config.ts
|
|
1041
|
+
// src/common/config/server/database-config.ts
|
|
1042
1042
|
function getDatabaseConfig() {
|
|
1043
1043
|
const databaseUrl = process.env.DATABASE_URL;
|
|
1044
1044
|
if (databaseUrl) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/common/config/server/types.ts","../../../../src/common/config/server/schema.ts","../../../../src/common/config/server/engine.ts","../../../../src/common/config/server/service.ts","../../../../src/common/config/server/templates.ts","../../../../src/common/config/server/factory.ts","../../../../src/common/config/server/database-config.ts"],"names":["ConfigCategory","defaultLogger","eq","crypto","text"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * 配置系统类型定义\n * ConfigEngine V2 - 数据驱动的配置管理\n */\n\n// ==================== 基础类型 ====================\n\nexport type ConfigType = 'string' | 'number' | 'boolean' | 'json' | 'enum' | 'url' | 'email';\n\nexport type UiComponentType =\n | 'input'\n | 'textarea'\n | 'select'\n | 'switch'\n | 'slider'\n | 'color-picker';\n\nexport type ConfigStatus = 'active' | 'deprecated' | 'disabled';\n\nexport type ChangeType = 'create' | 'update' | 'delete';\n\n// ==================== 配置定义 ====================\n\n/**\n * 验证规则\n */\nexport interface ValidationRules {\n /** 最小值(数字) */\n min?: number;\n /** 最大值(数字) */\n max?: number;\n /** 最小长度(字符串) */\n minLength?: number;\n /** 最大长度(字符串) */\n maxLength?: number;\n /** 正则表达式 */\n pattern?: string;\n /** 是否为邮箱 */\n email?: boolean;\n /** 是否为 URL */\n url?: boolean;\n /** 自定义验证函数名 */\n custom?: string;\n}\n\n/**\n * UI 组件属性\n */\nexport interface UiProps {\n /** 占位符 */\n placeholder?: string;\n /** 帮助文本 */\n helpText?: string;\n /** 前缀 */\n prefix?: string;\n /** 后缀 */\n suffix?: string;\n /** 步长(数字输入) */\n step?: number;\n /** 行数(文本域) */\n rows?: number;\n /** 是否禁用 */\n disabled?: boolean;\n /** 最大值(滑块) */\n max?: number;\n /** 最小值(滑块) */\n min?: number;\n}\n\n/**\n * 枚举选项\n */\nexport interface EnumOption {\n /** 显示标签 */\n label: string;\n /** 实际值 */\n value: any;\n /** 描述 */\n description?: string;\n /** 图标 */\n icon?: string;\n}\n\n/**\n * 配置定义(完整)\n */\nexport interface ConfigDefinition {\n // 基本信息\n id?: number;\n key: string;\n category: string;\n name: string;\n description?: string;\n\n // 类型和验证\n type: ConfigType;\n validationRules?: ValidationRules;\n\n // UI 配置\n uiComponent?: UiComponentType;\n uiProps?: UiProps;\n\n // 安全和权限\n isSensitive?: boolean;\n isRequired?: boolean;\n isReadonly?: boolean;\n requiredPermission?: string;\n\n // 默认值和选项\n defaultValue?: any;\n enumOptions?: EnumOption[];\n\n // 依赖和条件\n dependsOn?: string[];\n showIf?: Record<string, any>;\n\n // 分组和排序\n groupName?: string;\n sortOrder?: number;\n\n // 版本和状态\n version?: number;\n status?: ConfigStatus;\n\n // 标签\n tags?: string[];\n\n // 元数据\n createdAt?: Date | string;\n updatedAt?: Date | string;\n createdBy?: number;\n}\n\n/**\n * 配置定义(用于创建)\n */\nexport type ConfigDefinitionCreate = Omit<ConfigDefinition, 'id' | 'createdAt' | 'updatedAt'>;\n\n/**\n * 配置定义(用于更新)\n */\nexport type ConfigDefinitionUpdate = Partial<ConfigDefinitionCreate>;\n\n/**\n * 配置定义(带值)\n */\nexport interface ConfigDefinitionWithValue extends ConfigDefinition {\n value: any;\n displayValue?: any; // 用于敏感信息掩码\n}\n\n// ==================== 配置值 ====================\n\n/**\n * 配置值\n */\nexport interface ConfigValue {\n key: string;\n value: any;\n}\n\n// ==================== 配置历史 ====================\n\n/**\n * 配置变更历史\n */\nexport interface ConfigHistoryRecord {\n id?: number;\n configKey: string;\n oldValue?: string;\n newValue?: string;\n changeType: ChangeType;\n changedBy?: number;\n changedAt?: Date | string;\n reason?: string;\n ipAddress?: string;\n userAgent?: string;\n}\n\n/**\n * 配置历史(用于创建)\n */\nexport type ConfigHistoryCreate = Omit<ConfigHistoryRecord, 'id' | 'changedAt'>;\n\n// ==================== 验证结果 ====================\n\n/**\n * 验证结果\n */\nexport interface ValidationResult {\n valid: boolean;\n errors: string[];\n}\n\n// ==================== API 响应 ====================\n\n/**\n * API 成功响应\n */\nexport interface ApiSuccessResponse<T = any> {\n success: true;\n data: T;\n message?: string;\n}\n\n/**\n * API 错误响应\n */\nexport interface ApiErrorResponse {\n success: false;\n error: string;\n details?: any;\n}\n\n/**\n * API 响应(联合类型)\n */\nexport type ApiResponse<T = any> = ApiSuccessResponse<T> | ApiErrorResponse;\n\n// ==================== 配置分组 ====================\n\n/**\n * 配置分组(UI 展示用)\n */\nexport interface ConfigGroup {\n groupName: string;\n definitions: ConfigDefinitionWithValue[];\n}\n\n/**\n * 分类配置(UI 展示用)\n */\nexport interface CategoryConfigs {\n category: string;\n groups: ConfigGroup[];\n}\n\n// ==================== 批量操作 ====================\n\n/**\n * 批量注册配置定义\n */\nexport interface BatchRegisterRequest {\n definitions: ConfigDefinitionCreate[];\n}\n\n/**\n * 批量更新配置值\n */\nexport interface BatchUpdateValuesRequest {\n values: Array<{\n key: string;\n value: any;\n }>;\n}\n\n// ==================== 配置元数据 ====================\n\n/**\n * 配置元数据缓存\n */\nexport interface ConfigMetadataCache {\n category: string;\n type: ConfigType;\n isSensitive: boolean;\n isRequired: boolean;\n defaultDescription?: string;\n}\n\n// ==================== 配置分类和模板 ====================\n\n/**\n * 配置分类枚举\n */\nexport enum ConfigCategory {\n DATABASE = 'database',\n STORAGE = 'storage',\n AI_SERVICE = 'ai_service',\n EMAIL = 'email',\n SECURITY = 'security',\n SYSTEM = 'system',\n MOBILE = 'mobile',\n WECHAT = 'wechat',\n}\n\n/**\n * 配置项(用于模板)\n */\nexport interface ConfigItem {\n key: string;\n value: any;\n category: ConfigCategory;\n type: ConfigType;\n isRequired: boolean;\n isSensitive: boolean;\n description?: string;\n defaultValue?: any;\n group?: string; // 配置分组\n isGroupTemplate?: boolean; // 是否为组模板(可多次实例化)\n groupFields?: string[]; // 组内字段列表(用于多实例配置)\n}\n\n","/**\n * 配置管理模块 - Drizzle ORM Schema\n *\n * 包含4个核心表:\n * 1. system_configs - 系统配置值表\n * 2. config_metadata - 配置元数据表\n * 3. config_definitions - 配置定义表(ConfigEngine核心)\n * 4. config_history - 配置变更历史表\n */\n\nimport {\n pgTable,\n text,\n jsonb,\n timestamp,\n boolean,\n integer,\n uniqueIndex,\n index,\n} from 'drizzle-orm/pg-core';\nimport { sql } from 'drizzle-orm';\n\n/**\n * 系统配置值表\n * 存储实际的配置键值对\n */\nexport const systemConfigs = pgTable(\n 'system_configs',\n {\n id: text().primaryKey().notNull(),\n key: text().notNull(),\n value: jsonb().notNull(),\n description: text(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n },\n (table) => [\n uniqueIndex('system_configs_key_key').using(\n 'btree',\n table.key.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 配置元数据表\n * 存储配置的类型、类别和验证规则等元数据\n */\nexport const configMetadata = pgTable('config_metadata', {\n key: text().primaryKey().notNull(),\n category: text().notNull(),\n type: text().default('string').notNull(),\n isSensitive: boolean().default(false).notNull(),\n isRequired: boolean().default(false).notNull(),\n defaultDescription: text(),\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' }).notNull(),\n});\n\n/**\n * 配置定义表(ConfigEngine 核心)\n * 数据驱动的配置管理系统核心表\n */\nexport const configDefinitions = pgTable(\n 'config_definitions',\n {\n id: integer().primaryKey().generatedAlwaysAsIdentity(),\n key: text().notNull(),\n category: text().notNull(),\n name: text().notNull(),\n description: text(),\n\n // 类型和验证\n type: text().notNull(), // string, number, boolean, json, enum, url, email\n validationRules: jsonb(), // 验证规则 JSON\n\n // UI 配置\n uiComponent: text().default('input'), // input, textarea, select, switch, slider\n uiProps: jsonb(), // UI 组件属性\n\n // 安全和权限\n isSensitive: boolean().default(false).notNull(),\n isRequired: boolean().default(false).notNull(),\n isReadonly: boolean().default(false).notNull(),\n requiredPermission: text(),\n\n // 默认值和选项\n defaultValue: text(),\n enumOptions: jsonb(), // 枚举选项\n\n // 依赖和条件\n dependsOn: text().array(), // 依赖的配置项\n showIf: jsonb(), // 显示条件\n\n // 分组和排序\n groupName: text(),\n sortOrder: integer().default(0).notNull(),\n\n // 版本和状态\n version: integer().default(1).notNull(),\n status: text().default('active').notNull(), // active, deprecated, disabled\n\n // 标签\n tags: text().array(),\n\n // 元数据\n createdAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n updatedAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n createdBy: integer(),\n },\n (table) => [\n uniqueIndex('config_definitions_key_key').using(\n 'btree',\n table.key.asc().nullsLast().op('text_ops')\n ),\n index('config_definitions_category_idx').using(\n 'btree',\n table.category.asc().nullsLast().op('text_ops')\n ),\n index('config_definitions_status_idx').using(\n 'btree',\n table.status.asc().nullsLast().op('text_ops')\n ),\n ]\n);\n\n/**\n * 配置变更历史表\n * 记录所有配置的变更历史,用于审计和回滚\n */\nexport const configHistory = pgTable(\n 'config_history',\n {\n id: integer().primaryKey().generatedAlwaysAsIdentity(),\n configKey: text().notNull(),\n oldValue: text(),\n newValue: text(),\n changeType: text().notNull(), // create, update, delete\n changedBy: integer(),\n changedAt: timestamp({ precision: 3, mode: 'string' })\n .default(sql`CURRENT_TIMESTAMP`)\n .notNull(),\n reason: text(),\n ipAddress: text(),\n userAgent: text(),\n },\n (table) => [\n index('config_history_key_idx').using(\n 'btree',\n table.configKey.asc().nullsLast().op('text_ops')\n ),\n index('config_history_date_idx').using(\n 'btree',\n table.changedAt.asc().nullsLast().op('timestamp_ops')\n ),\n ]\n);\n\n","/**\n * ConfigEngine V2 - 数据驱动的配置管理引擎\n *\n * 核心功能:\n * 1. 从数据库加载配置定义\n * 2. 配置值的验证和管理\n * 3. 配置变更历史记录\n * 4. 敏感信息加密/解密\n *\n * 使用方法:\n * ```typescript\n * import { ConfigEngine } from 'sa2kit/config/server';\n *\n * const engine = new ConfigEngine(db);\n * await engine.initialize();\n *\n * // 获取配置值\n * const value = await engine.getValue('config_key');\n *\n * // 设置配置值\n * await engine.setValue('config_key', 'new_value', userId);\n * ```\n */\n\nimport * as crypto from 'crypto';\nimport { eq } from 'drizzle-orm';\nimport type {\n ConfigDefinition,\n ConfigDefinitionCreate,\n ConfigDefinitionWithValue,\n ValidationResult,\n ValidationRules,\n ConfigHistoryCreate,\n ConfigType,\n} from './types';\n\n// 数据库表类型 - 需要从外部传入或注入\ninterface SystemConfig {\n id: string;\n key: string;\n value: any;\n description?: string | null;\n createdAt: string;\n updatedAt: string;\n}\n\ninterface ConfigDefinitionRow {\n id: number;\n key: string;\n category: string;\n name: string;\n description?: string | null;\n type: string;\n validationRules?: any;\n uiComponent?: string | null;\n uiProps?: any;\n isSensitive: boolean;\n isRequired: boolean;\n isReadonly: boolean;\n requiredPermission?: string | null;\n defaultValue?: string | null;\n enumOptions?: any;\n dependsOn?: string[] | null;\n showIf?: any;\n groupName?: string | null;\n sortOrder: number;\n version: number;\n status: string;\n tags?: string[] | null;\n createdAt: string;\n updatedAt: string;\n createdBy?: number | null;\n}\n\n/**\n * 数据库接口(使用Drizzle ORM)\n * 使用 any 类型以避免复杂的类型推导\n */\nexport type DatabaseClient = any;\n\n/**\n * 数据库表定义\n */\nexport interface DatabaseTables {\n systemConfigs: any;\n configDefinitions?: any;\n configMetadata?: any;\n configHistory: any;\n}\n\n/**\n * 日志接口\n */\nexport interface Logger {\n info: (message: string, ...args: any[]) => void;\n warn: (message: string, ...args: any[]) => void;\n error: (message: string, ...args: any[]) => void;\n}\n\n/**\n * ConfigEngine 配置选项\n */\nexport interface ConfigEngineOptions {\n /** 数据库客户端 */\n db: DatabaseClient;\n /** 数据库表定义 */\n tables: DatabaseTables;\n /** 加密密钥 */\n encryptionKey?: string;\n /** 日志记录器 */\n logger?: Logger;\n}\n\n/**\n * 默认日志记录器\n */\nconst defaultLogger: Logger = {\n info: (message: string, ...args: any[]) => console.log('[ConfigEngine] ' + (message), ...args),\n warn: (message: string, ...args: any[]) => console.warn('[ConfigEngine] ' + (message), ...args),\n error: (message: string, ...args: any[]) => console.error('[ConfigEngine] ' + (message), ...args),\n};\n\n/**\n * 配置引擎类\n */\nexport class ConfigEngine {\n private definitionsCache = new Map<string, ConfigDefinition>();\n private encryptionKey: string;\n private initialized = false;\n private db: DatabaseClient;\n private tables: DatabaseTables;\n private logger: Logger;\n\n constructor(options: ConfigEngineOptions) {\n this.db = options.db;\n this.tables = options.tables;\n this.logger = options.logger || defaultLogger;\n\n // 使用环境变量作为加密密钥\n this.encryptionKey = options.encryptionKey || process.env.CONFIG_ENCRYPTION_KEY || 'default-config-key-2024';\n\n if (this.encryptionKey === 'default-config-key-2024') {\n this.logger.warn('⚠️ 使用默认加密密钥,生产环境请设置 CONFIG_ENCRYPTION_KEY 环境变量');\n }\n }\n\n /**\n * 初始化配置引擎\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n try {\n await this.loadDefinitions();\n this.initialized = true;\n this.logger.info('✅ ConfigEngine 初始化成功');\n } catch (error) {\n this.logger.error('❌ ConfigEngine 初始化失败:', error);\n throw error;\n }\n }\n\n /**\n * 从数据库加载所有配置定义到缓存\n */\n async loadDefinitions(): Promise<void> {\n try {\n const definitions = await this.db\n .select()\n .from(this.tables.configDefinitions)\n .where(eq(this.tables.configDefinitions.status, 'active'));\n\n this.definitionsCache.clear();\n\n (definitions as ConfigDefinitionRow[]).forEach((def) => {\n const definition: ConfigDefinition = {\n id: def.id,\n key: def.key,\n category: def.category,\n name: def.name,\n description: def.description || undefined,\n type: def.type as ConfigType,\n validationRules: def.validationRules\n ? JSON.parse(JSON.stringify(def.validationRules))\n : undefined,\n uiComponent: def.uiComponent as any,\n uiProps: def.uiProps ? JSON.parse(JSON.stringify(def.uiProps)) : undefined,\n isSensitive: def.isSensitive,\n isRequired: def.isRequired,\n isReadonly: def.isReadonly,\n requiredPermission: def.requiredPermission || undefined,\n defaultValue: def.defaultValue || undefined,\n enumOptions: def.enumOptions ? JSON.parse(JSON.stringify(def.enumOptions)) : undefined,\n dependsOn: def.dependsOn || undefined,\n showIf: def.showIf ? JSON.parse(JSON.stringify(def.showIf)) : undefined,\n groupName: def.groupName || undefined,\n sortOrder: def.sortOrder,\n version: def.version,\n status: def.status as any,\n tags: def.tags || undefined,\n createdAt: def.createdAt,\n updatedAt: def.updatedAt,\n createdBy: def.createdBy || undefined,\n };\n\n this.definitionsCache.set(def.key, definition);\n });\n\n this.logger.info('✅ 已加载 ' + (definitions.length) + ' 个配置定义');\n } catch (error) {\n this.logger.error('❌ 加载配置定义失败:', error);\n throw error;\n }\n }\n\n /**\n * 获取单个配置定义\n */\n getDefinition(key: string): ConfigDefinition | undefined {\n return this.definitionsCache.get(key);\n }\n\n /**\n * 获取所有配置定义\n */\n getAllDefinitions(): ConfigDefinition[] {\n return Array.from(this.definitionsCache.values());\n }\n\n /**\n * 获取指定分类的配置定义\n */\n getDefinitionsByCategory(category: string): ConfigDefinition[] {\n return this.getAllDefinitions()\n .filter((def) => def.category === category)\n .sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0));\n }\n\n /**\n * 验证配置值\n */\n async validate(key: string, value: any): Promise<ValidationResult> {\n const definition = this.getDefinition(key);\n\n if (!definition) {\n return {\n valid: false,\n errors: ['配置定义不存在'],\n };\n }\n\n const errors: string[] = [];\n\n // 必填验证\n if (definition.isRequired && (value === null || value === undefined || value === '')) {\n errors.push('此配置项为必填');\n return { valid: false, errors };\n }\n\n // 空值跳过后续验证\n if (value === null || value === undefined || value === '') {\n return { valid: true, errors: [] };\n }\n\n // 类型验证\n const typeError = this.validateType(value, definition.type);\n if (typeError) {\n errors.push(typeError);\n }\n\n // 规则验证\n if (definition.validationRules && typeError === null) {\n const ruleErrors = this.validateRules(value, definition.validationRules);\n errors.push(...ruleErrors);\n }\n\n return {\n valid: errors.length === 0,\n errors,\n };\n }\n\n /**\n * 获取配置的完整数据(定义 + 值)\n */\n async getConfigsWithValues(category?: string): Promise<ConfigDefinitionWithValue[]> {\n // 确保已初始化\n if (!this.initialized) {\n await this.initialize();\n }\n\n // 获取定义\n const definitions = category\n ? this.getDefinitionsByCategory(category)\n : this.getAllDefinitions();\n\n // 获取所有配置值\n const configValues = await this.db.select().from(this.tables.systemConfigs);\n const valueMap = new Map((configValues as SystemConfig[]).map((v) => [v.key, v.value]));\n\n // 合并定义和值\n const result: ConfigDefinitionWithValue[] = definitions.map((def) => {\n let value = valueMap.get(def.key) ?? def.defaultValue;\n let displayValue = value;\n\n // 解密敏感配置\n if (def.isSensitive && value && typeof value === 'string') {\n try {\n value = this.decrypt(value);\n // 掩码显示\n displayValue = this.maskValue(value);\n } catch (error) {\n this.logger.warn('解密配置 ' + (def.key) + ' 失败:', error);\n }\n }\n\n return {\n ...def,\n value,\n displayValue,\n };\n });\n\n return result;\n }\n\n /**\n * 获取单个配置值\n */\n async getValue(key: string): Promise<any> {\n const definition = this.getDefinition(key);\n if (!definition) {\n return undefined;\n }\n\n const configs = await this.db\n .select()\n .from(this.tables.systemConfigs)\n .where(eq(this.tables.systemConfigs.key, key))\n .limit(1);\n\n if (configs.length === 0) {\n return definition.defaultValue;\n }\n\n let value = (configs[0] as SystemConfig).value;\n\n // 解密敏感配置\n if (definition.isSensitive && value && typeof value === 'string') {\n try {\n value = this.decrypt(value);\n } catch (error) {\n this.logger.warn('解密配置 ' + (key) + ' 失败:', error);\n }\n }\n\n return value;\n }\n\n /**\n * 设置配置值\n */\n async setValue(\n key: string,\n value: any,\n userId: number = 0,\n options?: {\n reason?: string;\n ipAddress?: string;\n userAgent?: string;\n }\n ): Promise<void> {\n // 验证配置值\n const validation = await this.validate(key, value);\n if (!validation.valid) {\n throw new Error('配置验证失败: ' + (validation.errors.join(', ')));\n }\n\n const definition = this.getDefinition(key);\n if (!definition) {\n throw new Error('配置定义不存在');\n }\n\n // 获取旧值(用于历史记录)\n const oldConfigs = await this.db\n .select()\n .from(this.tables.systemConfigs)\n .where(eq(this.tables.systemConfigs.key, key))\n .limit(1);\n\n const oldValue = oldConfigs.length > 0 ? (oldConfigs[0] as SystemConfig).value : undefined;\n\n // 加密敏感配置\n let finalValue = value;\n if (definition.isSensitive && value) {\n finalValue = this.encrypt(String(value));\n }\n\n // 保存配置值\n if (oldConfigs.length > 0) {\n await this.db\n .update(this.tables.systemConfigs)\n .set({\n value: finalValue,\n updatedAt: new Date().toISOString(),\n })\n .where(eq(this.tables.systemConfigs.key, key));\n } else {\n // 生成 ID\n const id = crypto.randomUUID();\n await this.db.insert(this.tables.systemConfigs).values({\n id,\n key,\n value: finalValue,\n description: definition.description,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n });\n }\n\n // 记录历史\n await this.recordHistory({\n configKey: key,\n oldValue: oldValue ? JSON.stringify(oldValue) : undefined,\n newValue: JSON.stringify(value),\n changeType: oldValue ? 'update' : 'create',\n changedBy: userId,\n reason: options?.reason,\n ipAddress: options?.ipAddress,\n userAgent: options?.userAgent,\n });\n\n this.logger.info('✅ 配置已' + (oldValue ? '更新' : '创建') + ': ' + (key));\n }\n\n /**\n * 批量设置配置值\n */\n async setValues(\n values: Array<{ key: string; value: any }>,\n userId: number = 0,\n options?: {\n reason?: string;\n ipAddress?: string;\n userAgent?: string;\n }\n ): Promise<void> {\n for (const item of values) {\n await this.setValue(item.key, item.value, userId, options);\n }\n }\n\n /**\n * 注册新配置定义\n */\n async registerDefinition(definition: ConfigDefinitionCreate, userId: number = 0): Promise<void> {\n try {\n await this.db.insert(this.tables.configDefinitions).values({\n key: definition.key,\n category: definition.category,\n name: definition.name,\n description: definition.description,\n type: definition.type,\n validationRules: definition.validationRules\n ? JSON.stringify(definition.validationRules)\n : null,\n uiComponent: definition.uiComponent || 'input',\n uiProps: definition.uiProps ? JSON.stringify(definition.uiProps) : null,\n isSensitive: definition.isSensitive || false,\n isRequired: definition.isRequired || false,\n isReadonly: definition.isReadonly || false,\n requiredPermission: definition.requiredPermission,\n defaultValue: definition.defaultValue,\n enumOptions: definition.enumOptions ? JSON.stringify(definition.enumOptions) : null,\n dependsOn: definition.dependsOn,\n showIf: definition.showIf ? JSON.stringify(definition.showIf) : null,\n groupName: definition.groupName,\n sortOrder: definition.sortOrder || 0,\n version: definition.version || 1,\n status: definition.status || 'active',\n tags: definition.tags,\n createdBy: userId,\n updatedAt: new Date().toISOString(),\n });\n\n // 重新加载定义缓存\n await this.loadDefinitions();\n\n this.logger.info('✅ 注册新配置定义: ' + (definition.key));\n } catch (error) {\n this.logger.error(`❌ 注册配置定义失败:`, error);\n throw error;\n }\n }\n\n /**\n * 批量注册配置定义\n */\n async registerDefinitions(\n definitions: ConfigDefinitionCreate[],\n userId: number = 0\n ): Promise<void> {\n for (const definition of definitions) {\n await this.registerDefinition(definition, userId);\n }\n }\n\n /**\n * 记录配置变更历史\n */\n private async recordHistory(record: ConfigHistoryCreate): Promise<void> {\n try {\n await this.db.insert(this.tables.configHistory).values({\n ...record,\n changedAt: new Date().toISOString(),\n });\n } catch (error) {\n this.logger.error('❌ 记录配置历史失败:', error);\n // 不抛出错误,避免影响主流程\n }\n }\n\n /**\n * 获取配置变更历史\n */\n async getHistory(key: string, limit: number = 50): Promise<any[]> {\n try {\n const history = await this.db\n .select()\n .from(this.tables.configHistory)\n .where(eq(this.tables.configHistory.configKey, key))\n .orderBy(this.tables.configHistory.changedAt)\n .limit(limit);\n\n return history;\n } catch (error) {\n this.logger.error('❌ 获取配置历史失败:', error);\n return [];\n }\n }\n\n // ==================== 私有辅助方法 ====================\n\n /**\n * 类型验证\n */\n private validateType(value: any, type: ConfigType): string | null {\n switch (type) {\n case 'string':\n return typeof value === 'string' ? null : '值必须是字符串';\n\n case 'number':\n return typeof value === 'number' && !isNaN(value) ? null : '值必须是数字';\n\n case 'boolean':\n return typeof value === 'boolean' ? null : '值必须是布尔值';\n\n case 'json':\n try {\n if (typeof value === 'string') {\n JSON.parse(value);\n }\n return null;\n } catch {\n return '值必须是有效的 JSON';\n }\n\n case 'url':\n try {\n new URL(value);\n return null;\n } catch {\n return '值必须是有效的 URL';\n }\n\n case 'email':\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value) ? null : '值必须是有效的邮箱地址';\n\n case 'enum':\n return null; // 枚举验证在规则验证中处理\n\n default:\n return null;\n }\n }\n\n /**\n * 规则验证\n */\n private validateRules(value: any, rules: ValidationRules): string[] {\n const errors: string[] = [];\n\n if (rules.min !== undefined && value < rules.min) {\n errors.push('值不能小于 ' + (rules.min));\n }\n\n if (rules.max !== undefined && value > rules.max) {\n errors.push('值不能大于 ' + (rules.max));\n }\n\n if (rules.minLength !== undefined && String(value).length < rules.minLength) {\n errors.push('长度不能小于 ' + (rules.minLength));\n }\n\n if (rules.maxLength !== undefined && String(value).length > rules.maxLength) {\n errors.push('长度不能大于 ' + (rules.maxLength));\n }\n\n if (rules.pattern && !new RegExp(rules.pattern).test(String(value))) {\n errors.push('值不符合要求的格式');\n }\n\n return errors;\n }\n\n /**\n * 加密\n */\n private encrypt(value: string): string {\n const algorithm = 'aes-256-cbc';\n const key = crypto.scryptSync(this.encryptionKey, 'salt', 32);\n const iv = crypto.randomBytes(16);\n const cipher = crypto.createCipheriv(algorithm, key, iv);\n let encrypted = cipher.update(value, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n return iv.toString('hex') + ':' + encrypted;\n }\n\n /**\n * 解密\n */\n private decrypt(encrypted: string): string {\n const algorithm = 'aes-256-cbc';\n const key = crypto.scryptSync(this.encryptionKey, 'salt', 32);\n const parts = encrypted.split(':');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new Error('无效的加密数据格式');\n }\n const [ivHex, encryptedData] = parts;\n const iv = Buffer.from(ivHex, 'hex');\n const decipher = crypto.createDecipheriv(algorithm, key, iv);\n let decrypted = decipher.update(encryptedData, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n return decrypted;\n }\n\n /**\n * 掩码显示敏感值\n */\n private maskValue(value: string): string {\n if (!value) return '';\n const len = value.length;\n if (len <= 8) {\n return '*'.repeat(len);\n }\n return value.substring(0, 4) + '*'.repeat(len - 8) + value.substring(len - 4);\n }\n}\n\n","/**\n * ConfigService - 简化的配置管理服务\n *\n * 提供更简单的API来管理配置,封装ConfigEngine的复杂性\n *\n * 使用方法:\n * ```typescript\n * import { ConfigService } from 'sa2kit/config/server';\n * import { ConfigCategory, ConfigType } from 'sa2kit/config/server';\n *\n * const service = new ConfigService({ db, tables });\n *\n * // 获取配置\n * const apiKey = await service.getConfig('api_key', 'default-key');\n *\n * // 设置配置\n * await service.setConfig('api_key', 'new-key');\n *\n * // 获取分类下的所有配置\n * const storageConfigs = await service.getConfigsByCategory(ConfigCategory.STORAGE);\n * ```\n */\n\nimport crypto from 'crypto';\nimport { eq } from 'drizzle-orm';\nimport { ConfigEngine, type DatabaseClient, type DatabaseTables, type Logger } from './engine';\nimport { ConfigCategory, type ConfigType, type ConfigItem } from './types';\n\n/**\n * 配置模板(用于初始化默认配置)\n */\nexport type ConfigTemplates = Record<string, ConfigItem[]>;\n\n/**\n * ConfigService 配置选项\n */\nexport interface ConfigServiceOptions {\n /** 数据库客户端 */\n db: DatabaseClient;\n /** 数据库表定义 */\n tables: DatabaseTables;\n /** 加密密钥 */\n encryptionKey?: string;\n /** 日志记录器 */\n logger?: Logger;\n /** 配置模板 */\n templates?: ConfigTemplates;\n}\n\n/**\n * 默认日志记录器\n */\nconst defaultLogger: Logger = {\n info: (message: string, ...args: any[]) => console.log('[ConfigService] ' + (message), ...args),\n warn: (message: string, ...args: any[]) => console.warn('[ConfigService] ' + (message), ...args),\n error: (message: string, ...args: any[]) => console.error('[ConfigService] ' + (message), ...args),\n};\n\n/**\n * 配置管理服务类\n */\nexport class ConfigService {\n private configCache: Map<string, any> = new Map();\n private metadataCache: Map<\n string,\n {\n category: string;\n type: ConfigType;\n isSensitive: boolean;\n isRequired: boolean;\n defaultDescription?: string;\n }\n > = new Map();\n private encryptionKey: string;\n private db: DatabaseClient;\n private tables: DatabaseTables;\n private logger: Logger;\n private templates: ConfigTemplates;\n\n constructor(options: ConfigServiceOptions) {\n this.db = options.db;\n this.tables = options.tables;\n this.logger = options.logger || defaultLogger;\n this.templates = options.templates || {};\n\n // 使用环境变量或默认密钥作为加密密钥\n this.encryptionKey = options.encryptionKey || process.env.CONFIG_ENCRYPTION_KEY || 'default-config-key-2024';\n\n // 初始化时加载配置和元数据\n this.loadConfigsFromDatabase();\n this.loadMetadataFromDatabase();\n }\n\n // 从数据库加载元数据\n private async loadMetadataFromDatabase() {\n if (!this.tables.configMetadata) {\n this.logger.info('配置元数据表未提供,跳过元数据加载');\n return;\n }\n\n try {\n const metadata = await this.db.select().from(this.tables.configMetadata);\n metadata.forEach((meta: any) => {\n this.metadataCache.set(meta.key, {\n category: meta.category,\n type: meta.type as ConfigType,\n isSensitive: meta.isSensitive,\n isRequired: meta.isRequired,\n defaultDescription: meta.defaultDescription || undefined,\n });\n });\n this.logger.info('已加载 ' + (metadata.length) + ' 条配置元数据');\n } catch (error) {\n // 如果表不存在,使用模板作为后备\n this.logger.warn(\n '配置元数据表不存在,使用模板数据',\n error instanceof Error ? error.message : String(error)\n );\n // 不抛出错误,继续使用模板\n }\n }\n\n // 从数据库加载配置到缓存\n private async loadConfigsFromDatabase(): Promise<void> {\n try {\n const configs = await this.db.select().from(this.tables.systemConfigs);\n\n configs.forEach((config: any) => {\n let value = config.value;\n\n // 如果是敏感配置,解密\n if (this.isSensitiveConfig(config.key)) {\n try {\n value = this.decrypt(config.value as string);\n this.logger.info('✅ 成功解密配置: ' + (config.key));\n } catch (error) {\n this.logger.error('❌ 解密配置失败: ' + (config.key), error);\n // 跳过该配置,不加入缓存\n return;\n }\n }\n\n this.configCache.set(config.key, value);\n });\n\n this.logger.info('已加载 ' + (configs.length) + ' 个配置项');\n } catch (error) {\n this.logger.error('加载配置失败', error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n // 获取配置值\n public async getConfig(key: string, defaultValue?: any): Promise<any> {\n if (!key) {\n return defaultValue;\n }\n\n // 优先从环境变量获取\n const envValue = process.env[key.toUpperCase()];\n if (envValue !== undefined) {\n return this.parseValue(envValue, this.getConfigType(key));\n }\n\n // 从缓存获取\n if (this.configCache.has(key)) {\n return this.configCache.get(key);\n }\n\n // 从数据库获取\n try {\n const [config] = await this.db\n .select()\n .from(this.tables.systemConfigs)\n .where(eq(this.tables.systemConfigs.key, key))\n .limit(1);\n\n if (config) {\n let value = config.value;\n\n if (this.isSensitiveConfig(key)) {\n try {\n value = this.decrypt(config.value as string);\n this.logger.info('✅ 成功解密配置: ' + (key) + ', 长度: ' + (value?.length));\n } catch (error) {\n this.logger.error('❌ 解密配置失败: ' + (key), error);\n throw new Error('配置 ' + (key) + ' 解密失败');\n }\n }\n\n this.configCache.set(key, value);\n return value;\n }\n } catch (error) {\n this.logger.error(\n '获取配置 ' + (key) + ' 失败',\n error instanceof Error ? error : new Error(String(error))\n );\n }\n\n return defaultValue;\n }\n\n // 设置配置值\n public async setConfig(key: string, value: any, description?: string): Promise<void> {\n try {\n const category = this.getConfigCategory(key);\n const type = this.getConfigType(key);\n const isSensitive = this.isSensitiveConfig(key);\n\n // 验证配置值\n const validatedValue = this.validateValue(value, type);\n\n // 敏感配置需要加密\n const storageValue = isSensitive ? this.encrypt(validatedValue) : validatedValue;\n\n // 保存到数据库\n const existing = await this.db\n .select()\n .from(this.tables.systemConfigs)\n .where(eq(this.tables.systemConfigs.key, key))\n .limit(1);\n\n if (existing.length > 0) {\n await this.db\n .update(this.tables.systemConfigs)\n .set({\n value: storageValue,\n description: description || this.getConfigDescription(key),\n updatedAt: new Date().toISOString(),\n })\n .where(eq(this.tables.systemConfigs.key, key));\n } else {\n await this.db.insert(this.tables.systemConfigs).values({\n id: crypto.randomBytes(16).toString('hex'),\n key,\n value: storageValue,\n description: description || this.getConfigDescription(key),\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n });\n }\n\n // 更新缓存\n this.configCache.set(key, validatedValue);\n\n this.logger.info('配置 ' + (key) + ' 已更新');\n } catch (error) {\n this.logger.error(\n '设置配置 ' + (key) + ' 失败',\n error instanceof Error ? error : new Error(String(error))\n );\n throw error;\n }\n }\n\n // 获取分类下的所有配置\n public async getConfigsByCategory(category: ConfigCategory): Promise<Record<string, any>> {\n const configs: Record<string, any> = {};\n const template = this.templates[category] || [];\n\n for (const item of template) {\n configs[item.key] = await this.getConfig(item.key, item.defaultValue);\n }\n\n return configs;\n }\n\n // 批量设置配置\n public async setConfigs(configs: Record<string, any>): Promise<void> {\n for (const [key, value] of Object.entries(configs)) {\n await this.setConfig(key, value);\n }\n }\n\n // 删除配置\n public async deleteConfig(key: string): Promise<void> {\n try {\n await this.db.delete(this.tables.systemConfigs).where(eq(this.tables.systemConfigs.key, key));\n\n this.configCache.delete(key);\n this.logger.info('配置 ' + (key) + ' 已删除');\n } catch (error) {\n this.logger.error(\n '删除配置 ' + (key) + ' 失败',\n error instanceof Error ? error : new Error(String(error))\n );\n throw error;\n }\n }\n\n // 获取所有配置(用于管理界面)\n public async getAllConfigs(): Promise<Record<string, any>> {\n const allConfigs: Record<string, any> = {};\n\n // 先获取数据库中所有实际存在的配置\n const dbConfigs = await this.db.select().from(this.tables.systemConfigs);\n const dbConfigKeys = new Set(dbConfigs.map((c: any) => c.key));\n\n for (const [category, items] of Object.entries(this.templates)) {\n allConfigs[category] = {};\n\n for (const item of items) {\n // 只显示数据库中实际存在的配置\n if (dbConfigKeys.has(item.key)) {\n const value = await this.getConfig(item.key, item.defaultValue);\n allConfigs[category][item.key] = {\n ...item,\n value: item.isSensitive ? '' : value, // 敏感信息隐藏\n isStored: true, // 标记为已存储\n };\n }\n }\n }\n\n return allConfigs;\n }\n\n // 刷新配置缓存\n public async refreshCache(): Promise<void> {\n this.configCache.clear();\n await this.loadConfigsFromDatabase();\n }\n\n // 配置验证\n public validateConfig(key: string, value: any): boolean {\n const type = this.getConfigType(key);\n const isRequired = this.isRequiredConfig(key);\n\n if (isRequired && (value === undefined || value === null || value === '')) {\n throw new Error('配置 ' + (key) + ' 是必需的');\n }\n\n try {\n this.validateValue(value, type);\n return true;\n } catch (error: any) {\n throw new Error('配置 ' + (key) + ' 值无效: ' + (error.message));\n }\n }\n\n // 私有方法:加密\n private encrypt(text: string): string {\n const algorithm = 'aes-256-cbc';\n const key = crypto.scryptSync(this.encryptionKey, 'salt', 32);\n const iv = crypto.randomBytes(16);\n\n const cipher = crypto.createCipheriv(algorithm, key, iv);\n let encrypted = cipher.update(text, 'utf8', 'hex');\n encrypted += cipher.final('hex');\n\n return iv.toString('hex') + ':' + encrypted;\n }\n\n // 私有方法:解密\n private decrypt(encryptedText: string): string {\n const algorithm = 'aes-256-cbc';\n const key = crypto.scryptSync(this.encryptionKey, 'salt', 32);\n\n const parts = encryptedText.split(':');\n if (parts.length !== 2 || !parts[0] || !parts[1]) {\n throw new Error('无效的加密数据格式');\n }\n\n const iv = Buffer.from(parts[0], 'hex');\n const encrypted = parts[1];\n\n const decipher = crypto.createDecipheriv(algorithm, key, iv);\n let decrypted = decipher.update(encrypted, 'hex', 'utf8');\n decrypted += decipher.final('utf8');\n\n return decrypted;\n }\n\n // 私有方法:解析值类型\n private parseValue(value: string, type: ConfigType): any {\n switch (type) {\n case 'number':\n return parseInt(value);\n case 'boolean':\n return value.toLowerCase() === 'true';\n case 'json':\n return JSON.parse(value);\n default:\n return value;\n }\n }\n\n // 私有方法:验证值\n private validateValue(value: any, type: ConfigType): any {\n switch (type) {\n case 'string':\n return String(value);\n case 'number':\n const num = Number(value);\n if (isNaN(num)) throw new Error('值必须是数字');\n return num;\n case 'boolean':\n return Boolean(value);\n case 'json':\n if (typeof value === 'string') {\n return JSON.parse(value);\n }\n return value;\n default:\n return value;\n }\n }\n\n // 私有方法:获取配置类型\n private getConfigType(key: string): ConfigType {\n const metadata = this.metadataCache.get(key);\n return metadata?.type || 'string';\n }\n\n // 私有方法:获取配置分类\n private getConfigCategory(key: string): ConfigCategory {\n const metadata = this.metadataCache.get(key);\n return (metadata?.category as ConfigCategory) || ConfigCategory.SYSTEM;\n }\n\n // 私有方法:检查是否为敏感配置\n private isSensitiveConfig(key: string): boolean {\n const metadata = this.metadataCache.get(key);\n return metadata?.isSensitive || false;\n }\n\n // 私有方法:检查是否为必需配置\n private isRequiredConfig(key: string): boolean {\n const metadata = this.metadataCache.get(key);\n return metadata?.isRequired || false;\n }\n\n // 私有方法:获取配置描述\n private getConfigDescription(key: string): string {\n const metadata = this.metadataCache.get(key);\n return metadata?.defaultDescription || '';\n }\n\n // 新增方法:创建或更新配置元数据\n public async setConfigMetadata(\n key: string,\n category: string,\n type: ConfigType = 'string',\n options: {\n isSensitive?: boolean;\n isRequired?: boolean;\n defaultDescription?: string;\n } = {}\n ): Promise<void> {\n if (!this.tables.configMetadata) {\n this.logger.warn('配置元数据表未提供,跳过元数据设置');\n return;\n }\n\n try {\n const now = new Date().toISOString();\n const existing = await this.db\n .select()\n .from(this.tables.configMetadata)\n .where(eq(this.tables.configMetadata.key, key))\n .limit(1);\n\n if (existing.length > 0) {\n await this.db\n .update(this.tables.configMetadata)\n .set({\n category,\n type,\n isSensitive: options.isSensitive ?? false,\n isRequired: options.isRequired ?? false,\n defaultDescription: options.defaultDescription,\n updatedAt: now,\n })\n .where(eq(this.tables.configMetadata.key, key));\n } else {\n await this.db.insert(this.tables.configMetadata).values({\n key,\n category,\n type,\n isSensitive: options.isSensitive ?? false,\n isRequired: options.isRequired ?? false,\n defaultDescription: options.defaultDescription,\n createdAt: now,\n updatedAt: now,\n });\n }\n\n // 更新缓存\n this.metadataCache.set(key, {\n category,\n type,\n isSensitive: options.isSensitive ?? false,\n isRequired: options.isRequired ?? false,\n defaultDescription: options.defaultDescription,\n });\n\n this.logger.info('配置元数据 ' + (key) + ' 已更新');\n } catch (error) {\n this.logger.error(\n '设置配置元数据 ' + (key) + ' 失败',\n error instanceof Error ? error : new Error(String(error))\n );\n throw error;\n }\n }\n}\n\n/**\n * 创建ConfigService实例的工厂函数\n */\nexport function createConfigService(options: ConfigServiceOptions): ConfigService {\n return new ConfigService(options);\n}\n\n","/**\n * 配置模板\n *\n * 提供常用的配置项模板,可用于初始化默认配置\n */\n\nimport { ConfigCategory, type ConfigType, type ConfigItem } from './types';\n\n/**\n * 配置模板类型\n */\nexport type ConfigTemplates = Record<string, ConfigItem[]>;\n\n/**\n * 默认配置模板\n *\n * 包含常见的配置项,可作为参考或直接使用\n */\nexport const DEFAULT_CONFIG_TEMPLATES: ConfigTemplates = {\n // 数据库相关的业务配置(非连接配置)\n [ConfigCategory.DATABASE]: [\n {\n key: 'database_pool_size',\n value: 10,\n category: ConfigCategory.DATABASE,\n type: 'number',\n isRequired: false,\n isSensitive: false,\n description: '数据库连接池大小',\n defaultValue: 10,\n group: '连接池配置',\n },\n {\n key: 'database_query_timeout',\n value: 30000,\n category: ConfigCategory.DATABASE,\n type: 'number',\n isRequired: false,\n isSensitive: false,\n description: '数据库查询超时时间(毫秒)',\n defaultValue: 30000,\n group: '连接池配置',\n },\n {\n key: 'enable_query_logging',\n value: false,\n category: ConfigCategory.DATABASE,\n type: 'boolean',\n isRequired: false,\n isSensitive: false,\n description: '启用数据库查询日志',\n defaultValue: false,\n group: '连接池配置',\n },\n ],\n\n // 存储配置\n [ConfigCategory.STORAGE]: [\n {\n key: 'storage_type',\n value: 'local',\n category: ConfigCategory.STORAGE,\n type: 'string',\n isRequired: true,\n isSensitive: false,\n description: '存储类型(local/aliyun-oss/aws-s3)',\n defaultValue: 'local',\n group: '基础配置',\n },\n {\n key: 'upload_max_size',\n value: 10485760,\n category: ConfigCategory.STORAGE,\n type: 'number',\n isRequired: false,\n isSensitive: false,\n description: '最大上传文件大小(字节)',\n defaultValue: 10485760,\n group: '上传配置',\n },\n ],\n\n // 安全配置\n [ConfigCategory.SECURITY]: [\n {\n key: 'jwt_secret',\n value: '',\n category: ConfigCategory.SECURITY,\n type: 'string',\n isRequired: true,\n isSensitive: true,\n description: 'JWT签名密钥',\n },\n {\n key: 'jwt_expires_in',\n value: '7d',\n category: ConfigCategory.SECURITY,\n type: 'string',\n isRequired: true,\n isSensitive: false,\n description: 'JWT过期时间',\n defaultValue: '7d',\n },\n {\n key: 'enable_rate_limiting',\n value: true,\n category: ConfigCategory.SECURITY,\n type: 'boolean',\n isRequired: false,\n isSensitive: false,\n description: '启用API速率限制',\n defaultValue: true,\n },\n ],\n\n // 系统配置\n [ConfigCategory.SYSTEM]: [\n {\n key: 'app_name',\n value: 'My App',\n category: ConfigCategory.SYSTEM,\n type: 'string',\n isRequired: true,\n isSensitive: false,\n description: '应用名称',\n defaultValue: 'My App',\n },\n {\n key: 'maintenance_mode',\n value: false,\n category: ConfigCategory.SYSTEM,\n type: 'boolean',\n isRequired: false,\n isSensitive: false,\n description: '维护模式',\n defaultValue: false,\n },\n {\n key: 'log_level',\n value: 'info',\n category: ConfigCategory.SYSTEM,\n type: 'string',\n isRequired: false,\n isSensitive: false,\n description: '日志级别',\n defaultValue: 'info',\n },\n ],\n};\n\n/**\n * 创建自定义配置模板\n *\n * @param templates 配置模板\n * @returns 合并后的配置模板\n */\nexport function createConfigTemplates(templates: Partial<ConfigTemplates>): ConfigTemplates {\n const filteredTemplates: ConfigTemplates = { ...DEFAULT_CONFIG_TEMPLATES };\n\n Object.keys(templates).forEach((key) => {\n const value = templates[key];\n if (value !== undefined) {\n filteredTemplates[key] = value;\n }\n });\n\n return filteredTemplates;\n}\n\n","/**\n * 配置服务工厂函数\n *\n * 提供便捷的工厂函数来创建 ConfigService 和 ConfigEngine 实例\n */\n\nimport { ConfigService, type ConfigServiceOptions } from './service';\nimport { ConfigEngine, type ConfigEngineOptions } from './engine';\n\n/**\n * 创建 ConfigService 实例的工厂函数\n */\nexport function createConfigService(options: ConfigServiceOptions): ConfigService {\n return new ConfigService(options);\n}\n\n/**\n * 创建 ConfigEngine 实例的工厂函数\n */\nexport function createConfigEngine(options: ConfigEngineOptions): ConfigEngine {\n return new ConfigEngine(options);\n}\n\n/**\n * 创建全局单例的 ConfigService 工厂\n *\n * @example\n * ```typescript\n * const getConfigService = createGlobalConfigService({\n * db,\n * tables: { systemConfigs, configMetadata, configHistory }\n * });\n *\n * // 在任何地方使用\n * const service = getConfigService();\n * ```\n */\nexport function createGlobalConfigService(options: ConfigServiceOptions): () => ConfigService {\n let instance: ConfigService | null = null;\n\n return () => {\n if (!instance) {\n instance = new ConfigService(options);\n }\n return instance;\n };\n}\n\n/**\n * 创建全局单例的 ConfigEngine 工厂\n *\n * @example\n * ```typescript\n * const getConfigEngine = createGlobalConfigEngine({\n * db,\n * tables: { systemConfigs, configDefinitions, configHistory }\n * });\n *\n * // 在任何地方使用\n * const engine = getConfigEngine();\n * await engine.initialize();\n * ```\n */\nexport function createGlobalConfigEngine(options: ConfigEngineOptions): () => ConfigEngine {\n let instance: ConfigEngine | null = null;\n let isInitializing = false;\n\n return () => {\n if (!instance) {\n instance = new ConfigEngine(options);\n\n // 自动初始化(仅一次)\n if (!isInitializing) {\n isInitializing = true;\n instance.initialize().catch((error) => {\n console.error('[ConfigEngine] 初始化失败:', error);\n });\n }\n }\n return instance;\n };\n}\n\n\n\n\n\n\n\n\n","/**\n * 数据库连接配置管理\n *\n * 注意:这些配置应该从环境变量读取,不存储在数据库中\n * 因为它们是连接数据库本身所需的基础配置\n */\n\nexport interface DatabaseConnectionConfig {\n host: string;\n port: number;\n database: string;\n username: string;\n password: string;\n ssl?: boolean;\n poolSize?: number;\n queryTimeout?: number;\n}\n\nexport interface RedisConnectionConfig {\n host: string;\n port: number;\n password?: string;\n database?: number;\n keyPrefix?: string;\n}\n\n/**\n * 从环境变量解析数据库连接配置\n */\nexport function getDatabaseConfig(): DatabaseConnectionConfig {\n const databaseUrl = process.env.DATABASE_URL;\n\n if (databaseUrl) {\n // 解析 DATABASE_URL\n const url = new URL(databaseUrl);\n return {\n host: url.hostname,\n port: parseInt(url.port) || 5432,\n database: url.pathname.slice(1), // 移除开头的 /\n username: url.username,\n password: url.password,\n ssl: url.searchParams.get('sslmode') === 'require',\n poolSize: parseInt(process.env.DB_POOL_SIZE || '10'),\n queryTimeout: parseInt(process.env.DB_QUERY_TIMEOUT || '30000'),\n };\n }\n\n // 兜底:从单独的环境变量读取\n return {\n host: process.env.DB_HOST || process.env.POSTGRES_HOST || 'localhost',\n port: parseInt(process.env.DB_PORT || process.env.POSTGRES_PORT || '5432'),\n database: process.env.DB_NAME || process.env.POSTGRES_DB || 'lyricnote',\n username: process.env.DB_USER || process.env.POSTGRES_USER || 'lyricnote',\n password: process.env.DB_PASSWORD || process.env.POSTGRES_PASSWORD || '',\n ssl: process.env.DB_SSL === 'true',\n poolSize: parseInt(process.env.DB_POOL_SIZE || '10'),\n queryTimeout: parseInt(process.env.DB_QUERY_TIMEOUT || '30000'),\n };\n}\n\n/**\n * 从环境变量解析 Redis 连接配置\n */\nexport function getRedisConfig(): RedisConnectionConfig {\n const redisUrl = process.env.REDIS_URL;\n\n if (redisUrl) {\n const url = new URL(redisUrl);\n return {\n host: url.hostname,\n port: parseInt(url.port) || 6379,\n password: url.password || undefined,\n database: parseInt(url.pathname.slice(1)) || 0,\n keyPrefix: process.env.REDIS_KEY_PREFIX || 'lyricnote:',\n };\n }\n\n return {\n host: process.env.REDIS_HOST || 'localhost',\n port: parseInt(process.env.REDIS_PORT || '6379'),\n password: process.env.REDIS_PASSWORD || undefined,\n database: parseInt(process.env.REDIS_DB || '0'),\n keyPrefix: process.env.REDIS_KEY_PREFIX || 'lyricnote:',\n };\n}\n\n/**\n * 生成数据库连接 URL\n */\nexport function buildDatabaseUrl(config: DatabaseConnectionConfig): string {\n const { host, port, database, username, password, ssl } = config;\n let url = 'postgresql://' + (username) + ':' + (password) + '@' + (host) + ':' + (port) + '/' + (database);\n\n if (ssl) {\n url += '?sslmode=require';\n }\n\n return url;\n}\n\n/**\n * 生成 Redis 连接 URL\n */\nexport function buildRedisUrl(config: RedisConnectionConfig): string {\n const { host, port, password, database } = config;\n let url = `redis://`;\n\n if (password) {\n url += ':' + (password) + '@';\n }\n\n url += (host) + ':' + (port);\n\n if (database && database !== 0) {\n url += '/' + (database);\n }\n\n return url;\n}\n\n/**\n * 验证数据库连接配置\n */\nexport function validateDatabaseConfig(config: DatabaseConnectionConfig): string[] {\n const errors: string[] = [];\n\n if (!config.host) errors.push('数据库主机地址不能为空');\n if (!config.port || config.port < 1 || config.port > 65535) errors.push('数据库端口号无效');\n if (!config.database) errors.push('数据库名不能为空');\n if (!config.username) errors.push('数据库用户名不能为空');\n if (!config.password) errors.push('数据库密码不能为空');\n\n return errors;\n}\n\n/**\n * 显示数据库连接配置(用于管理界面只读显示)\n * 敏感信息会被掩码处理\n */\nexport function getDatabaseConfigForDisplay(): Record<string, any> {\n const config = getDatabaseConfig();\n\n return {\n // 只显示非敏感信息\n host: config.host,\n port: config.port,\n database: config.database,\n username: config.username,\n password: config.password ? '***' : '',\n ssl: config.ssl || false,\n poolSize: config.poolSize,\n queryTimeout: config.queryTimeout,\n // 连接状态\n connectionString: 'postgresql://' + (config.username) + ':***@' + (config.host) + ':' + (config.port) + '/' + (config.database),\n source: process.env.DATABASE_URL ? 'DATABASE_URL' : 'Environment Variables',\n };\n}\n\n\n\n\n\n\n\n\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { D as DataTransformer, E as ExportConfig,
|
|
2
|
-
export { API_BASE_PATH, API_ENDPOINTS, DEFAULT_ADD_BOM, DEFAULT_CONFIG_CACHE_TTL, DEFAULT_CSV_DELIMITER, DEFAULT_ENCODING, DEFAULT_EXPORT_FORMAT, DEFAULT_EXPORT_TIMEOUT,
|
|
1
|
+
export { D as DEFAULT_FORMATTERS, a as DataTransformer, E as ExportConfig, b as ExportConfigError, c as ExportDataError, d as ExportError, e as ExportEvent, f as ExportEventListener, g as ExportEventType, h as ExportField, i as ExportFileError, j as ExportFilter, k as ExportFormat, l as ExportProgress, m as ExportRequest, n as ExportResult, o as ExportServiceError, p as ExportSort, q as ExportStatus, F as FieldAlignment, r as FieldMapper, s as FieldType, t as Formatter, G as GroupValueProcessing, u as GroupingConfig, v as GroupingField, w as GroupingMode, U as UniversalExportServiceConfig, V as Validator, x as applyFormatter, y as createExportError, z as escapeCSVField, A as estimateEndTime, B as formatDuration, C as formatErrorMessage, H as formatFileSize, I as generateExportFileName, J as getNestedValue, K as parseCSVField, L as sanitizeFileName, M as setNestedValue, N as validateExportConfig, O as validateExportRequest, P as validateFileName } from '../../utils-Dm3O1rAa.mjs';
|
|
2
|
+
export { API_BASE_PATH, API_ENDPOINTS, DEFAULT_ADD_BOM, DEFAULT_CONFIG_CACHE_TTL, DEFAULT_CSV_DELIMITER, DEFAULT_ENCODING, DEFAULT_EXPORT_FORMAT, DEFAULT_EXPORT_TIMEOUT, DEFAULT_MAX_CONCURRENT_EXPORTS, DEFAULT_MAX_FILE_SIZE, DEFAULT_MAX_ROWS, DEFAULT_RESULT_CACHE_TTL, ERROR_CODES, EXPORT_FORMAT_EXTENSIONS, EXPORT_FORMAT_MIME_TYPES, ExportConfigEditor, ExportConfigEditorProps, UNIVERSAL_EXPORT_NAME, UNIVERSAL_EXPORT_VERSION, UniversalExportButton, UniversalExportButtonProps, UniversalExportClient, UniversalExportClientConfig, createExportClient, universalExportClient } from '../universalExport/index.mjs';
|
|
3
3
|
import 'react';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { D as DataTransformer, E as ExportConfig,
|
|
2
|
-
export { API_BASE_PATH, API_ENDPOINTS, DEFAULT_ADD_BOM, DEFAULT_CONFIG_CACHE_TTL, DEFAULT_CSV_DELIMITER, DEFAULT_ENCODING, DEFAULT_EXPORT_FORMAT, DEFAULT_EXPORT_TIMEOUT,
|
|
1
|
+
export { D as DEFAULT_FORMATTERS, a as DataTransformer, E as ExportConfig, b as ExportConfigError, c as ExportDataError, d as ExportError, e as ExportEvent, f as ExportEventListener, g as ExportEventType, h as ExportField, i as ExportFileError, j as ExportFilter, k as ExportFormat, l as ExportProgress, m as ExportRequest, n as ExportResult, o as ExportServiceError, p as ExportSort, q as ExportStatus, F as FieldAlignment, r as FieldMapper, s as FieldType, t as Formatter, G as GroupValueProcessing, u as GroupingConfig, v as GroupingField, w as GroupingMode, U as UniversalExportServiceConfig, V as Validator, x as applyFormatter, y as createExportError, z as escapeCSVField, A as estimateEndTime, B as formatDuration, C as formatErrorMessage, H as formatFileSize, I as generateExportFileName, J as getNestedValue, K as parseCSVField, L as sanitizeFileName, M as setNestedValue, N as validateExportConfig, O as validateExportRequest, P as validateFileName } from '../../utils-Dm3O1rAa.js';
|
|
2
|
+
export { API_BASE_PATH, API_ENDPOINTS, DEFAULT_ADD_BOM, DEFAULT_CONFIG_CACHE_TTL, DEFAULT_CSV_DELIMITER, DEFAULT_ENCODING, DEFAULT_EXPORT_FORMAT, DEFAULT_EXPORT_TIMEOUT, DEFAULT_MAX_CONCURRENT_EXPORTS, DEFAULT_MAX_FILE_SIZE, DEFAULT_MAX_ROWS, DEFAULT_RESULT_CACHE_TTL, ERROR_CODES, EXPORT_FORMAT_EXTENSIONS, EXPORT_FORMAT_MIME_TYPES, ExportConfigEditor, ExportConfigEditorProps, UNIVERSAL_EXPORT_NAME, UNIVERSAL_EXPORT_VERSION, UniversalExportButton, UniversalExportButtonProps, UniversalExportClient, UniversalExportClientConfig, createExportClient, universalExportClient } from '../universalExport/index.js';
|
|
3
3
|
import 'react';
|