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
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'crypto';
|
|
2
|
-
import React, { useState, useMemo } from 'react';
|
|
3
|
-
|
|
4
|
-
// src/vocaloidBooth/core/code.ts
|
|
5
|
-
var AMBIGUOUS = /* @__PURE__ */ new Set(["0", "1", "I", "O", "L"]);
|
|
6
|
-
var ALPHABET = "ABCDEFGHJKMNPQRSTUVWXYZ23456789".split("").filter((c) => !AMBIGUOUS.has(c));
|
|
7
|
-
var normalizeMatchCode = (value) => value.trim().toUpperCase();
|
|
8
|
-
var generateMatchCode = async ({
|
|
9
|
-
length = 6,
|
|
10
|
-
maxAttempts = 20,
|
|
11
|
-
exists
|
|
12
|
-
}) => {
|
|
13
|
-
if (length < 4) {
|
|
14
|
-
throw new Error("Match code length must be at least 4");
|
|
15
|
-
}
|
|
16
|
-
for (let attempt = 0; attempt < maxAttempts; attempt += 1) {
|
|
17
|
-
const code = Array.from({ length }).map(() => ALPHABET[Math.floor(Math.random() * ALPHABET.length)]).join("");
|
|
18
|
-
if (!await exists(code)) {
|
|
19
|
-
return code;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
throw new Error("Unable to generate unique match code");
|
|
23
|
-
};
|
|
24
|
-
var BoothVaultService = class {
|
|
25
|
-
emitAudit(event) {
|
|
26
|
-
this.onAuditEvent?.({
|
|
27
|
-
...event,
|
|
28
|
-
at: (/* @__PURE__ */ new Date()).toISOString()
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
constructor(options) {
|
|
32
|
-
this.store = options.store;
|
|
33
|
-
this.codeLength = options.codeLength ?? 6;
|
|
34
|
-
this.defaultTtlHours = options.defaultTtlHours ?? 24 * 14;
|
|
35
|
-
this.baseDownloadPath = options.baseDownloadPath ?? "/redeem";
|
|
36
|
-
this.redeemGuard = options.redeemGuard;
|
|
37
|
-
this.onAuditEvent = options.onAuditEvent;
|
|
38
|
-
}
|
|
39
|
-
async createUpload(input) {
|
|
40
|
-
if (!input.files?.length) {
|
|
41
|
-
throw new Error("At least one file is required");
|
|
42
|
-
}
|
|
43
|
-
const now = /* @__PURE__ */ new Date();
|
|
44
|
-
const ttlHours = Math.max(1, input.ttlHours ?? this.defaultTtlHours);
|
|
45
|
-
const expiresAt = new Date(now.getTime() + ttlHours * 60 * 60 * 1e3);
|
|
46
|
-
const matchCode = await generateMatchCode({
|
|
47
|
-
length: this.codeLength,
|
|
48
|
-
exists: (code) => this.store.existsByMatchCode(code)
|
|
49
|
-
});
|
|
50
|
-
const record = {
|
|
51
|
-
id: randomUUID(),
|
|
52
|
-
boothId: input.boothId,
|
|
53
|
-
matchCode,
|
|
54
|
-
createdAt: now.toISOString(),
|
|
55
|
-
expiresAt: expiresAt.toISOString(),
|
|
56
|
-
files: input.files.map((file) => ({
|
|
57
|
-
...file,
|
|
58
|
-
id: randomUUID()
|
|
59
|
-
})),
|
|
60
|
-
metadata: input.metadata,
|
|
61
|
-
status: "active",
|
|
62
|
-
downloadCount: 0
|
|
63
|
-
};
|
|
64
|
-
await this.store.saveRecord(record);
|
|
65
|
-
this.emitAudit({
|
|
66
|
-
type: "upload.created",
|
|
67
|
-
boothId: record.boothId,
|
|
68
|
-
recordId: record.id,
|
|
69
|
-
matchCode: record.matchCode,
|
|
70
|
-
detail: { fileCount: record.files.length }
|
|
71
|
-
});
|
|
72
|
-
return {
|
|
73
|
-
record,
|
|
74
|
-
downloadUrlPath: `${this.baseDownloadPath}?code=${record.matchCode}`
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
async getByMatchCode(matchCode) {
|
|
78
|
-
const normalized = normalizeMatchCode(matchCode);
|
|
79
|
-
const record = await this.store.findByMatchCode(normalized);
|
|
80
|
-
if (!record) {
|
|
81
|
-
return null;
|
|
82
|
-
}
|
|
83
|
-
if (new Date(record.expiresAt).getTime() <= Date.now() && record.status === "active") {
|
|
84
|
-
return {
|
|
85
|
-
...record,
|
|
86
|
-
status: "expired"
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
return record;
|
|
90
|
-
}
|
|
91
|
-
async markDownloaded(recordId) {
|
|
92
|
-
await this.store.incrementDownloadCount(recordId);
|
|
93
|
-
}
|
|
94
|
-
async resolveDownloadFilesByCode(matchCode, options) {
|
|
95
|
-
const requesterKey = options?.requesterKey;
|
|
96
|
-
if (requesterKey && this.redeemGuard) {
|
|
97
|
-
try {
|
|
98
|
-
this.redeemGuard.assertAllowed(requesterKey);
|
|
99
|
-
} catch (error) {
|
|
100
|
-
this.emitAudit({
|
|
101
|
-
type: "redeem.blocked",
|
|
102
|
-
requesterKey,
|
|
103
|
-
matchCode,
|
|
104
|
-
detail: { message: error instanceof Error ? error.message : "blocked" }
|
|
105
|
-
});
|
|
106
|
-
throw error;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
const record = await this.getByMatchCode(matchCode);
|
|
110
|
-
const success = !!record && record.status === "active";
|
|
111
|
-
if (requesterKey && this.redeemGuard) {
|
|
112
|
-
this.redeemGuard.registerAttempt(requesterKey, success);
|
|
113
|
-
}
|
|
114
|
-
if (!success) {
|
|
115
|
-
this.emitAudit({
|
|
116
|
-
type: "redeem.failed",
|
|
117
|
-
requesterKey,
|
|
118
|
-
matchCode,
|
|
119
|
-
boothId: record?.boothId,
|
|
120
|
-
recordId: record?.id
|
|
121
|
-
});
|
|
122
|
-
return record;
|
|
123
|
-
}
|
|
124
|
-
await this.markDownloaded(record.id);
|
|
125
|
-
const reloaded = this.store.findByRecordId ? await this.store.findByRecordId(record.id) : await this.getByMatchCode(record.matchCode);
|
|
126
|
-
this.emitAudit({
|
|
127
|
-
type: "redeem.success",
|
|
128
|
-
requesterKey,
|
|
129
|
-
matchCode: record.matchCode,
|
|
130
|
-
boothId: record.boothId,
|
|
131
|
-
recordId: record.id
|
|
132
|
-
});
|
|
133
|
-
return reloaded ?? record;
|
|
134
|
-
}
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
// src/vocaloidBooth/core/config.ts
|
|
138
|
-
var defaultVocaloidBoothConfig = {
|
|
139
|
-
boothId: "default-booth",
|
|
140
|
-
title: "MMD / Vocaloid \u521B\u4F5C\u6587\u4EF6\u5BC4\u5B58\u7AD9",
|
|
141
|
-
description: "\u4E0A\u4F20\u521B\u4F5C\u6587\u4EF6\u5E76\u751F\u6210\u5339\u914D\u7801\uFF0C\u540E\u7EED\u53EF\u51ED\u7801\u4E0B\u8F7D",
|
|
142
|
-
defaultTtlHours: 24 * 14,
|
|
143
|
-
maxFiles: 20,
|
|
144
|
-
maxSingleFileSizeMb: 2048,
|
|
145
|
-
maxTotalFileSizeMb: 5120,
|
|
146
|
-
allowedExtensions: ["zip", "7z", "rar", "vsqx", "vpr", "vmd", "pmx", "wav", "mp3", "mp4"]
|
|
147
|
-
};
|
|
148
|
-
var normalizeVocaloidBoothConfig = (input) => {
|
|
149
|
-
const merged = {
|
|
150
|
-
...defaultVocaloidBoothConfig,
|
|
151
|
-
...input ?? {}
|
|
152
|
-
};
|
|
153
|
-
return {
|
|
154
|
-
...merged,
|
|
155
|
-
boothId: merged.boothId || defaultVocaloidBoothConfig.boothId,
|
|
156
|
-
title: merged.title || defaultVocaloidBoothConfig.title,
|
|
157
|
-
defaultTtlHours: Math.max(1, merged.defaultTtlHours),
|
|
158
|
-
maxFiles: Math.max(1, merged.maxFiles),
|
|
159
|
-
maxSingleFileSizeMb: Math.max(1, merged.maxSingleFileSizeMb),
|
|
160
|
-
maxTotalFileSizeMb: Math.max(1, merged.maxTotalFileSizeMb),
|
|
161
|
-
allowedExtensions: (merged.allowedExtensions?.length ? merged.allowedExtensions : defaultVocaloidBoothConfig.allowedExtensions).map((ext) => ext.toLowerCase())
|
|
162
|
-
};
|
|
163
|
-
};
|
|
164
|
-
var BoothUploadPanel = ({
|
|
165
|
-
boothId,
|
|
166
|
-
maxFiles = 10,
|
|
167
|
-
maxFileSizeMb = 2048,
|
|
168
|
-
accept,
|
|
169
|
-
uploading = false,
|
|
170
|
-
onSubmit
|
|
171
|
-
}) => {
|
|
172
|
-
const [files, setFiles] = useState([]);
|
|
173
|
-
const [nickname, setNickname] = useState("");
|
|
174
|
-
const [contactTail, setContactTail] = useState("");
|
|
175
|
-
const [ttlHours, setTtlHours] = useState(24 * 14);
|
|
176
|
-
const [error, setError] = useState(null);
|
|
177
|
-
const totalSizeMb = useMemo(
|
|
178
|
-
() => files.reduce((acc, file) => acc + file.size, 0) / 1024 / 1024,
|
|
179
|
-
[files]
|
|
180
|
-
);
|
|
181
|
-
const addFiles = (newFiles) => {
|
|
182
|
-
if (!newFiles) return;
|
|
183
|
-
const incoming = Array.from(newFiles);
|
|
184
|
-
const next = [...files, ...incoming];
|
|
185
|
-
if (next.length > maxFiles) {
|
|
186
|
-
setError(`\u6700\u591A\u4E0A\u4F20 ${maxFiles} \u4E2A\u6587\u4EF6`);
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const oversized = incoming.find((f) => f.size > maxFileSizeMb * 1024 * 1024);
|
|
190
|
-
if (oversized) {
|
|
191
|
-
setError(`\u6587\u4EF6 ${oversized.name} \u8D85\u8FC7 ${maxFileSizeMb}MB \u9650\u5236`);
|
|
192
|
-
return;
|
|
193
|
-
}
|
|
194
|
-
setError(null);
|
|
195
|
-
setFiles(next);
|
|
196
|
-
};
|
|
197
|
-
const removeFile = (name) => setFiles((prev) => prev.filter((f) => f.name !== name));
|
|
198
|
-
const handleSubmit = async () => {
|
|
199
|
-
if (files.length === 0) {
|
|
200
|
-
setError("\u8BF7\u5148\u9009\u62E9\u81F3\u5C11\u4E00\u4E2A\u6587\u4EF6");
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
setError(null);
|
|
204
|
-
await onSubmit({
|
|
205
|
-
boothId,
|
|
206
|
-
files,
|
|
207
|
-
nickname: nickname || void 0,
|
|
208
|
-
contactTail: contactTail || void 0,
|
|
209
|
-
ttlHours
|
|
210
|
-
});
|
|
211
|
-
};
|
|
212
|
-
return /* @__PURE__ */ React.createElement("div", { className: "rounded-xl border border-slate-200 bg-white p-4 shadow-sm" }, /* @__PURE__ */ React.createElement("h3", { className: "mb-3 text-lg font-semibold" }, "\u4E0A\u4F20\u521B\u4F5C\u6587\u4EF6"), /* @__PURE__ */ React.createElement(
|
|
213
|
-
"input",
|
|
214
|
-
{
|
|
215
|
-
type: "file",
|
|
216
|
-
multiple: true,
|
|
217
|
-
accept,
|
|
218
|
-
onChange: (e) => addFiles(e.target.files),
|
|
219
|
-
className: "mb-3 block w-full text-sm"
|
|
220
|
-
}
|
|
221
|
-
), /* @__PURE__ */ React.createElement("div", { className: "mb-3 grid grid-cols-1 gap-2 md:grid-cols-3" }, /* @__PURE__ */ React.createElement(
|
|
222
|
-
"input",
|
|
223
|
-
{
|
|
224
|
-
value: nickname,
|
|
225
|
-
onChange: (e) => setNickname(e.target.value),
|
|
226
|
-
placeholder: "\u6635\u79F0\uFF08\u53EF\u9009\uFF09",
|
|
227
|
-
className: "rounded-md border px-3 py-2 text-sm"
|
|
228
|
-
}
|
|
229
|
-
), /* @__PURE__ */ React.createElement(
|
|
230
|
-
"input",
|
|
231
|
-
{
|
|
232
|
-
value: contactTail,
|
|
233
|
-
onChange: (e) => setContactTail(e.target.value),
|
|
234
|
-
placeholder: "\u8054\u7CFB\u65B9\u5F0F\u540E4\u4F4D\uFF08\u53EF\u9009\uFF09",
|
|
235
|
-
className: "rounded-md border px-3 py-2 text-sm"
|
|
236
|
-
}
|
|
237
|
-
), /* @__PURE__ */ React.createElement(
|
|
238
|
-
"input",
|
|
239
|
-
{
|
|
240
|
-
value: ttlHours,
|
|
241
|
-
type: "number",
|
|
242
|
-
min: 1,
|
|
243
|
-
onChange: (e) => setTtlHours(Number(e.target.value) || 24),
|
|
244
|
-
placeholder: "\u4FDD\u5B58\u65F6\u957F\uFF08\u5C0F\u65F6\uFF09",
|
|
245
|
-
className: "rounded-md border px-3 py-2 text-sm"
|
|
246
|
-
}
|
|
247
|
-
)), /* @__PURE__ */ React.createElement("div", { className: "mb-3 text-xs text-slate-500" }, "\u5DF2\u9009 ", files.length, " \u4E2A\u6587\u4EF6\uFF0C\u603B\u8BA1 ", totalSizeMb.toFixed(2), " MB"), /* @__PURE__ */ React.createElement("ul", { className: "mb-3 max-h-40 overflow-auto rounded-md border border-slate-100 p-2 text-sm" }, files.length === 0 && /* @__PURE__ */ React.createElement("li", { className: "text-slate-400" }, "\u5C1A\u672A\u9009\u62E9\u6587\u4EF6"), files.map((file) => /* @__PURE__ */ React.createElement("li", { key: `${file.name}-${file.size}`, className: "mb-1 flex items-center justify-between gap-2" }, /* @__PURE__ */ React.createElement("span", { className: "truncate" }, file.name), /* @__PURE__ */ React.createElement("button", { type: "button", className: "text-rose-500", onClick: () => removeFile(file.name) }, "\u79FB\u9664")))), error && /* @__PURE__ */ React.createElement("div", { className: "mb-3 rounded-md bg-rose-50 p-2 text-sm text-rose-700" }, error), /* @__PURE__ */ React.createElement(
|
|
248
|
-
"button",
|
|
249
|
-
{
|
|
250
|
-
type: "button",
|
|
251
|
-
disabled: uploading,
|
|
252
|
-
onClick: handleSubmit,
|
|
253
|
-
className: "rounded-md bg-indigo-600 px-3 py-2 text-white disabled:cursor-not-allowed disabled:opacity-50"
|
|
254
|
-
},
|
|
255
|
-
uploading ? "\u4E0A\u4F20\u4E2D..." : "\u5F00\u59CB\u4E0A\u4F20"
|
|
256
|
-
));
|
|
257
|
-
};
|
|
258
|
-
var BoothRedeemPanel = ({ onRedeem, loading }) => {
|
|
259
|
-
const [matchCode, setMatchCode] = useState("");
|
|
260
|
-
const [record, setRecord] = useState(null);
|
|
261
|
-
const [error, setError] = useState(null);
|
|
262
|
-
const handleRedeem = async () => {
|
|
263
|
-
setError(null);
|
|
264
|
-
const result = await onRedeem(matchCode.trim());
|
|
265
|
-
if (!result) {
|
|
266
|
-
setRecord(null);
|
|
267
|
-
setError("\u5339\u914D\u7801\u4E0D\u5B58\u5728\uFF0C\u8BF7\u68C0\u67E5\u540E\u91CD\u8BD5");
|
|
268
|
-
return;
|
|
269
|
-
}
|
|
270
|
-
if (result.status !== "active") {
|
|
271
|
-
setRecord(result);
|
|
272
|
-
setError("\u5339\u914D\u7801\u5DF2\u8FC7\u671F\u6216\u5931\u6548");
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
setRecord(result);
|
|
276
|
-
};
|
|
277
|
-
return /* @__PURE__ */ React.createElement("div", { className: "rounded-xl border border-slate-200 bg-white p-4 shadow-sm" }, /* @__PURE__ */ React.createElement("h3", { className: "mb-3 text-lg font-semibold" }, "\u51ED\u5339\u914D\u7801\u4E0B\u8F7D"), /* @__PURE__ */ React.createElement("div", { className: "mb-3 flex gap-2" }, /* @__PURE__ */ React.createElement(
|
|
278
|
-
"input",
|
|
279
|
-
{
|
|
280
|
-
value: matchCode,
|
|
281
|
-
onChange: (e) => setMatchCode(e.target.value.toUpperCase()),
|
|
282
|
-
placeholder: "\u8F93\u5165\u5339\u914D\u7801\uFF08\u5982 A7K9Q2\uFF09",
|
|
283
|
-
className: "w-full rounded-md border px-3 py-2 text-sm uppercase"
|
|
284
|
-
}
|
|
285
|
-
), /* @__PURE__ */ React.createElement(
|
|
286
|
-
"button",
|
|
287
|
-
{
|
|
288
|
-
type: "button",
|
|
289
|
-
onClick: handleRedeem,
|
|
290
|
-
disabled: loading,
|
|
291
|
-
className: "rounded-md bg-slate-900 px-3 py-2 text-white disabled:opacity-50"
|
|
292
|
-
},
|
|
293
|
-
"\u67E5\u8BE2"
|
|
294
|
-
)), error && /* @__PURE__ */ React.createElement("div", { className: "mb-3 rounded-md bg-amber-50 p-2 text-sm text-amber-700" }, error), record && /* @__PURE__ */ React.createElement("div", { className: "rounded-md border border-slate-100 p-3" }, /* @__PURE__ */ React.createElement("div", { className: "mb-2 text-xs text-slate-500" }, "\u5171 ", record.files.length, " \u4E2A\u6587\u4EF6"), /* @__PURE__ */ React.createElement("ul", { className: "space-y-1 text-sm" }, record.files.map((file) => /* @__PURE__ */ React.createElement("li", { key: file.id, className: "flex items-center justify-between gap-2" }, /* @__PURE__ */ React.createElement("span", { className: "truncate" }, file.fileName), /* @__PURE__ */ React.createElement("a", { href: file.objectKey, className: "text-indigo-600 hover:underline", download: true }, "\u4E0B\u8F7D"))))));
|
|
295
|
-
};
|
|
296
|
-
var BoothSuccessCard = ({
|
|
297
|
-
matchCode,
|
|
298
|
-
expiresAt,
|
|
299
|
-
downloadUrlPath,
|
|
300
|
-
onCopyCode,
|
|
301
|
-
className
|
|
302
|
-
}) => {
|
|
303
|
-
const handleCopy = async () => {
|
|
304
|
-
try {
|
|
305
|
-
await navigator.clipboard.writeText(matchCode);
|
|
306
|
-
} catch {
|
|
307
|
-
}
|
|
308
|
-
onCopyCode?.(matchCode);
|
|
309
|
-
};
|
|
310
|
-
return /* @__PURE__ */ React.createElement("div", { className: `rounded-xl border border-emerald-200 bg-emerald-50 p-4 text-sm ${className ?? ""}` }, /* @__PURE__ */ React.createElement("div", { className: "mb-2 text-xs text-emerald-800" }, "\u4E0A\u4F20\u5B8C\u6210\uFF0C\u5DF2\u751F\u6210\u5339\u914D\u7801"), /* @__PURE__ */ React.createElement("div", { className: "mb-3 text-2xl font-bold tracking-widest text-emerald-900" }, matchCode), /* @__PURE__ */ React.createElement("div", { className: "mb-3 text-xs text-emerald-800" }, "\u8FC7\u671F\u65F6\u95F4\uFF1A", new Date(expiresAt).toLocaleString()), /* @__PURE__ */ React.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React.createElement(
|
|
311
|
-
"button",
|
|
312
|
-
{
|
|
313
|
-
type: "button",
|
|
314
|
-
onClick: handleCopy,
|
|
315
|
-
className: "rounded-md bg-emerald-600 px-3 py-2 text-white hover:bg-emerald-700"
|
|
316
|
-
},
|
|
317
|
-
"\u590D\u5236\u5339\u914D\u7801"
|
|
318
|
-
), /* @__PURE__ */ React.createElement(
|
|
319
|
-
"a",
|
|
320
|
-
{
|
|
321
|
-
href: downloadUrlPath,
|
|
322
|
-
className: "rounded-md border border-emerald-400 bg-white px-3 py-2 text-emerald-700 hover:bg-emerald-100"
|
|
323
|
-
},
|
|
324
|
-
"\u6253\u5F00\u4E0B\u8F7D\u9875"
|
|
325
|
-
)));
|
|
326
|
-
};
|
|
327
|
-
var BoothConfigPage = ({ initialConfig, onSave }) => {
|
|
328
|
-
const [config, setConfig] = useState(
|
|
329
|
-
normalizeVocaloidBoothConfig(initialConfig)
|
|
330
|
-
);
|
|
331
|
-
const [saving, setSaving] = useState(false);
|
|
332
|
-
const extText = useMemo(() => config.allowedExtensions.join(","), [config.allowedExtensions]);
|
|
333
|
-
const update = (key, value) => setConfig((prev) => ({ ...prev, [key]: value }));
|
|
334
|
-
const save = async () => {
|
|
335
|
-
setSaving(true);
|
|
336
|
-
try {
|
|
337
|
-
const normalized = normalizeVocaloidBoothConfig(config);
|
|
338
|
-
setConfig(normalized);
|
|
339
|
-
await onSave?.(normalized);
|
|
340
|
-
} finally {
|
|
341
|
-
setSaving(false);
|
|
342
|
-
}
|
|
343
|
-
};
|
|
344
|
-
const reset = () => setConfig(defaultVocaloidBoothConfig);
|
|
345
|
-
return /* @__PURE__ */ React.createElement("div", { className: "rounded-xl border border-slate-200 bg-white p-4 shadow-sm space-y-3" }, /* @__PURE__ */ React.createElement("h3", { className: "text-lg font-semibold" }, "Vocaloid Booth \u914D\u7F6E\u9875"), /* @__PURE__ */ React.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-3 text-sm" }, /* @__PURE__ */ React.createElement("input", { className: "rounded border px-3 py-2", value: config.boothId, onChange: (e) => update("boothId", e.target.value), placeholder: "boothId" }), /* @__PURE__ */ React.createElement("input", { className: "rounded border px-3 py-2", value: config.title, onChange: (e) => update("title", e.target.value), placeholder: "\u6807\u9898" }), /* @__PURE__ */ React.createElement("input", { className: "rounded border px-3 py-2 md:col-span-2", value: config.description ?? "", onChange: (e) => update("description", e.target.value), placeholder: "\u63CF\u8FF0" }), /* @__PURE__ */ React.createElement("input", { className: "rounded border px-3 py-2", type: "number", value: config.defaultTtlHours, onChange: (e) => update("defaultTtlHours", Number(e.target.value) || 1), placeholder: "\u9ED8\u8BA4\u4FDD\u5B58\u65F6\u957F\uFF08\u5C0F\u65F6\uFF09" }), /* @__PURE__ */ React.createElement("input", { className: "rounded border px-3 py-2", type: "number", value: config.maxFiles, onChange: (e) => update("maxFiles", Number(e.target.value) || 1), placeholder: "\u6700\u5927\u6587\u4EF6\u6570" }), /* @__PURE__ */ React.createElement("input", { className: "rounded border px-3 py-2", type: "number", value: config.maxSingleFileSizeMb, onChange: (e) => update("maxSingleFileSizeMb", Number(e.target.value) || 1), placeholder: "\u5355\u6587\u4EF6\u4E0A\u9650 MB" }), /* @__PURE__ */ React.createElement("input", { className: "rounded border px-3 py-2", type: "number", value: config.maxTotalFileSizeMb, onChange: (e) => update("maxTotalFileSizeMb", Number(e.target.value) || 1), placeholder: "\u603B\u5927\u5C0F\u4E0A\u9650 MB" }), /* @__PURE__ */ React.createElement(
|
|
346
|
-
"textarea",
|
|
347
|
-
{
|
|
348
|
-
className: "rounded border px-3 py-2 md:col-span-2",
|
|
349
|
-
rows: 3,
|
|
350
|
-
value: extText,
|
|
351
|
-
onChange: (e) => update(
|
|
352
|
-
"allowedExtensions",
|
|
353
|
-
e.target.value.split(",").map((v) => v.trim()).filter(Boolean)
|
|
354
|
-
),
|
|
355
|
-
placeholder: "\u5141\u8BB8\u540E\u7F00\uFF0C\u9017\u53F7\u5206\u9694"
|
|
356
|
-
}
|
|
357
|
-
)), /* @__PURE__ */ React.createElement("div", { className: "flex gap-2" }, /* @__PURE__ */ React.createElement("button", { className: "rounded bg-indigo-600 px-3 py-2 text-white", disabled: saving, onClick: save }, saving ? "\u4FDD\u5B58\u4E2D..." : "\u4FDD\u5B58\u914D\u7F6E"), /* @__PURE__ */ React.createElement("button", { className: "rounded border px-3 py-2", onClick: reset }, "\u6062\u590D\u9ED8\u8BA4")));
|
|
358
|
-
};
|
|
359
|
-
|
|
360
|
-
export { BoothConfigPage, BoothRedeemPanel, BoothSuccessCard, BoothUploadPanel, BoothVaultService, defaultVocaloidBoothConfig, generateMatchCode, normalizeMatchCode, normalizeVocaloidBoothConfig };
|
|
361
|
-
//# sourceMappingURL=index.mjs.map
|
|
362
|
-
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/vocaloidBooth/core/code.ts","../../../src/vocaloidBooth/core/boothVaultService.ts","../../../src/vocaloidBooth/core/config.ts","../../../src/vocaloidBooth/components/BoothUploadPanel.tsx","../../../src/vocaloidBooth/components/BoothRedeemPanel.tsx","../../../src/vocaloidBooth/components/BoothSuccessCard.tsx","../../../src/vocaloidBooth/components/BoothConfigPage.tsx"],"names":["useState","React","useMemo"],"mappings":";;;;AAAA,IAAM,SAAA,uBAAgB,GAAA,CAAI,CAAC,KAAK,GAAA,EAAK,GAAA,EAAK,GAAA,EAAK,GAAG,CAAC,CAAA;AACnD,IAAM,QAAA,GAAW,iCAAA,CAAkC,KAAA,CAAM,EAAE,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,SAAA,CAAU,GAAA,CAAI,CAAC,CAAC,CAAA;AAQrF,IAAM,qBAAqB,CAAC,KAAA,KAA0B,KAAA,CAAM,IAAA,GAAO,WAAA;AAEnE,IAAM,oBAAoB,OAAO;AAAA,EACtC,MAAA,GAAS,CAAA;AAAA,EACT,WAAA,GAAc,EAAA;AAAA,EACd;AACF,CAAA,KAAiD;AAC/C,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AAEA,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,WAAA,EAAa,WAAW,CAAA,EAAG;AACzD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,EAAE,QAAQ,CAAA,CAC/B,IAAI,MAAM,QAAA,CAAS,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,GAAI,QAAA,CAAS,MAAM,CAAC,CAAC,CAAA,CAC/D,IAAA,CAAK,EAAE,CAAA;AAGV,IAAA,IAAI,CAAE,MAAM,MAAA,CAAO,IAAI,CAAA,EAAI;AACzB,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AACxD;ACRO,IAAM,oBAAN,MAAwB;AAAA,EACrB,UAAU,KAAA,EAA0C;AAC1D,IAAA,IAAA,CAAK,YAAA,GAAe;AAAA,MAClB,GAAG,KAAA;AAAA,MACH,EAAA,EAAA,iBAAI,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,KAC5B,CAAA;AAAA,EACH;AAAA,EAQA,YAAY,OAAA,EAAmC;AAC7C,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA;AACrB,IAAA,IAAA,CAAK,UAAA,GAAa,QAAQ,UAAA,IAAc,CAAA;AACxC,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA,CAAQ,eAAA,IAAmB,EAAA,GAAK,EAAA;AACvD,IAAA,IAAA,CAAK,gBAAA,GAAmB,QAAQ,gBAAA,IAAoB,SAAA;AACpD,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,eAAe,OAAA,CAAQ,YAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,aAAa,KAAA,EAAiE;AAClF,IAAA,IAAI,CAAC,KAAA,CAAM,KAAA,EAAO,MAAA,EAAQ;AACxB,MAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,IACjD;AAEA,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,QAAA,IAAY,KAAK,eAAe,CAAA;AACnE,IAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,GAAA,CAAI,SAAQ,GAAI,QAAA,GAAW,EAAA,GAAK,EAAA,GAAK,GAAI,CAAA;AAEpE,IAAA,MAAM,SAAA,GAAY,MAAM,iBAAA,CAAkB;AAAA,MACxC,QAAQ,IAAA,CAAK,UAAA;AAAA,MACb,QAAQ,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,kBAAkB,IAAI;AAAA,KACpD,CAAA;AAED,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,IAAI,UAAA,EAAW;AAAA,MACf,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,SAAA;AAAA,MACA,SAAA,EAAW,IAAI,WAAA,EAAY;AAAA,MAC3B,SAAA,EAAW,UAAU,WAAA,EAAY;AAAA,MACjC,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,QAChC,GAAG,IAAA;AAAA,QACH,IAAI,UAAA;AAAW,OACjB,CAAE,CAAA;AAAA,MACF,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,MAAA,EAAQ,QAAA;AAAA,MACR,aAAA,EAAe;AAAA,KACjB;AAEA,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA;AAClC,IAAA,IAAA,CAAK,SAAA,CAAU;AAAA,MACb,IAAA,EAAM,gBAAA;AAAA,MACN,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO,EAAA;AAAA,MACjB,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,MAAA,EAAQ,EAAE,SAAA,EAAW,MAAA,CAAO,MAAM,MAAA;AAAO,KAC1C,CAAA;AAED,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,iBAAiB,CAAA,EAAG,IAAA,CAAK,gBAAgB,CAAA,MAAA,EAAS,OAAO,SAAS,CAAA;AAAA,KACpE;AAAA,EACF;AAAA,EAEA,MAAM,eAAe,SAAA,EAAsD;AACzE,IAAA,MAAM,UAAA,GAAa,mBAAmB,SAAS,CAAA;AAC/C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,KAAA,CAAM,gBAAgB,UAAU,CAAA;AAE1D,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI,IAAI,IAAA,CAAK,MAAA,CAAO,SAAS,CAAA,CAAE,OAAA,EAAQ,IAAK,IAAA,CAAK,GAAA,EAAI,IAAK,MAAA,CAAO,MAAA,KAAW,QAAA,EAAU;AACpF,MAAA,OAAO;AAAA,QACL,GAAG,MAAA;AAAA,QACH,MAAA,EAAQ;AAAA,OACV;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,eAAe,QAAA,EAAiC;AACpD,IAAA,MAAM,IAAA,CAAK,KAAA,CAAM,sBAAA,CAAuB,QAAQ,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,0BAAA,CACJ,SAAA,EACA,OAAA,EACmC;AACnC,IAAA,MAAM,eAAe,OAAA,EAAS,YAAA;AAC9B,IAAA,IAAI,YAAA,IAAgB,KAAK,WAAA,EAAa;AACpC,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,WAAA,CAAY,cAAc,YAAY,CAAA;AAAA,MAC7C,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,SAAA,CAAU;AAAA,UACb,IAAA,EAAM,gBAAA;AAAA,UACN,YAAA;AAAA,UACA,SAAA;AAAA,UACA,QAAQ,EAAE,OAAA,EAAS,iBAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,SAAA;AAAU,SACvE,CAAA;AACD,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AAClD,IAAA,MAAM,OAAA,GAAU,CAAC,CAAC,MAAA,IAAU,OAAO,MAAA,KAAW,QAAA;AAE9C,IAAA,IAAI,YAAA,IAAgB,KAAK,WAAA,EAAa;AACpC,MAAA,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,YAAA,EAAc,OAAO,CAAA;AAAA,IACxD;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,IAAA,CAAK,SAAA,CAAU;AAAA,QACb,IAAA,EAAM,eAAA;AAAA,QACN,YAAA;AAAA,QACA,SAAA;AAAA,QACA,SAAS,MAAA,EAAQ,OAAA;AAAA,QACjB,UAAU,MAAA,EAAQ;AAAA,OACnB,CAAA;AACD,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,MAAA,CAAO,EAAE,CAAA;AACnC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,cAAA,GACxB,MAAM,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,MAAA,CAAO,EAAE,CAAA,GACzC,MAAM,IAAA,CAAK,cAAA,CAAe,OAAO,SAAS,CAAA;AAE9C,IAAA,IAAA,CAAK,SAAA,CAAU;AAAA,MACb,IAAA,EAAM,gBAAA;AAAA,MACN,YAAA;AAAA,MACA,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AAED,IAAA,OAAO,QAAA,IAAY,MAAA;AAAA,EACrB;AACF;;;AC1JO,IAAM,0BAAA,GAAkD;AAAA,EAC7D,OAAA,EAAS,eAAA;AAAA,EACT,KAAA,EAAO,2DAAA;AAAA,EACP,WAAA,EAAa,0HAAA;AAAA,EACb,iBAAiB,EAAA,GAAK,EAAA;AAAA,EACtB,QAAA,EAAU,EAAA;AAAA,EACV,mBAAA,EAAqB,IAAA;AAAA,EACrB,kBAAA,EAAoB,IAAA;AAAA,EACpB,iBAAA,EAAmB,CAAC,KAAA,EAAO,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAA,EAAO,KAAK;AAC1F;AAEO,IAAM,4BAAA,GAA+B,CAC1C,KAAA,KACwB;AACxB,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,GAAG,0BAAA;AAAA,IACH,GAAI,SAAS;AAAC,GAChB;AAEA,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,OAAA,EAAS,MAAA,CAAO,OAAA,IAAW,0BAAA,CAA2B,OAAA;AAAA,IACtD,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,0BAAA,CAA2B,KAAA;AAAA,IAClD,eAAA,EAAiB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,eAAe,CAAA;AAAA,IACnD,QAAA,EAAU,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,QAAQ,CAAA;AAAA,IACrC,mBAAA,EAAqB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,mBAAmB,CAAA;AAAA,IAC3D,kBAAA,EAAoB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,kBAAkB,CAAA;AAAA,IACzD,iBAAA,EAAA,CAAoB,MAAA,CAAO,iBAAA,EAAmB,MAAA,GAC1C,MAAA,CAAO,iBAAA,GACP,0BAAA,CAA2B,iBAAA,EAC7B,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,aAAa;AAAA,GAClC;AACF;ACtBO,IAAM,mBAAoD,CAAC;AAAA,EAChE,OAAA;AAAA,EACA,QAAA,GAAW,EAAA;AAAA,EACX,aAAA,GAAgB,IAAA;AAAA,EAChB,MAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,CAAiB,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,QAAA,CAAS,KAAK,EAAE,CAAA;AAChD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,WAAA,GAAc,OAAA;AAAA,IAClB,MAAM,KAAA,CAAM,MAAA,CAAO,CAAC,GAAA,EAAK,IAAA,KAAS,GAAA,GAAM,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA,GAAI,IAAA,GAAO,IAAA;AAAA,IAC/D,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,QAAA,KAA8B;AAC9C,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACpC,IAAA,MAAM,IAAA,GAAO,CAAC,GAAG,KAAA,EAAO,GAAG,QAAQ,CAAA;AAEnC,IAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AAC1B,MAAA,QAAA,CAAS,CAAA,yBAAA,EAAQ,QAAQ,CAAA,mBAAA,CAAM,CAAA;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,IAAA,GAAO,aAAA,GAAgB,IAAA,GAAO,IAAI,CAAA;AAC3E,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,QAAA,CAAS,CAAA,aAAA,EAAM,SAAA,CAAU,IAAI,CAAA,cAAA,EAAO,aAAa,CAAA,eAAA,CAAO,CAAA;AACxD,MAAA;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,QAAA,CAAS,IAAI,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAAiB,QAAA,CAAS,CAAC,IAAA,KAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAC,CAAA;AAE3F,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,QAAA,CAAS,8DAAY,CAAA;AACrB,MAAA;AAAA,IACF;AACA,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,MAAM,QAAA,CAAS;AAAA,MACb,OAAA;AAAA,MACA,KAAA;AAAA,MACA,UAAU,QAAA,IAAY,MAAA;AAAA,MACtB,aAAa,WAAA,IAAe,MAAA;AAAA,MAC5B;AAAA,KACD,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,uBACE,KAAA,CAAA,aAAA,CAAC,SAAI,SAAA,EAAU,2DAAA,EAAA,sCACZ,IAAA,EAAA,EAAG,SAAA,EAAU,4BAAA,EAAA,EAA6B,sCAAM,CAAA,kBAEjD,KAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,MAAA;AAAA,MACL,QAAA,EAAQ,IAAA;AAAA,MACR,MAAA;AAAA,MACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACxC,SAAA,EAAU;AAAA;AAAA,GACZ,kBAEA,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAAA,kBACb,KAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,QAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAC3C,WAAA,EAAY,sCAAA;AAAA,MACZ,SAAA,EAAU;AAAA;AAAA,GACZ,kBACA,KAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,WAAA;AAAA,MACP,UAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MAC9C,WAAA,EAAY,+DAAA;AAAA,MACZ,SAAA,EAAU;AAAA;AAAA,GACZ,kBACA,KAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,QAAA;AAAA,MACP,IAAA,EAAK,QAAA;AAAA,MACL,GAAA,EAAK,CAAA;AAAA,MACL,QAAA,EAAU,CAAC,CAAA,KAAM,WAAA,CAAY,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,EAAE,CAAA;AAAA,MACzD,WAAA,EAAY,kDAAA;AAAA,MACZ,SAAA,EAAU;AAAA;AAAA,GAEd,CAAA,kBAEA,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EAAA,EAA8B,eAAA,EACvC,KAAA,CAAM,MAAA,EAAO,0CAAS,WAAA,CAAY,OAAA,CAAQ,CAAC,CAAA,EAAE,KACnD,CAAA,kBAEA,KAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,gFACX,KAAA,CAAM,MAAA,KAAW,CAAA,oBAAK,KAAA,CAAA,aAAA,CAAC,QAAG,SAAA,EAAU,gBAAA,EAAA,EAAiB,sCAAM,CAAA,EAC3D,MAAM,GAAA,CAAI,CAAC,IAAA,qBACV,KAAA,CAAA,aAAA,CAAC,QAAG,GAAA,EAAK,CAAA,EAAG,IAAA,CAAK,IAAI,IAAI,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,SAAA,EAAU,kEAC9C,KAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,UAAA,EAAA,EAAY,KAAK,IAAK,CAAA,kBACtC,KAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAO,MAAK,QAAA,EAAS,SAAA,EAAU,eAAA,EAAgB,OAAA,EAAS,MAAM,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EAAA,EAAG,cAEtF,CACF,CACD,CACH,CAAA,EAEC,yBAAS,KAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EAAA,EAAwD,KAAM,CAAA,kBAEvF,KAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,QAAA,EAAU,SAAA;AAAA,MACV,OAAA,EAAS,YAAA;AAAA,MACT,SAAA,EAAU;AAAA,KAAA;AAAA,IAET,YAAY,uBAAA,GAAW;AAAA,GAE5B,CAAA;AAEJ;AClIO,IAAM,gBAAA,GAAoD,CAAC,EAAE,QAAA,EAAU,SAAQ,KAAM;AAC1F,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAmC,IAAI,CAAA;AACnE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAEtD,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,SAAA,CAAU,MAAM,CAAA;AAE9C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,QAAA,CAAS,gFAAe,CAAA;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAC9B,MAAA,SAAA,CAAU,MAAM,CAAA;AAChB,MAAA,QAAA,CAAS,wDAAW,CAAA;AACpB,MAAA;AAAA,IACF;AAEA,IAAA,SAAA,CAAU,MAAM,CAAA;AAAA,EAClB,CAAA;AAEA,EAAA,uBACEC,MAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2DAAA,EAAA,kBACbA,MAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,4BAAA,EAAA,EAA6B,sCAAM,mBAEjDA,KAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAA,kBACbA,KAAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,SAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,EAAE,MAAA,CAAO,KAAA,CAAM,aAAa,CAAA;AAAA,MAC1D,WAAA,EAAY,yDAAA;AAAA,MACZ,SAAA,EAAU;AAAA;AAAA,GACZ,kBACAA,KAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,YAAA;AAAA,MACT,QAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAU;AAAA,KAAA;AAAA,IACX;AAAA,GAGH,CAAA,EAEC,KAAA,oBAASA,MAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EAAA,EAA0D,KAAM,CAAA,EAExF,MAAA,oBACCA,KAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAA,kBACbA,MAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAAA,EAA8B,WAAG,MAAA,CAAO,KAAA,CAAM,MAAA,EAAO,qBAAI,mBACxEA,KAAAA,CAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,mBAAA,EAAA,EACX,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,qBACjBA,KAAAA,CAAA,aAAA,CAAC,QAAG,GAAA,EAAK,IAAA,CAAK,EAAA,EAAI,SAAA,EAAU,6DAC1BA,KAAAA,CAAA,aAAA,CAAC,MAAA,EAAA,EAAK,WAAU,UAAA,EAAA,EAAY,IAAA,CAAK,QAAS,CAAA,kBAC1CA,KAAAA,CAAA,aAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAM,KAAK,SAAA,EAAW,SAAA,EAAU,iCAAA,EAAkC,QAAA,EAAQ,QAAC,cAE9E,CACF,CACD,CACH,CACF,CAEJ,CAAA;AAEJ;AC9DO,IAAM,mBAAoD,CAAC;AAAA,EAChE,SAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,SAAS,CAAA;AAAA,IAC/C,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,UAAA,GAAa,SAAS,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,uBACEA,MAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAW,CAAA,+DAAA,EAAkE,SAAA,IAAa,EAAE,CAAA,CAAA,EAAA,kBAC/FA,MAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAA,EAAgC,oEAAW,mBAC1DA,KAAAA,CAAA,aAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EAAA,EAA4D,SAAU,CAAA,kBACrFA,MAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAA,EAAgC,gCAAA,EAAM,IAAI,IAAA,CAAK,SAAS,EAAE,cAAA,EAAiB,mBAC1FA,KAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAA,kBACbA,KAAAA,CAAA,aAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,QAAA;AAAA,MACL,OAAA,EAAS,UAAA;AAAA,MACT,SAAA,EAAU;AAAA,KAAA;AAAA,IACX;AAAA,GAED,kBACAA,KAAAA,CAAA,aAAA;AAAA,IAAC,GAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAM,eAAA;AAAA,MACN,SAAA,EAAU;AAAA,KAAA;AAAA,IACX;AAAA,GAGH,CACF,CAAA;AAEJ;ACpCO,IAAM,eAAA,GAAkD,CAAC,EAAE,aAAA,EAAe,QAAO,KAAM;AAC5F,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,QAAAA;AAAA,IAC1B,6BAA6B,aAAa;AAAA,GAC5C;AACA,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,OAAA,GAAUE,OAAAA,CAAQ,MAAM,MAAA,CAAO,iBAAA,CAAkB,IAAA,CAAK,GAAG,CAAA,EAAG,CAAC,MAAA,CAAO,iBAAiB,CAAC,CAAA;AAE5F,EAAA,MAAM,MAAA,GAAS,CAAsC,GAAA,EAAQ,KAAA,KAC3D,UAAU,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,CAAC,GAAG,GAAG,OAAM,CAAE,CAAA;AAEjD,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,6BAA6B,MAAM,CAAA;AACtD,MAAA,SAAA,CAAU,UAAU,CAAA;AACpB,MAAA,MAAM,SAAS,UAAU,CAAA;AAAA,IAC3B,CAAA,SAAE;AACA,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,CAAU,0BAA0B,CAAA;AAExD,EAAA,uBACED,MAAA,aAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qEAAA,EAAA,kBACbA,MAAA,aAAA,CAAC,IAAA,EAAA,EAAG,WAAU,uBAAA,EAAA,EAAwB,mCAAkB,mBAExDA,KAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEACbA,KAAAA,CAAA,cAAC,OAAA,EAAA,EAAM,SAAA,EAAU,4BAA2B,KAAA,EAAO,MAAA,CAAO,SAAS,QAAA,EAAU,CAAC,MAAM,MAAA,CAAO,SAAA,EAAW,EAAE,MAAA,CAAO,KAAK,GAAG,WAAA,EAAY,SAAA,EAAU,mBAC7IA,KAAAA,CAAA,cAAC,OAAA,EAAA,EAAM,SAAA,EAAU,4BAA2B,KAAA,EAAO,MAAA,CAAO,OAAO,QAAA,EAAU,CAAC,MAAM,MAAA,CAAO,OAAA,EAAS,EAAE,MAAA,CAAO,KAAK,GAAG,WAAA,EAAY,cAAA,EAAK,mBACpIA,KAAAA,CAAA,cAAC,OAAA,EAAA,EAAM,SAAA,EAAU,0CAAyC,KAAA,EAAO,MAAA,CAAO,eAAe,EAAA,EAAI,QAAA,EAAU,CAAC,CAAA,KAAM,MAAA,CAAO,eAAe,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,WAAA,EAAY,gBAAK,CAAA,kBAEpKA,MAAA,aAAA,CAAC,OAAA,EAAA,EAAM,WAAU,0BAAA,EAA2B,IAAA,EAAK,UAAS,KAAA,EAAO,MAAA,CAAO,iBAAiB,QAAA,EAAU,CAAC,MAAM,MAAA,CAAO,iBAAA,EAAmB,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,GAAG,WAAA,EAAY,8DAAA,EAAa,mBAC3LA,KAAAA,CAAA,cAAC,OAAA,EAAA,EAAM,SAAA,EAAU,4BAA2B,IAAA,EAAK,QAAA,EAAS,OAAO,MAAA,CAAO,QAAA,EAAU,UAAU,CAAC,CAAA,KAAM,OAAO,UAAA,EAAY,MAAA,CAAO,EAAE,MAAA,CAAO,KAAK,KAAK,CAAC,CAAA,EAAG,aAAY,gCAAA,EAAQ,CAAA,kBACxKA,KAAAA,CAAA,aAAA,CAAC,WAAM,SAAA,EAAU,0BAAA,EAA2B,MAAK,QAAA,EAAS,KAAA,EAAO,OAAO,mBAAA,EAAqB,QAAA,EAAU,CAAC,CAAA,KAAM,MAAA,CAAO,uBAAuB,MAAA,CAAO,CAAA,CAAE,OAAO,KAAK,CAAA,IAAK,CAAC,CAAA,EAAG,WAAA,EAAY,qCAAW,CAAA,kBACjMA,MAAA,aAAA,CAAC,OAAA,EAAA,EAAM,WAAU,0BAAA,EAA2B,IAAA,EAAK,UAAS,KAAA,EAAO,MAAA,CAAO,oBAAoB,QAAA,EAAU,CAAC,MAAM,MAAA,CAAO,oBAAA,EAAsB,OAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,GAAG,WAAA,EAAY,mCAAA,EAAW,CAAA,kBAE/LA,KAAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,wCAAA;AAAA,MACV,IAAA,EAAM,CAAA;AAAA,MACN,KAAA,EAAO,OAAA;AAAA,MACP,QAAA,EAAU,CAAC,CAAA,KACT,MAAA;AAAA,QACE,mBAAA;AAAA,QACA,CAAA,CAAE,MAAA,CAAO,KAAA,CACN,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,CACnB,OAAO,OAAO;AAAA,OACnB;AAAA,MAEF,WAAA,EAAY;AAAA;AAAA,GAEhB,CAAA,kBAEAA,KAAAA,CAAA,cAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EAAA,kBACbA,KAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,8CAA6C,QAAA,EAAU,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAA,EACvF,MAAA,GAAS,uBAAA,GAAW,0BACvB,CAAA,kBACAA,KAAAA,CAAA,aAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,0BAAA,EAA2B,OAAA,EAAS,KAAA,EAAA,EAAO,0BAE7D,CACF,CACF,CAAA;AAEJ","file":"index.mjs","sourcesContent":["const AMBIGUOUS = new Set(['0', '1', 'I', 'O', 'L']);\nconst ALPHABET = 'ABCDEFGHJKMNPQRSTUVWXYZ23456789'.split('').filter((c) => !AMBIGUOUS.has(c));\n\nexport interface GenerateMatchCodeOptions {\n length?: number;\n maxAttempts?: number;\n exists: (code: string) => Promise<boolean>;\n}\n\nexport const normalizeMatchCode = (value: string): string => value.trim().toUpperCase();\n\nexport const generateMatchCode = async ({\n length = 6,\n maxAttempts = 20,\n exists,\n}: GenerateMatchCodeOptions): Promise<string> => {\n if (length < 4) {\n throw new Error('Match code length must be at least 4');\n }\n\n for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\n const code = Array.from({ length })\n .map(() => ALPHABET[Math.floor(Math.random() * ALPHABET.length)])\n .join('');\n\n // eslint-disable-next-line no-await-in-loop\n if (!(await exists(code))) {\n return code;\n }\n }\n\n throw new Error('Unable to generate unique match code');\n};\n","import { randomUUID } from 'crypto';\nimport type {\n BoothAuditEvent,\n BoothUploadRecord,\n BoothVaultStore,\n CreateBoothUploadInput,\n CreateBoothUploadResult,\n} from '../types';\nimport { generateMatchCode, normalizeMatchCode } from './code';\n\nexport interface BoothRedeemGuardLike {\n assertAllowed(subjectKey: string): void;\n registerAttempt(subjectKey: string, success: boolean): void;\n}\n\nexport interface BoothVaultServiceOptions {\n store: BoothVaultStore;\n codeLength?: number;\n defaultTtlHours?: number;\n baseDownloadPath?: string;\n redeemGuard?: BoothRedeemGuardLike;\n onAuditEvent?: (event: BoothAuditEvent) => void;\n}\n\nexport class BoothVaultService {\n private emitAudit(event: Omit<BoothAuditEvent, 'at'>): void {\n this.onAuditEvent?.({\n ...event,\n at: new Date().toISOString(),\n });\n }\n private readonly store: BoothVaultStore;\n private readonly codeLength: number;\n private readonly defaultTtlHours: number;\n private readonly baseDownloadPath: string;\n private readonly redeemGuard?: BoothRedeemGuardLike;\n private readonly onAuditEvent?: (event: BoothAuditEvent) => void;\n\n constructor(options: BoothVaultServiceOptions) {\n this.store = options.store;\n this.codeLength = options.codeLength ?? 6;\n this.defaultTtlHours = options.defaultTtlHours ?? 24 * 14;\n this.baseDownloadPath = options.baseDownloadPath ?? '/redeem';\n this.redeemGuard = options.redeemGuard;\n this.onAuditEvent = options.onAuditEvent;\n }\n\n async createUpload(input: CreateBoothUploadInput): Promise<CreateBoothUploadResult> {\n if (!input.files?.length) {\n throw new Error('At least one file is required');\n }\n\n const now = new Date();\n const ttlHours = Math.max(1, input.ttlHours ?? this.defaultTtlHours);\n const expiresAt = new Date(now.getTime() + ttlHours * 60 * 60 * 1000);\n\n const matchCode = await generateMatchCode({\n length: this.codeLength,\n exists: (code) => this.store.existsByMatchCode(code),\n });\n\n const record: BoothUploadRecord = {\n id: randomUUID(),\n boothId: input.boothId,\n matchCode,\n createdAt: now.toISOString(),\n expiresAt: expiresAt.toISOString(),\n files: input.files.map((file) => ({\n ...file,\n id: randomUUID(),\n })),\n metadata: input.metadata,\n status: 'active',\n downloadCount: 0,\n };\n\n await this.store.saveRecord(record);\n this.emitAudit({\n type: 'upload.created',\n boothId: record.boothId,\n recordId: record.id,\n matchCode: record.matchCode,\n detail: { fileCount: record.files.length },\n });\n\n return {\n record,\n downloadUrlPath: `${this.baseDownloadPath}?code=${record.matchCode}`,\n };\n }\n\n async getByMatchCode(matchCode: string): Promise<BoothUploadRecord | null> {\n const normalized = normalizeMatchCode(matchCode);\n const record = await this.store.findByMatchCode(normalized);\n\n if (!record) {\n return null;\n }\n\n if (new Date(record.expiresAt).getTime() <= Date.now() && record.status === 'active') {\n return {\n ...record,\n status: 'expired',\n };\n }\n\n return record;\n }\n\n async markDownloaded(recordId: string): Promise<void> {\n await this.store.incrementDownloadCount(recordId);\n }\n\n async resolveDownloadFilesByCode(\n matchCode: string,\n options?: { requesterKey?: string }\n ): Promise<BoothUploadRecord | null> {\n const requesterKey = options?.requesterKey;\n if (requesterKey && this.redeemGuard) {\n try {\n this.redeemGuard.assertAllowed(requesterKey);\n } catch (error) {\n this.emitAudit({\n type: 'redeem.blocked',\n requesterKey,\n matchCode,\n detail: { message: error instanceof Error ? error.message : 'blocked' },\n });\n throw error;\n }\n }\n\n const record = await this.getByMatchCode(matchCode);\n const success = !!record && record.status === 'active';\n\n if (requesterKey && this.redeemGuard) {\n this.redeemGuard.registerAttempt(requesterKey, success);\n }\n\n if (!success) {\n this.emitAudit({\n type: 'redeem.failed',\n requesterKey,\n matchCode,\n boothId: record?.boothId,\n recordId: record?.id,\n });\n return record;\n }\n\n await this.markDownloaded(record.id);\n const reloaded = this.store.findByRecordId\n ? await this.store.findByRecordId(record.id)\n : await this.getByMatchCode(record.matchCode);\n\n this.emitAudit({\n type: 'redeem.success',\n requesterKey,\n matchCode: record.matchCode,\n boothId: record.boothId,\n recordId: record.id,\n });\n\n return reloaded ?? record;\n }\n}\n","export interface VocaloidBoothConfig {\n boothId: string;\n title: string;\n description?: string;\n defaultTtlHours: number;\n maxFiles: number;\n maxSingleFileSizeMb: number;\n maxTotalFileSizeMb: number;\n allowedExtensions: string[];\n}\n\nexport const defaultVocaloidBoothConfig: VocaloidBoothConfig = {\n boothId: 'default-booth',\n title: 'MMD / Vocaloid 创作文件寄存站',\n description: '上传创作文件并生成匹配码,后续可凭码下载',\n defaultTtlHours: 24 * 14,\n maxFiles: 20,\n maxSingleFileSizeMb: 2048,\n maxTotalFileSizeMb: 5120,\n allowedExtensions: ['zip', '7z', 'rar', 'vsqx', 'vpr', 'vmd', 'pmx', 'wav', 'mp3', 'mp4'],\n};\n\nexport const normalizeVocaloidBoothConfig = (\n input?: Partial<VocaloidBoothConfig>\n): VocaloidBoothConfig => {\n const merged = {\n ...defaultVocaloidBoothConfig,\n ...(input ?? {}),\n };\n\n return {\n ...merged,\n boothId: merged.boothId || defaultVocaloidBoothConfig.boothId,\n title: merged.title || defaultVocaloidBoothConfig.title,\n defaultTtlHours: Math.max(1, merged.defaultTtlHours),\n maxFiles: Math.max(1, merged.maxFiles),\n maxSingleFileSizeMb: Math.max(1, merged.maxSingleFileSizeMb),\n maxTotalFileSizeMb: Math.max(1, merged.maxTotalFileSizeMb),\n allowedExtensions: (merged.allowedExtensions?.length\n ? merged.allowedExtensions\n : defaultVocaloidBoothConfig.allowedExtensions\n ).map((ext) => ext.toLowerCase()),\n };\n};\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\n\nexport interface BoothUploadSubmitPayload {\n boothId: string;\n files: File[];\n nickname?: string;\n contactTail?: string;\n ttlHours?: number;\n}\n\nexport interface BoothUploadPanelProps {\n boothId: string;\n maxFiles?: number;\n maxFileSizeMb?: number;\n accept?: string;\n uploading?: boolean;\n onSubmit: (payload: BoothUploadSubmitPayload) => Promise<void> | void;\n}\n\nexport const BoothUploadPanel: React.FC<BoothUploadPanelProps> = ({\n boothId,\n maxFiles = 10,\n maxFileSizeMb = 2048,\n accept,\n uploading = false,\n onSubmit,\n}) => {\n const [files, setFiles] = useState<File[]>([]);\n const [nickname, setNickname] = useState('');\n const [contactTail, setContactTail] = useState('');\n const [ttlHours, setTtlHours] = useState(24 * 14);\n const [error, setError] = useState<string | null>(null);\n\n const totalSizeMb = useMemo(\n () => files.reduce((acc, file) => acc + file.size, 0) / 1024 / 1024,\n [files]\n );\n\n const addFiles = (newFiles: FileList | null) => {\n if (!newFiles) return;\n const incoming = Array.from(newFiles);\n const next = [...files, ...incoming];\n\n if (next.length > maxFiles) {\n setError(`最多上传 ${maxFiles} 个文件`);\n return;\n }\n\n const oversized = incoming.find((f) => f.size > maxFileSizeMb * 1024 * 1024);\n if (oversized) {\n setError(`文件 ${oversized.name} 超过 ${maxFileSizeMb}MB 限制`);\n return;\n }\n\n setError(null);\n setFiles(next);\n };\n\n const removeFile = (name: string) => setFiles((prev) => prev.filter((f) => f.name !== name));\n\n const handleSubmit = async () => {\n if (files.length === 0) {\n setError('请先选择至少一个文件');\n return;\n }\n setError(null);\n await onSubmit({\n boothId,\n files,\n nickname: nickname || undefined,\n contactTail: contactTail || undefined,\n ttlHours,\n });\n };\n\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-4 shadow-sm\">\n <h3 className=\"mb-3 text-lg font-semibold\">上传创作文件</h3>\n\n <input\n type=\"file\"\n multiple\n accept={accept}\n onChange={(e) => addFiles(e.target.files)}\n className=\"mb-3 block w-full text-sm\"\n />\n\n <div className=\"mb-3 grid grid-cols-1 gap-2 md:grid-cols-3\">\n <input\n value={nickname}\n onChange={(e) => setNickname(e.target.value)}\n placeholder=\"昵称(可选)\"\n className=\"rounded-md border px-3 py-2 text-sm\"\n />\n <input\n value={contactTail}\n onChange={(e) => setContactTail(e.target.value)}\n placeholder=\"联系方式后4位(可选)\"\n className=\"rounded-md border px-3 py-2 text-sm\"\n />\n <input\n value={ttlHours}\n type=\"number\"\n min={1}\n onChange={(e) => setTtlHours(Number(e.target.value) || 24)}\n placeholder=\"保存时长(小时)\"\n className=\"rounded-md border px-3 py-2 text-sm\"\n />\n </div>\n\n <div className=\"mb-3 text-xs text-slate-500\">\n 已选 {files.length} 个文件,总计 {totalSizeMb.toFixed(2)} MB\n </div>\n\n <ul className=\"mb-3 max-h-40 overflow-auto rounded-md border border-slate-100 p-2 text-sm\">\n {files.length === 0 && <li className=\"text-slate-400\">尚未选择文件</li>}\n {files.map((file) => (\n <li key={`${file.name}-${file.size}`} className=\"mb-1 flex items-center justify-between gap-2\">\n <span className=\"truncate\">{file.name}</span>\n <button type=\"button\" className=\"text-rose-500\" onClick={() => removeFile(file.name)}>\n 移除\n </button>\n </li>\n ))}\n </ul>\n\n {error && <div className=\"mb-3 rounded-md bg-rose-50 p-2 text-sm text-rose-700\">{error}</div>}\n\n <button\n type=\"button\"\n disabled={uploading}\n onClick={handleSubmit}\n className=\"rounded-md bg-indigo-600 px-3 py-2 text-white disabled:cursor-not-allowed disabled:opacity-50\"\n >\n {uploading ? '上传中...' : '开始上传'}\n </button>\n </div>\n );\n};\n","'use client';\n\nimport React, { useState } from 'react';\nimport type { BoothUploadRecord } from '../types';\n\nexport interface BoothRedeemPanelProps {\n loading?: boolean;\n onRedeem: (matchCode: string) => Promise<BoothUploadRecord | null>;\n}\n\nexport const BoothRedeemPanel: React.FC<BoothRedeemPanelProps> = ({ onRedeem, loading }) => {\n const [matchCode, setMatchCode] = useState('');\n const [record, setRecord] = useState<BoothUploadRecord | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const handleRedeem = async () => {\n setError(null);\n const result = await onRedeem(matchCode.trim());\n\n if (!result) {\n setRecord(null);\n setError('匹配码不存在,请检查后重试');\n return;\n }\n\n if (result.status !== 'active') {\n setRecord(result);\n setError('匹配码已过期或失效');\n return;\n }\n\n setRecord(result);\n };\n\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-4 shadow-sm\">\n <h3 className=\"mb-3 text-lg font-semibold\">凭匹配码下载</h3>\n\n <div className=\"mb-3 flex gap-2\">\n <input\n value={matchCode}\n onChange={(e) => setMatchCode(e.target.value.toUpperCase())}\n placeholder=\"输入匹配码(如 A7K9Q2)\"\n className=\"w-full rounded-md border px-3 py-2 text-sm uppercase\"\n />\n <button\n type=\"button\"\n onClick={handleRedeem}\n disabled={loading}\n className=\"rounded-md bg-slate-900 px-3 py-2 text-white disabled:opacity-50\"\n >\n 查询\n </button>\n </div>\n\n {error && <div className=\"mb-3 rounded-md bg-amber-50 p-2 text-sm text-amber-700\">{error}</div>}\n\n {record && (\n <div className=\"rounded-md border border-slate-100 p-3\">\n <div className=\"mb-2 text-xs text-slate-500\">共 {record.files.length} 个文件</div>\n <ul className=\"space-y-1 text-sm\">\n {record.files.map((file) => (\n <li key={file.id} className=\"flex items-center justify-between gap-2\">\n <span className=\"truncate\">{file.fileName}</span>\n <a href={file.objectKey} className=\"text-indigo-600 hover:underline\" download>\n 下载\n </a>\n </li>\n ))}\n </ul>\n </div>\n )}\n </div>\n );\n};\n","'use client';\n\nimport React from 'react';\n\nexport interface BoothSuccessCardProps {\n matchCode: string;\n expiresAt: string;\n downloadUrlPath: string;\n onCopyCode?: (code: string) => void;\n className?: string;\n}\n\nexport const BoothSuccessCard: React.FC<BoothSuccessCardProps> = ({\n matchCode,\n expiresAt,\n downloadUrlPath,\n onCopyCode,\n className,\n}) => {\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(matchCode);\n } catch {\n // ignore clipboard errors in non-secure contexts\n }\n onCopyCode?.(matchCode);\n };\n\n return (\n <div className={`rounded-xl border border-emerald-200 bg-emerald-50 p-4 text-sm ${className ?? ''}`}>\n <div className=\"mb-2 text-xs text-emerald-800\">上传完成,已生成匹配码</div>\n <div className=\"mb-3 text-2xl font-bold tracking-widest text-emerald-900\">{matchCode}</div>\n <div className=\"mb-3 text-xs text-emerald-800\">过期时间:{new Date(expiresAt).toLocaleString()}</div>\n <div className=\"flex gap-2\">\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"rounded-md bg-emerald-600 px-3 py-2 text-white hover:bg-emerald-700\"\n >\n 复制匹配码\n </button>\n <a\n href={downloadUrlPath}\n className=\"rounded-md border border-emerald-400 bg-white px-3 py-2 text-emerald-700 hover:bg-emerald-100\"\n >\n 打开下载页\n </a>\n </div>\n </div>\n );\n};\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport {\n defaultVocaloidBoothConfig,\n normalizeVocaloidBoothConfig,\n type VocaloidBoothConfig,\n} from '../core';\n\nexport interface BoothConfigPageProps {\n initialConfig?: Partial<VocaloidBoothConfig>;\n onSave?: (config: VocaloidBoothConfig) => Promise<void> | void;\n}\n\nexport const BoothConfigPage: React.FC<BoothConfigPageProps> = ({ initialConfig, onSave }) => {\n const [config, setConfig] = useState<VocaloidBoothConfig>(\n normalizeVocaloidBoothConfig(initialConfig)\n );\n const [saving, setSaving] = useState(false);\n\n const extText = useMemo(() => config.allowedExtensions.join(','), [config.allowedExtensions]);\n\n const update = <K extends keyof VocaloidBoothConfig>(key: K, value: VocaloidBoothConfig[K]) =>\n setConfig((prev) => ({ ...prev, [key]: value }));\n\n const save = async () => {\n setSaving(true);\n try {\n const normalized = normalizeVocaloidBoothConfig(config);\n setConfig(normalized);\n await onSave?.(normalized);\n } finally {\n setSaving(false);\n }\n };\n\n const reset = () => setConfig(defaultVocaloidBoothConfig);\n\n return (\n <div className=\"rounded-xl border border-slate-200 bg-white p-4 shadow-sm space-y-3\">\n <h3 className=\"text-lg font-semibold\">Vocaloid Booth 配置页</h3>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-3 text-sm\">\n <input className=\"rounded border px-3 py-2\" value={config.boothId} onChange={(e) => update('boothId', e.target.value)} placeholder=\"boothId\" />\n <input className=\"rounded border px-3 py-2\" value={config.title} onChange={(e) => update('title', e.target.value)} placeholder=\"标题\" />\n <input className=\"rounded border px-3 py-2 md:col-span-2\" value={config.description ?? ''} onChange={(e) => update('description', e.target.value)} placeholder=\"描述\" />\n\n <input className=\"rounded border px-3 py-2\" type=\"number\" value={config.defaultTtlHours} onChange={(e) => update('defaultTtlHours', Number(e.target.value) || 1)} placeholder=\"默认保存时长(小时)\" />\n <input className=\"rounded border px-3 py-2\" type=\"number\" value={config.maxFiles} onChange={(e) => update('maxFiles', Number(e.target.value) || 1)} placeholder=\"最大文件数\" />\n <input className=\"rounded border px-3 py-2\" type=\"number\" value={config.maxSingleFileSizeMb} onChange={(e) => update('maxSingleFileSizeMb', Number(e.target.value) || 1)} placeholder=\"单文件上限 MB\" />\n <input className=\"rounded border px-3 py-2\" type=\"number\" value={config.maxTotalFileSizeMb} onChange={(e) => update('maxTotalFileSizeMb', Number(e.target.value) || 1)} placeholder=\"总大小上限 MB\" />\n\n <textarea\n className=\"rounded border px-3 py-2 md:col-span-2\"\n rows={3}\n value={extText}\n onChange={(e) =>\n update(\n 'allowedExtensions',\n e.target.value\n .split(',')\n .map((v) => v.trim())\n .filter(Boolean)\n )\n }\n placeholder=\"允许后缀,逗号分隔\"\n />\n </div>\n\n <div className=\"flex gap-2\">\n <button className=\"rounded bg-indigo-600 px-3 py-2 text-white\" disabled={saving} onClick={save}>\n {saving ? '保存中...' : '保存配置'}\n </button>\n <button className=\"rounded border px-3 py-2\" onClick={reset}>\n 恢复默认\n </button>\n </div>\n </div>\n );\n};\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|