From 86e2eecc1f1b58f160893939ce449b03eb3b0521 Mon Sep 17 00:00:00 2001 From: vastxie Date: Sat, 31 May 2025 02:28:46 +0800 Subject: [PATCH] v4.3.0 --- .github/workflows/docker-image.yml | 56 - .github/workflows/electron-build.yml | 129 + .gitignore | 7 - {src/.vscode => .vscode}/extensions.json | 0 .vscode/settings.json | 113 +- AIWebQuickDeploy/.env.docker | 7 +- AIWebQuickDeploy/.env.example | 4 +- AIWebQuickDeploy/Dockerfile | 42 +- AIWebQuickDeploy/dist/app.module.js | 96 - .../dist/common/auth/adminAuth.guard.js | 31 - .../dist/common/auth/jwt.strategy.js | 33 - .../dist/common/auth/jwtAuth.guard.js | 85 - .../dist/common/auth/superAuth.guard.js | 31 - .../dist/common/constants/balance.constant.js | 18 - .../common/constants/errorMessage.constant.js | 24 - .../common/constants/midjourney.constant.js | 21 - .../dist/common/constants/status.constant.js | 13 - .../dist/common/constants/user.constant.js | 16 - .../common/constants/verification.constant.js | 9 - .../dist/common/entity/baseEntity.js | 35 - .../common/filters/allExceptions.filter.js | 51 - .../filters/typeOrmQueryFailed.filter.js | 34 - .../dist/common/guards/roles/roles.guard.js | 19 - .../common/interceptors/abort.interceptor.js | 23 - .../interceptors/transform.interceptor.js | 35 - .../common/logger/custom-logger.service.js | 45 - .../dist/common/middleware/xml.middleware.js | 23 - AIWebQuickDeploy/dist/common/result/index.js | 18 - AIWebQuickDeploy/dist/common/swagger/index.js | 15 - AIWebQuickDeploy/dist/common/utils/base.js | 26 - .../dist/common/utils/createOrderId.js | 8 - .../dist/common/utils/createRandomCode.js | 9 - .../common/utils/createRandomInviteCode.js | 14 - .../dist/common/utils/createRandomNonceStr.js | 12 - .../dist/common/utils/createRandomUid.js | 9 - AIWebQuickDeploy/dist/common/utils/date.js | 43 - AIWebQuickDeploy/dist/common/utils/encrypt.js | 14 - .../dist/common/utils/fromatUrl.js | 11 - .../dist/common/utils/generateCrami.js | 9 - .../dist/common/utils/getClientIp.js | 22 - .../dist/common/utils/getDiffArray.js | 15 - .../dist/common/utils/getRandomItem.js | 8 - .../common/utils/getRandomItemFromArray.js | 11 - .../dist/common/utils/getTokenCount.js | 30 - .../dist/common/utils/handleError.js | 43 - .../dist/common/utils/hideString.js | 14 - AIWebQuickDeploy/dist/common/utils/index.js | 39 - .../dist/common/utils/maskCrami.js | 11 - .../dist/common/utils/maskEmail.js | 16 - .../dist/common/utils/maskIpAddress.js | 11 - .../common/utils/removeSpecialCharacters.js | 7 - AIWebQuickDeploy/dist/common/utils/tools.js | 8 - .../dist/common/utils/utcformatTime.js | 16 - AIWebQuickDeploy/dist/main.js | 19725 ++++- AIWebQuickDeploy/dist/modules/ai/aiPPT.js | 44 - .../dist/modules/ai/cogVideo.service.js | 214 - .../dist/modules/ai/fluxDraw.service.js | 148 - .../dist/modules/ai/lumaVideo.service.js | 213 - .../dist/modules/ai/midjourneyDraw.service.js | 237 - .../dist/modules/ai/netSearch.service.js | 128 - .../dist/modules/ai/openaiChat.service.js | 180 - .../dist/modules/ai/openaiDraw.service.js | 145 - .../modules/ai/stableDiffusion.service.js | 104 - .../dist/modules/ai/suno.service.js | 325 - .../dist/modules/app/app.controller.js | 218 - .../dist/modules/app/app.entity.js | 84 - .../dist/modules/app/app.module.js | 26 - .../dist/modules/app/app.service.js | 331 - .../dist/modules/app/appCats.entity.js | 32 - .../dist/modules/app/dto/collectApp.dto.js | 22 - .../dist/modules/app/dto/createApp.dto.js | 75 - .../dist/modules/app/dto/createCats.dto.js | 45 - .../dist/modules/app/dto/custonApp.dto.js | 55 - .../dist/modules/app/dto/deleteApp.dto.js | 22 - .../dist/modules/app/dto/deleteCats.dto.js | 22 - .../dist/modules/app/dto/queryApp.dto.js | 52 - .../dist/modules/app/dto/queryCats.dto.js | 37 - .../dist/modules/app/dto/updateApp.dto.js | 23 - .../dist/modules/app/dto/updateCats.dto.js | 23 - .../dist/modules/app/userApps.entity.js | 48 - .../dist/modules/auth/auth.controller.js | 161 - .../dist/modules/auth/auth.module.js | 76 - .../dist/modules/auth/auth.service.js | 460 - .../dist/modules/auth/dto/adminLogin.dto.js | 32 - .../dist/modules/auth/dto/authLogin.dto.js | 37 - .../dist/modules/auth/dto/authRegister.dto.js | 50 - .../dist/modules/auth/dto/loginByPhone.dt.js | 30 - .../modules/auth/dto/sendPhoneCode.dto.js | 34 - .../modules/auth/dto/updatePassByOther.dto.js | 24 - .../modules/auth/dto/updatePassword.dto.js | 24 - .../auth/dto/userRegisterByPhone.dto.js | 42 - .../modules/autoreply/autoreply.controller.js | 87 - .../modules/autoreply/autoreply.entity.js | 36 - .../modules/autoreply/autoreply.module.js | 26 - .../modules/autoreply/autoreply.service.js | 126 - .../modules/autoreply/dto/addAutoReply.dto.js | 28 - .../modules/autoreply/dto/delBadWords.dto.js | 20 - .../autoreply/dto/queryAutoReply.dto.js | 37 - .../autoreply/dto/updateAutoReply.dto.js | 41 - .../modules/badWords/badWords.controller.js | 100 - .../dist/modules/badWords/badWords.entity.js | 32 - .../dist/modules/badWords/badWords.module.js | 30 - .../dist/modules/badWords/badWords.service.js | 208 - .../modules/badWords/dto/addBadWords.dto.js | 20 - .../modules/badWords/dto/delBadWords.dto.js | 20 - .../modules/badWords/dto/queryBadWords.dto.js | 37 - .../badWords/dto/queryViolation.dto.js | 37 - .../badWords/dto/updateBadWords.dto.js | 32 - .../modules/badWords/violationLog.entity.js | 40 - .../dist/modules/chat/chat.controller.js | 123 - .../dist/modules/chat/chat.module.js | 87 - .../dist/modules/chat/chat.service.js | 1007 - .../dist/modules/chat/dto/chatDraw.dto.js | 78 - .../dist/modules/chat/dto/chatProcess.dto.js | 57 - AIWebQuickDeploy/dist/modules/chat/helper.js | 46 - .../modules/chatGroup/chatGroup.controller.js | 101 - .../modules/chatGroup/chatGroup.entity.js | 56 - .../modules/chatGroup/chatGroup.module.js | 27 - .../modules/chatGroup/chatGroup.service.js | 219 - .../modules/chatGroup/dto/createGroup.dto.js | 38 - .../modules/chatGroup/dto/delGroup.dto.js | 20 - .../modules/chatGroup/dto/updateGroup.dto.js | 45 - .../modules/chatLog/chatLog.controller.js | 176 - .../dist/modules/chatLog/chatLog.entity.js | 144 - .../dist/modules/chatLog/chatLog.module.js | 30 - .../dist/modules/chatLog/chatLog.service.js | 390 - .../dist/modules/chatLog/dto/chatList.dto.js | 22 - .../dist/modules/chatLog/dto/del.dto.js | 20 - .../modules/chatLog/dto/delByGroup.dto.js | 20 - .../chatLog/dto/exportExcelChatlog.dto.js | 37 - .../chatLog/dto/queryAllChatLog.dto.js | 41 - .../chatLog/dto/queryAllDrawLog.dto.js | 42 - .../modules/chatLog/dto/queryByAppId.dto.js | 32 - .../modules/chatLog/dto/queryMyChatLog.dto.js | 22 - .../modules/chatLog/dto/recDrawImg.dto.js | 20 - .../dist/modules/crami/crami.controller.js | 168 - .../dist/modules/crami/crami.entity.js | 56 - .../dist/modules/crami/crami.module.js | 49 - .../dist/modules/crami/crami.service.js | 214 - .../dist/modules/crami/cramiPackage.entity.js | 64 - .../modules/crami/dto/batchDelCrami.dto.js | 23 - .../dist/modules/crami/dto/createCrami.dto.js | 49 - .../modules/crami/dto/createPackage.dto.js | 81 - .../modules/crami/dto/deletePackage.dto.js | 22 - .../modules/crami/dto/queryAllCrami.dto.js | 37 - .../modules/crami/dto/queryAllPackage.dto.js | 42 - .../modules/crami/dto/updatePackage.dto.js | 23 - .../dist/modules/crami/dto/useCrami.dto.js | 22 - .../dist/modules/database/database.module.js | 50 - .../dist/modules/database/database.service.js | 198 - .../dist/modules/database/initDatabase.js | 95 - .../modules/globalConfig/config.entity.js | 46 - .../globalConfig/dto/queryConfig.dto.js | 25 - .../modules/globalConfig/dto/setConfig.dto.js | 29 - .../globalConfig/dto/setConfigCustom.dto.js | 27 - .../globalConfig/globalConfig.controller.js | 95 - .../globalConfig/globalConfig.module.js | 27 - .../globalConfig/globalConfig.service.js | 408 - .../dist/modules/mailer/mailer.service.js | 68 - .../dist/modules/models/dto/queryModel.dto.js | 52 - .../modules/models/dto/queryModelType.dto.js | 32 - .../dist/modules/models/dto/setModel.dto.js | 128 - .../modules/models/dto/setModelType.dto.js | 76 - .../dist/modules/models/models.controller.js | 141 - .../dist/modules/models/models.entity.js | 118 - .../dist/modules/models/models.module.js | 26 - .../dist/modules/models/models.service.js | 264 - .../modules/official/dto/getQrCode.dto.js | 22 - .../modules/official/official.controller.js | 201 - .../dist/modules/official/official.module.js | 23 - .../dist/modules/official/official.service.js | 194 - .../dist/modules/order/dto/buy.dto.js | 28 - .../modules/order/dto/queryAllOrder.dto.js | 42 - .../modules/order/dto/queryByOrder.dto.js | 20 - .../dist/modules/order/order.controller.js | 99 - .../dist/modules/order/order.entity.js | 64 - .../dist/modules/order/order.module.js | 26 - .../dist/modules/order/order.service.js | 128 - .../dist/modules/pay/dto/pay.dto.js | 22 - .../dist/modules/pay/pay.controller.js | 65 - .../dist/modules/pay/pay.module.js | 27 - .../dist/modules/pay/pay.service.js | 613 - .../dist/modules/plugin/plugin.controller.js | 80 - .../dist/modules/plugin/plugin.entity.js | 44 - .../dist/modules/plugin/plugin.module.js | 24 - .../dist/modules/plugin/plugin.service.js | 112 - .../dist/modules/redisCache/dto/redis.dto.js | 26 - .../redisCache/redisCache.controller.js | 48 - .../modules/redisCache/redisCache.module.js | 58 - .../modules/redisCache/redisCache.service.js | 83 - .../dist/modules/signin/signIn.entity.js | 36 - .../dist/modules/signin/signin.controller.js | 56 - .../dist/modules/signin/signin.module.js | 27 - .../dist/modules/signin/signin.service.js | 117 - .../statistic/dto/queryStatisticDto.dto.js | 20 - .../modules/statistic/statistic.controller.js | 69 - .../modules/statistic/statistic.module.js | 34 - .../modules/statistic/statistic.service.js | 280 - .../dist/modules/task/task.module.js | 23 - .../dist/modules/task/task.service.js | 67 - .../dist/modules/upload/upload.controller.js | 54 - .../dist/modules/upload/upload.module.js | 23 - .../dist/modules/upload/upload.service.js | 303 - .../dist/modules/user/dto/queryAllUser.dto.js | 52 - .../modules/user/dto/queryInviteRecord.dto.js | 27 - .../dist/modules/user/dto/queryOne.dto.js | 22 - .../modules/user/dto/resetUserPass.dto.js | 22 - .../dist/modules/user/dto/retrieve.dto.js | 28 - .../dist/modules/user/dto/updateUser.dto.js | 41 - .../modules/user/dto/updateUserStatus.dto.js | 29 - .../dist/modules/user/dto/userRecharge.dto.js | 37 - .../dist/modules/user/user.controller.js | 118 - .../dist/modules/user/user.entity.js | 115 - .../dist/modules/user/user.module.js | 58 - .../dist/modules/user/user.service.js | 523 - .../modules/userBalance/accountLog.entity.js | 68 - .../modules/userBalance/balance.entity.js | 48 - .../dist/modules/userBalance/dto/test.dto.js | 22 - .../modules/userBalance/fingerprint.entity.js | 36 - .../userBalance/userBalance.controller.js | 98 - .../modules/userBalance/userBalance.entity.js | 80 - .../modules/userBalance/userBalance.module.js | 50 - .../userBalance/userBalance.service.js | 570 - .../verification/dto/verifyCode.dto.js | 27 - .../verification/verification.module.js | 23 - .../verification/verification.service.js | 150 - .../verification/verifycation.entity.js | 44 - AIWebQuickDeploy/docker-compose.yml | 33 +- AIWebQuickDeploy/package.json | 117 +- ...Button-Ujw0orpR.js => HButton-BuyjdFXj.js} | 2 +- .../admin/assets/HCheckList-BvP-W6tS.js | 8 + .../admin/assets/HCheckList-DmjIeCde.js | 8 - ...ue_type_script_setup_true_lang-BLNEihme.js | 8 - ...ue_type_script_setup_true_lang-Di8Bi58Y.js | 8 + .../public/admin/assets/HDialog-Dc3-VFqw.js | 8 + .../public/admin/assets/HDialog-SD64xsF6.js | 8 - ...ue_type_script_setup_true_lang-BfrjeNSs.js | 8 + ...ue_type_script_setup_true_lang-an5zbG4e.js | 8 - .../public/admin/assets/HDropdown-7q7O_XMK.js | 8 - .../public/admin/assets/HDropdown-DFGm5c_S.js | 8 + .../admin/assets/HDropdownMenu-D4uhC_T8.js | 8 - .../admin/assets/HDropdownMenu-STCC9von.js | 8 + ...ue_type_script_setup_true_lang-BzkPBd44.js | 8 - ...ue_type_script_setup_true_lang-Wc6l-Ngn.js | 8 + .../public/admin/assets/HInput-BYvs3nsX.js | 8 - .../public/admin/assets/HInput-D-evHGWk.js | 8 + ...ue_type_script_setup_true_lang-B93h6qE_.js | 8 - ...ue_type_script_setup_true_lang-DbpA_N81.js | 8 + .../public/admin/assets/HKbd-Be5shIQ7.js | 8 - .../public/admin/assets/HKbd-LjWkyhwy.js | 8 + .../public/admin/assets/HSelect-BCiFn2nk.js | 8 - .../public/admin/assets/HSelect-IW2K-3mo.js | 8 + ...ver-DFpKLdtr.js => HSlideover-DoUM21Up.js} | 2 +- .../public/admin/assets/HTabList-DKMxIM5w.js | 8 - .../public/admin/assets/HTabList-DmcAR84M.js | 8 + ...ue_type_script_setup_true_lang-BEyYCazB.js | 8 + ...ue_type_script_setup_true_lang-BuGUQxxq.js | 8 - .../public/admin/assets/HToggle-BoT9z-_d.js | 8 - .../public/admin/assets/HToggle-CrdaD-9B.js | 8 + ...ue_type_script_setup_true_lang-CHjOk9yp.js | 8 - ...ue_type_script_setup_true_lang-qXUln426.js | 8 + .../public/admin/assets/HTooltip-BHWSsM_K.js | 8 + .../public/admin/assets/HTooltip-CW8ZlTRK.js | 8 - ...ue_type_script_setup_true_lang-CxwyeEWK.js | 8 - ...ue_type_script_setup_true_lang-T8XkjmIi.js | 8 + .../public/admin/assets/_...all_-e-47I_Lk.js | 8 - .../public/admin/assets/_...all_-xtcz4Joe.js | 8 + .../admin/assets/accountLog-BnWEbieN.js | 8 + .../admin/assets/accountLog-fHuxQkeO.js | 8 - .../public/admin/assets/ali-Mqm0cjbu.js | 8 - .../public/admin/assets/ali-zgpDqU7S.js | 8 + .../{apl-B4CMkyY2.js => apl-CXdQSnD-.js} | 2 +- .../public/admin/assets/app-CZBIwClE.js | 8 - .../public/admin/assets/app-Cak_t3ob.js | 8 + .../admin/assets/application-BreYJjWu.js | 8 - .../admin/assets/application-CRdbamYy.js | 8 + .../admin/assets/application-DyP2kx0j.css | 8 + .../admin/assets/asciiarmor-D5V0T9Cu.js | 8 + .../admin/assets/asciiarmor-Df11BRmG.js | 8 - .../public/admin/assets/asn1-CGOzndHr.js | 8 - .../public/admin/assets/asn1-DWPaVWf6.js | 8 + ...erisk-B-8jnY81.js => asterisk-B46aRdXb.js} | 2 +- .../public/admin/assets/autpReply-ByQOHDAx.js | 8 + .../public/admin/assets/autpReply-C702DWac.js | 8 - .../public/admin/assets/badWords-D2Yy-NCt.js | 8 - .../public/admin/assets/badWords-FUVqvqZb.js | 8 + .../admin/assets/baiduSensitive-6qem6t8b.js | 8 - .../admin/assets/baiduSensitive-C7vUutgc.js | 8 + .../admin/assets/baiduStatistics-CIKoeZzD.js | 8 + .../admin/assets/baiduStatistics-GAHxOxpS.js | 8 - .../assets/baseConfiguration-D6C9gTFe.js | 8 + .../assets/baseConfiguration-XpujmNvx.js | 8 - .../admin/assets/baseSetting-DM7frdzv.js | 8 + .../public/admin/assets/brainfuck-C4LP7Hcl.js | 8 - .../public/admin/assets/brainfuck-CtZaYBKt.js | 8 + .../public/admin/assets/chat-Cul6apvD.js | 8 - .../public/admin/assets/chat-DOaFD8pm.css | 8 + .../public/admin/assets/chat-p-VoiQPW.js | 8 + .../public/admin/assets/chat-u79Q-XSS.js | 8 - .../public/admin/assets/chevereto-CrU0O1ko.js | 8 - .../public/admin/assets/chevereto-DZq9P4Ob.js | 8 + .../public/admin/assets/classify-C53uJCw1.js | 8 - .../public/admin/assets/classify-DyQP9WEl.js | 8 + .../public/admin/assets/clike-BgBwzOhw.js | 8 + .../public/admin/assets/clike-DWq2Y8ae.js | 8 - ...lojure-BMjYHr_A.js => clojure-DR_hEDJv.js} | 2 +- .../public/admin/assets/cmake-BQqOBYOt.js | 8 - .../public/admin/assets/cmake-DXn5xaP-.js | 8 + .../public/admin/assets/cobol-XrqhtCFE.js | 8 - .../public/admin/assets/cobol-stawOqaz.js | 8 + .../admin/assets/coffeescript-BTDxI-eT.js | 8 + .../admin/assets/coffeescript-S37ZYGWr.js | 8 - .../admin/assets/commonlisp-5jcOZwOE.js | 8 - .../admin/assets/commonlisp-vq6DHwts.js | 8 + .../public/admin/assets/config-BrbFL53_.js | 8 + .../public/admin/assets/config-DBls5jtO.js | 8 - .../public/admin/assets/crami-DF3UkRa8.js | 9 - .../public/admin/assets/crami-R38S4tMZ.js | 8 + .../public/admin/assets/crystal-CRzZ78HM.js | 8 + .../public/admin/assets/crystal-SjHAIU92.js | 8 - .../public/admin/assets/css-BnMrqG3P.js | 8 - .../public/admin/assets/css-ZjFoif2m.js | 8 + .../public/admin/assets/custom-B_7XFeQI.js | 8 + .../public/admin/assets/custom-Dw8_cyTN.js | 8 - .../public/admin/assets/cypher-C_CwsFkJ.js | 8 - .../public/admin/assets/cypher-gJDei3ni.js | 8 + .../public/admin/assets/d-BShv7fp-.js | 8 + .../public/admin/assets/d-pRatUO7H.js | 8 - .../public/admin/assets/diff-DbItnlRl.js | 8 - .../public/admin/assets/diff-UJJ5BM9S.js | 8 + .../admin/assets/dockerfile-BuNIbK2j.js | 8 - .../admin/assets/dockerfile-knGOOxt4.js | 8 + .../public/admin/assets/draw-BqaQv8sQ.css | 8 - .../public/admin/assets/draw-DfPVf5Nv.js | 8 - .../public/admin/assets/dtd-DF_7sFjM.js | 8 - .../public/admin/assets/dtd-DI9Herc-.js | 8 + .../public/admin/assets/duluPay-DRkdzRVh.js | 8 + .../public/admin/assets/dylan-CHJ5qNM_.js | 8 + .../public/admin/assets/dylan-DwRh75JA.js | 8 - .../public/admin/assets/ebnf-B-Df8AvO.js | 8 + .../public/admin/assets/ebnf-CDyGwa7X.js | 8 - .../public/admin/assets/ecl-Cabwm37j.js | 8 - .../public/admin/assets/ecl-DPFc0Uaf.js | 8 + .../{edit-C7lymP1E.css => edit-DCC-RuVO.css} | 2 +- .../admin/assets/edit.password-5Br-3lH_.js | 8 - .../admin/assets/edit.password-CzxHsfr9.js | 8 + .../public/admin/assets/eiffel-CnydiIhH.js | 8 - .../public/admin/assets/eiffel-DR5c0IrL.js | 8 + .../public/admin/assets/elm-D7xaZ7Da.js | 8 + .../public/admin/assets/elm-vLlmbW-K.js | 8 - .../public/admin/assets/email-Bu_bNWMh.js | 8 - .../public/admin/assets/email-CdNPUFnz.js | 8 + .../public/admin/assets/epay-ClyHoC23.js | 8 - .../public/admin/assets/epay-D7_9P03X.js | 8 + .../public/admin/assets/erlang-BNw1qcRV.js | 8 - .../public/admin/assets/erlang-BuqgqA5h.js | 8 + ...{factor-D8pE9siL.js => factor-CFXhaUWb.js} | 2 +- .../public/admin/assets/fcl-CVaBTCzQ.js | 8 + .../public/admin/assets/fcl-Kvtd6kyn.js | 8 - .../public/admin/assets/forth-Dri_5nFc.js | 8 + .../public/admin/assets/forth-Ffai-XNe.js | 8 - ...ortran-DYz_wnZ1.js => fortran-DL7KluxX.js} | 2 +- .../public/admin/assets/gas-5kEe4nk0.js | 8 + .../public/admin/assets/gas-Bneqetm1.js | 8 - ...herkin-heZmZLOM.js => gherkin-B6X1vGSW.js} | 2 +- .../admin/assets/github-redirect-BM9nXGWb.js | 8 - .../public/admin/assets/groovy-DKLxxR9y.js | 8 - .../public/admin/assets/groovy-DnIzCrpZ.js | 8 + .../public/admin/assets/haskell-BWDZoCOh.js | 8 - .../public/admin/assets/haskell-CmdsSjFB.js | 8 + .../public/admin/assets/haxe-D25e-2l-.js | 8 + .../public/admin/assets/haxe-pv4rovob.js | 8 - .../public/admin/assets/http-BKJkqRj4.js | 8 + .../public/admin/assets/http-DBlCnlav.js | 8 - .../public/admin/assets/hupijiao-BdWFBu4d.js | 8 + .../public/admin/assets/hupijiao-PQUyy35q.js | 8 - .../assets/identityVerification-Bom9GN-v.js | 8 + .../assets/identityVerification-oP_pBzIE.js | 8 - .../{idl-BEugSyMb.js => idl-pcmmZuaN.js} | 2 +- ...{index-7C4DsIyW.css => index-1jQ9FMls.css} | 2 +- .../public/admin/assets/index-1mKiREKi.css | 8 + .../public/admin/assets/index-6QRvoxq4.js | 514 - .../public/admin/assets/index-8uUs3y5b.js | 8 - .../public/admin/assets/index-B-e7m70K.js | 8 - .../public/admin/assets/index-B0KIvOZu.js | 8 - .../public/admin/assets/index-B0yaT7Pj.js | 8 - .../public/admin/assets/index-B1pFhXfc.js | 8 + .../public/admin/assets/index-B5v14alw.js | 8 + .../public/admin/assets/index-B9lYkwfU.css | 8 - .../public/admin/assets/index-BE-LteFu.js | 8 - .../public/admin/assets/index-BE5tQEZB.js | 8 - .../public/admin/assets/index-BERX8Mlm.js | 9 + .../public/admin/assets/index-BFJf1VL1.js | 8 + .../public/admin/assets/index-BFk93msl.js | 8 - .../public/admin/assets/index-BKsxNJi6.js | 8 + .../public/admin/assets/index-BLLHBlas.js | 8 - .../public/admin/assets/index-BLqJ8QDu.js | 8 + .../public/admin/assets/index-BRLpoAL3.js | 8 + .../public/admin/assets/index-BRrAnYwh.js | 8 - .../public/admin/assets/index-BS70MvZz.js | 8 + .../public/admin/assets/index-BTtsYu0a.js | 8 + ...{index-ucei9Tgm.css => index-BU6DqTDT.css} | 2 +- .../public/admin/assets/index-BWLuTDA6.js | 8 + .../public/admin/assets/index-BYOhJwby.js | 8 - .../public/admin/assets/index-Ba5HOdXi.js | 8 + .../public/admin/assets/index-Bc9Zhmen.js | 8 - .../public/admin/assets/index-Bd4myPrr.js | 8 - .../public/admin/assets/index-BdAj7OgB.js | 8 - .../public/admin/assets/index-BdhdXhTT.js | 8 - .../public/admin/assets/index-Bnpp2PsS.js | 8 - .../public/admin/assets/index-BqCS7s31.js | 8 + .../public/admin/assets/index-Bt1eUHSh.js | 8 + .../public/admin/assets/index-BuhDZ9J1.js | 8 + .../public/admin/assets/index-BwuB6c9W.js | 8 - .../public/admin/assets/index-BwvH2ULl.js | 8 - .../public/admin/assets/index-Bz6lYfzJ.js | 8 + .../public/admin/assets/index-C3NItWbX.js | 8 + .../public/admin/assets/index-CDnXnCbp.js | 8 + .../public/admin/assets/index-CGed-Lii.js | 8 + .../public/admin/assets/index-CJZijCqE.js | 8 + .../public/admin/assets/index-CJbdo3UB.js | 8 - .../public/admin/assets/index-CQq7nD5J.js | 8 - .../public/admin/assets/index-CTsqQodT.js | 8 - .../public/admin/assets/index-CVdKItNW.js | 8 + .../public/admin/assets/index-CYAFQ7HU.js | 8 - .../public/admin/assets/index-CZaxHimt.js | 8 + .../public/admin/assets/index-CbgLRpel.js | 8 - ...{index-CyUQOSLA.css => index-CeD4nVK7.css} | 2 +- .../public/admin/assets/index-ChkpeOnk.js | 8 + .../public/admin/assets/index-Cho6Pr_4.js | 8 - .../public/admin/assets/index-CoAQ05zQ.js | 8 + .../public/admin/assets/index-Cs7G3EBC.js | 8 + .../public/admin/assets/index-CtOJrsbC.js | 8 + .../public/admin/assets/index-D4nnD7rC.css | 8 - .../public/admin/assets/index-D5dkoBo_.js | 14 - .../public/admin/assets/index-D9XTqpwG.css | 8 - .../public/admin/assets/index-DA118ti0.js | 8 + .../public/admin/assets/index-DARZUbFw.css | 8 - .../public/admin/assets/index-DFcpibhB.js | 8 - .../public/admin/assets/index-DHthMOII.css | 8 + .../public/admin/assets/index-DLgR7VQ5.css | 8 - .../public/admin/assets/index-DOx8FTtk.js | 8 + .../public/admin/assets/index-DRUzQ5v3.js | 8 + .../public/admin/assets/index-D_TwDoFD.js | 8 - ...{index--3skRaHe.css => index-Dahfp9sk.css} | 2 +- .../public/admin/assets/index-Dgty_-Sl.js | 8 + ...{index-KzA8AQdP.css => index-DhHevLD5.css} | 2 +- .../public/admin/assets/index-DhWfG07N.js | 8 + .../public/admin/assets/index-DlQMm9C_.js | 8 - .../public/admin/assets/index-DlXuFYKA.css | 8 + .../public/admin/assets/index-Dp3CZhIR.js | 8 + .../public/admin/assets/index-DpvF2gU0.js | 8 - .../public/admin/assets/index-Dq5t6Z0r.js | 8 - .../public/admin/assets/index-Dqh7E9u3.js | 8 - .../public/admin/assets/index-Dt8wcX7O.css | 8 + .../public/admin/assets/index-DwPJRGZ5.js | 8 - .../public/admin/assets/index-DyGHaFdn.js | 12 - .../public/admin/assets/index-FQR52wpL.js | 8 - .../public/admin/assets/index-GgFTTSiK.js | 8 + .../public/admin/assets/index-HbrSBKa6.js | 8 + .../public/admin/assets/index-J6vOXMm5.js | 8 - .../public/admin/assets/index-N1kQyP62.js | 8 + .../public/admin/assets/index-OKLnA-zv.css | 8 + .../public/admin/assets/index-RKW8DBPc.js | 9 - .../public/admin/assets/index-V-U6qRSP.js | 8 - ...{index-DiTAFdcL.css => index-ZpvBQ3Hh.css} | 0 .../public/admin/assets/index-b8Ls1WmH.css | 16 + .../public/admin/assets/index-cHk2eZex.js | 10 - .../public/admin/assets/index-dH3cTfOh.js | 8 + .../public/admin/assets/index-eP4h4BlF.js | 8 - .../public/admin/assets/index-eqjq1fUS.css | 8 - .../public/admin/assets/index-g-A10Yme.js | 8 + .../public/admin/assets/index-gPQwgooA.js | 8 + .../public/admin/assets/index-i8Bdu04L.js | 8 + .../public/admin/assets/index-kG79ZC54.js | 8 - .../public/admin/assets/index-lXyw_eK-.js | 8 + .../public/admin/assets/index-matkXqi_.css | 16 - .../public/admin/assets/index-s5oNnYH8.js | 8 + .../public/admin/assets/index-vyoTLGOp.css | 8 + .../public/admin/assets/index-wNqALqIp.js | 8 - .../public/admin/assets/index-wYwQQGda.js | 8 + ...ue_type_script_setup_true_lang-4tK_xNzF.js | 8 - ...ue_type_script_setup_true_lang-AClYjrVV.js | 8 + ...ue_type_script_setup_true_lang-BGlBKwum.js | 8 - ...ue_type_script_setup_true_lang-BIJvuBmw.js | 8 - ...ue_type_script_setup_true_lang-BgKLAU11.js | 8 - ...ue_type_script_setup_true_lang-BhIKqf2a.js | 8 - ...ue_type_script_setup_true_lang-Bugv63mj.js | 8 - ...ue_type_script_setup_true_lang-CJnFI54p.js | 8 - ...ue_type_script_setup_true_lang-CReMfaKl.js | 8 + ...ue_type_script_setup_true_lang-Cp9p1HkJ.js | 8 + ...ue_type_script_setup_true_lang-DBlFcaHd.js | 8 + ...ue_type_script_setup_true_lang-DN03WRps.js | 8 + ...ue_type_script_setup_true_lang-DNXKkRlZ.js | 8 - ...ue_type_script_setup_true_lang-DOqLWnBB.js | 8 + ...ue_type_script_setup_true_lang-DW2jDI9h.js | 8 - ...ue_type_script_setup_true_lang-DbfRBGyF.js | 8 + ...ue_type_script_setup_true_lang-Do4XPH2t.js | 8 + ...ue_type_script_setup_true_lang-DpB-kSh7.js | 8 + ...ue_type_script_setup_true_lang-PUnUpH4H.js | 8 + ...ue_type_script_setup_true_lang-c3O57XSg.js | 8 - ...ue_type_script_setup_true_lang-mQp5T4Ar.js | 8 + ...ue_type_script_setup_true_lang-zXZwbW_j.js | 8 - .../public/admin/assets/interface-C0pUInT0.js | 8 - .../public/admin/assets/item-APr-PS9y.js | 8 + .../public/admin/assets/item-CgoQGTTQ.js | 8 - .../public/admin/assets/item-DKw0u6VA.js | 8 - .../public/admin/assets/item-DZoJPB2Z.js | 8 + ...ue_type_script_setup_true_lang-C02ico3V.js | 8 - ...ue_type_script_setup_true_lang-D5h42eqV.js | 8 + ...ue_type_script_setup_true_lang-Dhzk_uDL.js | 8 - ...ue_type_script_setup_true_lang-aMXYc_KV.js | 8 + .../admin/assets/javascript-D48wDJXV.js | 8 + .../admin/assets/javascript-iSgyE4tI.js | 8 - .../public/admin/assets/jinja2-C4DGRd-O.js | 8 - .../public/admin/assets/jinja2-DhgKlfW7.js | 8 + .../public/admin/assets/julia-DjdwvFuI.js | 8 + .../public/admin/assets/julia-DuME0IfC.js | 8 - .../public/admin/assets/key-CrR4vULd.js | 8 + .../public/admin/assets/key-SbZ15kXg.js | 9 - .../public/admin/assets/leftSide-CgNuco0Q.js | 8 + .../public/admin/assets/leftSide-VBkbFeUr.js | 8 - ...ue_type_script_setup_true_lang-BTr4xL8t.js | 8 + ...ue_type_script_setup_true_lang-Dg-uHS6-.js | 8 - .../public/admin/assets/link-BvzwK7mO.js | 8 - .../public/admin/assets/link-Dd6acFu3.js | 8 + .../public/admin/assets/link-Dx3sI3vO.css | 8 - .../public/admin/assets/link-DyGASR6Z.css | 8 + .../admin/assets/livescript-HO6ttBFx.js | 8 + .../admin/assets/livescript-k3uCVVjK.js | 8 - .../admin/assets/localStorage-D9Ly4FTr.js | 8 - .../admin/assets/localStorage-Dm0jFFHY.js | 8 + .../public/admin/assets/login-CWBz1yfa.js | 8 - .../public/admin/assets/login-DUOByp_A.js | 8 + .../public/admin/assets/ltzf-BGADXySl.js | 8 - .../public/admin/assets/ltzf-BvFemXdK.js | 8 + .../public/admin/assets/lua-8DXOpKDz.js | 8 + .../public/admin/assets/lua-BgMRiT3U.js | 8 - .../admin/assets/marked.esm-8ZxQ78w7.js | 63 - .../admin/assets/mathematica-DTrFuWx2.js | 8 - .../admin/assets/mathematica-IIbmv7SK.js | 8 + .../public/admin/assets/mbox-CNhZ1qSd.js | 8 - .../public/admin/assets/mbox-DoeuZPxA.js | 8 + .../{mirc-CjQqDB4T.js => mirc-DkvFAiy5.js} | 2 +- .../public/admin/assets/mllike-3c2dg9RT.js | 8 + .../public/admin/assets/mllike-C_8OmSiT.js | 8 - .../public/admin/assets/modelica-DSrSSXCg.js | 8 + .../public/admin/assets/modelica-Dc1JOy9r.js | 8 - .../public/admin/assets/models-Bn8M3XEv.js | 8 + .../public/admin/assets/mpay-02LM1-hB.js | 8 - .../public/admin/assets/mpay-B-BmvDhQ.js | 8 + .../public/admin/assets/mscgen-B2igx18G.js | 8 + .../public/admin/assets/mscgen-BA5vi2Kp.js | 8 - .../public/admin/assets/mumps-BT43cFF4.js | 8 - .../public/admin/assets/mumps-zvxmGV4l.js | 8 + .../public/admin/assets/nginx-B4hAVlXN.js | 8 + .../public/admin/assets/nginx-DdIZxoE0.js | 8 - .../public/admin/assets/notice-BrwZwNuE.js | 8 + .../public/admin/assets/notice-Dl9A1sfn.js | 8 - .../{nsis-CEAdamBV.js => nsis-BvKfQ9lQ.js} | 2 +- .../public/admin/assets/ntriples-BfvgReVJ.js | 8 - .../public/admin/assets/ntriples-FFvkTduk.js | 8 + .../public/admin/assets/octave-C4hdQ5Hf.js | 8 + .../public/admin/assets/octave-Ck1zUtKM.js | 8 - .../public/admin/assets/oz-BzwKVEFT.js | 8 - .../public/admin/assets/oz-qQq7irPq.js | 8 + .../public/admin/assets/package-B_VYKnha.js | 8 - .../public/admin/assets/package-BcYUNEpY.js | 8 + .../public/admin/assets/package-DWi-wsDP.js | 8 + .../public/admin/assets/package-nRT1s46o.js | 8 - .../public/admin/assets/pascal-B1wCu0_E.js | 8 - .../public/admin/assets/pascal-CafrKXZF.js | 8 + .../public/admin/assets/perl-CdXCOZ3F.js | 8 - .../public/admin/assets/perl-tdMlh9QA.js | 8 + .../public/admin/assets/phone-BwZkxxUB.js | 8 + .../public/admin/assets/phone-DvRFs8Iq.js | 8 - .../public/admin/assets/pig-CevX1Tat.js | 8 - .../public/admin/assets/pig-CwGJVRC4.js | 8 + .../public/admin/assets/plugin-BB9dueQ_.js | 8 - .../public/admin/assets/points-7mr5fEHY.js | 8 - .../public/admin/assets/points-CpXy5ei9.js | 8 + .../public/admin/assets/polyfills-CChaUeAE.js | 8 - .../public/admin/assets/polyfills-DxIpxyf0.js | 8 + .../admin/assets/powershell-CFHJl5sT.js | 8 - .../admin/assets/powershell-D1ly3AHC.js | 8 + .../admin/assets/properties-C78fOPTZ.js | 8 - .../admin/assets/properties-_nPj978X.js | 8 + .../public/admin/assets/protobuf-B4y9do6W.js | 8 + .../public/admin/assets/protobuf-ChK-085T.js | 8 - .../public/admin/assets/pug-BmUsPMDj.js | 8 - .../public/admin/assets/pug-_kJOm_E2.js | 8 + .../public/admin/assets/puppet-Bc-yJKzi.js | 8 + .../public/admin/assets/puppet-DMA9R1ak.js | 8 - .../public/admin/assets/python-BuPzkPfP.js | 8 - .../public/admin/assets/python-DD-Q2bae.js | 8 + .../public/admin/assets/q-B0kTJ4cI.js | 8 + .../public/admin/assets/q-ZnEupP5q.js | 8 - .../public/admin/assets/r-BA4EbLKE.js | 8 + .../public/admin/assets/r-DUYO_cvP.js | 8 - .../public/admin/assets/register-1wwcbwRm.js | 8 - ...ter-DsQMN5kC.css => register-BVrASrQH.css} | 0 .../public/admin/assets/register-VCiIC402.js | 8 + .../public/admin/assets/reload-C76-1XLf.js | 8 + .../public/admin/assets/reload-XgcEbP6L.js | 8 - .../public/admin/assets/rightSide-CF_-JibU.js | 8 + .../public/admin/assets/rightSide-DeRod8ar.js | 8 - ...ue_type_script_setup_true_lang-Bh_y80-_.js | 8 - ...ue_type_script_setup_true_lang-ClZNHSw-.js | 8 + .../public/admin/assets/rpm-CTu-6PCP.js | 8 - .../public/admin/assets/rpm-DI_rRufH.js | 8 + .../public/admin/assets/ruby-B2Rjki9n.js | 8 - .../public/admin/assets/ruby-CR-u2WLS.js | 8 + .../public/admin/assets/s3-CCx8GMyA.js | 8 + .../{sas-B4kiWyti.js => sas-Bqaci40L.js} | 2 +- .../public/admin/assets/scheme-C41bIUwD.js | 8 - .../public/admin/assets/scheme-qjP0V5Ag.js | 8 + .../public/admin/assets/setting-C2TdzxY1.js | 8 - ...ting-DPas9sHG.css => setting-C7NApC_O.css} | 2 +- .../public/admin/assets/setting-CecJapUm.js | 8 + .../public/admin/assets/shell-BLav31RL.js | 8 + .../public/admin/assets/shell-CjFT_Tl9.js | 8 - .../public/admin/assets/sieve-C3Gn_uJK.js | 8 - .../public/admin/assets/sieve-r025o_jW.js | 8 + .../admin/assets/simple-mode-C3vEBAcb.js | 8 + .../admin/assets/simple-mode-C4Nsj8zu.js | 8 - .../public/admin/assets/smalltalk-C7J3IyEP.js | 8 + .../public/admin/assets/smalltalk-CnHTOXQT.js | 8 - .../public/admin/assets/solr-78MBEUkU.js | 8 + .../public/admin/assets/solr-DehyRSwq.js | 8 - .../public/admin/assets/sparql-BRLJFz69.js | 8 + .../public/admin/assets/sparql-DkYu6x3z.js | 8 - .../admin/assets/spreadsheet-BCZA_wO0.js | 8 - .../admin/assets/spreadsheet-CGlWr0eM.js | 8 + .../public/admin/assets/sql-B3SPsWL6.js | 8 + .../public/admin/assets/sql-C4g8LzGK.js | 8 - .../public/admin/assets/stex-Ba7Sj9VR.js | 8 + .../public/admin/assets/stex-C3f8Ysf7.js | 8 - .../public/admin/assets/style-5OA7v-GU.css | 8 + .../public/admin/assets/style-CSuzBWCF.js | 147 - .../public/admin/assets/style-ClrjWzkr.js | 9 + .../public/admin/assets/style-DzVD5h9V.css | 8 - ...{stylus-q6zbLY83.js => stylus-OdhglgkO.js} | 2 +- .../public/admin/assets/sub-BYbZdG6Y.js | 8 - .../public/admin/assets/sub-hQISPUS5.js | 8 + ...ue_type_script_setup_true_lang-6LQFZuiJ.js | 8 - ...ue_type_script_setup_true_lang-SYX2vZ5k.js | 8 + .../public/admin/assets/swift-B_XXVlXX.js | 8 + .../public/admin/assets/swift-BzpIVaGY.js | 8 - .../public/admin/assets/tcl-B2fODqDH.js | 8 + .../public/admin/assets/tcl-DVfN8rqt.js | 8 - .../public/admin/assets/tencent-BAqF1PoT.js | 8 + .../public/admin/assets/tencent-DLUjGcyt.js | 8 - .../public/admin/assets/textile-BuVhTOzU.js | 8 + .../public/admin/assets/textile-CnDTJFAw.js | 8 - .../admin/assets/tiddlywiki-BgR6AEZu.js | 8 + .../admin/assets/tiddlywiki-DO-Gjzrf.js | 8 - .../public/admin/assets/tiki-CI-ztowC.js | 8 + .../public/admin/assets/tiki-DGYXhP31.js | 8 - .../public/admin/assets/toml-BQXy8elZ.js | 8 + .../public/admin/assets/toml-BXUEaScT.js | 8 - .../public/admin/assets/troff-Ce85hlLp.js | 8 + .../public/admin/assets/troff-wAsdV37c.js | 8 - .../public/admin/assets/ttcn-BxnYHtq8.js | 8 + .../public/admin/assets/ttcn-CiGrtVSZ.js | 8 - .../public/admin/assets/ttcn-cfg-BIkV9KBc.js | 8 - .../public/admin/assets/ttcn-cfg-CKJxb-l2.js | 8 + .../public/admin/assets/turtle-B1tBg_DP.js | 8 - .../public/admin/assets/turtle-BkSuIpt-.js | 8 + .../public/admin/assets/upload-DwmqW_vL.js | 8 + .../use-resolve-button-type-BE1XPlJv.js | 8 - .../use-resolve-button-type-DnRVrBaM.js | 8 + .../admin/assets/useMainPage--yVtHxDh.js | 8 - .../admin/assets/useMainPage-Dbp8uSF1.js | 8 + .../public/admin/assets/useMenu-CK91fAX9.js | 8 + .../public/admin/assets/useMenu-DJ8_3Y3q.js | 8 - .../admin/assets/userAgreement-CNd8Qla0.js | 8 - .../admin/assets/userAgreement-DZ5u8Z6E.js | 8 + .../admin/assets/utcFormatTime-BtFjiA-p.js | 8 + .../admin/assets/utcformatTime-Bq4gDWNx.js | 8 - .../public/admin/assets/vb-BHgjm0DN.js | 8 + .../public/admin/assets/vb-CmGdzxic.js | 8 - .../public/admin/assets/vbscript-BuJXcnF6.js | 8 - .../public/admin/assets/vbscript-Dawdd5GZ.js | 8 + .../public/admin/assets/velocity-BdD_26Jv.js | 8 + .../public/admin/assets/velocity-D8B20fx6.js | 8 - .../public/admin/assets/verilog-B4LBqg_1.js | 8 + .../public/admin/assets/verilog-C6RDOZhf.js | 8 - .../public/admin/assets/vhdl-CWWH2SUo.js | 8 + .../public/admin/assets/vhdl-lSbBsy5d.js | 8 - .../public/admin/assets/violation-BuG_b462.js | 8 - .../public/admin/assets/violation-CLUBFwNt.js | 8 + ...at-DJXUFUH_.css => violation-CWzX84hX.css} | 0 .../public/admin/assets/visible-D8lJUNYg.js | 8 - .../public/admin/assets/webidl-CGwyPRYs.js | 8 + .../public/admin/assets/webidl-ZXfAyPTL.js | 8 - .../public/admin/assets/wechat-B077V9uG.js | 8 - .../public/admin/assets/wechat-BhHNBWBZ.js | 8 + .../public/admin/assets/wechat-Cg92RNH0.js | 8 + .../public/admin/assets/wechat-iHfqycBm.js | 8 - .../assets/welcomePageSettings-BNqbw3Pg.js | 8 - .../assets/welcomePageSettings-FlDP6m3H.js | 8 + .../public/admin/assets/xquery-CVDBqZPY.js | 8 + .../public/admin/assets/xquery-WRlm2TX8.js | 8 - .../public/admin/assets/yacas-BJ4BC0dw.js | 8 - .../public/admin/assets/yacas-I8QjZlxf.js | 8 + .../public/admin/assets/z80-D8p3gKXp.js | 8 + .../public/admin/assets/z80-Hz9HOZM7.js | 8 - AIWebQuickDeploy/public/admin/favicon.ico | Bin 15086 -> 9662 bytes AIWebQuickDeploy/public/admin/index.html | 6 +- .../public/chat}/apple-touch-icon.png | Bin .../public/chat/assets/404-0d6db85f.svg | 1 - .../public/chat/assets/Right-153af9c5.js | 1 - .../_plugin-vue_export-helper-c27b6911.js | 1 - .../public/chat/assets/chat-7eb7de6c.js | 653 - .../public/chat/assets/chat-fb203400.css | 1 - .../public/chat/assets/crami-173ca461.js | 1 - .../public/chat/assets/index-1362473a.js | 1 - .../public/chat/assets/index-404bb920.css | 1 - .../public/chat/assets/index-40baf14c.js | 62 - .../public/chat/assets/index-5212be5f.css | 1 - .../public/chat/assets/index-5d3b5439.js | 1 - .../public/chat/assets/index-6e56dfd3.css | 10 - .../public/chat/assets/index-756d601a.css | 1 - .../public/chat/assets/index-7e813bfa.js | 3 - .../public/chat/assets/index-e614ee1e.js | 1 - .../public/chat/assets/index-fb60d41a.js | 53 - .../public/chat/assets/naive-ui-64ac446a.js | 3328 - .../chat/assets/useBasicLayout-18dd2ca5.js | 1 - .../public/chat/assets/user-3d98b148.js | 1 - .../public/chat/assets/v-viewer-ead8b014.js | 17 - .../public/chat/assets/vue-c19408e5.js | 17 - .../chat/assets/vueuse-motion-563da5fd.js | 5 - .../public/chat/css/chat-f45736e0.css | 1 + .../public/chat/css/index-7222b59c.css | 1 + .../KaTeX_AMS-Regular-0cdd387c.woff2 | Bin .../KaTeX_AMS-Regular-30da91e8.woff | Bin .../KaTeX_AMS-Regular-68534840.ttf | Bin .../KaTeX_Caligraphic-Bold-07d8e303.ttf | Bin .../KaTeX_Caligraphic-Bold-1ae6bd74.woff | Bin .../KaTeX_Caligraphic-Bold-de7701e4.woff2 | Bin .../KaTeX_Caligraphic-Regular-3398dd02.woff | Bin .../KaTeX_Caligraphic-Regular-5d53e70a.woff2 | Bin .../KaTeX_Caligraphic-Regular-ed0b7437.ttf | Bin .../KaTeX_Fraktur-Bold-74444efd.woff2 | Bin .../KaTeX_Fraktur-Bold-9163df9c.ttf | Bin .../KaTeX_Fraktur-Bold-9be7ceb8.woff | Bin .../KaTeX_Fraktur-Regular-1e6f9579.ttf | Bin .../KaTeX_Fraktur-Regular-51814d27.woff2 | Bin .../KaTeX_Fraktur-Regular-5e28753b.woff | Bin .../KaTeX_Main-Bold-0f60d1b8.woff2 | Bin .../KaTeX_Main-Bold-138ac28d.ttf | Bin .../KaTeX_Main-Bold-c76c5d69.woff | Bin .../KaTeX_Main-BoldItalic-70ee1f64.ttf | Bin .../KaTeX_Main-BoldItalic-99cd42a3.woff2 | Bin .../KaTeX_Main-BoldItalic-a6f7ec0d.woff | Bin .../KaTeX_Main-Italic-0d85ae7c.ttf | Bin .../KaTeX_Main-Italic-97479ca6.woff2 | Bin .../KaTeX_Main-Italic-f1d6ef86.woff | Bin .../KaTeX_Main-Regular-c2342cd8.woff2 | Bin .../KaTeX_Main-Regular-c6368d87.woff | Bin .../KaTeX_Main-Regular-d0332f52.ttf | Bin .../KaTeX_Math-BoldItalic-850c0af5.woff | Bin .../KaTeX_Math-BoldItalic-dc47344d.woff2 | Bin .../KaTeX_Math-BoldItalic-f9377ab0.ttf | Bin .../KaTeX_Math-Italic-08ce98e5.ttf | Bin .../KaTeX_Math-Italic-7af58c5e.woff2 | Bin .../KaTeX_Math-Italic-8a8d2445.woff | Bin .../KaTeX_SansSerif-Bold-1ece03f7.ttf | Bin .../KaTeX_SansSerif-Bold-e99ae511.woff2 | Bin .../KaTeX_SansSerif-Bold-ece03cfd.woff | Bin .../KaTeX_SansSerif-Italic-00b26ac8.woff2 | Bin .../KaTeX_SansSerif-Italic-3931dd81.ttf | Bin .../KaTeX_SansSerif-Italic-91ee6750.woff | Bin .../KaTeX_SansSerif-Regular-11e4dc8a.woff | Bin .../KaTeX_SansSerif-Regular-68e8c73e.woff2 | Bin .../KaTeX_SansSerif-Regular-f36ea897.ttf | Bin .../KaTeX_Script-Regular-036d4e95.woff2 | Bin .../KaTeX_Script-Regular-1c67f068.ttf | Bin .../KaTeX_Script-Regular-d96cdf2b.woff | Bin .../KaTeX_Size1-Regular-6b47c401.woff2 | Bin .../KaTeX_Size1-Regular-95b6d2f1.ttf | Bin .../KaTeX_Size1-Regular-c943cc98.woff | Bin .../KaTeX_Size2-Regular-2014c523.woff | Bin .../KaTeX_Size2-Regular-a6b2099f.ttf | Bin .../KaTeX_Size2-Regular-d04c5421.woff2 | Bin .../KaTeX_Size3-Regular-500e04d5.ttf | Bin .../KaTeX_Size3-Regular-6ab6b62e.woff | Bin .../KaTeX_Size4-Regular-99f9c675.woff | Bin .../KaTeX_Size4-Regular-a4af7d41.woff2 | Bin .../KaTeX_Size4-Regular-c647367d.ttf | Bin .../KaTeX_Typewriter-Regular-71d517d6.woff2 | Bin .../KaTeX_Typewriter-Regular-e14fed02.woff | Bin .../KaTeX_Typewriter-Regular-f01f3e87.ttf | Bin .../{assets => images}/360logo-c09b4832.png | Bin .../{assets => images}/alipay-eab94eb8.png | Bin .../{assets => images}/avatar-e985e5ec.png | Bin .../{assets => images}/baidulogo-bf43b354.png | Bin .../{assets => images}/dalle-4f19ad1c.png | Bin .../{assets => images}/favicon-25a41591.ico | Bin .../{assets => images}/google-6f260bf3.gif | Bin .../chat/{assets => images}/logo-89dd0dfe.png | Bin .../{assets => images}/network-0f22586e.png | Bin .../chat/{assets => images}/sdxl-7c167940.png | Bin .../chat/{assets => images}/suno-e14fd81c.ico | Bin .../tencentlogo-358d1ec1.png | Bin .../{assets => images}/wxpay-2d8f84af.png | Bin AIWebQuickDeploy/public/chat/index.html | 26 +- .../public/chat/js/_basePickBy-a1ec2f81.js | 1 + .../public/chat/js/_baseUniq-5ee25ed9.js | 1 + .../chat/js/architecture-4AB2E3PP-22315bac.js | 1 + .../architectureDiagram-IEHRJDOE-967019f3.js | 36 + .../chat/js/blockDiagram-JOT3LUYC-29320812.js | 121 + .../chat/js/c4Diagram-VJAJSXHY-3b30c64a.js | 10 + .../public/chat/js/chart-vendor-e1d59b84.js | 472 + .../public/chat/js/chat-30409f0b.js | 132 + .../public/chat/js/chunk-4BMEZGHF-450323fc.js | 1 + .../public/chat/js/chunk-A2AXSNBT-91f81fe1.js | 164 + .../public/chat/js/chunk-AEK57VVT-b106e120.js | 220 + .../public/chat/js/chunk-D6G4REZN-759b9c9b.js | 1 + .../public/chat/js/chunk-RZ5BOZE2-2248c621.js | 1 + .../public/chat/js/chunk-XZIHB7SX-ad6075e5.js | 1 + .../chat/js/classDiagram-GIVACNV2-ed5c442d.js | 1 + .../js/classDiagram-v2-COTLJTTW-ed5c442d.js | 1 + .../public/chat/js/clone-92746810.js | 1 + .../public/chat/js/cytoscape.esm-73b8622f.js | 331 + .../public/chat/js/dagre-OKDRZEBW-d917c4e2.js | 4 + .../chat/js/diagram-SSKATNLV-b8a27f89.js | 43 + .../chat/js/diagram-VNBRO52H-83eed6a5.js | 24 + .../public/chat/js/editor-vendor-e2dea24d.js | 36 + .../chat/js/erDiagram-Q7BY3M3F-291834c7.js | 60 + .../chat/js/flowDiagram-4HSFHLVR-f87fa481.js | 161 + .../chat/js/ganttDiagram-APWFNJXF-b4e68b07.js | 257 + .../chat/js/gitGraph-O2Q2CXLX-3743c2f0.js | 1 + .../js/gitGraphDiagram-7IBYFJ6S-5a12c14e.js | 65 + .../public/chat/js/graph-f794edc0.js | 1 + .../public/chat/js/index-1507b968.js | 9 + .../public/chat/js/index-ac5ef21b.js | 1 + .../public/chat/js/index-ac663bb2.js | 44 + .../public/chat/js/info-4N47QTOZ-fc134342.js | 1 + .../chat/js/infoDiagram-PH2N3AL5-8b938e5d.js | 2 + .../js/journeyDiagram-U35MCT3I-8811ed3e.js | 138 + .../js/kanban-definition-NDS4AKOZ-33954390.js | 88 + .../public/chat/js/layout-663bb27b.js | 1 + .../chat/js/mermaid-parser.core-a05879fd.js | 120 + .../mindmap-definition-ALO5MXBD-b2a9d38b.js | 95 + .../chat/js/packet-KVYON367-9603ba8c.js | 1 + .../public/chat/js/pie-R6RNRRYF-cd38cf52.js | 1 + .../chat/js/pieDiagram-IB7DONF6-28cac21c.js | 30 + .../js/quadrantDiagram-7GDLP6J5-04760df9.js | 7 + .../public/chat/js/radar-MK3ICKWK-88eb76a9.js | 1 + .../requirementDiagram-KVF5MWMF-3cb34f9e.js | 64 + .../js/sankeyDiagram-QLVOVGJD-e9571b22.js | 10 + .../js/sequenceDiagram-X6HHIX6F-38062ff3.js | 122 + .../chat/js/stateDiagram-DGXRK772-5659f574.js | 1 + .../js/stateDiagram-v2-YXO3MK2T-75cc1610.js | 1 + .../timeline-definition-BDJGKUSR-1df78097.js | 61 + .../public/chat/js/ui-vendor-70145f70.js | 1 + .../public/chat/js/utils-vendor-c35799af.js | 13 + .../public/chat/js/vue-vendor-d751b0f5.js | 25 + .../js/xychartDiagram-VJFVF3MP-f066b0a9.js | 7 + .../public/chat/pwa-192x192.png | Bin .../public/chat/pwa-512x512.png | Bin AIWebQuickDeploy/public/chat/robots.txt | 20 + CHANGELOG.md | 2 - README.md | 60 +- {src/admin => admin}/.env.development | 1 + {src/admin => admin}/.env.production | 0 {src/admin => admin}/.env.test | 0 {src/admin => admin}/.gitignore | 0 {src/admin => admin}/.npmrc | 0 admin/.prettierrc | 12 + {src/admin => admin}/.vscode/extensions.json | 0 admin/.vscode/settings.json | 125 + {src/admin => admin}/index.html | 0 admin/package.json | 110 + .../plop-templates/component/index.hbs | 0 .../plop-templates/component/prompt.js | 0 .../plop-templates/mock/mock.hbs | 0 .../plop-templates/mock/prompt.js | 0 .../plop-templates/page/index.hbs | 0 .../plop-templates/page/prompt.js | 0 .../plop-templates/store/index.hbs | 0 .../plop-templates/store/prompt.js | 0 admin/plopfile.js | 13 + admin/pnpm-lock.yaml | 11014 +++ {src/admin => admin}/postcss.config.js | 2 +- .../public/browser_upgrade/chrome.png | Bin .../public/browser_upgrade/edge.png | Bin .../public/browser_upgrade/index.css | 0 admin/public/favicon.ico | Bin 0 -> 9662 bytes {src/admin => admin}/public/loading.css | 0 admin/scripts/generate.icons.ts | 81 + admin/src/App.vue | 95 + {src/admin => admin}/src/api/index.ts | 6 +- {src/admin => admin}/src/api/modules/app.ts | 0 admin/src/api/modules/autoReply.ts | 10 + .../src/api/modules/badWords.ts | 11 +- admin/src/api/modules/chat.ts | 5 + .../admin => admin}/src/api/modules/config.ts | 0 .../src/api/modules/dashboard.ts | 3 +- admin/src/api/modules/mcp.ts | 8 + .../admin => admin}/src/api/modules/models.ts | 0 admin/src/api/modules/official.ts | 10 + {src/admin => admin}/src/api/modules/order.ts | 0 .../src/api/modules/package.ts | 3 +- .../admin => admin}/src/api/modules/plugin.ts | 0 admin/src/api/modules/upload.ts | 14 + {src/admin => admin}/src/api/modules/user.ts | 12 +- admin/src/assets/CHANGELOG.md | 31 + {src/admin => admin}/src/assets/icons/403.svg | 0 {src/admin => admin}/src/assets/icons/404.svg | 0 .../src/assets/icons/image-load-fail.svg | 0 .../src/assets/icons/toolbar-collapse.svg | 0 .../src/assets/styles/globals.scss | 10 +- .../src/assets/styles/nprogress.scss | 20 +- .../src/assets/styles/resources/utils.scss | 2 +- .../assets/styles/resources/variables.scss | 0 admin/src/components/Auth/index.vue | 20 + admin/src/components/AuthAll/index.vue | 20 + admin/src/components/FileUpload/index.vue | 107 + admin/src/components/FixedActionBar/index.vue | 47 + admin/src/components/IconifyIcon/index.vue | 21 + admin/src/components/ImagePreview/index.vue | 71 + admin/src/components/ImageUpload/index.vue | 274 + admin/src/components/ImagesUpload/index.vue | 310 + admin/src/components/NotAllowed/index.vue | 49 + .../src/components/PageHeader/index.vue | 20 +- admin/src/components/PageMain/index.vue | 56 + admin/src/components/PcasCascader/index.vue | 151 + .../components/PcasCascader/pcas-code.json | 61401 ++++++++++++++++ .../components/PromptTemplateEditor/index.vue | 299 + admin/src/components/SearchBar/index.vue | 49 + admin/src/components/SvgIcon/index.vue | 69 + admin/src/components/SystemInfo/index.vue | 58 + admin/src/components/Trend/index.vue | 38 + .../src/constants/copyright.ts | 0 {src/admin => admin}/src/constants/index.ts | 190 +- admin/src/iconify/data.json | 21650 ++++++ admin/src/iconify/index.json | 14 + {src/admin => admin}/src/iconify/index.ts | 10 +- .../layouts/components/AppSetting/index.vue | 276 +- .../src/layouts/components/BackTop/index.vue | 49 + .../layouts/components/Breadcrumb/index.vue | 21 + .../layouts/components/Breadcrumb/item.vue | 39 + .../layouts/components/Copyright/index.vue | 52 + admin/src/layouts/components/Header/index.vue | 189 + .../layouts/components/HotkeysIntro/index.vue | 55 +- admin/src/layouts/components/Logo/index.vue | 49 + .../layouts/components/MainSidebar/index.vue | 138 + admin/src/layouts/components/Menu/index.vue | 199 + .../src/layouts/components/Menu/item.vue | 98 +- admin/src/layouts/components/Menu/sub.vue | 213 + admin/src/layouts/components/Menu/types.ts | 48 + admin/src/layouts/components/Search/index.vue | 405 + .../layouts/components/SubSidebar/index.vue | 198 + .../components/Topbar/Tabbar/index.vue | 496 + .../Topbar/Toolbar/Breadcrumb/index.vue | 67 + .../Topbar/Toolbar/ColorScheme/index.vue | 64 + .../Topbar/Toolbar/Fullscreen/index.vue | 22 + .../Topbar/Toolbar/NavSearch/index.vue | 29 + .../Topbar/Toolbar/PageReload/index.vue | 8 +- .../components/Topbar/Toolbar/index.vue | 36 + .../components/Topbar/Toolbar/leftSide.vue | 23 + .../components/Topbar/Toolbar/rightSide.vue | 45 +- admin/src/layouts/components/Topbar/index.vue | 98 + admin/src/layouts/components/views/link.vue | 67 + admin/src/layouts/index.vue | 321 + admin/src/layouts/ui-kit/HButton.vue | 28 + admin/src/layouts/ui-kit/HCheckList.vue | 46 + admin/src/layouts/ui-kit/HDialog.vue | 106 + admin/src/layouts/ui-kit/HDropdown.vue | 15 + admin/src/layouts/ui-kit/HDropdownMenu.vue | 47 + admin/src/layouts/ui-kit/HInput.vue | 31 + admin/src/layouts/ui-kit/HKbd.vue | 7 + admin/src/layouts/ui-kit/HSelect.vue | 64 + admin/src/layouts/ui-kit/HSlideover.vue | 118 + admin/src/layouts/ui-kit/HTabList.vue | 55 + admin/src/layouts/ui-kit/HToggle.vue | 38 + .../src/layouts/ui-kit/HTooltip.vue | 20 +- {src/admin => admin}/src/main.ts | 0 {src/admin => admin}/src/menu/index.ts | 12 +- .../menu/modules/multilevel.menu.example.ts | 6 +- {src/admin => admin}/src/mock/app.ts | 8 +- {src/admin => admin}/src/mock/user.ts | 23 +- {src/admin => admin}/src/router/index.ts | 19 +- admin/src/router/modules/app.menu.ts | 38 + .../src/router/modules/chat.menu.ts | 9 - .../src/router/modules/model.menu.ts | 18 +- .../src/router/modules/package.menu.ts | 0 .../src/router/modules/pay.menu.ts | 17 +- .../src/router/modules/secure.menu.ts | 0 .../src/router/modules/storage.menu.ts | 27 +- .../src/router/modules/system.menu.ts | 10 +- .../src/router/modules/user.menu.ts | 21 +- {src/admin => admin}/src/router/routes.ts | 42 +- {src/admin => admin}/src/settings.default.ts | 6 +- {src/admin => admin}/src/settings.ts | 5 +- {src/admin => admin}/src/shims-vue.d.ts | 0 admin/src/store/index.ts | 3 + .../src/store/modules/keepAlive.ts | 30 +- .../admin => admin}/src/store/modules/menu.ts | 58 +- .../src/store/modules/route.ts | 27 +- admin/src/store/modules/settings.ts | 155 + .../src/store/modules/tabbar.ts | 156 +- .../admin => admin}/src/store/modules/user.ts | 7 +- .../src/types/auto-imports.d.ts | 3 +- .../admin => admin}/src/types/components.d.ts | 2 + {src/admin => admin}/src/types/global.d.ts | 176 +- admin/src/types/shims.d.ts | 13 + admin/src/ui-provider/index.ts | 10 + .../admin => admin}/src/ui-provider/index.vue | 2 +- admin/src/utils/composables/useAuth.ts | 33 + .../utils/composables/useGlobalProperties.ts | 6 +- .../src/utils/composables/useMainPage.ts | 6 +- admin/src/utils/composables/useMenu.ts | 20 + .../src/utils/composables/useTabbar.ts | 124 +- .../utils/composables/useViewTransition.ts | 18 + admin/src/utils/dayjs.ts | 6 + {src/admin => admin}/src/utils/directive.ts | 10 +- admin/src/utils/eventBus.ts | 8 + admin/src/utils/index.ts | 5 + .../src/utils/injectionKeys.ts | 6 +- admin/src/utils/system.copyright.ts | 26 + admin/src/utils/utcFormatTime.ts | 14 + admin/src/views/[...all].vue | 53 + admin/src/views/app/application.vue | 1217 + admin/src/views/app/classify.vue | 339 + admin/src/views/chat/chat.vue | 449 + admin/src/views/index.vue | 602 + admin/src/views/login.vue | 140 + admin/src/views/models/baseSetting.vue | 597 + admin/src/views/models/key.vue | 1165 + .../admin => admin}/src/views/order/index.vue | 285 +- .../src/views/package/crami.vue | 377 +- admin/src/views/package/package.vue | 590 + admin/src/views/package/points.vue | 309 + admin/src/views/pay/duluPay.vue | 239 + admin/src/views/pay/epay.vue | 262 + admin/src/views/pay/hupijiao.vue | 179 + admin/src/views/pay/ltzf.vue | 164 + {src/admin => admin}/src/views/pay/mpay.vue | 230 +- admin/src/views/pay/wechat.vue | 212 + admin/src/views/personal/edit.password.vue | 119 + .../src/views/personal/setting.vue | 184 +- {src/admin => admin}/src/views/reload.vue | 8 +- .../src/views/sensitive/autpReply.vue | 212 +- .../src/views/sensitive/baiduSensitive.vue | 107 +- admin/src/views/sensitive/custom.vue | 215 + .../views/sensitive/identityVerification.vue | 167 +- .../src/views/sensitive/violation.vue | 215 +- .../admin => admin}/src/views/storage/ali.vue | 152 +- admin/src/views/storage/chevereto.vue | 130 + admin/src/views/storage/localStorage.vue | 101 + admin/src/views/storage/s3.vue | 176 + .../src/views/storage/tencent.vue | 157 +- .../src/views/system/baiduStatistics.vue | 117 +- admin/src/views/system/baseConfiguration.vue | 524 + admin/src/views/system/notice.vue | 159 + .../src/views/system/welcomePageSettings.vue | 94 +- .../src/views/users/accountLog.vue | 220 +- .../admin => admin}/src/views/users/email.vue | 172 +- .../admin => admin}/src/views/users/index.vue | 429 +- .../admin => admin}/src/views/users/phone.vue | 176 +- .../src/views/users/register.vue | 326 +- admin/src/views/users/userAgreement.vue | 165 + .../src/views/users/wechat.vue | 202 +- {src/admin => admin}/themes/index.ts | 0 {src/admin => admin}/tsconfig.json | 21 +- admin/tsconfig.node.json | 9 + {src/admin => admin}/uno.config.ts | 46 +- {src/admin => admin}/vite.config.ts | 4 +- {src/admin => admin}/vite/plugins/app-info.ts | 0 {src/admin => admin}/vite/plugins/archiver.ts | 0 .../vite/plugins/auto-import.ts | 0 {src/admin => admin}/vite/plugins/banner.ts | 0 .../vite/plugins/components.ts | 0 .../vite/plugins/compression.ts | 0 {src/admin => admin}/vite/plugins/console.ts | 0 {src/admin => admin}/vite/plugins/devtools.ts | 0 {src/admin => admin}/vite/plugins/index.ts | 28 +- {src/admin => admin}/vite/plugins/layouts.ts | 0 admin/vite/plugins/minify.ts | 40 + {src/admin => admin}/vite/plugins/mock.ts | 0 {src/admin => admin}/vite/plugins/pages.ts | 0 {src/admin => admin}/vite/plugins/svg-icon.ts | 0 {src/admin => admin}/vite/plugins/unocss.ts | 0 build.sh | 37 + {src/chat => chat}/.commitlintrc.json | 0 chat/.env | 8 + {src/chat => chat}/.env.production | 3 + {src/chat => chat}/.gitattributes | 0 {src/chat => chat}/.gitignore | 5 + chat/.npmrc | 3 + chat/.prettierrc | 10 + {src => chat}/.vscode/settings.json | 31 +- {src/chat => chat}/config/index.ts | 0 {src/chat => chat}/config/proxy.ts | 3 +- chat/electron-builder.yml | 59 + chat/env.d.ts | 9 + {src/chat => chat}/index.html | 14 +- chat/package.json | 111 + chat/pnpm-lock.yaml | 7455 ++ {src/chat => chat}/postcss.config.js | 2 +- .../public/apple-touch-icon.png | Bin {src/chat => chat}/public/browserconfig.xml | 0 {src/admin => chat}/public/favicon.ico | Bin chat/public/icon/android-chrome-192x192.png | Bin 0 -> 5796 bytes chat/public/icon/android-chrome-512x512.png | Bin 0 -> 16250 bytes chat/public/icon/apple-touch-icon.png | Bin 0 -> 5439 bytes .../public/icon/favicon-16x16.png | Bin .../public/icon/favicon-32x32.png | Bin .../public/icon/manifest.webmanifest | 0 .../public/icon/mstile-150x150.png | Bin chat/public/pwa-192x192.png | Bin 0 -> 5796 bytes chat/public/pwa-512x512.png | Bin 0 -> 16250 bytes chat/public/robots.txt | 20 + .../public/safari-pinned-tab.svg | 0 chat/src/App.vue | 200 + {src/chat => chat}/src/api/appStore.ts | 16 +- {src/chat => chat}/src/api/balance.ts | 15 +- {src/chat => chat}/src/api/chatLog.ts | 38 +- chat/src/api/config.ts | 9 + {src/chat => chat}/src/api/crami.ts | 6 +- {src/chat => chat}/src/api/global.ts | 0 {src/chat => chat}/src/api/group.ts | 30 +- chat/src/api/index.ts | 181 + {src/chat => chat}/src/api/models.ts | 0 {src/chat => chat}/src/api/order.ts | 0 {src/chat => chat}/src/api/plugin.ts | 4 +- chat/src/api/share.ts | 15 + {src/chat => chat}/src/api/signin.ts | 0 {src/chat => chat}/src/api/types.ts | 0 chat/src/api/upload.ts | 30 + chat/src/api/user.ts | 116 + .../src/assets/aiavatar/360logo.png | Bin .../src/assets/aiavatar/alilogo.png | Bin .../src/assets/aiavatar/baidulogo.png | Bin .../src/assets/aiavatar/claudelogo.png | Bin .../src/assets/aiavatar/dalle.png | Bin .../src/assets/aiavatar/google.gif | Bin .../src/assets/aiavatar/gpt4logo.png | Bin .../src/assets/aiavatar/midjourney.png | Bin .../src/assets/aiavatar/mindmap.png | Bin .../src/assets/aiavatar/network.png | Bin .../src/assets/aiavatar/openai.svg | 0 .../src/assets/aiavatar/sdxl.png | Bin .../src/assets/aiavatar/suno.ico | Bin .../src/assets/aiavatar/tencentlogo.png | Bin .../src/assets/aiavatar/xunfeilogo.png | Bin .../src/assets/aiavatar/zhipulogo.png | Bin {src/chat => chat}/src/assets/alipay.png | Bin {src/chat => chat}/src/assets/avatar.png | Bin {src/chat => chat}/src/assets/badge.png | Bin .../src/assets/defaultPreset.json | 0 {src/chat => chat}/src/assets/fail.png | Bin .../public => chat/src/assets}/favicon.ico | Bin chat/src/assets/logo.png | Bin 0 -> 5439 bytes {src/chat => chat}/src/assets/market.png | Bin {src/chat => chat}/src/assets/reset.png | Bin {src/chat => chat}/src/assets/wechat.png | Bin {src/chat => chat}/src/assets/wxpay.png | Bin .../src}/components/BadWordsDialog.vue | 44 +- chat/src/components/CloseButtonDemo.vue | 92 + chat/src/components/Dialog/Confirm.vue | 99 + .../src/components/Dialogs/BadWordsDialog.vue | 101 + chat/src/components/HtmlDialog.vue | 327 + .../src}/components/Identity.vue | 78 +- chat/src/components/Login/Email.vue | 390 + chat/src/components/Login/Login.vue | 109 + .../src}/components/Login/SliderCaptcha.vue | 448 +- chat/src/components/Login/Wechat.vue | 159 + chat/src/components/Message/index.vue | 89 + chat/src/components/MobileSettingsDialog.vue | 228 + .../src}/components/PhoneIdentity.vue | 140 +- .../components/Settings/AccountManagement.vue | 1164 + .../components/Settings/DataManagement.vue | 97 + chat/src/components/Settings/MemberCenter.vue | 782 + .../src/components/Settings/MemberPayment.vue | 482 + chat/src/components/Settings/NoticeDialog.vue | 100 + .../src/components/Settings/UserAgreement.vue | 78 + chat/src/components/SettingsDialog.vue | 228 + .../common/DropdownMenu/MenuItem.vue | 120 + .../components/common/DropdownMenu/index.ts | 5 + .../components/common/DropdownMenu/index.vue | 280 + .../common/ImageViewer/GlobalImageViewer.vue | 19 + .../components/common/ImageViewer/index.vue | 490 + .../common/ImageViewer/useImageViewer.ts | 55 + .../src/components/common/QRCode/index.vue | 8 +- .../src/components/common/SvgIcon/index.vue | 2 +- .../src/components/common/Watermark/index.vue | 53 + .../chat => chat}/src/hooks/useBasicLayout.ts | 0 chat/src/hooks/useLanguage.ts | 41 + chat/src/hooks/useTheme.ts | 26 + {src/chat => chat}/src/locales/en-US.json | 4 +- {src/chat => chat}/src/locales/index.ts | 35 +- {src/chat => chat}/src/locales/zh-CN.json | 4 +- {src/chat => chat}/src/locales/zh-TW.json | 14 +- chat/src/main.ts | 84 + chat/src/plugins/imageViewer.ts | 11 + chat/src/services/wechatLogin.ts | 80 + {src/chat => chat}/src/store/index.ts | 2 +- .../src/store/modules/app/helper.ts | 22 +- .../src/store/modules/app/index.ts | 27 +- .../src/store/modules/appStore/helper.ts | 3 +- .../src/store/modules/appStore/index.ts | 0 chat/src/store/modules/auth/helper.ts | 140 + chat/src/store/modules/auth/index.ts | 98 + .../src/store/modules/chat/helper.ts | 23 +- .../src/store/modules/chat/index.ts | 277 +- chat/src/store/modules/global/helper.ts | 88 + chat/src/store/modules/global/index.ts | 291 + chat/src/store/modules/index.ts | 8 + .../src/store/modules/prompt/helper.ts | 0 .../src/store/modules/prompt/index.ts | 0 .../src/store/modules/settings/helper.ts | 0 .../src/store/modules/settings/index.ts | 0 .../src/store/modules/users/helper.ts | 0 .../src/store/modules/users/index.ts | 1 - chat/src/styles/base.css | 10 + .../src/styles/github-markdown.less | 213 +- chat/src/styles/global.less | 255 + {src/chat => chat}/src/styles/highlight.less | 0 chat/src/styles/index.css | 7 + {src/chat => chat}/src/styles/tailwind.css | 0 chat/src/styles/themes/dark.css | 42 + chat/src/styles/themes/light.css | 51 + chat/src/types/clientjs.d.ts | 5 + chat/src/types/electron.d.ts | 19 + chat/src/types/global.d.ts | 6 + chat/src/types/html2pdf.d.ts | 9 + .../types/markdown-it-link-attributes.d.ts | 5 + chat/src/types/pwa.d.ts | 13 + chat/src/types/window.d.ts | 3 + chat/src/types/xml2js.d.ts | 1 + chat/src/typings/chat.d.ts | 158 + chat/src/typings/env.d.ts | 8 + chat/src/typings/global.d.ts | 7 + {src/chat => chat}/src/utils/crypto/index.ts | 3 +- chat/src/utils/dialog.ts | 37 + {src/chat => chat}/src/utils/format/index.ts | 19 +- .../chat => chat}/src/utils/functions/date.ts | 4 +- .../src/utils/functions/debounce.ts | 2 +- .../src/utils/functions/index.ts | 0 .../src/utils/functions/throttle.ts | 7 +- {src/chat => chat}/src/utils/is/index.ts | 4 +- chat/src/utils/logger.ts | 78 + chat/src/utils/message.ts | 52 + chat/src/utils/motion/index.ts | 59 + {src/chat => chat}/src/utils/request/axios.ts | 23 +- chat/src/utils/request/fetch.ts | 185 + {src/chat => chat}/src/utils/request/index.ts | 91 +- chat/src/utils/router.ts | 20 + {src/chat => chat}/src/utils/storage/index.ts | 0 {src/chat => chat}/src/utils/storage/local.ts | 8 +- chat/src/views/chat/chat.vue | 117 + chat/src/views/chat/chatBase.vue | 1677 + .../src/views/chat/components/AiBot/index.vue | 89 +- .../views/chat/components/AppList/index.vue | 420 + .../views/chat/components/AppTips/index.vue | 65 +- .../Footer/components/FilePreview.vue | 191 + .../views/chat/components/Footer/index.vue | 1669 + .../views/chat/components/Header/index.vue | 480 + .../views/chat/components/Message/Avatar.vue | 101 +- .../chat/components/Message/Mermaid/index.vue | 414 + .../chat/components/Message/Text/index.vue | 1411 + .../views/chat/components/Message/index.vue | 176 + .../chat/components/PresetHints/index.vue | 50 + .../views/chat/components/Welcome/index.vue | 102 + chat/src/views/chat/components/sider/List.vue | 339 + .../views/chat/components/sider/ListItem.vue | 173 + .../views/chat/components/sider/Plugin.vue | 136 + .../src/views/chat/components/sider/index.vue | 354 + chat/src/views/chat/hooks/useChat.ts | 50 + chat/src/views/chat/hooks/useScroll.ts | 105 + chat/tailwind.config.js | 1918 + {src/chat => chat}/tsconfig.json | 2 +- chat/vite.config.ts | 88 + chat/vite/plugins/index.ts | 10 + docs/CHANGELOG.md | 884 - docs/DEPLOYMENT.md | 4 +- docs/DEVELOPMENT.md | 10 - docs/FEATURES.md | 86 +- {src/service => service}/.dockerignore | 0 {src => service}/.editorconfig | 2 +- {src/service => service}/.env.docker | 7 +- {src/service => service}/.env.example | 4 +- {src/service => service}/.gitignore | 2 +- service/.prettierrc | 18 + service/.vscode/extensions.json | 8 + service/.vscode/settings.json | 115 + service/Dockerfile | 21 + service/docker-compose.yml | 56 + service/nest-cli.json | 17 + service/package.json | 144 + {src/service => service}/pm2.conf.json | 0 service/pnpm-lock.yaml | 11434 +++ {src/service => service}/src/app.module.ts | 46 +- .../src/common/auth/adminAuth.guard.ts | 0 .../src/common/auth/jwt.strategy.ts | 0 .../src/common/auth/jwtAuth.guard.ts | 8 +- .../src/common/auth/superAuth.guard.ts | 2 +- .../src/common/constants/balance.constant.ts | 0 .../common/constants/errorMessage.constant.ts | 0 .../common/constants/midjourney.constant.ts | 0 .../src/common/constants/status.constant.ts | 4 +- .../src/common/constants/user.constant.ts | 0 .../common/constants/verification.constant.ts | 0 .../common/decorators/rate-limit.decorator.ts | 111 + service/src/common/entity/baseEntity.ts | 40 + .../common/filters/allExceptions.filter.ts | 42 + .../filters/typeOrmQueryFailed.filter.ts | 0 .../src/common/guards/roles/roles.guard.ts | 2 +- .../common/interceptors/abort.interceptor.ts | 0 .../interceptors/transform.interceptor.ts | 16 +- .../common/logger/custom-logger.service.ts | 149 + .../common/middleware/fast-xml-middleware.ts | 69 + .../src/common/middleware/xml.middleware.ts | 0 service/src/common/result/index.ts | 21 + .../src/common/swagger/index.ts | 0 .../src/common/utils/base.ts | 1 - .../src/common/utils/convertUrlToBase64.ts | 20 + service/src/common/utils/correctApiBaseUrl.ts | 24 + .../src/common/utils/createOrderId.ts | 0 .../src/common/utils/createRandomCode.ts | 0 .../common/utils/createRandomInviteCode.ts | 0 .../src/common/utils/createRandomNonceStr.ts | 0 .../src/common/utils/createRandomUid.ts | 0 .../src/common/utils/date.ts | 12 +- service/src/common/utils/doubaoSignature.ts | 420 + .../src/common/utils/encrypt.ts | 5 +- .../src/common/utils/fromatUrl.ts | 0 .../src/common/utils/generateCrami.ts | 4 +- .../src/common/utils/getClientIp.ts | 0 service/src/common/utils/getDiffArray.ts | 14 + service/src/common/utils/getRandomItem.ts | 4 + .../common/utils/getRandomItemFromArray.ts | 0 .../src/common/utils/getTokenCount.ts | 0 .../src/common/utils/handleError.ts | 11 +- .../src/common/utils/hideString.ts | 0 .../src/common/utils/index.ts | 3 + .../src/common/utils/maskCrami.ts | 0 service/src/common/utils/maskEmail.ts | 11 + .../src/common/utils/maskIpAddress.ts | 0 .../common/utils/removeSpecialCharacters.ts | 0 service/src/common/utils/removeThinkTags.ts | 30 + .../src/common/utils/tools.ts | 2 +- .../src/common/utils/utcformatTime.ts | 0 service/src/main.ts | 179 + .../src/modules/aiTool/chat/chat.service.ts | 867 + .../aiTool/search/netSearch.service.ts | 237 + .../src/modules/app/app.controller.ts | 37 +- .../src/modules/app/app.entity.ts | 23 +- .../src/modules/app/app.module.ts | 13 +- service/src/modules/app/app.service.ts | 716 + .../src/modules/app/appCats.entity.ts | 6 + service/src/modules/app/dto/collectApp.dto.ts | 8 + service/src/modules/app/dto/createApp.dto.ts | 111 + .../src/modules/app/dto/createCats.dto.ts | 18 + .../src/modules/app/dto/custonApp.dto.ts | 27 +- .../src/modules/app/dto/deleteApp.dto.ts | 0 service/src/modules/app/dto/deleteCats.dto.ts | 8 + .../src/modules/app/dto/queryApp.dto.ts | 12 +- .../src/modules/app/dto/queryCats.dto.ts | 10 +- .../src/modules/app/dto/updateApp.dto.ts | 3 +- .../src/modules/app/dto/updateCats.dto.ts | 3 +- .../src/modules/app/userApps.entity.ts | 6 +- .../src/modules/auth/auth.controller.ts | 31 +- .../src/modules/auth/auth.module.ts | 4 +- .../src/modules/auth/auth.service.ts | 430 +- .../src/modules/auth/dto/adminLogin.dto.ts | 1 - .../src/modules/auth/dto/authLogin.dto.ts | 8 +- .../src/modules/auth/dto/authRegister.dto.ts | 0 .../src/modules/auth/dto/loginByPhone.dt.ts | 3 +- .../src/modules/auth/dto/sendPhoneCode.dto.ts | 3 +- .../modules/auth/dto/updatePassByOther.dto.ts | 0 .../modules/auth/dto/updatePassword.dto.ts | 6 - .../auth/dto/userRegisterByPhone.dto.ts | 7 +- .../modules/autoReply/autoReply.controller.ts | 26 +- .../src/modules/autoReply/autoReply.entity.ts | 0 .../src/modules/autoReply/autoReply.module.ts | 14 + .../modules/autoReply/autoReply.service.ts | 38 +- .../autoReply}/dto/addAutoReply.dto.ts | 0 .../modules/autoReply/dto/delBadWords.dto.ts | 6 + .../autoReply/dto/queryAutoReply.dto.ts | 20 + .../autoReply}/dto/updateAutoReply.dto.ts | 0 .../modules/badWords/badWords.controller.ts | 10 +- .../src/modules/badWords/badWords.entity.ts | 0 .../src/modules/badWords/badWords.module.ts | 4 +- .../src/modules/badWords/badWords.service.ts | 129 +- .../modules/badWords/dto/addBadWords.dto.ts | 6 + .../modules/badWords/dto/delBadWords.dto.ts | 6 + .../modules/badWords/dto/queryBadWords.dto.ts | 2 +- .../badWords/dto/queryViolation.dto.ts | 8 +- .../badWords/dto/updateBadWords.dto.ts | 16 + .../modules/badWords/violationLog.entity.ts | 2 +- service/src/modules/chat/chat.controller.ts | 29 + .../src/modules/chat/chat.module.ts | 53 +- service/src/modules/chat/chat.service.ts | 1039 + .../src/modules/chat/dto/chatDraw.dto.ts | 30 +- .../src/modules/chat/dto/chatProcess.dto.ts | 25 +- .../src/modules/chat/helper.ts | 20 +- .../modules/chatGroup/chatGroup.controller.ts | 2 +- .../src/modules/chatGroup/chatGroup.entity.ts | 0 .../src/modules/chatGroup/chatGroup.module.ts | 4 +- .../modules/chatGroup/chatGroup.service.ts | 165 +- .../modules/chatGroup/dto/createGroup.dto.ts | 0 .../src/modules/chatGroup/dto/delGroup.dto.ts | 1 - .../modules/chatGroup/dto/updateGroup.dto.ts | 4 - .../src/modules/chatLog/chatLog.controller.ts | 29 +- .../src/modules/chatLog/chatLog.entity.ts | 47 +- .../src/modules/chatLog/chatLog.module.ts | 4 +- .../src/modules/chatLog/chatLog.service.ts | 285 +- .../src/modules/chatLog/dto/chatList.dto.ts | 8 + service/src/modules/chatLog/dto/del.dto.ts | 6 + .../src/modules/chatLog/dto/delByGroup.dto.ts | 6 + .../chatLog/dto/exportExcelChatlog.dto.ts | 28 + .../chatLog/dto/queryAllChatLog.dto.ts | 18 +- .../chatLog/dto/queryAllDrawLog.dto.ts | 36 + .../modules/chatLog/dto/queryByAppId.dto.ts | 4 +- .../modules/chatLog/dto/queryMyChatLog.dto.ts | 8 + .../chatLog/dto/querySingleChat.dto.ts | 8 + .../src/modules/chatLog/dto/recDrawImg.dto.ts | 6 + .../src/modules/crami/crami.controller.ts | 22 +- .../src/modules/crami/crami.entity.ts | 21 +- .../src/modules/crami/crami.module.ts | 0 .../src/modules/crami/crami.service.ts | 106 +- .../src/modules/crami/cramiPackage.entity.ts | 11 +- .../modules/crami/dto/batchDelCrami.dto.ts | 2 +- .../src/modules/crami/dto/createCrami.dto.ts | 15 +- .../modules/crami/dto/createPackage.dto.ts | 77 + .../modules/crami/dto/deletePackage.dto.ts | 8 + .../modules/crami/dto/queryAllCrami.dto.ts | 10 +- .../modules/crami/dto/queryAllPackage.dto.ts | 16 +- .../modules/crami/dto/updatePackage.dto.ts | 3 +- service/src/modules/crami/dto/useCrami.dto.ts | 12 + .../src/modules/database/database.module.ts | 84 + .../src/modules/database/database.service.ts | 131 +- service/src/modules/database/initDatabase.ts | 280 + .../src/modules/globalConfig/config.entity.ts | 2 +- .../globalConfig/dto/queryConfig.dto.ts | 7 +- .../modules/globalConfig/dto/setConfig.dto.ts | 0 .../globalConfig/dto/setConfigCustom.dto.ts | 0 .../globalConfig/globalConfig.controller.ts | 12 +- .../globalConfig/globalConfig.module.ts | 0 .../globalConfig/globalConfig.service.ts | 330 +- .../src/modules/mailer/mailer.service.ts | 5 +- .../src/modules/models/dto/queryModel.dto.ts | 0 .../modules/models/dto/queryModelType.dto.ts | 6 +- .../src/modules/models/dto/setModel.dto.ts | 0 .../modules/models/dto/setModelType.dto.ts | 93 + .../src/modules/models/models.controller.ts | 41 +- .../src/modules/models/models.entity.ts | 53 +- .../src/modules/models/models.module.ts | 4 +- .../src/modules/models/models.service.ts | 215 +- .../modules/official/dto/changeOpenid.dto.ts | 18 + .../modules/official/dto/createMenu.dto.ts | 83 + .../official/dto/extractOpenids.dto.ts | 16 + .../src/modules/official/dto/getQrCode.dto.ts | 12 + .../official/dto/wechatUserList.dto.ts | 9 + .../modules/official/official.controller.ts | 341 + .../src/modules/official/official.module.ts | 0 .../src/modules/official/official.service.ts | 586 + .../src/modules/order/dto/buy.dto.ts | 1 - .../modules/order/dto/queryAllOrder.dto.ts | 4 +- .../src/modules/order/dto/queryByOrder.dto.ts | 10 + .../src/modules/order/order.controller.ts | 14 +- .../src/modules/order/order.entity.ts | 19 +- .../src/modules/order/order.module.ts | 1 - .../src/modules/order/order.service.ts | 78 +- service/src/modules/pay/dto/pay.dto.ts | 8 + .../src/modules/pay/pay.controller.ts | 16 +- .../src/modules/pay/pay.module.ts | 0 .../src/modules/pay/pay.service.ts | 307 +- .../src/modules/plugin/plugin.controller.ts | 2 +- .../src/modules/plugin/plugin.entity.ts | 0 .../src/modules/plugin/plugin.module.ts | 0 .../src/modules/plugin/plugin.service.ts | 37 +- .../rateLimit/rate-limit.middleware.ts | 120 + .../modules/rateLimit/rate-limit.module.ts | 26 + .../modules/rateLimit/rate-limit.service.ts | 101 + .../src/modules/redisCache/dto/redis.dto.ts | 11 + .../modules/redisCache/redisCache.module.ts | 6 +- .../modules/redisCache/redisCache.service.ts | 150 + service/src/modules/share/share.controller.ts | 41 + service/src/modules/share/share.entity.ts | 16 + service/src/modules/share/share.module.ts | 12 + service/src/modules/share/share.service.ts | 58 + .../src/modules/signin/signIn.entity.ts | 3 +- .../src/modules/signin/signin.controller.ts | 0 .../src/modules/signin/signin.module.ts | 1 - .../src/modules/signin/signin.service.ts | 21 +- service/src/modules/spa/spa.controller.ts | 53 + service/src/modules/spa/spa.module.ts | 7 + .../statistic/dto/queryStatisticDto.dto.ts | 6 + .../modules/statistic/statistic.controller.ts | 0 .../src/modules/statistic/statistic.module.ts | 9 +- .../modules/statistic/statistic.service.ts | 102 +- .../src/modules/task/task.module.ts | 13 +- .../src/modules/task/task.service.ts | 54 +- .../src/modules/upload/upload.controller.ts | 41 + .../src/modules/upload/upload.module.ts | 4 +- .../src/modules/upload/upload.service.ts | 245 +- .../modules/user/dto/confirmMigration.dto.ts | 9 + .../src/modules/user/dto/queryAllUser.dto.ts | 23 +- .../modules/user/dto/queryInviteRecord.dto.ts | 3 +- .../src/modules/user/dto/queryOne.dto.ts | 8 +- .../src/modules/user/dto/resetUserPass.dto.ts | 8 +- service/src/modules/user/dto/retrieve.dto.ts | 27 + .../src/modules/user/dto/updateUser.dto.ts | 21 + .../modules/user/dto/updateUserStatus.dto.ts | 14 + .../src/modules/user/dto/userRecharge.dto.ts | 15 +- .../src/modules/user/user.controller.ts | 25 +- .../src/modules/user/user.entity.ts | 3 + .../src/modules/user/user.module.ts | 8 +- .../src/modules/user/user.service.ts | 341 +- .../modules/userBalance/accountLog.entity.ts | 3 +- .../src/modules/userBalance/balance.entity.ts | 3 +- .../src/modules/userBalance/dto/test.dto.ts | 8 +- .../modules/userBalance/fingerprint.entity.ts | 5 +- .../userBalance/userBalance.controller.ts | 0 .../modules/userBalance/userBalance.entity.ts | 6 +- .../modules/userBalance/userBalance.module.ts | 27 +- .../userBalance/userBalance.service.ts | 219 +- .../verification/dto/verifyCode.dto.ts | 0 .../verification/verification.entity.ts | 23 + .../verification/verification.module.ts | 9 +- .../verification/verification.service.ts | 54 +- .../src/types/express.d.ts | 1 - {src/service => service}/tsconfig.build.json | 0 {src/service => service}/tsconfig.json | 15 +- {src/service => service}/tsconfig.paths.json | 0 src/.eslintrc.json | 63 - src/.gitignore | 7 - src/.prettierrc | 8 - src/LICENSE | 21 - src/admin/.lintstagedrc | 4 - src/admin/.node-version | 1 - src/admin/.vscode/settings.json | 27 - src/admin/package.json | 102 - src/admin/plopfile.js | 13 - src/admin/scripts/generate.icons.ts | 83 - src/admin/src/App.vue | 108 - src/admin/src/api/modules/autoReply.ts | 21 - src/admin/src/api/modules/chat.ts | 7 - src/admin/src/components/Auth/index.vue | 20 - src/admin/src/components/AuthAll/index.vue | 20 - src/admin/src/components/FileUpload/index.vue | 108 - .../src/components/FixedActionBar/index.vue | 45 - .../src/components/IconifyIcon/index.vue | 21 - .../src/components/ImagePreview/index.vue | 63 - .../src/components/ImageUpload/index.vue | 247 - .../src/components/ImagesUpload/index.vue | 272 - src/admin/src/components/NotAllowed/index.vue | 53 - src/admin/src/components/PageMain/index.vue | 47 - .../src/components/PcasCascader/index.vue | 143 - .../components/PcasCascader/pcas-code.json | 1 - src/admin/src/components/SearchBar/index.vue | 47 - src/admin/src/components/SvgIcon/index.vue | 66 - src/admin/src/components/SystemInfo/index.vue | 56 - src/admin/src/components/Trend/index.vue | 38 - src/admin/src/iconify/data.json | 1 - src/admin/src/iconify/index.json | 1 - .../src/layouts/components/BackTop/index.vue | 45 - .../layouts/components/Breadcrumb/index.vue | 21 - .../layouts/components/Breadcrumb/item.vue | 38 - .../layouts/components/Copyright/index.vue | 37 - .../src/layouts/components/Header/index.vue | 160 - .../src/layouts/components/Logo/index.vue | 42 - .../layouts/components/MainSidebar/index.vue | 111 - .../src/layouts/components/Menu/index.vue | 179 - src/admin/src/layouts/components/Menu/sub.vue | 197 - .../src/layouts/components/Menu/types.ts | 48 - .../src/layouts/components/Search/index.vue | 316 - .../layouts/components/SubSidebar/index.vue | 161 - .../components/Topbar/Tabbar/index.vue | 461 - .../Topbar/Toolbar/Breadcrumb/index.vue | 58 - .../Topbar/Toolbar/ColorScheme/index.vue | 60 - .../Topbar/Toolbar/Fullscreen/index.vue | 18 - .../Topbar/Toolbar/NavSearch/index.vue | 21 - .../components/Topbar/Toolbar/index.vue | 30 - .../components/Topbar/Toolbar/leftSide.vue | 19 - .../src/layouts/components/Topbar/index.vue | 79 - .../src/layouts/components/views/link.vue | 76 - src/admin/src/layouts/index.vue | 292 - src/admin/src/layouts/ui-kit/HButton.vue | 28 - src/admin/src/layouts/ui-kit/HCheckList.vue | 37 - src/admin/src/layouts/ui-kit/HDialog.vue | 82 - src/admin/src/layouts/ui-kit/HDropdown.vue | 8 - .../src/layouts/ui-kit/HDropdownMenu.vue | 29 - src/admin/src/layouts/ui-kit/HInput.vue | 25 - src/admin/src/layouts/ui-kit/HKbd.vue | 5 - src/admin/src/layouts/ui-kit/HSelect.vue | 48 - src/admin/src/layouts/ui-kit/HSlideover.vue | 83 - src/admin/src/layouts/ui-kit/HTabList.vue | 52 - src/admin/src/layouts/ui-kit/HToggle.vue | 26 - src/admin/src/router/modules/app.menu.ts | 65 - .../src/router/modules/projectaddress.menu.ts | 17 - src/admin/src/store/index.ts | 3 - src/admin/src/store/modules/settings.ts | 141 - src/admin/src/types/shims.d.ts | 13 - src/admin/src/ui-provider/index.ts | 10 - src/admin/src/utils/composables/useAuth.ts | 35 - src/admin/src/utils/composables/useMenu.ts | 20 - .../utils/composables/useViewTransition.ts | 17 - src/admin/src/utils/dayjs.ts | 6 - src/admin/src/utils/eventBus.ts | 8 - src/admin/src/utils/index.ts | 5 - src/admin/src/utils/system.copyright.ts | 15 - src/admin/src/utils/utcformatTime.ts | 14 - src/admin/src/views/[...all].vue | 57 - src/admin/src/views/ai/github-redirect.vue | 35 - src/admin/src/views/app/application.vue | 646 - src/admin/src/views/app/classify.vue | 297 - src/admin/src/views/app/plugin.vue | 483 - src/admin/src/views/app/visible.vue | 194 - src/admin/src/views/chat/chat.vue | 224 - src/admin/src/views/chat/draw.vue | 392 - src/admin/src/views/index.vue | 445 - src/admin/src/views/login.vue | 142 - src/admin/src/views/models/interface.vue | 593 - src/admin/src/views/models/key.vue | 1058 - src/admin/src/views/package/package.vue | 497 - src/admin/src/views/package/points.vue | 325 - src/admin/src/views/pay/epay.vue | 259 - src/admin/src/views/pay/hupijiao.vue | 178 - src/admin/src/views/pay/ltzf.vue | 162 - src/admin/src/views/pay/wechat.vue | 212 - .../src/views/personal/edit.password.vue | 126 - src/admin/src/views/sensitive/custom.vue | 157 - src/admin/src/views/storage/chevereto.vue | 147 - src/admin/src/views/storage/localStorage.vue | 112 - .../src/views/system/baseConfiguration.vue | 452 - src/admin/src/views/system/notice.vue | 175 - src/admin/src/views/users/userAgreement.vue | 182 - src/admin/stylelint.config.js | 51 - src/admin/tsconfig.node.json | 14 - src/build.sh | 48 - src/chat/.npmrc | 1 - src/chat/package.json | 92 - src/chat/resources/background.png | Bin 15802 -> 0 bytes src/chat/resources/background@2x.png | Bin 38224 -> 0 bytes src/chat/resources/icon.icns | Bin 145108 -> 0 bytes src/chat/resources/icon.ico | Bin 270398 -> 0 bytes src/chat/resources/icon.png | Bin 38844 -> 0 bytes src/chat/src/App.vue | 97 - src/chat/src/api/config.ts | 9 - src/chat/src/api/index.ts | 155 - src/chat/src/api/user.ts | 92 - src/chat/src/assets/defaultPdfPreset.json | 32 - src/chat/src/assets/favicon.ico | Bin 15086 -> 0 bytes src/chat/src/assets/icons/draw.svg | 1 - src/chat/src/assets/icons/gift.png | Bin 713 -> 0 bytes src/chat/src/assets/icons/zoom.svg | 1 - src/chat/src/assets/images/empty.png | Bin 10193 -> 0 bytes src/chat/src/assets/images/preferential.png | Bin 5605 -> 0 bytes src/chat/src/assets/img-bg.png | Bin 4344 -> 0 bytes src/chat/src/assets/login-banner.png | Bin 1347688 -> 0 bytes src/chat/src/assets/qianbao.png | Bin 7830 -> 0 bytes src/chat/src/assets/recommend.json | 1 - .../components/common/CanvasMask/index.vue | 239 - .../components/common/GridManager/index.vue | 380 - .../components/common/HoverButton/Button.vue | 20 - .../components/common/HoverButton/index.vue | 46 - .../common/ImageEditorCanvas/index.vue | 217 - .../components/common/NaiveProvider/index.vue | 43 - .../components/common/Setting/Advanced.vue | 46 - .../src/components/common/Setting/General.vue | 213 - .../components/common/Setting/Personal.vue | 66 - .../src/components/common/Setting/index.vue | 64 - .../components/common/UserAvatar/index.vue | 52 - src/chat/src/components/common/index.ts | 7 - src/chat/src/constants/index.ts | 23 - src/chat/src/hooks/useIconRender.ts | 31 - src/chat/src/hooks/useLanguage.ts | 24 - src/chat/src/hooks/useTheme.ts | 75 - src/chat/src/icons/403.vue | 5 - src/chat/src/icons/404.svg | 1 - src/chat/src/icons/500.vue | 5 - src/chat/src/layout/components/AppDialog.vue | 418 - src/chat/src/layout/components/BindWx.vue | 156 - .../src/layout/components/GoodsDialog.vue | 462 - src/chat/src/layout/components/Login.vue | 118 - .../src/layout/components/Login/Email.vue | 416 - .../src/layout/components/Login/Wechat.vue | 216 - .../src/layout/components/NoticeDialog.vue | 128 - src/chat/src/layout/components/PayDialog.vue | 450 - .../components/Settings/NoticeDialog.vue | 23 - .../components/Settings/SignInDialog.vue | 201 - .../src/layout/components/SettingsDialog.vue | 124 - .../src/layout/components/SignInDialog.vue | 251 - .../layout/components/UserAgreementDialog.vue | 70 - src/chat/src/layout/index.ts | 3 - src/chat/src/layout/index.vue | 157 - src/chat/src/main.ts | 42 - src/chat/src/plugins/assets.ts | 18 - src/chat/src/plugins/index.ts | 4 - src/chat/src/plugins/scrollbarStyle.ts | 28 - src/chat/src/router/index.ts | 58 - src/chat/src/router/permission.ts | 44 - src/chat/src/store/modules/auth/helper.ts | 119 - src/chat/src/store/modules/auth/index.ts | 98 - src/chat/src/store/modules/global/helper.ts | 62 - src/chat/src/store/modules/global/index.ts | 108 - src/chat/src/store/modules/index.ts | 8 - src/chat/src/styles/global.less | 36 - src/chat/src/typings/chat.d.ts | 132 - src/chat/src/typings/env.d.ts | 8 - src/chat/src/typings/global.d.ts | 13 - src/chat/src/utils/motion/index.ts | 59 - src/chat/src/views/chat/chat.vue | 170 - src/chat/src/views/chat/chatBase.vue | 690 - .../views/chat/components/Footer/index.vue | 1589 - .../views/chat/components/Header/index.vue | 356 - .../views/chat/components/Message/AiPpt.vue | 700 - .../views/chat/components/Message/Image.vue | 583 - .../Message/MindMap/FullScreenModal.vue | 108 - .../chat/components/Message/MindMap/index.vue | 187 - .../views/chat/components/Message/Music.vue | 780 - .../components/Message/Text/htmlModal.vue | 102 - .../chat/components/Message/Text/index.vue | 797 - .../views/chat/components/Message/Video.vue | 235 - .../views/chat/components/Message/index.vue | 226 - .../views/chat/components/Message/style.less | 96 - src/chat/src/views/chat/components/index.ts | 3 - .../views/chat/components/sider/Footer.vue | 22 - .../src/views/chat/components/sider/List.vue | 338 - .../views/chat/components/sider/ListItem.vue | 179 - .../views/chat/components/sider/Plugin.vue | 139 - .../src/views/chat/components/sider/index.vue | 534 - src/chat/src/views/chat/hooks/useChat.ts | 23 - src/chat/src/views/chat/hooks/useCopyCode.ts | 26 - src/chat/src/views/chat/hooks/useScroll.ts | 89 - src/chat/src/views/chat/role.vue | 36 - src/chat/src/views/exception/404/index.vue | 29 - src/chat/src/views/exception/500/index.vue | 1019 - src/chat/src/views/home/index.vue | 130 - .../views/userCenter/components/detail.vue | 116 - .../views/userCenter/components/password.vue | 148 - .../views/userCenter/components/wallet.vue | 333 - src/chat/src/views/userCenter/index.vue | 347 - src/chat/tailwind.config.js | 122 - src/chat/vite.config.ts | 78 - src/package.json | 31 - src/pnpm-lock.yaml | 20728 ------ src/pnpm-workspace.yaml | 4 - src/service/Dockerfile | 35 - src/service/deploy.sh | 405 - src/service/docker-compose.yml | 45 - src/service/encrypt.js | 29 - src/service/nest-cli.json | 13 - src/service/package.json | 109 - src/service/src/common/entity/baseEntity.ts | 16 - .../common/filters/allExceptions.filter.ts | 54 - .../common/logger/custom-logger.service.ts | 37 - src/service/src/common/result/index.ts | 21 - src/service/src/common/utils/getDiffArray.ts | 14 - src/service/src/common/utils/getRandomItem.ts | 4 - src/service/src/common/utils/maskEmail.ts | 11 - src/service/src/main.ts | 71 - src/service/src/modules/ai/aiPPT.ts | 27 - .../src/modules/ai/cogVideo.service.ts | 230 - .../src/modules/ai/fluxDraw.service.ts | 161 - .../src/modules/ai/lumaVideo.service.ts | 366 - .../src/modules/ai/midjourneyDraw.service.ts | 283 - .../src/modules/ai/netSearch.service.ts | 132 - .../src/modules/ai/openaiChat.service.ts | 261 - .../src/modules/ai/openaiDraw.service.ts | 153 - .../src/modules/ai/stableDiffusion.service.ts | 105 - src/service/src/modules/ai/suno.service.ts | 378 - src/service/src/modules/app/app.service.ts | 390 - .../src/modules/app/dto/collectApp.dto.ts | 8 - .../src/modules/app/dto/createApp.dto.ts | 52 - .../src/modules/app/dto/deleteCats.dto.ts | 8 - .../src/modules/autoreply/autoreply.module.ts | 14 - .../modules/autoreply/dto/delBadWords.dto.ts | 7 - .../autoreply/dto/queryAutoReply.dto.ts | 20 - .../modules/badWords/dto/addBadWords.dto.ts | 7 - .../modules/badWords/dto/delBadWords.dto.ts | 7 - .../badWords/dto/updateBadWords.dto.ts | 16 - .../src/modules/chat/chat.controller.ts | 86 - src/service/src/modules/chat/chat.service.ts | 1321 - .../src/modules/chatLog/dto/chatList.dto.ts | 10 - .../src/modules/chatLog/dto/del.dto.ts | 9 - .../src/modules/chatLog/dto/delByGroup.dto.ts | 9 - .../chatLog/dto/exportExcelChatlog.dto.ts | 26 - .../chatLog/dto/queryAllDrawLog.dto.ts | 26 - .../modules/chatLog/dto/queryMyChatLog.dto.ts | 10 - .../src/modules/chatLog/dto/recDrawImg.dto.ts | 9 - .../modules/crami/dto/createPackage.dto.ts | 102 - .../modules/crami/dto/deletePackage.dto.ts | 8 - .../src/modules/crami/dto/useCrami.dto.ts | 8 - .../src/modules/database/database.module.ts | 35 - .../src/modules/database/initDatabase.ts | 108 - .../modules/models/dto/setModelType.dto.ts | 48 - .../src/modules/official/dto/getQrCode.dto.ts | 9 - .../modules/official/official.controller.ts | 165 - .../src/modules/official/official.service.ts | 270 - .../src/modules/order/dto/queryByOrder.dto.ts | 7 - src/service/src/modules/pay/dto/pay.dto.ts | 10 - .../src/modules/redisCache/dto/redis.dto.ts | 12 - .../redisCache/redisCache.controller.ts | 18 - .../modules/redisCache/redisCache.service.ts | 85 - .../statistic/dto/queryStatisticDto.dto.ts | 8 - .../src/modules/upload/upload.controller.ts | 36 - .../src/modules/user/dto/retrieve.dto.ts | 14 - .../src/modules/user/dto/updateUser.dto.ts | 26 - .../modules/user/dto/updateUserStatus.dto.ts | 15 - .../verification/verifycation.entity.ts | 23 - 1808 files changed, 183083 insertions(+), 86701 deletions(-) delete mode 100644 .github/workflows/docker-image.yml create mode 100644 .github/workflows/electron-build.yml delete mode 100644 .gitignore rename {src/.vscode => .vscode}/extensions.json (100%) delete mode 100644 AIWebQuickDeploy/dist/app.module.js delete mode 100644 AIWebQuickDeploy/dist/common/auth/adminAuth.guard.js delete mode 100644 AIWebQuickDeploy/dist/common/auth/jwt.strategy.js delete mode 100644 AIWebQuickDeploy/dist/common/auth/jwtAuth.guard.js delete mode 100644 AIWebQuickDeploy/dist/common/auth/superAuth.guard.js delete mode 100644 AIWebQuickDeploy/dist/common/constants/balance.constant.js delete mode 100644 AIWebQuickDeploy/dist/common/constants/errorMessage.constant.js delete mode 100644 AIWebQuickDeploy/dist/common/constants/midjourney.constant.js delete mode 100644 AIWebQuickDeploy/dist/common/constants/status.constant.js delete mode 100644 AIWebQuickDeploy/dist/common/constants/user.constant.js delete mode 100644 AIWebQuickDeploy/dist/common/constants/verification.constant.js delete mode 100644 AIWebQuickDeploy/dist/common/entity/baseEntity.js delete mode 100644 AIWebQuickDeploy/dist/common/filters/allExceptions.filter.js delete mode 100644 AIWebQuickDeploy/dist/common/filters/typeOrmQueryFailed.filter.js delete mode 100644 AIWebQuickDeploy/dist/common/guards/roles/roles.guard.js delete mode 100644 AIWebQuickDeploy/dist/common/interceptors/abort.interceptor.js delete mode 100644 AIWebQuickDeploy/dist/common/interceptors/transform.interceptor.js delete mode 100644 AIWebQuickDeploy/dist/common/logger/custom-logger.service.js delete mode 100644 AIWebQuickDeploy/dist/common/middleware/xml.middleware.js delete mode 100644 AIWebQuickDeploy/dist/common/result/index.js delete mode 100644 AIWebQuickDeploy/dist/common/swagger/index.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/base.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/createOrderId.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/createRandomCode.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/createRandomInviteCode.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/createRandomNonceStr.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/createRandomUid.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/date.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/encrypt.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/fromatUrl.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/generateCrami.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/getClientIp.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/getDiffArray.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/getRandomItem.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/getRandomItemFromArray.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/getTokenCount.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/handleError.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/hideString.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/index.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/maskCrami.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/maskEmail.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/maskIpAddress.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/removeSpecialCharacters.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/tools.js delete mode 100644 AIWebQuickDeploy/dist/common/utils/utcformatTime.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/aiPPT.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/cogVideo.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/fluxDraw.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/lumaVideo.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/midjourneyDraw.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/netSearch.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/openaiChat.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/openaiDraw.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/stableDiffusion.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/ai/suno.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/app.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/app.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/app.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/app.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/appCats.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/collectApp.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/createApp.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/createCats.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/custonApp.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/deleteApp.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/deleteCats.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/queryApp.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/queryCats.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/updateApp.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/dto/updateCats.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/app/userApps.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/auth.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/auth.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/auth.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/dto/adminLogin.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/dto/authLogin.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/dto/authRegister.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/dto/loginByPhone.dt.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/dto/sendPhoneCode.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/dto/updatePassByOther.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/dto/updatePassword.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/auth/dto/userRegisterByPhone.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/autoreply/autoreply.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/autoreply/autoreply.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/autoreply/autoreply.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/autoreply/autoreply.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/autoreply/dto/addAutoReply.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/autoreply/dto/delBadWords.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/autoreply/dto/queryAutoReply.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/autoreply/dto/updateAutoReply.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/badWords.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/badWords.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/badWords.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/badWords.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/dto/addBadWords.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/dto/delBadWords.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/dto/queryBadWords.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/dto/queryViolation.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/dto/updateBadWords.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/badWords/violationLog.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/chat/chat.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/chat/chat.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/chat/chat.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/chat/dto/chatDraw.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chat/dto/chatProcess.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chat/helper.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatGroup/dto/createGroup.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatGroup/dto/delGroup.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatGroup/dto/updateGroup.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/chatLog.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/chatLog.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/chatLog.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/chatLog.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/chatList.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/del.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/delByGroup.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/exportExcelChatlog.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/queryAllChatLog.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/queryAllDrawLog.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/queryByAppId.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/queryMyChatLog.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/chatLog/dto/recDrawImg.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/crami.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/crami.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/crami.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/crami.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/cramiPackage.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/dto/batchDelCrami.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/dto/createCrami.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/dto/createPackage.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/dto/deletePackage.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/dto/queryAllCrami.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/dto/queryAllPackage.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/dto/updatePackage.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/crami/dto/useCrami.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/database/database.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/database/database.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/database/initDatabase.js delete mode 100644 AIWebQuickDeploy/dist/modules/globalConfig/config.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/globalConfig/dto/queryConfig.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/globalConfig/dto/setConfig.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/globalConfig/dto/setConfigCustom.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/mailer/mailer.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/models/dto/queryModel.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/models/dto/queryModelType.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/models/dto/setModel.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/models/dto/setModelType.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/models/models.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/models/models.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/models/models.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/models/models.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/official/dto/getQrCode.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/official/official.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/official/official.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/official/official.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/order/dto/buy.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/order/dto/queryAllOrder.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/order/dto/queryByOrder.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/order/order.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/order/order.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/order/order.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/order/order.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/pay/dto/pay.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/pay/pay.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/pay/pay.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/pay/pay.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/plugin/plugin.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/plugin/plugin.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/plugin/plugin.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/plugin/plugin.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/redisCache/dto/redis.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/redisCache/redisCache.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/redisCache/redisCache.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/redisCache/redisCache.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/signin/signIn.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/signin/signin.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/signin/signin.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/signin/signin.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/statistic/dto/queryStatisticDto.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/statistic/statistic.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/statistic/statistic.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/statistic/statistic.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/task/task.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/task/task.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/upload/upload.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/upload/upload.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/upload/upload.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/dto/queryAllUser.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/dto/queryInviteRecord.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/dto/queryOne.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/dto/resetUserPass.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/dto/retrieve.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/dto/updateUser.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/dto/updateUserStatus.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/dto/userRecharge.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/user.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/user.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/user.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/user/user.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/userBalance/accountLog.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/userBalance/balance.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/userBalance/dto/test.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/userBalance/fingerprint.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/userBalance/userBalance.controller.js delete mode 100644 AIWebQuickDeploy/dist/modules/userBalance/userBalance.entity.js delete mode 100644 AIWebQuickDeploy/dist/modules/userBalance/userBalance.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/userBalance/userBalance.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/verification/dto/verifyCode.dto.js delete mode 100644 AIWebQuickDeploy/dist/modules/verification/verification.module.js delete mode 100644 AIWebQuickDeploy/dist/modules/verification/verification.service.js delete mode 100644 AIWebQuickDeploy/dist/modules/verification/verifycation.entity.js rename AIWebQuickDeploy/public/admin/assets/{HButton-Ujw0orpR.js => HButton-BuyjdFXj.js} (65%) create mode 100644 AIWebQuickDeploy/public/admin/assets/HCheckList-BvP-W6tS.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HCheckList-DmjIeCde.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HCheckList.vue_vue_type_script_setup_true_lang-BLNEihme.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HCheckList.vue_vue_type_script_setup_true_lang-Di8Bi58Y.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HDialog-Dc3-VFqw.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HDialog-SD64xsF6.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HDialog.vue_vue_type_script_setup_true_lang-BfrjeNSs.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HDialog.vue_vue_type_script_setup_true_lang-an5zbG4e.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HDropdown-7q7O_XMK.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HDropdown-DFGm5c_S.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HDropdownMenu-D4uhC_T8.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HDropdownMenu-STCC9von.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HDropdownMenu.vue_vue_type_script_setup_true_lang-BzkPBd44.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HDropdownMenu.vue_vue_type_script_setup_true_lang-Wc6l-Ngn.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HInput-BYvs3nsX.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HInput-D-evHGWk.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HInput.vue_vue_type_script_setup_true_lang-B93h6qE_.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HInput.vue_vue_type_script_setup_true_lang-DbpA_N81.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HKbd-Be5shIQ7.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HKbd-LjWkyhwy.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HSelect-BCiFn2nk.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HSelect-IW2K-3mo.js rename AIWebQuickDeploy/public/admin/assets/{HSlideover-DFpKLdtr.js => HSlideover-DoUM21Up.js} (65%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/HTabList-DKMxIM5w.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HTabList-DmcAR84M.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HTabList.vue_vue_type_script_setup_true_lang-BEyYCazB.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HTabList.vue_vue_type_script_setup_true_lang-BuGUQxxq.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HToggle-BoT9z-_d.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HToggle-CrdaD-9B.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HToggle.vue_vue_type_script_setup_true_lang-CHjOk9yp.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HToggle.vue_vue_type_script_setup_true_lang-qXUln426.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HTooltip-BHWSsM_K.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HTooltip-CW8ZlTRK.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/HTooltip.vue_vue_type_script_setup_true_lang-CxwyeEWK.js create mode 100644 AIWebQuickDeploy/public/admin/assets/HTooltip.vue_vue_type_script_setup_true_lang-T8XkjmIi.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/_...all_-e-47I_Lk.js create mode 100644 AIWebQuickDeploy/public/admin/assets/_...all_-xtcz4Joe.js create mode 100644 AIWebQuickDeploy/public/admin/assets/accountLog-BnWEbieN.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/accountLog-fHuxQkeO.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/ali-Mqm0cjbu.js create mode 100644 AIWebQuickDeploy/public/admin/assets/ali-zgpDqU7S.js rename AIWebQuickDeploy/public/admin/assets/{apl-B4CMkyY2.js => apl-CXdQSnD-.js} (57%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/app-CZBIwClE.js create mode 100644 AIWebQuickDeploy/public/admin/assets/app-Cak_t3ob.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/application-BreYJjWu.js create mode 100644 AIWebQuickDeploy/public/admin/assets/application-CRdbamYy.js create mode 100644 AIWebQuickDeploy/public/admin/assets/application-DyP2kx0j.css create mode 100644 AIWebQuickDeploy/public/admin/assets/asciiarmor-D5V0T9Cu.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/asciiarmor-Df11BRmG.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/asn1-CGOzndHr.js create mode 100644 AIWebQuickDeploy/public/admin/assets/asn1-DWPaVWf6.js rename AIWebQuickDeploy/public/admin/assets/{asterisk-B-8jnY81.js => asterisk-B46aRdXb.js} (56%) create mode 100644 AIWebQuickDeploy/public/admin/assets/autpReply-ByQOHDAx.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/autpReply-C702DWac.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/badWords-D2Yy-NCt.js create mode 100644 AIWebQuickDeploy/public/admin/assets/badWords-FUVqvqZb.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/baiduSensitive-6qem6t8b.js create mode 100644 AIWebQuickDeploy/public/admin/assets/baiduSensitive-C7vUutgc.js create mode 100644 AIWebQuickDeploy/public/admin/assets/baiduStatistics-CIKoeZzD.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/baiduStatistics-GAHxOxpS.js create mode 100644 AIWebQuickDeploy/public/admin/assets/baseConfiguration-D6C9gTFe.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/baseConfiguration-XpujmNvx.js create mode 100644 AIWebQuickDeploy/public/admin/assets/baseSetting-DM7frdzv.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/brainfuck-C4LP7Hcl.js create mode 100644 AIWebQuickDeploy/public/admin/assets/brainfuck-CtZaYBKt.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/chat-Cul6apvD.js create mode 100644 AIWebQuickDeploy/public/admin/assets/chat-DOaFD8pm.css create mode 100644 AIWebQuickDeploy/public/admin/assets/chat-p-VoiQPW.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/chat-u79Q-XSS.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/chevereto-CrU0O1ko.js create mode 100644 AIWebQuickDeploy/public/admin/assets/chevereto-DZq9P4Ob.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/classify-C53uJCw1.js create mode 100644 AIWebQuickDeploy/public/admin/assets/classify-DyQP9WEl.js create mode 100644 AIWebQuickDeploy/public/admin/assets/clike-BgBwzOhw.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/clike-DWq2Y8ae.js rename AIWebQuickDeploy/public/admin/assets/{clojure-BMjYHr_A.js => clojure-DR_hEDJv.js} (70%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/cmake-BQqOBYOt.js create mode 100644 AIWebQuickDeploy/public/admin/assets/cmake-DXn5xaP-.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/cobol-XrqhtCFE.js create mode 100644 AIWebQuickDeploy/public/admin/assets/cobol-stawOqaz.js create mode 100644 AIWebQuickDeploy/public/admin/assets/coffeescript-BTDxI-eT.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/coffeescript-S37ZYGWr.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/commonlisp-5jcOZwOE.js create mode 100644 AIWebQuickDeploy/public/admin/assets/commonlisp-vq6DHwts.js create mode 100644 AIWebQuickDeploy/public/admin/assets/config-BrbFL53_.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/config-DBls5jtO.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/crami-DF3UkRa8.js create mode 100644 AIWebQuickDeploy/public/admin/assets/crami-R38S4tMZ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/crystal-CRzZ78HM.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/crystal-SjHAIU92.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/css-BnMrqG3P.js create mode 100644 AIWebQuickDeploy/public/admin/assets/css-ZjFoif2m.js create mode 100644 AIWebQuickDeploy/public/admin/assets/custom-B_7XFeQI.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/custom-Dw8_cyTN.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/cypher-C_CwsFkJ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/cypher-gJDei3ni.js create mode 100644 AIWebQuickDeploy/public/admin/assets/d-BShv7fp-.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/d-pRatUO7H.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/diff-DbItnlRl.js create mode 100644 AIWebQuickDeploy/public/admin/assets/diff-UJJ5BM9S.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/dockerfile-BuNIbK2j.js create mode 100644 AIWebQuickDeploy/public/admin/assets/dockerfile-knGOOxt4.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/draw-BqaQv8sQ.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/draw-DfPVf5Nv.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/dtd-DF_7sFjM.js create mode 100644 AIWebQuickDeploy/public/admin/assets/dtd-DI9Herc-.js create mode 100644 AIWebQuickDeploy/public/admin/assets/duluPay-DRkdzRVh.js create mode 100644 AIWebQuickDeploy/public/admin/assets/dylan-CHJ5qNM_.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/dylan-DwRh75JA.js create mode 100644 AIWebQuickDeploy/public/admin/assets/ebnf-B-Df8AvO.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/ebnf-CDyGwa7X.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/ecl-Cabwm37j.js create mode 100644 AIWebQuickDeploy/public/admin/assets/ecl-DPFc0Uaf.js rename AIWebQuickDeploy/public/admin/assets/{edit-C7lymP1E.css => edit-DCC-RuVO.css} (57%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/edit.password-5Br-3lH_.js create mode 100644 AIWebQuickDeploy/public/admin/assets/edit.password-CzxHsfr9.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/eiffel-CnydiIhH.js create mode 100644 AIWebQuickDeploy/public/admin/assets/eiffel-DR5c0IrL.js create mode 100644 AIWebQuickDeploy/public/admin/assets/elm-D7xaZ7Da.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/elm-vLlmbW-K.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/email-Bu_bNWMh.js create mode 100644 AIWebQuickDeploy/public/admin/assets/email-CdNPUFnz.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/epay-ClyHoC23.js create mode 100644 AIWebQuickDeploy/public/admin/assets/epay-D7_9P03X.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/erlang-BNw1qcRV.js create mode 100644 AIWebQuickDeploy/public/admin/assets/erlang-BuqgqA5h.js rename AIWebQuickDeploy/public/admin/assets/{factor-D8pE9siL.js => factor-CFXhaUWb.js} (92%) create mode 100644 AIWebQuickDeploy/public/admin/assets/fcl-CVaBTCzQ.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/fcl-Kvtd6kyn.js create mode 100644 AIWebQuickDeploy/public/admin/assets/forth-Dri_5nFc.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/forth-Ffai-XNe.js rename AIWebQuickDeploy/public/admin/assets/{fortran-DYz_wnZ1.js => fortran-DL7KluxX.js} (76%) create mode 100644 AIWebQuickDeploy/public/admin/assets/gas-5kEe4nk0.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/gas-Bneqetm1.js rename AIWebQuickDeploy/public/admin/assets/{gherkin-heZmZLOM.js => gherkin-B6X1vGSW.js} (89%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/github-redirect-BM9nXGWb.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/groovy-DKLxxR9y.js create mode 100644 AIWebQuickDeploy/public/admin/assets/groovy-DnIzCrpZ.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/haskell-BWDZoCOh.js create mode 100644 AIWebQuickDeploy/public/admin/assets/haskell-CmdsSjFB.js create mode 100644 AIWebQuickDeploy/public/admin/assets/haxe-D25e-2l-.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/haxe-pv4rovob.js create mode 100644 AIWebQuickDeploy/public/admin/assets/http-BKJkqRj4.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/http-DBlCnlav.js create mode 100644 AIWebQuickDeploy/public/admin/assets/hupijiao-BdWFBu4d.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/hupijiao-PQUyy35q.js create mode 100644 AIWebQuickDeploy/public/admin/assets/identityVerification-Bom9GN-v.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/identityVerification-oP_pBzIE.js rename AIWebQuickDeploy/public/admin/assets/{idl-BEugSyMb.js => idl-pcmmZuaN.js} (92%) rename AIWebQuickDeploy/public/admin/assets/{index-7C4DsIyW.css => index-1jQ9FMls.css} (50%) create mode 100644 AIWebQuickDeploy/public/admin/assets/index-1mKiREKi.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-6QRvoxq4.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-8uUs3y5b.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-B-e7m70K.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-B0KIvOZu.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-B0yaT7Pj.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-B1pFhXfc.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-B5v14alw.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-B9lYkwfU.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BE-LteFu.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BE5tQEZB.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BERX8Mlm.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BFJf1VL1.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BFk93msl.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BKsxNJi6.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BLLHBlas.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BLqJ8QDu.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BRLpoAL3.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BRrAnYwh.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BS70MvZz.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BTtsYu0a.js rename AIWebQuickDeploy/public/admin/assets/{index-ucei9Tgm.css => index-BU6DqTDT.css} (57%) create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BWLuTDA6.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BYOhJwby.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-Ba5HOdXi.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-Bc9Zhmen.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-Bd4myPrr.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BdAj7OgB.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BdhdXhTT.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-Bnpp2PsS.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BqCS7s31.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-Bt1eUHSh.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-BuhDZ9J1.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BwuB6c9W.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-BwvH2ULl.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-Bz6lYfzJ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-C3NItWbX.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-CDnXnCbp.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-CGed-Lii.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-CJZijCqE.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-CJbdo3UB.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-CQq7nD5J.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-CTsqQodT.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-CVdKItNW.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-CYAFQ7HU.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-CZaxHimt.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-CbgLRpel.js rename AIWebQuickDeploy/public/admin/assets/{index-CyUQOSLA.css => index-CeD4nVK7.css} (50%) create mode 100644 AIWebQuickDeploy/public/admin/assets/index-ChkpeOnk.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-Cho6Pr_4.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-CoAQ05zQ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-Cs7G3EBC.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-CtOJrsbC.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-D4nnD7rC.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-D5dkoBo_.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-D9XTqpwG.css create mode 100644 AIWebQuickDeploy/public/admin/assets/index-DA118ti0.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-DARZUbFw.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-DFcpibhB.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-DHthMOII.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-DLgR7VQ5.css create mode 100644 AIWebQuickDeploy/public/admin/assets/index-DOx8FTtk.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-DRUzQ5v3.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-D_TwDoFD.js rename AIWebQuickDeploy/public/admin/assets/{index--3skRaHe.css => index-Dahfp9sk.css} (75%) create mode 100644 AIWebQuickDeploy/public/admin/assets/index-Dgty_-Sl.js rename AIWebQuickDeploy/public/admin/assets/{index-KzA8AQdP.css => index-DhHevLD5.css} (55%) create mode 100644 AIWebQuickDeploy/public/admin/assets/index-DhWfG07N.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-DlQMm9C_.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-DlXuFYKA.css create mode 100644 AIWebQuickDeploy/public/admin/assets/index-Dp3CZhIR.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-DpvF2gU0.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-Dq5t6Z0r.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-Dqh7E9u3.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-Dt8wcX7O.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-DwPJRGZ5.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-DyGHaFdn.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-FQR52wpL.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-GgFTTSiK.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-HbrSBKa6.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-J6vOXMm5.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-N1kQyP62.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-OKLnA-zv.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-RKW8DBPc.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-V-U6qRSP.js rename AIWebQuickDeploy/public/admin/assets/{index-DiTAFdcL.css => index-ZpvBQ3Hh.css} (100%) create mode 100644 AIWebQuickDeploy/public/admin/assets/index-b8Ls1WmH.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-cHk2eZex.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-dH3cTfOh.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-eP4h4BlF.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-eqjq1fUS.css create mode 100644 AIWebQuickDeploy/public/admin/assets/index-g-A10Yme.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-gPQwgooA.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-i8Bdu04L.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-kG79ZC54.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-lXyw_eK-.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-matkXqi_.css create mode 100644 AIWebQuickDeploy/public/admin/assets/index-s5oNnYH8.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-vyoTLGOp.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/index-wNqALqIp.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index-wYwQQGda.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-4tK_xNzF.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-AClYjrVV.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-BGlBKwum.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-BIJvuBmw.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-BgKLAU11.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-BhIKqf2a.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-Bugv63mj.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-CJnFI54p.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-CReMfaKl.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-Cp9p1HkJ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-DBlFcaHd.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-DN03WRps.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-DNXKkRlZ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-DOqLWnBB.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-DW2jDI9h.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-DbfRBGyF.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-Do4XPH2t.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-DpB-kSh7.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-PUnUpH4H.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-c3O57XSg.js create mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-mQp5T4Ar.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/index.vue_vue_type_script_setup_true_lang-zXZwbW_j.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/interface-C0pUInT0.js create mode 100644 AIWebQuickDeploy/public/admin/assets/item-APr-PS9y.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/item-CgoQGTTQ.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/item-DKw0u6VA.js create mode 100644 AIWebQuickDeploy/public/admin/assets/item-DZoJPB2Z.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/item.vue_vue_type_script_setup_true_lang-C02ico3V.js create mode 100644 AIWebQuickDeploy/public/admin/assets/item.vue_vue_type_script_setup_true_lang-D5h42eqV.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/item.vue_vue_type_script_setup_true_lang-Dhzk_uDL.js create mode 100644 AIWebQuickDeploy/public/admin/assets/item.vue_vue_type_script_setup_true_lang-aMXYc_KV.js create mode 100644 AIWebQuickDeploy/public/admin/assets/javascript-D48wDJXV.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/javascript-iSgyE4tI.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/jinja2-C4DGRd-O.js create mode 100644 AIWebQuickDeploy/public/admin/assets/jinja2-DhgKlfW7.js create mode 100644 AIWebQuickDeploy/public/admin/assets/julia-DjdwvFuI.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/julia-DuME0IfC.js create mode 100644 AIWebQuickDeploy/public/admin/assets/key-CrR4vULd.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/key-SbZ15kXg.js create mode 100644 AIWebQuickDeploy/public/admin/assets/leftSide-CgNuco0Q.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/leftSide-VBkbFeUr.js create mode 100644 AIWebQuickDeploy/public/admin/assets/leftSide.vue_vue_type_script_setup_true_lang-BTr4xL8t.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/leftSide.vue_vue_type_script_setup_true_lang-Dg-uHS6-.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/link-BvzwK7mO.js create mode 100644 AIWebQuickDeploy/public/admin/assets/link-Dd6acFu3.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/link-Dx3sI3vO.css create mode 100644 AIWebQuickDeploy/public/admin/assets/link-DyGASR6Z.css create mode 100644 AIWebQuickDeploy/public/admin/assets/livescript-HO6ttBFx.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/livescript-k3uCVVjK.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/localStorage-D9Ly4FTr.js create mode 100644 AIWebQuickDeploy/public/admin/assets/localStorage-Dm0jFFHY.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/login-CWBz1yfa.js create mode 100644 AIWebQuickDeploy/public/admin/assets/login-DUOByp_A.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/ltzf-BGADXySl.js create mode 100644 AIWebQuickDeploy/public/admin/assets/ltzf-BvFemXdK.js create mode 100644 AIWebQuickDeploy/public/admin/assets/lua-8DXOpKDz.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/lua-BgMRiT3U.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/marked.esm-8ZxQ78w7.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/mathematica-DTrFuWx2.js create mode 100644 AIWebQuickDeploy/public/admin/assets/mathematica-IIbmv7SK.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/mbox-CNhZ1qSd.js create mode 100644 AIWebQuickDeploy/public/admin/assets/mbox-DoeuZPxA.js rename AIWebQuickDeploy/public/admin/assets/{mirc-CjQqDB4T.js => mirc-DkvFAiy5.js} (72%) create mode 100644 AIWebQuickDeploy/public/admin/assets/mllike-3c2dg9RT.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/mllike-C_8OmSiT.js create mode 100644 AIWebQuickDeploy/public/admin/assets/modelica-DSrSSXCg.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/modelica-Dc1JOy9r.js create mode 100644 AIWebQuickDeploy/public/admin/assets/models-Bn8M3XEv.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/mpay-02LM1-hB.js create mode 100644 AIWebQuickDeploy/public/admin/assets/mpay-B-BmvDhQ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/mscgen-B2igx18G.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/mscgen-BA5vi2Kp.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/mumps-BT43cFF4.js create mode 100644 AIWebQuickDeploy/public/admin/assets/mumps-zvxmGV4l.js create mode 100644 AIWebQuickDeploy/public/admin/assets/nginx-B4hAVlXN.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/nginx-DdIZxoE0.js create mode 100644 AIWebQuickDeploy/public/admin/assets/notice-BrwZwNuE.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/notice-Dl9A1sfn.js rename AIWebQuickDeploy/public/admin/assets/{nsis-CEAdamBV.js => nsis-BvKfQ9lQ.js} (98%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/ntriples-BfvgReVJ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/ntriples-FFvkTduk.js create mode 100644 AIWebQuickDeploy/public/admin/assets/octave-C4hdQ5Hf.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/octave-Ck1zUtKM.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/oz-BzwKVEFT.js create mode 100644 AIWebQuickDeploy/public/admin/assets/oz-qQq7irPq.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/package-B_VYKnha.js create mode 100644 AIWebQuickDeploy/public/admin/assets/package-BcYUNEpY.js create mode 100644 AIWebQuickDeploy/public/admin/assets/package-DWi-wsDP.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/package-nRT1s46o.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/pascal-B1wCu0_E.js create mode 100644 AIWebQuickDeploy/public/admin/assets/pascal-CafrKXZF.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/perl-CdXCOZ3F.js create mode 100644 AIWebQuickDeploy/public/admin/assets/perl-tdMlh9QA.js create mode 100644 AIWebQuickDeploy/public/admin/assets/phone-BwZkxxUB.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/phone-DvRFs8Iq.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/pig-CevX1Tat.js create mode 100644 AIWebQuickDeploy/public/admin/assets/pig-CwGJVRC4.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/plugin-BB9dueQ_.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/points-7mr5fEHY.js create mode 100644 AIWebQuickDeploy/public/admin/assets/points-CpXy5ei9.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/polyfills-CChaUeAE.js create mode 100644 AIWebQuickDeploy/public/admin/assets/polyfills-DxIpxyf0.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/powershell-CFHJl5sT.js create mode 100644 AIWebQuickDeploy/public/admin/assets/powershell-D1ly3AHC.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/properties-C78fOPTZ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/properties-_nPj978X.js create mode 100644 AIWebQuickDeploy/public/admin/assets/protobuf-B4y9do6W.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/protobuf-ChK-085T.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/pug-BmUsPMDj.js create mode 100644 AIWebQuickDeploy/public/admin/assets/pug-_kJOm_E2.js create mode 100644 AIWebQuickDeploy/public/admin/assets/puppet-Bc-yJKzi.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/puppet-DMA9R1ak.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/python-BuPzkPfP.js create mode 100644 AIWebQuickDeploy/public/admin/assets/python-DD-Q2bae.js create mode 100644 AIWebQuickDeploy/public/admin/assets/q-B0kTJ4cI.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/q-ZnEupP5q.js create mode 100644 AIWebQuickDeploy/public/admin/assets/r-BA4EbLKE.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/r-DUYO_cvP.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/register-1wwcbwRm.js rename AIWebQuickDeploy/public/admin/assets/{register-DsQMN5kC.css => register-BVrASrQH.css} (100%) create mode 100644 AIWebQuickDeploy/public/admin/assets/register-VCiIC402.js create mode 100644 AIWebQuickDeploy/public/admin/assets/reload-C76-1XLf.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/reload-XgcEbP6L.js create mode 100644 AIWebQuickDeploy/public/admin/assets/rightSide-CF_-JibU.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/rightSide-DeRod8ar.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/rightSide.vue_vue_type_script_setup_true_lang-Bh_y80-_.js create mode 100644 AIWebQuickDeploy/public/admin/assets/rightSide.vue_vue_type_script_setup_true_lang-ClZNHSw-.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/rpm-CTu-6PCP.js create mode 100644 AIWebQuickDeploy/public/admin/assets/rpm-DI_rRufH.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/ruby-B2Rjki9n.js create mode 100644 AIWebQuickDeploy/public/admin/assets/ruby-CR-u2WLS.js create mode 100644 AIWebQuickDeploy/public/admin/assets/s3-CCx8GMyA.js rename AIWebQuickDeploy/public/admin/assets/{sas-B4kiWyti.js => sas-Bqaci40L.js} (57%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/scheme-C41bIUwD.js create mode 100644 AIWebQuickDeploy/public/admin/assets/scheme-qjP0V5Ag.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/setting-C2TdzxY1.js rename AIWebQuickDeploy/public/admin/assets/{setting-DPas9sHG.css => setting-C7NApC_O.css} (57%) create mode 100644 AIWebQuickDeploy/public/admin/assets/setting-CecJapUm.js create mode 100644 AIWebQuickDeploy/public/admin/assets/shell-BLav31RL.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/shell-CjFT_Tl9.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/sieve-C3Gn_uJK.js create mode 100644 AIWebQuickDeploy/public/admin/assets/sieve-r025o_jW.js create mode 100644 AIWebQuickDeploy/public/admin/assets/simple-mode-C3vEBAcb.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/simple-mode-C4Nsj8zu.js create mode 100644 AIWebQuickDeploy/public/admin/assets/smalltalk-C7J3IyEP.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/smalltalk-CnHTOXQT.js create mode 100644 AIWebQuickDeploy/public/admin/assets/solr-78MBEUkU.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/solr-DehyRSwq.js create mode 100644 AIWebQuickDeploy/public/admin/assets/sparql-BRLJFz69.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/sparql-DkYu6x3z.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/spreadsheet-BCZA_wO0.js create mode 100644 AIWebQuickDeploy/public/admin/assets/spreadsheet-CGlWr0eM.js create mode 100644 AIWebQuickDeploy/public/admin/assets/sql-B3SPsWL6.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/sql-C4g8LzGK.js create mode 100644 AIWebQuickDeploy/public/admin/assets/stex-Ba7Sj9VR.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/stex-C3f8Ysf7.js create mode 100644 AIWebQuickDeploy/public/admin/assets/style-5OA7v-GU.css delete mode 100644 AIWebQuickDeploy/public/admin/assets/style-CSuzBWCF.js create mode 100644 AIWebQuickDeploy/public/admin/assets/style-ClrjWzkr.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/style-DzVD5h9V.css rename AIWebQuickDeploy/public/admin/assets/{stylus-q6zbLY83.js => stylus-OdhglgkO.js} (58%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/sub-BYbZdG6Y.js create mode 100644 AIWebQuickDeploy/public/admin/assets/sub-hQISPUS5.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/sub.vue_vue_type_script_setup_true_lang-6LQFZuiJ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/sub.vue_vue_type_script_setup_true_lang-SYX2vZ5k.js create mode 100644 AIWebQuickDeploy/public/admin/assets/swift-B_XXVlXX.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/swift-BzpIVaGY.js create mode 100644 AIWebQuickDeploy/public/admin/assets/tcl-B2fODqDH.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/tcl-DVfN8rqt.js create mode 100644 AIWebQuickDeploy/public/admin/assets/tencent-BAqF1PoT.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/tencent-DLUjGcyt.js create mode 100644 AIWebQuickDeploy/public/admin/assets/textile-BuVhTOzU.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/textile-CnDTJFAw.js create mode 100644 AIWebQuickDeploy/public/admin/assets/tiddlywiki-BgR6AEZu.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/tiddlywiki-DO-Gjzrf.js create mode 100644 AIWebQuickDeploy/public/admin/assets/tiki-CI-ztowC.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/tiki-DGYXhP31.js create mode 100644 AIWebQuickDeploy/public/admin/assets/toml-BQXy8elZ.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/toml-BXUEaScT.js create mode 100644 AIWebQuickDeploy/public/admin/assets/troff-Ce85hlLp.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/troff-wAsdV37c.js create mode 100644 AIWebQuickDeploy/public/admin/assets/ttcn-BxnYHtq8.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/ttcn-CiGrtVSZ.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/ttcn-cfg-BIkV9KBc.js create mode 100644 AIWebQuickDeploy/public/admin/assets/ttcn-cfg-CKJxb-l2.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/turtle-B1tBg_DP.js create mode 100644 AIWebQuickDeploy/public/admin/assets/turtle-BkSuIpt-.js create mode 100644 AIWebQuickDeploy/public/admin/assets/upload-DwmqW_vL.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/use-resolve-button-type-BE1XPlJv.js create mode 100644 AIWebQuickDeploy/public/admin/assets/use-resolve-button-type-DnRVrBaM.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/useMainPage--yVtHxDh.js create mode 100644 AIWebQuickDeploy/public/admin/assets/useMainPage-Dbp8uSF1.js create mode 100644 AIWebQuickDeploy/public/admin/assets/useMenu-CK91fAX9.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/useMenu-DJ8_3Y3q.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/userAgreement-CNd8Qla0.js create mode 100644 AIWebQuickDeploy/public/admin/assets/userAgreement-DZ5u8Z6E.js create mode 100644 AIWebQuickDeploy/public/admin/assets/utcFormatTime-BtFjiA-p.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/utcformatTime-Bq4gDWNx.js create mode 100644 AIWebQuickDeploy/public/admin/assets/vb-BHgjm0DN.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/vb-CmGdzxic.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/vbscript-BuJXcnF6.js create mode 100644 AIWebQuickDeploy/public/admin/assets/vbscript-Dawdd5GZ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/velocity-BdD_26Jv.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/velocity-D8B20fx6.js create mode 100644 AIWebQuickDeploy/public/admin/assets/verilog-B4LBqg_1.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/verilog-C6RDOZhf.js create mode 100644 AIWebQuickDeploy/public/admin/assets/vhdl-CWWH2SUo.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/vhdl-lSbBsy5d.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/violation-BuG_b462.js create mode 100644 AIWebQuickDeploy/public/admin/assets/violation-CLUBFwNt.js rename AIWebQuickDeploy/public/admin/assets/{chat-DJXUFUH_.css => violation-CWzX84hX.css} (100%) delete mode 100644 AIWebQuickDeploy/public/admin/assets/visible-D8lJUNYg.js create mode 100644 AIWebQuickDeploy/public/admin/assets/webidl-CGwyPRYs.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/webidl-ZXfAyPTL.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/wechat-B077V9uG.js create mode 100644 AIWebQuickDeploy/public/admin/assets/wechat-BhHNBWBZ.js create mode 100644 AIWebQuickDeploy/public/admin/assets/wechat-Cg92RNH0.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/wechat-iHfqycBm.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/welcomePageSettings-BNqbw3Pg.js create mode 100644 AIWebQuickDeploy/public/admin/assets/welcomePageSettings-FlDP6m3H.js create mode 100644 AIWebQuickDeploy/public/admin/assets/xquery-CVDBqZPY.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/xquery-WRlm2TX8.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/yacas-BJ4BC0dw.js create mode 100644 AIWebQuickDeploy/public/admin/assets/yacas-I8QjZlxf.js create mode 100644 AIWebQuickDeploy/public/admin/assets/z80-D8p3gKXp.js delete mode 100644 AIWebQuickDeploy/public/admin/assets/z80-Hz9HOZM7.js rename {src/chat/public/icon => AIWebQuickDeploy/public/chat}/apple-touch-icon.png (100%) delete mode 100644 AIWebQuickDeploy/public/chat/assets/404-0d6db85f.svg delete mode 100644 AIWebQuickDeploy/public/chat/assets/Right-153af9c5.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/_plugin-vue_export-helper-c27b6911.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/chat-7eb7de6c.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/chat-fb203400.css delete mode 100644 AIWebQuickDeploy/public/chat/assets/crami-173ca461.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-1362473a.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-404bb920.css delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-40baf14c.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-5212be5f.css delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-5d3b5439.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-6e56dfd3.css delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-756d601a.css delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-7e813bfa.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-e614ee1e.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/index-fb60d41a.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/naive-ui-64ac446a.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/useBasicLayout-18dd2ca5.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/user-3d98b148.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/v-viewer-ead8b014.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/vue-c19408e5.js delete mode 100644 AIWebQuickDeploy/public/chat/assets/vueuse-motion-563da5fd.js create mode 100644 AIWebQuickDeploy/public/chat/css/chat-f45736e0.css create mode 100644 AIWebQuickDeploy/public/chat/css/index-7222b59c.css rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_AMS-Regular-0cdd387c.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_AMS-Regular-30da91e8.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_AMS-Regular-68534840.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Caligraphic-Bold-07d8e303.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Caligraphic-Bold-1ae6bd74.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Caligraphic-Bold-de7701e4.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Caligraphic-Regular-3398dd02.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Caligraphic-Regular-5d53e70a.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Caligraphic-Regular-ed0b7437.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Fraktur-Bold-74444efd.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Fraktur-Bold-9163df9c.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Fraktur-Bold-9be7ceb8.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Fraktur-Regular-1e6f9579.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Fraktur-Regular-51814d27.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Fraktur-Regular-5e28753b.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Bold-0f60d1b8.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Bold-138ac28d.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Bold-c76c5d69.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-BoldItalic-70ee1f64.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-BoldItalic-99cd42a3.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-BoldItalic-a6f7ec0d.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Italic-0d85ae7c.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Italic-97479ca6.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Italic-f1d6ef86.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Regular-c2342cd8.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Regular-c6368d87.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Main-Regular-d0332f52.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Math-BoldItalic-850c0af5.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Math-BoldItalic-dc47344d.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Math-BoldItalic-f9377ab0.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Math-Italic-08ce98e5.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Math-Italic-7af58c5e.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Math-Italic-8a8d2445.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Bold-1ece03f7.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Bold-e99ae511.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Bold-ece03cfd.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Italic-00b26ac8.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Italic-3931dd81.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Italic-91ee6750.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Regular-11e4dc8a.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Regular-68e8c73e.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_SansSerif-Regular-f36ea897.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Script-Regular-036d4e95.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Script-Regular-1c67f068.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Script-Regular-d96cdf2b.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size1-Regular-6b47c401.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size1-Regular-95b6d2f1.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size1-Regular-c943cc98.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size2-Regular-2014c523.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size2-Regular-a6b2099f.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size2-Regular-d04c5421.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size3-Regular-500e04d5.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size3-Regular-6ab6b62e.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size4-Regular-99f9c675.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size4-Regular-a4af7d41.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Size4-Regular-c647367d.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Typewriter-Regular-71d517d6.woff2 (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Typewriter-Regular-e14fed02.woff (100%) rename AIWebQuickDeploy/public/chat/{assets => fonts}/KaTeX_Typewriter-Regular-f01f3e87.ttf (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/360logo-c09b4832.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/alipay-eab94eb8.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/avatar-e985e5ec.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/baidulogo-bf43b354.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/dalle-4f19ad1c.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/favicon-25a41591.ico (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/google-6f260bf3.gif (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/logo-89dd0dfe.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/network-0f22586e.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/sdxl-7c167940.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/suno-e14fd81c.ico (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/tencentlogo-358d1ec1.png (100%) rename AIWebQuickDeploy/public/chat/{assets => images}/wxpay-2d8f84af.png (100%) create mode 100644 AIWebQuickDeploy/public/chat/js/_basePickBy-a1ec2f81.js create mode 100644 AIWebQuickDeploy/public/chat/js/_baseUniq-5ee25ed9.js create mode 100644 AIWebQuickDeploy/public/chat/js/architecture-4AB2E3PP-22315bac.js create mode 100644 AIWebQuickDeploy/public/chat/js/architectureDiagram-IEHRJDOE-967019f3.js create mode 100644 AIWebQuickDeploy/public/chat/js/blockDiagram-JOT3LUYC-29320812.js create mode 100644 AIWebQuickDeploy/public/chat/js/c4Diagram-VJAJSXHY-3b30c64a.js create mode 100644 AIWebQuickDeploy/public/chat/js/chart-vendor-e1d59b84.js create mode 100644 AIWebQuickDeploy/public/chat/js/chat-30409f0b.js create mode 100644 AIWebQuickDeploy/public/chat/js/chunk-4BMEZGHF-450323fc.js create mode 100644 AIWebQuickDeploy/public/chat/js/chunk-A2AXSNBT-91f81fe1.js create mode 100644 AIWebQuickDeploy/public/chat/js/chunk-AEK57VVT-b106e120.js create mode 100644 AIWebQuickDeploy/public/chat/js/chunk-D6G4REZN-759b9c9b.js create mode 100644 AIWebQuickDeploy/public/chat/js/chunk-RZ5BOZE2-2248c621.js create mode 100644 AIWebQuickDeploy/public/chat/js/chunk-XZIHB7SX-ad6075e5.js create mode 100644 AIWebQuickDeploy/public/chat/js/classDiagram-GIVACNV2-ed5c442d.js create mode 100644 AIWebQuickDeploy/public/chat/js/classDiagram-v2-COTLJTTW-ed5c442d.js create mode 100644 AIWebQuickDeploy/public/chat/js/clone-92746810.js create mode 100644 AIWebQuickDeploy/public/chat/js/cytoscape.esm-73b8622f.js create mode 100644 AIWebQuickDeploy/public/chat/js/dagre-OKDRZEBW-d917c4e2.js create mode 100644 AIWebQuickDeploy/public/chat/js/diagram-SSKATNLV-b8a27f89.js create mode 100644 AIWebQuickDeploy/public/chat/js/diagram-VNBRO52H-83eed6a5.js create mode 100644 AIWebQuickDeploy/public/chat/js/editor-vendor-e2dea24d.js create mode 100644 AIWebQuickDeploy/public/chat/js/erDiagram-Q7BY3M3F-291834c7.js create mode 100644 AIWebQuickDeploy/public/chat/js/flowDiagram-4HSFHLVR-f87fa481.js create mode 100644 AIWebQuickDeploy/public/chat/js/ganttDiagram-APWFNJXF-b4e68b07.js create mode 100644 AIWebQuickDeploy/public/chat/js/gitGraph-O2Q2CXLX-3743c2f0.js create mode 100644 AIWebQuickDeploy/public/chat/js/gitGraphDiagram-7IBYFJ6S-5a12c14e.js create mode 100644 AIWebQuickDeploy/public/chat/js/graph-f794edc0.js create mode 100644 AIWebQuickDeploy/public/chat/js/index-1507b968.js create mode 100644 AIWebQuickDeploy/public/chat/js/index-ac5ef21b.js create mode 100644 AIWebQuickDeploy/public/chat/js/index-ac663bb2.js create mode 100644 AIWebQuickDeploy/public/chat/js/info-4N47QTOZ-fc134342.js create mode 100644 AIWebQuickDeploy/public/chat/js/infoDiagram-PH2N3AL5-8b938e5d.js create mode 100644 AIWebQuickDeploy/public/chat/js/journeyDiagram-U35MCT3I-8811ed3e.js create mode 100644 AIWebQuickDeploy/public/chat/js/kanban-definition-NDS4AKOZ-33954390.js create mode 100644 AIWebQuickDeploy/public/chat/js/layout-663bb27b.js create mode 100644 AIWebQuickDeploy/public/chat/js/mermaid-parser.core-a05879fd.js create mode 100644 AIWebQuickDeploy/public/chat/js/mindmap-definition-ALO5MXBD-b2a9d38b.js create mode 100644 AIWebQuickDeploy/public/chat/js/packet-KVYON367-9603ba8c.js create mode 100644 AIWebQuickDeploy/public/chat/js/pie-R6RNRRYF-cd38cf52.js create mode 100644 AIWebQuickDeploy/public/chat/js/pieDiagram-IB7DONF6-28cac21c.js create mode 100644 AIWebQuickDeploy/public/chat/js/quadrantDiagram-7GDLP6J5-04760df9.js create mode 100644 AIWebQuickDeploy/public/chat/js/radar-MK3ICKWK-88eb76a9.js create mode 100644 AIWebQuickDeploy/public/chat/js/requirementDiagram-KVF5MWMF-3cb34f9e.js create mode 100644 AIWebQuickDeploy/public/chat/js/sankeyDiagram-QLVOVGJD-e9571b22.js create mode 100644 AIWebQuickDeploy/public/chat/js/sequenceDiagram-X6HHIX6F-38062ff3.js create mode 100644 AIWebQuickDeploy/public/chat/js/stateDiagram-DGXRK772-5659f574.js create mode 100644 AIWebQuickDeploy/public/chat/js/stateDiagram-v2-YXO3MK2T-75cc1610.js create mode 100644 AIWebQuickDeploy/public/chat/js/timeline-definition-BDJGKUSR-1df78097.js create mode 100644 AIWebQuickDeploy/public/chat/js/ui-vendor-70145f70.js create mode 100644 AIWebQuickDeploy/public/chat/js/utils-vendor-c35799af.js create mode 100644 AIWebQuickDeploy/public/chat/js/vue-vendor-d751b0f5.js create mode 100644 AIWebQuickDeploy/public/chat/js/xychartDiagram-VJFVF3MP-f066b0a9.js rename src/chat/public/icon/android-chrome-192x192.png => AIWebQuickDeploy/public/chat/pwa-192x192.png (100%) rename src/chat/public/icon/android-chrome-512x512.png => AIWebQuickDeploy/public/chat/pwa-512x512.png (100%) create mode 100644 AIWebQuickDeploy/public/chat/robots.txt delete mode 100644 CHANGELOG.md rename {src/admin => admin}/.env.development (88%) rename {src/admin => admin}/.env.production (100%) rename {src/admin => admin}/.env.test (100%) rename {src/admin => admin}/.gitignore (100%) rename {src/admin => admin}/.npmrc (100%) create mode 100644 admin/.prettierrc rename {src/admin => admin}/.vscode/extensions.json (100%) create mode 100755 admin/.vscode/settings.json rename {src/admin => admin}/index.html (100%) create mode 100755 admin/package.json rename {src/admin => admin}/plop-templates/component/index.hbs (100%) rename {src/admin => admin}/plop-templates/component/prompt.js (100%) rename {src/admin => admin}/plop-templates/mock/mock.hbs (100%) rename {src/admin => admin}/plop-templates/mock/prompt.js (100%) rename {src/admin => admin}/plop-templates/page/index.hbs (100%) rename {src/admin => admin}/plop-templates/page/prompt.js (100%) rename {src/admin => admin}/plop-templates/store/index.hbs (100%) rename {src/admin => admin}/plop-templates/store/prompt.js (100%) create mode 100755 admin/plopfile.js create mode 100644 admin/pnpm-lock.yaml rename {src/admin => admin}/postcss.config.js (95%) rename {src/admin => admin}/public/browser_upgrade/chrome.png (100%) rename {src/admin => admin}/public/browser_upgrade/edge.png (100%) rename {src/admin => admin}/public/browser_upgrade/index.css (100%) create mode 100644 admin/public/favicon.ico rename {src/admin => admin}/public/loading.css (100%) create mode 100644 admin/scripts/generate.icons.ts create mode 100755 admin/src/App.vue rename {src/admin => admin}/src/api/index.ts (95%) rename {src/admin => admin}/src/api/modules/app.ts (100%) create mode 100644 admin/src/api/modules/autoReply.ts rename {src/admin => admin}/src/api/modules/badWords.ts (67%) create mode 100644 admin/src/api/modules/chat.ts rename {src/admin => admin}/src/api/modules/config.ts (100%) rename {src/admin => admin}/src/api/modules/dashboard.ts (84%) create mode 100644 admin/src/api/modules/mcp.ts rename {src/admin => admin}/src/api/modules/models.ts (100%) create mode 100644 admin/src/api/modules/official.ts rename {src/admin => admin}/src/api/modules/order.ts (100%) rename {src/admin => admin}/src/api/modules/package.ts (86%) rename {src/admin => admin}/src/api/modules/plugin.ts (100%) create mode 100644 admin/src/api/modules/upload.ts rename {src/admin => admin}/src/api/modules/user.ts (57%) create mode 100644 admin/src/assets/CHANGELOG.md rename {src/admin => admin}/src/assets/icons/403.svg (100%) rename {src/admin => admin}/src/assets/icons/404.svg (100%) rename {src/admin => admin}/src/assets/icons/image-load-fail.svg (100%) rename {src/admin => admin}/src/assets/icons/toolbar-collapse.svg (100%) rename {src/admin => admin}/src/assets/styles/globals.scss (90%) rename {src/admin => admin}/src/assets/styles/nprogress.scss (79%) rename {src/admin => admin}/src/assets/styles/resources/utils.scss (98%) rename {src/admin => admin}/src/assets/styles/resources/variables.scss (100%) create mode 100755 admin/src/components/Auth/index.vue create mode 100755 admin/src/components/AuthAll/index.vue create mode 100755 admin/src/components/FileUpload/index.vue create mode 100755 admin/src/components/FixedActionBar/index.vue create mode 100644 admin/src/components/IconifyIcon/index.vue create mode 100755 admin/src/components/ImagePreview/index.vue create mode 100755 admin/src/components/ImageUpload/index.vue create mode 100755 admin/src/components/ImagesUpload/index.vue create mode 100755 admin/src/components/NotAllowed/index.vue rename {src/admin => admin}/src/components/PageHeader/index.vue (59%) create mode 100755 admin/src/components/PageMain/index.vue create mode 100755 admin/src/components/PcasCascader/index.vue create mode 100755 admin/src/components/PcasCascader/pcas-code.json create mode 100644 admin/src/components/PromptTemplateEditor/index.vue create mode 100755 admin/src/components/SearchBar/index.vue create mode 100755 admin/src/components/SvgIcon/index.vue create mode 100755 admin/src/components/SystemInfo/index.vue create mode 100755 admin/src/components/Trend/index.vue rename {src/admin => admin}/src/constants/copyright.ts (100%) rename {src/admin => admin}/src/constants/index.ts (75%) create mode 100644 admin/src/iconify/data.json create mode 100755 admin/src/iconify/index.json rename {src/admin => admin}/src/iconify/index.ts (56%) rename {src/admin => admin}/src/layouts/components/AppSetting/index.vue (69%) create mode 100644 admin/src/layouts/components/BackTop/index.vue create mode 100644 admin/src/layouts/components/Breadcrumb/index.vue create mode 100644 admin/src/layouts/components/Breadcrumb/item.vue create mode 100755 admin/src/layouts/components/Copyright/index.vue create mode 100755 admin/src/layouts/components/Header/index.vue rename {src/admin => admin}/src/layouts/components/HotkeysIntro/index.vue (65%) create mode 100755 admin/src/layouts/components/Logo/index.vue create mode 100755 admin/src/layouts/components/MainSidebar/index.vue create mode 100644 admin/src/layouts/components/Menu/index.vue rename {src/admin => admin}/src/layouts/components/Menu/item.vue (59%) create mode 100644 admin/src/layouts/components/Menu/sub.vue create mode 100644 admin/src/layouts/components/Menu/types.ts create mode 100755 admin/src/layouts/components/Search/index.vue create mode 100755 admin/src/layouts/components/SubSidebar/index.vue create mode 100644 admin/src/layouts/components/Topbar/Tabbar/index.vue create mode 100644 admin/src/layouts/components/Topbar/Toolbar/Breadcrumb/index.vue create mode 100644 admin/src/layouts/components/Topbar/Toolbar/ColorScheme/index.vue create mode 100644 admin/src/layouts/components/Topbar/Toolbar/Fullscreen/index.vue create mode 100644 admin/src/layouts/components/Topbar/Toolbar/NavSearch/index.vue rename {src/admin => admin}/src/layouts/components/Topbar/Toolbar/PageReload/index.vue (70%) create mode 100755 admin/src/layouts/components/Topbar/Toolbar/index.vue create mode 100644 admin/src/layouts/components/Topbar/Toolbar/leftSide.vue rename {src/admin => admin}/src/layouts/components/Topbar/Toolbar/rightSide.vue (67%) create mode 100755 admin/src/layouts/components/Topbar/index.vue create mode 100755 admin/src/layouts/components/views/link.vue create mode 100755 admin/src/layouts/index.vue create mode 100644 admin/src/layouts/ui-kit/HButton.vue create mode 100644 admin/src/layouts/ui-kit/HCheckList.vue create mode 100644 admin/src/layouts/ui-kit/HDialog.vue create mode 100644 admin/src/layouts/ui-kit/HDropdown.vue create mode 100644 admin/src/layouts/ui-kit/HDropdownMenu.vue create mode 100644 admin/src/layouts/ui-kit/HInput.vue create mode 100644 admin/src/layouts/ui-kit/HKbd.vue create mode 100644 admin/src/layouts/ui-kit/HSelect.vue create mode 100644 admin/src/layouts/ui-kit/HSlideover.vue create mode 100644 admin/src/layouts/ui-kit/HTabList.vue create mode 100644 admin/src/layouts/ui-kit/HToggle.vue rename {src/admin => admin}/src/layouts/ui-kit/HTooltip.vue (67%) rename {src/admin => admin}/src/main.ts (100%) rename {src/admin => admin}/src/menu/index.ts (60%) rename {src/admin => admin}/src/menu/modules/multilevel.menu.example.ts (93%) rename {src/admin => admin}/src/mock/app.ts (99%) rename {src/admin => admin}/src/mock/user.ts (81%) rename {src/admin => admin}/src/router/index.ts (91%) create mode 100644 admin/src/router/modules/app.menu.ts rename {src/admin => admin}/src/router/modules/chat.menu.ts (82%) rename {src/admin => admin}/src/router/modules/model.menu.ts (75%) rename {src/admin => admin}/src/router/modules/package.menu.ts (100%) rename {src/admin => admin}/src/router/modules/pay.menu.ts (79%) rename {src/admin => admin}/src/router/modules/secure.menu.ts (100%) rename {src/admin => admin}/src/router/modules/storage.menu.ts (72%) rename {src/admin => admin}/src/router/modules/system.menu.ts (86%) rename {src/admin => admin}/src/router/modules/user.menu.ts (72%) rename {src/admin => admin}/src/router/routes.ts (70%) rename {src/admin => admin}/src/settings.default.ts (91%) rename {src/admin => admin}/src/settings.ts (88%) rename {src/admin => admin}/src/shims-vue.d.ts (100%) create mode 100755 admin/src/store/index.ts rename {src/admin => admin}/src/store/modules/keepAlive.ts (58%) rename {src/admin => admin}/src/store/modules/menu.ts (82%) rename {src/admin => admin}/src/store/modules/route.ts (93%) create mode 100755 admin/src/store/modules/settings.ts rename {src/admin => admin}/src/store/modules/tabbar.ts (54%) rename {src/admin => admin}/src/store/modules/user.ts (96%) rename {src/admin => admin}/src/types/auto-imports.d.ts (94%) rename {src/admin => admin}/src/types/components.d.ts (95%) rename {src/admin => admin}/src/types/global.d.ts (63%) create mode 100755 admin/src/types/shims.d.ts create mode 100644 admin/src/ui-provider/index.ts rename {src/admin => admin}/src/ui-provider/index.vue (73%) create mode 100755 admin/src/utils/composables/useAuth.ts rename {src/admin => admin}/src/utils/composables/useGlobalProperties.ts (50%) rename {src/admin => admin}/src/utils/composables/useMainPage.ts (75%) create mode 100755 admin/src/utils/composables/useMenu.ts rename {src/admin => admin}/src/utils/composables/useTabbar.ts (52%) create mode 100755 admin/src/utils/composables/useViewTransition.ts create mode 100755 admin/src/utils/dayjs.ts rename {src/admin => admin}/src/utils/directive.ts (79%) create mode 100755 admin/src/utils/eventBus.ts create mode 100755 admin/src/utils/index.ts rename {src/admin => admin}/src/utils/injectionKeys.ts (66%) create mode 100755 admin/src/utils/system.copyright.ts create mode 100644 admin/src/utils/utcFormatTime.ts create mode 100755 admin/src/views/[...all].vue create mode 100644 admin/src/views/app/application.vue create mode 100644 admin/src/views/app/classify.vue create mode 100644 admin/src/views/chat/chat.vue create mode 100755 admin/src/views/index.vue create mode 100755 admin/src/views/login.vue create mode 100644 admin/src/views/models/baseSetting.vue create mode 100644 admin/src/views/models/key.vue rename {src/admin => admin}/src/views/order/index.vue (55%) rename {src/admin => admin}/src/views/package/crami.vue (56%) create mode 100644 admin/src/views/package/package.vue create mode 100644 admin/src/views/package/points.vue create mode 100644 admin/src/views/pay/duluPay.vue create mode 100644 admin/src/views/pay/epay.vue create mode 100644 admin/src/views/pay/hupijiao.vue create mode 100644 admin/src/views/pay/ltzf.vue rename {src/admin => admin}/src/views/pay/mpay.vue (50%) create mode 100644 admin/src/views/pay/wechat.vue create mode 100644 admin/src/views/personal/edit.password.vue rename {src/admin => admin}/src/views/personal/setting.vue (60%) rename {src/admin => admin}/src/views/reload.vue (60%) rename {src/admin => admin}/src/views/sensitive/autpReply.vue (63%) rename {src/admin => admin}/src/views/sensitive/baiduSensitive.vue (60%) create mode 100644 admin/src/views/sensitive/custom.vue rename {src/admin => admin}/src/views/sensitive/identityVerification.vue (51%) rename {src/admin => admin}/src/views/sensitive/violation.vue (62%) rename {src/admin => admin}/src/views/storage/ali.vue (56%) create mode 100644 admin/src/views/storage/chevereto.vue create mode 100644 admin/src/views/storage/localStorage.vue create mode 100644 admin/src/views/storage/s3.vue rename {src/admin => admin}/src/views/storage/tencent.vue (55%) rename {src/admin => admin}/src/views/system/baiduStatistics.vue (68%) create mode 100644 admin/src/views/system/baseConfiguration.vue create mode 100644 admin/src/views/system/notice.vue rename {src/admin => admin}/src/views/system/welcomePageSettings.vue (63%) rename {src/admin => admin}/src/views/users/accountLog.vue (54%) rename {src/admin => admin}/src/views/users/email.vue (50%) rename {src/admin => admin}/src/views/users/index.vue (58%) rename {src/admin => admin}/src/views/users/phone.vue (56%) rename {src/admin => admin}/src/views/users/register.vue (58%) create mode 100644 admin/src/views/users/userAgreement.vue rename {src/admin => admin}/src/views/users/wechat.vue (68%) rename {src/admin => admin}/themes/index.ts (100%) rename {src/admin => admin}/tsconfig.json (72%) create mode 100644 admin/tsconfig.node.json rename {src/admin => admin}/uno.config.ts (51%) rename {src/admin => admin}/vite.config.ts (95%) rename {src/admin => admin}/vite/plugins/app-info.ts (100%) rename {src/admin => admin}/vite/plugins/archiver.ts (100%) rename {src/admin => admin}/vite/plugins/auto-import.ts (100%) rename {src/admin => admin}/vite/plugins/banner.ts (100%) rename {src/admin => admin}/vite/plugins/components.ts (100%) rename {src/admin => admin}/vite/plugins/compression.ts (100%) rename {src/admin => admin}/vite/plugins/console.ts (100%) rename {src/admin => admin}/vite/plugins/devtools.ts (100%) rename {src/admin => admin}/vite/plugins/index.ts (94%) rename {src/admin => admin}/vite/plugins/layouts.ts (100%) create mode 100644 admin/vite/plugins/minify.ts rename {src/admin => admin}/vite/plugins/mock.ts (100%) rename {src/admin => admin}/vite/plugins/pages.ts (100%) rename {src/admin => admin}/vite/plugins/svg-icon.ts (100%) rename {src/admin => admin}/vite/plugins/unocss.ts (100%) create mode 100755 build.sh rename {src/chat => chat}/.commitlintrc.json (100%) create mode 100644 chat/.env rename {src/chat => chat}/.env.production (60%) rename {src/chat => chat}/.gitattributes (100%) rename {src/chat => chat}/.gitignore (87%) create mode 100644 chat/.npmrc create mode 100644 chat/.prettierrc rename {src => chat}/.vscode/settings.json (79%) rename {src/chat => chat}/config/index.ts (100%) rename {src/chat => chat}/config/proxy.ts (91%) create mode 100644 chat/electron-builder.yml create mode 100644 chat/env.d.ts rename {src/chat => chat}/index.html (66%) create mode 100644 chat/package.json create mode 100644 chat/pnpm-lock.yaml rename {src/chat => chat}/postcss.config.js (96%) rename src/chat/src/assets/logo.png => chat/public/apple-touch-icon.png (100%) rename {src/chat => chat}/public/browserconfig.xml (100%) rename {src/admin => chat}/public/favicon.ico (100%) create mode 100644 chat/public/icon/android-chrome-192x192.png create mode 100644 chat/public/icon/android-chrome-512x512.png create mode 100644 chat/public/icon/apple-touch-icon.png rename {src/chat => chat}/public/icon/favicon-16x16.png (100%) rename {src/chat => chat}/public/icon/favicon-32x32.png (100%) rename {src/chat => chat}/public/icon/manifest.webmanifest (100%) rename {src/chat => chat}/public/icon/mstile-150x150.png (100%) create mode 100644 chat/public/pwa-192x192.png create mode 100644 chat/public/pwa-512x512.png create mode 100644 chat/public/robots.txt rename {src/chat => chat}/public/safari-pinned-tab.svg (100%) create mode 100644 chat/src/App.vue rename {src/chat => chat}/src/api/appStore.ts (78%) rename {src/chat => chat}/src/api/balance.ts (72%) rename {src/chat => chat}/src/api/chatLog.ts (53%) create mode 100644 chat/src/api/config.ts rename {src/chat => chat}/src/api/crami.ts (72%) rename {src/chat => chat}/src/api/global.ts (100%) rename {src/chat => chat}/src/api/group.ts (72%) create mode 100644 chat/src/api/index.ts rename {src/chat => chat}/src/api/models.ts (100%) rename {src/chat => chat}/src/api/order.ts (100%) rename {src/chat => chat}/src/api/plugin.ts (75%) create mode 100644 chat/src/api/share.ts rename {src/chat => chat}/src/api/signin.ts (100%) rename {src/chat => chat}/src/api/types.ts (100%) create mode 100644 chat/src/api/upload.ts create mode 100644 chat/src/api/user.ts rename {src/chat => chat}/src/assets/aiavatar/360logo.png (100%) rename {src/chat => chat}/src/assets/aiavatar/alilogo.png (100%) rename {src/chat => chat}/src/assets/aiavatar/baidulogo.png (100%) rename {src/chat => chat}/src/assets/aiavatar/claudelogo.png (100%) rename {src/chat => chat}/src/assets/aiavatar/dalle.png (100%) rename {src/chat => chat}/src/assets/aiavatar/google.gif (100%) rename {src/chat => chat}/src/assets/aiavatar/gpt4logo.png (100%) rename {src/chat => chat}/src/assets/aiavatar/midjourney.png (100%) rename {src/chat => chat}/src/assets/aiavatar/mindmap.png (100%) rename {src/chat => chat}/src/assets/aiavatar/network.png (100%) rename {src/chat => chat}/src/assets/aiavatar/openai.svg (100%) rename {src/chat => chat}/src/assets/aiavatar/sdxl.png (100%) rename {src/chat => chat}/src/assets/aiavatar/suno.ico (100%) rename {src/chat => chat}/src/assets/aiavatar/tencentlogo.png (100%) rename {src/chat => chat}/src/assets/aiavatar/xunfeilogo.png (100%) rename {src/chat => chat}/src/assets/aiavatar/zhipulogo.png (100%) rename {src/chat => chat}/src/assets/alipay.png (100%) rename {src/chat => chat}/src/assets/avatar.png (100%) rename {src/chat => chat}/src/assets/badge.png (100%) rename {src/chat => chat}/src/assets/defaultPreset.json (100%) rename {src/chat => chat}/src/assets/fail.png (100%) rename {src/chat/public => chat/src/assets}/favicon.ico (100%) create mode 100644 chat/src/assets/logo.png rename {src/chat => chat}/src/assets/market.png (100%) rename {src/chat => chat}/src/assets/reset.png (100%) rename {src/chat => chat}/src/assets/wechat.png (100%) rename {src/chat => chat}/src/assets/wxpay.png (100%) rename {src/chat/src/layout => chat/src}/components/BadWordsDialog.vue (70%) create mode 100644 chat/src/components/CloseButtonDemo.vue create mode 100644 chat/src/components/Dialog/Confirm.vue create mode 100644 chat/src/components/Dialogs/BadWordsDialog.vue create mode 100644 chat/src/components/HtmlDialog.vue rename {src/chat/src/layout => chat/src}/components/Identity.vue (73%) create mode 100644 chat/src/components/Login/Email.vue create mode 100644 chat/src/components/Login/Login.vue rename {src/chat/src/layout => chat/src}/components/Login/SliderCaptcha.vue (67%) create mode 100644 chat/src/components/Login/Wechat.vue create mode 100644 chat/src/components/Message/index.vue create mode 100644 chat/src/components/MobileSettingsDialog.vue rename {src/chat/src/layout => chat/src}/components/PhoneIdentity.vue (75%) create mode 100644 chat/src/components/Settings/AccountManagement.vue create mode 100644 chat/src/components/Settings/DataManagement.vue create mode 100644 chat/src/components/Settings/MemberCenter.vue create mode 100644 chat/src/components/Settings/MemberPayment.vue create mode 100644 chat/src/components/Settings/NoticeDialog.vue create mode 100644 chat/src/components/Settings/UserAgreement.vue create mode 100644 chat/src/components/SettingsDialog.vue create mode 100644 chat/src/components/common/DropdownMenu/MenuItem.vue create mode 100644 chat/src/components/common/DropdownMenu/index.ts create mode 100644 chat/src/components/common/DropdownMenu/index.vue create mode 100644 chat/src/components/common/ImageViewer/GlobalImageViewer.vue create mode 100644 chat/src/components/common/ImageViewer/index.vue create mode 100644 chat/src/components/common/ImageViewer/useImageViewer.ts rename {src/chat => chat}/src/components/common/QRCode/index.vue (91%) rename {src/chat => chat}/src/components/common/SvgIcon/index.vue (94%) create mode 100644 chat/src/components/common/Watermark/index.vue rename {src/chat => chat}/src/hooks/useBasicLayout.ts (100%) create mode 100644 chat/src/hooks/useLanguage.ts create mode 100644 chat/src/hooks/useTheme.ts rename {src/chat => chat}/src/locales/en-US.json (99%) rename {src/chat => chat}/src/locales/index.ts (55%) rename {src/chat => chat}/src/locales/zh-CN.json (99%) rename {src/chat => chat}/src/locales/zh-TW.json (86%) create mode 100644 chat/src/main.ts create mode 100644 chat/src/plugins/imageViewer.ts create mode 100644 chat/src/services/wechatLogin.ts rename {src/chat => chat}/src/store/index.ts (100%) rename {src/chat => chat}/src/store/modules/app/helper.ts (76%) rename {src/chat => chat}/src/store/modules/app/index.ts (72%) rename {src/chat => chat}/src/store/modules/appStore/helper.ts (87%) rename {src/chat => chat}/src/store/modules/appStore/index.ts (100%) create mode 100644 chat/src/store/modules/auth/helper.ts create mode 100644 chat/src/store/modules/auth/index.ts rename {src/chat => chat}/src/store/modules/chat/helper.ts (64%) rename {src/chat => chat}/src/store/modules/chat/index.ts (54%) create mode 100644 chat/src/store/modules/global/helper.ts create mode 100644 chat/src/store/modules/global/index.ts create mode 100644 chat/src/store/modules/index.ts rename {src/chat => chat}/src/store/modules/prompt/helper.ts (100%) rename {src/chat => chat}/src/store/modules/prompt/index.ts (100%) rename {src/chat => chat}/src/store/modules/settings/helper.ts (100%) rename {src/chat => chat}/src/store/modules/settings/index.ts (100%) rename {src/chat => chat}/src/store/modules/users/helper.ts (100%) rename {src/chat => chat}/src/store/modules/users/index.ts (99%) create mode 100644 chat/src/styles/base.css rename {src/chat => chat}/src/styles/github-markdown.less (85%) create mode 100644 chat/src/styles/global.less rename {src/chat => chat}/src/styles/highlight.less (100%) create mode 100644 chat/src/styles/index.css rename {src/chat => chat}/src/styles/tailwind.css (100%) create mode 100644 chat/src/styles/themes/dark.css create mode 100644 chat/src/styles/themes/light.css create mode 100644 chat/src/types/clientjs.d.ts create mode 100644 chat/src/types/electron.d.ts create mode 100644 chat/src/types/global.d.ts create mode 100644 chat/src/types/html2pdf.d.ts create mode 100644 chat/src/types/markdown-it-link-attributes.d.ts create mode 100644 chat/src/types/pwa.d.ts create mode 100644 chat/src/types/window.d.ts create mode 100644 chat/src/types/xml2js.d.ts create mode 100644 chat/src/typings/chat.d.ts create mode 100644 chat/src/typings/env.d.ts create mode 100644 chat/src/typings/global.d.ts rename {src/chat => chat}/src/utils/crypto/index.ts (90%) create mode 100644 chat/src/utils/dialog.ts rename {src/chat => chat}/src/utils/format/index.ts (67%) rename {src/chat => chat}/src/utils/functions/date.ts (74%) rename {src/chat => chat}/src/utils/functions/debounce.ts (96%) rename {src/chat => chat}/src/utils/functions/index.ts (100%) rename {src/chat => chat}/src/utils/functions/throttle.ts (61%) rename {src/chat => chat}/src/utils/is/index.ts (97%) create mode 100644 chat/src/utils/logger.ts create mode 100644 chat/src/utils/message.ts create mode 100644 chat/src/utils/motion/index.ts rename {src/chat => chat}/src/utils/request/axios.ts (69%) create mode 100644 chat/src/utils/request/fetch.ts rename {src/chat => chat}/src/utils/request/index.ts (53%) create mode 100644 chat/src/utils/router.ts rename {src/chat => chat}/src/utils/storage/index.ts (100%) rename {src/chat => chat}/src/utils/storage/local.ts (92%) create mode 100644 chat/src/views/chat/chat.vue create mode 100644 chat/src/views/chat/chatBase.vue rename {src/chat => chat}/src/views/chat/components/AiBot/index.vue (52%) create mode 100644 chat/src/views/chat/components/AppList/index.vue rename {src/chat => chat}/src/views/chat/components/AppTips/index.vue (65%) create mode 100644 chat/src/views/chat/components/Footer/components/FilePreview.vue create mode 100644 chat/src/views/chat/components/Footer/index.vue create mode 100644 chat/src/views/chat/components/Header/index.vue rename {src/chat => chat}/src/views/chat/components/Message/Avatar.vue (54%) create mode 100644 chat/src/views/chat/components/Message/Mermaid/index.vue create mode 100644 chat/src/views/chat/components/Message/Text/index.vue create mode 100644 chat/src/views/chat/components/Message/index.vue create mode 100644 chat/src/views/chat/components/PresetHints/index.vue create mode 100644 chat/src/views/chat/components/Welcome/index.vue create mode 100644 chat/src/views/chat/components/sider/List.vue create mode 100644 chat/src/views/chat/components/sider/ListItem.vue create mode 100644 chat/src/views/chat/components/sider/Plugin.vue create mode 100644 chat/src/views/chat/components/sider/index.vue create mode 100644 chat/src/views/chat/hooks/useChat.ts create mode 100644 chat/src/views/chat/hooks/useScroll.ts create mode 100644 chat/tailwind.config.js rename {src/chat => chat}/tsconfig.json (91%) create mode 100644 chat/vite.config.ts create mode 100644 chat/vite/plugins/index.ts delete mode 100644 docs/CHANGELOG.md rename {src/service => service}/.dockerignore (100%) rename {src => service}/.editorconfig (87%) rename {src/service => service}/.env.docker (79%) rename {src/service => service}/.env.example (83%) rename {src/service => service}/.gitignore (96%) create mode 100644 service/.prettierrc create mode 100755 service/.vscode/extensions.json create mode 100755 service/.vscode/settings.json create mode 100644 service/Dockerfile create mode 100644 service/docker-compose.yml create mode 100644 service/nest-cli.json create mode 100644 service/package.json rename {src/service => service}/pm2.conf.json (100%) create mode 100644 service/pnpm-lock.yaml rename {src/service => service}/src/app.module.ts (67%) rename {src/service => service}/src/common/auth/adminAuth.guard.ts (100%) rename {src/service => service}/src/common/auth/jwt.strategy.ts (100%) rename {src/service => service}/src/common/auth/jwtAuth.guard.ts (92%) rename {src/service => service}/src/common/auth/superAuth.guard.ts (90%) rename {src/service => service}/src/common/constants/balance.constant.ts (100%) rename {src/service => service}/src/common/constants/errorMessage.constant.ts (100%) rename {src/service => service}/src/common/constants/midjourney.constant.ts (100%) rename {src/service => service}/src/common/constants/status.constant.ts (84%) rename {src/service => service}/src/common/constants/user.constant.ts (100%) rename {src/service => service}/src/common/constants/verification.constant.ts (100%) create mode 100644 service/src/common/decorators/rate-limit.decorator.ts create mode 100644 service/src/common/entity/baseEntity.ts create mode 100644 service/src/common/filters/allExceptions.filter.ts rename {src/service => service}/src/common/filters/typeOrmQueryFailed.filter.ts (100%) rename {src/service => service}/src/common/guards/roles/roles.guard.ts (67%) rename {src/service => service}/src/common/interceptors/abort.interceptor.ts (100%) rename {src/service => service}/src/common/interceptors/transform.interceptor.ts (78%) create mode 100644 service/src/common/logger/custom-logger.service.ts create mode 100644 service/src/common/middleware/fast-xml-middleware.ts rename {src/service => service}/src/common/middleware/xml.middleware.ts (100%) create mode 100644 service/src/common/result/index.ts rename {src/service => service}/src/common/swagger/index.ts (100%) rename {src/service => service}/src/common/utils/base.ts (99%) create mode 100644 service/src/common/utils/convertUrlToBase64.ts create mode 100644 service/src/common/utils/correctApiBaseUrl.ts rename {src/service => service}/src/common/utils/createOrderId.ts (100%) rename {src/service => service}/src/common/utils/createRandomCode.ts (100%) rename {src/service => service}/src/common/utils/createRandomInviteCode.ts (100%) rename {src/service => service}/src/common/utils/createRandomNonceStr.ts (100%) rename {src/service => service}/src/common/utils/createRandomUid.ts (100%) rename {src/service => service}/src/common/utils/date.ts (91%) create mode 100644 service/src/common/utils/doubaoSignature.ts rename {src/service => service}/src/common/utils/encrypt.ts (95%) rename {src/service => service}/src/common/utils/fromatUrl.ts (100%) rename {src/service => service}/src/common/utils/generateCrami.ts (54%) rename {src/service => service}/src/common/utils/getClientIp.ts (100%) create mode 100644 service/src/common/utils/getDiffArray.ts create mode 100644 service/src/common/utils/getRandomItem.ts rename {src/service => service}/src/common/utils/getRandomItemFromArray.ts (100%) rename {src/service => service}/src/common/utils/getTokenCount.ts (100%) rename {src/service => service}/src/common/utils/handleError.ts (80%) rename {src/service => service}/src/common/utils/hideString.ts (100%) rename {src/service => service}/src/common/utils/index.ts (87%) rename {src/service => service}/src/common/utils/maskCrami.ts (100%) create mode 100644 service/src/common/utils/maskEmail.ts rename {src/service => service}/src/common/utils/maskIpAddress.ts (100%) rename {src/service => service}/src/common/utils/removeSpecialCharacters.ts (100%) create mode 100644 service/src/common/utils/removeThinkTags.ts rename {src/service => service}/src/common/utils/tools.ts (76%) rename {src/service => service}/src/common/utils/utcformatTime.ts (100%) create mode 100644 service/src/main.ts create mode 100644 service/src/modules/aiTool/chat/chat.service.ts create mode 100644 service/src/modules/aiTool/search/netSearch.service.ts rename {src/service => service}/src/modules/app/app.controller.ts (82%) rename {src/service => service}/src/modules/app/app.entity.ts (68%) rename {src/service => service}/src/modules/app/app.module.ts (61%) create mode 100644 service/src/modules/app/app.service.ts rename {src/service => service}/src/modules/app/appCats.entity.ts (68%) create mode 100644 service/src/modules/app/dto/collectApp.dto.ts create mode 100644 service/src/modules/app/dto/createApp.dto.ts rename {src/service => service}/src/modules/app/dto/createCats.dto.ts (56%) rename {src/service => service}/src/modules/app/dto/custonApp.dto.ts (51%) rename {src/service => service}/src/modules/app/dto/deleteApp.dto.ts (100%) create mode 100644 service/src/modules/app/dto/deleteCats.dto.ts rename {src/service => service}/src/modules/app/dto/queryApp.dto.ts (73%) rename {src/service => service}/src/modules/app/dto/queryCats.dto.ts (58%) rename {src/service => service}/src/modules/app/dto/updateApp.dto.ts (61%) rename {src/service => service}/src/modules/app/dto/updateCats.dto.ts (62%) rename {src/service => service}/src/modules/app/userApps.entity.ts (83%) rename {src/service => service}/src/modules/auth/auth.controller.ts (74%) rename {src/service => service}/src/modules/auth/auth.module.ts (96%) rename {src/service => service}/src/modules/auth/auth.service.ts (53%) rename {src/service => service}/src/modules/auth/dto/adminLogin.dto.ts (94%) rename {src/service => service}/src/modules/auth/dto/authLogin.dto.ts (83%) rename {src/service => service}/src/modules/auth/dto/authRegister.dto.ts (100%) rename {src/service => service}/src/modules/auth/dto/loginByPhone.dt.ts (80%) rename {src/service => service}/src/modules/auth/dto/sendPhoneCode.dto.ts (83%) rename {src/service => service}/src/modules/auth/dto/updatePassByOther.dto.ts (100%) rename {src/service => service}/src/modules/auth/dto/updatePassword.dto.ts (58%) rename {src/service => service}/src/modules/auth/dto/userRegisterByPhone.dto.ts (91%) rename src/service/src/modules/autoreply/autoreply.controller.ts => service/src/modules/autoReply/autoReply.controller.ts (61%) rename src/service/src/modules/autoreply/autoreply.entity.ts => service/src/modules/autoReply/autoReply.entity.ts (100%) create mode 100644 service/src/modules/autoReply/autoReply.module.ts rename src/service/src/modules/autoreply/autoreply.service.ts => service/src/modules/autoReply/autoReply.service.ts (80%) rename {src/service/src/modules/autoreply => service/src/modules/autoReply}/dto/addAutoReply.dto.ts (100%) create mode 100644 service/src/modules/autoReply/dto/delBadWords.dto.ts create mode 100644 service/src/modules/autoReply/dto/queryAutoReply.dto.ts rename {src/service/src/modules/autoreply => service/src/modules/autoReply}/dto/updateAutoReply.dto.ts (100%) rename {src/service => service}/src/modules/badWords/badWords.controller.ts (94%) rename {src/service => service}/src/modules/badWords/badWords.entity.ts (100%) rename {src/service => service}/src/modules/badWords/badWords.module.ts (84%) rename {src/service => service}/src/modules/badWords/badWords.service.ts (68%) create mode 100644 service/src/modules/badWords/dto/addBadWords.dto.ts create mode 100644 service/src/modules/badWords/dto/delBadWords.dto.ts rename {src/service => service}/src/modules/badWords/dto/queryBadWords.dto.ts (84%) rename {src/service => service}/src/modules/badWords/dto/queryViolation.dto.ts (69%) create mode 100644 service/src/modules/badWords/dto/updateBadWords.dto.ts rename {src/service => service}/src/modules/badWords/violationLog.entity.ts (85%) create mode 100644 service/src/modules/chat/chat.controller.ts rename {src/service => service}/src/modules/chat/chat.module.ts (58%) create mode 100644 service/src/modules/chat/chat.service.ts rename {src/service => service}/src/modules/chat/dto/chatDraw.dto.ts (65%) rename {src/service => service}/src/modules/chat/dto/chatProcess.dto.ts (56%) rename {src/service => service}/src/modules/chat/helper.ts (90%) rename {src/service => service}/src/modules/chatGroup/chatGroup.controller.ts (94%) rename {src/service => service}/src/modules/chatGroup/chatGroup.entity.ts (100%) rename {src/service => service}/src/modules/chatGroup/chatGroup.module.ts (80%) rename {src/service => service}/src/modules/chatGroup/chatGroup.service.ts (56%) rename {src/service => service}/src/modules/chatGroup/dto/createGroup.dto.ts (100%) rename {src/service => service}/src/modules/chatGroup/dto/delGroup.dto.ts (82%) rename {src/service => service}/src/modules/chatGroup/dto/updateGroup.dto.ts (83%) rename {src/service => service}/src/modules/chatLog/chatLog.controller.ts (87%) rename {src/service => service}/src/modules/chatLog/chatLog.entity.ts (77%) rename {src/service => service}/src/modules/chatLog/chatLog.module.ts (84%) rename {src/service => service}/src/modules/chatLog/chatLog.service.ts (67%) create mode 100644 service/src/modules/chatLog/dto/chatList.dto.ts create mode 100644 service/src/modules/chatLog/dto/del.dto.ts create mode 100644 service/src/modules/chatLog/dto/delByGroup.dto.ts create mode 100644 service/src/modules/chatLog/dto/exportExcelChatlog.dto.ts rename {src/service => service}/src/modules/chatLog/dto/queryAllChatLog.dto.ts (59%) create mode 100644 service/src/modules/chatLog/dto/queryAllDrawLog.dto.ts rename {src/service => service}/src/modules/chatLog/dto/queryByAppId.dto.ts (64%) create mode 100644 service/src/modules/chatLog/dto/queryMyChatLog.dto.ts create mode 100644 service/src/modules/chatLog/dto/querySingleChat.dto.ts create mode 100644 service/src/modules/chatLog/dto/recDrawImg.dto.ts rename {src/service => service}/src/modules/crami/crami.controller.ts (99%) rename {src/service => service}/src/modules/crami/crami.entity.ts (62%) rename {src/service => service}/src/modules/crami/crami.module.ts (100%) rename {src/service => service}/src/modules/crami/crami.service.ts (74%) rename {src/service => service}/src/modules/crami/cramiPackage.entity.ts (82%) rename {src/service => service}/src/modules/crami/dto/batchDelCrami.dto.ts (80%) rename {src/service => service}/src/modules/crami/dto/createCrami.dto.ts (82%) create mode 100644 service/src/modules/crami/dto/createPackage.dto.ts create mode 100644 service/src/modules/crami/dto/deletePackage.dto.ts rename {src/service => service}/src/modules/crami/dto/queryAllCrami.dto.ts (57%) rename {src/service => service}/src/modules/crami/dto/queryAllPackage.dto.ts (52%) rename {src/service => service}/src/modules/crami/dto/updatePackage.dto.ts (63%) create mode 100644 service/src/modules/crami/dto/useCrami.dto.ts create mode 100644 service/src/modules/database/database.module.ts rename {src/service => service}/src/modules/database/database.service.ts (70%) create mode 100644 service/src/modules/database/initDatabase.ts rename {src/service => service}/src/modules/globalConfig/config.entity.ts (97%) rename {src/service => service}/src/modules/globalConfig/dto/queryConfig.dto.ts (53%) rename {src/service => service}/src/modules/globalConfig/dto/setConfig.dto.ts (100%) rename {src/service => service}/src/modules/globalConfig/dto/setConfigCustom.dto.ts (100%) rename {src/service => service}/src/modules/globalConfig/globalConfig.controller.ts (92%) rename {src/service => service}/src/modules/globalConfig/globalConfig.module.ts (100%) rename {src/service => service}/src/modules/globalConfig/globalConfig.service.ts (58%) rename {src/service => service}/src/modules/mailer/mailer.service.ts (97%) rename {src/service => service}/src/modules/models/dto/queryModel.dto.ts (100%) rename {src/service => service}/src/modules/models/dto/queryModelType.dto.ts (75%) rename {src/service => service}/src/modules/models/dto/setModel.dto.ts (100%) create mode 100644 service/src/modules/models/dto/setModelType.dto.ts rename {src/service => service}/src/modules/models/models.controller.ts (72%) rename {src/service => service}/src/modules/models/models.entity.ts (57%) rename {src/service => service}/src/modules/models/models.module.ts (88%) rename {src/service => service}/src/modules/models/models.service.ts (67%) create mode 100644 service/src/modules/official/dto/changeOpenid.dto.ts create mode 100644 service/src/modules/official/dto/createMenu.dto.ts create mode 100644 service/src/modules/official/dto/extractOpenids.dto.ts create mode 100644 service/src/modules/official/dto/getQrCode.dto.ts create mode 100644 service/src/modules/official/dto/wechatUserList.dto.ts create mode 100644 service/src/modules/official/official.controller.ts rename {src/service => service}/src/modules/official/official.module.ts (100%) create mode 100644 service/src/modules/official/official.service.ts rename {src/service => service}/src/modules/order/dto/buy.dto.ts (84%) rename {src/service => service}/src/modules/order/dto/queryAllOrder.dto.ts (74%) create mode 100644 service/src/modules/order/dto/queryByOrder.dto.ts rename {src/service => service}/src/modules/order/order.controller.ts (89%) rename {src/service => service}/src/modules/order/order.entity.ts (70%) rename {src/service => service}/src/modules/order/order.module.ts (92%) rename {src/service => service}/src/modules/order/order.service.ts (72%) create mode 100644 service/src/modules/pay/dto/pay.dto.ts rename {src/service => service}/src/modules/pay/pay.controller.ts (64%) rename {src/service => service}/src/modules/pay/pay.module.ts (100%) rename {src/service => service}/src/modules/pay/pay.service.ts (78%) rename {src/service => service}/src/modules/plugin/plugin.controller.ts (98%) rename {src/service => service}/src/modules/plugin/plugin.entity.ts (100%) rename {src/service => service}/src/modules/plugin/plugin.module.ts (100%) rename {src/service => service}/src/modules/plugin/plugin.service.ts (85%) create mode 100644 service/src/modules/rateLimit/rate-limit.middleware.ts create mode 100644 service/src/modules/rateLimit/rate-limit.module.ts create mode 100644 service/src/modules/rateLimit/rate-limit.service.ts create mode 100644 service/src/modules/redisCache/dto/redis.dto.ts rename {src/service => service}/src/modules/redisCache/redisCache.module.ts (88%) create mode 100644 service/src/modules/redisCache/redisCache.service.ts create mode 100644 service/src/modules/share/share.controller.ts create mode 100644 service/src/modules/share/share.entity.ts create mode 100644 service/src/modules/share/share.module.ts create mode 100644 service/src/modules/share/share.service.ts rename {src/service => service}/src/modules/signin/signIn.entity.ts (70%) rename {src/service => service}/src/modules/signin/signin.controller.ts (100%) rename {src/service => service}/src/modules/signin/signin.module.ts (92%) rename {src/service => service}/src/modules/signin/signin.service.ts (87%) create mode 100644 service/src/modules/spa/spa.controller.ts create mode 100644 service/src/modules/spa/spa.module.ts create mode 100644 service/src/modules/statistic/dto/queryStatisticDto.dto.ts rename {src/service => service}/src/modules/statistic/statistic.controller.ts (100%) rename {src/service => service}/src/modules/statistic/statistic.module.ts (80%) rename {src/service => service}/src/modules/statistic/statistic.service.ts (80%) rename {src/service => service}/src/modules/task/task.module.ts (54%) rename {src/service => service}/src/modules/task/task.service.ts (53%) create mode 100644 service/src/modules/upload/upload.controller.ts rename {src/service => service}/src/modules/upload/upload.module.ts (75%) rename {src/service => service}/src/modules/upload/upload.service.ts (58%) create mode 100644 service/src/modules/user/dto/confirmMigration.dto.ts rename {src/service => service}/src/modules/user/dto/queryAllUser.dto.ts (57%) rename {src/service => service}/src/modules/user/dto/queryInviteRecord.dto.ts (68%) rename {src/service => service}/src/modules/user/dto/queryOne.dto.ts (57%) rename {src/service => service}/src/modules/user/dto/resetUserPass.dto.ts (59%) create mode 100644 service/src/modules/user/dto/retrieve.dto.ts create mode 100644 service/src/modules/user/dto/updateUser.dto.ts create mode 100644 service/src/modules/user/dto/updateUserStatus.dto.ts rename {src/service => service}/src/modules/user/dto/userRecharge.dto.ts (56%) rename {src/service => service}/src/modules/user/user.controller.ts (83%) rename {src/service => service}/src/modules/user/user.entity.ts (96%) rename {src/service => service}/src/modules/user/user.module.ts (87%) rename {src/service => service}/src/modules/user/user.service.ts (69%) rename {src/service => service}/src/modules/userBalance/accountLog.entity.ts (86%) rename {src/service => service}/src/modules/userBalance/balance.entity.ts (81%) rename {src/service => service}/src/modules/userBalance/dto/test.dto.ts (56%) rename {src/service => service}/src/modules/userBalance/fingerprint.entity.ts (72%) rename {src/service => service}/src/modules/userBalance/userBalance.controller.ts (100%) rename {src/service => service}/src/modules/userBalance/userBalance.entity.ts (91%) rename {src/service => service}/src/modules/userBalance/userBalance.module.ts (71%) rename {src/service => service}/src/modules/userBalance/userBalance.service.ts (80%) rename {src/service => service}/src/modules/verification/dto/verifyCode.dto.ts (100%) create mode 100644 service/src/modules/verification/verification.entity.ts rename {src/service => service}/src/modules/verification/verification.module.ts (67%) rename {src/service => service}/src/modules/verification/verification.service.ts (77%) rename {src/service => service}/src/types/express.d.ts (90%) rename {src/service => service}/tsconfig.build.json (100%) rename {src/service => service}/tsconfig.json (67%) rename {src/service => service}/tsconfig.paths.json (100%) delete mode 100644 src/.eslintrc.json delete mode 100644 src/.gitignore delete mode 100644 src/.prettierrc delete mode 100644 src/LICENSE delete mode 100755 src/admin/.lintstagedrc delete mode 100644 src/admin/.node-version delete mode 100755 src/admin/.vscode/settings.json delete mode 100755 src/admin/package.json delete mode 100755 src/admin/plopfile.js delete mode 100644 src/admin/scripts/generate.icons.ts delete mode 100755 src/admin/src/App.vue delete mode 100644 src/admin/src/api/modules/autoReply.ts delete mode 100644 src/admin/src/api/modules/chat.ts delete mode 100755 src/admin/src/components/Auth/index.vue delete mode 100755 src/admin/src/components/AuthAll/index.vue delete mode 100755 src/admin/src/components/FileUpload/index.vue delete mode 100755 src/admin/src/components/FixedActionBar/index.vue delete mode 100644 src/admin/src/components/IconifyIcon/index.vue delete mode 100755 src/admin/src/components/ImagePreview/index.vue delete mode 100755 src/admin/src/components/ImageUpload/index.vue delete mode 100755 src/admin/src/components/ImagesUpload/index.vue delete mode 100755 src/admin/src/components/NotAllowed/index.vue delete mode 100755 src/admin/src/components/PageMain/index.vue delete mode 100755 src/admin/src/components/PcasCascader/index.vue delete mode 100755 src/admin/src/components/PcasCascader/pcas-code.json delete mode 100755 src/admin/src/components/SearchBar/index.vue delete mode 100755 src/admin/src/components/SvgIcon/index.vue delete mode 100755 src/admin/src/components/SystemInfo/index.vue delete mode 100755 src/admin/src/components/Trend/index.vue delete mode 100644 src/admin/src/iconify/data.json delete mode 100755 src/admin/src/iconify/index.json delete mode 100644 src/admin/src/layouts/components/BackTop/index.vue delete mode 100644 src/admin/src/layouts/components/Breadcrumb/index.vue delete mode 100644 src/admin/src/layouts/components/Breadcrumb/item.vue delete mode 100755 src/admin/src/layouts/components/Copyright/index.vue delete mode 100755 src/admin/src/layouts/components/Header/index.vue delete mode 100755 src/admin/src/layouts/components/Logo/index.vue delete mode 100755 src/admin/src/layouts/components/MainSidebar/index.vue delete mode 100644 src/admin/src/layouts/components/Menu/index.vue delete mode 100644 src/admin/src/layouts/components/Menu/sub.vue delete mode 100644 src/admin/src/layouts/components/Menu/types.ts delete mode 100755 src/admin/src/layouts/components/Search/index.vue delete mode 100755 src/admin/src/layouts/components/SubSidebar/index.vue delete mode 100644 src/admin/src/layouts/components/Topbar/Tabbar/index.vue delete mode 100644 src/admin/src/layouts/components/Topbar/Toolbar/Breadcrumb/index.vue delete mode 100644 src/admin/src/layouts/components/Topbar/Toolbar/ColorScheme/index.vue delete mode 100644 src/admin/src/layouts/components/Topbar/Toolbar/Fullscreen/index.vue delete mode 100644 src/admin/src/layouts/components/Topbar/Toolbar/NavSearch/index.vue delete mode 100755 src/admin/src/layouts/components/Topbar/Toolbar/index.vue delete mode 100644 src/admin/src/layouts/components/Topbar/Toolbar/leftSide.vue delete mode 100755 src/admin/src/layouts/components/Topbar/index.vue delete mode 100755 src/admin/src/layouts/components/views/link.vue delete mode 100755 src/admin/src/layouts/index.vue delete mode 100644 src/admin/src/layouts/ui-kit/HButton.vue delete mode 100644 src/admin/src/layouts/ui-kit/HCheckList.vue delete mode 100644 src/admin/src/layouts/ui-kit/HDialog.vue delete mode 100644 src/admin/src/layouts/ui-kit/HDropdown.vue delete mode 100644 src/admin/src/layouts/ui-kit/HDropdownMenu.vue delete mode 100644 src/admin/src/layouts/ui-kit/HInput.vue delete mode 100644 src/admin/src/layouts/ui-kit/HKbd.vue delete mode 100644 src/admin/src/layouts/ui-kit/HSelect.vue delete mode 100644 src/admin/src/layouts/ui-kit/HSlideover.vue delete mode 100644 src/admin/src/layouts/ui-kit/HTabList.vue delete mode 100644 src/admin/src/layouts/ui-kit/HToggle.vue delete mode 100644 src/admin/src/router/modules/app.menu.ts delete mode 100644 src/admin/src/router/modules/projectaddress.menu.ts delete mode 100755 src/admin/src/store/index.ts delete mode 100755 src/admin/src/store/modules/settings.ts delete mode 100755 src/admin/src/types/shims.d.ts delete mode 100644 src/admin/src/ui-provider/index.ts delete mode 100755 src/admin/src/utils/composables/useAuth.ts delete mode 100755 src/admin/src/utils/composables/useMenu.ts delete mode 100755 src/admin/src/utils/composables/useViewTransition.ts delete mode 100755 src/admin/src/utils/dayjs.ts delete mode 100755 src/admin/src/utils/eventBus.ts delete mode 100755 src/admin/src/utils/index.ts delete mode 100755 src/admin/src/utils/system.copyright.ts delete mode 100644 src/admin/src/utils/utcformatTime.ts delete mode 100755 src/admin/src/views/[...all].vue delete mode 100644 src/admin/src/views/ai/github-redirect.vue delete mode 100644 src/admin/src/views/app/application.vue delete mode 100644 src/admin/src/views/app/classify.vue delete mode 100644 src/admin/src/views/app/plugin.vue delete mode 100644 src/admin/src/views/app/visible.vue delete mode 100644 src/admin/src/views/chat/chat.vue delete mode 100644 src/admin/src/views/chat/draw.vue delete mode 100755 src/admin/src/views/index.vue delete mode 100755 src/admin/src/views/login.vue delete mode 100644 src/admin/src/views/models/interface.vue delete mode 100644 src/admin/src/views/models/key.vue delete mode 100644 src/admin/src/views/package/package.vue delete mode 100644 src/admin/src/views/package/points.vue delete mode 100644 src/admin/src/views/pay/epay.vue delete mode 100644 src/admin/src/views/pay/hupijiao.vue delete mode 100644 src/admin/src/views/pay/ltzf.vue delete mode 100644 src/admin/src/views/pay/wechat.vue delete mode 100644 src/admin/src/views/personal/edit.password.vue delete mode 100644 src/admin/src/views/sensitive/custom.vue delete mode 100644 src/admin/src/views/storage/chevereto.vue delete mode 100644 src/admin/src/views/storage/localStorage.vue delete mode 100644 src/admin/src/views/system/baseConfiguration.vue delete mode 100644 src/admin/src/views/system/notice.vue delete mode 100644 src/admin/src/views/users/userAgreement.vue delete mode 100644 src/admin/stylelint.config.js delete mode 100755 src/admin/tsconfig.node.json delete mode 100755 src/build.sh delete mode 100644 src/chat/.npmrc delete mode 100644 src/chat/package.json delete mode 100644 src/chat/resources/background.png delete mode 100644 src/chat/resources/background@2x.png delete mode 100644 src/chat/resources/icon.icns delete mode 100644 src/chat/resources/icon.ico delete mode 100644 src/chat/resources/icon.png delete mode 100644 src/chat/src/App.vue delete mode 100644 src/chat/src/api/config.ts delete mode 100644 src/chat/src/api/index.ts delete mode 100644 src/chat/src/api/user.ts delete mode 100644 src/chat/src/assets/defaultPdfPreset.json delete mode 100644 src/chat/src/assets/favicon.ico delete mode 100644 src/chat/src/assets/icons/draw.svg delete mode 100644 src/chat/src/assets/icons/gift.png delete mode 100644 src/chat/src/assets/icons/zoom.svg delete mode 100644 src/chat/src/assets/images/empty.png delete mode 100644 src/chat/src/assets/images/preferential.png delete mode 100644 src/chat/src/assets/img-bg.png delete mode 100644 src/chat/src/assets/login-banner.png delete mode 100644 src/chat/src/assets/qianbao.png delete mode 100644 src/chat/src/assets/recommend.json delete mode 100644 src/chat/src/components/common/CanvasMask/index.vue delete mode 100644 src/chat/src/components/common/GridManager/index.vue delete mode 100644 src/chat/src/components/common/HoverButton/Button.vue delete mode 100644 src/chat/src/components/common/HoverButton/index.vue delete mode 100644 src/chat/src/components/common/ImageEditorCanvas/index.vue delete mode 100644 src/chat/src/components/common/NaiveProvider/index.vue delete mode 100644 src/chat/src/components/common/Setting/Advanced.vue delete mode 100644 src/chat/src/components/common/Setting/General.vue delete mode 100644 src/chat/src/components/common/Setting/Personal.vue delete mode 100644 src/chat/src/components/common/Setting/index.vue delete mode 100644 src/chat/src/components/common/UserAvatar/index.vue delete mode 100644 src/chat/src/components/common/index.ts delete mode 100644 src/chat/src/constants/index.ts delete mode 100644 src/chat/src/hooks/useIconRender.ts delete mode 100644 src/chat/src/hooks/useLanguage.ts delete mode 100644 src/chat/src/hooks/useTheme.ts delete mode 100644 src/chat/src/icons/403.vue delete mode 100644 src/chat/src/icons/404.svg delete mode 100644 src/chat/src/icons/500.vue delete mode 100644 src/chat/src/layout/components/AppDialog.vue delete mode 100644 src/chat/src/layout/components/BindWx.vue delete mode 100644 src/chat/src/layout/components/GoodsDialog.vue delete mode 100644 src/chat/src/layout/components/Login.vue delete mode 100644 src/chat/src/layout/components/Login/Email.vue delete mode 100644 src/chat/src/layout/components/Login/Wechat.vue delete mode 100644 src/chat/src/layout/components/NoticeDialog.vue delete mode 100644 src/chat/src/layout/components/PayDialog.vue delete mode 100644 src/chat/src/layout/components/Settings/NoticeDialog.vue delete mode 100644 src/chat/src/layout/components/Settings/SignInDialog.vue delete mode 100644 src/chat/src/layout/components/SettingsDialog.vue delete mode 100644 src/chat/src/layout/components/SignInDialog.vue delete mode 100644 src/chat/src/layout/components/UserAgreementDialog.vue delete mode 100644 src/chat/src/layout/index.ts delete mode 100644 src/chat/src/layout/index.vue delete mode 100644 src/chat/src/main.ts delete mode 100644 src/chat/src/plugins/assets.ts delete mode 100644 src/chat/src/plugins/index.ts delete mode 100644 src/chat/src/plugins/scrollbarStyle.ts delete mode 100644 src/chat/src/router/index.ts delete mode 100644 src/chat/src/router/permission.ts delete mode 100644 src/chat/src/store/modules/auth/helper.ts delete mode 100644 src/chat/src/store/modules/auth/index.ts delete mode 100644 src/chat/src/store/modules/global/helper.ts delete mode 100644 src/chat/src/store/modules/global/index.ts delete mode 100644 src/chat/src/store/modules/index.ts delete mode 100644 src/chat/src/styles/global.less delete mode 100644 src/chat/src/typings/chat.d.ts delete mode 100644 src/chat/src/typings/env.d.ts delete mode 100644 src/chat/src/typings/global.d.ts delete mode 100644 src/chat/src/utils/motion/index.ts delete mode 100644 src/chat/src/views/chat/chat.vue delete mode 100644 src/chat/src/views/chat/chatBase.vue delete mode 100644 src/chat/src/views/chat/components/Footer/index.vue delete mode 100644 src/chat/src/views/chat/components/Header/index.vue delete mode 100644 src/chat/src/views/chat/components/Message/AiPpt.vue delete mode 100644 src/chat/src/views/chat/components/Message/Image.vue delete mode 100644 src/chat/src/views/chat/components/Message/MindMap/FullScreenModal.vue delete mode 100644 src/chat/src/views/chat/components/Message/MindMap/index.vue delete mode 100644 src/chat/src/views/chat/components/Message/Music.vue delete mode 100644 src/chat/src/views/chat/components/Message/Text/htmlModal.vue delete mode 100644 src/chat/src/views/chat/components/Message/Text/index.vue delete mode 100644 src/chat/src/views/chat/components/Message/Video.vue delete mode 100644 src/chat/src/views/chat/components/Message/index.vue delete mode 100644 src/chat/src/views/chat/components/Message/style.less delete mode 100644 src/chat/src/views/chat/components/index.ts delete mode 100644 src/chat/src/views/chat/components/sider/Footer.vue delete mode 100644 src/chat/src/views/chat/components/sider/List.vue delete mode 100644 src/chat/src/views/chat/components/sider/ListItem.vue delete mode 100644 src/chat/src/views/chat/components/sider/Plugin.vue delete mode 100644 src/chat/src/views/chat/components/sider/index.vue delete mode 100644 src/chat/src/views/chat/hooks/useChat.ts delete mode 100644 src/chat/src/views/chat/hooks/useCopyCode.ts delete mode 100644 src/chat/src/views/chat/hooks/useScroll.ts delete mode 100644 src/chat/src/views/chat/role.vue delete mode 100644 src/chat/src/views/exception/404/index.vue delete mode 100644 src/chat/src/views/exception/500/index.vue delete mode 100644 src/chat/src/views/home/index.vue delete mode 100644 src/chat/src/views/userCenter/components/detail.vue delete mode 100644 src/chat/src/views/userCenter/components/password.vue delete mode 100644 src/chat/src/views/userCenter/components/wallet.vue delete mode 100644 src/chat/src/views/userCenter/index.vue delete mode 100644 src/chat/tailwind.config.js delete mode 100644 src/chat/vite.config.ts delete mode 100644 src/package.json delete mode 100644 src/pnpm-lock.yaml delete mode 100644 src/pnpm-workspace.yaml delete mode 100644 src/service/Dockerfile delete mode 100755 src/service/deploy.sh delete mode 100644 src/service/docker-compose.yml delete mode 100644 src/service/encrypt.js delete mode 100644 src/service/nest-cli.json delete mode 100644 src/service/package.json delete mode 100644 src/service/src/common/entity/baseEntity.ts delete mode 100644 src/service/src/common/filters/allExceptions.filter.ts delete mode 100644 src/service/src/common/logger/custom-logger.service.ts delete mode 100644 src/service/src/common/result/index.ts delete mode 100644 src/service/src/common/utils/getDiffArray.ts delete mode 100644 src/service/src/common/utils/getRandomItem.ts delete mode 100644 src/service/src/common/utils/maskEmail.ts delete mode 100644 src/service/src/main.ts delete mode 100644 src/service/src/modules/ai/aiPPT.ts delete mode 100644 src/service/src/modules/ai/cogVideo.service.ts delete mode 100644 src/service/src/modules/ai/fluxDraw.service.ts delete mode 100644 src/service/src/modules/ai/lumaVideo.service.ts delete mode 100644 src/service/src/modules/ai/midjourneyDraw.service.ts delete mode 100644 src/service/src/modules/ai/netSearch.service.ts delete mode 100644 src/service/src/modules/ai/openaiChat.service.ts delete mode 100644 src/service/src/modules/ai/openaiDraw.service.ts delete mode 100644 src/service/src/modules/ai/stableDiffusion.service.ts delete mode 100644 src/service/src/modules/ai/suno.service.ts delete mode 100644 src/service/src/modules/app/app.service.ts delete mode 100644 src/service/src/modules/app/dto/collectApp.dto.ts delete mode 100644 src/service/src/modules/app/dto/createApp.dto.ts delete mode 100644 src/service/src/modules/app/dto/deleteCats.dto.ts delete mode 100644 src/service/src/modules/autoreply/autoreply.module.ts delete mode 100644 src/service/src/modules/autoreply/dto/delBadWords.dto.ts delete mode 100644 src/service/src/modules/autoreply/dto/queryAutoReply.dto.ts delete mode 100644 src/service/src/modules/badWords/dto/addBadWords.dto.ts delete mode 100644 src/service/src/modules/badWords/dto/delBadWords.dto.ts delete mode 100644 src/service/src/modules/badWords/dto/updateBadWords.dto.ts delete mode 100644 src/service/src/modules/chat/chat.controller.ts delete mode 100644 src/service/src/modules/chat/chat.service.ts delete mode 100644 src/service/src/modules/chatLog/dto/chatList.dto.ts delete mode 100644 src/service/src/modules/chatLog/dto/del.dto.ts delete mode 100644 src/service/src/modules/chatLog/dto/delByGroup.dto.ts delete mode 100644 src/service/src/modules/chatLog/dto/exportExcelChatlog.dto.ts delete mode 100644 src/service/src/modules/chatLog/dto/queryAllDrawLog.dto.ts delete mode 100644 src/service/src/modules/chatLog/dto/queryMyChatLog.dto.ts delete mode 100644 src/service/src/modules/chatLog/dto/recDrawImg.dto.ts delete mode 100644 src/service/src/modules/crami/dto/createPackage.dto.ts delete mode 100644 src/service/src/modules/crami/dto/deletePackage.dto.ts delete mode 100644 src/service/src/modules/crami/dto/useCrami.dto.ts delete mode 100644 src/service/src/modules/database/database.module.ts delete mode 100644 src/service/src/modules/database/initDatabase.ts delete mode 100644 src/service/src/modules/models/dto/setModelType.dto.ts delete mode 100644 src/service/src/modules/official/dto/getQrCode.dto.ts delete mode 100644 src/service/src/modules/official/official.controller.ts delete mode 100644 src/service/src/modules/official/official.service.ts delete mode 100644 src/service/src/modules/order/dto/queryByOrder.dto.ts delete mode 100644 src/service/src/modules/pay/dto/pay.dto.ts delete mode 100644 src/service/src/modules/redisCache/dto/redis.dto.ts delete mode 100644 src/service/src/modules/redisCache/redisCache.controller.ts delete mode 100644 src/service/src/modules/redisCache/redisCache.service.ts delete mode 100644 src/service/src/modules/statistic/dto/queryStatisticDto.dto.ts delete mode 100644 src/service/src/modules/upload/upload.controller.ts delete mode 100644 src/service/src/modules/user/dto/retrieve.dto.ts delete mode 100644 src/service/src/modules/user/dto/updateUser.dto.ts delete mode 100644 src/service/src/modules/user/dto/updateUserStatus.dto.ts delete mode 100644 src/service/src/modules/verification/verifycation.entity.ts diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml deleted file mode 100644 index 9f8d6a0..0000000 --- a/.github/workflows/docker-image.yml +++ /dev/null @@ -1,56 +0,0 @@ -name: Publish Docker image - -on: - workflow_dispatch: - release: - types: [published] - repository_dispatch: - types: [trigger-docker-image] - -jobs: - push_to_registry: - name: Push Docker image to Docker Hub - runs-on: ubuntu-latest - steps: - - name: Check out the repo - uses: actions/checkout@v3 - - - name: Log in to Docker Hub - uses: docker/login-action@v2 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Set timezone to Shanghai - run: sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" | sudo tee /etc/timezone - - - name: Generate tag with Chinese date format - id: date - run: echo "::set-output name=date::$(date +'%y%m%d')" - - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@v4 - with: - images: buqian/99ai - tags: | - type=raw,value=latest - type=raw,value=${{ steps.date.outputs.date }} - type=ref,event=tag - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 - - - name: Build and push Docker image - uses: docker/build-push-action@v4 - with: - context: . - platforms: linux/amd64,linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - cache-from: type=gha - cache-to: type=gha,mode=max diff --git a/.github/workflows/electron-build.yml b/.github/workflows/electron-build.yml new file mode 100644 index 0000000..c55301a --- /dev/null +++ b/.github/workflows/electron-build.yml @@ -0,0 +1,129 @@ +name: Build Electron App + +on: + # push: + # branches: [ main ] + push: + tags: + - "v*" + # pull_request: + # branches: [ main ] + workflow_dispatch: + +jobs: + build-mac: + runs-on: macos-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - name: Setup pnpm cache + uses: actions/cache@v4 + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: | + cd chat + pnpm install + + - name: Build for Mac + env: + VITE_GLOB_API_URL: https://asst.lightai.cloud/api + run: | + cd chat + pnpm run electron:mac-universal + + - name: Upload Mac artifacts + uses: actions/upload-artifact@v4 + with: + name: mac-builds + path: chat/release/*.dmg + + build-windows: + runs-on: windows-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: 22 + + - name: Install pnpm + uses: pnpm/action-setup@v2 + with: + version: 8 + run_install: false + + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + + - name: Setup pnpm cache + uses: actions/cache@v4 + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + + - name: Install dependencies + run: | + cd chat + pnpm install + + - name: Build for Windows x64 + env: + VITE_GLOB_API_URL: https://asst.lightai.cloud/api + run: | + cd chat + pnpm run electron:win-x64 + + - name: Upload Windows artifacts + uses: actions/upload-artifact@v4 + with: + name: windows-builds + path: | + chat/release/*.exe + chat/release/*.zip + + create-release: + needs: [build-mac, build-windows] + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Create Release + uses: softprops/action-gh-release@v1 + with: + files: | + artifacts/mac-builds/* + artifacts/windows-builds/* + draft: false + prerelease: false diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 6245d75..0000000 --- a/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -node_modules -logs -.env -/public/file -.DS_Store -data -sql \ No newline at end of file diff --git a/src/.vscode/extensions.json b/.vscode/extensions.json similarity index 100% rename from src/.vscode/extensions.json rename to .vscode/extensions.json diff --git a/.vscode/settings.json b/.vscode/settings.json index 87f7b8a..b463a88 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,110 @@ { - "cSpell.words": [ - "Luma" - ] -} \ No newline at end of file + "prettier.enable": true, + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.organizeImports": "explicit" + }, + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact", + "vue", + "html", + "json", + "jsonc", + "json5", + "yaml", + "yml", + "markdown" + ], + "cSpell.words": [ + "aiweb", + "antfu", + "axios", + "Baichuan", + "bumpp", + "Chatbox", + "chatglm", + "chatgpt", + "chatlog", + "chatweb", + "chenzhaoyu", + "chevereto", + "cogvideox", + "commitlint", + "cref", + "dall", + "dalle", + "davinci", + "deepsearch", + "deepseek", + "dockerhub", + "duckduckgo", + "EMAILCODE", + "errmsg", + "esno", + "flowith", + "GPTAPI", + "gpts", + "highlightjs", + "hljs", + "hunyuan", + "iconify", + "ISDEV", + "katex", + "katexmath", + "langchain", + "lightai", + "linkify", + "logprobs", + "longcontext", + "luma", + "mapi", + "Markmap", + "mdhljs", + "mediumtext", + "micromessenger", + "mila", + "Mindmap", + "MODELSMAPLIST", + "MODELTYPELIST", + "modelvalue", + "newconfig", + "niji", + "Nmessage", + "nodata", + "OPENAI", + "pinia", + "Popconfirm", + "PPTCREATE", + "projectaddress", + "qwen", + "rushstack", + "sdxl", + "seededit", + "seedream", + "Sider", + "sref", + "suno", + "tailwindcss", + "Tavily", + "traptitech", + "tsup", + "Typecheck", + "typeorm", + "unplugin", + "usercenter", + "vastxie", + "VITE", + "vueuse", + "wechat" + ], + "vue.codeActions.enabled": false, + "volar.experimental.tsconfigPaths": { + "./chat": ["./src/chat/tsconfig.json"], + "./admin": ["./src/admin/tsconfig.json"], + "./service": ["./src/service/tsconfig.json"] + } +} diff --git a/AIWebQuickDeploy/.env.docker b/AIWebQuickDeploy/.env.docker index 39c23bd..f1fa6a3 100644 --- a/AIWebQuickDeploy/.env.docker +++ b/AIWebQuickDeploy/.env.docker @@ -1,12 +1,12 @@ # server base PORT=9520 +# mysql DB_HOST=mysql DB_PORT=3306 DB_USER=root DB_PASS=123456 DB_DATABASE=chatgpt -DB_SYNC=true # Redis REDIS_PORT=6379 @@ -16,12 +16,15 @@ REDIS_USER= REDIS_DB=0 # 是否测试环境 -ISDEV=FALSE +ISDEV=false # 自定义微信URL weChatOpenUrl=https://open.weixin.qq.com weChatApiUrl=https://api.weixin.qq.com +weChatApiUrlToken=https://api.weixin.qq.com/cgi-bin/token weChatMpUrl=https://mp.weixin.qq.com # 自定义后台路径 ADMIN_SERVE_ROOT=/admin + +# 机器码及授权码 diff --git a/AIWebQuickDeploy/.env.example b/AIWebQuickDeploy/.env.example index 062490f..e474181 100644 --- a/AIWebQuickDeploy/.env.example +++ b/AIWebQuickDeploy/.env.example @@ -7,7 +7,6 @@ DB_PORT=3306 DB_USER=root DB_PASS= DB_DATABASE=chatgpt -DB_SYNC=true # Redis REDIS_PORT=6379 @@ -22,7 +21,10 @@ ISDEV=false # 自定义微信URL weChatOpenUrl=https://open.weixin.qq.com weChatApiUrl=https://api.weixin.qq.com +weChatApiUrlToken=https://api.weixin.qq.com/cgi-bin/token weChatMpUrl=https://mp.weixin.qq.com # 自定义后台路径 ADMIN_SERVE_ROOT=/admin + +# 机器码及授权码 diff --git a/AIWebQuickDeploy/Dockerfile b/AIWebQuickDeploy/Dockerfile index 13de9d6..142fd33 100644 --- a/AIWebQuickDeploy/Dockerfile +++ b/AIWebQuickDeploy/Dockerfile @@ -1,35 +1,21 @@ -# 编译阶段 -FROM node:20.14.0-alpine AS build +# 使用官方Node.js的基础镜像 +FROM node:latest -WORKDIR /app +# 设置时区为上海 +ENV TZ="Asia/Shanghai" -COPY package*.json ./ +# 设置工作目录 +WORKDIR /usr/src/app -# 设置环境变量来忽略一些警告 -ENV NPM_CONFIG_LOGLEVEL=error -ENV NODE_OPTIONS=--max-old-space-size=4096 +# 安装pnpm +RUN npm install -g npm pm2 pnpm -# 合并RUN命令,更新依赖,设置镜像源,安装依赖,然后清理 -RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \ - npm config set registry https://registry.npmmirror.com && \ - apk add --no-cache --virtual .build-deps git && \ - npm install -g npm@latest && \ - npm install --production --no-optional --legacy-peer-deps && \ - npm cache clean --force && \ - apk del .build-deps && \ - rm -rf /var/cache/apk/* /tmp/* - -# 运行阶段 -FROM node:20.14.0-alpine AS runner - -ENV TZ="Asia/Shanghai" \ - NODE_ENV=production - -WORKDIR /app - -COPY --from=build /app/node_modules ./node_modules -COPY . . +# 复制package.json以利用Docker缓存机制 +COPY package.json ./ +RUN pnpm install +# 暴露应用端口 EXPOSE 9520 -CMD ["node", "--max-old-space-size=4096", "./dist/main.js"] +# 启动应用 +CMD ["pm2-runtime", "start", "pm2.conf.json"] diff --git a/AIWebQuickDeploy/dist/app.module.js b/AIWebQuickDeploy/dist/app.module.js deleted file mode 100644 index a13c269..0000000 --- a/AIWebQuickDeploy/dist/app.module.js +++ /dev/null @@ -1,96 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppModule = void 0; -const abort_interceptor_1 = require("./common/interceptors/abort.interceptor"); -const custom_logger_service_1 = require("./common/logger/custom-logger.service"); -const common_1 = require("@nestjs/common"); -const core_1 = require("@nestjs/core"); -const serve_static_1 = require("@nestjs/serve-static"); -const fetch = require("isomorphic-fetch"); -const path_1 = require("path"); -const app_module_1 = require("./modules/app/app.module"); -const auth_module_1 = require("./modules/auth/auth.module"); -const autoreply_module_1 = require("./modules/autoreply/autoreply.module"); -const badWords_module_1 = require("./modules/badWords/badWords.module"); -const chat_module_1 = require("./modules/chat/chat.module"); -const chatGroup_module_1 = require("./modules/chatGroup/chatGroup.module"); -const chatLog_module_1 = require("./modules/chatLog/chatLog.module"); -const crami_module_1 = require("./modules/crami/crami.module"); -const database_module_1 = require("./modules/database/database.module"); -const globalConfig_module_1 = require("./modules/globalConfig/globalConfig.module"); -const models_module_1 = require("./modules/models/models.module"); -const official_module_1 = require("./modules/official/official.module"); -const order_module_1 = require("./modules/order/order.module"); -const pay_module_1 = require("./modules/pay/pay.module"); -const plugin_module_1 = require("./modules/plugin/plugin.module"); -const redisCache_module_1 = require("./modules/redisCache/redisCache.module"); -const signin_module_1 = require("./modules/signin/signin.module"); -const statistic_module_1 = require("./modules/statistic/statistic.module"); -const task_module_1 = require("./modules/task/task.module"); -const upload_module_1 = require("./modules/upload/upload.module"); -const user_module_1 = require("./modules/user/user.module"); -const userBalance_module_1 = require("./modules/userBalance/userBalance.module"); -const verification_module_1 = require("./modules/verification/verification.module"); -global.fetch = fetch; -let AppModule = class AppModule { -}; -AppModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - database_module_1.DatabaseModule, - serve_static_1.ServeStaticModule.forRoot({ - rootPath: (0, path_1.join)(__dirname, '..', 'public/admin'), - serveRoot: process.env.ADMIN_SERVE_ROOT || '/admin', - }, { - rootPath: (0, path_1.join)(__dirname, '..', 'public/file'), - serveRoot: '/file', - serveStaticOptions: { - setHeaders: (res, path, stat) => { - res.set('Access-Control-Allow-Origin', '*'); - }, - }, - }, { - rootPath: (0, path_1.join)(__dirname, '..', 'public/chat'), - serveRoot: '/', - }), - user_module_1.UserModule, - plugin_module_1.PluginModule, - auth_module_1.AuthModule, - verification_module_1.VerificationModule, - chat_module_1.ChatModule, - crami_module_1.CramiModule, - userBalance_module_1.UserBalanceModule, - chatLog_module_1.ChatLogModule, - upload_module_1.UploadModule, - redisCache_module_1.RedisCacheModule, - globalConfig_module_1.GlobalConfigModule, - statistic_module_1.StatisticModule, - badWords_module_1.BadWordsModule, - autoreply_module_1.AutoreplyModule, - app_module_1.AppModule, - pay_module_1.PayModule, - order_module_1.OrderModule, - official_module_1.OfficialModule, - task_module_1.TaskModule, - chatGroup_module_1.ChatGroupModule, - signin_module_1.SigninModule, - models_module_1.ModelsModule, - ], - providers: [ - { - provide: core_1.APP_INTERCEPTOR, - useClass: abort_interceptor_1.AbortInterceptor, - }, - custom_logger_service_1.CustomLoggerService, - ], - exports: [custom_logger_service_1.CustomLoggerService], - }) -], AppModule); -exports.AppModule = AppModule; diff --git a/AIWebQuickDeploy/dist/common/auth/adminAuth.guard.js b/AIWebQuickDeploy/dist/common/auth/adminAuth.guard.js deleted file mode 100644 index 1218247..0000000 --- a/AIWebQuickDeploy/dist/common/auth/adminAuth.guard.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AdminAuthGuard = void 0; -const common_1 = require("@nestjs/common"); -const jwtAuth_guard_1 = require("./jwtAuth.guard"); -let AdminAuthGuard = class AdminAuthGuard extends jwtAuth_guard_1.JwtAuthGuard { - async canActivate(context) { - const isAuthorized = await super.canActivate(context); - if (!isAuthorized) { - return false; - } - const request = context.switchToHttp().getRequest(); - const user = request.user; - if (user && ['admin', 'super'].includes(user.role)) { - return true; - } - else { - throw new common_1.UnauthorizedException('非法操作、您的权限等级不足、无法执行当前请求!'); - } - } -}; -AdminAuthGuard = __decorate([ - (0, common_1.Injectable)() -], AdminAuthGuard); -exports.AdminAuthGuard = AdminAuthGuard; diff --git a/AIWebQuickDeploy/dist/common/auth/jwt.strategy.js b/AIWebQuickDeploy/dist/common/auth/jwt.strategy.js deleted file mode 100644 index 4126c79..0000000 --- a/AIWebQuickDeploy/dist/common/auth/jwt.strategy.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JwtStrategy = void 0; -const common_1 = require("@nestjs/common"); -const passport_1 = require("@nestjs/passport"); -const passport_jwt_1 = require("passport-jwt"); -const redisCache_service_1 = require("../../modules/redisCache/redisCache.service"); -let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(passport_jwt_1.Strategy) { - constructor(redisService) { - super({ - jwtFromRequest: passport_jwt_1.ExtractJwt.fromAuthHeaderAsBearerToken(), - secretOrKey: redisService.getJwtSecret(), - }); - this.redisService = redisService; - } - async validate(payload) { - return payload; - } -}; -JwtStrategy = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [redisCache_service_1.RedisCacheService]) -], JwtStrategy); -exports.JwtStrategy = JwtStrategy; diff --git a/AIWebQuickDeploy/dist/common/auth/jwtAuth.guard.js b/AIWebQuickDeploy/dist/common/auth/jwtAuth.guard.js deleted file mode 100644 index e65460c..0000000 --- a/AIWebQuickDeploy/dist/common/auth/jwtAuth.guard.js +++ /dev/null @@ -1,85 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.JwtAuthGuard = void 0; -const globalConfig_service_1 = require("../../modules/globalConfig/globalConfig.service"); -const redisCache_service_1 = require("../../modules/redisCache/redisCache.service"); -const common_1 = require("@nestjs/common"); -const core_1 = require("@nestjs/core"); -const passport_1 = require("@nestjs/passport"); -const jwt = require("jsonwebtoken"); -const auth_service_1 = require("../../modules/auth/auth.service"); -let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') { - constructor(redisCacheService, moduleRef, globalConfigService, authService) { - super(); - this.redisCacheService = redisCacheService; - this.moduleRef = moduleRef; - this.globalConfigService = globalConfigService; - this.authService = authService; - } - async canActivate(context) { - if (!this.redisCacheService) { - this.redisCacheService = this.moduleRef.get(redisCache_service_1.RedisCacheService, { - strict: false, - }); - } - const request = context.switchToHttp().getRequest(); - const domain = request.headers['x-website-domain']; - const token = this.extractToken(request); - request.user = await this.validateToken(token); - await this.redisCacheService.checkTokenAuth(token, request); - return true; - } - extractToken(request) { - if (!request.headers.authorization) { - if (request.headers.fingerprint) { - let id = request.headers.fingerprint; - if (id > 2147483647) { - id = id.toString().slice(-9); - id = Number(String(Number(id))); - } - const token = this.authService.createTokenFromFingerprint(id); - return token; - } - return null; - } - const parts = request.headers.authorization.split(' '); - if (parts.length !== 2 || parts[0] !== 'Bearer') { - return null; - } - return parts[1]; - } - async validateToken(token) { - try { - const secret = await this.redisCacheService.getJwtSecret(); - const decoded = await jwt.verify(token, secret); - return decoded; - } - catch (error) { - throw new common_1.HttpException('亲爱的用户,请登录后继续操作,我们正在等您的到来!', common_1.HttpStatus.UNAUTHORIZED); - } - } - handleRequest(err, user, info) { - if (err || !user) { - console.log('err: ', err); - throw err || new common_1.UnauthorizedException(); - } - return user; - } -}; -JwtAuthGuard = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [redisCache_service_1.RedisCacheService, - core_1.ModuleRef, - globalConfig_service_1.GlobalConfigService, - auth_service_1.AuthService]) -], JwtAuthGuard); -exports.JwtAuthGuard = JwtAuthGuard; diff --git a/AIWebQuickDeploy/dist/common/auth/superAuth.guard.js b/AIWebQuickDeploy/dist/common/auth/superAuth.guard.js deleted file mode 100644 index c817c4c..0000000 --- a/AIWebQuickDeploy/dist/common/auth/superAuth.guard.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SuperAuthGuard = void 0; -const common_1 = require("@nestjs/common"); -const jwtAuth_guard_1 = require("./jwtAuth.guard"); -let SuperAuthGuard = class SuperAuthGuard extends jwtAuth_guard_1.JwtAuthGuard { - async canActivate(context) { - const isAuthorized = await super.canActivate(context); - if (!isAuthorized) { - return false; - } - const request = context.switchToHttp().getRequest(); - const user = request.user; - if (user && user.role === 'super') { - return true; - } - else { - throw new common_1.UnauthorizedException('非法操作、非超级管理员无权操作!'); - } - } -}; -SuperAuthGuard = __decorate([ - (0, common_1.Injectable)() -], SuperAuthGuard); -exports.SuperAuthGuard = SuperAuthGuard; diff --git a/AIWebQuickDeploy/dist/common/constants/balance.constant.js b/AIWebQuickDeploy/dist/common/constants/balance.constant.js deleted file mode 100644 index b55e4b5..0000000 --- a/AIWebQuickDeploy/dist/common/constants/balance.constant.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RechargeType = exports.ChatType = void 0; -exports.ChatType = { - NORMAL_CHAT: 1, - PAINT: 2, - EXTENDED_CHAT: 3, -}; -exports.RechargeType = { - REG_GIFT: 1, - INVITE_GIFT: 2, - REFER_GIFT: 3, - PACKAGE_GIFT: 4, - ADMIN_GIFT: 5, - SCAN_PAY: 6, - DRAW_FAIL_REFUND: 7, - SIGN_IN: 8, -}; diff --git a/AIWebQuickDeploy/dist/common/constants/errorMessage.constant.js b/AIWebQuickDeploy/dist/common/constants/errorMessage.constant.js deleted file mode 100644 index a4d5201..0000000 --- a/AIWebQuickDeploy/dist/common/constants/errorMessage.constant.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OpenAiErrorCodeMessage = exports.ErrorMessageEnum = void 0; -var ErrorMessageEnum; -(function (ErrorMessageEnum) { - ErrorMessageEnum["USERNAME_OR_EMAIL_ALREADY_REGISTERED"] = "\u7528\u6237\u540D\u6216\u90AE\u7BB1\u5DF2\u6CE8\u518C\uFF01"; - ErrorMessageEnum["USER_NOT_FOUND"] = "\u7528\u6237\u4E0D\u5B58\u5728\uFF01"; - ErrorMessageEnum["VERIFICATION_NOT_FOUND"] = "\u9A8C\u8BC1\u8BB0\u5F55\u4E0D\u5B58\u5728\uFF01"; - ErrorMessageEnum["VERIFICATION_CODE_EXPIRED"] = "\u9A8C\u8BC1\u7801\u5DF2\u8FC7\u671F\uFF01"; - ErrorMessageEnum["VERIFICATION_CODE_INVALID"] = "\u9A8C\u8BC1\u7801\u65E0\u6548\uFF01"; - ErrorMessageEnum["VERIFICATION_CODE_MISMATCH"] = "\u9A8C\u8BC1\u7801\u4E0D\u5339\u914D\uFF01"; - ErrorMessageEnum["VERIFICATION_CODE_SEND_FAILED"] = "\u9A8C\u8BC1\u7801\u53D1\u9001\u5931\u8D25\uFF01"; - ErrorMessageEnum["VERIFICATION_CODE_SEND_TOO_OFTEN"] = "\u9A8C\u8BC1\u7801\u53D1\u9001\u8FC7\u4E8E\u9891\u7E41\uFF01"; -})(ErrorMessageEnum = exports.ErrorMessageEnum || (exports.ErrorMessageEnum = {})); -exports.OpenAiErrorCodeMessage = { - 400: '[Inter Error] 服务端错误[400]', - 401: '[Inter Error] 服务出现错误、请稍后再试一次吧[401]', - 403: '[Inter Error] 服务器拒绝访问,请稍后再试 | Server refused to access, please try again later', - 429: '[Inter Error] 当前key调用频率过高、请重新对话再试一次吧[429]', - 502: '[Inter Error] 错误的网关 | Bad Gateway[502]', - 503: '[Inter Error] 服务器繁忙,请稍后再试 | Server is busy, please try again later[503]', - 504: '[Inter Error] 网关超时 | Gateway Time-out[504]', - 500: '[Inter Error] 服务器繁忙,请稍后再试 | Internal Server Error[500]', -}; diff --git a/AIWebQuickDeploy/dist/common/constants/midjourney.constant.js b/AIWebQuickDeploy/dist/common/constants/midjourney.constant.js deleted file mode 100644 index c5e0e10..0000000 --- a/AIWebQuickDeploy/dist/common/constants/midjourney.constant.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MidjourneyActionEnum = exports.MidjourneyStatusEnum = void 0; -var MidjourneyStatusEnum; -(function (MidjourneyStatusEnum) { - MidjourneyStatusEnum[MidjourneyStatusEnum["WAITING"] = 1] = "WAITING"; - MidjourneyStatusEnum[MidjourneyStatusEnum["DRAWING"] = 2] = "DRAWING"; - MidjourneyStatusEnum[MidjourneyStatusEnum["DRAWED"] = 3] = "DRAWED"; - MidjourneyStatusEnum[MidjourneyStatusEnum["DRAWFAIL"] = 4] = "DRAWFAIL"; - MidjourneyStatusEnum[MidjourneyStatusEnum["DRAWTIMEOUT"] = 5] = "DRAWTIMEOUT"; -})(MidjourneyStatusEnum = exports.MidjourneyStatusEnum || (exports.MidjourneyStatusEnum = {})); -var MidjourneyActionEnum; -(function (MidjourneyActionEnum) { - MidjourneyActionEnum[MidjourneyActionEnum["DRAW"] = 1] = "DRAW"; - MidjourneyActionEnum[MidjourneyActionEnum["UPSCALE"] = 2] = "UPSCALE"; - MidjourneyActionEnum[MidjourneyActionEnum["VARIATION"] = 3] = "VARIATION"; - MidjourneyActionEnum[MidjourneyActionEnum["GENERATE"] = 4] = "GENERATE"; - MidjourneyActionEnum[MidjourneyActionEnum["REGENERATE"] = 5] = "REGENERATE"; - MidjourneyActionEnum[MidjourneyActionEnum["VARY"] = 6] = "VARY"; - MidjourneyActionEnum[MidjourneyActionEnum["ZOOM"] = 7] = "ZOOM"; -})(MidjourneyActionEnum = exports.MidjourneyActionEnum || (exports.MidjourneyActionEnum = {})); diff --git a/AIWebQuickDeploy/dist/common/constants/status.constant.js b/AIWebQuickDeploy/dist/common/constants/status.constant.js deleted file mode 100644 index 629ee94..0000000 --- a/AIWebQuickDeploy/dist/common/constants/status.constant.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ModelsMapCn = exports.VerificationUseStatusEnum = void 0; -var VerificationUseStatusEnum; -(function (VerificationUseStatusEnum) { - VerificationUseStatusEnum[VerificationUseStatusEnum["UNUSED"] = 0] = "UNUSED"; - VerificationUseStatusEnum[VerificationUseStatusEnum["USED"] = 1] = "USED"; -})(VerificationUseStatusEnum = exports.VerificationUseStatusEnum || (exports.VerificationUseStatusEnum = {})); -exports.ModelsMapCn = { - 1: '普通模型', - 2: '绘画模型', - 3: '特殊模型' -}; diff --git a/AIWebQuickDeploy/dist/common/constants/user.constant.js b/AIWebQuickDeploy/dist/common/constants/user.constant.js deleted file mode 100644 index dd7bfc4..0000000 --- a/AIWebQuickDeploy/dist/common/constants/user.constant.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserStatusErrMsg = exports.UserStatusEnum = void 0; -var UserStatusEnum; -(function (UserStatusEnum) { - UserStatusEnum[UserStatusEnum["PENDING"] = 0] = "PENDING"; - UserStatusEnum[UserStatusEnum["ACTIVE"] = 1] = "ACTIVE"; - UserStatusEnum[UserStatusEnum["LOCKED"] = 2] = "LOCKED"; - UserStatusEnum[UserStatusEnum["BLACKLISTED"] = 3] = "BLACKLISTED"; -})(UserStatusEnum = exports.UserStatusEnum || (exports.UserStatusEnum = {})); -exports.UserStatusErrMsg = { - [UserStatusEnum.PENDING]: '当前账户未激活,请前往邮箱验证或重新发送验证码!', - [UserStatusEnum.ACTIVE]: '当前账户已激活!', - [UserStatusEnum.LOCKED]: '当前账户已锁定,请联系管理员解锁!', - [UserStatusEnum.BLACKLISTED]: '当前账户已被永久封禁!', -}; diff --git a/AIWebQuickDeploy/dist/common/constants/verification.constant.js b/AIWebQuickDeploy/dist/common/constants/verification.constant.js deleted file mode 100644 index 3681ca1..0000000 --- a/AIWebQuickDeploy/dist/common/constants/verification.constant.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerificationEnum = void 0; -var VerificationEnum; -(function (VerificationEnum) { - VerificationEnum[VerificationEnum["Registration"] = 0] = "Registration"; - VerificationEnum[VerificationEnum["PasswordReset"] = 1] = "PasswordReset"; - VerificationEnum[VerificationEnum["ChangeEmail"] = 2] = "ChangeEmail"; -})(VerificationEnum = exports.VerificationEnum || (exports.VerificationEnum = {})); diff --git a/AIWebQuickDeploy/dist/common/entity/baseEntity.js b/AIWebQuickDeploy/dist/common/entity/baseEntity.js deleted file mode 100644 index 65690ba..0000000 --- a/AIWebQuickDeploy/dist/common/entity/baseEntity.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BaseEntity = void 0; -const typeorm_1 = require("typeorm"); -let BaseEntity = class BaseEntity { -}; -__decorate([ - (0, typeorm_1.PrimaryGeneratedColumn)(), - __metadata("design:type", Number) -], BaseEntity.prototype, "id", void 0); -__decorate([ - (0, typeorm_1.CreateDateColumn)({ type: 'datetime', length: 0, nullable: false, name: 'createdAt', comment: '创建时间' }), - __metadata("design:type", Date) -], BaseEntity.prototype, "createdAt", void 0); -__decorate([ - (0, typeorm_1.UpdateDateColumn)({ type: 'datetime', length: 0, nullable: false, name: 'updatedAt', comment: '更新时间' }), - __metadata("design:type", Date) -], BaseEntity.prototype, "updatedAt", void 0); -__decorate([ - (0, typeorm_1.DeleteDateColumn)({ type: 'datetime', length: 0, nullable: false, name: 'deletedAt', comment: '删除时间' }), - __metadata("design:type", Date) -], BaseEntity.prototype, "deletedAt", void 0); -BaseEntity = __decorate([ - (0, typeorm_1.Entity)() -], BaseEntity); -exports.BaseEntity = BaseEntity; diff --git a/AIWebQuickDeploy/dist/common/filters/allExceptions.filter.js b/AIWebQuickDeploy/dist/common/filters/allExceptions.filter.js deleted file mode 100644 index e05e29f..0000000 --- a/AIWebQuickDeploy/dist/common/filters/allExceptions.filter.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AllExceptionsFilter = void 0; -const result_1 = require("../result"); -const common_1 = require("@nestjs/common"); -let AllExceptionsFilter = class AllExceptionsFilter { - catch(exception, host) { - const ctx = host.switchToHttp(); - const response = ctx.getResponse(); - const request = ctx.getRequest(); - const status = exception instanceof common_1.HttpException - ? exception.getStatus() - : common_1.HttpStatus.INTERNAL_SERVER_ERROR; - let message = 'Internal server error'; - if (exception instanceof common_1.HttpException) { - const exceptionRes = exception.getResponse(); - message = (exceptionRes === null || exceptionRes === void 0 ? void 0 : exceptionRes.message) - ? Array.isArray(exceptionRes.message) - ? exceptionRes.message[0] - : exceptionRes.message - : exceptionRes; - } - else if (typeof exception.getResponse === 'function') { - const exceptionRes = exception.getResponse(); - message = (exceptionRes === null || exceptionRes === void 0 ? void 0 : exceptionRes.message) - ? Array.isArray(exceptionRes.message) - ? exceptionRes.message[0] - : exceptionRes.message - : exceptionRes; - } - if (status === common_1.HttpStatus.NOT_FOUND) { - response.redirect('/'); - } - else { - const statusCode = status || 400; - response.status(statusCode); - response.header('Content-Type', 'application/json; charset=utf-8'); - response.send(result_1.Result.fail(statusCode, Array.isArray(message) ? message[0] : message)); - } - } -}; -AllExceptionsFilter = __decorate([ - (0, common_1.Catch)() -], AllExceptionsFilter); -exports.AllExceptionsFilter = AllExceptionsFilter; diff --git a/AIWebQuickDeploy/dist/common/filters/typeOrmQueryFailed.filter.js b/AIWebQuickDeploy/dist/common/filters/typeOrmQueryFailed.filter.js deleted file mode 100644 index 61a181e..0000000 --- a/AIWebQuickDeploy/dist/common/filters/typeOrmQueryFailed.filter.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TypeOrmQueryFailedFilter = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("typeorm"); -let TypeOrmQueryFailedFilter = class TypeOrmQueryFailedFilter { - catch(exception, host) { - const ctx = host.switchToHttp(); - const response = ctx.getResponse(); - const request = ctx.getRequest(); - if (exception.code === 'ER_DUP_ENTRY') { - throw new common_1.BadRequestException('该记录已经存在,请勿重复添加!'); - } - else { - console.log('other query error'); - } - response.status(500).json({ - statusCode: 500, - timestamp: new Date().toISOString(), - path: request.url, - message: `Database query failed: ${exception.message}`, - }); - } -}; -TypeOrmQueryFailedFilter = __decorate([ - (0, common_1.Catch)(typeorm_1.QueryFailedError) -], TypeOrmQueryFailedFilter); -exports.TypeOrmQueryFailedFilter = TypeOrmQueryFailedFilter; diff --git a/AIWebQuickDeploy/dist/common/guards/roles/roles.guard.js b/AIWebQuickDeploy/dist/common/guards/roles/roles.guard.js deleted file mode 100644 index 83e4a2e..0000000 --- a/AIWebQuickDeploy/dist/common/guards/roles/roles.guard.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RolesGuard = void 0; -const common_1 = require("@nestjs/common"); -let RolesGuard = class RolesGuard { - canActivate(context) { - return true; - } -}; -RolesGuard = __decorate([ - (0, common_1.Injectable)() -], RolesGuard); -exports.RolesGuard = RolesGuard; diff --git a/AIWebQuickDeploy/dist/common/interceptors/abort.interceptor.js b/AIWebQuickDeploy/dist/common/interceptors/abort.interceptor.js deleted file mode 100644 index 993f0c3..0000000 --- a/AIWebQuickDeploy/dist/common/interceptors/abort.interceptor.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AbortInterceptor = void 0; -const common_1 = require("@nestjs/common"); -const abort_controller_1 = require("abort-controller"); -let AbortInterceptor = class AbortInterceptor { - intercept(context, next) { - const request = context.switchToHttp().getRequest(); - const abortController = new abort_controller_1.AbortController(); - request.abortController = abortController; - return next.handle(); - } -}; -AbortInterceptor = __decorate([ - (0, common_1.Injectable)() -], AbortInterceptor); -exports.AbortInterceptor = AbortInterceptor; diff --git a/AIWebQuickDeploy/dist/common/interceptors/transform.interceptor.js b/AIWebQuickDeploy/dist/common/interceptors/transform.interceptor.js deleted file mode 100644 index 5b524a0..0000000 --- a/AIWebQuickDeploy/dist/common/interceptors/transform.interceptor.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TransformInterceptor = void 0; -const common_1 = require("@nestjs/common"); -const rxjs_1 = require("rxjs"); -const operators_1 = require("rxjs/operators"); -const result_1 = require("../result"); -let TransformInterceptor = class TransformInterceptor { - intercept(context, next) { - return next.handle().pipe((0, operators_1.map)((data) => { - const response = context.switchToHttp().getResponse(); - const request = context.switchToHttp().getRequest(); - response.statusCode = 200; - if (request.path.includes('notify')) { - return data; - } - const message = response.status < 400 ? null : response.statusText; - return result_1.Result.success(data, message); - }), (0, rxjs_1.catchError)((error) => { - const statusCode = error.status || 500; - const message = (error.response || 'Internal server error'); - return (0, rxjs_1.throwError)(new common_1.HttpException(message, statusCode)); - })); - } -}; -TransformInterceptor = __decorate([ - (0, common_1.Injectable)() -], TransformInterceptor); -exports.TransformInterceptor = TransformInterceptor; diff --git a/AIWebQuickDeploy/dist/common/logger/custom-logger.service.js b/AIWebQuickDeploy/dist/common/logger/custom-logger.service.js deleted file mode 100644 index fef3f1d..0000000 --- a/AIWebQuickDeploy/dist/common/logger/custom-logger.service.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CustomLoggerService = void 0; -const common_1 = require("@nestjs/common"); -let CustomLoggerService = class CustomLoggerService extends common_1.ConsoleLogger { - constructor() { - super(); - this.isDev = process.env.ISDEV === 'TRUE'; - } - log(message, context) { - super.log(message, context); - } - error(message, trace, context) { - super.error(message, trace, context); - } - warn(message, context) { - if (this.isDev) { - super.warn(message, context); - } - } - debug(message, context) { - if (this.isDev) { - super.debug(message, context); - } - } - verbose(message, context) { - if (this.isDev) { - super.verbose(message, context); - } - } -}; -CustomLoggerService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", []) -], CustomLoggerService); -exports.CustomLoggerService = CustomLoggerService; diff --git a/AIWebQuickDeploy/dist/common/middleware/xml.middleware.js b/AIWebQuickDeploy/dist/common/middleware/xml.middleware.js deleted file mode 100644 index 94a01f0..0000000 --- a/AIWebQuickDeploy/dist/common/middleware/xml.middleware.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.XMLMiddleware = void 0; -const common_1 = require("@nestjs/common"); -const bodyParser = require("body-parser"); -const bodyParserMiddleware = bodyParser.text({ - type: 'application/xml', -}); -let XMLMiddleware = class XMLMiddleware { - use(req, res, next) { - bodyParserMiddleware(req, res, next); - } -}; -XMLMiddleware = __decorate([ - (0, common_1.Injectable)() -], XMLMiddleware); -exports.XMLMiddleware = XMLMiddleware; diff --git a/AIWebQuickDeploy/dist/common/result/index.js b/AIWebQuickDeploy/dist/common/result/index.js deleted file mode 100644 index c953e45..0000000 --- a/AIWebQuickDeploy/dist/common/result/index.js +++ /dev/null @@ -1,18 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.Result = void 0; -class Result { - constructor(code, success, data, message) { - this.code = code; - this.data = data; - this.success = success; - this.message = message; - } - static success(data, message = '请求成功') { - return new Result(200, true, data, message); - } - static fail(code, message = '请求失败', data) { - return new Result(code, false, data, message); - } -} -exports.Result = Result; diff --git a/AIWebQuickDeploy/dist/common/swagger/index.js b/AIWebQuickDeploy/dist/common/swagger/index.js deleted file mode 100644 index f1f7eac..0000000 --- a/AIWebQuickDeploy/dist/common/swagger/index.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createSwagger = void 0; -const swagger_1 = require("@nestjs/swagger"); -const swaggerOptions = new swagger_1.DocumentBuilder() - .setTitle('AIWeb Team api document') - .setDescription('AIWeb Team api document') - .setVersion('1.0.0') - .addBearerAuth() - .build(); -function createSwagger(app) { - const document = swagger_1.SwaggerModule.createDocument(app, swaggerOptions); - swagger_1.SwaggerModule.setup('/swagger/docs', app, document); -} -exports.createSwagger = createSwagger; diff --git a/AIWebQuickDeploy/dist/common/utils/base.js b/AIWebQuickDeploy/dist/common/utils/base.js deleted file mode 100644 index f2835c5..0000000 --- a/AIWebQuickDeploy/dist/common/utils/base.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.decrypt = exports.encrypt = void 0; -const crypto = require("crypto"); -const encryptionKey = 'bf3c116f2470cb4che9071240917c171'; -const initializationVector = '518363fh72eec1v4'; -const algorithm = 'aes-256-cbc'; -function encrypt(text) { - const cipher = crypto.createCipheriv(algorithm, encryptionKey, initializationVector); - let encrypted = cipher.update(text, 'utf8', 'base64'); - encrypted += cipher.final('base64'); - return encrypted; -} -exports.encrypt = encrypt; -function decrypt(text) { - try { - const decipher = crypto.createDecipheriv(algorithm, encryptionKey, initializationVector); - let decrypted = decipher.update(text, 'base64', 'utf8'); - decrypted += decipher.final('utf8'); - return decrypted; - } - catch (error) { - process.exit(1); - } -} -exports.decrypt = decrypt; diff --git a/AIWebQuickDeploy/dist/common/utils/createOrderId.js b/AIWebQuickDeploy/dist/common/utils/createOrderId.js deleted file mode 100644 index 8eed91b..0000000 --- a/AIWebQuickDeploy/dist/common/utils/createOrderId.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createOrderId = void 0; -const uuid_1 = require("uuid"); -function createOrderId() { - return (0, uuid_1.v1)().toString().replace(/-/g, ''); -} -exports.createOrderId = createOrderId; diff --git a/AIWebQuickDeploy/dist/common/utils/createRandomCode.js b/AIWebQuickDeploy/dist/common/utils/createRandomCode.js deleted file mode 100644 index 305b54e..0000000 --- a/AIWebQuickDeploy/dist/common/utils/createRandomCode.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createRandomCode = void 0; -function createRandomCode() { - const min = 100000; - const max = 999999; - return Math.floor(Math.random() * (max - min + 1) + min); -} -exports.createRandomCode = createRandomCode; diff --git a/AIWebQuickDeploy/dist/common/utils/createRandomInviteCode.js b/AIWebQuickDeploy/dist/common/utils/createRandomInviteCode.js deleted file mode 100644 index 4617efb..0000000 --- a/AIWebQuickDeploy/dist/common/utils/createRandomInviteCode.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.generateRandomString = void 0; -function generateRandomString() { - const length = 10; - const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; - let result = ''; - for (let i = 0; i < length; i++) { - const randomIndex = Math.floor(Math.random() * characters.length); - result += characters.charAt(randomIndex); - } - return result; -} -exports.generateRandomString = generateRandomString; diff --git a/AIWebQuickDeploy/dist/common/utils/createRandomNonceStr.js b/AIWebQuickDeploy/dist/common/utils/createRandomNonceStr.js deleted file mode 100644 index 5e5d93b..0000000 --- a/AIWebQuickDeploy/dist/common/utils/createRandomNonceStr.js +++ /dev/null @@ -1,12 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createRandomNonceStr = void 0; -function createRandomNonceStr(len) { - const data = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; - let str = ''; - for (let i = 0; i < len; i++) { - str += data.charAt(parseInt((Math.random() * data.length).toFixed(0), 10)); - } - return str; -} -exports.createRandomNonceStr = createRandomNonceStr; diff --git a/AIWebQuickDeploy/dist/common/utils/createRandomUid.js b/AIWebQuickDeploy/dist/common/utils/createRandomUid.js deleted file mode 100644 index 5010185..0000000 --- a/AIWebQuickDeploy/dist/common/utils/createRandomUid.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.createRandomUid = void 0; -const guid_typescript_1 = require("guid-typescript"); -function createRandomUid() { - const uuid = guid_typescript_1.Guid.create(); - return uuid.toString().substr(0, 10).replace('-', ''); -} -exports.createRandomUid = createRandomUid; diff --git a/AIWebQuickDeploy/dist/common/utils/date.js b/AIWebQuickDeploy/dist/common/utils/date.js deleted file mode 100644 index f475421..0000000 --- a/AIWebQuickDeploy/dist/common/utils/date.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.isExpired = exports.formatCreateOrUpdateDate = exports.formatDate = void 0; -const dayjs = require("dayjs"); -require("dayjs/locale/zh-cn"); -const a = require("dayjs/plugin/utc"); -const b = require("dayjs/plugin/timezone"); -dayjs.locale('zh-cn'); -dayjs.extend(a); -dayjs.extend(b); -dayjs.tz.setDefault('Asia/Shanghai'); -function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') { - return dayjs(date).format(format); -} -exports.formatDate = formatDate; -function formatCreateOrUpdateDate(input, format = 'YYYY-MM-DD HH:mm:ss') { - if (Array.isArray(input)) { - return input.map((t) => { - t.createdAt = (t === null || t === void 0 ? void 0 : t.createdAt) ? dayjs(t.createdAt).format(format) : dayjs().format(format); - t.updatedAt = (t === null || t === void 0 ? void 0 : t.updatedAt) ? dayjs(t.updatedAt).format(format) : dayjs().format(format); - return t; - }); - } - else { - let obj = {}; - try { - obj = JSON.parse(JSON.stringify(input)); - } - catch (error) { - } - (obj === null || obj === void 0 ? void 0 : obj.createdAt) && (obj.createdAt = dayjs(obj.createdAt).format(format)); - (obj === null || obj === void 0 ? void 0 : obj.updatedAt) && (obj.updatedAt = dayjs(obj.updatedAt).format(format)); - return obj; - } -} -exports.formatCreateOrUpdateDate = formatCreateOrUpdateDate; -function isExpired(createdAt, days) { - const expireDate = new Date(createdAt.getTime() + days * 24 * 60 * 60 * 1000); - const now = new Date(); - return now > expireDate; -} -exports.isExpired = isExpired; -exports.default = dayjs; diff --git a/AIWebQuickDeploy/dist/common/utils/encrypt.js b/AIWebQuickDeploy/dist/common/utils/encrypt.js deleted file mode 100644 index b094f4d..0000000 --- a/AIWebQuickDeploy/dist/common/utils/encrypt.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.copyRightMsg = exports.atob = void 0; -function atob(str) { - return Buffer.from(str, 'base64').toString('utf-8'); -} -exports.atob = atob; -exports.copyRightMsg = [ - 'agxoTstMY8m+DJO89Iwy4zqcFTqlcj/Fa/erMTvn0IexetXaDttr4K/BN2+RbtfouXOeFjPDYnxOfQ+IIpuJ3PmtyHAzmlGFls/HvBDeh6EXAQ3waALbvK9Ue96soAb5/3Tv6VuZE7npISqXiYhI6Vqx4yDVYf6vUUkEO9jvVotWQkLOLkr6M/guLK6sik/ZOgHvSlDYKAv79NFJJ0Tt0WkH2SyN8l+woMiWVTOKkdE=', - 'nXdXi8UU7J5av2eDOFjxQWlZDa+3bdASE4UwpqT6B11XSCweKKuzHxmFO2wx45iVlib/V0tt+NbEcOQZtzEWKqHsREkwEb5aqVCUl2Kj4nJeEFId2iyvY6MWEV1lHtCY+htpJoyqwQJc7yeNfpTl2SLBubWk77p4AHei1QFEs1rpOOwyE79lF0RqzY/Cpzhs', - 'VjVCGib1VFp7hNynpKGQPUrX+ishpxi2u5a4txHXzk2nyUP1NZfIomEDmGhDTQ7VRJLox+8urtVG1CBBSct1v+4OA2ucAcDUFoy1H1Kl1z+dndVcNU6gz5YGnDppsxY8uGFAVGsWrDl2DIOKxk7kMURaRiQCXCHRF/3sLGyIEmE6KL9Q4kDInB6vuzBScxupFShMXTq2XrOhwRgn2elcig==', - 'ZPcz1IaPDMGI3Yn9sm4QOT0qCZo7yZbJl4/c2RTrhUKINkjGB5yb0yN5vAnLtt/o8cmpoOoH3PUSOOWQa9aKD86NWK+1r8wBOVjwXZOpp2gbB1ZJLbWvjRbENvEJxVsLROXnpNDqUXVGxFMaIt+gmEi3Rp0thqC1soXUpvM1zqU4+LkQmunR7UytvzwXEmXBlIfPwz5hv+n/lxDsw526KWixC3jLLpeijw5433Zh7cI=', - 'YPo1HNzS6p6190ku4f1PQENUBa/ip+v+6sPuQXVyAn3axo6SLKQBszNr3PAW2EzWhZLy2o+nBgr3o3IOy9OgNit1JHrCklpVp172wbGDKh8sB8HCXyJoRv3BaZVY5UhyhpV5K+4nPoM2RUwvIGONUGFPQfPQv9N8MS8UCL7UnWYcVLzxWo0ZDg+UXFRr7NhXKu7KQ7e1+Wiqm0qE+olfDVowi4pGDRGrYL154wEEJUo=' -]; diff --git a/AIWebQuickDeploy/dist/common/utils/fromatUrl.js b/AIWebQuickDeploy/dist/common/utils/fromatUrl.js deleted file mode 100644 index 05e72f5..0000000 --- a/AIWebQuickDeploy/dist/common/utils/fromatUrl.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.formatUrl = void 0; -function formatUrl(url) { - let formattedUrl = url.replace(/\s+/g, ''); - if (formattedUrl.endsWith('/')) { - formattedUrl = formattedUrl.slice(0, -1); - } - return formattedUrl; -} -exports.formatUrl = formatUrl; diff --git a/AIWebQuickDeploy/dist/common/utils/generateCrami.js b/AIWebQuickDeploy/dist/common/utils/generateCrami.js deleted file mode 100644 index 57d0292..0000000 --- a/AIWebQuickDeploy/dist/common/utils/generateCrami.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.generateCramiCode = void 0; -const uuid_1 = require("uuid"); -function generateCramiCode() { - const code = (0, uuid_1.v4)().replace(/-/g, '').slice(0, 16); - return code; -} -exports.generateCramiCode = generateCramiCode; diff --git a/AIWebQuickDeploy/dist/common/utils/getClientIp.js b/AIWebQuickDeploy/dist/common/utils/getClientIp.js deleted file mode 100644 index 9b962ee..0000000 --- a/AIWebQuickDeploy/dist/common/utils/getClientIp.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getClientIp = void 0; -function getFirstValidIp(ipString) { - const ips = ipString.split(',').map(ip => ip.trim()); - return ips.find(ip => isValidIp(ip)) || ''; -} -function isValidIp(ip) { - return /^\d{1,3}(\.\d{1,3}){3}$/.test(ip) || /^::ffff:\d{1,3}(\.\d{1,3}){3}$/.test(ip); -} -function getClientIp(req) { - const forwardedFor = req.header('x-forwarded-for'); - let clientIp = forwardedFor ? getFirstValidIp(forwardedFor) : ''; - if (!clientIp) { - clientIp = req.connection.remoteAddress || req.socket.remoteAddress || ''; - } - if (clientIp.startsWith('::ffff:')) { - clientIp = clientIp.substring(7); - } - return clientIp; -} -exports.getClientIp = getClientIp; diff --git a/AIWebQuickDeploy/dist/common/utils/getDiffArray.js b/AIWebQuickDeploy/dist/common/utils/getDiffArray.js deleted file mode 100644 index 5aed971..0000000 --- a/AIWebQuickDeploy/dist/common/utils/getDiffArray.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getDiffArray = void 0; -function getDiffArray(aLength, bLength, str) { - const a = Array.from({ length: aLength }, (_, i) => i + 1); - const b = Array.from({ length: bLength }, (_, i) => i + 1); - const diffArray = []; - for (let i = 0; i < a.length; i++) { - if (!b.includes(a[i])) { - diffArray.push(`${str}${a[i]}`); - } - } - return diffArray; -} -exports.getDiffArray = getDiffArray; diff --git a/AIWebQuickDeploy/dist/common/utils/getRandomItem.js b/AIWebQuickDeploy/dist/common/utils/getRandomItem.js deleted file mode 100644 index 6bf6599..0000000 --- a/AIWebQuickDeploy/dist/common/utils/getRandomItem.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getRandomItem = void 0; -function getRandomItem(array) { - const randomIndex = Math.floor(Math.random() * array.length); - return array[randomIndex]; -} -exports.getRandomItem = getRandomItem; diff --git a/AIWebQuickDeploy/dist/common/utils/getRandomItemFromArray.js b/AIWebQuickDeploy/dist/common/utils/getRandomItemFromArray.js deleted file mode 100644 index 2eb8875..0000000 --- a/AIWebQuickDeploy/dist/common/utils/getRandomItemFromArray.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getRandomItemFromArray = void 0; -function getRandomItemFromArray(array) { - if (array.length === 0) { - return null; - } - const randomIndex = Math.floor(Math.random() * array.length); - return array[randomIndex]; -} -exports.getRandomItemFromArray = getRandomItemFromArray; diff --git a/AIWebQuickDeploy/dist/common/utils/getTokenCount.js b/AIWebQuickDeploy/dist/common/utils/getTokenCount.js deleted file mode 100644 index 9ceb75f..0000000 --- a/AIWebQuickDeploy/dist/common/utils/getTokenCount.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getTokenCount = void 0; -const gpt_tokenizer_1 = require("gpt-tokenizer"); -const getTokenCount = async (input) => { - let text = ''; - if (Array.isArray(input)) { - text = input.reduce((pre, cur) => { - if (Array.isArray(cur.content)) { - const contentText = cur.content - .filter((item) => item.type === 'text') - .map((item) => item.text) - .join(' '); - return pre + contentText; - } - else { - return pre + (cur.content || ''); - } - }, ''); - } - else if (typeof input === 'string') { - text = input; - } - else if (input) { - text = String(input); - } - text = text.replace(/<\|endoftext\|>/g, ''); - return (0, gpt_tokenizer_1.encode)(text).length; -}; -exports.getTokenCount = getTokenCount; diff --git a/AIWebQuickDeploy/dist/common/utils/handleError.js b/AIWebQuickDeploy/dist/common/utils/handleError.js deleted file mode 100644 index 37d78de..0000000 --- a/AIWebQuickDeploy/dist/common/utils/handleError.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.handleError = void 0; -const axios_1 = require("axios"); -function handleError(error) { - let message = '发生未知错误,请稍后再试'; - if (axios_1.default.isAxiosError(error) && error.response) { - switch (error.response.status) { - case 400: - message = - '发生错误:400 Bad Request - 请求因格式错误无法被服务器处理。'; - break; - case 401: - message = '发生错误:401 Unauthorized - 请求要求进行身份验证。'; - break; - case 403: - message = '发生错误:403 Forbidden - 服务器拒绝执行请求。'; - break; - case 404: - message = '发生错误:404 Not Found - 请求的资源无法在服务器上找到。'; - break; - case 500: - message = - '发生错误:500 Internal Server Error - 服务器内部错误,无法完成请求。'; - break; - case 502: - message = - '发生错误:502 Bad Gateway - 作为网关或代理工作的服务器从上游服务器收到无效响应。'; - break; - case 503: - message = - '发生错误:503 Service Unavailable - 服务器暂时处于超负载或维护状态,无法处理请求。'; - break; - default: - break; - } - } - else { - message = error.message || message; - } - return message; -} -exports.handleError = handleError; diff --git a/AIWebQuickDeploy/dist/common/utils/hideString.js b/AIWebQuickDeploy/dist/common/utils/hideString.js deleted file mode 100644 index a16638a..0000000 --- a/AIWebQuickDeploy/dist/common/utils/hideString.js +++ /dev/null @@ -1,14 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.hideString = void 0; -function hideString(input, str) { - const length = input.length; - const start = input.slice(0, (length - 10) / 2); - const end = input.slice((length + 10) / 2, length); - const hidden = '*'.repeat(10); - if (str) { - return `**********${str}**********`; - } - return `${start}${hidden}${end}`; -} -exports.hideString = hideString; diff --git a/AIWebQuickDeploy/dist/common/utils/index.js b/AIWebQuickDeploy/dist/common/utils/index.js deleted file mode 100644 index 137a82e..0000000 --- a/AIWebQuickDeploy/dist/common/utils/index.js +++ /dev/null @@ -1,39 +0,0 @@ -"use strict"; -var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - var desc = Object.getOwnPropertyDescriptor(m, k); - if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { - desc = { enumerable: true, get: function() { return m[k]; } }; - } - Object.defineProperty(o, k2, desc); -}) : (function(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -})); -var __exportStar = (this && this.__exportStar) || function(m, exports) { - for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -__exportStar(require("./base"), exports); -__exportStar(require("./createOrderId"), exports); -__exportStar(require("./createRandomCode"), exports); -__exportStar(require("./createRandomInviteCode"), exports); -__exportStar(require("./createRandomNonceStr"), exports); -__exportStar(require("./createRandomUid"), exports); -__exportStar(require("./date"), exports); -__exportStar(require("./encrypt"), exports); -__exportStar(require("./fromatUrl"), exports); -__exportStar(require("./generateCrami"), exports); -__exportStar(require("./getClientIp"), exports); -__exportStar(require("./getDiffArray"), exports); -__exportStar(require("./getRandomItem"), exports); -__exportStar(require("./getRandomItemFromArray"), exports); -__exportStar(require("./getTokenCount"), exports); -__exportStar(require("./handleError"), exports); -__exportStar(require("./hideString"), exports); -__exportStar(require("./maskCrami"), exports); -__exportStar(require("./maskEmail"), exports); -__exportStar(require("./maskIpAddress"), exports); -__exportStar(require("./removeSpecialCharacters"), exports); -__exportStar(require("./tools"), exports); -__exportStar(require("./utcformatTime"), exports); diff --git a/AIWebQuickDeploy/dist/common/utils/maskCrami.js b/AIWebQuickDeploy/dist/common/utils/maskCrami.js deleted file mode 100644 index f08a1f6..0000000 --- a/AIWebQuickDeploy/dist/common/utils/maskCrami.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.maskCrami = void 0; -function maskCrami(str) { - if (str.length !== 16) { - throw new Error('Invalid input'); - } - const masked = str.substring(0, 6) + '****' + str.substring(10); - return masked; -} -exports.maskCrami = maskCrami; diff --git a/AIWebQuickDeploy/dist/common/utils/maskEmail.js b/AIWebQuickDeploy/dist/common/utils/maskEmail.js deleted file mode 100644 index 9a93baf..0000000 --- a/AIWebQuickDeploy/dist/common/utils/maskEmail.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.maskEmail = void 0; -function maskEmail(email) { - if (!email) - return ''; - const atIndex = email.indexOf('@'); - if (atIndex <= 1) { - return email; - } - const firstPart = email.substring(0, atIndex - 1); - const lastPart = email.substring(atIndex); - const maskedPart = '*'.repeat(firstPart.length - 1); - return `${firstPart.charAt(0)}${maskedPart}${email.charAt(atIndex - 1)}${lastPart}`; -} -exports.maskEmail = maskEmail; diff --git a/AIWebQuickDeploy/dist/common/utils/maskIpAddress.js b/AIWebQuickDeploy/dist/common/utils/maskIpAddress.js deleted file mode 100644 index ee142a3..0000000 --- a/AIWebQuickDeploy/dist/common/utils/maskIpAddress.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.maskIpAddress = void 0; -function maskIpAddress(ipAddress) { - if (!ipAddress) - return ''; - const ipArray = ipAddress.split('.'); - ipArray[2] = '***'; - return ipArray.join('.'); -} -exports.maskIpAddress = maskIpAddress; diff --git a/AIWebQuickDeploy/dist/common/utils/removeSpecialCharacters.js b/AIWebQuickDeploy/dist/common/utils/removeSpecialCharacters.js deleted file mode 100644 index 3f78a45..0000000 --- a/AIWebQuickDeploy/dist/common/utils/removeSpecialCharacters.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.removeSpecialCharacters = void 0; -function removeSpecialCharacters(inputString) { - return inputString.replace(/[^\w\s-]/g, ''); -} -exports.removeSpecialCharacters = removeSpecialCharacters; diff --git a/AIWebQuickDeploy/dist/common/utils/tools.js b/AIWebQuickDeploy/dist/common/utils/tools.js deleted file mode 100644 index fb5caf7..0000000 --- a/AIWebQuickDeploy/dist/common/utils/tools.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.importDynamic = exports.isNotEmptyString = void 0; -function isNotEmptyString(value) { - return typeof value === 'string' && value.length > 0; -} -exports.isNotEmptyString = isNotEmptyString; -exports.importDynamic = new Function('modulePath', 'return import(modulePath)'); diff --git a/AIWebQuickDeploy/dist/common/utils/utcformatTime.js b/AIWebQuickDeploy/dist/common/utils/utcformatTime.js deleted file mode 100644 index 5a917a2..0000000 --- a/AIWebQuickDeploy/dist/common/utils/utcformatTime.js +++ /dev/null @@ -1,16 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.utcToShanghaiTime = void 0; -function utcToShanghaiTime(utcTime, format = 'YYYY/MM/DD hh:mm:ss') { - const date = new Date(utcTime); - const shanghaiTime = date.getTime() + 8 * 60 * 60 * 1000; - const shanghaiDate = new Date(shanghaiTime); - let result = format.replace('YYYY', shanghaiDate.getFullYear().toString()); - result = result.replace('MM', `0${shanghaiDate.getMonth() + 1}`.slice(-2)); - result = result.replace('DD', `0${shanghaiDate.getDate()}`.slice(-2)); - result = result.replace('hh', `0${shanghaiDate.getHours()}`.slice(-2)); - result = result.replace('mm', `0${shanghaiDate.getMinutes()}`.slice(-2)); - result = result.replace('ss', `0${shanghaiDate.getSeconds()}`.slice(-2)); - return result; -} -exports.utcToShanghaiTime = utcToShanghaiTime; diff --git a/AIWebQuickDeploy/dist/main.js b/AIWebQuickDeploy/dist/main.js index 9ef412b..e4dada5 100644 --- a/AIWebQuickDeploy/dist/main.js +++ b/AIWebQuickDeploy/dist/main.js @@ -1,20 +1,19640 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const allExceptions_filter_1 = require("./common/filters/allExceptions.filter"); -const typeOrmQueryFailed_filter_1 = require("./common/filters/typeOrmQueryFailed.filter"); -const transform_interceptor_1 = require("./common/interceptors/transform.interceptor"); -const custom_logger_service_1 = require("./common/logger/custom-logger.service"); -const initDatabase_1 = require("./modules/database/initDatabase"); -const common_1 = require("@nestjs/common"); -const core_1 = require("@nestjs/core"); -const compression = require("compression"); -const crypto_1 = require("crypto"); -const Dotenv = require("dotenv"); -const xmlBodyParser = require("express-xml-bodyparser"); -const ioredis_1 = require("ioredis"); -const app_module_1 = require("./app.module"); +/******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ([ +/* 0 */, +/* 1 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TypeOrmQueryFailedFilter = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(3); +let TypeOrmQueryFailedFilter = class TypeOrmQueryFailedFilter { + catch(exception, host) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + const request = ctx.getRequest(); + if (exception.code === 'ER_DUP_ENTRY') { + throw new common_1.BadRequestException('该记录已经存在,请勿重复添加!'); + } + else { + console.log('other query error'); + } + response.status(500).json({ + statusCode: 500, + timestamp: new Date().toISOString(), + path: request.url, + message: `Database query failed: ${exception.message}`, + }); + } +}; +exports.TypeOrmQueryFailedFilter = TypeOrmQueryFailedFilter; +exports.TypeOrmQueryFailedFilter = TypeOrmQueryFailedFilter = __decorate([ + (0, common_1.Catch)(typeorm_1.QueryFailedError) +], TypeOrmQueryFailedFilter); + + +/***/ }), +/* 2 */ +/***/ ((module) => { + +module.exports = require("@nestjs/common"); + +/***/ }), +/* 3 */ +/***/ ((module) => { + +module.exports = require("typeorm"); + +/***/ }), +/* 4 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TransformInterceptor = void 0; +const result_1 = __webpack_require__(5); +const common_1 = __webpack_require__(2); +const rxjs_1 = __webpack_require__(6); +const operators_1 = __webpack_require__(7); +let TransformInterceptor = class TransformInterceptor { + intercept(context, next) { + return next.handle().pipe((0, operators_1.map)(data => { + const response = context.switchToHttp().getResponse(); + const request = context.switchToHttp().getRequest(); + response.statusCode = 200; + if (request.path.includes('notify')) { + return data; + } + const message = response.status < 400 ? null : response.statusText; + return result_1.Result.success(data, message); + }), (0, rxjs_1.catchError)(error => { + const statusCode = error.status || 500; + const message = (error.response || 'Internal server error'); + return (0, rxjs_1.throwError)(new common_1.HttpException(message, statusCode)); + })); + } +}; +exports.TransformInterceptor = TransformInterceptor; +exports.TransformInterceptor = TransformInterceptor = __decorate([ + (0, common_1.Injectable)() +], TransformInterceptor); + + +/***/ }), +/* 5 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Result = void 0; +class Result { + code; + data; + success; + message; + constructor(code, success, data, message) { + this.code = code; + this.data = data; + this.success = success; + this.message = message; + } + static success(data, message = '请求成功') { + return new Result(200, true, data, message); + } + static fail(code, message = '请求失败', data) { + return new Result(code, false, data, message); + } +} +exports.Result = Result; + + +/***/ }), +/* 6 */ +/***/ ((module) => { + +module.exports = require("rxjs"); + +/***/ }), +/* 7 */ +/***/ ((module) => { + +module.exports = require("rxjs/operators"); + +/***/ }), +/* 8 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CustomLoggerService = void 0; +const common_1 = __webpack_require__(2); +const util_1 = __webpack_require__(9); +let CustomLoggerService = class CustomLoggerService extends common_1.ConsoleLogger { + isDev; + constructor() { + super(); + this.isDev = process.env.ISDEV === 'true'; + } + sanitizeLogMessage(message) { + if (message === null || message === undefined) { + return String(message); + } + if (typeof message === 'object') { + try { + if (Array.isArray(message)) { + const sanitizedArray = [...message]; + this.sanitizeDeep(sanitizedArray); + return util_1.default.inspect(sanitizedArray, { depth: null, maxArrayLength: null }); + } + else { + const clone = JSON.parse(JSON.stringify(message)); + this.sanitizeDeep(clone); + return util_1.default.inspect(clone, { depth: null, maxArrayLength: null }); + } + } + catch (e) { + try { + return this.sanitizeBase64String(util_1.default.inspect(message, { depth: null })); + } + catch (err) { + return '[无法序列化的对象]'; + } + } + } + if (typeof message === 'string') { + return this.sanitizeBase64String(message); + } + return this.sanitizeBase64String(String(message)); + } + sanitizeDeep(obj) { + if (!obj || typeof obj !== 'object') + return; + if (Array.isArray(obj)) { + for (let i = 0; i < obj.length; i++) { + const value = obj[i]; + if (typeof value === 'string') { + obj[i] = this.sanitizeBase64String(value); + } + else if (value && typeof value === 'object') { + this.sanitizeDeep(value); + } + } + return; + } + for (const key of Object.keys(obj)) { + const value = obj[key]; + if (typeof value === 'string') { + obj[key] = this.sanitizeBase64String(value); + } + else if (value && typeof value === 'object') { + this.sanitizeDeep(value); + } + } + } + sanitizeBase64String(str) { + if (!str) + return str; + str = str.replace(/(data:[^;]+;base64,)[a-zA-Z0-9+/=]{20,}/g, '$1***BASE64_DATA***'); + str = str.replace(/([a-zA-Z0-9+/=]{50})[a-zA-Z0-9+/=]{10,}/g, '$1***BASE64_DATA***'); + str = str.replace(/"([a-zA-Z0-9+/=]{20,})"/g, function (match, p1) { + if (p1.length >= 50 && /^[a-zA-Z0-9+/=]+$/.test(p1)) { + return '"' + p1.substring(0, 20) + '***BASE64_DATA***"'; + } + return match; + }); + str = str.replace(/("url"\s*:\s*")([a-zA-Z0-9+/=]{20,})(")/g, '$1***BASE64_DATA***$3'); + return str; + } + log(message, context) { + const sanitized = this.sanitizeLogMessage(message); + super.log(sanitized, context); + } + error(message, trace, context) { + const sanitized = this.sanitizeLogMessage(message); + super.error(sanitized, trace, context); + } + warn(message, context) { + if (this.isDev) { + const sanitized = this.sanitizeLogMessage(message); + super.warn(sanitized, context); + } + } + debug(message, context) { + if (this.isDev) { + const sanitized = this.sanitizeLogMessage(message); + super.debug(sanitized, context); + } + } + verbose(message, context) { + if (this.isDev) { + const sanitized = this.sanitizeLogMessage(message); + super.verbose(sanitized, context); + } + } +}; +exports.CustomLoggerService = CustomLoggerService; +exports.CustomLoggerService = CustomLoggerService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", []) +], CustomLoggerService); + + +/***/ }), +/* 9 */ +/***/ ((module) => { + +module.exports = require("util"); + +/***/ }), +/* 10 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.FastXmlMiddleware = void 0; +const common_1 = __webpack_require__(2); +const fast_xml_parser_1 = __webpack_require__(11); +const getRawBody = __webpack_require__(12); +let FastXmlMiddleware = class FastXmlMiddleware { + xmlParser; + constructor() { + this.xmlParser = new fast_xml_parser_1.XMLParser({ + ignoreAttributes: false, + attributeNamePrefix: '@_', + allowBooleanAttributes: true, + parseAttributeValue: true, + trimValues: true, + isArray: name => { + return true; + }, + }); + } + use(req, res, next) { + const contentType = req.headers['content-type'] || ''; + if (!contentType.includes('application/xml') && !contentType.includes('text/xml')) { + return next(); + } + common_1.Logger.debug(`收到XML请求 - Content-Type: ${contentType}`, 'FastXmlMiddleware'); + getRawBody(req, { + length: req.headers['content-length'], + limit: '1mb', + encoding: true, + }) + .then(rawBody => { + common_1.Logger.debug(`原始XML内容: ${rawBody}`, 'FastXmlMiddleware'); + try { + const parsedXml = this.xmlParser.parse(rawBody); + common_1.Logger.debug(`XML解析结果: ${JSON.stringify(parsedXml, null, 2)}`, 'FastXmlMiddleware'); + req.body = parsedXml.xml ? { xml: parsedXml.xml } : parsedXml; + common_1.Logger.debug(`解析后的req.body结构已设置`, 'FastXmlMiddleware'); + next(); + } + catch (parseError) { + common_1.Logger.error(`XML解析错误: ${parseError.message}`, 'FastXmlMiddleware'); + next(parseError); + } + }) + .catch(error => { + common_1.Logger.error(`获取请求体错误: ${error.message}`, 'FastXmlMiddleware'); + next(error); + }); + } +}; +exports.FastXmlMiddleware = FastXmlMiddleware; +exports.FastXmlMiddleware = FastXmlMiddleware = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", []) +], FastXmlMiddleware); + + +/***/ }), +/* 11 */ +/***/ ((module) => { + +module.exports = require("fast-xml-parser"); + +/***/ }), +/* 12 */ +/***/ ((module) => { + +module.exports = require("raw-body"); + +/***/ }), +/* 13 */ +/***/ ((module) => { + +module.exports = require("@nestjs/core"); + +/***/ }), +/* 14 */ +/***/ ((module) => { + +module.exports = require("@nestjs/swagger"); + +/***/ }), +/* 15 */ +/***/ ((module) => { + +module.exports = require("compression"); + +/***/ }), +/* 16 */ +/***/ ((module) => { + +module.exports = require("crypto"); + +/***/ }), +/* 17 */ +/***/ ((module) => { + +module.exports = require("dotenv"); + +/***/ }), +/* 18 */ +/***/ ((module) => { + +module.exports = require("fs"); + +/***/ }), +/* 19 */ +/***/ ((module) => { + +module.exports = require("ioredis"); + +/***/ }), +/* 20 */ +/***/ ((module) => { + +module.exports = require("path"); + +/***/ }), +/* 21 */ +/***/ ((module) => { + +module.exports = require("reflect-metadata"); + +/***/ }), +/* 22 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AppModule = void 0; +const abort_interceptor_1 = __webpack_require__(23); +const custom_logger_service_1 = __webpack_require__(8); +const rate_limit_module_1 = __webpack_require__(25); +const common_1 = __webpack_require__(2); +const core_1 = __webpack_require__(13); +const serve_static_1 = __webpack_require__(31); +const path_1 = __webpack_require__(20); +const app_module_1 = __webpack_require__(32); +const auth_module_1 = __webpack_require__(119); +const autoReply_module_1 = __webpack_require__(133); +const badWords_module_1 = __webpack_require__(141); +const chat_module_1 = __webpack_require__(151); +const chatGroup_module_1 = __webpack_require__(171); +const chatLog_module_1 = __webpack_require__(176); +const crami_module_1 = __webpack_require__(187); +const database_module_1 = __webpack_require__(199); +const globalConfig_module_1 = __webpack_require__(204); +const models_module_1 = __webpack_require__(208); +const official_module_1 = __webpack_require__(214); +const order_module_1 = __webpack_require__(219); +const pay_module_1 = __webpack_require__(226); +const plugin_module_1 = __webpack_require__(228); +const redisCache_module_1 = __webpack_require__(26); +const share_module_1 = __webpack_require__(231); +const signin_module_1 = __webpack_require__(234); +const spa_module_1 = __webpack_require__(237); +const statistic_module_1 = __webpack_require__(239); +const task_module_1 = __webpack_require__(243); +const upload_module_1 = __webpack_require__(246); +const user_module_1 = __webpack_require__(122); +const userBalance_module_1 = __webpack_require__(249); +const verification_module_1 = __webpack_require__(251); +let AppModule = class AppModule { + configure(consumer) { + consumer; + } +}; +exports.AppModule = AppModule; +exports.AppModule = AppModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [ + database_module_1.DatabaseModule, + rate_limit_module_1.RateLimitModule, + serve_static_1.ServeStaticModule.forRoot({ + rootPath: (0, path_1.join)(__dirname, '..', 'public/admin'), + serveRoot: process.env.ADMIN_SERVE_ROOT || '/admin', + }, { + rootPath: (0, path_1.join)(__dirname, '..', 'public/file'), + serveRoot: '/file', + serveStaticOptions: { + setHeaders: (_res, _path, _stat) => { + _res.set('Access-Control-Allow-Origin', '*'); + }, + }, + }, { + rootPath: (0, path_1.join)(__dirname, '..', 'public/chat'), + serveRoot: '/', + serveStaticOptions: { + index: false, + fallthrough: true, + redirect: false, + extensions: ['html', 'htm'], + setHeaders: (_res, _path, _stat) => { + if (_path.endsWith('.js')) { + _res.set('Content-Type', 'application/javascript'); + } + else if (_path.endsWith('.css')) { + _res.set('Content-Type', 'text/css'); + } + }, + }, + }), + user_module_1.UserModule, + plugin_module_1.PluginModule, + auth_module_1.AuthModule, + verification_module_1.VerificationModule, + chat_module_1.ChatModule, + app_module_1.AppModule, + crami_module_1.CramiModule, + userBalance_module_1.UserBalanceModule, + chatLog_module_1.ChatLogModule, + upload_module_1.UploadModule, + redisCache_module_1.RedisCacheModule, + globalConfig_module_1.GlobalConfigModule, + statistic_module_1.StatisticModule, + badWords_module_1.BadWordsModule, + autoReply_module_1.AutoReplyModule, + pay_module_1.PayModule, + order_module_1.OrderModule, + official_module_1.OfficialModule, + task_module_1.TaskModule, + chatGroup_module_1.ChatGroupModule, + signin_module_1.SigninModule, + models_module_1.ModelsModule, + share_module_1.ShareModule, + spa_module_1.SpaModule, + ], + providers: [ + { + provide: core_1.APP_INTERCEPTOR, + useClass: abort_interceptor_1.AbortInterceptor, + }, + custom_logger_service_1.CustomLoggerService, + ], + exports: [custom_logger_service_1.CustomLoggerService], + }) +], AppModule); + + +/***/ }), +/* 23 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AbortInterceptor = void 0; +const common_1 = __webpack_require__(2); +const abort_controller_1 = __webpack_require__(24); +let AbortInterceptor = class AbortInterceptor { + intercept(context, next) { + const request = context.switchToHttp().getRequest(); + const abortController = new abort_controller_1.AbortController(); + request.abortController = abortController; + return next.handle(); + } +}; +exports.AbortInterceptor = AbortInterceptor; +exports.AbortInterceptor = AbortInterceptor = __decorate([ + (0, common_1.Injectable)() +], AbortInterceptor); + + +/***/ }), +/* 24 */ +/***/ ((module) => { + +module.exports = require("abort-controller"); + +/***/ }), +/* 25 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RateLimitModule = void 0; +const common_1 = __webpack_require__(2); +const redisCache_module_1 = __webpack_require__(26); +const rate_limit_middleware_1 = __webpack_require__(29); +const rate_limit_service_1 = __webpack_require__(30); +let RateLimitModule = class RateLimitModule { + rateLimitService; + constructor(rateLimitService) { + this.rateLimitService = rateLimitService; + } + async onModuleInit() { + this.rateLimitService.getConfigs(); + } + configure(consumer) { + consumer.apply(rate_limit_middleware_1.RateLimitMiddleware).forRoutes('*'); + } +}; +exports.RateLimitModule = RateLimitModule; +exports.RateLimitModule = RateLimitModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [redisCache_module_1.RedisCacheModule], + providers: [rate_limit_service_1.RateLimitService, rate_limit_middleware_1.RateLimitMiddleware], + exports: [rate_limit_service_1.RateLimitService], + }), + __metadata("design:paramtypes", [typeof (_a = typeof rate_limit_service_1.RateLimitService !== "undefined" && rate_limit_service_1.RateLimitService) === "function" ? _a : Object]) +], RateLimitModule); + + +/***/ }), +/* 26 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RedisCacheModule = void 0; +const common_1 = __webpack_require__(2); +const redis_1 = __webpack_require__(27); +const redisCache_service_1 = __webpack_require__(28); +let RedisCacheModule = class RedisCacheModule { +}; +exports.RedisCacheModule = RedisCacheModule; +exports.RedisCacheModule = RedisCacheModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [], + providers: [ + { + provide: 'REDIS_CLIENT', + useFactory: async () => { + const host = process.env.REDIS_HOST; + const port = parseInt(process.env.REDIS_PORT, 10); + const password = process.env.REDIS_PASSWORD; + const username = process.env.REDIS_USER; + const database = parseInt(process.env.REDIS_DB, 10) || 0; + if (!host || !port) { + common_1.Logger.error(`Please configure Redis config | 未配置 Redis 配置信息,请确认配置 Redis 服务以获得更好的体验`, 'RedisCacheModule'); + return; + } + const client = (0, redis_1.createClient)({ + socket: { + host, + port, + }, + username, + password, + database, + }); + client.on('ready', () => { + common_1.Logger.log(`Redis connection successful`, 'RedisCacheModule'); + }); + client.on('error', err => { + common_1.Logger.error(`Redis connection failed: ${err}`, 'RedisCacheModule'); + }); + await client.connect(); + return client; + }, + }, + redisCache_service_1.RedisCacheService, + ], + exports: ['REDIS_CLIENT', redisCache_service_1.RedisCacheService], + }) +], RedisCacheModule); + + +/***/ }), +/* 27 */ +/***/ ((module) => { + +module.exports = require("redis"); + +/***/ }), +/* 28 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RedisCacheService = void 0; +const common_1 = __webpack_require__(2); +const redis_1 = __webpack_require__(27); +let RedisCacheService = class RedisCacheService { + redisClient; + constructor(redisClient) { + this.redisClient = redisClient; + } + async get(body) { + const { key } = body; + const res = await this.redisClient.get(key); + return await this.redisClient.get(key); + } + async set(body, timeout = 3600) { + const { key, val } = body; + return await this.redisClient.set(key, val, { EX: timeout }); + } + async getJwtSecret() { + const secret = await this.redisClient.get('JWT_SECRET'); + if (!secret) { + throw new Error('JWT secret not found in Redis'); + } + return secret; + } + async ttl(key) { + return await this.redisClient.ttl(key); + } + async del(body) { + const { key } = body; + await this.redisClient.del(key); + return; + } + async saveToken(userId, token) { + const maxDevices = 2; + let tokens = await this.redisClient.zRange(`tokens:${userId}`, 0, -1); + if (tokens.includes(token)) { + await this.redisClient.zRem(`tokens:${userId}`, token); + tokens = await this.redisClient.zRange(`tokens:${userId}`, 0, -1); + } + while (tokens.length >= maxDevices) { + const oldestToken = await this.redisClient.zRange(`tokens:${userId}`, 0, 0); + if (oldestToken.length > 0) { + await this.redisClient.zRem(`tokens:${userId}`, oldestToken[0]); + tokens = await this.redisClient.zRange(`tokens:${userId}`, 0, -1); + } + else { + break; + } + } + await this.redisClient.zAdd(`tokens:${userId}`, [ + { + score: Date.now(), + value: token, + }, + ]); + } + async invalidateTokens(userId, tokens) { + tokens.forEach(token => { + this.redisClient.del(`token:${userId}:${token}`); + this.redisClient.zRem(`tokens:${userId}`, token); + }); + } + async checkTokenAuth(token, req) { + const { id: userId, role } = req.user; + const maxDevices = 2; + if (role === 'visitor') + return true; + if (['super', 'admin'].includes(role)) + return true; + let tokens = await this.redisClient.zRange(`tokens:${userId}`, 0, -1); + if (!tokens.includes(token)) { + throw new common_1.HttpException('您的登录已失效(可能由于其他设备登录),请重新登录!', common_1.HttpStatus.UNAUTHORIZED); + } + while (tokens.length > maxDevices) { + const oldestToken = await this.redisClient.zRange(`tokens:${userId}`, 0, 0); + if (oldestToken.length > 0 && oldestToken[0] !== token) { + await this.redisClient.zRem(`tokens:${userId}`, oldestToken[0]); + tokens = await this.redisClient.zRange(`tokens:${userId}`, 0, -1); + } + else { + break; + } + } + return true; + } + async keys(pattern) { + try { + const keys = await this.redisClient.keys(pattern); + return keys; + } + catch (error) { + console.error(`Error getting keys with pattern ${pattern}:`, error); + return []; + } + } +}; +exports.RedisCacheService = RedisCacheService; +exports.RedisCacheService = RedisCacheService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, common_1.Inject)('REDIS_CLIENT')), + __metadata("design:paramtypes", [typeof (_a = typeof redis_1.RedisClientType !== "undefined" && redis_1.RedisClientType) === "function" ? _a : Object]) +], RedisCacheService); + + +/***/ }), +/* 29 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RateLimitMiddleware = void 0; +const common_1 = __webpack_require__(2); +const redisCache_service_1 = __webpack_require__(28); +const rate_limit_service_1 = __webpack_require__(30); +let RateLimitMiddleware = class RateLimitMiddleware { + redisCacheService; + rateLimitService; + constructor(redisCacheService, rateLimitService) { + this.redisCacheService = redisCacheService; + this.rateLimitService = rateLimitService; + } + async onModuleInit() { + this.rateLimitService.getConfigs(); + } + async use(req, res, next) { + try { + const path = req.path; + const configs = this.rateLimitService.getConfigs(); + const matchedConfig = this.findMatchingConfig(path, configs); + if (!matchedConfig) { + return next(); + } + const ip = req.ip || req.socket.remoteAddress; + const identifier = ip || 'unknown'; + const redisKey = `rate-limit:${matchedConfig.path}:${identifier}`; + const result = await this.redisCacheService.get({ key: redisKey }); + let currentCount = result ? parseInt(result, 10) : 0; + currentCount++; + const windowSeconds = Math.floor(matchedConfig.windowMs / 1000); + await this.redisCacheService.set({ key: redisKey, val: currentCount.toString() }, windowSeconds); + res.setHeader('X-RateLimit-Limit', matchedConfig.maxRequests.toString()); + res.setHeader('X-RateLimit-Remaining', Math.max(0, matchedConfig.maxRequests - currentCount).toString()); + res.setHeader('X-RateLimit-Reset', Math.floor(Date.now() + matchedConfig.windowMs).toString()); + res.setHeader('X-RateLimit-Config-Path', matchedConfig.path); + if (currentCount > matchedConfig.maxRequests) { + common_1.Logger.warn(`限流: IP=${identifier}, 路径=${path}, 计数=${currentCount}/${matchedConfig.maxRequests}`, 'RateLimitMiddleware'); + res.status(429).json({ + code: 1, + message: '请求频率超过限制,请稍后再试', + data: null, + }); + return; + } + next(); + } + catch (error) { + common_1.Logger.error(`中间件错误: ${error.message}`, error.stack, 'RateLimitMiddleware'); + next(); + } + } + findMatchingConfig(requestPath, configs) { + for (const config of configs) { + const isMatch = this.pathMatch(config.path, requestPath); + if (isMatch) { + return config; + } + } + return null; + } + pathMatch(pattern, path) { + if (pattern === path) { + return true; + } + if (pattern.includes('*')) { + try { + const escapedPattern = pattern + .replace(/\./g, '\\.') + .replace(/\//g, '\\/') + .replace(/\*\*/g, '.*') + .replace(/\*/g, '[^\\/]*'); + const regexPattern = new RegExp(`^${escapedPattern}$`); + return regexPattern.test(path); + } + catch (error) { + common_1.Logger.error(`路径匹配错误: ${error.message}`, error.stack, 'RateLimitMiddleware'); + return false; + } + } + return false; + } +}; +exports.RateLimitMiddleware = RateLimitMiddleware; +exports.RateLimitMiddleware = RateLimitMiddleware = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof redisCache_service_1.RedisCacheService !== "undefined" && redisCache_service_1.RedisCacheService) === "function" ? _a : Object, typeof (_b = typeof rate_limit_service_1.RateLimitService !== "undefined" && rate_limit_service_1.RateLimitService) === "function" ? _b : Object]) +], RateLimitMiddleware); + + +/***/ }), +/* 30 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RateLimitService = void 0; +const common_1 = __webpack_require__(2); +let RateLimitService = class RateLimitService { + configs = []; + constructor() { + this.initializeConfigs(); + } + async onModuleInit() { } + initializeConfigs() { + this.addConfig({ + path: '/api/upload/file', + maxRequests: 100, + windowMs: 60 * 60 * 1000, + }); + this.addConfig({ + path: '/api/chatgpt/chat-process', + maxRequests: 1000, + windowMs: 60 * 60 * 1000, + }); + this.addConfig({ + path: '/api/pay', + maxRequests: 600, + windowMs: 60 * 60 * 1000, + }); + this.addConfig({ + path: '/api/*', + maxRequests: 3600, + windowMs: 60 * 60 * 1000, + }); + } + getConfigs() { + return this.configs; + } + addConfig(config) { + if (config.path && !config.path.startsWith('/')) { + config.path = `/${config.path}`; + } + const existingIndex = this.configs.findIndex(c => c.path === config.path); + if (existingIndex >= 0) { + this.configs[existingIndex] = { ...config }; + } + else { + this.configs.push({ ...config }); + } + this.sortConfigs(); + } + sortConfigs() { + this.configs.sort((a, b) => { + const aIsWildcard = a.path.includes('*'); + const bIsWildcard = b.path.includes('*'); + if (aIsWildcard && !bIsWildcard) { + return 1; + } + if (!aIsWildcard && bIsWildcard) { + return -1; + } + return b.path.length - a.path.length; + }); + } +}; +exports.RateLimitService = RateLimitService; +exports.RateLimitService = RateLimitService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", []) +], RateLimitService); + + +/***/ }), +/* 31 */ +/***/ ((module) => { + +module.exports = require("@nestjs/serve-static"); + +/***/ }), +/* 32 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AppModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const userBalance_service_1 = __webpack_require__(34); +const app_controller_1 = __webpack_require__(85); +const app_entity_1 = __webpack_require__(106); +const app_service_1 = __webpack_require__(105); +const appCats_entity_1 = __webpack_require__(107); +const userApps_entity_1 = __webpack_require__(108); +let AppModule = class AppModule { +}; +exports.AppModule = AppModule; +exports.AppModule = AppModule = __decorate([ + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([appCats_entity_1.AppCatsEntity, app_entity_1.AppEntity, userApps_entity_1.UserAppsEntity])], + controllers: [app_controller_1.AppController], + providers: [app_service_1.AppService, userBalance_service_1.UserBalanceService], + }) +], AppModule); + + +/***/ }), +/* 33 */ +/***/ ((module) => { + +module.exports = require("@nestjs/typeorm"); + +/***/ }), +/* 34 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserBalanceService = void 0; +const balance_constant_1 = __webpack_require__(35); +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const cramiPackage_entity_1 = __webpack_require__(71); +const config_entity_1 = __webpack_require__(73); +const globalConfig_service_1 = __webpack_require__(74); +const accountLog_entity_1 = __webpack_require__(79); +const balance_entity_1 = __webpack_require__(80); +const userBalance_entity_1 = __webpack_require__(81); +const date_1 = __webpack_require__(47); +const chatGroup_entity_1 = __webpack_require__(82); +const chatLog_entity_1 = __webpack_require__(75); +const user_entity_1 = __webpack_require__(83); +const fingerprint_entity_1 = __webpack_require__(84); +let UserBalanceService = class UserBalanceService { + balanceEntity; + userBalanceEntity; + accountLogEntity; + cramiPackageEntity; + configEntity; + userEntity; + fingerprintLogEntity; + chatGroupEntity; + chatLogEntity; + globalConfigService; + constructor(balanceEntity, userBalanceEntity, accountLogEntity, cramiPackageEntity, configEntity, userEntity, fingerprintLogEntity, chatGroupEntity, chatLogEntity, globalConfigService) { + this.balanceEntity = balanceEntity; + this.userBalanceEntity = userBalanceEntity; + this.accountLogEntity = accountLogEntity; + this.cramiPackageEntity = cramiPackageEntity; + this.configEntity = configEntity; + this.userEntity = userEntity; + this.fingerprintLogEntity = fingerprintLogEntity; + this.chatGroupEntity = chatGroupEntity; + this.chatLogEntity = chatLogEntity; + this.globalConfigService = globalConfigService; + } + async addBalanceToNewUser(userId) { + try { + const registerConfigs = await this.configEntity.find({ + where: { + configKey: (0, typeorm_2.In)([ + 'registerSendStatus', + 'registerSendModel3Count', + 'registerSendModel4Count', + 'registerSendDrawMjCount', + 'firstRegisterSendStatus', + 'firstRegisterSendRank', + 'firstRegisterSendModel3Count', + 'firstRegisterSendModel4Count', + 'firstRegisterSendDrawMjCount', + ]), + }, + }); + const configMap = registerConfigs.reduce((pre, cur) => { + const num = Number(cur.configVal); + const n = Number.isInteger(num) && num > 0 ? num : 0; + pre[cur.configKey] = n; + return pre; + }, {}); + let model3Count = 0; + let model4Count = 0; + let drawMjCount = 0; + if (configMap.registerSendStatus === 1) { + model3Count = model3Count + configMap.registerSendModel3Count; + model4Count = model4Count + configMap.registerSendModel4Count; + drawMjCount = drawMjCount + configMap.registerSendDrawMjCount; + } + if (configMap.registerSendStatus === 1 && + configMap.firstRegisterSendStatus === 1 && + userId <= configMap.firstRegisterSendRank) { + model3Count = model3Count + configMap.firstRegisterSendModel3Count; + model4Count = model4Count + configMap.firstRegisterSendModel4Count; + drawMjCount = drawMjCount + configMap.firstRegisterSendDrawMjCount; + } + await this.saveRecordRechargeLog({ + userId, + rechargeType: balance_constant_1.RechargeType.REG_GIFT, + model3Count, + drawMjCount, + model4Count, + }); + await this.userBalanceEntity.save({ + userId, + model3Count, + model4Count, + drawMjCount, + useTokens: 0, + }); + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException('注册赠送失败,请联系管理员!', common_1.HttpStatus.BAD_REQUEST); + } + } + async validateBalance(req, type, amount) { + const { id: userId, role } = req.user; + let b = await this.userBalanceEntity.findOne({ where: { userId } }); + if (!b) { + b = await this.createBaseUserBalance(userId); + } + if (role === 'visitor') { + return this.validateVisitorBalance(req, type, amount); + } + const memberKey = type === 1 + ? 'memberModel3Count' + : type === 2 + ? 'memberModel4Count' + : type === 3 + ? 'memberDrawMjCount' + : null; + const baseKey = type === 1 ? 'model3Count' : type === 2 ? 'model4Count' : type === 3 ? 'drawMjCount' : null; + if (b.packageId && b[memberKey] + b[baseKey] < amount) { + if (b[baseKey] < amount) { + throw new common_1.HttpException(`积分不足,继续体验服务,请按需选购套餐!`, common_1.HttpStatus.PAYMENT_REQUIRED); + } + } + if (!b.packageId && b[baseKey] < amount) { + throw new common_1.HttpException(`积分不足,继续体验服务,请按需选购套餐!`, common_1.HttpStatus.PAYMENT_REQUIRED); + } + return b; + } + async validateVisitorBalance(req, type, amount) { + const { id } = req.user; + const baseKey = type === 1 ? 'model3Count' : type === 2 ? 'model4Count' : type === 3 ? 'drawMjCount' : null; + const now = new Date(); + const log = await this.fingerprintLogEntity.findOne({ + where: { fingerprint: id }, + }); + const { visitorModel3Num, visitorModel4Num, visitorMJNum } = await this.globalConfigService.getConfigs([ + 'visitorModel3Num', + 'visitorModel4Num', + 'visitorMJNum', + ]); + const settings = { + model3Count: visitorModel3Num ? Number(visitorModel3Num) : 0, + model4Count: visitorModel4Num ? Number(visitorModel4Num) : 0, + drawMjCount: visitorMJNum ? Number(visitorMJNum) : 0, + }; + if (!log) { + const data = { + fingerprint: id, + model3Count: 0, + model4Count: 0, + drawMjCount: 0, + }; + data[baseKey] = data[baseKey] + amount; + if (data[baseKey] > settings[baseKey]) { + throw new common_1.HttpException(`今日体验额度使用完毕,请注册使用完整服务!`, common_1.HttpStatus.PAYMENT_REQUIRED); + } + else { + await this.fingerprintLogEntity.save(data); + return true; + } + } + else { + const { model3Count, model4Count, drawMjCount } = log; + let data = { + model3Count, + model4Count, + drawMjCount, + }; + const date = Number(new Date(log.updatedAt)); + const isUpdateLastDay = this.isUpdatedToday(date); + if (isUpdateLastDay) { + data[baseKey] = data[baseKey] + amount; + } + else { + data = { + model3Count: 0, + model4Count: 0, + drawMjCount: 0, + }; + data[baseKey] = data[baseKey] + amount; + } + if (data[baseKey] > settings[baseKey]) { + throw new common_1.HttpException(`今日体验额度使用完毕,请注册使用完整服务!`, common_1.HttpStatus.PAYMENT_REQUIRED); + } + else { + await this.fingerprintLogEntity.update({ fingerprint: id }, data); + return true; + } + } + } + isUpdatedToday(date) { + const now = new Date(); + const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()); + return date >= todayStart; + } + async deductFromBalance(userId, deductionType, amount, UseAmount = 0) { + const b = await this.userBalanceEntity.findOne({ where: { userId } }); + if (!b) { + throw new common_1.HttpException('缺失当前用户账户记录!', common_1.HttpStatus.BAD_REQUEST); + } + const keys = { + 1: { + member: 'memberModel3Count', + nonMember: 'model3Count', + token: 'useModel3Token', + }, + 2: { + member: 'memberModel4Count', + nonMember: 'model4Count', + token: 'useModel4Token', + }, + 3: { + member: 'memberDrawMjCount', + nonMember: 'drawMjCount', + token: 'useDrawMjToken', + }, + }; + const { member, nonMember, token } = keys[deductionType]; + let remainingAmount = amount; + const newMemberBalance = Math.max(b[member] - remainingAmount, 0); + remainingAmount -= b[member] - newMemberBalance; + let newNonMemberBalance = b[nonMember]; + if (remainingAmount > 0) { + newNonMemberBalance = Math.max(b[nonMember] - remainingAmount, 0); + remainingAmount -= b[nonMember] - newNonMemberBalance; + } + const updateBalance = { + [member]: newMemberBalance, + [nonMember]: newNonMemberBalance, + [token]: (b[token] || 0) + UseAmount, + }; + if (token === 'useModel3Token' || token === 'useModel4Token') { + updateBalance[token.replace('Token', 'Count')] = + (b[token.replace('Token', 'Count')] || 0) + amount; + } + const result = await this.userBalanceEntity.update({ userId }, updateBalance); + if (result.affected === 0) { + throw new common_1.HttpException('消费余额失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async queryUserBalance(userId) { + try { + const res = await this.userBalanceEntity.findOne({ + where: { userId }, + select: [ + 'packageId', + 'model3Count', + 'model4Count', + 'drawMjCount', + 'memberModel3Count', + 'memberModel4Count', + 'memberDrawMjCount', + 'useModel3Count', + 'useModel4Count', + 'useModel3Token', + 'useModel4Token', + 'useDrawMjToken', + 'expirationTime', + ], + }); + if (!res) { + const user = await this.createBaseUserBalance(userId); + if (user) { + return await this.queryUserBalance(userId); + } + else { + throw new common_1.HttpException('查询当前用户余额失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + res.sumModel3Count = res.packageId + ? res.model3Count + res.memberModel3Count + : res.model3Count; + res.sumModel4Count = res.packageId + ? res.model4Count + res.memberModel4Count + : res.model4Count; + res.sumDrawMjCount = res.packageId + ? res.drawMjCount + res.memberDrawMjCount + : res.drawMjCount; + res.expirationTime = res.expirationTime ? (0, date_1.formatDate)(res.expirationTime, 'YYYY-MM-DD') : null; + return res; + } + catch (error) { + console.log('error: ', error); + } + } + async saveRecordRechargeLog(logInfo) { + const { userId, rechargeType, model3Count, model4Count, drawMjCount, days = -1, pkgName = '', extent = '', } = logInfo; + if (!userId) { + throw new common_1.HttpException('当前用户不存在,记录充值日志异常', common_1.HttpStatus.BAD_REQUEST); + } + const uid = (0, utils_1.createRandomUid)(); + return await this.accountLogEntity.save({ + userId, + rechargeType, + model3Count, + model4Count, + drawMjCount, + days, + extent, + uid, + pkgName, + }); + } + async createBaseUserBalance(userId, userBalanceInfo = {}) { + const { model3Count = 0, model4Count = 0, drawMjCount = 0 } = userBalanceInfo; + const balance = await this.userBalanceEntity.findOne({ where: { userId } }); + if (balance) { + throw new common_1.HttpException('当前用户无需创建账户信息!', common_1.HttpStatus.BAD_REQUEST); + } + return await this.userBalanceEntity.save({ + userId, + model3Count, + model4Count, + drawMjCount, + }); + } + async addBalanceToUser(userId, balance, days = -1) { + try { + const userBalanceInfo = (await this.userBalanceEntity.findOne({ where: { userId } })) || + (await this.createBaseUserBalance(userId)); + if (!userBalanceInfo) { + throw new common_1.HttpException('查询用户账户信息失败!', common_1.HttpStatus.BAD_REQUEST); + } + const { model3Count, model4Count, drawMjCount, memberModel3Count, memberModel4Count, memberDrawMjCount, appCats, } = userBalanceInfo; + let params = {}; + if (days > 0) { + const { packageId } = balance; + if (!packageId) { + throw new common_1.HttpException('缺失当前套餐ID、充值失败!', common_1.HttpStatus.BAD_REQUEST); + } + const pkgInfo = await this.cramiPackageEntity.findOne({ + where: { id: packageId }, + }); + if (!pkgInfo) { + throw new common_1.HttpException('当前套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const { weight } = pkgInfo; + let newApps = ''; + if (balance.appCats) { + if (!appCats) { + newApps = balance.appCats; + } + else { + newApps = appCats + ',' + balance.appCats; + } + } + else { + newApps = appCats || ''; + } + if (!userBalanceInfo.packageId) { + params = { + memberModel3Count: memberModel3Count + balance.model3Count, + memberModel4Count: memberModel4Count + balance.model4Count, + memberDrawMjCount: memberDrawMjCount + balance.drawMjCount, + expirationTime: (0, date_1.default)() + .add(days > 0 ? days : 0, 'day') + .format('YYYY-MM-DD HH:mm:ss'), + packageId: packageId, + appCats: newApps, + }; + } + else { + const curPackageInfo = await this.cramiPackageEntity.findOne({ + where: { id: userBalanceInfo.packageId }, + }); + if (weight >= curPackageInfo.weight) { + params = { + memberModel3Count: memberModel3Count + balance.model3Count, + memberModel4Count: memberModel4Count + balance.model4Count, + memberDrawMjCount: memberDrawMjCount + balance.drawMjCount, + expirationTime: (0, date_1.default)(userBalanceInfo.expirationTime) + .add(days > 0 ? days : 0, 'day') + .format('YYYY-MM-DD HH:mm:ss'), + packageId: packageId, + appCats: newApps, + }; + } + if (weight < curPackageInfo.weight) { + params = { + memberModel3Count: memberModel3Count + balance.model3Count, + memberModel4Count: memberModel4Count + balance.model4Count, + memberDrawMjCount: memberDrawMjCount + balance.drawMjCount, + appCats: newApps, + }; + } + } + } + if (days <= 0) { + let newApps = ''; + if (balance.appCats) { + if (!appCats) { + newApps = balance.appCats; + } + else { + newApps = appCats + ',' + balance.appCats; + } + params = { + model3Count: model3Count + balance.model3Count, + model4Count: model4Count + balance.model4Count, + drawMjCount: drawMjCount + balance.drawMjCount, + appCats: newApps, + }; + } + else { + params = { + model3Count: model3Count + balance.model3Count, + model4Count: model4Count + balance.model4Count, + drawMjCount: drawMjCount + balance.drawMjCount, + }; + } + } + const result = await this.userBalanceEntity.update({ userId }, params); + if (result.affected === 0) { + throw new common_1.HttpException(`${userId}充值失败`, common_1.HttpStatus.BAD_REQUEST); + } + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException('用户充值失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async addBalanceToOrder(order) { + console.log('充值的工单信息:', order); + try { + const { userId, goodsId } = order; + const pkg = await this.cramiPackageEntity.findOne({ + where: { id: order.goodsId, status: 1 }, + }); + if (!pkg) { + throw new common_1.HttpException('非法操作、当前充值套餐暂不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const { model3Count, model4Count, drawMjCount, days, name: pkgName, appCats } = pkg; + const money = { + model3Count, + model4Count, + drawMjCount, + days, + packageId: order.goodsId, + appCats, + }; + await this.addBalanceToUser(userId, money, days); + await this.saveRecordRechargeLog({ + userId, + rechargeType: balance_constant_1.RechargeType.SCAN_PAY, + model3Count, + model4Count, + drawMjCount, + pkgName, + days, + }); + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException('充值失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async getRechargeLog(req, params) { + const { page = 1, size = 20 } = params; + const { id } = req.user; + const [rows, count] = await this.accountLogEntity.findAndCount({ + where: { userId: id }, + order: { id: 'DESC' }, + skip: (page - 1) * size, + take: size, + }); + rows.forEach((item) => { + item.expireDateCn = item.days > 0 ? `${item.days}天` : '永久'; + }); + return { rows: (0, date_1.formatCreateOrUpdateDate)(rows), count }; + } + async getAccountLog(req, params) { + try { + const { page = 1, size = 10, userId, rechargeType, packageId } = params; + const { role } = req.user; + const where = {}; + rechargeType && (where.rechargeType = rechargeType); + where.userId = userId || (0, typeorm_2.LessThan)(100000); + packageId && (where.packageId = { $like: `%${packageId}%` }); + const [rows, count] = await this.accountLogEntity.findAndCount({ + where, + order: { id: 'DESC' }, + skip: (page - 1) * size, + take: size, + }); + const userIds = rows.map((item) => item.userId); + const userInfo = await this.userEntity.find({ + where: { id: (0, typeorm_2.In)(userIds) }, + }); + rows.forEach((item) => { + const user = userInfo.find((user) => user.id === item.userId); + item.username = user?.username; + item.email = user?.email; + item.phone = user?.phone; + item.status = user?.status; + item.avatar = user?.avatar; + }); + if (role !== 'super') { + rows.forEach((item) => { + item.email = item.email ? (0, utils_1.hideString)(item.email) : ''; + item.phone = item.phone ? (0, utils_1.hideString)(item.phone) : ''; + }); + } + return { rows, count }; + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException('查询用户账户失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async queryUserBalanceByIds(ids) { + return await this.userBalanceEntity.find({ where: { userId: (0, typeorm_2.In)(ids) } }); + } + async refundMjBalance(userId, amount) { + return await this.deductFromBalance(userId, 'mjDraw', -amount); + } + async inheritVisitorData(req) { + const { fingerprint } = req.headers; + const { id: userId } = req.user; + await this.chatLogEntity.update({ userId: Number(fingerprint) }, { userId }); + await this.chatGroupEntity.update({ userId: Number(fingerprint) }, { userId }); + return 1; + } + async getVisitorCount(req) { + const { fingerprint } = req.headers; + const countChat = await this.chatLogEntity.count({ + where: { userId: fingerprint }, + }); + const countChatGroup = await this.chatGroupEntity.count({ + where: { userId: fingerprint }, + }); + return countChat || countChatGroup || 0; + } + async getUserApps(userId) { + try { + const userBalance = await this.userBalanceEntity.findOne({ + where: { userId }, + select: ['packageId', 'expirationTime', 'appCats'], + }); + if (!userBalance || !userBalance.packageId) { + return []; + } + const now = new Date(); + const expirationTime = new Date(userBalance.expirationTime); + if (expirationTime && expirationTime > now) { + return userBalance.appCats?.split(',') || []; + } + return []; + } + catch (error) { + console.log('检查用户会员状态出错: ', error); + return []; + } + } + async checkUserCertification(userId) { + const userInfo = await this.userEntity.findOne({ + where: { id: userId }, + }); + const userBalance = await this.userBalanceEntity.findOne({ + where: { userId }, + }); + if (!userInfo || !userBalance) { + return; + } + const { phoneValidationMessageCount, identityVerificationMessageCount, openIdentity, openPhoneValidation, } = await this.globalConfigService.getConfigs([ + 'phoneValidationMessageCount', + 'identityVerificationMessageCount', + 'openIdentity', + 'openPhoneValidation', + ]); + const phoneValidationCount = Number(phoneValidationMessageCount); + const identityValidationCount = Number(identityVerificationMessageCount); + const model3Count = Number(userBalance.useModel3Count) || 0; + const model4Count = Number(userBalance.useModel4Count) || 0; + const totalTokens = model3Count + model4Count; + if (openPhoneValidation === '1' && totalTokens >= phoneValidationCount && !userInfo.phone) { + throw new common_1.HttpException('请完成手机号绑定', common_1.HttpStatus.BAD_REQUEST); + } + if (openIdentity === '1' && + totalTokens >= identityValidationCount && + (!userInfo.realName || !userInfo.idCard)) { + throw new common_1.HttpException('请完成实名认证', common_1.HttpStatus.BAD_REQUEST); + } + } +}; +exports.UserBalanceService = UserBalanceService; +exports.UserBalanceService = UserBalanceService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(balance_entity_1.BalanceEntity)), + __param(1, (0, typeorm_1.InjectRepository)(userBalance_entity_1.UserBalanceEntity)), + __param(2, (0, typeorm_1.InjectRepository)(accountLog_entity_1.AccountLogEntity)), + __param(3, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)), + __param(4, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), + __param(5, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), + __param(6, (0, typeorm_1.InjectRepository)(fingerprint_entity_1.FingerprintLogEntity)), + __param(7, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)), + __param(8, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _d : Object, typeof (_e = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _e : Object, typeof (_f = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _f : Object, typeof (_g = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _g : Object, typeof (_h = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _h : Object, typeof (_j = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _j : Object, typeof (_k = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _k : Object]) +], UserBalanceService); + + +/***/ }), +/* 35 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.RechargeType = exports.ChatType = void 0; +exports.ChatType = { + NORMAL_CHAT: 1, + PAINT: 2, + EXTENDED_CHAT: 3, +}; +exports.RechargeType = { + REG_GIFT: 1, + INVITE_GIFT: 2, + REFER_GIFT: 3, + PACKAGE_GIFT: 4, + ADMIN_GIFT: 5, + SCAN_PAY: 6, + DRAW_FAIL_REFUND: 7, + SIGN_IN: 8, +}; + + +/***/ }), +/* 36 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __exportStar = (this && this.__exportStar) || function(m, exports) { + for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +__exportStar(__webpack_require__(37), exports); +__exportStar(__webpack_require__(38), exports); +__exportStar(__webpack_require__(40), exports); +__exportStar(__webpack_require__(42), exports); +__exportStar(__webpack_require__(43), exports); +__exportStar(__webpack_require__(44), exports); +__exportStar(__webpack_require__(45), exports); +__exportStar(__webpack_require__(47), exports); +__exportStar(__webpack_require__(52), exports); +__exportStar(__webpack_require__(53), exports); +__exportStar(__webpack_require__(54), exports); +__exportStar(__webpack_require__(55), exports); +__exportStar(__webpack_require__(56), exports); +__exportStar(__webpack_require__(57), exports); +__exportStar(__webpack_require__(58), exports); +__exportStar(__webpack_require__(59), exports); +__exportStar(__webpack_require__(61), exports); +__exportStar(__webpack_require__(62), exports); +__exportStar(__webpack_require__(63), exports); +__exportStar(__webpack_require__(64), exports); +__exportStar(__webpack_require__(65), exports); +__exportStar(__webpack_require__(66), exports); +__exportStar(__webpack_require__(67), exports); +__exportStar(__webpack_require__(68), exports); +__exportStar(__webpack_require__(69), exports); +__exportStar(__webpack_require__(70), exports); + + +/***/ }), +/* 37 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.encrypt = encrypt; +exports.decrypt = decrypt; +const crypto = __webpack_require__(16); +const encryptionKey = 'bf3c116f2470cb4che9071240917c171'; +const initializationVector = '518363fh72eec1v4'; +const algorithm = 'aes-256-cbc'; +function encrypt(text) { + const cipher = crypto.createCipheriv(algorithm, encryptionKey, initializationVector); + let encrypted = cipher.update(text, 'utf8', 'base64'); + encrypted += cipher.final('base64'); + return encrypted; +} +function decrypt(text) { + try { + const decipher = crypto.createDecipheriv(algorithm, encryptionKey, initializationVector); + let decrypted = decipher.update(text, 'base64', 'utf8'); + decrypted += decipher.final('utf8'); + return decrypted; + } + catch (error) { + process.exit(1); + } +} + + +/***/ }), +/* 38 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.convertUrlToBase64 = convertUrlToBase64; +const common_1 = __webpack_require__(2); +const axios_1 = __webpack_require__(39); +async function convertUrlToBase64(url) { + try { + const response = await axios_1.default.get(url, { responseType: 'arraybuffer' }); + const buffer = Buffer.from(response.data, 'binary'); + const base64Data = `data:${response.headers['content-type']};base64,${buffer.toString('base64')}`; + return base64Data; + } + catch (error) { + common_1.Logger.error('下载图片失败', error); + return url; + } +} + + +/***/ }), +/* 39 */ +/***/ ((module) => { + +module.exports = require("axios"); + +/***/ }), +/* 40 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createOrderId = createOrderId; +const uuid_1 = __webpack_require__(41); +function createOrderId() { + return (0, uuid_1.v1)().toString().replace(/-/g, ''); +} + + +/***/ }), +/* 41 */ +/***/ ((module) => { + +module.exports = require("uuid"); + +/***/ }), +/* 42 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createRandomCode = createRandomCode; +function createRandomCode() { + const min = 100000; + const max = 999999; + return Math.floor(Math.random() * (max - min + 1) + min); +} + + +/***/ }), +/* 43 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.generateRandomString = generateRandomString; +function generateRandomString() { + const length = 10; + const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + let result = ''; + for (let i = 0; i < length; i++) { + const randomIndex = Math.floor(Math.random() * characters.length); + result += characters.charAt(randomIndex); + } + return result; +} + + +/***/ }), +/* 44 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createRandomNonceStr = createRandomNonceStr; +function createRandomNonceStr(len) { + const data = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; + let str = ''; + for (let i = 0; i < len; i++) { + str += data.charAt(parseInt((Math.random() * data.length).toFixed(0), 10)); + } + return str; +} + + +/***/ }), +/* 45 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.createRandomUid = createRandomUid; +const guid_typescript_1 = __webpack_require__(46); +function createRandomUid() { + const uuid = guid_typescript_1.Guid.create(); + return uuid.toString().substr(0, 10).replace('-', ''); +} + + +/***/ }), +/* 46 */ +/***/ ((module) => { + +module.exports = require("guid-typescript"); + +/***/ }), +/* 47 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.formatDate = formatDate; +exports.formatCreateOrUpdateDate = formatCreateOrUpdateDate; +exports.isExpired = isExpired; +const dayjs = __webpack_require__(48); +__webpack_require__(49); +const b = __webpack_require__(50); +const a = __webpack_require__(51); +dayjs.locale('zh-cn'); +dayjs.extend(a); +dayjs.extend(b); +dayjs.tz.setDefault('Asia/Shanghai'); +function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') { + return dayjs(date).format(format); +} +function formatCreateOrUpdateDate(input, format = 'YYYY-MM-DD HH:mm:ss') { + if (Array.isArray(input)) { + return input.map((t) => { + t.createdAt = t?.createdAt ? dayjs(t.createdAt).format(format) : dayjs().format(format); + t.updatedAt = t?.updatedAt ? dayjs(t.updatedAt).format(format) : dayjs().format(format); + return t; + }); + } + else { + let obj = {}; + try { + obj = JSON.parse(JSON.stringify(input)); + } + catch (error) { } + obj?.createdAt && (obj.createdAt = dayjs(obj.createdAt).format(format)); + obj?.updatedAt && (obj.updatedAt = dayjs(obj.updatedAt).format(format)); + return obj; + } +} +function isExpired(createdAt, days) { + const expireDate = new Date(createdAt.getTime() + days * 24 * 60 * 60 * 1000); + const now = new Date(); + return now > expireDate; +} +exports["default"] = dayjs; + + +/***/ }), +/* 48 */ +/***/ ((module) => { + +module.exports = require("dayjs"); + +/***/ }), +/* 49 */ +/***/ ((module) => { + +module.exports = require("dayjs/locale/zh-cn"); + +/***/ }), +/* 50 */ +/***/ ((module) => { + +module.exports = require("dayjs/plugin/timezone"); + +/***/ }), +/* 51 */ +/***/ ((module) => { + +module.exports = require("dayjs/plugin/utc"); + +/***/ }), +/* 52 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.copyRightMsg = void 0; +exports.atob = atob; +function atob(str) { + return Buffer.from(str, 'base64').toString('utf-8'); +} +exports.copyRightMsg = [ + 'agxoTstMY8m+DJO89Iwy4zqcFTqlcj/Fa/erMTvn0IexetXaDttr4K/BN2+RbtfouXOeFjPDYnxOfQ+IIpuJ3PmtyHAzmlGFls/HvBDeh6EXAQ3waALbvK9Ue96soAb5/3Tv6VuZE7npISqXiYhI6Vqx4yDVYf6vUUkEO9jvVotWQkLOLkr6M/guLK6sik/ZOgHvSlDYKAv79NFJJ0Tt0WkH2SyN8l+woMiWVTOKkdE=', + 'nXdXi8UU7J5av2eDOFjxQWlZDa+3bdASE4UwpqT6B11XSCweKKuzHxmFO2wx45iVlib/V0tt+NbEcOQZtzEWKqHsREkwEb5aqVCUl2Kj4nJeEFId2iyvY6MWEV1lHtCY+htpJoyqwQJc7yeNfpTl2SLBubWk77p4AHei1QFEs1rpOOwyE79lF0RqzY/Cpzhs', + 'VjVCGib1VFp7hNynpKGQPUrX+ishpxi2u5a4txHXzk2nyUP1NZfIomEDmGhDTQ7VRJLox+8urtVG1CBBSct1v+4OA2ucAcDUFoy1H1Kl1z+dndVcNU6gz5YGnDppsxY8uGFAVGsWrDl2DIOKxk7kMURaRiQCXCHRF/3sLGyIEmE6KL9Q4kDInB6vuzBScxupFShMXTq2XrOhwRgn2elcig==', + 'ZPcz1IaPDMGI3Yn9sm4QOT0qCZo7yZbJl4/c2RTrhUKINkjGB5yb0yN5vAnLtt/o8cmpoOoH3PUSOOWQa9aKD86NWK+1r8wBOVjwXZOpp2gbB1ZJLbWvjRbENvEJxVsLROXnpNDqUXVGxFMaIt+gmEi3Rp0thqC1soXUpvM1zqU4+LkQmunR7UytvzwXEmXBlIfPwz5hv+n/lxDsw526KWixC3jLLpeijw5433Zh7cI=', + 'YPo1HNzS6p6190ku4f1PQENUBa/ip+v+6sPuQXVyAn3axo6SLKQBszNr3PAW2EzWhZLy2o+nBgr3o3IOy9OgNit1JHrCklpVp172wbGDKh8sB8HCXyJoRv3BaZVY5UhyhpV5K+4nPoM2RUwvIGONUGFPQfPQv9N8MS8UCL7UnWYcVLzxWo0ZDg+UXFRr7NhXKu7KQ7e1+Wiqm0qE+olfDVowi4pGDRGrYL154wEEJUo=', +]; + + +/***/ }), +/* 53 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.formatUrl = formatUrl; +function formatUrl(url) { + let formattedUrl = url.replace(/\s+/g, ''); + if (formattedUrl.endsWith('/')) { + formattedUrl = formattedUrl.slice(0, -1); + } + return formattedUrl; +} + + +/***/ }), +/* 54 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.generateCramiCode = generateCramiCode; +const uuid_1 = __webpack_require__(41); +function generateCramiCode() { + const code = (0, uuid_1.v4)().replace(/-/g, '').slice(0, 16); + return code; +} + + +/***/ }), +/* 55 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getClientIp = getClientIp; +function getFirstValidIp(ipString) { + const ips = ipString.split(',').map(ip => ip.trim()); + return ips.find(ip => isValidIp(ip)) || ''; +} +function isValidIp(ip) { + return /^\d{1,3}(\.\d{1,3}){3}$/.test(ip) || /^::ffff:\d{1,3}(\.\d{1,3}){3}$/.test(ip); +} +function getClientIp(req) { + const forwardedFor = req.header('x-forwarded-for'); + let clientIp = forwardedFor ? getFirstValidIp(forwardedFor) : ''; + if (!clientIp) { + clientIp = req.connection.remoteAddress || req.socket.remoteAddress || ''; + } + if (clientIp.startsWith('::ffff:')) { + clientIp = clientIp.substring(7); + } + return clientIp; +} + + +/***/ }), +/* 56 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getDiffArray = getDiffArray; +function getDiffArray(aLength, bLength, str) { + const a = Array.from({ length: aLength }, (_, i) => i + 1); + const b = Array.from({ length: bLength }, (_, i) => i + 1); + const diffArray = []; + for (let i = 0; i < a.length; i++) { + if (!b.includes(a[i])) { + diffArray.push(`${str}${a[i]}`); + } + } + return diffArray; +} + + +/***/ }), +/* 57 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getRandomItem = getRandomItem; +function getRandomItem(array) { + const randomIndex = Math.floor(Math.random() * array.length); + return array[randomIndex]; +} + + +/***/ }), +/* 58 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getRandomItemFromArray = getRandomItemFromArray; +function getRandomItemFromArray(array) { + if (array.length === 0) { + return null; + } + const randomIndex = Math.floor(Math.random() * array.length); + return array[randomIndex]; +} + + +/***/ }), +/* 59 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.getTokenCount = void 0; +const gpt_tokenizer_1 = __webpack_require__(60); +const getTokenCount = async (input) => { + let text = ''; + if (Array.isArray(input)) { + text = input.reduce((pre, cur) => { + if (Array.isArray(cur.content)) { + const contentText = cur.content + .filter((item) => item.type === 'text') + .map((item) => item.text) + .join(' '); + return pre + contentText; + } + else { + return pre + (cur.content || ''); + } + }, ''); + } + else if (typeof input === 'string') { + text = input; + } + else if (input) { + text = String(input); + } + text = text.replace(/<\|endoftext\|>/g, ''); + return (0, gpt_tokenizer_1.encode)(text).length; +}; +exports.getTokenCount = getTokenCount; + + +/***/ }), +/* 60 */ +/***/ ((module) => { + +module.exports = require("gpt-tokenizer"); + +/***/ }), +/* 61 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.handleError = handleError; +const axios_1 = __webpack_require__(39); +function handleError(error) { + let message = '发生未知错误,请稍后再试'; + if (axios_1.default.isAxiosError(error) && error.response) { + switch (error.response.status) { + case 400: + message = '发生错误:400 Bad Request - 请求因格式错误无法被服务器处理。'; + break; + case 401: + message = '发生错误:401 Unauthorized - 请求要求进行身份验证。'; + break; + case 403: + message = '发生错误:403 Forbidden - 服务器拒绝执行请求。'; + break; + case 404: + message = '发生错误:404 Not Found - 请求的资源无法在服务器上找到。'; + break; + case 500: + message = '发生错误:500 Internal Server Error - 服务器内部错误,无法完成请求。'; + break; + case 502: + message = + '发生错误:502 Bad Gateway - 作为网关或代理工作的服务器从上游服务器收到无效响应。'; + break; + case 503: + message = + '发生错误:503 Service Unavailable - 服务器暂时处于超负载或维护状态,无法处理请求。'; + break; + default: + break; + } + } + else { + message = error.message || message; + } + return message; +} + + +/***/ }), +/* 62 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.hideString = hideString; +function hideString(input, str) { + const length = input.length; + const start = input.slice(0, (length - 10) / 2); + const end = input.slice((length + 10) / 2, length); + const hidden = '*'.repeat(10); + if (str) { + return `**********${str}**********`; + } + return `${start}${hidden}${end}`; +} + + +/***/ }), +/* 63 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.maskCrami = maskCrami; +function maskCrami(str) { + if (str.length !== 16) { + throw new Error('Invalid input'); + } + const masked = str.substring(0, 6) + '****' + str.substring(10); + return masked; +} + + +/***/ }), +/* 64 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.maskEmail = maskEmail; +function maskEmail(email) { + if (!email) + return ''; + const atIndex = email.indexOf('@'); + if (atIndex <= 1) { + return email; + } + const firstPart = email.substring(0, atIndex - 1); + const lastPart = email.substring(atIndex); + const maskedPart = '*'.repeat(firstPart.length - 1); + return `${firstPart.charAt(0)}${maskedPart}${email.charAt(atIndex - 1)}${lastPart}`; +} + + +/***/ }), +/* 65 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.maskIpAddress = maskIpAddress; +function maskIpAddress(ipAddress) { + if (!ipAddress) + return ''; + const ipArray = ipAddress.split('.'); + ipArray[2] = '***'; + return ipArray.join('.'); +} + + +/***/ }), +/* 66 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.removeSpecialCharacters = removeSpecialCharacters; +function removeSpecialCharacters(inputString) { + return inputString.replace(/[^\w\s-]/g, ''); +} + + +/***/ }), +/* 67 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.removeThinkTags = removeThinkTags; +function removeThinkTags(content) { + if (content === null || content === undefined) { + return content; + } + if (Array.isArray(content)) { + return content.map(item => { + if (item && item.type === 'text' && typeof item.text === 'string') { + item.text = item.text.replace(/[\s\S]*?<\/think>/g, ''); + } + return item; + }); + } + if (typeof content === 'string') { + return content.replace(/[\s\S]*?<\/think>/g, ''); + } + return content; +} + + +/***/ }), +/* 68 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.importDynamic = void 0; +exports.isNotEmptyString = isNotEmptyString; +function isNotEmptyString(value) { + return typeof value === 'string' && value.length > 0; +} +exports.importDynamic = new Function('modulePath', 'return import(modulePath)'); + + +/***/ }), +/* 69 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.utcToShanghaiTime = utcToShanghaiTime; +function utcToShanghaiTime(utcTime, format = 'YYYY/MM/DD hh:mm:ss') { + const date = new Date(utcTime); + const shanghaiTime = date.getTime() + 8 * 60 * 60 * 1000; + const shanghaiDate = new Date(shanghaiTime); + let result = format.replace('YYYY', shanghaiDate.getFullYear().toString()); + result = result.replace('MM', `0${shanghaiDate.getMonth() + 1}`.slice(-2)); + result = result.replace('DD', `0${shanghaiDate.getDate()}`.slice(-2)); + result = result.replace('hh', `0${shanghaiDate.getHours()}`.slice(-2)); + result = result.replace('mm', `0${shanghaiDate.getMinutes()}`.slice(-2)); + result = result.replace('ss', `0${shanghaiDate.getSeconds()}`.slice(-2)); + return result; +} + + +/***/ }), +/* 70 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.correctApiBaseUrl = correctApiBaseUrl; +async function correctApiBaseUrl(baseUrl) { + if (!baseUrl) + return ''; + let url = baseUrl.trim(); + if (url.endsWith('/')) { + url = url.slice(0, -1); + } + if (!/\/v\d+(?:beta|alpha)?/.test(url)) { + return `${url}/v1`; + } + return url; +} + + +/***/ }), +/* 71 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CramiPackageEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let CramiPackageEntity = class CramiPackageEntity extends baseEntity_1.BaseEntity { + name; + des; + coverImg; + price; + order; + status; + weight; + days; + model3Count; + model4Count; + drawMjCount; + appCats; +}; +exports.CramiPackageEntity = CramiPackageEntity; +__decorate([ + (0, typeorm_1.Column)({ unique: true, comment: '套餐名称' }), + __metadata("design:type", String) +], CramiPackageEntity.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐介绍详细信息' }), + __metadata("design:type", String) +], CramiPackageEntity.prototype, "des", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐封面图片', nullable: true }), + __metadata("design:type", String) +], CramiPackageEntity.prototype, "coverImg", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐价格¥', type: 'decimal', scale: 2, precision: 10 }), + __metadata("design:type", Number) +], CramiPackageEntity.prototype, "price", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐排序、数字越大越靠前', default: 100 }), + __metadata("design:type", Number) +], CramiPackageEntity.prototype, "order", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐是否启用中 0:禁用 1:启用', default: 1 }), + __metadata("design:type", Number) +], CramiPackageEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐权重、数字越大表示套餐等级越高越贵', unique: true }), + __metadata("design:type", Number) +], CramiPackageEntity.prototype, "weight", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '卡密有效期天数、从使用的时候开始计算,设为-1则不限时间', + default: 0, + }), + __metadata("design:type", Number) +], CramiPackageEntity.prototype, "days", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐包含的模型3数量', default: 0, nullable: true }), + __metadata("design:type", Number) +], CramiPackageEntity.prototype, "model3Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐包含的模型4数量', default: 0, nullable: true }), + __metadata("design:type", Number) +], CramiPackageEntity.prototype, "model4Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐包含的MJ绘画数量', default: 0, nullable: true }), + __metadata("design:type", Number) +], CramiPackageEntity.prototype, "drawMjCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐包含的应用分类列表', default: '', nullable: true }), + __metadata("design:type", String) +], CramiPackageEntity.prototype, "appCats", void 0); +exports.CramiPackageEntity = CramiPackageEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'crami_package' }) +], CramiPackageEntity); + + +/***/ }), +/* 72 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a, _b, _c; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BaseEntity = void 0; +const typeorm_1 = __webpack_require__(3); +let BaseEntity = class BaseEntity { + id; + createdAt; + updatedAt; + deletedAt; +}; +exports.BaseEntity = BaseEntity; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], BaseEntity.prototype, "id", void 0); +__decorate([ + (0, typeorm_1.CreateDateColumn)({ + type: 'datetime', + length: 0, + nullable: false, + name: 'createdAt', + comment: '创建时间', + }), + __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) +], BaseEntity.prototype, "createdAt", void 0); +__decorate([ + (0, typeorm_1.UpdateDateColumn)({ + type: 'datetime', + length: 0, + nullable: false, + name: 'updatedAt', + comment: '更新时间', + }), + __metadata("design:type", typeof (_b = typeof Date !== "undefined" && Date) === "function" ? _b : Object) +], BaseEntity.prototype, "updatedAt", void 0); +__decorate([ + (0, typeorm_1.DeleteDateColumn)({ + type: 'datetime', + length: 0, + nullable: false, + name: 'deletedAt', + comment: '删除时间', + }), + __metadata("design:type", typeof (_c = typeof Date !== "undefined" && Date) === "function" ? _c : Object) +], BaseEntity.prototype, "deletedAt", void 0); +exports.BaseEntity = BaseEntity = __decorate([ + (0, typeorm_1.Entity)() +], BaseEntity); + + +/***/ }), +/* 73 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ConfigEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let ConfigEntity = class ConfigEntity extends baseEntity_1.BaseEntity { + configKey; + configVal; + public; + encrypt; + status; +}; +exports.ConfigEntity = ConfigEntity; +__decorate([ + (0, typeorm_1.Column)({ length: 255, comment: '配置名称', nullable: true }), + __metadata("design:type", String) +], ConfigEntity.prototype, "configKey", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'text', comment: '配置内容', nullable: true }), + __metadata("design:type", String) +], ConfigEntity.prototype, "configVal", void 0); +__decorate([ + (0, typeorm_1.Column)({ + default: 0, + comment: '配置是否公开,公开内容对前端项目展示 0:不公开 1:公开', + }), + __metadata("design:type", Number) +], ConfigEntity.prototype, "public", void 0); +__decorate([ + (0, typeorm_1.Column)({ + default: 0, + comment: '配置是否加密,加密内容仅仅super权限可看 0:不加 1:加', + }), + __metadata("design:type", Number) +], ConfigEntity.prototype, "encrypt", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 1, comment: '配置状态 0:关闭 1:启用' }), + __metadata("design:type", Number) +], ConfigEntity.prototype, "status", void 0); +exports.ConfigEntity = ConfigEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'config' }) +], ConfigEntity); + + +/***/ }), +/* 74 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GlobalConfigService = void 0; +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const axios_1 = __webpack_require__(39); +const fs = __webpack_require__(18); +const typeorm_2 = __webpack_require__(3); +const chatLog_entity_1 = __webpack_require__(75); +const models_service_1 = __webpack_require__(76); +const config_entity_1 = __webpack_require__(73); +const packageJsonContent = fs.readFileSync('package.json', 'utf-8'); +const packageJson = JSON.parse(packageJsonContent); +const version = packageJson.version; +console.log(' current use version in ------>: ', version); +let GlobalConfigService = class GlobalConfigService { + configEntity; + chatLogEntity; + modelsService; + constructor(configEntity, chatLogEntity, modelsService) { + this.configEntity = configEntity; + this.chatLogEntity = chatLogEntity; + this.modelsService = modelsService; + } + globalConfigs = {}; + wechatAccessToken; + wechatJsapiTicket; + oldWechatAccessToken; + oldWechatJsapiTicket; + async onModuleInit() { + await this.initGetAllConfig(); + } + async getConfigs(configKey) { + if (configKey.length === 0) + return; + if (configKey.includes('wechatAccessToken') && configKey.length === 1) { + return this.wechatAccessToken; + } + if (configKey.includes('wechatJsapiTicket') && configKey.length === 1) { + return this.wechatJsapiTicket; + } + if (configKey.includes('oldWechatAccessToken') && configKey.length === 1) { + return this.oldWechatAccessToken; + } + if (configKey.includes('oldWechatJsapiTicket') && configKey.length === 1) { + return this.oldWechatJsapiTicket; + } + if (configKey.length === 1) { + return this.globalConfigs[configKey[0]]; + } + else { + const result = {}; + configKey.forEach(key => (result[key] = this.globalConfigs[key])); + return result; + } + } + async initGetAllConfig() { + const data = await this.configEntity.find(); + this.globalConfigs = data.reduce((prev, cur) => { + prev[cur.configKey] = cur.configVal; + return prev; + }, {}); + this.initBaiduSensitive(); + } + async initBaiduSensitive(isInit = true) { + const { baiduTextApiKey, baiduTextSecretKey } = await this.getConfigs([ + 'baiduTextApiKey', + 'baiduTextSecretKey', + ]); + if (!baiduTextApiKey || !baiduTextSecretKey) { + return; + } + const headers = { + 'Content-Type': 'application/json', + Accept: 'application/json', + }; + const url = `https://aip.baidubce.com/oauth/2.0/token?client_id=${baiduTextApiKey}&client_secret=${baiduTextSecretKey}&grant_type=client_credentials`; + try { + const response = await axios_1.default.post(url, { headers }); + this.globalConfigs.baiduTextAccessToken = response.data.access_token; + } + catch (error) { + if (isInit) { + } + else { + throw new common_1.HttpException(error.response.data.error_description, common_1.HttpStatus.BAD_REQUEST); + } + } + } + async getWechatAccessToken(isInit = false) { + const { wechatOfficialAppId: appId, wechatOfficialAppSecret: secret } = await this.getConfigs([ + 'wechatOfficialAppId', + 'wechatOfficialAppSecret', + ]); + if (!appId || !secret) { + return common_1.Logger.error('还未配置微信的appId和secret、配置后才可进行微信扫码登录!!!', 'OfficialService'); + } + this.wechatAccessToken = await this.fetchBaseAccessToken(appId, secret, isInit); + common_1.Logger.log(`wechat refresh access_token ==> ${this.wechatAccessToken}`, 'OfficialService'); + } + async getOldWechatAccessToken(isInit = false) { + try { + const { oldWechatOfficialAppId: appId, oldWechatOfficialAppSecret: secret } = await this.getConfigs(['oldWechatOfficialAppId', 'oldWechatOfficialAppSecret']); + if (!appId || !secret) { + return null; + } + if (process.env.ISDEV === 'true') { + common_1.Logger.log('开发环境下,返回空token', 'GlobalConfigService'); + return null; + } + this.oldWechatAccessToken = await this.fetchBaseAccessToken(appId, secret, isInit); + } + catch (error) { + return null; + } + } + async fetchBaseAccessToken(appId, secret, isInit = false) { + common_1.Logger.log(`开始获取access_token, appId: ${appId.substring(0, 5)}..., isInit: ${isInit}`, 'GlobalConfigService'); + if (process.env.ISDEV === 'true') { + return ''; + } + try { + const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrlToken || 'https://api.weixin.qq.com/cgi-bin/token'); + const requestUrl = `${Url}?grant_type=client_credential&appid=${appId}&secret=${secret}`; + common_1.Logger.log(`请求access_token URL: ${requestUrl}`, 'GlobalConfigService'); + const response = await axios_1.default.get(requestUrl); + common_1.Logger.log(`获取access_token响应: ${JSON.stringify(response.data)}`, 'GlobalConfigService'); + const { errmsg, access_token, errcode } = response.data; + if (errmsg || errcode) { + common_1.Logger.error(`获取access_token失败 - 错误码: ${errcode}, 错误信息: ${errmsg}`, 'GlobalConfigService'); + return ''; + } + if (!access_token) { + common_1.Logger.error('未获取到access_token', 'GlobalConfigService'); + return ''; + } + common_1.Logger.log(`成功获取access_token: ${access_token.substring(0, 10)}...`, 'GlobalConfigService'); + return access_token; + } + catch (error) { + common_1.Logger.error(`获取access_token异常: ${error.message}`, 'GlobalConfigService'); + return ''; + } + } + async fetchJsapiTicket(accessToken) { + if (process.env.ISDEV === 'true') { + this.wechatJsapiTicket = ''; + return; + } + const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); + const res = await axios_1.default.get(`${Url}/cgi-bin/ticket/getticket?access_token=${accessToken}&type=jsapi`); + return res?.data?.ticket; + } + async queryAllConfig(req) { + const { role } = req.user; + return this.globalConfigs; + } + async queryFrontConfig(query, req) { + const allowKeys = [ + 'registerSendStatus', + 'registerSendModel3Count', + 'registerSendModel4Count', + 'registerSendDrawMjCount', + 'firstRegisterSendStatus', + 'firstRegisterSendRank', + 'firstRegisterSendModel3Count', + 'firstRegisterSendModel4Count', + 'firstRegisterSendDrawMjCount', + 'clientHomePath', + 'clientLogoPath', + 'clientFaviconPath', + 'drawingStyles', + 'isUseWxLogin', + 'siteName', + 'siteUrl', + 'robotAvatar', + 'siteRobotName', + 'buyCramiAddress', + 'mindDefaultData', + 'baiduCode', + 'payEpayChannel', + 'payDuluPayChannel', + 'payMpayChannel', + 'payEpayApiPayUrl', + 'payEpayStatus', + 'payDuluPayStatus', + 'payHupiStatus', + 'payWechatStatus', + 'payDuluPayApiPayUrl', + 'payDuluPayRedirect', + 'payMpayStatus', + 'payLtzfStatus', + 'isAutoOpenNotice', + 'isShowAppCatIcon', + 'salesBaseRatio', + 'salesSeniorRatio', + 'salesAllowDrawMoney', + 'companyName', + 'filingNumber', + 'emailLoginStatus', + 'phoneLoginStatus', + 'openIdentity', + 'openPhoneValidation', + 'wechatRegisterStatus', + 'wechatSilentLoginStatus', + 'oldWechatMigrationStatus', + 'officialOldAccountSuccessText', + 'officialOldAccountFailText', + 'officialOldAccountNotFoundText', + 'signInStatus', + 'signInModel3Count', + 'signInModel4Count', + 'signInMjDrawToken', + 'appMenuHeaderTips', + 'pluginFirst', + 'mjUseBaiduFy', + 'mjHideNotBlock', + 'mjHideWorkIn', + 'isVerifyEmail', + 'showWatermark', + 'showCrami', + 'isHideTts', + 'isHideDefaultPreset', + 'isHideModel3Point', + 'isHideModel4Point', + 'isHideDrawMjPoint', + 'isHidePlugin', + 'model3Name', + 'model4Name', + 'drawMjName', + 'isModelInherited', + 'noVerifyRegister', + 'noticeInfo', + 'homeHtml', + 'isAutoOpenAgreement', + 'agreementInfo', + 'agreementTitle', + 'isEnableExternalLinks', + 'externalLinks', + 'clearCacheEnabled', + 'noticeTitle', + 'streamCacheEnabled', + 'homeWelcomeContent', + 'enableHtmlRender', + 'sideDrawingEditModel', + ]; + const data = await this.configEntity.find({ + where: { configKey: (0, typeorm_2.In)(allowKeys) }, + }); + const { domain } = query; + const domainDb = this.globalConfigs['domain']; + if (domainDb !== domain) { + this.createOrUpdate({ + configKey: `domain`, + configVal: domain, + status: 1, + }); + await this.initGetAllConfig(); + } + const publicConfig = data.reduce((prev, cur) => { + prev[cur.configKey] = cur.configVal; + return prev; + }, {}); + const { wechatOfficialAppId, wechatOfficialAppSecret } = await this.getConfigs([ + 'wechatOfficialAppId', + 'wechatOfficialAppSecret', + ]); + const isUseWxLogin = !!(wechatOfficialAppId && wechatOfficialAppSecret); + return { ...publicConfig, isUseWxLogin }; + } + async queryConfig(body, req) { + const { role } = req.user; + const { keys } = body; + const data = await this.configEntity.find({ + where: { configKey: (0, typeorm_2.In)(keys) }, + }); + if (role !== 'super') { + data.forEach(item => { + if (item.configKey.includes('mj') || + item.configKey.includes('Key') || + item.configKey.includes('gpt') || + item.configKey.includes('cos') || + item.configKey.includes('baidu') || + item.configKey.includes('ali') || + item.configKey.includes('tencent') || + item.configKey.includes('pay') || + item.configKey.includes('wechat') || + item.configKey.includes('mjProxyImgUrl') || + item.configKey === 'openaiBaseUrl') { + const longKeys = ['payWeChatPublicKey', 'payWeChatPrivateKey']; + if (longKeys.includes(item.configKey)) { + return (item.configVal = (0, utils_1.hideString)(item.configVal, '隐私内容、非超级管理员无权查看')); + } + const whiteListKey = ['payEpayStatus', 'payHupiStatus', 'mjProxy', 'payLtzfStatus']; + if (!whiteListKey.includes(item.configKey) && !item.configKey.includes('Status')) { + item.configVal = (0, utils_1.hideString)(item.configVal); + } + } + }); + } + return data.reduce((prev, cur) => { + prev[cur.configKey] = cur.configVal; + return prev; + }, {}); + } + async setConfig(body) { + try { + const { settings } = body; + for (const item of settings) { + await this.createOrUpdate(item); + } + await this.initGetAllConfig(); + const keys = settings.map(t => t.configKey); + if (keys.includes('baiduTextApiKey') || keys.includes('baiduTextSecretKey')) { + await this.initBaiduSensitive(false); + } + if (keys.includes('wechatOfficialAppId') || keys.includes('wechatOfficialAppSecret')) { + await this.getWechatAccessToken(); + } + return '设置完成!'; + } + catch (error) { + console.log('error: ', error); + } + } + async createOrUpdate(setting) { + try { + const { configKey, configVal, status = 1 } = setting; + const c = await this.configEntity.findOne({ where: { configKey } }); + if (c) { + const res = await this.configEntity.update({ configKey }, { configVal, status }); + } + else { + const save = await this.configEntity.save({ + configKey, + configVal, + status, + }); + } + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException('设置配置信息错误!', common_1.HttpStatus.BAD_REQUEST); + } + } + async queryNotice() { + return await this.getConfigs(['noticeInfo', 'noticeTitle']); + } + async queryPayType() { + const { payHupiStatus = 0, payEpayStatus = 0, payWechatStatus = 0, payMpayStatus = 0, payLtzfStatus = 0, payDuluPayStatus = 0, } = await this.getConfigs([ + 'payHupiStatus', + 'payEpayStatus', + 'payMpayStatus', + 'payWechatStatus', + 'payLtzfStatus', + 'payDuluPayStatus', + ]); + if ([ + payHupiStatus, + payEpayStatus, + payWechatStatus, + payMpayStatus, + payLtzfStatus, + payDuluPayStatus, + ].every(status => status === 0)) { + throw new common_1.HttpException('支付功能暂未开放!', common_1.HttpStatus.BAD_REQUEST); + } + if (Number(payWechatStatus) === 1) { + return 'wechat'; + } + if (Number(payDuluPayStatus) === 1) { + return 'dulu'; + } + if (Number(payEpayStatus) === 1) { + return 'epay'; + } + if (Number(payMpayStatus) === 1) { + return 'mpay'; + } + if (Number(payHupiStatus) === 1) { + return 'hupi'; + } + if (Number(payLtzfStatus) === 1) { + return 'ltzf'; + } + } + async getAuthInfo() { + const { siteName, registerBaseUrl, domain } = await this.getConfigs([ + 'siteName', + 'registerBaseUrl', + 'domain', + ]); + return { siteName, registerBaseUrl, domain }; + } + async getPhoneVerifyConfig() { + const { phoneLoginStatus, aliPhoneAccessKeyId, aliPhoneAccessKeySecret, aliPhoneSignName, aliPhoneTemplateCode, } = await this.getConfigs([ + 'phoneLoginStatus', + 'aliPhoneAccessKeyId', + 'aliPhoneAccessKeySecret', + 'aliPhoneSignName', + 'aliPhoneTemplateCode', + ]); + if (Number(phoneLoginStatus) !== 1) { + throw new common_1.HttpException('手机验证码功能暂未开放!', common_1.HttpStatus.BAD_REQUEST); + } + return { + accessKeyId: aliPhoneAccessKeyId, + accessKeySecret: aliPhoneAccessKeySecret, + SignName: aliPhoneSignName, + TemplateCode: aliPhoneTemplateCode, + }; + } + getNamespace() { + return process.env.NAMESPACE || 'AIWeb'; + } + async getSignatureGiftConfig() { + const { signInStatus = 0, signInModel3Count = 0, signInModel4Count = 0, signInMjDrawToken = 0, } = await this.getConfigs([ + 'signInStatus', + 'signInModel3Count', + 'signInModel4Count', + 'signInMjDrawToken', + ]); + if (Number(signInStatus) !== 1) { + throw new common_1.HttpException('签到功能暂未开放!', common_1.HttpStatus.BAD_REQUEST); + } + return { + model3Count: Number(signInModel3Count), + model4Count: Number(signInModel4Count), + drawMjCount: Number(signInMjDrawToken), + }; + } + async auth() { + const api = ''; + const response = await fetch(api, {}); + const responseData = await response.json(); + const { success = true, message } = responseData; + common_1.Logger.debug('感谢您使用AIWeb,祝您使用愉快~'); + } + async getSensitiveConfig() { + const { baiduTextStatus = 0, baiduTextAccessToken } = await this.getConfigs([ + 'baiduTextStatus', + 'baiduTextAccessToken', + ]); + if (Number(baiduTextStatus) === 1) { + return { + useType: 'baidu', + baiduTextAccessToken, + }; + } + return null; + } + async saveOldWechatUserList(userList) { + try { + const oldWechatUserList = JSON.stringify(userList); + await this.createOrUpdate({ + configKey: 'oldWechatUserList', + configVal: oldWechatUserList, + configDescribe: '账号迁移-旧账号的用户列表', + }); + this.globalConfigs.oldWechatUserList = oldWechatUserList; + return true; + } + catch (error) { + common_1.Logger.error(`保存旧账号用户列表失败: ${error.message}`, 'GlobalConfigService'); + throw new common_1.HttpException('保存旧账号用户列表失败', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } + async saveOpenidMapping(mappingList) { + try { + const openidMapping = JSON.stringify(mappingList); + await this.createOrUpdate({ + configKey: 'openidMapping', + configVal: openidMapping, + configDescribe: '账号迁移-OpenID映射关系', + }); + this.globalConfigs.openidMapping = openidMapping; + return true; + } + catch (error) { + common_1.Logger.error(`保存OpenID映射关系失败: ${error.message}`, 'GlobalConfigService'); + throw new common_1.HttpException('保存OpenID映射关系失败', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } + async getOldWechatUserList() { + try { + const oldWechatUserList = this.globalConfigs.oldWechatUserList; + if (!oldWechatUserList) { + return null; + } + return JSON.parse(oldWechatUserList); + } + catch (error) { + common_1.Logger.error(`获取旧账号用户列表失败: ${error.message}`, 'GlobalConfigService'); + return null; + } + } + async getOpenidMapping() { + try { + const openidMapping = this.globalConfigs.openidMapping; + if (!openidMapping) { + return null; + } + return JSON.parse(openidMapping); + } + catch (error) { + common_1.Logger.error(`获取OpenID映射关系失败: ${error.message}`, 'GlobalConfigService'); + return null; + } + } + async saveUnionidMapping(mappingData) { + try { + let currentMapping = (await this.getOpenidMapping()) || {}; + if (!currentMapping.unionid_mapping) { + currentMapping.unionid_mapping = {}; + } + currentMapping.unionid_mapping = { + ...currentMapping.unionid_mapping, + ...mappingData, + }; + const openidMapping = JSON.stringify(currentMapping); + await this.createOrUpdate({ + configKey: 'openidMapping', + configVal: openidMapping, + configDescribe: '账号迁移-OpenID和UnionID映射关系', + }); + this.globalConfigs.openidMapping = openidMapping; + common_1.Logger.log(`保存了${Object.keys(mappingData).length}个UnionID映射关系`, 'GlobalConfigService'); + return true; + } + catch (error) { + common_1.Logger.error(`保存UnionID映射关系失败: ${error.message}`, 'GlobalConfigService'); + throw new common_1.HttpException('保存UnionID映射关系失败', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } +}; +exports.GlobalConfigService = GlobalConfigService; +exports.GlobalConfigService = GlobalConfigService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), + __param(1, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof models_service_1.ModelsService !== "undefined" && models_service_1.ModelsService) === "function" ? _c : Object]) +], GlobalConfigService); + + +/***/ }), +/* 75 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatLogEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let ChatLogEntity = class ChatLogEntity extends baseEntity_1.BaseEntity { + userId; + model; + role; + content; + reasoning_content; + tool_calls; + imageUrl; + videoUrl; + audioUrl; + fileUrl; + type; + modelName; + modelAvatar; + curIp; + prompt; + extraParam; + pluginParam; + answer; + promptTokens; + completionTokens; + totalTokens; + progress; + status; + action; + customId; + drawId; + ttsUrl; + rec; + groupId; + appId; + isDelete; + taskId; + taskData; + fileInfo; + promptReference; + networkSearchResult; + fileVectorResult; +}; +exports.ChatLogEntity = ChatLogEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户ID' }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '使用的模型', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "model", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'role system user assistant', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "role", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型内容', nullable: true, type: 'mediumtext' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "content", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型推理内容', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "reasoning_content", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型工具调用', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "tool_calls", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '图片Url', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "imageUrl", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '视频Url', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "videoUrl", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '音频Url', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "audioUrl", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '文件Url', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "fileUrl", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '使用类型1: 普通对话 2: 绘图 3: 拓展性对话', + nullable: true, + default: 1, + }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "type", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '自定义的模型名称', nullable: true, default: 'AI' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "modelName", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '自定义的模型头像', nullable: false, default: '' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "modelAvatar", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'Ip地址', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "curIp", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '询问的问题', type: 'text', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "prompt", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '附加参数', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "extraParam", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '插件参数', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "pluginParam", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '回答的答案', type: 'text', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "answer", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '提问的token', nullable: true }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "promptTokens", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '回答的token', nullable: true }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "completionTokens", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '总花费的token', nullable: true }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "totalTokens", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '任务进度', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "progress", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '任务状态', nullable: true, default: 3 }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '任务类型', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "action", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '对图片操作的按钮ID', type: 'text', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "customId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '绘画的ID每条不一样', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "drawId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '对话转语音的链接', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "ttsUrl", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '是否推荐0: 默认 1: 推荐', nullable: true, default: 0 }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "rec", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '分组ID', nullable: true }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "groupId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '使用的应用id', nullable: true }), + __metadata("design:type", Number) +], ChatLogEntity.prototype, "appId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '是否删除', default: false }), + __metadata("design:type", Boolean) +], ChatLogEntity.prototype, "isDelete", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '任务ID', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "taskId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '任务数据', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "taskData", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '文件信息', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "fileInfo", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '提问参考', nullable: true }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "promptReference", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '联网搜索结果', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "networkSearchResult", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '文件向量搜索结果', nullable: true, type: 'mediumtext' }), + __metadata("design:type", String) +], ChatLogEntity.prototype, "fileVectorResult", void 0); +exports.ChatLogEntity = ChatLogEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'chatlog' }) +], ChatLogEntity); + + +/***/ }), +/* 76 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ModelsService = void 0; +const status_constant_1 = __webpack_require__(77); +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const models_entity_1 = __webpack_require__(78); +let ModelsService = class ModelsService { + modelsEntity; + constructor(modelsEntity) { + this.modelsEntity = modelsEntity; + } + modelTypes = []; + modelMaps = {}; + keyList = {}; + keyPoolMap = {}; + keyPoolIndexMap = {}; + async onModuleInit() { + await this.initCalcKey(); + } + async initCalcKey() { + this.keyPoolMap = {}; + this.keyPoolIndexMap = {}; + this.keyList = {}; + this.modelMaps = {}; + this.modelTypes = []; + const allKeys = await this.modelsEntity.find(); + const keyTypes = allKeys.reduce((pre, cur) => { + if (!pre[cur.keyType]) { + pre[cur.keyType] = [cur]; + } + else { + pre[cur.keyType].push(cur); + } + return pre; + }, {}); + this.modelTypes = Object.keys(keyTypes).map(keyType => { + return { label: status_constant_1.ModelsMapCn[keyType], val: keyType }; + }); + this.modelMaps = keyTypes; + this.keyList = {}; + allKeys.forEach(keyDetail => { + const { keyType, model } = keyDetail; + if (!this.keyPoolMap[model]) + this.keyPoolMap[model] = []; + this.keyPoolMap[model].push(keyDetail); + if (!this.keyPoolIndexMap[model]) + this.keyPoolIndexMap[model] = 0; + if (!this.keyList[keyType]) + this.keyList[keyType] = {}; + if (!this.keyList[keyType][model]) + this.keyList[keyType][model] = []; + this.keyList[keyType][model].push(keyDetail); + }); + } + async getCurrentModelKeyInfo(model) { + const modelKeyInfo = await this.modelsEntity.findOne({ + where: { model: model }, + }); + if (!modelKeyInfo) { + return null; + } + return modelKeyInfo; + } + async getSpecialModelKeyInfo(modelPrefix) { + const matchingModels = await this.modelsEntity.find({ + where: { model: (0, typeorm_2.Like)(`${modelPrefix}%`) }, + }); + if (matchingModels.length === 0) { + throw new common_1.HttpException('未找到匹配的模型,请重新选择模型!', common_1.HttpStatus.BAD_REQUEST); + } + const firstMatchModel = matchingModels[0]; + const modifiedModelName = firstMatchModel.model.replace(modelPrefix, ''); + const modifiedModel = { + ...firstMatchModel, + model: modifiedModelName, + }; + return modifiedModel; + } + async getBaseConfig() { + if (!this.modelTypes.length || !Object.keys(this.modelMaps).length) + return; + let minOrderModel = null; + let minOrder = Infinity; + for (const keyType in this.modelMaps) { + for (const model of this.modelMaps[keyType]) { + if (model.status === true && model.modelOrder < minOrder) { + minOrder = model.modelOrder; + minOrderModel = model; + } + } + } + if (!minOrderModel && this.modelMaps[1] && this.modelMaps[1][0]) { + minOrderModel = this.modelMaps[1][0]; + } + if (!minOrderModel) + return; + const { keyType, modelName, model, deductType, deduct, isFileUpload, isImageUpload, modelAvatar, modelDescription, isNetworkSearch, deepThinkingType, deductDeepThink, isMcpTool, systemPrompt, systemPromptType, } = minOrderModel; + return { + modelInfo: { + keyType, + modelName, + model, + deductType, + deduct, + isFileUpload, + isImageUpload, + modelAvatar, + modelDescription, + isNetworkSearch, + deepThinkingType, + deductDeepThink, + isMcpTool, + systemPrompt, + systemPromptType, + }, + }; + } + async setModel(params) { + try { + if (isNaN(params.timeout)) { + params.timeout = null; + } + const { id } = params; + if (id) { + const res = await this.modelsEntity.update({ id }, params); + await this.initCalcKey(); + return res.affected > 0; + } + else { + const { keyType, key } = params; + if (Number(keyType !== 1)) { + const res = await this.modelsEntity.save(params); + await this.initCalcKey(); + return res; + } + else { + const data = key.map(k => { + try { + const data = JSON.parse(JSON.stringify(params)); + data.key = k; + if (isNaN(data.timeout)) { + data.timeout = null; + } + return data; + } + catch (error) { + console.log('parse error: ', error); + } + }); + const res = await this.modelsEntity.save(data); + await this.initCalcKey(); + return res; + } + } + } + catch (error) { + console.log('error: ', error); + } + } + async delModel({ id }) { + if (!id) { + throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST); + } + const m = await this.modelsEntity.findOne({ where: { id } }); + if (!m) { + throw new common_1.HttpException('当前账号不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const res = await this.modelsEntity.delete({ id }); + await this.initCalcKey(); + return res; + } + async queryModels(req, params) { + const { role } = req.user; + const { keyType, key, status, model, page = 1, size = 10 } = params; + const where = {}; + keyType && (where.keyType = keyType); + model && (where.model = model); + status && (where.status = Number(status) === 1 ? true : false); + key && (where.key = (0, typeorm_2.Like)(`%${key}%`)); + const [rows, count] = await this.modelsEntity.findAndCount({ + where: where, + order: { + modelOrder: 'ASC', + }, + skip: (page - 1) * size, + take: size, + }); + if (role !== 'super') { + rows.forEach(item => { + item.key && (item.key = (0, utils_1.hideString)(item.key)); + }); + } + return { rows, count }; + } + async modelsList() { + const cloneModelMaps = JSON.parse(JSON.stringify(this.modelMaps)); + Object.keys(cloneModelMaps).forEach(key => { + cloneModelMaps[key] = cloneModelMaps[key] + .filter(t => t.status === true) + .sort((a, b) => a.modelOrder - b.modelOrder); + cloneModelMaps[key] = Array.from(cloneModelMaps[key] + .map(t => { + const { modelName, keyType, model, deduct, deductType, maxRounds, modelAvatar, isFileUpload, isImageUpload, modelDescription, isNetworkSearch, deepThinkingType, deductDeepThink, isMcpTool, } = t; + return { + modelName, + keyType, + model, + deduct, + deductType, + maxRounds, + modelAvatar, + isFileUpload, + isImageUpload, + modelDescription, + isNetworkSearch, + deepThinkingType, + deductDeepThink, + isMcpTool, + }; + }) + .reduce((map, obj) => map.set(obj.modelName, obj), new Map()) + .values()); + }); + return { + modelTypeList: this.modelTypes, + modelMaps: cloneModelMaps, + }; + } + async saveUseLog(id, useToken) { + await this.modelsEntity + .createQueryBuilder() + .update(models_entity_1.ModelsEntity) + .set({ + useCount: () => 'useCount + 1', + useToken: () => `useToken + ${useToken}`, + }) + .where('id = :id', { id }) + .execute(); + } + async getAllKey() { + return await this.modelsEntity.find(); + } + async queryModelType(params) { + return 1; + } + async setModelType(params) { + return 1; + } + async delModelType(params) { + return 1; + } + async getModelDetailByName(model) { + common_1.Logger.debug(`getModelDetailByName:${model}`); + if (!model) { + throw new common_1.HttpException('模型名称不能为空', common_1.HttpStatus.BAD_REQUEST); + } + try { + let modelDetail = await this.modelsEntity.findOne({ + where: { model: model }, + }); + if (!modelDetail) { + const models = await this.modelsEntity.find({ + where: { model: (0, typeorm_2.Like)(`%${model}%`) }, + }); + if (models.length > 0) { + modelDetail = models[0]; + } + } + common_1.Logger.debug(`modelDetail: ${modelDetail}`); + if (!modelDetail) { + throw new common_1.HttpException('未找到指定模型', common_1.HttpStatus.NOT_FOUND); + } + return { + id: modelDetail.id, + modelName: modelDetail.modelName, + model: modelDetail.model, + keyType: modelDetail.keyType, + deduct: modelDetail.deduct, + deductType: modelDetail.deductType, + maxRounds: modelDetail.maxRounds, + modelAvatar: modelDetail.modelAvatar, + isFileUpload: modelDetail.isFileUpload, + isImageUpload: modelDetail.isImageUpload, + modelDescription: modelDetail.modelDescription, + isNetworkSearch: modelDetail.isNetworkSearch, + deepThinkingType: modelDetail.deepThinkingType, + deductDeepThink: modelDetail.deductDeepThink, + modelOrder: modelDetail.modelOrder, + isMcpTool: modelDetail.isMcpTool, + systemPrompt: modelDetail.systemPrompt, + systemPromptType: modelDetail.systemPromptType, + drawingType: modelDetail.drawingType, + }; + } + catch (error) { + if (error instanceof common_1.HttpException) { + throw error; + } + common_1.Logger.error(`获取模型详情失败: ${error.message}`, 'ModelsService'); + throw new common_1.HttpException('获取模型详情失败', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } +}; +exports.ModelsService = ModelsService; +exports.ModelsService = ModelsService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(models_entity_1.ModelsEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) +], ModelsService); + + +/***/ }), +/* 77 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ModelsMapCn = exports.VerificationUseStatusEnum = void 0; +var VerificationUseStatusEnum; +(function (VerificationUseStatusEnum) { + VerificationUseStatusEnum[VerificationUseStatusEnum["UNUSED"] = 0] = "UNUSED"; + VerificationUseStatusEnum[VerificationUseStatusEnum["USED"] = 1] = "USED"; +})(VerificationUseStatusEnum || (exports.VerificationUseStatusEnum = VerificationUseStatusEnum = {})); +exports.ModelsMapCn = { + 1: '普通模型', + 2: '绘画模型', + 3: '特殊模型', +}; + + +/***/ }), +/* 78 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ModelsEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let ModelsEntity = class ModelsEntity extends baseEntity_1.BaseEntity { + keyType; + modelName; + model; + modelAvatar; + modelOrder; + maxModelTokens; + max_tokens; + maxRounds; + timeout; + deduct; + deductDeepThink; + deductType; + isTokenBased; + isFileUpload; + isImageUpload; + tokenFeeRatio; + remark; + key; + status; + useCount; + useToken; + proxyUrl; + modelLimits; + modelDescription; + isNetworkSearch; + deepThinkingType; + isMcpTool; + systemPrompt; + systemPromptType; + drawingType; +}; +exports.ModelsEntity = ModelsEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '模型类型 1: 普通对话 2: 绘画 3:高级对话' }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "keyType", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型名称' }), + __metadata("design:type", String) +], ModelsEntity.prototype, "modelName", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '绑定的模型是?' }), + __metadata("design:type", String) +], ModelsEntity.prototype, "model", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 1024, comment: '模型头像', nullable: true }), + __metadata("design:type", String) +], ModelsEntity.prototype, "modelAvatar", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型排序', default: 1 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "modelOrder", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '模型上下文支持的最大Tokens', + default: 64000, + nullable: true, + }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "maxModelTokens", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型回复最大Tokens', default: 4096, nullable: true }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "max_tokens", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型上下文最大条数', nullable: true }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "maxRounds", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型上下文最大条数', nullable: true }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "timeout", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型单次调用扣除的次数', default: 1 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "deduct", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型开启深度思考后积分扣除的系数', default: 1 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "deductDeepThink", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型扣除余额类型 1: 普通模型 2: 高级模型', default: 1 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "deductType", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '是否使用token计费: 0:不是 1: 是', default: 0 }), + __metadata("design:type", Boolean) +], ModelsEntity.prototype, "isTokenBased", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '文件解析: 0:不使用 1:逆向格式(直接附带链接,仅支持逆向渠道) 2:向量解析(内置文件分析,支持全模型分析带文字的文件)', + default: 0, + }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "isFileUpload", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '图片解析: 0:不使用 1:逆向格式(直接附带链接,仅支持逆向渠道) 2:GPT Vision 3:全局解析(支持所有格式的图片解析)', + default: 0, + }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "isImageUpload", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'token计费比例', default: 0 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "tokenFeeRatio", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型附加信息', nullable: true }), + __metadata("design:type", String) +], ModelsEntity.prototype, "remark", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型的key', nullable: true }), + __metadata("design:type", String) +], ModelsEntity.prototype, "key", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '使用的状态: 0:禁用 1:启用', default: 1 }), + __metadata("design:type", Boolean) +], ModelsEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'key的使用次数', default: 0 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "useCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'key的已经使用的token数量', default: 0 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "useToken", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '当前模型的代理地址', nullable: true }), + __metadata("design:type", String) +], ModelsEntity.prototype, "proxyUrl", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型频率限制 次/小时', default: 999 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "modelLimits", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型介绍', nullable: true }), + __metadata("design:type", String) +], ModelsEntity.prototype, "modelDescription", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '开启联网搜索', nullable: true, default: true }), + __metadata("design:type", Boolean) +], ModelsEntity.prototype, "isNetworkSearch", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '深度思考类型 0:关闭 1:全局思考 2:模型思考', nullable: true, default: 0 }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "deepThinkingType", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '是否支持MCP工具', nullable: true, default: false }), + __metadata("design:type", Boolean) +], ModelsEntity.prototype, "isMcpTool", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型system预设', nullable: true }), + __metadata("design:type", String) +], ModelsEntity.prototype, "systemPrompt", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '预设类型 0:关闭预设 1: 附加模式 2: 覆盖模式', + nullable: true, + default: 0, + }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "systemPromptType", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '绘画类型: 0:不是绘画 1:dalle兼容 2:gpt-image-1兼容 3:midjourney 4:chat正则提取 5:豆包', + nullable: true, + default: 0, + }), + __metadata("design:type", Number) +], ModelsEntity.prototype, "drawingType", void 0); +exports.ModelsEntity = ModelsEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'models' }) +], ModelsEntity); + + +/***/ }), +/* 79 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AccountLogEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let AccountLogEntity = class AccountLogEntity extends baseEntity_1.BaseEntity { + userId; + pkgName; + rebateUserId; + packageId; + memberDays; + rechargeType; + model3Count; + model4Count; + drawMjCount; + days; + uid; + extent; +}; +exports.AccountLogEntity = AccountLogEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户ID' }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '会员套餐名称', nullable: true }), + __metadata("design:type", String) +], AccountLogEntity.prototype, "pkgName", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '推荐人ID、返佣用户ID', nullable: true }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "rebateUserId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '充值套餐ID', nullable: true }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "packageId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '会员有效天数', nullable: true }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "memberDays", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '账户充值类型' }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "rechargeType", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型3对话次数' }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "model3Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型4对话次数' }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "model4Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'MJ绘画次数' }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "drawMjCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐有效期' }), + __metadata("design:type", Number) +], AccountLogEntity.prototype, "days", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '随机订单uid' }), + __metadata("design:type", String) +], AccountLogEntity.prototype, "uid", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '扩展字段', nullable: true }), + __metadata("design:type", String) +], AccountLogEntity.prototype, "extent", void 0); +exports.AccountLogEntity = AccountLogEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'account_log' }) +], AccountLogEntity); + + +/***/ }), +/* 80 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BalanceEntity = void 0; +const typeorm_1 = __webpack_require__(3); +const baseEntity_1 = __webpack_require__(72); +let BalanceEntity = class BalanceEntity extends baseEntity_1.BaseEntity { + userId; + balance; + usesLeft; + paintCount; + useTokens; + useChats; + usePaints; +}; +exports.BalanceEntity = BalanceEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户ID' }), + __metadata("design:type", Number) +], BalanceEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '用户账户余额' }), + __metadata("design:type", Number) +], BalanceEntity.prototype, "balance", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '用户使用次数余额' }), + __metadata("design:type", Number) +], BalanceEntity.prototype, "usesLeft", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '绘画使用次数余额' }), + __metadata("design:type", Number) +], BalanceEntity.prototype, "paintCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 0, comment: '用户总计使用的token数量' }), + __metadata("design:type", Number) +], BalanceEntity.prototype, "useTokens", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 0, comment: '用户总计使用的对话次数' }), + __metadata("design:type", Number) +], BalanceEntity.prototype, "useChats", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 0, comment: '用户总计使用的绘画次数' }), + __metadata("design:type", Number) +], BalanceEntity.prototype, "usePaints", void 0); +exports.BalanceEntity = BalanceEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'balance' }) +], BalanceEntity); + + +/***/ }), +/* 81 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserBalanceEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let UserBalanceEntity = class UserBalanceEntity extends baseEntity_1.BaseEntity { + userId; + model3Count; + model4Count; + drawMjCount; + packageId; + memberModel3Count; + memberModel4Count; + memberDrawMjCount; + useModel3Count; + useModel4Count; + useModel3Token; + useModel4Token; + useDrawMjToken; + extent; + expirationTime; + appCats; +}; +exports.UserBalanceEntity = UserBalanceEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户ID' }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '充值的套餐包含的模型3次数', nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "model3Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '充值的套餐包含的模型4次数', nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "model4Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '充值的套餐包含的MJ绘画次数', nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "drawMjCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '当前使用的套餐ID', default: 0, nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "packageId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '会员模型3额度', default: 0, nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "memberModel3Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '会员模型4额度', default: 0, nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "memberModel4Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '会员MJ绘画额度', default: 0, nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "memberDrawMjCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '已经使用的对话3的模型次数', nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "useModel3Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '已经使用的对话4的模型次数', nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "useModel4Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '已经使用的对话3的模型Token', nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "useModel3Token", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '已经使用的对话4的模型Token', nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "useModel4Token", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '已经使用的MJ绘画Token', nullable: true }), + __metadata("design:type", Number) +], UserBalanceEntity.prototype, "useDrawMjToken", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '扩展字段', nullable: true }), + __metadata("design:type", String) +], UserBalanceEntity.prototype, "extent", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '会员到期时间', nullable: true }), + __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) +], UserBalanceEntity.prototype, "expirationTime", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐应用分类列表', nullable: true, default: '' }), + __metadata("design:type", String) +], UserBalanceEntity.prototype, "appCats", void 0); +exports.UserBalanceEntity = UserBalanceEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'user_balances' }) +], UserBalanceEntity); + + +/***/ }), +/* 82 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatGroupEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let ChatGroupEntity = class ChatGroupEntity extends baseEntity_1.BaseEntity { + userId; + isSticky; + title; + appId; + isDelete; + config; + params; + fileUrl; + pdfTextContent; +}; +exports.ChatGroupEntity = ChatGroupEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户ID' }), + __metadata("design:type", Number) +], ChatGroupEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '是否置顶聊天', type: 'boolean', default: false }), + __metadata("design:type", Boolean) +], ChatGroupEntity.prototype, "isSticky", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '分组名称', nullable: true }), + __metadata("design:type", String) +], ChatGroupEntity.prototype, "title", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '应用ID', nullable: true }), + __metadata("design:type", Number) +], ChatGroupEntity.prototype, "appId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '是否删除了', default: false }), + __metadata("design:type", Boolean) +], ChatGroupEntity.prototype, "isDelete", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '配置', nullable: true, default: null, type: 'text' }), + __metadata("design:type", String) +], ChatGroupEntity.prototype, "config", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '附加参数', nullable: true, type: 'text' }), + __metadata("design:type", String) +], ChatGroupEntity.prototype, "params", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '文件链接', nullable: true, default: null, type: 'text' }), + __metadata("design:type", String) +], ChatGroupEntity.prototype, "fileUrl", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'PDF中的文字内容', nullable: true, type: 'mediumtext' }), + __metadata("design:type", String) +], ChatGroupEntity.prototype, "pdfTextContent", void 0); +exports.ChatGroupEntity = ChatGroupEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'chat_group' }) +], ChatGroupEntity); + + +/***/ }), +/* 83 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let UserEntity = class UserEntity extends baseEntity_1.BaseEntity { + username; + password; + status; + sex; + nickname; + email; + phone; + avatar; + sign; + registerIp; + lastLoginIp; + inviteCode; + invitedBy; + role; + openId; + client; + inviteLinkCount; + consecutiveDays; + violationCount; + realName; + idCard; +}; +exports.UserEntity = UserEntity; +__decorate([ + (0, typeorm_1.Column)({ length: 12, comment: '用户昵称' }), + __metadata("design:type", String) +], UserEntity.prototype, "username", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 64, comment: '用户密码', nullable: true }), + __metadata("design:type", String) +], UserEntity.prototype, "password", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 0, comment: '用户状态' }), + __metadata("design:type", Number) +], UserEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 1, comment: '用户性别' }), + __metadata("design:type", Number) +], UserEntity.prototype, "sex", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '用户昵称', nullable: true }), + __metadata("design:type", String) +], UserEntity.prototype, "nickname", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 64, unique: true, comment: '用户邮箱' }), + __metadata("design:type", String) +], UserEntity.prototype, "email", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 64, nullable: true, comment: '用户手机号' }), + __metadata("design:type", String) +], UserEntity.prototype, "phone", void 0); +__decorate([ + (0, typeorm_1.Column)({ + length: 300, + nullable: true, + default: '', + comment: '用户头像', + }), + __metadata("design:type", String) +], UserEntity.prototype, "avatar", void 0); +__decorate([ + (0, typeorm_1.Column)({ + length: 300, + nullable: true, + default: '我是一台基于深度学习和自然语言处理技术的 AI 机器人,旨在为用户提供高效、精准、个性化的智能服务。', + comment: '用户签名', + }), + __metadata("design:type", String) +], UserEntity.prototype, "sign", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 64, default: '', comment: '注册IP', nullable: true }), + __metadata("design:type", String) +], UserEntity.prototype, "registerIp", void 0); +__decorate([ + (0, typeorm_1.Column)({ + length: 64, + default: '', + comment: '最后一次登录IP', + nullable: true, + }), + __metadata("design:type", String) +], UserEntity.prototype, "lastLoginIp", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 10, default: '', comment: '用户邀请码' }), + __metadata("design:type", String) +], UserEntity.prototype, "inviteCode", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 10, default: '', comment: '用户填写的别人的邀请码' }), + __metadata("design:type", String) +], UserEntity.prototype, "invitedBy", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 10, default: 'viewer', comment: '用户角色' }), + __metadata("design:type", String) +], UserEntity.prototype, "role", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 64, default: '', comment: '微信openId', nullable: true }), + __metadata("design:type", String) +], UserEntity.prototype, "openId", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 64, comment: '用户注册来源', nullable: true }), + __metadata("design:type", String) +], UserEntity.prototype, "client", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '用户邀请链接被点击次数', default: 0 }), + __metadata("design:type", Number) +], UserEntity.prototype, "inviteLinkCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '用户连续签到天数', default: 0 }), + __metadata("design:type", Number) +], UserEntity.prototype, "consecutiveDays", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '用户违规记录次数', default: 0 }), + __metadata("design:type", Number) +], UserEntity.prototype, "violationCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '真实姓名', nullable: true }), + __metadata("design:type", String) +], UserEntity.prototype, "realName", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '身份证号', nullable: true }), + __metadata("design:type", String) +], UserEntity.prototype, "idCard", void 0); +exports.UserEntity = UserEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'users' }) +], UserEntity); + + +/***/ }), +/* 84 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.FingerprintLogEntity = void 0; +const typeorm_1 = __webpack_require__(3); +const baseEntity_1 = __webpack_require__(72); +let FingerprintLogEntity = class FingerprintLogEntity extends baseEntity_1.BaseEntity { + fingerprint; + model3Count; + model4Count; + drawMjCount; +}; +exports.FingerprintLogEntity = FingerprintLogEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '指纹ID' }), + __metadata("design:type", String) +], FingerprintLogEntity.prototype, "fingerprint", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型3对话次数' }), + __metadata("design:type", Number) +], FingerprintLogEntity.prototype, "model3Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '模型4对话次数' }), + __metadata("design:type", Number) +], FingerprintLogEntity.prototype, "model4Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'MJ绘画次数' }), + __metadata("design:type", Number) +], FingerprintLogEntity.prototype, "drawMjCount", void 0); +exports.FingerprintLogEntity = FingerprintLogEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'fingerprint_log' }) +], FingerprintLogEntity); + + +/***/ }), +/* 85 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AppController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const jwtAuth_guard_1 = __webpack_require__(87); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const app_service_1 = __webpack_require__(105); +const collectApp_dto_1 = __webpack_require__(109); +const createApp_dto_1 = __webpack_require__(111); +const createCats_dto_1 = __webpack_require__(112); +const deleteApp_dto_1 = __webpack_require__(113); +const deleteCats_dto_1 = __webpack_require__(114); +const queryApp_dto_1 = __webpack_require__(115); +const queryCats_dto_1 = __webpack_require__(116); +const updateApp_dto_1 = __webpack_require__(117); +const updateCats_dto_1 = __webpack_require__(118); +let AppController = class AppController { + appService; + constructor(appService) { + this.appService = appService; + } + appCatsList(query, req) { + return this.appService.appCatsList(query, req); + } + catsList(req) { + const params = { status: 1, page: 1, size: 1000, name: '' }; + return this.appService.appCatsList(params, req); + } + queryOneCats(query, req) { + return this.appService.queryOneCat(query, req); + } + createAppCat(body) { + return this.appService.createAppCat(body); + } + updateAppCats(body) { + return this.appService.updateAppCats(body); + } + delAppCat(body) { + return this.appService.delAppCat(body); + } + appList(req, query) { + return this.appService.appList(req, query); + } + list(req, query) { + return this.appService.frontAppList(req, query); + } + async searchList(body, req) { + body.userId = req.user.id; + return this.appService.searchAppList(body); + } + createApp(body) { + return this.appService.createApp(body); + } + updateApp(body) { + return this.appService.updateApp(body); + } + delApp(body) { + return this.appService.delApp(body); + } + collect(body, req) { + return this.appService.collect(body, req); + } + mineApps(req) { + return this.appService.mineApps(req); + } +}; +exports.AppController = AppController; +__decorate([ + (0, common_1.Get)('queryAppCats'), + (0, swagger_1.ApiOperation)({ summary: '获取App分类列表' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Query)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof queryCats_dto_1.QuerCatsDto !== "undefined" && queryCats_dto_1.QuerCatsDto) === "function" ? _b : Object, typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "appCatsList", null); +__decorate([ + (0, common_1.Get)('queryCats'), + (0, swagger_1.ApiOperation)({ summary: '用户端获取App分类列表' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _d : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "catsList", null); +__decorate([ + (0, common_1.Get)('queryOneCat'), + (0, swagger_1.ApiOperation)({ summary: '用户端获取App详情' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Query)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, typeof (_e = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _e : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "queryOneCats", null); +__decorate([ + (0, common_1.Post)('createAppCats'), + (0, swagger_1.ApiOperation)({ summary: '添加App分类' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof createCats_dto_1.CreateCatsDto !== "undefined" && createCats_dto_1.CreateCatsDto) === "function" ? _f : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "createAppCat", null); +__decorate([ + (0, common_1.Post)('updateAppCats'), + (0, swagger_1.ApiOperation)({ summary: '修改App分类' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_g = typeof updateCats_dto_1.UpdateCatsDto !== "undefined" && updateCats_dto_1.UpdateCatsDto) === "function" ? _g : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "updateAppCats", null); +__decorate([ + (0, common_1.Post)('delAppCats'), + (0, swagger_1.ApiOperation)({ summary: '删除App分类' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_h = typeof deleteCats_dto_1.DeleteCatsDto !== "undefined" && deleteCats_dto_1.DeleteCatsDto) === "function" ? _h : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "delAppCat", null); +__decorate([ + (0, common_1.Get)('queryApp'), + (0, swagger_1.ApiOperation)({ summary: '获取App列表' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_j = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _j : Object, typeof (_k = typeof queryApp_dto_1.QuerAppDto !== "undefined" && queryApp_dto_1.QuerAppDto) === "function" ? _k : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "appList", null); +__decorate([ + (0, common_1.Get)('list'), + (0, swagger_1.ApiOperation)({ summary: '客户端获取App' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_l = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _l : Object, typeof (_m = typeof queryApp_dto_1.QuerAppDto !== "undefined" && queryApp_dto_1.QuerAppDto) === "function" ? _m : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "list", null); +__decorate([ + (0, common_1.Post)('searchList'), + (0, swagger_1.ApiOperation)({ summary: '客户端获取App' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, typeof (_o = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _o : Object]), + __metadata("design:returntype", Promise) +], AppController.prototype, "searchList", null); +__decorate([ + (0, common_1.Post)('createApp'), + (0, swagger_1.ApiOperation)({ summary: '添加App' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_p = typeof createApp_dto_1.CreateAppDto !== "undefined" && createApp_dto_1.CreateAppDto) === "function" ? _p : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "createApp", null); +__decorate([ + (0, common_1.Post)('updateApp'), + (0, swagger_1.ApiOperation)({ summary: '修改App' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_q = typeof updateApp_dto_1.UpdateAppDto !== "undefined" && updateApp_dto_1.UpdateAppDto) === "function" ? _q : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "updateApp", null); +__decorate([ + (0, common_1.Post)('delApp'), + (0, swagger_1.ApiOperation)({ summary: '删除App' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_r = typeof deleteApp_dto_1.OperateAppDto !== "undefined" && deleteApp_dto_1.OperateAppDto) === "function" ? _r : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "delApp", null); +__decorate([ + (0, common_1.Post)('collect'), + (0, swagger_1.ApiOperation)({ summary: '收藏/取消收藏App' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_s = typeof collectApp_dto_1.CollectAppDto !== "undefined" && collectApp_dto_1.CollectAppDto) === "function" ? _s : Object, typeof (_t = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _t : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "collect", null); +__decorate([ + (0, common_1.Get)('mineApps'), + (0, swagger_1.ApiOperation)({ summary: '我的收藏' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_u = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _u : Object]), + __metadata("design:returntype", void 0) +], AppController.prototype, "mineApps", null); +exports.AppController = AppController = __decorate([ + (0, swagger_1.ApiTags)('app'), + (0, common_1.Controller)('app'), + __metadata("design:paramtypes", [typeof (_a = typeof app_service_1.AppService !== "undefined" && app_service_1.AppService) === "function" ? _a : Object]) +], AppController); + + +/***/ }), +/* 86 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AdminAuthGuard = void 0; +const common_1 = __webpack_require__(2); +const jwtAuth_guard_1 = __webpack_require__(87); +let AdminAuthGuard = class AdminAuthGuard extends jwtAuth_guard_1.JwtAuthGuard { + async canActivate(context) { + const isAuthorized = await super.canActivate(context); + if (!isAuthorized) { + return false; + } + const request = context.switchToHttp().getRequest(); + const user = request.user; + if (user && ['admin', 'super'].includes(user.role)) { + return true; + } + else { + throw new common_1.UnauthorizedException('非法操作、您的权限等级不足、无法执行当前请求!'); + } + } +}; +exports.AdminAuthGuard = AdminAuthGuard; +exports.AdminAuthGuard = AdminAuthGuard = __decorate([ + (0, common_1.Injectable)() +], AdminAuthGuard); + + +/***/ }), +/* 87 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a, _b, _c, _d; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.JwtAuthGuard = void 0; +const globalConfig_service_1 = __webpack_require__(74); +const redisCache_service_1 = __webpack_require__(28); +const common_1 = __webpack_require__(2); +const core_1 = __webpack_require__(13); +const passport_1 = __webpack_require__(88); +const jwt = __webpack_require__(89); +const auth_service_1 = __webpack_require__(90); +let JwtAuthGuard = class JwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') { + redisCacheService; + moduleRef; + globalConfigService; + authService; + constructor(redisCacheService, moduleRef, globalConfigService, authService) { + super(); + this.redisCacheService = redisCacheService; + this.moduleRef = moduleRef; + this.globalConfigService = globalConfigService; + this.authService = authService; + } + async canActivate(context) { + if (!this.redisCacheService) { + this.redisCacheService = this.moduleRef.get(redisCache_service_1.RedisCacheService, { + strict: false, + }); + } + const request = context.switchToHttp().getRequest(); + const _domain = request.headers.host; + const token = this.extractToken(request); + request.user = await this.validateToken(token); + await this.redisCacheService.checkTokenAuth(token, request); + return true; + } + extractToken(request) { + if (!request.headers.authorization) { + if (request.headers.fingerprint) { + let id = request.headers.fingerprint; + if (id > 2147483647) { + id = id.toString().slice(-9); + id = Number(String(Number(id))); + } + const token = this.authService.createTokenFromFingerprint(id); + return token; + } + return null; + } + const parts = request.headers.authorization.split(' '); + if (parts.length !== 2 || parts[0] !== 'Bearer') { + return null; + } + return parts[1]; + } + async validateToken(token) { + try { + const secret = await this.redisCacheService.getJwtSecret(); + const decoded = await jwt.verify(token, secret); + return decoded; + } + catch (error) { + common_1.Logger.debug('用户信息校验失败', 'JwtAuthGuard'); + throw new common_1.HttpException('亲爱的用户,请登录后继续操作,我们正在等您的到来!', common_1.HttpStatus.UNAUTHORIZED); + } + } + handleRequest(err, user, info) { + if (err || !user) { + console.log('err: ', err); + throw err || new common_1.UnauthorizedException(); + } + return user; + } +}; +exports.JwtAuthGuard = JwtAuthGuard; +exports.JwtAuthGuard = JwtAuthGuard = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof redisCache_service_1.RedisCacheService !== "undefined" && redisCache_service_1.RedisCacheService) === "function" ? _a : Object, typeof (_b = typeof core_1.ModuleRef !== "undefined" && core_1.ModuleRef) === "function" ? _b : Object, typeof (_c = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _c : Object, typeof (_d = typeof auth_service_1.AuthService !== "undefined" && auth_service_1.AuthService) === "function" ? _d : Object]) +], JwtAuthGuard); + + +/***/ }), +/* 88 */ +/***/ ((module) => { + +module.exports = require("@nestjs/passport"); + +/***/ }), +/* 89 */ +/***/ ((module) => { + +module.exports = require("jsonwebtoken"); + +/***/ }), +/* 90 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AuthService = void 0; +const user_constant_1 = __webpack_require__(91); +const utils_1 = __webpack_require__(36); +const globalConfig_service_1 = __webpack_require__(74); +const common_1 = __webpack_require__(2); +const jwt_1 = __webpack_require__(92); +const typeorm_1 = __webpack_require__(33); +const bcrypt = __webpack_require__(93); +const os = __webpack_require__(94); +const typeorm_2 = __webpack_require__(3); +const config_entity_1 = __webpack_require__(73); +const mailer_service_1 = __webpack_require__(95); +const redisCache_service_1 = __webpack_require__(28); +const user_service_1 = __webpack_require__(97); +const userBalance_service_1 = __webpack_require__(34); +const verification_service_1 = __webpack_require__(100); +let AuthService = class AuthService { + configEntity; + userService; + jwtService; + mailerService; + verificationService; + userBalanceService; + redisCacheService; + globalConfigService; + ipAddress; + constructor(configEntity, userService, jwtService, mailerService, verificationService, userBalanceService, redisCacheService, globalConfigService) { + this.configEntity = configEntity; + this.userService = userService; + this.jwtService = jwtService; + this.mailerService = mailerService; + this.verificationService = verificationService; + this.userBalanceService = userBalanceService; + this.redisCacheService = redisCacheService; + this.globalConfigService = globalConfigService; + } + async onModuleInit() { + this.getIp(); + } + async login(user, req) { + common_1.Logger.debug(`用户登录尝试,用户名: ${user.username}`, 'authService'); + if (user.captchaId) { + common_1.Logger.debug(`检测到验证码登录,联系方式: ${user.username}`, 'authService'); + return await this.loginWithCaptcha({ contact: user.username, code: user.captchaId }, req); + } + const u = await this.userService.verifyUserCredentials(user); + if (!u) { + common_1.Logger.error(`登录失败: 用户凭证无效 - 用户名: ${user.username}`, 'authService'); + throw new common_1.HttpException('登录失败,用户凭证无效。', common_1.HttpStatus.UNAUTHORIZED); + } + const { username, id, email, role, openId, client, phone } = u; + common_1.Logger.debug(`用户${username}(ID: ${id})登录成功`, 'authService'); + const ip = (0, utils_1.getClientIp)(req); + await this.userService.savaLoginIp(id, ip); + const token = await this.jwtService.sign({ + username, + id, + email, + role, + openId, + client, + phone, + }); + await this.redisCacheService.saveToken(id, token); + common_1.Logger.debug(`用户${username}(ID: ${id})登录完成,IP: ${ip}`, 'authService'); + return token; + } + async loginWithCaptcha(body, req) { + const { contact, code } = body; + let email = '', phone = ''; + const isEmail = /\S+@\S+\.\S+/.test(contact); + const isPhone = /^\d{10,}$/.test(contact); + common_1.Logger.debug(`验证码登录 | 联系方式: ${contact}`, 'authService'); + if (isEmail) { + email = contact; + } + else if (isPhone) { + phone = contact; + } + else { + throw new common_1.HttpException('请提供有效的邮箱地址或手机号码。', common_1.HttpStatus.BAD_REQUEST); + } + const nameSpace = await this.globalConfigService.getNamespace(); + const codeKey = `${nameSpace}:CODE:${contact}`; + const savedCode = await this.redisCacheService.get({ key: codeKey }); + if (savedCode) { + if (savedCode !== code) { + common_1.Logger.log(`验证码错误 | 联系方式: ${contact}`, 'authService'); + throw new common_1.HttpException('验证码错误', common_1.HttpStatus.BAD_REQUEST); + } + common_1.Logger.debug(`验证码验证成功`); + await this.redisCacheService.del({ key: codeKey }); + return await this.processUserLogin(email, phone, contact, req); + } + else { + common_1.Logger.log(`验证码不存在或已过期 | 联系方式: ${contact}`, 'authService'); + throw new common_1.HttpException('验证码不存在或已过期,请重新获取', common_1.HttpStatus.BAD_REQUEST); + } + } + async processUserLogin(email, phone, contact, req) { + let u = await this.userService.getUserByContact({ email, phone }); + if (!u) { + common_1.Logger.log(`创建新用户 | 联系方式: ${contact}`, 'authService'); + let username = (0, utils_1.createRandomUid)(); + while (true) { + const usernameTaken = await this.userService.verifyUserRegister({ + username, + }); + if (usernameTaken) { + break; + } + username = (0, utils_1.createRandomUid)(); + } + let newUser = { + username, + status: user_constant_1.UserStatusEnum.ACTIVE, + }; + const isEmail = /\S+@\S+\.\S+/.test(contact); + if (isEmail) { + newUser.email = contact; + } + else { + newUser.email = `${(0, utils_1.createRandomUid)()}@aiweb.com`; + newUser.phone = contact; + } + const randomPassword = (0, utils_1.createRandomUid)().substring(0, 8); + const hashedPassword = bcrypt.hashSync(randomPassword, 10); + newUser.password = hashedPassword; + u = await this.userService.createUser(newUser); + common_1.Logger.log(`用户创建成功 | 用户ID: ${u.id}`, 'authService'); + await this.userBalanceService.addBalanceToNewUser(u.id); + } + if (!u) { + throw new common_1.HttpException('登录失败,用户创建失败。', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + const { username, id, role, openId, client } = u; + const ip = (0, utils_1.getClientIp)(req); + await this.userService.savaLoginIp(id, ip); + const token = await this.jwtService.sign({ + username, + id, + email, + role, + openId, + client, + phone, + }); + await this.redisCacheService.saveToken(id, token); + common_1.Logger.log(`用户登录成功 | 用户ID: ${id} | 联系方式: ${contact}`, 'authService'); + return token; + } + async loginByOpenId(user, req) { + const { status } = user; + if (status !== user_constant_1.UserStatusEnum.ACTIVE) { + throw new common_1.HttpException(user_constant_1.UserStatusErrMsg[status], common_1.HttpStatus.BAD_REQUEST); + } + const { username, id, email, role, openId, client } = user; + const ip = (0, utils_1.getClientIp)(req); + await this.userService.savaLoginIp(id, ip); + const token = await this.jwtService.sign({ + username, + id, + email, + role, + openId, + client, + }); + await this.redisCacheService.saveToken(id, token); + return token; + } + async getInfo(req) { + const { id, role } = req.user; + common_1.Logger.debug(`获取用户信息 | 用户ID: ${id} | 角色: ${role}`, 'AuthService-getInfo'); + if (req.headers.fingerprint) { + common_1.Logger.debug(`请求包含指纹头: ${req.headers.fingerprint}`, 'AuthService-getInfo'); + } + try { + const result = await this.userService.getUserInfo(id); + common_1.Logger.debug(`成功获取用户信息 | 用户ID: ${id}`, 'AuthService-getInfo'); + return result; + } + catch (error) { + common_1.Logger.error(`获取用户信息失败: ${error.message}`, 'AuthService-getInfo'); + throw error; + } + } + async updatePassword(req, body) { + const { id, client, role } = req.user; + if (client && Number(client) > 0) { + throw new common_1.HttpException('无权此操作、请联系管理员!', common_1.HttpStatus.BAD_REQUEST); + } + if (role === 'admin') { + throw new common_1.HttpException('非法操作、请联系管理员!', common_1.HttpStatus.BAD_REQUEST); + } + this.userService.updateUserPassword(id, body.password); + return '密码修改成功'; + } + async updatePassByOther(req, body) { + const { id, client } = req.user; + if (!client) { + throw new common_1.HttpException('无权此操作!', common_1.HttpStatus.BAD_REQUEST); + } + this.userService.updateUserPassword(id, body.password); + return '密码修改成功'; + } + getIp() { + let ipAddress; + const interfaces = os.networkInterfaces(); + Object.keys(interfaces).forEach(interfaceName => { + const interfaceInfo = interfaces[interfaceName]; + for (let i = 0; i < interfaceInfo.length; i++) { + const alias = interfaceInfo[i]; + if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) { + ipAddress = alias.address; + break; + } + } + }); + this.ipAddress = ipAddress; + } + async sendCode(body) { + const { contact, isLogin } = body; + let email = '', phone = ''; + const code = (0, utils_1.createRandomCode)(); + const isEmail = /\S+@\S+\.\S+/.test(contact); + const isPhone = /^\d{10,}$/.test(contact); + common_1.Logger.debug(`发送验证码 | 联系方式: ${contact}`); + if (!isEmail && !isPhone) { + throw new common_1.HttpException('请提供有效的邮箱地址或手机号码。', common_1.HttpStatus.BAD_REQUEST); + } + if (!isLogin) { + if (isEmail) { + email = contact; + } + else if (isPhone) { + phone = contact; + } + } + const nameSpace = await this.globalConfigService.getNamespace(); + const key = `${nameSpace}:CODE:${contact}`; + const ttl = await this.redisCacheService.ttl(key); + if (ttl && ttl > 0 && isPhone) { + throw new common_1.HttpException(`${ttl}秒内不得重复发送验证码!`, common_1.HttpStatus.BAD_REQUEST); + } + if (isEmail) { + const existingCode = await this.redisCacheService.get({ key }); + if (existingCode) { + await this.mailerService.sendMail({ + to: email, + context: { + code: existingCode, + }, + }); + common_1.Logger.log(`重发验证码 | 邮箱: ${email}`, 'authService'); + return `验证码发送成功、请填写验证码完成${isLogin ? '登录' : '注册'}!`; + } + else { + try { + await this.mailerService.sendMail({ + to: email, + context: { + code: code, + }, + }); + common_1.Logger.log(`发送新验证码 | 邮箱: ${email}`, 'authService'); + } + catch (error) { + common_1.Logger.error(`邮件发送失败: ${error.message}`, 'authService'); + throw new common_1.HttpException('验证码发送失败,请稍后重试', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + await this.redisCacheService.set({ key, val: code }, 10 * 60); + return `验证码发送成功、请填写验证码完成${isLogin ? '登录' : '注册'}!`; + } + } + else if (isPhone) { + const messageInfo = { phone, code }; + await this.verificationService.sendPhoneCode(messageInfo); + await this.redisCacheService.set({ key, val: code }, 10 * 60); + common_1.Logger.log(`发送验证码 | 手机号: ${phone}`, 'authService'); + return `验证码发送成功、请填写验证码完成${isLogin ? '登录' : '注册'}!`; + } + } + async sendPhoneCode(body) { + const { phone, isLogin } = body; + const code = (0, utils_1.createRandomCode)(); + const isPhone = /^\d{10,}$/.test(phone); + common_1.Logger.debug(`发送手机验证码 | 手机号: ${phone}`); + if (!isPhone) { + throw new common_1.HttpException('请提供有效的手机号码。', common_1.HttpStatus.BAD_REQUEST); + } + if (isLogin === false) { + const isAvailable = await this.userService.verifyUserRegister({ + phone, + }); + if (!isAvailable) { + throw new common_1.HttpException('当前手机号已注册,请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); + } + } + const nameSpace = await this.globalConfigService.getNamespace(); + const key = `${nameSpace}:CODE:${phone}`; + const ttl = await this.redisCacheService.ttl(key); + if (ttl && ttl > 0 && isPhone) { + throw new common_1.HttpException(`${ttl}秒内不得重复发送验证码!`, common_1.HttpStatus.BAD_REQUEST); + } + const messageInfo = { phone, code }; + await this.redisCacheService.set({ key, val: code }, 10 * 60); + await this.verificationService.sendPhoneCode(messageInfo); + common_1.Logger.log(`发送验证码 | 手机号: ${phone}`, 'authService'); + return `验证码发送成功、请填写验证码完成${isLogin === false ? '注册' : '验证/登录'}!`; + } + createTokenFromFingerprint(fingerprint) { + const token = this.jwtService.sign({ + username: `游客${fingerprint}`, + id: fingerprint, + email: `${fingerprint}@visitor.com`, + role: 'visitor', + openId: null, + client: null, + }); + return token; + } + async verifyIdentity(req, body) { + common_1.Logger.debug('开始实名认证流程'); + const { name, idCard } = body; + const { id } = req.user; + try { + const result = await this.verificationService.verifyIdentity(body); + common_1.Logger.debug(`实名认证结果: ${result}`); + if (!result) { + throw new common_1.HttpException('身份验证错误,请检查实名信息', common_1.HttpStatus.BAD_REQUEST); + } + await this.userService.saveRealNameInfo(id, name, idCard); + return '认证成功'; + } + catch (error) { + common_1.Logger.error('验证过程出现错误', error); + throw new common_1.HttpException('认证失败,请检查相关信息', common_1.HttpStatus.BAD_REQUEST); + } + } + async verifyPhoneIdentity(req, body) { + common_1.Logger.debug('开始手机号认证流程'); + const { phone, username, password, code } = body; + const { id } = req.user; + const nameSpace = this.globalConfigService.getNamespace(); + const key = `${nameSpace}:CODE:${phone}`; + const redisCode = await this.redisCacheService.get({ key }); + common_1.Logger.debug(`Retrieved redisCode for ${phone}: ${redisCode}`); + if (code === '') { + throw new common_1.HttpException('请输入验证码', common_1.HttpStatus.BAD_REQUEST); + } + if (!redisCode) { + common_1.Logger.log(`验证码过期: ${phone}`, 'authService'); + throw new common_1.HttpException('验证码已过期,请重新发送!', common_1.HttpStatus.BAD_REQUEST); + } + if (code !== redisCode) { + common_1.Logger.log(`验证码错误: ${phone} 输入的验证码: ${code}, 期望的验证码: ${redisCode}`, 'authService'); + throw new common_1.HttpException('验证码填写错误,请重新输入!', common_1.HttpStatus.BAD_REQUEST); + } + if (username) { + const usernameTaken = await this.userService.isUsernameTaken(body.username, id); + if (usernameTaken) { + throw new common_1.HttpException('用户名已存在!', common_1.HttpStatus.BAD_REQUEST); + } + } + try { + await this.userService.updateUserPhone(id, phone, username, password); + return '认证成功'; + } + catch (error) { + common_1.Logger.error('验证过程出现错误', error); + throw new common_1.HttpException('身份验证错误,请检查相关信息', common_1.HttpStatus.BAD_REQUEST); + } + } +}; +exports.AuthService = AuthService; +exports.AuthService = AuthService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof user_service_1.UserService !== "undefined" && user_service_1.UserService) === "function" ? _b : Object, typeof (_c = typeof jwt_1.JwtService !== "undefined" && jwt_1.JwtService) === "function" ? _c : Object, typeof (_d = typeof mailer_service_1.MailerService !== "undefined" && mailer_service_1.MailerService) === "function" ? _d : Object, typeof (_e = typeof verification_service_1.VerificationService !== "undefined" && verification_service_1.VerificationService) === "function" ? _e : Object, typeof (_f = typeof userBalance_service_1.UserBalanceService !== "undefined" && userBalance_service_1.UserBalanceService) === "function" ? _f : Object, typeof (_g = typeof redisCache_service_1.RedisCacheService !== "undefined" && redisCache_service_1.RedisCacheService) === "function" ? _g : Object, typeof (_h = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _h : Object]) +], AuthService); + + +/***/ }), +/* 91 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserStatusErrMsg = exports.UserStatusEnum = void 0; +var UserStatusEnum; +(function (UserStatusEnum) { + UserStatusEnum[UserStatusEnum["PENDING"] = 0] = "PENDING"; + UserStatusEnum[UserStatusEnum["ACTIVE"] = 1] = "ACTIVE"; + UserStatusEnum[UserStatusEnum["LOCKED"] = 2] = "LOCKED"; + UserStatusEnum[UserStatusEnum["BLACKLISTED"] = 3] = "BLACKLISTED"; +})(UserStatusEnum || (exports.UserStatusEnum = UserStatusEnum = {})); +exports.UserStatusErrMsg = { + [UserStatusEnum.PENDING]: '当前账户未激活,请前往邮箱验证或重新发送验证码!', + [UserStatusEnum.ACTIVE]: '当前账户已激活!', + [UserStatusEnum.LOCKED]: '当前账户已锁定,请联系管理员解锁!', + [UserStatusEnum.BLACKLISTED]: '当前账户已被永久封禁!', +}; + + +/***/ }), +/* 92 */ +/***/ ((module) => { + +module.exports = require("@nestjs/jwt"); + +/***/ }), +/* 93 */ +/***/ ((module) => { + +module.exports = require("bcryptjs"); + +/***/ }), +/* 94 */ +/***/ ((module) => { + +module.exports = require("os"); + +/***/ }), +/* 95 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.MailerService = void 0; +const common_1 = __webpack_require__(2); +const nodemailer = __webpack_require__(96); +const globalConfig_service_1 = __webpack_require__(74); +let MailerService = class MailerService { + globalConfigService; + constructor(globalConfigService) { + this.globalConfigService = globalConfigService; + } + async sendMail(options) { + try { + const configs = await this.globalConfigService.getConfigs([ + 'MAILER_HOST', + 'MAILER_PORT', + 'MAILER_USER', + 'MAILER_PASS', + 'MAILER_SECURE', + 'siteName', + 'siteUrl', + ]); + const html = ` +
+

验证您的邮箱

+
+
+ ${options.context.code} +
+

此验证码将在 10 分钟后失效,非本人操作请忽略。

+
+

点击访问:${configs.siteName}

+
`; + const transporter = nodemailer.createTransport({ + host: configs.MAILER_HOST, + port: configs.MAILER_PORT, + secure: configs.MAILER_SECURE === '1' ? true : false, + auth: { + user: configs.MAILER_USER, + pass: configs.MAILER_PASS, + }, + }); + await transporter.sendMail({ + from: configs.MAILER_USER, + to: options.to, + subject: `验证码${options.context.code}`, + html: html, + }); + } + catch (error) { + console.error('error: ', error); + throw new common_1.HttpException('邮件发送失败!', common_1.HttpStatus.BAD_REQUEST); + } + } +}; +exports.MailerService = MailerService; +exports.MailerService = MailerService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _a : Object]) +], MailerService); + + +/***/ }), +/* 96 */ +/***/ ((module) => { + +module.exports = require("nodemailer"); + +/***/ }), +/* 97 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserService = void 0; +const balance_constant_1 = __webpack_require__(35); +const verification_constant_1 = __webpack_require__(98); +const utils_1 = __webpack_require__(36); +const mailer_service_1 = __webpack_require__(95); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const bcrypt = __webpack_require__(93); +const _ = __webpack_require__(99); +const typeorm_2 = __webpack_require__(3); +const config_entity_1 = __webpack_require__(73); +const userBalance_service_1 = __webpack_require__(34); +const user_constant_1 = __webpack_require__(91); +const globalConfig_service_1 = __webpack_require__(74); +const verification_service_1 = __webpack_require__(100); +const user_entity_1 = __webpack_require__(83); +let UserService = class UserService { + userEntity; + connection; + verificationService; + mailerService; + userBalanceService; + globalConfigService; + configEntity; + constructor(userEntity, connection, verificationService, mailerService, userBalanceService, globalConfigService, configEntity) { + this.userEntity = userEntity; + this.connection = connection; + this.verificationService = verificationService; + this.mailerService = mailerService; + this.userBalanceService = userBalanceService; + this.globalConfigService = globalConfigService; + this.configEntity = configEntity; + } + async createUserAndVerifycation(user, req) { + const { username, email, password, client = 0 } = user; + const where = [{ username }, { email }]; + const u = await this.userEntity.findOne({ where: where }); + if (u && u.status !== user_constant_1.UserStatusEnum.PENDING) { + throw new common_1.HttpException('用户名或者邮箱已被注册!', common_1.HttpStatus.BAD_REQUEST); + } + try { + const userInput = _.cloneDeep(user); + const hashedPassword = bcrypt.hashSync(password, 10); + const ip = (0, utils_1.getClientIp)(req); + userInput.password = hashedPassword; + userInput.registerIp = ip; + userInput.client = client; + let n; + if (!u) { + const userDefaultAvatar = await this.globalConfigService.getConfigs(['userDefaultAvatar']); + userInput.avatar = userDefaultAvatar; + n = await this.userEntity.save(userInput); + } + else { + n = u; + } + const emailConfigs = await this.configEntity.find({ + where: { + configKey: (0, typeorm_2.In)([ + 'isVerifyEmail', + 'registerBaseUrl', + 'registerVerifyEmailTitle', + 'registerVerifyEmailDesc', + 'registerVerifyEmailFrom', + 'registerVerifyExpir', + ]), + }, + }); + const configMap = emailConfigs.reduce((pre, cur) => { + pre[cur.configKey] = cur.configVal; + return pre; + }, {}); + const isVerifyEmail = configMap['isVerifyEmail'] ? Number(configMap['isVerifyEmail']) : 1; + if (isVerifyEmail) { + const expir = configMap['registerVerifyExpir'] + ? Number(configMap['registerVerifyExpir']) + : 30 * 60; + const v = await this.verificationService.createVerification(n, verification_constant_1.VerificationEnum.Registration, expir); + const { email } = v; + console.log('configMap: ', configMap); + console.log(`尝试发送邮件到: ${email}`); + } + else { + const { id } = n; + await this.updateUserStatus(id, user_constant_1.UserStatusEnum.ACTIVE); + await this.userBalanceService.addBalanceToNewUser(id); + } + return n; + } + catch (error) { + console.log('error: ', error); + throw error; + } + } + async getSuper() { + const user = await this.userEntity.findOne({ where: { role: 'super' } }); + return user; + } + async verifyUserCredentials(user) { + const { username, password, uid = 0, phone } = user; + let u = null; + if (uid > 0) { + u = await this.userEntity.findOne({ where: { id: uid } }); + if (!u) { + throw new common_1.HttpException('当前账户不存在!', common_1.HttpStatus.BAD_REQUEST); + } + if (!bcrypt.compareSync(password, u.password)) { + throw new common_1.HttpException('当前密码错误!', common_1.HttpStatus.BAD_REQUEST); + } + } + if (username && password) { + const where = [{ username }, { email: username }, { phone: username }]; + u = await this.userEntity.findOne({ where: where }); + if (!u) { + throw new common_1.HttpException('当前账户不存在!', common_1.HttpStatus.BAD_REQUEST); + } + if (!bcrypt.compareSync(password, u.password)) { + throw new common_1.HttpException('当前密码错误!', common_1.HttpStatus.BAD_REQUEST); + } + } + if (!u) { + throw new common_1.HttpException('当前账户不存在!', common_1.HttpStatus.BAD_REQUEST); + } + if (u.status !== user_constant_1.UserStatusEnum.ACTIVE) { + throw new common_1.HttpException(user_constant_1.UserStatusErrMsg[u.status], common_1.HttpStatus.BAD_REQUEST); + } + return u; + } + async verifyUserPassword(userId, password) { + const u = await this.userEntity.findOne({ where: { id: userId } }); + return bcrypt.compareSync(password, u.password); + } + async updateUserStatus(id, status) { + const u = await this.userEntity.update({ id }, { status }); + return u.affected > 0; + } + async getUserStatus(id) { + const u = await this.userEntity.findOne({ where: { id } }); + return u.status; + } + async queryUserInfoById(id) { + return await this.userEntity.findOne({ where: { id } }); + } + async queryOneUserInfo(userId) { + return await this.userEntity.findOne({ where: { id: userId } }); + } + async checkUserStatus(user) { + const { id: userId, role } = user; + if (role === 'visitor') + return true; + const u = await this.userEntity.findOne({ where: { id: userId } }); + if (!u) { + throw new common_1.HttpException('当前用户信息失效、请重新登录!', common_1.HttpStatus.UNAUTHORIZED); + } + if (u.status === user_constant_1.UserStatusEnum.BLACKLISTED) { + throw new common_1.HttpException('您的账户已被永久加入黑名单、如有疑问、请联系管理员!', common_1.HttpStatus.BAD_REQUEST); + } + if (u.status === user_constant_1.UserStatusEnum.LOCKED) { + throw new common_1.HttpException('您的账户已被封禁、如有疑问、请联系管理员!', common_1.HttpStatus.BAD_REQUEST); + } + } + async getUserInfo(userId) { + console.log('getUserInfo', userId.toString()); + const isVisitor = userId > 100000000; + if (isVisitor) { + common_1.Logger.debug(`检测到游客用户访问: ${userId}`, 'UserService-getUserInfo'); + const visitorInfo = { + username: `游客${userId}`, + avatar: '', + role: 'visitor', + email: `${userId}@visitor.com`, + consecutiveDays: 0, + phone: null, + realName: null, + idCard: null, + nickname: `游客${userId.toString().slice(-6)}`, + isBindWx: false, + }; + const processedId = (userId * 123 + 100000000).toString(36).toUpperCase().slice(-6); + visitorInfo.id = processedId; + let userBalance; + try { + userBalance = await this.userBalanceService.queryUserBalance(userId); + } + catch (error) { + common_1.Logger.debug(`游客余额查询失败,使用默认值: ${error.message}`, 'UserService-getUserInfo'); + userBalance = { + packageId: null, + model3Count: 0, + model4Count: 0, + drawMjCount: 0, + memberModel3Count: 0, + memberModel4Count: 0, + memberDrawMjCount: 0, + sumModel3Count: 0, + sumModel4Count: 0, + sumDrawMjCount: 0, + }; + } + return { userInfo: visitorInfo, userBalance: { ...userBalance } }; + } + const userInfo = await this.userEntity.findOne({ + where: { id: userId }, + select: [ + 'username', + 'avatar', + 'role', + 'email', + 'openId', + 'consecutiveDays', + 'phone', + 'realName', + 'idCard', + 'nickname', + ], + }); + if (!userInfo) { + throw new common_1.HttpException('当前用户信息失效、请重新登录!', common_1.HttpStatus.UNAUTHORIZED); + } + userInfo.isBindWx = !!userInfo?.openId; + delete userInfo.openId; + const userBalance = await this.userBalanceService.queryUserBalance(userId); + const processedId = (userId * 123 + 100000000).toString(36).toUpperCase().slice(-6); + userInfo.id = processedId; + return { userInfo, userBalance: { ...userBalance } }; + } + async getUserById(id) { + return await this.userEntity.findOne({ where: { id } }); + } + async getUserOpenId(openId) { + return await this.userEntity.findOne({ where: { openId } }); + } + async updateInfo(body, req) { + const { id } = req.user; + const u = await this.userEntity.findOne({ where: { id } }); + if (!u) { + throw new common_1.HttpException('当前用户不存在!', common_1.HttpStatus.BAD_REQUEST); + } + if (body.nickname && u.nickname === body.nickname) { + throw new common_1.HttpException('没有变更,无需更改!', common_1.HttpStatus.BAD_REQUEST); + } + const r = await this.userEntity.update({ id }, body); + if (r.affected <= 0) { + throw new common_1.HttpException('修改用户信息失败!', common_1.HttpStatus.BAD_REQUEST); + } + return '修改用户昵称成功!'; + } + async isUsernameTaken(username, excludeUserId) { + const where = { username }; + if (excludeUserId) { + where.id = (0, typeorm_2.Not)(excludeUserId); + } + const user = await this.userEntity.findOne({ where }); + return !!user; + } + async updateUserPassword(userId, password) { + const hashedPassword = bcrypt.hashSync(password, 10); + const r = await this.userEntity.update({ id: userId }, { password: hashedPassword }); + if (r.affected <= 0) { + throw new common_1.HttpException('修改密码失败、请重新试试吧。', common_1.HttpStatus.BAD_REQUEST); + } + } + async userRecharge(body) { + const { userId, model3Count = 0, model4Count = 0, drawMjCount = 0 } = body; + await this.userBalanceService.addBalanceToUser(userId, { + model3Count, + model4Count, + drawMjCount, + }); + const res = await this.userBalanceService.saveRecordRechargeLog({ + userId, + rechargeType: balance_constant_1.RechargeType.ADMIN_GIFT, + model3Count, + model4Count, + drawMjCount, + extent: '', + }); + return res; + } + async queryAll(query, req) { + const { page = 1, size = 10, username, email, status, keyword, phone, nickname } = query; + let where = {}; + username && Object.assign(where, { username: (0, typeorm_2.Like)(`%${username}%`) }); + email && Object.assign(where, { email: (0, typeorm_2.Like)(`%${email}%`) }); + phone && Object.assign(where, { phone: (0, typeorm_2.Like)(`%${phone}%`) }); + nickname && Object.assign(where, { nickname: (0, typeorm_2.Like)(`%${nickname}%`) }); + status && Object.assign(where, { status }); + if (keyword) { + where = [ + { username: (0, typeorm_2.Like)(`%${keyword}%`) }, + { email: (0, typeorm_2.Like)(`%${keyword}%`) }, + { phone: (0, typeorm_2.Like)(`%${keyword}%`) }, + { nickname: (0, typeorm_2.Like)(`%${keyword}%`) }, + ]; + } + const [rows, count] = await this.userEntity.findAndCount({ + skip: (page - 1) * size, + where, + take: size, + order: { createdAt: 'DESC' }, + cache: true, + select: [ + 'username', + 'avatar', + 'role', + 'sign', + 'status', + 'id', + 'email', + 'createdAt', + 'lastLoginIp', + 'phone', + 'realName', + 'idCard', + 'nickname', + ], + }); + const ids = rows.map(t => t.id); + const data = await this.userBalanceService.queryUserBalanceByIds(ids); + rows.forEach((user) => (user.balanceInfo = data.find(t => t.userId === user.id))); + req.user.role !== 'super' && rows.forEach(t => (t.email = (0, utils_1.maskEmail)(t.email))); + req.user.role !== 'super' && rows.forEach(t => (t.lastLoginIp = (0, utils_1.maskIpAddress)(t.lastLoginIp))); + req.user.role !== 'super' && rows.forEach(t => (t.phone = (0, utils_1.maskIpAddress)(t.phone))); + return { rows, count }; + } + async updateStatus(body) { + const { id, status } = body; + const n = await this.userEntity.findOne({ where: { id } }); + if (!n) { + throw new common_1.HttpException('用户不存在!', common_1.HttpStatus.BAD_REQUEST); + } + if (n.role === 'super') { + throw new common_1.HttpException('超级管理员不可被操作!', common_1.HttpStatus.BAD_REQUEST); + } + if (n.role === 'super') { + throw new common_1.HttpException('超级管理员不可被操作!', common_1.HttpStatus.BAD_REQUEST); + } + const r = await this.userEntity.update({ id }, { status }); + if (r.affected <= 0) { + throw new common_1.HttpException('修改用户状态失败!', common_1.HttpStatus.BAD_REQUEST); + } + return '修改用户状态成功!'; + } + async resetUserPass(body) { + const { id } = body; + const u = await this.userEntity.findOne({ where: { id } }); + if (!u) { + throw new common_1.HttpException('用户不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const defaultPassword = '123456'; + const hashPassword = bcrypt.hashSync(defaultPassword, 10); + const raw = await this.userEntity.update({ id }, { password: hashPassword }); + if (raw.affected <= 0) { + throw new common_1.HttpException('重置密码失败!', common_1.HttpStatus.BAD_REQUEST); + } + return `密码重置为[${defaultPassword}]成功!`; + } + async savaLoginIp(userId, ip) { + return await this.userEntity.update({ id: userId }, { lastLoginIp: ip }); + } + async getUserFromOpenId(openId, sceneStr) { + const user = await this.userEntity.findOne({ where: { openId } }); + if (!user) { + const user = await this.createUserFromOpenId(openId); + await this.userBalanceService.addBalanceToNewUser(user.id); + return user; + } + return user; + } + async updateUserInfo(id, userInfo) { + const user = await this.userEntity.findOne({ where: { id } }); + if (!user) { + return; + } + const { nickname, sex, headimgurl } = userInfo; + common_1.Logger.log('更新用户信息: ', userInfo); + return await this.userEntity.update({ id }, { sex: sex, nickname: nickname, avatar: headimgurl }); + } + async createUserFromOpenId(openId) { + const userDefaultAvatar = await this.globalConfigService.getConfigs(['userDefaultAvatar']); + const userInfo = { + username: `用户${(0, utils_1.createRandomUid)()}`, + status: user_constant_1.UserStatusEnum.ACTIVE, + sex: 0, + email: `${(0, utils_1.createRandomUid)()}@default.com`, + openId, + }; + const user = await this.userEntity.save(userInfo); + return user; + } + async createUserFromContact(params) { + const { username, email, phone } = params; + const userInfo = { + username: `用户${(0, utils_1.createRandomUid)()}`, + status: user_constant_1.UserStatusEnum.ACTIVE, + sex: 0, + }; + if (username) { + userInfo.username = username; + } + if (email) { + userInfo.email = email; + } + if (phone) { + userInfo.phone = phone; + } + const user = await this.userEntity.save(userInfo); + return user; + } + async getUserByContact(params) { + const { username, email, phone } = params; + const where = []; + if (username) { + where.push({ username }); + } + if (email) { + where.push({ email }); + } + if (phone) { + where.push({ phone }); + } + return await this.userEntity.findOne({ where }); + } + async bindWx(openId, userId) { + try { + const user = await this.userEntity.findOne({ where: { id: userId } }); + if (!user) + return { status: false, msg: '当前绑定用户不存在!' }; + const bindU = await this.userEntity.findOne({ where: { openId } }); + if (bindU) + return { status: false, msg: '该微信已绑定其他账号!' }; + const res = await this.userEntity.update({ id: userId }, { openId }); + if (res.affected <= 0) + return { status: false, msg: '绑定微信失败、请联系管理员!' }; + return { status: true, msg: '恭喜您绑定成功、后续可直接扫码登录了!' }; + } + catch (error) { + return { status: false, msg: '绑定微信失败、请联系管理员!' }; + } + } + async updateUserOpenId(userId, openId) { + try { + common_1.Logger.log(`执行迁移OpenID操作 - 用户ID: ${userId}, 目标OpenID: ${openId || '(清空)'}`, 'UserService'); + const user = await this.userEntity.findOne({ where: { id: userId } }); + if (!user) { + common_1.Logger.log(`迁移失败: 用户不存在 - ID: ${userId}`, 'UserService'); + return { status: false, msg: '用户不存在' }; + } + const oldOpenId = user.openId; + const res = await this.userEntity.update({ id: userId }, { openId }); + if (res.affected <= 0) { + common_1.Logger.log(`迁移失败: 数据库更新失败 - ID: ${userId}`, 'UserService'); + return { status: false, msg: '数据库更新失败' }; + } + common_1.Logger.log(`迁移成功 - 用户ID: ${userId}, 旧OpenID: ${oldOpenId || '(无)'}, 新OpenID: ${openId || '(已清空)'}`, 'UserService'); + return { + status: true, + msg: '成功更新用户OpenID', + oldOpenId, + newOpenId: openId, + userId, + }; + } + catch (error) { + common_1.Logger.log(`迁移过程异常: ${error.message}`, 'UserService'); + return { status: false, msg: `更新OpenID时出错: ${error.message}` }; + } + } + async getOpenIdByUserId(userId) { + const user = await this.userEntity.findOne({ where: { id: userId } }); + return user?.openId; + } + async verifyUserRegister(params) { + const { username, phone, email } = params; + if (phone) { + const userByPhone = await this.userEntity.findOne({ where: { phone } }); + if (userByPhone) { + return false; + } + } + if (email) { + const userByEmail = await this.userEntity.findOne({ where: { email } }); + if (userByEmail) { + return false; + } + } + if (username) { + const userByUsername = await this.userEntity.findOne({ + where: { username }, + }); + if (userByUsername) { + return false; + } + } + if (!phone && !email && !username) { + return false; + } + return true; + } + async verifyUserRegisterByPhone(params) { + const { username, password, phone, phoneCode } = params; + const user = await this.userEntity.findOne({ + where: [{ username }, { phone }], + }); + if (user && user.username === username) { + throw new common_1.HttpException('用户名已存在、请更换用户名!', common_1.HttpStatus.BAD_REQUEST); + } + if (user && user.phone === phone) { + throw new common_1.HttpException('当前手机号已注册、请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); + } + } + async verifyUserRegisterByEmail(params) { + const { username, email } = params; + console.log(`校验邮箱注册: 开始 - 用户名: ${username}, 邮箱: ${email}`); + const user = await this.userEntity.findOne({ + where: [{ username }, { email }], + }); + if (user && user.username === username) { + console.error(`校验失败: 用户名 "${username}" 已存在`); + throw new common_1.HttpException('用户名已存在、请更换用户名!', common_1.HttpStatus.BAD_REQUEST); + } + if (user && user.email === email) { + console.error(`校验失败: 邮箱 "${email}" 已被注册`); + throw new common_1.HttpException('当前邮箱已注册、请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); + } + console.log(`校验邮箱注册: 成功 - 用户名: ${username}, 邮箱: ${email} 未被占用`); + } + async createUser(userInfo) { + return await this.userEntity.save(userInfo); + } + async saveRealNameInfo(userId, realName, idCard) { + const user = await this.userEntity.findOne({ where: { id: userId } }); + if (!user) { + common_1.Logger.error('用户不存在'); + } + await this.userEntity.update({ id: userId }, { realName, idCard }); + return; + } + async updateUserPhone(userId, phone, username, password) { + const user = await this.userEntity.findOne({ where: { id: userId } }); + const hashedPassword = bcrypt.hashSync(password, 10); + if (!user) { + common_1.Logger.error('用户不存在'); + } + if (!phone || !username || !hashedPassword) { + throw new common_1.HttpException('参数错误!', common_1.HttpStatus.BAD_REQUEST); + } + await this.userEntity.update({ id: userId }, { phone, username, password: hashedPassword }); + return; + } +}; +exports.UserService = UserService; +exports.UserService = UserService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), + __param(6, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Connection !== "undefined" && typeorm_2.Connection) === "function" ? _b : Object, typeof (_c = typeof verification_service_1.VerificationService !== "undefined" && verification_service_1.VerificationService) === "function" ? _c : Object, typeof (_d = typeof mailer_service_1.MailerService !== "undefined" && mailer_service_1.MailerService) === "function" ? _d : Object, typeof (_e = typeof userBalance_service_1.UserBalanceService !== "undefined" && userBalance_service_1.UserBalanceService) === "function" ? _e : Object, typeof (_f = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _f : Object, typeof (_g = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _g : Object]) +], UserService); + + +/***/ }), +/* 98 */ +/***/ ((__unused_webpack_module, exports) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.VerificationEnum = void 0; +var VerificationEnum; +(function (VerificationEnum) { + VerificationEnum[VerificationEnum["Registration"] = 0] = "Registration"; + VerificationEnum[VerificationEnum["PasswordReset"] = 1] = "PasswordReset"; + VerificationEnum[VerificationEnum["ChangeEmail"] = 2] = "ChangeEmail"; +})(VerificationEnum || (exports.VerificationEnum = VerificationEnum = {})); + + +/***/ }), +/* 99 */ +/***/ ((module) => { + +module.exports = require("lodash"); + +/***/ }), +/* 100 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.VerificationService = void 0; +const utils_1 = __webpack_require__(36); +const globalConfig_service_1 = __webpack_require__(74); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const redisCache_service_1 = __webpack_require__(28); +const status_constant_1 = __webpack_require__(77); +const verification_entity_1 = __webpack_require__(101); +const Core = __webpack_require__(102); +const axios_1 = __webpack_require__(39); +let VerificationService = class VerificationService { + verificationEntity; + globalConfigService; + redisCacheService; + constructor(verificationEntity, globalConfigService, redisCacheService) { + this.verificationEntity = verificationEntity; + this.globalConfigService = globalConfigService; + this.redisCacheService = redisCacheService; + } + async createVerification(user, type, expir = 30 * 60) { + const historyVerify = await this.verificationEntity.findOne({ + where: { userId: user.id, type }, + order: { createdAt: 'DESC' }, + }); + if (historyVerify && historyVerify.createdAt.getTime() + 1 * 60 * 1000 > Date.now()) { + const diffS = Math.ceil((historyVerify.createdAt.getTime() + 1 * 60 * 1000 - Date.now()) / 1000); + throw new common_1.HttpException(`${diffS}S内不得重新发送`, common_1.HttpStatus.BAD_REQUEST); + } + const code = (0, utils_1.createRandomCode)(); + const expiresAt = new Date(Date.now() + expir * 1000); + const { id, email } = user; + const verification = { userId: id, type, code, expiresAt, email }; + return await this.verificationEntity.save(verification); + } + async verifyCode({ code, id }, type) { + const v = await this.verificationEntity.findOne({ + where: { id, type }, + order: { createdAt: 'DESC' }, + }); + if (!v) { + throw new common_1.HttpException('验证码不存在', common_1.HttpStatus.BAD_REQUEST); + } + if (v.used === status_constant_1.VerificationUseStatusEnum.USED) { + throw new common_1.HttpException('当前验证码已被使用!', common_1.HttpStatus.BAD_REQUEST); + } + else { + v.used = status_constant_1.VerificationUseStatusEnum.USED; + await this.verificationEntity.update({ id }, v); + } + if (Number(v.code) !== Number(code)) { + throw new common_1.HttpException('验证码错误', common_1.HttpStatus.BAD_REQUEST); + } + if (v.expiresAt < new Date()) { + throw new common_1.HttpException('验证码已过期', common_1.HttpStatus.BAD_REQUEST); + } + return v; + } + async sendPhoneCode(messageInfo) { + const { accessKeyId, accessKeySecret, SignName, TemplateCode } = await this.globalConfigService.getPhoneVerifyConfig(); + console.log('Received messageInfo:', messageInfo); + const { phone, code } = messageInfo; + if (!phone || !code) { + throw new common_1.HttpException('确实必要参数错误!', common_1.HttpStatus.BAD_REQUEST); + } + const client = new Core({ + accessKeyId, + accessKeySecret, + endpoint: 'https://dysmsapi.aliyuncs.com', + apiVersion: '2017-05-25', + }); + const params = { + PhoneNumbers: phone, + SignName, + TemplateCode, + TemplateParam: JSON.stringify({ code }), + }; + const requestOption = { method: 'POST', formatParams: false }; + try { + const response = await client.request('SendSms', params, requestOption); + if (response.Code === 'OK') { + return true; + } + else { + throw new common_1.HttpException(response.Message || '验证码发送失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + catch (error) { + throw new common_1.HttpException(error?.data?.Message || '验证码发送失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async verifyIdentity(identityInfo) { + const appCode = await this.globalConfigService.getConfigs(['appCode']); + const { name, idCard } = identityInfo; + if (!name || !idCard) { + throw new common_1.HttpException('缺少必要参数!', common_1.HttpStatus.BAD_REQUEST); + } + common_1.Logger.debug(`Received identityInfo: ${name}, ${idCard}`); + const apiUrl = 'https://eid.shumaidata.com/eid/check'; + const headers = { + Authorization: `APPCODE ${appCode}`, + 'Content-Type': 'application/x-www-form-urlencoded', + }; + const params = new URLSearchParams({ + name: name, + idcard: idCard, + }); + try { + const response = await axios_1.default.post(apiUrl, params, { headers }); + const responseString = JSON.stringify(response.data); + common_1.Logger.debug(`Received response: ${responseString}`); + switch (response.data.result.res) { + case '1': + return true; + case '2': + common_1.Logger.log('验证不一致', 'VerificationService'); + case '3': + common_1.Logger.log('实名认证异常', 'VerificationService'); + default: + common_1.Logger.log('未知的认证结果', 'VerificationService'); + } + return false; + } + catch (error) { + common_1.Logger.error(`Error: ${error.message}`, error.stack, 'Verification'); + return false; + } + } +}; +exports.VerificationService = VerificationService; +exports.VerificationService = VerificationService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(verification_entity_1.VerificationEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _b : Object, typeof (_c = typeof redisCache_service_1.RedisCacheService !== "undefined" && redisCache_service_1.RedisCacheService) === "function" ? _c : Object]) +], VerificationService); + + +/***/ }), +/* 101 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.VerificationEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let VerificationEntity = class VerificationEntity extends baseEntity_1.BaseEntity { + userId; + type; + code; + expiresAt; + email; + used; +}; +exports.VerificationEntity = VerificationEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户id' }), + __metadata("design:type", Number) +], VerificationEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false, comment: '验证类型' }), + __metadata("design:type", Number) +], VerificationEntity.prototype, "type", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: false, comment: '验证码' }), + __metadata("design:type", Number) +], VerificationEntity.prototype, "code", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '过期时间' }), + __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) +], VerificationEntity.prototype, "expiresAt", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 64, nullable: false, comment: '发送的邮箱' }), + __metadata("design:type", String) +], VerificationEntity.prototype, "email", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 0, nullable: false, comment: '是否已经使用了' }), + __metadata("design:type", Number) +], VerificationEntity.prototype, "used", void 0); +exports.VerificationEntity = VerificationEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'verification' }) +], VerificationEntity); + + +/***/ }), +/* 102 */ +/***/ ((module) => { + +module.exports = require("@alicloud/pop-core"); + +/***/ }), +/* 103 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SuperAuthGuard = void 0; +const common_1 = __webpack_require__(2); +const jwtAuth_guard_1 = __webpack_require__(87); +let SuperAuthGuard = class SuperAuthGuard extends jwtAuth_guard_1.JwtAuthGuard { + async canActivate(context) { + const isAuthorized = await super.canActivate(context); + if (!isAuthorized) { + return false; + } + const request = context.switchToHttp().getRequest(); + const user = request.user; + if (user && user.role === 'super') { + return true; + } + else { + throw new common_1.UnauthorizedException('非法操作、非超级管理员无权操作!'); + } + } +}; +exports.SuperAuthGuard = SuperAuthGuard; +exports.SuperAuthGuard = SuperAuthGuard = __decorate([ + (0, common_1.Injectable)() +], SuperAuthGuard); + + +/***/ }), +/* 104 */ +/***/ ((module) => { + +module.exports = require("express"); + +/***/ }), +/* 105 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AppService = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const userBalance_service_1 = __webpack_require__(34); +const app_entity_1 = __webpack_require__(106); +const appCats_entity_1 = __webpack_require__(107); +const userApps_entity_1 = __webpack_require__(108); +let AppService = class AppService { + appCatsEntity; + appEntity; + userAppsEntity; + userBalanceService; + constructor(appCatsEntity, appEntity, userAppsEntity, userBalanceService) { + this.appCatsEntity = appCatsEntity; + this.appEntity = appEntity; + this.userAppsEntity = userAppsEntity; + this.userBalanceService = userBalanceService; + } + async createAppCat(body) { + const { name } = body; + const c = await this.appCatsEntity.findOne({ where: { name } }); + if (c) { + throw new common_1.HttpException('该分类名称已存在!', common_1.HttpStatus.BAD_REQUEST); + } + return await this.appCatsEntity.save(body); + } + async delAppCat(body) { + const { id } = body; + const c = await this.appCatsEntity.findOne({ where: { id } }); + if (!c) { + throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const apps = await this.appEntity.find(); + const appsWithThisCat = apps.filter(app => { + const catIds = app.catId.split(','); + return catIds.includes(id.toString()); + }); + if (appsWithThisCat.length > 0) { + throw new common_1.HttpException('该分类下存在App,不可删除!', common_1.HttpStatus.BAD_REQUEST); + } + const res = await this.appCatsEntity.delete(id); + if (res.affected > 0) + return '删除成功'; + throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST); + } + async updateAppCats(body) { + const { id, name } = body; + const c = await this.appCatsEntity.findOne({ + where: { name, id: (0, typeorm_2.Not)(id) }, + }); + if (c) { + throw new common_1.HttpException('该分类名称已存在!', common_1.HttpStatus.BAD_REQUEST); + } + const res = await this.appCatsEntity.update({ id }, body); + if (res.affected > 0) + return '修改成功'; + throw new common_1.HttpException('修改失败!', common_1.HttpStatus.BAD_REQUEST); + } + async queryOneCat(params, req) { + const { id } = params; + if (!id) { + throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST); + } + const app = await this.appEntity.findOne({ where: { id } }); + if (!app) { + throw new common_1.HttpException('应用不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const appData = app; + return { + demoData: appData.demoData ? appData.demoData.split('\n') : [], + coverImg: appData.coverImg, + des: appData.des, + name: appData.name, + isGPTs: appData.isGPTs, + isFlowith: appData.isFlowith, + flowithId: appData.flowithId, + flowithName: appData.flowithName, + isFixedModel: appData.isFixedModel, + appModel: appData.appModel, + backgroundImg: appData.backgroundImg, + prompt: appData.prompt, + }; + } + async appCatsList(query, req) { + const { page = 1, size = 10, name, status } = query; + const where = {}; + name && (where.name = (0, typeorm_2.Like)(`%${name}%`)); + [0, 1, '0', '1'].includes(status) && (where.status = status); + const [rows, count] = await this.appCatsEntity.findAndCount({ + where, + order: { order: 'DESC' }, + skip: (page - 1) * size, + take: size, + }); + let filteredRows = [...rows]; + if (req?.user?.role !== 'super') { + const userCatIds = await this.userBalanceService.getUserApps(Number(req.user.id)); + const userCatIdsSet = new Set(userCatIds); + filteredRows = rows.filter(cat => { + if (userCatIdsSet.has(cat.id.toString())) { + return true; + } + return cat.hideFromNonMember !== 1; + }); + } + const catIds = filteredRows.map(item => item.id); + const apps = await this.appEntity.find(); + const appCountMap = {}; + catIds.forEach(id => { + appCountMap[id] = 0; + }); + apps.forEach(item => { + const appCatIds = item.catId.split(','); + appCatIds.forEach(catId => { + const catIdNum = Number(catId); + if (catIds.includes(catIdNum)) { + appCountMap[catIdNum] = (appCountMap[catIdNum] || 0) + 1; + } + }); + }); + filteredRows.forEach((item) => (item.appCount = appCountMap[item.id] || 0)); + return { rows: filteredRows, count: filteredRows.length }; + } + async appList(req, query, orderKey = 'id') { + const { page = 1, size = 10, name, status, catId, role } = query; + const where = {}; + name && (where.name = (0, typeorm_2.Like)(`%${name}%`)); + let filteredByCategory = null; + if (catId) { + const apps = await this.appEntity.find(); + filteredByCategory = apps + .filter(app => { + const appCatIds = app.catId.split(','); + return appCatIds.includes(catId.toString()); + }) + .map(app => app.id); + if (filteredByCategory.length === 0) { + return { rows: [], count: 0 }; + } + where.id = (0, typeorm_2.In)(filteredByCategory); + } + role && (where.role = role); + status && (where.status = status); + const [rows, count] = await this.appEntity.findAndCount({ + where, + order: { [orderKey]: 'DESC' }, + skip: (page - 1) * size, + take: size, + }); + const allCats = await this.appCatsEntity.find(); + const catsMap = {}; + allCats.forEach(cat => { + catsMap[cat.id] = cat; + }); + rows.forEach((item) => { + const catIds = item.catId.split(','); + const catNames = catIds + .map(id => { + const cat = catsMap[Number(id)]; + return cat ? cat.name : ''; + }) + .filter(name => name); + item.catName = catNames.join(', '); + item.backgroundImg = item.backgroundImg; + item.prompt = item.prompt; + }); + if (req?.user?.role !== 'super') { + rows.forEach((item) => { + delete item.preset; + }); + } + return { rows, count }; + } + async frontAppList(req, query, orderKey = 'id') { + const { page = 1, size = 1000, catId } = query; + const where = [ + { + status: (0, typeorm_2.In)([1, 4]), + userId: (0, typeorm_2.IsNull)(), + public: false, + }, + { userId: (0, typeorm_2.MoreThan)(0), public: true }, + ]; + const userCatIds = await this.userBalanceService.getUserApps(Number(req.user.id)); + const userCatIdsSet = new Set(userCatIds); + if (catId) { + const apps = await this.appEntity.find(); + const filteredByCategory = apps + .filter(app => { + const appCatIds = app.catId.split(','); + return appCatIds.includes(catId.toString()); + }) + .map(app => app.id); + if (filteredByCategory.length === 0) { + return { rows: [], count: 0 }; + } + where[0].id = (0, typeorm_2.In)(filteredByCategory); + where[1].id = (0, typeorm_2.In)(filteredByCategory); + } + const [rows, count] = await this.appEntity.findAndCount({ + where, + order: { order: 'DESC' }, + skip: (page - 1) * size, + take: size, + }); + const allCats = await this.appCatsEntity.find(); + const catsMap = {}; + allCats.forEach(cat => { + catsMap[cat.id] = cat; + }); + let filteredRows = [...rows]; + if (req?.user?.role !== 'super') { + filteredRows = rows.filter(app => { + const appCatIds = app.catId.split(',').map(id => Number(id)); + for (const catId of appCatIds) { + if (userCatIdsSet.has(catId.toString())) { + return true; + } + } + for (const catId of appCatIds) { + const cat = catsMap[catId]; + if (cat && cat.isMember === 1 && cat.hideFromNonMember === 1) { + return false; + } + } + return true; + }); + } + filteredRows.forEach((item) => { + const appCatIds = item.catId.split(','); + const catNames = appCatIds + .map(id => { + const cat = catsMap[Number(id)]; + return cat ? cat.name : ''; + }) + .filter(name => name); + item.catName = catNames.join(','); + item.backgroundImg = item.backgroundImg; + }); + if (req?.user?.role !== 'super') { + filteredRows.forEach((item) => { + delete item.preset; + }); + } + return { rows: filteredRows, count: filteredRows.length }; + } + async searchAppList(body) { + const { page = 1, size = 1000, keyword, catId, userId, role } = body; + let baseWhere = [ + { + status: (0, typeorm_2.In)([1, 4]), + userId: (0, typeorm_2.IsNull)(), + public: false, + }, + { userId: (0, typeorm_2.MoreThan)(0), public: true }, + ]; + if (keyword) { + baseWhere = baseWhere.map(condition => ({ + ...condition, + name: (0, typeorm_2.Like)(`%${keyword}%`), + })); + } + if (catId && !isNaN(Number(catId))) { + const apps = await this.appEntity.find(); + const filteredByCategory = apps + .filter(app => { + const appCatIds = app.catId.split(','); + return appCatIds.includes(catId.toString()); + }) + .map(app => app.id); + if (filteredByCategory.length === 0) { + return { rows: [], count: 0 }; + } + baseWhere = baseWhere.map(condition => ({ + ...condition, + id: (0, typeorm_2.In)(filteredByCategory), + })); + } + try { + const userIdNum = isNaN(Number(userId)) ? 0 : Number(userId); + const userCatIds = await this.userBalanceService.getUserApps(userIdNum); + const userCatIdsSet = new Set(userCatIds); + const [rows, count] = await this.appEntity.findAndCount({ + where: baseWhere, + skip: (page - 1) * size, + take: size, + }); + const allCats = await this.appCatsEntity.find(); + const catsMap = {}; + allCats.forEach(cat => { + catsMap[cat.id] = cat; + }); + let filteredRows = [...rows]; + if (role !== 'super') { + filteredRows = rows.filter(app => { + const appCatIds = app.catId.split(',').map(id => Number(id)); + for (const catId of appCatIds) { + if (userCatIdsSet.has(catId.toString())) { + return true; + } + } + for (const catId of appCatIds) { + const cat = catsMap[catId]; + if (cat && cat.isMember === 1 && cat.hideFromNonMember === 1) { + return false; + } + } + return true; + }); + } + filteredRows.forEach((item) => { + const appCatIds = item.catId.split(','); + const catNames = appCatIds + .map(id => { + const cat = catsMap[Number(id)]; + return cat ? cat.name : ''; + }) + .filter(name => name); + item.catName = catNames.join(', '); + item.backgroundImg = item.backgroundImg; + item.prompt = item.prompt; + if (role !== 'super') { + delete item.preset; + } + }); + return { rows: filteredRows, count: filteredRows.length }; + } + catch (error) { + throw new common_1.HttpException('查询应用列表失败', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } + async createApp(body) { + const { name, catId } = body; + body.role = 'system'; + const a = await this.appEntity.findOne({ where: { name } }); + if (a) { + throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST); + } + if (!catId) { + throw new common_1.HttpException('缺少分类ID!', common_1.HttpStatus.BAD_REQUEST); + } + const catIds = catId.split(','); + for (const id of catIds) { + const numId = Number(id); + if (isNaN(numId)) { + throw new common_1.HttpException(`分类ID ${id} 不是有效的数字!`, common_1.HttpStatus.BAD_REQUEST); + } + const c = await this.appCatsEntity.findOne({ where: { id: numId } }); + if (!c) { + throw new common_1.HttpException(`分类ID ${id} 不存在!`, common_1.HttpStatus.BAD_REQUEST); + } + } + try { + const saveData = { ...body }; + if (!saveData.id || isNaN(Number(saveData.id))) { + delete saveData.id; + } + saveData.public = false; + saveData.appModel = saveData.appModel || ''; + saveData.order = isNaN(Number(saveData.order)) ? 100 : saveData.order; + saveData.status = isNaN(Number(saveData.status)) ? 1 : saveData.status; + saveData.isGPTs = isNaN(Number(saveData.isGPTs)) ? 0 : saveData.isGPTs; + saveData.isFlowith = isNaN(Number(saveData.isFlowith)) ? 0 : saveData.isFlowith; + saveData.flowithId = saveData.flowithId || ''; + saveData.flowithName = saveData.flowithName || ''; + saveData.flowithKey = saveData.flowithKey || ''; + saveData.isFixedModel = isNaN(Number(saveData.isFixedModel)) ? 0 : saveData.isFixedModel; + saveData.backgroundImg = saveData.backgroundImg || ''; + saveData.prompt = saveData.prompt || ''; + return await this.appEntity.save(saveData); + } + catch (error) { + throw new common_1.HttpException(`保存应用失败`, common_1.HttpStatus.BAD_REQUEST); + } + } + async updateApp(body) { + const { id, name, catId, status } = body; + if (id === undefined || id === null || isNaN(Number(id))) { + throw new common_1.HttpException('无效的应用ID!', common_1.HttpStatus.BAD_REQUEST); + } + const a = await this.appEntity.findOne({ where: { name, id: (0, typeorm_2.Not)(id) } }); + if (a) { + throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST); + } + const catIds = catId.split(','); + for (const id of catIds) { + const c = await this.appCatsEntity.findOne({ where: { id: Number(id) } }); + if (!c) { + throw new common_1.HttpException(`分类ID ${id} 不存在!`, common_1.HttpStatus.BAD_REQUEST); + } + } + const updateData = { ...body }; + const curApp = await this.appEntity.findOne({ where: { id } }); + const curAppData = curApp; + updateData.appModel = updateData.appModel ?? (curAppData.appModel || ''); + updateData.order = isNaN(Number(updateData.order)) ? 100 : updateData.order; + updateData.status = isNaN(Number(updateData.status)) ? 1 : updateData.status; + updateData.isGPTs = isNaN(Number(updateData.isGPTs)) ? 0 : updateData.isGPTs; + updateData.isFlowith = isNaN(Number(updateData.isFlowith)) ? 0 : updateData.isFlowith; + updateData.flowithId = updateData.flowithId ?? (curAppData.flowithId || ''); + updateData.flowithName = updateData.flowithName ?? (curAppData.flowithName || ''); + updateData.isFixedModel = isNaN(Number(updateData.isFixedModel)) ? 0 : updateData.isFixedModel; + updateData.backgroundImg = updateData.backgroundImg ?? (curAppData.backgroundImg || ''); + updateData.prompt = updateData.prompt ?? (curAppData.prompt || ''); + if (curAppData.status !== updateData.status) { + await this.userAppsEntity.update({ appId: id }, { status: updateData.status }); + } + const res = await this.appEntity.update({ id }, updateData); + if (res.affected > 0) + return '修改App信息成功'; + throw new common_1.HttpException('修改App信息失败!', common_1.HttpStatus.BAD_REQUEST); + } + async delApp(body) { + const { id } = body; + const a = await this.appEntity.findOne({ where: { id } }); + if (!a) { + throw new common_1.HttpException('该应用不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const res = await this.appEntity.delete(id); + if (res.affected > 0) + return '删除App成功'; + throw new common_1.HttpException('删除App失败!', common_1.HttpStatus.BAD_REQUEST); + } + async collect(body, req) { + const { appId } = body; + const { id: userId } = req.user; + if (appId === undefined || appId === null || isNaN(Number(appId))) { + throw new common_1.HttpException('无效的应用ID!', common_1.HttpStatus.BAD_REQUEST); + } + if (userId === undefined || userId === null || isNaN(Number(userId))) { + throw new common_1.HttpException('无效的用户ID!', common_1.HttpStatus.BAD_REQUEST); + } + const historyApp = await this.userAppsEntity.findOne({ + where: { appId, userId }, + }); + if (historyApp) { + const r = await this.userAppsEntity.delete({ appId, userId }); + if (r.affected > 0) { + return '取消收藏成功!'; + } + else { + throw new common_1.HttpException('取消收藏失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + const app = await this.appEntity.findOne({ where: { id: appId } }); + if (!app) { + throw new common_1.HttpException('应用不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const { id, role: appRole, catId } = app; + const collectInfo = { + userId, + appId: id, + catId, + appRole, + public: true, + status: 1, + }; + await this.userAppsEntity.save(collectInfo); + return '已将应用加入到我的收藏!'; + } + async mineApps(req, query = { page: 1, size: 30 }) { + const { id } = req.user; + const { page = 1, size = 30 } = query; + let filteredRows = []; + try { + const userCatIds = await this.userBalanceService.getUserApps(Number(id)); + const userCatIdsSet = new Set(userCatIds); + const [rows, count] = await this.userAppsEntity.findAndCount({ + where: { userId: id, status: (0, typeorm_2.In)([1, 3, 4, 5]) }, + order: { id: 'DESC' }, + skip: (page - 1) * size, + take: size, + }); + const appIds = rows.map(item => item.appId); + const appsInfo = await this.appEntity.find({ where: { id: (0, typeorm_2.In)(appIds) } }); + const allCats = await this.appCatsEntity.find(); + const catsMap = {}; + allCats.forEach(cat => { + catsMap[cat.id] = cat; + }); + filteredRows = [...rows]; + if (req?.user?.role !== 'super') { + filteredRows = rows.filter(item => { + const app = appsInfo.find(c => c.id === item.appId); + if (!app) + return false; + const appCatIds = app.catId.split(',').map(id => Number(id)); + for (const catId of appCatIds) { + if (userCatIdsSet.has(catId.toString())) { + return true; + } + } + for (const catId of appCatIds) { + const cat = catsMap[catId]; + if (cat && cat.isMember === 1 && cat.hideFromNonMember === 1) { + return false; + } + } + return true; + }); + } + filteredRows.forEach((item) => { + const app = appsInfo.find(c => c.id === item.appId); + if (!app) + return; + item.appName = app.name || ''; + item.appRole = app.role || ''; + item.appDes = app.des || ''; + item.coverImg = app.coverImg || ''; + item.demoData = app.demoData || ''; + item.backgroundImg = app.backgroundImg || ''; + const appCatIds = app.catId.split(','); + const catNames = appCatIds + .map(id => { + const cat = catsMap[Number(id)]; + return cat ? cat.name : ''; + }) + .filter(name => name); + item.catName = catNames.join(','); + item.preset = app.userId === id ? app.preset : '******'; + item.prompt = app.prompt || ''; + }); + } + catch (error) { + throw new common_1.HttpException('获取用户应用列表失败', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + return { rows: filteredRows, count: filteredRows.length }; + } + async checkAppIsMemberOnly(appId) { + try { + const appInfo = await this.appEntity.findOne({ + where: { id: appId }, + select: ['catId'], + }); + if (!appInfo || !appInfo.catId) { + return false; + } + const catIds = appInfo.catId + .split(',') + .map(id => Number(id.trim())) + .filter(id => id > 0); + if (catIds.length === 0) { + return false; + } + const cats = await this.appCatsEntity.find({ + where: { id: (0, typeorm_2.In)(catIds) }, + select: ['id', 'isMember'], + }); + return cats.some(cat => cat.isMember === 1); + } + catch (error) { + return false; + } + } +}; +exports.AppService = AppService; +exports.AppService = AppService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(appCats_entity_1.AppCatsEntity)), + __param(1, (0, typeorm_1.InjectRepository)(app_entity_1.AppEntity)), + __param(2, (0, typeorm_1.InjectRepository)(userApps_entity_1.UserAppsEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof userBalance_service_1.UserBalanceService !== "undefined" && userBalance_service_1.UserBalanceService) === "function" ? _d : Object]) +], AppService); + + +/***/ }), +/* 106 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AppEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let AppEntity = class AppEntity extends baseEntity_1.BaseEntity { + name; + catId; + des; + preset; + coverImg; + order; + status; + demoData; + role; + isGPTs; + isFixedModel; + appModel; + gizmoID; + public; + userId; + isFlowith; + flowithId; + flowithName; + flowithKey; + backgroundImg; + prompt; +}; +exports.AppEntity = AppEntity; +__decorate([ + (0, typeorm_1.Column)({ unique: true, comment: 'App应用名称' }), + __metadata("design:type", String) +], AppEntity.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App分类Id列表,多个分类Id以逗号分隔', type: 'text' }), + __metadata("design:type", String) +], AppEntity.prototype, "catId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用描述信息' }), + __metadata("design:type", String) +], AppEntity.prototype, "des", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用预设场景信息', type: 'text' }), + __metadata("design:type", String) +], AppEntity.prototype, "preset", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用封面图片', nullable: true, type: 'text' }), + __metadata("design:type", String) +], AppEntity.prototype, "coverImg", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用排序、数字越大越靠前', default: 100 }), + __metadata("design:type", Number) +], AppEntity.prototype, "order", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用是否启用中 0:禁用 1:启用', default: 1 }), + __metadata("design:type", Number) +], AppEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App示例数据', nullable: true, type: 'text' }), + __metadata("design:type", String) +], AppEntity.prototype, "demoData", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用角色 system user', default: 'system' }), + __metadata("design:type", String) +], AppEntity.prototype, "role", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用是否是GPTs', default: '0' }), + __metadata("design:type", Number) +], AppEntity.prototype, "isGPTs", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用是否是固定使用模型', default: '0' }), + __metadata("design:type", Number) +], AppEntity.prototype, "isFixedModel", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用使用的模型', type: 'text' }), + __metadata("design:type", String) +], AppEntity.prototype, "appModel", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'GPTs 的调用ID', default: '' }), + __metadata("design:type", String) +], AppEntity.prototype, "gizmoID", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App是否共享到应用广场', default: false }), + __metadata("design:type", Boolean) +], AppEntity.prototype, "public", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '用户Id', nullable: true }), + __metadata("design:type", Number) +], AppEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '是否使用flowith模型', default: 0 }), + __metadata("design:type", Number) +], AppEntity.prototype, "isFlowith", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'flowith模型ID', nullable: true }), + __metadata("design:type", String) +], AppEntity.prototype, "flowithId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'flowith模型名称', nullable: true }), + __metadata("design:type", String) +], AppEntity.prototype, "flowithName", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'flowith模型Key', nullable: true }), + __metadata("design:type", String) +], AppEntity.prototype, "flowithKey", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App背景图', nullable: true, type: 'text' }), + __metadata("design:type", String) +], AppEntity.prototype, "backgroundImg", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App提问模版', nullable: true, type: 'text' }), + __metadata("design:type", String) +], AppEntity.prototype, "prompt", void 0); +exports.AppEntity = AppEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'app' }) +], AppEntity); + + +/***/ }), +/* 107 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AppCatsEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let AppCatsEntity = class AppCatsEntity extends baseEntity_1.BaseEntity { + name; + order; + status; + isMember; + hideFromNonMember; +}; +exports.AppCatsEntity = AppCatsEntity; +__decorate([ + (0, typeorm_1.Column)({ unique: true, comment: 'App分类名称' }), + __metadata("design:type", String) +], AppCatsEntity.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App分类排序、数字越大越靠前', default: 100 }), + __metadata("design:type", Number) +], AppCatsEntity.prototype, "order", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App分类是否启用中 0:禁用 1:启用', default: 1 }), + __metadata("design:type", Number) +], AppCatsEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App分类是否为会员专属 0:否 1:是', default: 0 }), + __metadata("design:type", Number) +], AppCatsEntity.prototype, "isMember", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '非会员是否隐藏 0:否 1:是', default: 0 }), + __metadata("design:type", Number) +], AppCatsEntity.prototype, "hideFromNonMember", void 0); +exports.AppCatsEntity = AppCatsEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'app_cats' }) +], AppCatsEntity); + + +/***/ }), +/* 108 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserAppsEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let UserAppsEntity = class UserAppsEntity extends baseEntity_1.BaseEntity { + userId; + appId; + appType; + public; + status; + order; +}; +exports.UserAppsEntity = UserAppsEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户ID' }), + __metadata("design:type", Number) +], UserAppsEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '应用ID' }), + __metadata("design:type", Number) +], UserAppsEntity.prototype, "appId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'app类型 system/user', default: 'user' }), + __metadata("design:type", String) +], UserAppsEntity.prototype, "appType", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '是否公开到公告菜单', default: false }), + __metadata("design:type", Boolean) +], UserAppsEntity.prototype, "public", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'app状态 1正常 2审核 3违规', default: 1 }), + __metadata("design:type", Number) +], UserAppsEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: 'App应用排序、数字越大越靠前', default: 100 }), + __metadata("design:type", Number) +], UserAppsEntity.prototype, "order", void 0); +exports.UserAppsEntity = UserAppsEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'user_apps' }) +], UserAppsEntity); + + +/***/ }), +/* 109 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CollectAppDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class CollectAppDto { + appId; +} +exports.CollectAppDto = CollectAppDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要收藏的appId', required: true }), + (0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }), + __metadata("design:type", Number) +], CollectAppDto.prototype, "appId", void 0); + + +/***/ }), +/* 110 */ +/***/ ((module) => { + +module.exports = require("class-validator"); + +/***/ }), +/* 111 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CreateAppDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class CreateAppDto { + name; + catId; + des; + preset; + gizmoID; + isGPTs; + coverImg; + order; + status; + demoData; + role; + isFlowith; + flowithId; + flowithName; + flowithKey; +} +exports.CreateAppDto = CreateAppDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: '前端助手', description: 'app名称', required: true }), + (0, class_validator_1.IsDefined)({ message: 'app名称是必传参数' }), + __metadata("design:type", String) +], CreateAppDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '1,2,3', + description: 'app分类Id列表,多个分类Id以逗号分隔', + required: true, + }), + (0, class_validator_1.IsDefined)({ message: 'app分类Id必传参数' }), + __metadata("design:type", String) +], CreateAppDto.prototype, "catId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '适用于编程编码、期望成为您的编程助手', + description: 'app名称详情描述', + required: false, + }), + (0, class_validator_1.IsDefined)({ message: 'app名称描述是必传参数' }), + __metadata("design:type", String) +], CreateAppDto.prototype, "des", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '你现在是一个翻译官。接下来我说的所有话帮我翻译成中文', + description: '预设的prompt', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], CreateAppDto.prototype, "preset", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'GPTs 的调用ID', + description: 'GPTs 使用的 ID', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], CreateAppDto.prototype, "gizmoID", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '是否GPTs', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreateAppDto.prototype, "isGPTs", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'https://xxxx.png', + description: '套餐封面图片', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], CreateAppDto.prototype, "coverImg", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 100, + description: '套餐排序、数字越大越靠前', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreateAppDto.prototype, "order", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: '套餐状态 0:禁用 1:启用', + required: true, + }), + (0, class_validator_1.IsNumber)({}, { message: '套餐状态必须是Number' }), + (0, class_validator_1.IsIn)([0, 1, 3, 4, 5], { message: '套餐状态错误' }), + __metadata("design:type", Number) +], CreateAppDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '这是一句示例数据', + description: 'app示例数据', + required: false, + }), + __metadata("design:type", String) +], CreateAppDto.prototype, "demoData", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'system', + description: '创建的角色', + required: false, + }), + __metadata("design:type", String) +], CreateAppDto.prototype, "role", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 0, + description: '是否使用flowith模型', + required: false, + }), + __metadata("design:type", Number) +], CreateAppDto.prototype, "isFlowith", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'flowith模型ID', + description: 'flowith模型ID', + required: false, + }), + __metadata("design:type", String) +], CreateAppDto.prototype, "flowithId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'flowith模型名称', + description: 'flowith模型名称', + required: false, + }), + __metadata("design:type", String) +], CreateAppDto.prototype, "flowithName", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'flowith模型Key', + description: 'flowith模型Key', + required: false, + }), + __metadata("design:type", String) +], CreateAppDto.prototype, "flowithKey", void 0); + + +/***/ }), +/* 112 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CreateCatsDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class CreateCatsDto { + name; + order; + status; + isMember; + hideFromNonMember; +} +exports.CreateCatsDto = CreateCatsDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '编程助手', + description: 'app分类名称', + required: true, + }), + (0, class_validator_1.IsDefined)({ message: 'app分类名称是必传参数' }), + __metadata("design:type", String) +], CreateCatsDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 100, + description: '分类排序、数字越大越靠前', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreateCatsDto.prototype, "order", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: '分类状态 0:禁用 1:启用', + required: true, + }), + (0, class_validator_1.IsNumber)({}, { message: '状态必须是Number' }), + (0, class_validator_1.IsIn)([0, 1, 3, 4, 5], { message: '套餐状态错误' }), + __metadata("design:type", Number) +], CreateCatsDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 0, + description: '分类是否为会员专属 0:否 1:是', + required: true, + }), + (0, class_validator_1.IsNumber)({}, { message: '分类是否为会员专属必须是Number' }), + (0, class_validator_1.IsIn)([0, 1], { message: '分类是否为会员专属错误' }), + __metadata("design:type", Number) +], CreateCatsDto.prototype, "isMember", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 0, + description: '非会员是否隐藏 0:否 1:是', + required: true, + }), + (0, class_validator_1.IsNumber)({}, { message: '非会员是否隐藏必须是Number' }), + (0, class_validator_1.IsIn)([0, 1], { message: '非会员是否隐藏状态错误' }), + __metadata("design:type", Number) +], CreateCatsDto.prototype, "hideFromNonMember", void 0); + + +/***/ }), +/* 113 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OperateAppDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class OperateAppDto { + id; +} +exports.OperateAppDto = OperateAppDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要删除的appId', required: true }), + (0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }), + __metadata("design:type", Number) +], OperateAppDto.prototype, "id", void 0); + + +/***/ }), +/* 114 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DeleteCatsDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class DeleteCatsDto { + id; +} +exports.DeleteCatsDto = DeleteCatsDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要删除app分类Id', required: true }), + (0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }), + __metadata("design:type", Number) +], DeleteCatsDto.prototype, "id", void 0); + + +/***/ }), +/* 115 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QuerAppDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class QuerAppDto { + page; + size; + name; + status; + catId; + role; + keyword; +} +exports.QuerAppDto = QuerAppDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAppDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAppDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'name', description: 'app名称', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerAppDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: 'app状态 0:禁用 1:启用 3:审核加入广场中 4:已拒绝加入广场', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAppDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 2, description: 'app分类Id', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAppDto.prototype, "catId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'role', description: 'app角色', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerAppDto.prototype, "role", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '关键词', + description: '搜索关键词', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerAppDto.prototype, "keyword", void 0); + + +/***/ }), +/* 116 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QuerCatsDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QuerCatsDto { + page; + size; + name; + status; +} +exports.QuerCatsDto = QuerCatsDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerCatsDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerCatsDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'name', description: '分类名称', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerCatsDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: '分类状态 0:禁用 1:启用', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerCatsDto.prototype, "status", void 0); + + +/***/ }), +/* 117 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdateAppDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +const createApp_dto_1 = __webpack_require__(111); +class UpdateAppDto extends createApp_dto_1.CreateAppDto { + id; +} +exports.UpdateAppDto = UpdateAppDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要修改的分类Id', required: true }), + (0, class_validator_1.IsNumber)({}, { message: '分类ID必须是Number' }), + __metadata("design:type", Number) +], UpdateAppDto.prototype, "id", void 0); + + +/***/ }), +/* 118 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdateCatsDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +const createCats_dto_1 = __webpack_require__(112); +class UpdateCatsDto extends createCats_dto_1.CreateCatsDto { + id; +} +exports.UpdateCatsDto = UpdateCatsDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要修改的分类Id', required: true }), + (0, class_validator_1.IsNumber)({}, { message: '分类ID必须是Number' }), + __metadata("design:type", Number) +], UpdateCatsDto.prototype, "id", void 0); + + +/***/ }), +/* 119 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AuthModule = void 0; +const jwt_strategy_1 = __webpack_require__(120); +const jwtAuth_guard_1 = __webpack_require__(87); +const common_1 = __webpack_require__(2); +const jwt_1 = __webpack_require__(92); +const passport_1 = __webpack_require__(88); +const typeorm_1 = __webpack_require__(33); +const chatGroup_entity_1 = __webpack_require__(82); +const chatLog_entity_1 = __webpack_require__(75); +const cramiPackage_entity_1 = __webpack_require__(71); +const config_entity_1 = __webpack_require__(73); +const mailer_service_1 = __webpack_require__(95); +const redisCache_module_1 = __webpack_require__(26); +const redisCache_service_1 = __webpack_require__(28); +const user_entity_1 = __webpack_require__(83); +const user_module_1 = __webpack_require__(122); +const accountLog_entity_1 = __webpack_require__(79); +const balance_entity_1 = __webpack_require__(80); +const fingerprint_entity_1 = __webpack_require__(84); +const userBalance_entity_1 = __webpack_require__(81); +const userBalance_service_1 = __webpack_require__(34); +const verification_entity_1 = __webpack_require__(101); +const verification_service_1 = __webpack_require__(100); +const auth_controller_1 = __webpack_require__(129); +const auth_service_1 = __webpack_require__(90); +let AuthModule = class AuthModule { +}; +exports.AuthModule = AuthModule; +exports.AuthModule = AuthModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [ + user_module_1.UserModule, + redisCache_module_1.RedisCacheModule, + passport_1.PassportModule.register({ defaultStrategy: 'jwt' }), + jwt_1.JwtModule.registerAsync({ + inject: [redisCache_service_1.RedisCacheService], + useFactory: async (redisService) => ({ + secret: await redisService.getJwtSecret(), + signOptions: { expiresIn: '7d' }, + }), + }), + typeorm_1.TypeOrmModule.forFeature([ + verification_entity_1.VerificationEntity, + balance_entity_1.BalanceEntity, + accountLog_entity_1.AccountLogEntity, + config_entity_1.ConfigEntity, + cramiPackage_entity_1.CramiPackageEntity, + userBalance_entity_1.UserBalanceEntity, + user_entity_1.UserEntity, + fingerprint_entity_1.FingerprintLogEntity, + chatLog_entity_1.ChatLogEntity, + chatGroup_entity_1.ChatGroupEntity, + ]), + ], + controllers: [auth_controller_1.AuthController], + providers: [ + auth_service_1.AuthService, + jwt_strategy_1.JwtStrategy, + jwtAuth_guard_1.JwtAuthGuard, + mailer_service_1.MailerService, + verification_service_1.VerificationService, + userBalance_service_1.UserBalanceService, + redisCache_service_1.RedisCacheService, + ], + exports: [auth_service_1.AuthService], + }) +], AuthModule); + + +/***/ }), +/* 120 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.JwtStrategy = void 0; +const common_1 = __webpack_require__(2); +const passport_1 = __webpack_require__(88); +const passport_jwt_1 = __webpack_require__(121); +const redisCache_service_1 = __webpack_require__(28); +let JwtStrategy = class JwtStrategy extends (0, passport_1.PassportStrategy)(passport_jwt_1.Strategy) { + redisService; + constructor(redisService) { + super({ + jwtFromRequest: passport_jwt_1.ExtractJwt.fromAuthHeaderAsBearerToken(), + secretOrKey: redisService.getJwtSecret(), + }); + this.redisService = redisService; + } + async validate(payload) { + return payload; + } +}; +exports.JwtStrategy = JwtStrategy; +exports.JwtStrategy = JwtStrategy = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof redisCache_service_1.RedisCacheService !== "undefined" && redisCache_service_1.RedisCacheService) === "function" ? _a : Object]) +], JwtStrategy); + + +/***/ }), +/* 121 */ +/***/ ((module) => { + +module.exports = require("passport-jwt"); + +/***/ }), +/* 122 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const app_entity_1 = __webpack_require__(106); +const appCats_entity_1 = __webpack_require__(107); +const chatGroup_entity_1 = __webpack_require__(82); +const chatLog_entity_1 = __webpack_require__(75); +const cramiPackage_entity_1 = __webpack_require__(71); +const config_entity_1 = __webpack_require__(73); +const mailer_service_1 = __webpack_require__(95); +const redisCache_service_1 = __webpack_require__(28); +const accountLog_entity_1 = __webpack_require__(79); +const balance_entity_1 = __webpack_require__(80); +const fingerprint_entity_1 = __webpack_require__(84); +const userBalance_entity_1 = __webpack_require__(81); +const userBalance_service_1 = __webpack_require__(34); +const verification_entity_1 = __webpack_require__(101); +const verification_service_1 = __webpack_require__(100); +const user_controller_1 = __webpack_require__(123); +const user_entity_1 = __webpack_require__(83); +const user_service_1 = __webpack_require__(97); +let UserModule = class UserModule { +}; +exports.UserModule = UserModule; +exports.UserModule = UserModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [ + typeorm_1.TypeOrmModule.forFeature([ + user_entity_1.UserEntity, + verification_entity_1.VerificationEntity, + balance_entity_1.BalanceEntity, + accountLog_entity_1.AccountLogEntity, + config_entity_1.ConfigEntity, + cramiPackage_entity_1.CramiPackageEntity, + userBalance_entity_1.UserBalanceEntity, + fingerprint_entity_1.FingerprintLogEntity, + chatLog_entity_1.ChatLogEntity, + chatGroup_entity_1.ChatGroupEntity, + app_entity_1.AppEntity, + appCats_entity_1.AppCatsEntity, + ]), + ], + controllers: [user_controller_1.UserController], + providers: [ + user_service_1.UserService, + verification_service_1.VerificationService, + userBalance_service_1.UserBalanceService, + redisCache_service_1.RedisCacheService, + mailer_service_1.MailerService, + ], + exports: [user_service_1.UserService], + }) +], UserModule); + + +/***/ }), +/* 123 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const jwtAuth_guard_1 = __webpack_require__(87); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const queryAllUser_dto_1 = __webpack_require__(124); +const resetUserPass_dto_1 = __webpack_require__(125); +const updateUser_dto_1 = __webpack_require__(126); +const updateUserStatus_dto_1 = __webpack_require__(127); +const userRecharge_dto_1 = __webpack_require__(128); +const user_service_1 = __webpack_require__(97); +let UserController = class UserController { + userService; + constructor(userService) { + this.userService = userService; + } + async update(body, req) { + return await this.userService.updateInfo(body, req); + } + async userRecharge(body) { + return await this.userService.userRecharge(body); + } + async queryAll(query, req) { + return await this.userService.queryAll(query, req); + } + async updateStatus(body) { + return await this.userService.updateStatus(body); + } + async resetUserPass(body) { + return await this.userService.resetUserPass(body); + } +}; +exports.UserController = UserController; +__decorate([ + (0, common_1.Post)('update'), + (0, swagger_1.ApiOperation)({ summary: '更新用户信息' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof updateUser_dto_1.UpdateUserDto !== "undefined" && updateUser_dto_1.UpdateUserDto) === "function" ? _b : Object, typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "update", null); +__decorate([ + (0, common_1.Post)('recharge'), + (0, swagger_1.ApiOperation)({ summary: '用户充值' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof userRecharge_dto_1.UserRechargeDto !== "undefined" && userRecharge_dto_1.UserRechargeDto) === "function" ? _d : Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "userRecharge", null); +__decorate([ + (0, common_1.Get)('queryAll'), + (0, swagger_1.ApiOperation)({ summary: '查询所有用户' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Query)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof queryAllUser_dto_1.QueryAllUserDto !== "undefined" && queryAllUser_dto_1.QueryAllUserDto) === "function" ? _e : Object, typeof (_f = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _f : Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "queryAll", null); +__decorate([ + (0, common_1.Post)('updateStatus'), + (0, swagger_1.ApiOperation)({ summary: '更新用户状态' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_g = typeof updateUserStatus_dto_1.UpdateUserStatusDto !== "undefined" && updateUserStatus_dto_1.UpdateUserStatusDto) === "function" ? _g : Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "updateStatus", null); +__decorate([ + (0, common_1.Post)('resetUserPass'), + (0, swagger_1.ApiOperation)({ summary: '重置用户密码' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_h = typeof resetUserPass_dto_1.ResetUserPassDto !== "undefined" && resetUserPass_dto_1.ResetUserPassDto) === "function" ? _h : Object]), + __metadata("design:returntype", Promise) +], UserController.prototype, "resetUserPass", null); +exports.UserController = UserController = __decorate([ + (0, common_1.Controller)('user'), + (0, swagger_1.ApiTags)('user'), + __metadata("design:paramtypes", [typeof (_a = typeof user_service_1.UserService !== "undefined" && user_service_1.UserService) === "function" ? _a : Object]) +], UserController); + + +/***/ }), +/* 124 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryAllUserDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class QueryAllUserDto { + page; + size; + username; + email; + phone; + status; + keyword; + nickname; +} +exports.QueryAllUserDto = QueryAllUserDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryAllUserDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryAllUserDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '99AI', description: '用户姓名', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QueryAllUserDto.prototype, "username", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'aiweb@aiweb.com', + description: '用户邮箱', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QueryAllUserDto.prototype, "email", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '18888888888', + description: '用户手机号码', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QueryAllUserDto.prototype, "phone", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 2, description: '用户状态', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryAllUserDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'super', description: '关键字查询', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QueryAllUserDto.prototype, "keyword", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '用户昵称', description: '用户昵称', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QueryAllUserDto.prototype, "nickname", void 0); + + +/***/ }), +/* 125 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ResetUserPassDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class ResetUserPassDto { + id; +} +exports.ResetUserPassDto = ResetUserPassDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + nullable: true, + description: '用户id', + required: false, + }), + (0, class_validator_1.IsDefined)({ message: '用户id是必传参数' }), + __metadata("design:type", Number) +], ResetUserPassDto.prototype, "id", void 0); + + +/***/ }), +/* 126 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdateUserDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class UpdateUserDto { + nickname; + avatar; +} +exports.UpdateUserDto = UpdateUserDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'cooper', + nullable: true, + description: '用户名称', + required: false, + }), + (0, class_validator_1.MinLength)(2, { message: '用户名最低需要大于2位数!' }), + (0, class_validator_1.MaxLength)(12, { message: '用户名不得超过12位!' }), + (0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], UpdateUserDto.prototype, "nickname", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '', description: '用户头像', required: false }), + (0, class_validator_1.IsNotEmpty)({ message: '用户头像不能为空!' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], UpdateUserDto.prototype, "avatar", void 0); + + +/***/ }), +/* 127 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdateUserStatusDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class UpdateUserStatusDto { + status; + id; +} +exports.UpdateUserStatusDto = UpdateUserStatusDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 2, description: '用户状态', required: false }), + (0, class_validator_1.IsNotEmpty)({ message: '用户状态不能为空!' }), + (0, class_validator_1.IsDefined)({ message: '用户状态是必传参数' }), + (0, class_validator_1.IsIn)([0, 1, 2, 3], { message: '非法参数、用户状态非法!' }), + __metadata("design:type", Number) +], UpdateUserStatusDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '修改的用户id', required: false }), + (0, class_validator_1.IsDefined)({ message: '用户id是必传参数' }), + __metadata("design:type", Number) +], UpdateUserStatusDto.prototype, "id", void 0); + + +/***/ }), +/* 128 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserRechargeDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class UserRechargeDto { + userId; + model3Count; + model4Count; + drawMjCount; +} +exports.UserRechargeDto = UserRechargeDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '用户id', required: true }), + (0, class_validator_1.IsDefined)({ message: '用户id是必传参数' }), + __metadata("design:type", Number) +], UserRechargeDto.prototype, "userId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 100, + description: '用户对话模型3次数', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UserRechargeDto.prototype, "model3Count", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 5, + description: '用户对话模型4次数', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UserRechargeDto.prototype, "model4Count", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 0, description: '用户MJ额度', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UserRechargeDto.prototype, "drawMjCount", void 0); + + +/***/ }), +/* 129 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AuthController = void 0; +const jwtAuth_guard_1 = __webpack_require__(87); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const auth_service_1 = __webpack_require__(90); +const authLogin_dto_1 = __webpack_require__(130); +const updatePassByOther_dto_1 = __webpack_require__(131); +const updatePassword_dto_1 = __webpack_require__(132); +let AuthController = class AuthController { + authService; + constructor(authService) { + this.authService = authService; + } + async login(body, req) { + return this.authService.login(body, req); + } + async updatePassword(req, body) { + return this.authService.updatePassword(req, body); + } + async updatePassByOther(req, body) { + return this.authService.updatePassByOther(req, body); + } + async getInfo(req) { + const { id, role } = req.user || {}; + const fingerprint = req.headers.fingerprint; + common_1.Logger.debug(`用户信息请求 | ID: ${id} | 角色: ${role} | 指纹: ${fingerprint}`, 'AuthController'); + return this.authService.getInfo(req); + } + async sendCode(parmas) { + return this.authService.sendCode(parmas); + } + async sendPhoneCode(parmas) { + return this.authService.sendPhoneCode(parmas); + } + async verifyIdentity(req, body) { + return this.authService.verifyIdentity(req, body); + } + async verifyPhoneIdentity(req, body) { + return this.authService.verifyPhoneIdentity(req, body); + } +}; +exports.AuthController = AuthController; +__decorate([ + (0, common_1.Post)('login'), + (0, swagger_1.ApiOperation)({ summary: '用户登录' }), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof authLogin_dto_1.UserLoginDto !== "undefined" && authLogin_dto_1.UserLoginDto) === "function" ? _b : Object, typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "login", null); +__decorate([ + (0, common_1.Post)('updatePassword'), + (0, swagger_1.ApiOperation)({ summary: '用户更改密码' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _d : Object, typeof (_e = typeof updatePassword_dto_1.UpdatePasswordDto !== "undefined" && updatePassword_dto_1.UpdatePasswordDto) === "function" ? _e : Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "updatePassword", null); +__decorate([ + (0, common_1.Post)('updatePassByOther'), + (0, swagger_1.ApiOperation)({ summary: '管理员更改用户密码' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _f : Object, typeof (_g = typeof updatePassByOther_dto_1.UpdatePassByOtherDto !== "undefined" && updatePassByOther_dto_1.UpdatePassByOtherDto) === "function" ? _g : Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "updatePassByOther", null); +__decorate([ + (0, common_1.Get)('getInfo'), + (0, swagger_1.ApiOperation)({ summary: '获取用户个人信息' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_h = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _h : Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "getInfo", null); +__decorate([ + (0, common_1.Post)('sendCode'), + (0, swagger_1.ApiOperation)({ summary: '发送验证码' }), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "sendCode", null); +__decorate([ + (0, common_1.Post)('sendPhoneCode'), + (0, swagger_1.ApiOperation)({ summary: '发送手机验证码' }), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "sendPhoneCode", null); +__decorate([ + (0, common_1.Post)('verifyIdentity'), + (0, swagger_1.ApiOperation)({ summary: '验证身份' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_j = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _j : Object, Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "verifyIdentity", null); +__decorate([ + (0, common_1.Post)('verifyPhoneIdentity'), + (0, swagger_1.ApiOperation)({ summary: '验证手机号' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_k = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _k : Object, Object]), + __metadata("design:returntype", Promise) +], AuthController.prototype, "verifyPhoneIdentity", null); +exports.AuthController = AuthController = __decorate([ + (0, swagger_1.ApiTags)('auth'), + (0, common_1.Controller)('auth'), + __metadata("design:paramtypes", [typeof (_a = typeof auth_service_1.AuthService !== "undefined" && auth_service_1.AuthService) === "function" ? _a : Object]) +], AuthController); + + +/***/ }), +/* 130 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserLoginDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class UserLoginDto { + username; + uid; + password; + captchaId; +} +exports.UserLoginDto = UserLoginDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'super', description: '邮箱' }), + (0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }), + (0, class_validator_1.MinLength)(2, { message: '用户名最短是两位数!' }), + (0, class_validator_1.MaxLength)(30, { message: '用户名最长不得超过30位!' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], UserLoginDto.prototype, "username", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '用户ID' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UserLoginDto.prototype, "uid", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '999999', description: '密码' }), + (0, class_validator_1.IsOptional)(), + (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), + (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), + __metadata("design:type", String) +], UserLoginDto.prototype, "password", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'abc123', description: '图形验证码ID' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], UserLoginDto.prototype, "captchaId", void 0); + + +/***/ }), +/* 131 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdatePassByOtherDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class UpdatePassByOtherDto { + password; +} +exports.UpdatePassByOtherDto = UpdatePassByOtherDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: '666666', description: '三方用户更新新密码' }), + (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }), + (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), + (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), + __metadata("design:type", String) +], UpdatePassByOtherDto.prototype, "password", void 0); + + +/***/ }), +/* 132 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdatePasswordDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class UpdatePasswordDto { + password; +} +exports.UpdatePasswordDto = UpdatePasswordDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: '666666', description: '用户更新新密码' }), + (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }), + (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), + (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), + __metadata("design:type", String) +], UpdatePasswordDto.prototype, "password", void 0); + + +/***/ }), +/* 133 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AutoReplyModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const autoReply_controller_1 = __webpack_require__(134); +const autoReply_entity_1 = __webpack_require__(136); +const autoReply_service_1 = __webpack_require__(135); +let AutoReplyModule = class AutoReplyModule { +}; +exports.AutoReplyModule = AutoReplyModule; +exports.AutoReplyModule = AutoReplyModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([autoReply_entity_1.AutoReplyEntity])], + controllers: [autoReply_controller_1.AutoReplyController], + providers: [autoReply_service_1.AutoReplyService], + exports: [autoReply_service_1.AutoReplyService], + }) +], AutoReplyModule); + + +/***/ }), +/* 134 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AutoReplyController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const autoReply_service_1 = __webpack_require__(135); +const addAutoReply_dto_1 = __webpack_require__(137); +const delBadWords_dto_1 = __webpack_require__(138); +const queryAutoReply_dto_1 = __webpack_require__(139); +const updateAutoReply_dto_1 = __webpack_require__(140); +let AutoReplyController = class AutoReplyController { + autoReplyService; + constructor(autoReplyService) { + this.autoReplyService = autoReplyService; + } + queryAutoReply(query) { + return this.autoReplyService.queryAutoReply(query); + } + addAutoReply(body) { + return this.autoReplyService.addAutoReply(body); + } + updateAutoReply(body) { + return this.autoReplyService.updateAutoReply(body); + } + delAutoReply(body) { + return this.autoReplyService.delAutoReply(body); + } +}; +exports.AutoReplyController = AutoReplyController; +__decorate([ + (0, common_1.Get)('query'), + (0, swagger_1.ApiOperation)({ summary: '查询自动回复' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof queryAutoReply_dto_1.QueryAutoReplyDto !== "undefined" && queryAutoReply_dto_1.QueryAutoReplyDto) === "function" ? _b : Object]), + __metadata("design:returntype", void 0) +], AutoReplyController.prototype, "queryAutoReply", null); +__decorate([ + (0, common_1.Post)('add'), + (0, swagger_1.ApiOperation)({ summary: '添加自动回复' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_c = typeof addAutoReply_dto_1.AddAutoReplyDto !== "undefined" && addAutoReply_dto_1.AddAutoReplyDto) === "function" ? _c : Object]), + __metadata("design:returntype", void 0) +], AutoReplyController.prototype, "addAutoReply", null); +__decorate([ + (0, common_1.Post)('update'), + (0, swagger_1.ApiOperation)({ summary: '修改自动回复' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof updateAutoReply_dto_1.UpdateAutoReplyDto !== "undefined" && updateAutoReply_dto_1.UpdateAutoReplyDto) === "function" ? _d : Object]), + __metadata("design:returntype", void 0) +], AutoReplyController.prototype, "updateAutoReply", null); +__decorate([ + (0, common_1.Post)('del'), + (0, swagger_1.ApiOperation)({ summary: '删除自动回复' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof delBadWords_dto_1.DelAutoReplyDto !== "undefined" && delBadWords_dto_1.DelAutoReplyDto) === "function" ? _e : Object]), + __metadata("design:returntype", void 0) +], AutoReplyController.prototype, "delAutoReply", null); +exports.AutoReplyController = AutoReplyController = __decorate([ + (0, swagger_1.ApiTags)('autoReply'), + (0, common_1.Controller)('autoReply'), + __metadata("design:paramtypes", [typeof (_a = typeof autoReply_service_1.AutoReplyService !== "undefined" && autoReply_service_1.AutoReplyService) === "function" ? _a : Object]) +], AutoReplyController); + + +/***/ }), +/* 135 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AutoReplyService = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const autoReply_entity_1 = __webpack_require__(136); +let AutoReplyService = class AutoReplyService { + autoReplyEntity; + autoReplyKes = []; + autoReplyMap = {}; + autoReplyFuzzyMatch = true; + constructor(autoReplyEntity) { + this.autoReplyEntity = autoReplyEntity; + } + async onModuleInit() { + await this.loadAutoReplyList(); + } + async loadAutoReplyList() { + const res = await this.autoReplyEntity.find({ + where: { status: 1 }, + select: ['prompt', 'answer', 'isAIReplyEnabled'], + }); + this.autoReplyMap = {}; + this.autoReplyKes = []; + res.forEach(t => { + this.autoReplyMap[t.prompt] = { + answer: t.answer, + isAIReplyEnabled: t.isAIReplyEnabled, + }; + const keywords = t.prompt.split(' ').map(k => k.trim()); + this.autoReplyKes.push({ prompt: t.prompt, keywords }); + }); + } + async checkAutoReply(prompt) { + const answers = []; + let isAIReplyEnabled = 0; + const seenGroups = new Set(); + if (this.autoReplyFuzzyMatch) { + for (const item of this.autoReplyKes) { + if (item.keywords.some(keyword => prompt.includes(keyword))) { + if (!seenGroups.has(item.prompt)) { + answers.push(this.autoReplyMap[item.prompt].answer); + seenGroups.add(item.prompt); + if (this.autoReplyMap[item.prompt].isAIReplyEnabled === 1) { + isAIReplyEnabled = 1; + } + } + } + } + } + else { + const matches = this.autoReplyKes.filter(item => item.prompt === prompt); + for (const match of matches) { + if (!seenGroups.has(match.prompt)) { + answers.push(this.autoReplyMap[match.prompt].answer); + seenGroups.add(match.prompt); + if (this.autoReplyMap[match.prompt].isAIReplyEnabled === 1) { + isAIReplyEnabled = 1; + } + } + } + } + return { + answer: answers.join('\n'), + isAIReplyEnabled, + }; + } + async queryAutoReply(query) { + const { page = 1, size = 10, prompt, status } = query; + const where = {}; + [0, 1, '0', '1'].includes(status) && (where.status = status); + prompt && (where.prompt = (0, typeorm_2.Like)(`%${prompt}%`)); + const [rows, count] = await this.autoReplyEntity.findAndCount({ + where, + skip: (page - 1) * size, + take: size, + order: { id: 'DESC' }, + }); + return { rows, count }; + } + async addAutoReply(body) { + await this.autoReplyEntity.save(body); + await this.loadAutoReplyList(); + return '添加问题成功!'; + } + async updateAutoReply(body) { + const { id } = body; + const res = await this.autoReplyEntity.update({ id }, body); + if (res.affected > 0) { + await this.loadAutoReplyList(); + return '更新问题成功'; + } + throw new common_1.HttpException('更新失败', common_1.HttpStatus.BAD_REQUEST); + } + async delAutoReply(body) { + const { id } = body; + const z = await this.autoReplyEntity.findOne({ where: { id } }); + if (!z) { + throw new common_1.HttpException('该问题不存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST); + } + const res = await this.autoReplyEntity.delete({ id }); + if (res.affected > 0) { + await this.loadAutoReplyList(); + return '删除问题成功'; + } + throw new common_1.HttpException('删除失败', common_1.HttpStatus.BAD_REQUEST); + } +}; +exports.AutoReplyService = AutoReplyService; +exports.AutoReplyService = AutoReplyService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(autoReply_entity_1.AutoReplyEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) +], AutoReplyService); + + +/***/ }), +/* 136 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AutoReplyEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let AutoReplyEntity = class AutoReplyEntity extends baseEntity_1.BaseEntity { + prompt; + answer; + isAIReplyEnabled; + status; +}; +exports.AutoReplyEntity = AutoReplyEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '提问的问题', type: 'text' }), + __metadata("design:type", String) +], AutoReplyEntity.prototype, "prompt", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '定义的答案', type: 'text' }), + __metadata("design:type", String) +], AutoReplyEntity.prototype, "answer", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 1, comment: '是否开启AI回复,0:关闭 1:启用' }), + __metadata("design:type", Number) +], AutoReplyEntity.prototype, "isAIReplyEnabled", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 1, comment: '启用当前自动回复状态, 0:关闭 1:启用' }), + __metadata("design:type", Number) +], AutoReplyEntity.prototype, "status", void 0); +exports.AutoReplyEntity = AutoReplyEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'auto_reply' }) +], AutoReplyEntity); + + +/***/ }), +/* 137 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AddAutoReplyDto = void 0; +const swagger_1 = __webpack_require__(14); +class AddAutoReplyDto { + prompt; + answer; +} +exports.AddAutoReplyDto = AddAutoReplyDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: '你是谁', description: '提问的问题', required: true }), + __metadata("design:type", String) +], AddAutoReplyDto.prototype, "prompt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '我是AIWeb提供的Ai服务机器人', + description: '回答的答案', + required: true, + }), + __metadata("design:type", String) +], AddAutoReplyDto.prototype, "answer", void 0); + + +/***/ }), +/* 138 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DelAutoReplyDto = void 0; +const swagger_1 = __webpack_require__(14); +class DelAutoReplyDto { + id; +} +exports.DelAutoReplyDto = DelAutoReplyDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '自动回复id', required: true }), + __metadata("design:type", Number) +], DelAutoReplyDto.prototype, "id", void 0); + + +/***/ }), +/* 139 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryAutoReplyDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QueryAutoReplyDto { + page; + size; + prompt; + status; +} +exports.QueryAutoReplyDto = QueryAutoReplyDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryAutoReplyDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryAutoReplyDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '你是谁', description: '提问问题', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QueryAutoReplyDto.prototype, "prompt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '问题状态', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryAutoReplyDto.prototype, "status", void 0); + + +/***/ }), +/* 140 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdateAutoReplyDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class UpdateAutoReplyDto { + id; + prompt; + answer; + status; +} +exports.UpdateAutoReplyDto = UpdateAutoReplyDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '自动回复id', required: true }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UpdateAutoReplyDto.prototype, "id", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '你可以干嘛', description: '问题', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], UpdateAutoReplyDto.prototype, "prompt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '我可以干很多事情.......', + description: '答案', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], UpdateAutoReplyDto.prototype, "answer", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 0, description: '状态', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UpdateAutoReplyDto.prototype, "status", void 0); + + +/***/ }), +/* 141 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BadWordsModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const user_entity_1 = __webpack_require__(83); +const badWords_controller_1 = __webpack_require__(142); +const badWords_entity_1 = __webpack_require__(144); +const badWords_service_1 = __webpack_require__(143); +const violationLog_entity_1 = __webpack_require__(145); +let BadWordsModule = class BadWordsModule { +}; +exports.BadWordsModule = BadWordsModule; +exports.BadWordsModule = BadWordsModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([badWords_entity_1.BadWordsEntity, violationLog_entity_1.ViolationLogEntity, user_entity_1.UserEntity])], + providers: [badWords_service_1.BadWordsService], + controllers: [badWords_controller_1.BadWordsController], + exports: [badWords_service_1.BadWordsService], + }) +], BadWordsModule); + + +/***/ }), +/* 142 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BadWordsController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const badWords_service_1 = __webpack_require__(143); +const addBadWords_dto_1 = __webpack_require__(146); +const delBadWords_dto_1 = __webpack_require__(147); +const queryBadWords_dto_1 = __webpack_require__(148); +const queryViolation_dto_1 = __webpack_require__(149); +const updateBadWords_dto_1 = __webpack_require__(150); +let BadWordsController = class BadWordsController { + badWordsService; + constructor(badWordsService) { + this.badWordsService = badWordsService; + } + queryBadWords(query) { + return this.badWordsService.queryBadWords(query); + } + delBadWords(body) { + return this.badWordsService.delBadWords(body); + } + updateBadWords(body) { + return this.badWordsService.updateBadWords(body); + } + addBadWord(body) { + return this.badWordsService.addBadWord(body); + } + violation(req, query) { + return this.badWordsService.violation(req, query); + } +}; +exports.BadWordsController = BadWordsController; +__decorate([ + (0, common_1.Get)('query'), + (0, swagger_1.ApiOperation)({ summary: '查询所有敏感词' }), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof queryBadWords_dto_1.QueryBadWordsDto !== "undefined" && queryBadWords_dto_1.QueryBadWordsDto) === "function" ? _b : Object]), + __metadata("design:returntype", void 0) +], BadWordsController.prototype, "queryBadWords", null); +__decorate([ + (0, common_1.Post)('del'), + (0, swagger_1.ApiOperation)({ summary: '删除敏感词' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_c = typeof delBadWords_dto_1.DelBadWordsDto !== "undefined" && delBadWords_dto_1.DelBadWordsDto) === "function" ? _c : Object]), + __metadata("design:returntype", void 0) +], BadWordsController.prototype, "delBadWords", null); +__decorate([ + (0, common_1.Post)('update'), + (0, swagger_1.ApiOperation)({ summary: '更新敏感词' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof updateBadWords_dto_1.UpdateBadWordsDto !== "undefined" && updateBadWords_dto_1.UpdateBadWordsDto) === "function" ? _d : Object]), + __metadata("design:returntype", void 0) +], BadWordsController.prototype, "updateBadWords", null); +__decorate([ + (0, common_1.Post)('add'), + (0, swagger_1.ApiOperation)({ summary: '新增敏感词' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof addBadWords_dto_1.AddBadWordDto !== "undefined" && addBadWords_dto_1.AddBadWordDto) === "function" ? _e : Object]), + __metadata("design:returntype", void 0) +], BadWordsController.prototype, "addBadWord", null); +__decorate([ + (0, common_1.Get)('violation'), + (0, swagger_1.ApiOperation)({ summary: '查询违规记录' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _f : Object, typeof (_g = typeof queryViolation_dto_1.QueryViolationDto !== "undefined" && queryViolation_dto_1.QueryViolationDto) === "function" ? _g : Object]), + __metadata("design:returntype", void 0) +], BadWordsController.prototype, "violation", null); +exports.BadWordsController = BadWordsController = __decorate([ + (0, swagger_1.ApiTags)('badWords'), + (0, common_1.Controller)('badWords'), + __metadata("design:paramtypes", [typeof (_a = typeof badWords_service_1.BadWordsService !== "undefined" && badWords_service_1.BadWordsService) === "function" ? _a : Object]) +], BadWordsController); + + +/***/ }), +/* 143 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BadWordsService = void 0; +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const axios_1 = __webpack_require__(39); +const typeorm_2 = __webpack_require__(3); +const globalConfig_service_1 = __webpack_require__(74); +const user_entity_1 = __webpack_require__(83); +const badWords_entity_1 = __webpack_require__(144); +const violationLog_entity_1 = __webpack_require__(145); +let BadWordsService = class BadWordsService { + badWordsEntity; + violationLogEntity; + userEntity; + globalConfigService; + badWords; + constructor(badWordsEntity, violationLogEntity, userEntity, globalConfigService) { + this.badWordsEntity = badWordsEntity; + this.violationLogEntity = violationLogEntity; + this.userEntity = userEntity; + this.globalConfigService = globalConfigService; + this.badWords = []; + } + async onModuleInit() { + this.loadBadWords(); + } + async customSensitiveWords(content, userId) { + const triggeredWords = []; + for (let i = 0; i < this.badWords.length; i++) { + const word = this.badWords[i]; + if (content.includes(word)) { + triggeredWords.push(word); + } + } + if (triggeredWords.length) { + await this.recordUserBadWords(userId, content, triggeredWords, ['自定义'], '自定义检测'); + } + return triggeredWords; + } + async checkBadWords(content, userId) { + const config = await this.globalConfigService.getSensitiveConfig(); + if (config) { + await this.checkBadWordsByConfig(content, config, userId); + } + return await this.customSensitiveWords(content, userId); + } + async checkBadWordsByConfig(content, config, userId) { + const { useType } = config; + useType === 'baidu' && + (await this.baiduCheckBadWords(content, config.baiduTextAccessToken, userId)); + } + extractContent(str) { + const pattern = /存在(.*?)不合规/; + const match = str.match(pattern); + return match ? match[1] : ''; + } + async baiduCheckBadWords(content, accessToken, userId) { + if (!accessToken) + return; + if (!content || content.trim() === '') { + common_1.Logger.debug('提交的内容为空,跳过百度敏感词检测', 'BadWordsService'); + return; + } + const url = `https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined?access_token=${accessToken}}`; + const headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + Accept: 'application/json', + }; + try { + const response = await axios_1.default.post(url, { text: content }, { headers }); + const { conclusion, error_code, error_msg, conclusionType, data } = response.data; + if (error_code) { + common_1.Logger.warn(`百度文本检测出现错误、请查看配置信息: ${error_msg}`, 'BadWordsService'); + return; + } + if (conclusionType !== 1 && data && Array.isArray(data)) { + const types = [...new Set(data.map(item => this.extractContent(item.msg)))]; + await this.recordUserBadWords(userId, content, ['***'], types, '百度云检测'); + const tips = `您提交的信息中包含${types.join(',')}的内容、我们已对您的账户进行标记、请合规使用!`; + throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST); + } + } + catch (error) { + common_1.Logger.error(`百度敏感词检测服务异常: ${error.message}`, error.stack, 'BadWordsService'); + } + } + formarTips(wordList) { + const categorys = wordList.map(t => t.category); + const unSet = [...new Set(categorys)]; + return `您提交的内容中包含${unSet.join(',')}的信息、我们已对您账号进行标记、请合规使用!`; + } + async loadBadWords() { + const data = await this.badWordsEntity.find({ + where: { status: 1 }, + select: ['word'], + }); + this.badWords = data.map(t => t.word); + } + async queryBadWords(query) { + const { page = 1, size = 500, word, status } = query; + const where = {}; + [0, 1, '0', '1'].includes(status) && (where.status = status); + word && (where.word = (0, typeorm_2.Like)(`%${word}%`)); + const [rows, count] = await this.badWordsEntity.findAndCount({ + where, + skip: (page - 1) * size, + take: size, + order: { id: 'ASC' }, + }); + return { rows, count }; + } + async delBadWords(body) { + const b = await this.badWordsEntity.findOne({ where: { id: body.id } }); + if (!b) { + throw new common_1.HttpException('敏感词不存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST); + } + const res = await this.badWordsEntity.delete({ id: body.id }); + if (res.affected > 0) { + await this.loadBadWords(); + return '删除敏感词成功'; + } + else { + throw new common_1.HttpException('删除敏感词失败', common_1.HttpStatus.BAD_REQUEST); + } + } + async updateBadWords(body) { + const { id, word, status } = body; + const b = await this.badWordsEntity.findOne({ where: { word } }); + if (b) { + throw new common_1.HttpException('敏感词已经存在了、请勿重复添加', common_1.HttpStatus.BAD_REQUEST); + } + const res = await this.badWordsEntity.update({ id }, { word, status }); + if (res.affected > 0) { + await this.loadBadWords(); + return '更新敏感词成功'; + } + else { + throw new common_1.HttpException('更新敏感词失败', common_1.HttpStatus.BAD_REQUEST); + } + } + async addBadWord(body) { + const { word } = body; + const b = await this.badWordsEntity.findOne({ where: { word } }); + if (b) { + throw new common_1.HttpException('敏感词已存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST); + } + await this.badWordsEntity.save({ word }); + await this.loadBadWords(); + return '添加敏感词成功'; + } + async recordUserBadWords(userId, content, words, typeCn, typeOriginCn) { + const data = { + userId, + content, + words: JSON.stringify(words), + typeCn: JSON.stringify(typeCn), + typeOriginCn, + }; + try { + await this.userEntity + .createQueryBuilder() + .update(user_entity_1.UserEntity) + .set({ violationCount: () => 'violationCount + 1' }) + .where('id = :userId', { userId }) + .execute(); + await this.violationLogEntity.save(data); + } + catch (error) { + console.log('error: ', error); + } + } + async violation(req, query) { + const { role } = req.user; + const { page = 1, size = 10, userId, typeOriginCn } = query; + const where = {}; + userId && (where['userId'] = userId); + typeOriginCn && (where['typeOriginCn'] = typeOriginCn); + const [rows, count] = await this.violationLogEntity.findAndCount({ + where, + skip: (page - 1) * size, + take: size, + order: { id: 'DESC' }, + }); + const userIds = [...new Set(rows.map(t => t.userId))]; + const usersInfo = await this.userEntity.find({ + where: { id: (0, typeorm_2.In)(userIds) }, + select: ['id', 'avatar', 'username', 'email', 'violationCount', 'status'], + }); + rows.forEach((t) => { + const user = usersInfo.find(u => u.id === t.userId) || {}; + role !== 'super' && (user.email = (0, utils_1.hideString)(user.email)); + t.userInfo = user; + }); + return { rows, count }; + } +}; +exports.BadWordsService = BadWordsService; +exports.BadWordsService = BadWordsService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(badWords_entity_1.BadWordsEntity)), + __param(1, (0, typeorm_1.InjectRepository)(violationLog_entity_1.ViolationLogEntity)), + __param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _d : Object]) +], BadWordsService); + + +/***/ }), +/* 144 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BadWordsEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let BadWordsEntity = class BadWordsEntity extends baseEntity_1.BaseEntity { + word; + status; + count; +}; +exports.BadWordsEntity = BadWordsEntity; +__decorate([ + (0, typeorm_1.Column)({ length: 20, comment: '敏感词' }), + __metadata("design:type", String) +], BadWordsEntity.prototype, "word", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 1, comment: '敏感词开启状态' }), + __metadata("design:type", Number) +], BadWordsEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 0, comment: '敏感词触发次数' }), + __metadata("design:type", Number) +], BadWordsEntity.prototype, "count", void 0); +exports.BadWordsEntity = BadWordsEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'bad_words' }) +], BadWordsEntity); + + +/***/ }), +/* 145 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ViolationLogEntity = void 0; +const typeorm_1 = __webpack_require__(3); +const baseEntity_1 = __webpack_require__(72); +let ViolationLogEntity = class ViolationLogEntity extends baseEntity_1.BaseEntity { + userId; + content; + words; + typeCn; + typeOriginCn; +}; +exports.ViolationLogEntity = ViolationLogEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户id' }), + __metadata("design:type", Number) +], ViolationLogEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '违规内容', type: 'text' }), + __metadata("design:type", String) +], ViolationLogEntity.prototype, "content", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '敏感词', type: 'text' }), + __metadata("design:type", String) +], ViolationLogEntity.prototype, "words", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '违规类型' }), + __metadata("design:type", String) +], ViolationLogEntity.prototype, "typeCn", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '违规检测失败于哪个平台' }), + __metadata("design:type", String) +], ViolationLogEntity.prototype, "typeOriginCn", void 0); +exports.ViolationLogEntity = ViolationLogEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'violation_log' }) +], ViolationLogEntity); + + +/***/ }), +/* 146 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AddBadWordDto = void 0; +const swagger_1 = __webpack_require__(14); +class AddBadWordDto { + word; +} +exports.AddBadWordDto = AddBadWordDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词', required: true }), + __metadata("design:type", String) +], AddBadWordDto.prototype, "word", void 0); + + +/***/ }), +/* 147 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DelBadWordsDto = void 0; +const swagger_1 = __webpack_require__(14); +class DelBadWordsDto { + id; +} +exports.DelBadWordsDto = DelBadWordsDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '敏感词id', required: true }), + __metadata("design:type", Number) +], DelBadWordsDto.prototype, "id", void 0); + + +/***/ }), +/* 148 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryBadWordsDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QueryBadWordsDto { + page; + size; + word; + status; +} +exports.QueryBadWordsDto = QueryBadWordsDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryBadWordsDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryBadWordsDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词内容', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QueryBadWordsDto.prototype, "word", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '关键词状态', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryBadWordsDto.prototype, "status", void 0); + + +/***/ }), +/* 149 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryViolationDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QueryViolationDto { + page; + size; + userId; + typeOriginCn; +} +exports.QueryViolationDto = QueryViolationDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryViolationDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryViolationDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '用户ID', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryViolationDto.prototype, "userId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '百度云检测', + description: '检测平台来源', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QueryViolationDto.prototype, "typeOriginCn", void 0); + + +/***/ }), +/* 150 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdateBadWordsDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class UpdateBadWordsDto { + id; + word; + status; +} +exports.UpdateBadWordsDto = UpdateBadWordsDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '敏感词id', required: true }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UpdateBadWordsDto.prototype, "id", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词内容', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], UpdateBadWordsDto.prototype, "word", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '关键词状态', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UpdateBadWordsDto.prototype, "status", void 0); + + +/***/ }), +/* 151 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const chat_service_1 = __webpack_require__(152); +const netSearch_service_1 = __webpack_require__(154); +const app_entity_1 = __webpack_require__(106); +const app_service_1 = __webpack_require__(105); +const appCats_entity_1 = __webpack_require__(107); +const userApps_entity_1 = __webpack_require__(108); +const autoReply_entity_1 = __webpack_require__(136); +const autoReply_service_1 = __webpack_require__(135); +const badWords_entity_1 = __webpack_require__(144); +const badWords_service_1 = __webpack_require__(143); +const violationLog_entity_1 = __webpack_require__(145); +const chatGroup_entity_1 = __webpack_require__(82); +const chatGroup_service_1 = __webpack_require__(155); +const chatLog_entity_1 = __webpack_require__(75); +const chatLog_service_1 = __webpack_require__(157); +const cramiPackage_entity_1 = __webpack_require__(71); +const config_entity_1 = __webpack_require__(73); +const globalConfig_service_1 = __webpack_require__(74); +const mailer_service_1 = __webpack_require__(95); +const models_entity_1 = __webpack_require__(78); +const models_service_1 = __webpack_require__(76); +const plugin_entity_1 = __webpack_require__(159); +const redisCache_service_1 = __webpack_require__(28); +const upload_service_1 = __webpack_require__(160); +const user_entity_1 = __webpack_require__(83); +const user_service_1 = __webpack_require__(97); +const accountLog_entity_1 = __webpack_require__(79); +const balance_entity_1 = __webpack_require__(80); +const fingerprint_entity_1 = __webpack_require__(84); +const userBalance_entity_1 = __webpack_require__(81); +const userBalance_service_1 = __webpack_require__(34); +const verification_entity_1 = __webpack_require__(101); +const verification_service_1 = __webpack_require__(100); +const chat_controller_1 = __webpack_require__(167); +const chat_service_2 = __webpack_require__(168); +let ChatModule = class ChatModule { +}; +exports.ChatModule = ChatModule; +exports.ChatModule = ChatModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [ + typeorm_1.TypeOrmModule.forFeature([ + balance_entity_1.BalanceEntity, + user_entity_1.UserEntity, + plugin_entity_1.PluginEntity, + verification_entity_1.VerificationEntity, + chatLog_entity_1.ChatLogEntity, + accountLog_entity_1.AccountLogEntity, + config_entity_1.ConfigEntity, + user_entity_1.UserEntity, + cramiPackage_entity_1.CramiPackageEntity, + chatGroup_entity_1.ChatGroupEntity, + app_entity_1.AppEntity, + userBalance_entity_1.UserBalanceEntity, + fingerprint_entity_1.FingerprintLogEntity, + appCats_entity_1.AppCatsEntity, + userApps_entity_1.UserAppsEntity, + autoReply_entity_1.AutoReplyEntity, + badWords_entity_1.BadWordsEntity, + violationLog_entity_1.ViolationLogEntity, + models_entity_1.ModelsEntity, + ]), + ], + controllers: [chat_controller_1.ChatController], + providers: [ + chat_service_2.ChatService, + userBalance_service_1.UserBalanceService, + user_service_1.UserService, + verification_service_1.VerificationService, + chatLog_service_1.ChatLogService, + redisCache_service_1.RedisCacheService, + mailer_service_1.MailerService, + globalConfig_service_1.GlobalConfigService, + upload_service_1.UploadService, + autoReply_service_1.AutoReplyService, + badWords_service_1.BadWordsService, + chatGroup_service_1.ChatGroupService, + models_service_1.ModelsService, + chat_service_1.OpenAIChatService, + netSearch_service_1.NetSearchService, + app_service_1.AppService, + ], + exports: [chat_service_2.ChatService], + }) +], ChatModule); + + +/***/ }), +/* 152 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OpenAIChatService = void 0; +const utils_1 = __webpack_require__(36); +const correctApiBaseUrl_1 = __webpack_require__(70); +const common_1 = __webpack_require__(2); +const openai_1 = __webpack_require__(153); +const globalConfig_service_1 = __webpack_require__(74); +const netSearch_service_1 = __webpack_require__(154); +let OpenAIChatService = class OpenAIChatService { + globalConfigService; + netSearchService; + constructor(globalConfigService, netSearchService) { + this.globalConfigService = globalConfigService; + this.netSearchService = netSearchService; + } + async handleDeepThinking(messagesHistory, inputs, result) { + const { apiKey, model, proxyUrl, timeout, usingDeepThinking, searchResults, abortController, deepThinkingType, onProgress, } = inputs; + const { openaiBaseUrl, openaiBaseKey, openaiBaseModel, deepThinkingUrl, deepThinkingKey, deepThinkingModel, } = await this.globalConfigService.getConfigs([ + 'openaiBaseUrl', + 'openaiBaseKey', + 'openaiBaseModel', + 'deepThinkingUrl', + 'deepThinkingKey', + 'deepThinkingModel', + ]); + if (!usingDeepThinking && deepThinkingType !== 2) { + return false; + } + const deepUrl = deepThinkingType === 2 ? proxyUrl : deepThinkingUrl || openaiBaseUrl; + const deepKey = deepThinkingType === 2 ? apiKey : deepThinkingKey || openaiBaseKey; + const deepModel = deepThinkingType === 2 ? model : deepThinkingModel || openaiBaseModel; + let shouldEndThinkStream = false; + let thinkingSourceType = null; + const processedMessages = JSON.parse(JSON.stringify(messagesHistory)).map((message) => { + if (message.role === 'user' && Array.isArray(message.content)) { + message.content = message.content + .filter((item) => item.type !== 'image_url') + .map((item) => item.text || item) + .join(''); + } + return message; + }); + const systemMessageIndex = processedMessages.findIndex((msg) => msg.role === 'system'); + let additionalContent = ''; + if (searchResults && searchResults.length > 0) { + let searchPrompt = JSON.stringify(searchResults, null, 2); + additionalContent += `\n\n以下是网络搜索结果(请基于这些信息回答用户问题,这些信息比你的训练数据更新):\n${searchPrompt}`; + } + if (systemMessageIndex !== -1) { + processedMessages[systemMessageIndex].content += additionalContent; + } + else if (additionalContent) { + processedMessages.unshift({ + role: 'system', + content: additionalContent, + }); + } + const correctedDeepUrl = await (0, correctApiBaseUrl_1.correctApiBaseUrl)(deepUrl); + const thinkOpenai = new openai_1.default({ + apiKey: deepKey, + baseURL: correctedDeepUrl, + timeout: timeout * 5, + }); + common_1.Logger.debug(`思考流请求 - Messages: ${JSON.stringify(processedMessages)}`, 'OpenAIChatService'); + const requestConfig = { + model: deepModel, + messages: processedMessages, + stream: true, + }; + const stream = await thinkOpenai.chat.completions.create(requestConfig, { + signal: abortController.signal, + }); + for await (const chunk of stream) { + if (abortController.signal.aborted || shouldEndThinkStream) { + break; + } + const delta = chunk.choices[0]?.delta; + common_1.Logger.debug(`思考流delta: ${JSON.stringify(delta)}`, 'OpenAIChatService'); + const content = delta?.content; + const reasoning_content = delta?.reasoning_content || ''; + if (thinkingSourceType === 'reasoning_content') { + if (reasoning_content) { + common_1.Logger.debug(`继续接收reasoning_content思考流: ${reasoning_content}`, 'OpenAIChatService'); + result.reasoning_content = [ + { + type: 'text', + text: reasoning_content, + }, + ]; + result.full_reasoning_content += reasoning_content; + onProgress?.({ + reasoning_content: result.reasoning_content, + }); + } + else if (content && !content.includes('')) { + common_1.Logger.debug(`reasoning_content模式下收到普通content: ${content}`, 'OpenAIChatService'); + if (deepThinkingType === 2) { + result.content = [ + { + type: 'text', + text: content, + }, + ]; + result.full_content += content; + onProgress?.({ + content: result.content, + }); + } + else { + shouldEndThinkStream = true; + } + } + continue; + } + else if (thinkingSourceType === 'think_tag') { + if (content) { + if (content.includes('')) { + common_1.Logger.debug(`检测到
标签,思考流结束`, 'OpenAIChatService'); + const regex = /([\s\S]*?)<\/think>([\s\S]*)/; + const matches = content.match(regex); + if (matches) { + const thinkContent = matches[1] || ''; + const remainingContent = matches[2] || ''; + if (thinkContent) { + result.reasoning_content = [ + { + type: 'text', + text: thinkContent, + }, + ]; + result.full_reasoning_content += thinkContent; + onProgress?.({ + reasoning_content: result.reasoning_content, + }); + } + if (deepThinkingType === 2 && remainingContent) { + result.content = [ + { + type: 'text', + text: remainingContent, + }, + ]; + result.full_content += remainingContent; + onProgress?.({ + content: result.content, + }); + } + } + if (deepThinkingType !== 2) { + shouldEndThinkStream = true; + } + else { + thinkingSourceType = 'normal_content'; + } + } + else { + common_1.Logger.debug(`继续接收think标签思考流: ${content}`, 'OpenAIChatService'); + result.reasoning_content = [ + { + type: 'text', + text: content, + }, + ]; + result.full_reasoning_content += content; + onProgress?.({ + reasoning_content: result.reasoning_content, + }); + } + } + continue; + } + else if (thinkingSourceType === 'normal_content' && deepThinkingType === 2) { + if (content) { + result.content = [ + { + type: 'text', + text: content, + }, + ]; + result.full_content += content; + onProgress?.({ + content: result.content, + }); + } + continue; + } + if (reasoning_content) { + common_1.Logger.debug(`首次检测到reasoning_content,确定使用reasoning_content思考流方式: ${reasoning_content}`, 'OpenAIChatService'); + thinkingSourceType = 'reasoning_content'; + result.reasoning_content = [ + { + type: 'text', + text: reasoning_content, + }, + ]; + result.full_reasoning_content += reasoning_content; + onProgress?.({ + reasoning_content: result.reasoning_content, + }); + } + else if (content) { + if (content.includes('')) { + common_1.Logger.debug(`首次检测到标签,确定使用think标签思考流方式`, 'OpenAIChatService'); + thinkingSourceType = 'think_tag'; + const thinkContent = content.replace(//, ''); + if (thinkContent) { + common_1.Logger.debug(`从标签中提取的初始思考内容: ${thinkContent}`, 'OpenAIChatService'); + result.reasoning_content = [ + { + type: 'text', + text: thinkContent, + }, + ]; + result.full_reasoning_content += thinkContent; + onProgress?.({ + reasoning_content: result.reasoning_content, + }); + if (content.includes('')) { + common_1.Logger.debug('在首个块中检测到标签', 'OpenAIChatService'); + const regex = /([\s\S]*?)<\/think>([\s\S]*)/; + const matches = content.match(regex); + if (matches) { + const fullThinkContent = matches[1] || ''; + const remainingContent = matches[2] || ''; + result.reasoning_content = [ + { + type: 'text', + text: fullThinkContent, + }, + ]; + result.full_reasoning_content = fullThinkContent; + onProgress?.({ + reasoning_content: result.reasoning_content, + }); + if (deepThinkingType === 2 && remainingContent) { + result.content = [ + { + type: 'text', + text: remainingContent, + }, + ]; + result.full_content += remainingContent; + onProgress?.({ + content: result.content, + }); + } + } + if (deepThinkingType !== 2) { + shouldEndThinkStream = true; + } + else { + thinkingSourceType = 'normal_content'; + } + } + } + } + else { + common_1.Logger.debug(`没有检测到思考流标记,处理普通内容: ${content}`, 'OpenAIChatService'); + if (deepThinkingType === 2) { + thinkingSourceType = 'normal_content'; + result.content = [ + { + type: 'text', + text: content, + }, + ]; + result.full_content += content; + onProgress?.({ + content: result.content, + }); + } + else { + shouldEndThinkStream = true; + } + } + } + } + common_1.Logger.debug('思考流处理完成', 'OpenAIChatService'); + return deepThinkingType === 2 && result.full_content.length > 0; + } + async handleRegularResponse(messagesHistory, inputs, result) { + const { apiKey, model, proxyUrl, timeout, temperature, max_tokens, searchResults, images, abortController, onProgress, } = inputs; + const processedMessages = this.prepareSystemMessage(messagesHistory, { + searchResults, + images, + }, result); + await this.handleOpenAIChat(processedMessages, { + apiKey, + model, + proxyUrl, + timeout, + temperature, + max_tokens, + abortController, + onProgress, + }, result); + } + async chat(messagesHistory, inputs) { + const { chatId, maxModelTokens, max_tokens, apiKey, model, modelName, temperature, prompt, timeout, proxyUrl, modelAvatar, usingDeepThinking, usingNetwork, extraParam, deepThinkingType, onProgress, onFailure, onDatabase, abortController, } = inputs; + const originalMessagesHistory = JSON.parse(JSON.stringify(messagesHistory)); + const result = { + chatId, + modelName, + modelAvatar, + model, + status: 2, + full_content: '', + full_reasoning_content: '', + networkSearchResult: '', + fileVectorResult: '', + finishReason: null, + }; + try { + const { searchResults, images } = await this.netSearchService.processNetSearch(prompt || '', { + usingNetwork, + onProgress, + onDatabase, + }, result); + const shouldEndRequest = await this.handleDeepThinking(messagesHistory, { + apiKey, + model, + proxyUrl, + timeout, + usingDeepThinking, + searchResults, + abortController, + deepThinkingType, + onProgress, + }, result); + if (shouldEndRequest) { + result.content = ''; + result.reasoning_content = ''; + result.finishReason = 'stop'; + return result; + } + await this.handleRegularResponse(originalMessagesHistory, { + apiKey, + model, + proxyUrl, + timeout, + temperature, + max_tokens, + extraParam, + searchResults, + images, + abortController, + onProgress, + }, result); + result.content = [ + { + type: 'text', + text: '', + }, + ]; + result.reasoning_content = [ + { + type: 'text', + text: '', + }, + ]; + result.finishReason = 'stop'; + return result; + } + catch (error) { + const errorMessage = (0, utils_1.handleError)(error); + common_1.Logger.error(`对话请求失败: ${errorMessage}`, 'OpenAIChatService'); + result.errMsg = errorMessage; + onFailure?.(result); + return result; + } + } + async chatFree(prompt, systemMessage, messagesHistory, imageUrl) { + const { openaiBaseUrl = '', openaiBaseKey = '', openaiBaseModel, } = await this.globalConfigService.getConfigs([ + 'openaiBaseKey', + 'openaiBaseUrl', + 'openaiBaseModel', + ]); + const key = openaiBaseKey; + const proxyUrl = openaiBaseUrl; + let requestData = []; + if (systemMessage) { + requestData.push({ + role: 'system', + content: systemMessage, + }); + } + if (messagesHistory && messagesHistory.length > 0) { + requestData = requestData.concat(messagesHistory); + } + else { + if (imageUrl) { + requestData.push({ + role: 'user', + content: [ + { + type: 'text', + text: prompt, + }, + { + type: 'image_url', + image_url: { + url: imageUrl, + }, + }, + ], + }); + } + else { + requestData.push({ + role: 'user', + content: prompt, + }); + } + } + try { + const openai = new openai_1.default({ + apiKey: key, + baseURL: await (0, correctApiBaseUrl_1.correctApiBaseUrl)(proxyUrl), + }); + const response = await openai.chat.completions.create({ + model: openaiBaseModel || 'gpt-4o-mini', + messages: requestData, + }, { + timeout: 30000, + }); + return response.choices[0].message.content; + } + catch (error) { + const errorMessage = (0, utils_1.handleError)(error); + common_1.Logger.error(`全局模型调用失败: ${errorMessage}`, 'OpenAIChatService'); + return; + } + } + prepareSystemMessage(messagesHistory, inputs, result) { + const { searchResults, images } = inputs; + const processedMessages = JSON.parse(JSON.stringify(messagesHistory)); + const systemMessage = processedMessages?.find((message) => message.role === 'system'); + if (systemMessage) { + const imageUrlMessages = processedMessages?.filter((message) => message.type === 'image_url') || []; + let updatedContent = ''; + if (result.full_reasoning_content) { + updatedContent = `\n\n以下是针对这个问题的思考推理思路(思路不一定完全正确,仅供参考):\n${result.full_reasoning_content}`; + } + if (searchResults && searchResults.length > 0) { + let searchPrompt = JSON.stringify(searchResults, null, 2); + let imagesPrompt = ''; + if (images && images.length > 0) { + imagesPrompt = `\n\n以下是搜索到的相关图片链接:\n${images.join('\n')}`; + } + const now = new Date(); + const options = { + timeZone: 'Asia/Shanghai', + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + hour12: false, + }; + const currentDate = new Intl.DateTimeFormat('zh-CN', options).format(now); + updatedContent += ` + \n\n你的任务是根据用户的问题,通过下面的搜索结果提供更精确、详细、具体的回答。 + 请在适当的情况下在对应部分句子末尾标注引用的链接,使用[[序号](链接地址)]格式,同时使用多个链接可连续使用比如[[2](链接地址)][[5](链接地址)],以下是搜索结果: + ${searchPrompt}${imagesPrompt} + 在回答时,请注意以下几点: + - 现在时间是: ${currentDate}。 + - 如果结果中包含图片链接,可在适当位置使用MarkDown格式插入至少一张图片,让回答图文并茂。 + - 并非搜索结果的所有内容都与用户的问题密切相关,你需要结合问题,对搜索结果进行甄别、筛选。 + - 对于列举类的问题(如列举所有航班信息),尽量将答案控制在10个要点以内,并告诉用户可以查看搜索来源、获得完整信息。优先提供信息完整、最相关的列举项;如非必要,不要主动告诉用户搜索结果未提供的内容。 + - 对于创作类的问题(如写论文),请务必在正文的段落中引用对应的参考编号。你需要解读并概括用户的题目要求,选择合适的格式,充分利用搜索结果并抽取重要信息,生成符合用户要求、极具思想深度、富有创造力与专业性的答案。你的创作篇幅需要尽可能延长,对于每一个要点的论述要推测用户的意图,给出尽可能多角度的回答要点,且务必信息量大、论述详尽。 + - 如果回答很长,请尽量结构化、分段落总结。如果需要分点作答,尽量控制在5个点以内,并合并相关的内容。 + - 对于客观类的问答,如果问题的答案非常简短,可以适当补充一到两句相关信息,以丰富内容。 + - 你需要根据用户要求和回答内容选择合适、美观的回答格式,确保可读性强。 + - 你的回答应该综合多个相关网页来回答,不能只重复引用一个网页。 + - 除非用户要求,否则你回答的语言需要和用户提问的语言保持一致。 + `; + } + if (imageUrlMessages && imageUrlMessages.length > 0) { + imageUrlMessages.forEach((imageMessage) => { + updatedContent = `${updatedContent}\n${JSON.stringify(imageMessage)}`; + }); + } + systemMessage.content += updatedContent; + } + return processedMessages; + } + async handleOpenAIChat(messagesHistory, inputs, result) { + const { apiKey, model, proxyUrl, timeout, temperature, max_tokens, abortController, onProgress, } = inputs; + const streamData = { + model, + messages: messagesHistory, + stream: true, + temperature, + }; + const openai = new openai_1.default({ + apiKey: apiKey, + baseURL: await (0, correctApiBaseUrl_1.correctApiBaseUrl)(proxyUrl), + timeout: timeout, + }); + try { + common_1.Logger.debug(`对话请求 - Messages: ${JSON.stringify(streamData.messages)}`, 'OpenAIChatService'); + const stream = await openai.chat.completions.create({ + model: streamData.model, + messages: streamData.messages, + stream: true, + max_tokens: max_tokens, + temperature: streamData.temperature, + }, { + signal: abortController.signal, + }); + for await (const chunk of stream) { + if (abortController.signal.aborted) { + break; + } + const content = chunk.choices[0]?.delta?.content || ''; + if (content) { + result.content = [ + { + type: 'text', + text: content, + }, + ]; + result.full_content += content; + onProgress?.({ + content: result.content, + }); + } + } + } + catch (error) { + common_1.Logger.error(`OpenAI请求失败: ${(0, utils_1.handleError)(error)}`, 'OpenAIChatService'); + throw error; + } + } +}; +exports.OpenAIChatService = OpenAIChatService; +exports.OpenAIChatService = OpenAIChatService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _a : Object, typeof (_b = typeof netSearch_service_1.NetSearchService !== "undefined" && netSearch_service_1.NetSearchService) === "function" ? _b : Object]) +], OpenAIChatService); + + +/***/ }), +/* 153 */ +/***/ ((module) => { + +module.exports = require("openai"); + +/***/ }), +/* 154 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.NetSearchService = void 0; +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const globalConfig_service_1 = __webpack_require__(74); +let NetSearchService = class NetSearchService { + globalConfigService; + constructor(globalConfigService) { + this.globalConfigService = globalConfigService; + } + async processNetSearch(prompt, inputs, result) { + const { usingNetwork, onProgress, onDatabase } = inputs; + let searchResults = []; + let images = []; + if (!usingNetwork) { + return { searchResults, images }; + } + try { + common_1.Logger.log(`[网络搜索] 开始搜索: ${prompt}`, 'NetSearchService'); + const searchResponse = await this.webSearchPro(prompt); + searchResults = searchResponse.searchResults; + images = searchResponse.images; + common_1.Logger.log(`[网络搜索] 完成,获取到 ${searchResults.length} 条结果和 ${images.length} 张图片`, 'NetSearchService'); + result.networkSearchResult = JSON.stringify(searchResults); + onProgress?.({ + networkSearchResult: result.networkSearchResult, + }); + onDatabase?.({ + networkSearchResult: JSON.stringify(searchResults.map((item) => { + const { content, ...rest } = item; + return rest; + }), null, 2), + }); + return { searchResults, images }; + } + catch (error) { + common_1.Logger.error(`[网络搜索] 失败: ${(0, utils_1.handleError)(error)}`, 'NetSearchService'); + onDatabase?.({ + network_search_error: { + error: (0, utils_1.handleError)(error), + query: prompt, + timestamp: new Date(), + }, + }); + return { searchResults: [], images: [] }; + } + } + async webSearchPro(prompt) { + try { + const { pluginUrl, pluginKey } = await this.globalConfigService.getConfigs([ + 'pluginUrl', + 'pluginKey', + ]); + if (!pluginUrl || !pluginKey) { + common_1.Logger.warn('搜索插件配置缺失'); + return { searchResults: [], images: [] }; + } + const keys = pluginKey.split(',').filter(key => key.trim()); + const selectedKey = keys[Math.floor(Math.random() * keys.length)]; + const isBochaiApi = pluginUrl.includes('bochaai.com'); + const isBigModelApi = pluginUrl.includes('bigmodel.cn'); + const isTavilyApi = pluginUrl.includes('tavily.com'); + common_1.Logger.log(`[搜索] API类型: ${isBochaiApi ? 'Bochai' : isBigModelApi ? 'BigModel' : isTavilyApi ? 'Tavily' : '未知'}`); + common_1.Logger.log(`[搜索] 请求URL: ${pluginUrl}`); + common_1.Logger.log(`[搜索] 搜索关键词: ${prompt}`); + const requestBody = isBochaiApi + ? { + query: prompt, + summary: true, + count: 20, + } + : isTavilyApi + ? { + query: prompt, + search_depth: 'basic', + include_answer: false, + include_images: true, + max_results: 10, + } + : { + tool: 'web-search-pro', + stream: false, + messages: [{ role: 'user', content: prompt }], + }; + common_1.Logger.log(`[搜索] 请求参数: ${JSON.stringify(requestBody, null, 2)}`); + const response = await fetch(pluginUrl, { + method: 'POST', + headers: { + Authorization: selectedKey, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(requestBody), + }); + if (!response.ok) { + common_1.Logger.error(`[搜索] 接口返回错误: ${response.status}`); + return { searchResults: [], images: [] }; + } + const apiResult = await response.json(); + common_1.Logger.log(`[搜索] 原始返回数据: ${JSON.stringify(apiResult, null, 2)}`); + let searchResults = []; + if (isBochaiApi) { + if (apiResult?.code === 200 && apiResult?.data?.webPages?.value) { + searchResults = apiResult.data.webPages.value.map((item) => ({ + title: item?.name || '', + link: item?.url || '', + content: item?.summary || '', + icon: item?.siteIcon || '', + media: item?.siteName || '', + })); + } + } + else if (isBigModelApi) { + if (apiResult?.choices?.[0]?.message?.tool_calls?.length > 0) { + for (const toolCall of apiResult.choices[0].message.tool_calls) { + if (Array.isArray(toolCall.search_result)) { + searchResults = toolCall.search_result.map((item) => ({ + title: item?.title || '', + link: item?.link || '', + content: item?.content || '', + icon: item?.icon || '', + media: item?.media || '', + })); + break; + } + } + } + } + else if (isTavilyApi) { + if (Array.isArray(apiResult?.results)) { + searchResults = apiResult.results.map((item) => ({ + title: item?.title || '', + link: item?.url || '', + content: item?.raw_content || item?.content || '', + icon: '', + media: '', + })); + } + } + const formattedResult = searchResults.map((item, index) => ({ + resultIndex: index + 1, + ...item, + })); + let images = []; + if (isTavilyApi && Array.isArray(apiResult?.images)) { + images = apiResult.images; + } + if (isBochaiApi) { + if (apiResult?.data?.images?.value && Array.isArray(apiResult.data.images.value)) { + images = apiResult.data.images.value + .filter(img => img.contentUrl) + .map(img => img.contentUrl); + } + } + common_1.Logger.log(`[搜索] 格式化后的结果: ${JSON.stringify(formattedResult, null, 2)}`); + return { + searchResults: formattedResult, + images: images, + }; + } + catch (fetchError) { + common_1.Logger.error('[搜索] 调用接口出错:', fetchError); + return { + searchResults: [], + images: [], + }; + } + } +}; +exports.NetSearchService = NetSearchService; +exports.NetSearchService = NetSearchService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _a : Object]) +], NetSearchService); + + +/***/ }), +/* 155 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatGroupService = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const axios_1 = __webpack_require__(39); +const pdf = __webpack_require__(156); +const typeorm_2 = __webpack_require__(3); +const app_entity_1 = __webpack_require__(106); +const models_service_1 = __webpack_require__(76); +const chatGroup_entity_1 = __webpack_require__(82); +let ChatGroupService = class ChatGroupService { + chatGroupEntity; + appEntity; + modelsService; + constructor(chatGroupEntity, appEntity, modelsService) { + this.chatGroupEntity = chatGroupEntity; + this.appEntity = appEntity; + this.modelsService = modelsService; + } + async create(body, req) { + const { id } = req.user; + const { appId, modelConfig: bodyModelConfig, params } = body; + let modelConfig = bodyModelConfig || (await this.modelsService.getBaseConfig()); + const modelDetail = await this.modelsService.getModelDetailByName(modelConfig.modelInfo.model); + if (modelDetail) { + modelConfig.modelInfo.modelName = modelDetail.modelName; + modelConfig.modelInfo.deductType = modelDetail.deductType; + modelConfig.modelInfo.deduct = modelDetail.deduct; + modelConfig.modelInfo.isFileUpload = modelDetail.isFileUpload; + modelConfig.modelInfo.isImageUpload = modelDetail.isImageUpload; + modelConfig.modelInfo.isNetworkSearch = modelDetail.isNetworkSearch; + modelConfig.modelInfo.deepThinkingType = modelDetail.deepThinkingType; + modelConfig.modelInfo.isMcpTool = modelDetail.isMcpTool; + } + if (!modelConfig) { + throw new common_1.HttpException('管理员未配置任何AI模型、请先联系管理员开通聊天模型配置!', common_1.HttpStatus.BAD_REQUEST); + } + modelConfig = JSON.parse(JSON.stringify(modelConfig)); + const groupParams = { title: '新对话', userId: id, appId, params }; + if (appId) { + const appInfo = await this.appEntity.findOne({ where: { id: appId } }); + if (!appInfo) { + throw new common_1.HttpException('非法操作、您在使用一个不存在的应用!', common_1.HttpStatus.BAD_REQUEST); + } + const { status, name, isFixedModel, isGPTs, coverImg, appModel, isFlowith } = appInfo; + if (isFixedModel && appModel) { + const modelDetail = await this.modelsService.getModelDetailByName(appModel); + common_1.Logger.debug(`modelDetail: ${modelDetail}`); + if (modelDetail) { + modelConfig.modelInfo.modelName = modelDetail.modelName; + modelConfig.modelInfo.deductType = modelDetail.deductType; + modelConfig.modelInfo.deduct = modelDetail.deduct; + modelConfig.modelInfo.isFileUpload = modelDetail.isFileUpload; + modelConfig.modelInfo.isImageUpload = modelDetail.isImageUpload; + modelConfig.modelInfo.isNetworkSearch = modelDetail.isNetworkSearch; + modelConfig.modelInfo.deepThinkingType = modelDetail.deepThinkingType; + modelConfig.modelInfo.isMcpTool = modelDetail.isMcpTool; + } + } + Object.assign(modelConfig.modelInfo, { + isGPTs, + isFixedModel, + isFlowith, + modelAvatar: coverImg, + modelName: name, + }); + if (isGPTs === 1 || isFixedModel === 1 || isFlowith === 1) { + const appModelKey = await this.modelsService.getCurrentModelKeyInfo(isFixedModel === 1 ? appModel : isFlowith === 1 ? 'flowith' : isGPTs === 1 ? 'gpts' : ''); + Object.assign(modelConfig.modelInfo, { + deductType: appModelKey.deductType, + deduct: appModelKey.deduct, + model: appModel, + isFileUpload: appModelKey.isFileUpload, + isImageUpload: appModelKey.isImageUpload, + }); + } + if (![1, 3, 4, 5].includes(status)) { + throw new common_1.HttpException('非法操作、您在使用一个未启用的应用!', common_1.HttpStatus.BAD_REQUEST); + } + if (name) { + groupParams.title = name; + } + } + const newGroup = await this.chatGroupEntity.save({ + ...groupParams, + config: JSON.stringify(modelConfig), + }); + return newGroup; + } + async query(req) { + try { + const { id } = req.user; + const params = { userId: id, isDelete: false }; + const res = await this.chatGroupEntity.find({ + where: params, + order: { isSticky: 'DESC', updatedAt: 'DESC' }, + }); + return res; + const appIds = res.filter(t => t.appId).map(t => t.appId); + const appInfos = await this.appEntity.find({ where: { id: (0, typeorm_2.In)(appIds) } }); + return res.map((item) => { + item.appLogo = appInfos.find(t => t.id === item.appId)?.coverImg; + return item; + }); + } + catch (error) { + console.log('error: ', error); + } + } + async update(body, req) { + const { title, isSticky, groupId, config, fileUrl } = body; + const { id } = req.user; + const g = await this.chatGroupEntity.findOne({ + where: { id: groupId, userId: id }, + }); + if (!g) { + throw new common_1.HttpException('请先选择一个对话或者新加一个对话再操作!', common_1.HttpStatus.BAD_REQUEST); + } + const { appId } = g; + if (appId && !title) { + try { + const parseData = JSON.parse(config); + if (Number(parseData.keyType) !== 1) { + throw new common_1.HttpException('应用对话名称不能修改哟!', common_1.HttpStatus.BAD_REQUEST); + } + } + catch (error) { + } + } + const data = {}; + title && (data['title'] = title); + typeof isSticky !== 'undefined' && (data['isSticky'] = isSticky); + config && (data['config'] = config); + typeof fileUrl !== 'undefined' && (data['fileUrl'] = fileUrl); + const u = await this.chatGroupEntity.update({ id: groupId }, data); + if (u.affected) { + return true; + } + else { + throw new common_1.HttpException('更新对话失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async extractPdfText(fileUrl) { + try { + const response = await axios_1.default.get(fileUrl, { + responseType: 'arraybuffer', + }); + const dataBuffer = Buffer.from(response.data); + const pdfData = await pdf(dataBuffer); + return pdfData.text; + } + catch (error) { + console.error('PDF 解析失败:', error); + throw new Error('PDF 解析失败'); + } + } + async updateTime(groupId) { + await this.chatGroupEntity.update(groupId, { + updatedAt: new Date(), + }); + } + async del(body, req) { + const { groupId } = body; + const { id } = req.user; + const g = await this.chatGroupEntity.findOne({ + where: { id: groupId, userId: id }, + }); + if (!g) { + throw new common_1.HttpException('非法操作、您在删除一个非法资源!', common_1.HttpStatus.BAD_REQUEST); + } + const r = await this.chatGroupEntity.update({ id: groupId }, { isDelete: true }); + if (r.affected) { + return '删除成功'; + } + else { + throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async delAll(req) { + const { id } = req.user; + const r = await this.chatGroupEntity.update({ userId: id, isSticky: false, isDelete: false }, { isDelete: true }); + if (r.affected) { + return '删除成功'; + } + else { + throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async getGroupInfoFromId(id) { + if (!id) + return; + const groupInfo = await this.chatGroupEntity.findOne({ where: { id } }); + if (groupInfo) { + const { pdfTextContent, ...rest } = groupInfo; + return rest; + } + } + async getGroupPdfText(groupId) { + const groupInfo = await this.chatGroupEntity.findOne({ + where: { id: groupId }, + }); + if (groupInfo) { + return groupInfo.pdfTextContent; + } + } +}; +exports.ChatGroupService = ChatGroupService; +exports.ChatGroupService = ChatGroupService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)), + __param(1, (0, typeorm_1.InjectRepository)(app_entity_1.AppEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof models_service_1.ModelsService !== "undefined" && models_service_1.ModelsService) === "function" ? _c : Object]) +], ChatGroupService); + + +/***/ }), +/* 156 */ +/***/ ((module) => { + +module.exports = require("pdf-parse"); + +/***/ }), +/* 157 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatLogService = void 0; +const balance_constant_1 = __webpack_require__(35); +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const exceljs_1 = __webpack_require__(158); +const typeorm_2 = __webpack_require__(3); +const chatGroup_entity_1 = __webpack_require__(82); +const user_entity_1 = __webpack_require__(83); +const chatLog_entity_1 = __webpack_require__(75); +const models_service_1 = __webpack_require__(76); +let ChatLogService = class ChatLogService { + chatLogEntity; + userEntity; + chatGroupEntity; + modelsService; + constructor(chatLogEntity, userEntity, chatGroupEntity, modelsService) { + this.chatLogEntity = chatLogEntity; + this.userEntity = userEntity; + this.chatGroupEntity = chatGroupEntity; + this.modelsService = modelsService; + } + async saveChatLog(logInfo) { + const savedLog = await this.chatLogEntity.save(logInfo); + return savedLog; + } + async updateChatLog(id, logInfo) { + return await this.chatLogEntity.update({ id }, logInfo); + } + async findOneChatLog(id) { + return await this.chatLogEntity.findOne({ where: { id } }); + } + async querDrawLog(req, query) { + const { id } = req.user; + const { model } = query; + const where = { userId: id, type: balance_constant_1.ChatType.PAINT }; + if (model) { + where.model = model; + if (model === 'DALL-E2') { + where.model = (0, typeorm_2.In)(['DALL-E2', 'dall-e-3']); + } + } + const data = await this.chatLogEntity.find({ + where, + order: { id: 'DESC' }, + select: ['id', 'answer', 'prompt', 'model', 'type', 'fileInfo'], + }); + data.forEach((r) => { + if (r.type === 'paintCount') { + const w = r.model === 'mj' ? 310 : 160; + const imgType = r.answer.includes('cos') ? 'tencent' : 'ali'; + const compress = imgType === 'tencent' + ? `?imageView2/1/w/${w}/q/55` + : `?x-oss-process=image/resize,w_${w}`; + r.thumbImg = r.answer + compress; + try { + r.fileInfo = r.fileInfo ? JSON.parse(r.fileInfo) : null; + } + catch (error) { + r.fileInfo = {}; + } + } + }); + return data; + } + async recDrawImg(body) { + const { id } = body; + const l = await this.chatLogEntity.findOne({ + where: { id, type: balance_constant_1.ChatType.PAINT }, + }); + if (!l) { + throw new common_1.HttpException('你推荐的图片不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); + } + const rec = l.rec === 1 ? 0 : 1; + const res = await this.chatLogEntity.update({ id }, { rec }); + if (res.affected > 0) { + return `${rec ? '推荐' : '取消推荐'}图片成功!`; + } + throw new common_1.HttpException('你操作的图片不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); + } + async exportExcel(body, res) { + const where = { type: balance_constant_1.ChatType.NORMAL_CHAT }; + const { page = 1, size = 30, prompt, email } = body; + prompt && Object.assign(where, { prompt: (0, typeorm_2.Like)(`%${prompt}%`) }); + if (email) { + const user = await this.userEntity.findOne({ where: { email } }); + user?.id && Object.assign(where, { userId: user.id }); + } + const [rows, count] = await this.chatLogEntity.findAndCount({ + order: { id: 'DESC' }, + skip: (page - 1) * size, + take: size, + where, + }); + const userIds = rows.map(r => r.userId); + const userInfos = await this.userEntity.find({ + where: { id: (0, typeorm_2.In)(userIds) }, + }); + const data = rows.map(r => { + const userInfo = userInfos.find(u => u.id === r.userId); + return { + username: userInfo ? userInfo.username : '', + email: userInfo ? userInfo.email : '', + prompt: r.prompt, + answer: r.answer, + createdAt: (0, utils_1.formatDate)(r.createdAt), + }; + }); + const workbook = new exceljs_1.default.Workbook(); + const worksheet = workbook.addWorksheet('chatlog'); + worksheet.columns = [ + { header: '用户名', key: 'username', width: 20 }, + { header: '用户邮箱', key: 'email', width: 20 }, + { header: '提问时间', key: 'createdAt', width: 20 }, + { header: '提问问题', key: 'prompt', width: 80 }, + { header: '回答答案', key: 'answer', width: 150 }, + ]; + data.forEach(row => worksheet.addRow(row)); + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.setHeader('Content-Disposition', 'attachment; filename=' + 'chat.xlsx'); + await workbook.xlsx.write(res); + res.end(); + } + async querAllChatLog(params, req) { + const { page = 1, size = 20, userId, prompt, type, model } = params; + const where = {}; + userId && Object.assign(where, { userId }); + prompt && Object.assign(where, { prompt: (0, typeorm_2.Like)(`%${prompt}%`) }); + type && Object.assign(where, { type }); + model && Object.assign(where, { model }); + const [rows, count] = await this.chatLogEntity.findAndCount({ + order: { id: 'DESC' }, + skip: (page - 1) * size, + take: size, + where, + }); + const userIds = rows.map(item => item.userId); + const userInfo = await this.userEntity.find({ + where: { id: (0, typeorm_2.In)(userIds) }, + select: ['id', 'username', 'email', 'nickname'], + }); + rows.forEach((item) => { + const { username, email, nickname } = userInfo.find(u => u.id === item.userId) || {}; + item.username = username; + item.email = email; + item.nickname = nickname; + }); + req.user.role !== 'super' && rows.forEach((t) => (t.email = (0, utils_1.maskEmail)(t.email))); + rows.forEach((item) => { + !item.email && (item.email = `${item?.userId}@aiweb.com`); + !item.username && (item.username = `游客${item?.userId}`); + }); + return { rows, count }; + } + async chatList(req, params) { + const { id } = req.user; + const { groupId } = params; + const where = { userId: id, isDelete: false }; + groupId && Object.assign(where, { groupId }); + if (groupId) { + const count = await this.chatGroupEntity.count({ + where: { isDelete: false }, + }); + if (count === 0) + return []; + } + const list = await this.chatLogEntity.find({ where }); + return list.map(item => { + const { prompt, role, answer, createdAt, model, modelName, type, status, action, drawId, id, imageUrl, fileInfo, fileUrl, ttsUrl, videoUrl, audioUrl, customId, pluginParam, progress, modelAvatar, taskData, promptReference, networkSearchResult, fileVectorResult, taskId, reasoning_content, tool_calls, content, } = item; + return { + chatId: id, + dateTime: (0, utils_1.formatDate)(createdAt), + content: content || (role === 'assistant' ? answer : prompt), + reasoningText: reasoning_content, + tool_calls: tool_calls, + modelType: type, + status: status, + action: action, + drawId: drawId, + customId: customId, + role: role, + error: false, + imageUrl: imageUrl || fileInfo || '', + fileUrl: fileUrl, + ttsUrl: ttsUrl, + videoUrl: videoUrl, + audioUrl: audioUrl, + progress, + model: model, + modelName: modelName, + pluginParam: pluginParam, + modelAvatar: modelAvatar, + taskData: taskData, + promptReference: promptReference, + networkSearchResult: networkSearchResult, + fileVectorResult: fileVectorResult, + taskId: taskId, + }; + }); + } + async chatHistory(groupId, rounds) { + if (rounds === 0) { + return []; + } + const where = { isDelete: false, groupId: groupId }; + const list = await this.chatLogEntity.find({ + where, + order: { + createdAt: 'DESC', + }, + take: rounds * 2, + }); + const result = list + .map(item => { + const { role, content, answer, prompt, imageUrl, fileInfo, fileUrl, ttsUrl, videoUrl, audioUrl, reasoning_content, tool_calls, progress, } = item; + const record = { + role: role, + content: content || (role === 'assistant' ? answer : prompt), + imageUrl: imageUrl || fileInfo || '', + fileUrl: fileUrl, + ttsUrl: ttsUrl, + videoUrl: videoUrl, + audioUrl: audioUrl, + reasoningText: reasoning_content, + tool_calls: tool_calls, + progress, + }; + return record; + }) + .reverse(); + return result; + } + async deleteChatLog(req, body) { + const { id: userId } = req.user; + const { id } = body; + const c = await this.chatLogEntity.findOne({ where: { id, userId } }); + if (!c) { + throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); + } + const r = await this.chatLogEntity.update({ id }, { isDelete: true }); + if (r.affected > 0) { + return '删除对话记录成功!'; + } + else { + throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); + } + } + async delByGroupId(req, body) { + const { groupId } = body; + const { id } = req.user; + const g = await this.chatGroupEntity.findOne({ + where: { id: groupId, userId: id }, + }); + if (!g) { + throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); + } + const r = await this.chatLogEntity.update({ groupId }, { isDelete: true }); + if (r.affected > 0) { + return '删除对话记录成功!'; + } + if (r.affected === 0) { + throw new common_1.HttpException('当前页面已经没有东西可以删除了!', common_1.HttpStatus.BAD_REQUEST); + } + } + async deleteChatsAfterId(req, body) { + const { id } = body; + const { id: userId } = req.user; + const chatLog = await this.chatLogEntity.findOne({ where: { id, userId } }); + if (!chatLog) { + throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); + } + const { groupId } = chatLog; + const result = await this.chatLogEntity.update({ groupId, id: (0, typeorm_2.MoreThanOrEqual)(id) }, { isDelete: true }); + if (result.affected > 0) { + return '删除对话记录成功!'; + } + else { + throw new common_1.HttpException('当前页面已经没有东西可以删除了!', common_1.HttpStatus.BAD_REQUEST); + } + } + async byAppId(req, body) { + const { id } = req.user; + const { appId, page = 1, size = 10 } = body; + const [rows, count] = await this.chatLogEntity.findAndCount({ + where: { userId: id, appId, role: 'assistant' }, + order: { id: 'DESC' }, + take: size, + skip: (page - 1) * size, + }); + return { rows, count }; + } + async checkModelLimits(userId, model) { + const ONE_HOUR_IN_MS = 3600 * 1000; + const oneHourAgo = new Date(Date.now() - ONE_HOUR_IN_MS); + try { + const usageCount = await this.chatLogEntity.count({ + where: { + userId: userId.id, + model, + createdAt: (0, typeorm_2.MoreThan)(oneHourAgo), + }, + }); + const adjustedUsageCount = Math.ceil(usageCount / 2); + common_1.Logger.log(`用户ID: ${userId.id} 一小时内调用 ${model} 模型 ${adjustedUsageCount + 1} 次`, 'ChatLogService'); + let modelInfo; + if (model.startsWith('gpt-4-gizmo')) { + modelInfo = await this.modelsService.getCurrentModelKeyInfo('gpts'); + } + else { + modelInfo = await this.modelsService.getCurrentModelKeyInfo(model); + } + const modelLimits = Number(modelInfo.modelLimits); + common_1.Logger.log(`模型 ${model} 的使用次数限制为 ${modelLimits}`, 'ChatLogService'); + if (adjustedUsageCount > modelLimits) { + return true; + } + return false; + } + catch (error) { + common_1.Logger.error(`查询数据库出错 - 用户ID: ${userId.id}, 模型: ${model}, 错误信息: ${error.message}`, error.stack, 'ChatLogService'); + } + } + async querySingleChat(req, params) { + try { + const { chatId } = params; + if (!chatId) { + return '请输入正确的聊天ID'; + } + const chatLog = await this.chatLogEntity.findOne({ + where: { id: Number(chatId) }, + }); + if (!chatLog) { + common_1.Logger.warn(`未找到ID为 ${chatId} 的消息记录`, 'ChatLogService'); + return '未找到该消息'; + } + const formattedResult = { + id: chatLog.id, + action: chatLog.action || '', + taskData: chatLog.taskData || '', + chatId: chatLog.id, + content: chatLog.content || (chatLog.role === 'assistant' ? chatLog.answer : chatLog.prompt) || '', + reasoningText: chatLog.reasoning_content || '', + tool_calls: chatLog.tool_calls || '', + role: chatLog.role || 'assistant', + status: chatLog.status || 0, + model: chatLog.model || '', + modelName: chatLog.modelName || '', + modelType: chatLog.type || 1, + imageUrl: chatLog.imageUrl || chatLog.fileInfo || '', + fileUrl: chatLog.fileUrl || '', + drawId: chatLog.drawId || '', + customId: chatLog.customId || '', + inversion: chatLog.role === 'user', + createdAt: chatLog.createdAt, + progress: chatLog.progress || 0, + updatedAt: chatLog.updatedAt, + ttsUrl: chatLog.ttsUrl || '', + videoUrl: chatLog.videoUrl || '', + audioUrl: chatLog.audioUrl || '', + taskId: chatLog.taskId || '', + promptReference: chatLog.promptReference || '', + networkSearchResult: chatLog.networkSearchResult || '', + fileVectorResult: chatLog.fileVectorResult || '', + pluginParam: chatLog.pluginParam || '', + modelAvatar: chatLog.modelAvatar || '', + }; + return formattedResult; + } + catch (error) { + common_1.Logger.error(`查询单条消息失败: ${error.message}`, error.stack, 'ChatLogService'); + return error.message; + } + } +}; +exports.ChatLogService = ChatLogService; +exports.ChatLogService = ChatLogService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)), + __param(1, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), + __param(2, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof models_service_1.ModelsService !== "undefined" && models_service_1.ModelsService) === "function" ? _d : Object]) +], ChatLogService); + + +/***/ }), +/* 158 */ +/***/ ((module) => { + +module.exports = require("exceljs"); + +/***/ }), +/* 159 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PluginEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let PluginEntity = class PluginEntity extends baseEntity_1.BaseEntity { + name; + pluginImg; + description; + isEnabled; + parameters; + sortOrder; +}; +exports.PluginEntity = PluginEntity; +__decorate([ + (0, typeorm_1.Column)({ unique: true, comment: '插件名称' }), + __metadata("design:type", String) +], PluginEntity.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '插件封面', nullable: true, type: 'text' }), + __metadata("design:type", String) +], PluginEntity.prototype, "pluginImg", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '插件描述' }), + __metadata("design:type", String) +], PluginEntity.prototype, "description", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '插件是否启用 0:禁用 1:启用', default: 1 }), + __metadata("design:type", Number) +], PluginEntity.prototype, "isEnabled", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '调用参数', type: 'text' }), + __metadata("design:type", String) +], PluginEntity.prototype, "parameters", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '排序值', default: 0 }), + __metadata("design:type", Number) +], PluginEntity.prototype, "sortOrder", void 0); +exports.PluginEntity = PluginEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'plugin' }) +], PluginEntity); + + +/***/ }), +/* 160 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UploadService = void 0; +const utils_1 = __webpack_require__(36); +const client_s3_1 = __webpack_require__(161); +const common_1 = __webpack_require__(2); +const ALIOSS = __webpack_require__(162); +const axios_1 = __webpack_require__(39); +const TENCENTCOS = __webpack_require__(163); +const FormData = __webpack_require__(164); +const fs_1 = __webpack_require__(18); +const mime = __webpack_require__(165); +const path = __webpack_require__(20); +const streamToBuffer = __webpack_require__(166); +const globalConfig_service_1 = __webpack_require__(74); +const redisCache_service_1 = __webpack_require__(28); +const blacklist = ['exe', 'sh', 'bat', 'js', 'php', 'py']; +let UploadService = class UploadService { + globalConfigService; + redisCacheService; + constructor(globalConfigService, redisCacheService) { + this.globalConfigService = globalConfigService; + this.redisCacheService = redisCacheService; + } + tencentCos; + onModuleInit() { } + async checkUploadFrequency(userId) { + const hourlyKey = `upload:frequency:${userId}:${new Date().getHours()}`; + const uploadCount = await this.redisCacheService.get({ key: hourlyKey }); + const count = uploadCount ? parseInt(uploadCount) : 0; + common_1.Logger.log(`用户${userId}当前小时上传次数: ${count}`, 'UploadService'); + if (count >= 100) { + throw new common_1.HttpException('您的上传频率过高,请稍后再试', common_1.HttpStatus.TOO_MANY_REQUESTS); + } + await this.redisCacheService.set({ key: hourlyKey, val: (count + 1).toString() }, 3600); + } + async uploadFile(file, dir = 'others', user = null) { + if (user && user.id) { + await this.checkUploadFrequency(user.id); + } + const { buffer, mimetype } = file; + if (process.env.ISDEV === 'true') { + dir = `dev/${dir}`; + } + const fileExtension = mime.extension(mimetype) || ''; + if (!fileExtension) { + common_1.Logger.error('无法识别文件类型,请检查文件', 'UploadService'); + } + if (blacklist.includes(fileExtension.toLowerCase())) { + common_1.Logger.error('不允许上传此类型的文件', 'UploadService'); + throw new Error('不允许上传此类型的文件'); + } + const now = new Date(); + const timestamp = now.getTime(); + const randomString = Math.random().toString(36).substring(2, 6); + const filename = `${timestamp}_${randomString}.${fileExtension}`; + const { tencentCosStatus = 0, aliOssStatus = 0, cheveretoStatus = 0, localStorageStatus = 0, s3Status = 0, } = await this.globalConfigService.getConfigs([ + 'tencentCosStatus', + 'aliOssStatus', + 'cheveretoStatus', + 'localStorageStatus', + 's3Status', + ]); + common_1.Logger.log(`上传配置状态 - 本地存储: ${localStorageStatus}, S3: ${s3Status}, 腾讯云: ${tencentCosStatus}, 阿里云: ${aliOssStatus}, Chevereto: ${cheveretoStatus}`, 'UploadService'); + if (!Number(tencentCosStatus) && + !Number(aliOssStatus) && + !Number(cheveretoStatus) && + !Number(localStorageStatus) && + !Number(s3Status)) { + common_1.Logger.error('未配置任何上传方式', 'UploadService'); + throw new common_1.HttpException('请先前往后台配置上传图片的方式', common_1.HttpStatus.BAD_REQUEST); + } + try { + if (Number(localStorageStatus)) { + common_1.Logger.log('使用本地存储上传文件', 'UploadService'); + const result = await this.uploadFileToLocal({ filename, buffer, dir }); + common_1.Logger.log(`文件已上传到本地存储。访问 URL: ${result}`, 'UploadService'); + return result; + } + if (Number(s3Status)) { + common_1.Logger.log('使用 S3 上传文件', 'UploadService'); + const result = await this.uploadFileByS3({ filename, buffer, dir }); + common_1.Logger.log(`文件已上传到 S3。访问 URL: ${result}`, 'UploadService'); + return result; + } + if (Number(tencentCosStatus)) { + common_1.Logger.log('使用腾讯云 COS 上传文件', 'UploadService'); + const result = await this.uploadFileByTencentCos({ + filename, + buffer, + dir, + }); + common_1.Logger.log(`文件已上传到腾讯云 COS。访问 URL: ${result}`, 'UploadService'); + return result; + } + if (Number(aliOssStatus)) { + common_1.Logger.log('使用阿里云 OSS 上传文件', 'UploadService'); + const result = await this.uploadFileByAliOss({ + filename, + buffer, + dir, + }); + common_1.Logger.log(`文件已上传到阿里云 OSS。访问 URL: ${result}`, 'UploadService'); + return result; + } + if (Number(cheveretoStatus)) { + common_1.Logger.log('使用 Chevereto 上传文件', 'UploadService'); + const result = await this.uploadFileByChevereto({ + filename, + buffer: buffer.toString('base64'), + }); + common_1.Logger.log(`文件已上传到 Chevereto。访问 URL: ${result}`, 'UploadService'); + return result; + } + } + catch (error) { + common_1.Logger.error(`上传失败: ${error.message}`, 'UploadService'); + throw error; + } + } + async getUploadType() { + const { tencentCosStatus = 0, aliOssStatus = 0, cheveretoStatus = 0, s3Status = 0, } = await this.globalConfigService.getConfigs([ + 'tencentCosStatus', + 'aliOssStatus', + 'cheveretoStatus', + 's3Status', + ]); + if (Number(s3Status)) { + return 's3'; + } + if (Number(tencentCosStatus)) { + return 'tencent'; + } + if (Number(aliOssStatus)) { + return 'ali'; + } + if (Number(cheveretoStatus)) { + return 'chevereto'; + } + } + async uploadFileFromUrl({ url, dir = 'others' }) { + if (process.env.ISDEV === 'true') { + dir = `dev/${dir}`; + } + const { buffer, mimeType } = await this.getBufferFromUrl(url); + return await this.uploadFile({ buffer, mimetype: mimeType }, dir); + } + async uploadFileByTencentCos({ filename, buffer, dir }) { + const { Bucket, Region, SecretId, SecretKey } = await this.getUploadConfig('tencent'); + this.tencentCos = new TENCENTCOS({ + SecretId, + SecretKey, + FileParallelLimit: 10, + }); + try { + return new Promise(async (resolve, reject) => { + this.tencentCos.putObject({ + Bucket: (0, utils_1.removeSpecialCharacters)(Bucket), + Region: (0, utils_1.removeSpecialCharacters)(Region), + Key: `${dir}/${filename}`, + StorageClass: 'STANDARD', + Body: buffer, + }, async (err, data) => { + if (err) { + common_1.Logger.error(`腾讯云COS上传失败: ${err.message}`, 'UploadService'); + return reject(err); + } + let locationUrl = data.Location.replace(/^(http:\/\/|https:\/\/|\/\/|)(.*)/, 'https://$2'); + const { acceleratedDomain } = await this.getUploadConfig('tencent'); + if (acceleratedDomain) { + locationUrl = locationUrl.replace(/^(https:\/\/[^/]+)(\/.*)$/, `https://${acceleratedDomain}$2`); + common_1.Logger.log(`腾讯云COS已开启全球加速: ${locationUrl}`, 'UploadService'); + } + return resolve(locationUrl); + }); + }); + } + catch (error) { + common_1.Logger.error(`腾讯云COS上传异常: ${error.message}`, 'UploadService'); + throw new common_1.HttpException('上传图片失败[ten]', common_1.HttpStatus.BAD_REQUEST); + } + } + async uploadFileByAliOss({ filename, buffer, dir }) { + const { region, bucket, accessKeyId, accessKeySecret } = await this.getUploadConfig('ali'); + const client = new ALIOSS({ + region: (0, utils_1.removeSpecialCharacters)(region), + accessKeyId, + accessKeySecret, + bucket: (0, utils_1.removeSpecialCharacters)(bucket), + authorizationV4: true, + secure: true, + }); + try { + common_1.Logger.log('阿里云OSS开始上传', 'UploadService'); + return new Promise((resolve, reject) => { + client + .put(`${dir}/${filename}`, buffer) + .then(async (result) => { + const { acceleratedDomain } = await this.getUploadConfig('ali'); + if (acceleratedDomain) { + result.url = result.url.replace(/^(https:\/\/[^/]+)(\/.*)$/, `https://${acceleratedDomain}$2`); + common_1.Logger.log(`阿里云OSS已开启全球加速: ${result.url}`, 'UploadService'); + } + resolve(result.url); + }) + .catch(err => { + reject(err); + }); + }); + } + catch (error) { + throw new common_1.HttpException('上传图片失败[ali]', common_1.HttpStatus.BAD_REQUEST); + } + } + async uploadFileByS3({ filename, buffer, dir }) { + const { region, bucket, accessKeyId, secretAccessKey, endpoint, customDomain } = await this.getUploadConfig('s3'); + const s3Config = { + credentials: { + accessKeyId, + secretAccessKey, + }, + }; + if (region) { + s3Config.region = (0, utils_1.removeSpecialCharacters)(region); + } + else { + s3Config.region = 'us-east-1'; + } + if (endpoint) { + s3Config.endpoint = endpoint; + s3Config.forcePathStyle = true; + } + const s3Client = new client_s3_1.S3Client(s3Config); + try { + common_1.Logger.log(`S3 开始上传 - 区域: ${s3Config.region}, 存储桶: ${bucket}, 端点: ${endpoint || '默认'}`, 'UploadService'); + const command = new client_s3_1.PutObjectCommand({ + Bucket: (0, utils_1.removeSpecialCharacters)(bucket), + Key: `${dir}/${filename}`, + Body: buffer, + ContentType: mime.lookup(filename) || 'application/octet-stream', + }); + const result = await s3Client.send(command); + let fileUrl; + if (customDomain) { + fileUrl = `https://${customDomain}/${dir}/${filename}`; + } + else if (endpoint) { + const endpointUrl = endpoint.replace(/^https?:\/\//, ''); + fileUrl = `https://${endpointUrl}/${bucket}/${dir}/${filename}`; + } + else if (region) { + fileUrl = `https://${bucket}.s3.${region}.amazonaws.com/${dir}/${filename}`; + } + else { + fileUrl = `https://${bucket}.s3.amazonaws.com/${dir}/${filename}`; + } + common_1.Logger.log(`S3上传成功: ${fileUrl}`, 'UploadService'); + return fileUrl; + } + catch (error) { + common_1.Logger.error(`S3上传失败: ${error.message}`, 'UploadService'); + common_1.Logger.error(`S3配置详情 - 区域: ${s3Config.region}, 存储桶: ${bucket}, 端点: ${endpoint || '默认'}, 访问密钥: ${accessKeyId ? '已设置' : '未设置'}`, 'UploadService'); + throw new common_1.HttpException(`上传文件失败[S3]: ${error.message}`, common_1.HttpStatus.BAD_REQUEST); + } + } + async uploadFileToLocal({ filename, buffer, dir = 'others' }) { + const normalizedDir = path.normalize(dir).replace(/^(\.\.(\/|\\|$))+/, ''); + const normalizedFilename = path.basename(filename); + const projectRoot = process.cwd(); + const uploadDir = path.join(projectRoot, 'public', 'file', normalizedDir); + const filePath = path.join(uploadDir, normalizedFilename); + if (!filePath.startsWith(path.join(projectRoot, 'public', 'file'))) { + throw new Error('非法路径,禁止访问目录之外的位置'); + } + try { + await fs_1.promises.mkdir(uploadDir, { recursive: true }); + } + catch (err) { + common_1.Logger.error(`创建目录失败: ${uploadDir}`, err); + throw err; + } + try { + await fs_1.promises.writeFile(filePath, buffer, { mode: 0o444 }); + } + catch (err) { + common_1.Logger.error(`文件保存失败: ${filePath}`, err); + throw err; + } + let fileUrl = `file/${normalizedDir}/${normalizedFilename}`; + const siteUrl = await this.globalConfigService.getConfigs(['siteUrl']); + if (siteUrl) { + const url = (0, utils_1.formatUrl)(siteUrl); + fileUrl = `${url}/${fileUrl}`; + } + return fileUrl; + } + async uploadFileByChevereto({ filename = '', buffer }) { + const { key, uploadPath } = await this.getUploadConfig('chevereto'); + const url = uploadPath.endsWith('/') ? uploadPath.slice(0, -1) : uploadPath; + const formData = new FormData(); + const fromBuffer = buffer.toString('base64'); + formData.append('source', fromBuffer); + formData.append('key', key); + formData.append('title', filename); + try { + const res = await axios_1.default.post(url, formData, { + headers: { 'X-API-Key': key }, + }); + if (res?.status === 200) { + return res.data.image.url; + } + else { + common_1.Logger.error(`Chevereto上传失败 - 状态码: ${res?.data.code}, 错误信息: ${res?.data.error.message}`, 'UploadService'); + common_1.Logger.error('上传图片失败[Chevereto]', JSON.stringify(res.data)); + } + } + catch (error) { + common_1.Logger.error(`Chevereto上传异常: ${error.message}`, 'UploadService'); + throw new common_1.HttpException(`上传图片失败[Chevereto|buffer] --> ${error.response?.data.error.message}`, common_1.HttpStatus.BAD_REQUEST); + } + } + async getUploadConfig(type) { + if (type === 'ali') { + const { aliOssRegion: region, aliOssBucket: bucket, aliOssAccessKeyId: accessKeyId, aliOssAccessKeySecret: accessKeySecret, aliOssAcceleratedDomain: acceleratedDomain, } = await this.globalConfigService.getConfigs([ + 'aliOssRegion', + 'aliOssBucket', + 'aliOssAccessKeyId', + 'aliOssAccessKeySecret', + 'aliOssAcceleratedDomain', + ]); + return { + region, + bucket, + accessKeyId, + accessKeySecret, + acceleratedDomain, + }; + } + if (type === 'tencent') { + const { cosBucket: Bucket, cosRegion: Region, cosSecretId: SecretId, cosSecretKey: SecretKey, tencentCosAcceleratedDomain: acceleratedDomain, } = await this.globalConfigService.getConfigs([ + 'cosBucket', + 'cosRegion', + 'cosSecretId', + 'cosSecretKey', + 'tencentCosAcceleratedDomain', + ]); + return { Bucket, Region, SecretId, SecretKey, acceleratedDomain }; + } + if (type === 's3') { + const { s3Region: region, s3Bucket: bucket, s3AccessKeyId: accessKeyId, s3SecretAccessKey: secretAccessKey, s3Endpoint: endpoint, s3CustomDomain: customDomain, } = await this.globalConfigService.getConfigs([ + 's3Region', + 's3Bucket', + 's3AccessKeyId', + 's3SecretAccessKey', + 's3Endpoint', + 's3CustomDomain', + ]); + return { region, bucket, accessKeyId, secretAccessKey, endpoint, customDomain }; + } + if (type === 'chevereto') { + const { cheveretoKey: key, cheveretoUploadPath: uploadPath } = await this.globalConfigService.getConfigs(['cheveretoKey', 'cheveretoUploadPath']); + return { key, uploadPath }; + } + } + async getBufferFromUrl(url) { + const response = await axios_1.default.get(url, { responseType: 'stream' }); + const buffer = await new Promise((resolve, reject) => { + streamToBuffer(response.data, (err, buffer) => { + if (err) { + reject(new common_1.HttpException('获取图片资源失败,请重新试试吧!', common_1.HttpStatus.BAD_REQUEST)); + } + else { + resolve(buffer); + } + }); + }); + const mimeType = response.headers['content-type']; + return { buffer, mimeType }; + } +}; +exports.UploadService = UploadService; +exports.UploadService = UploadService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _a : Object, typeof (_b = typeof redisCache_service_1.RedisCacheService !== "undefined" && redisCache_service_1.RedisCacheService) === "function" ? _b : Object]) +], UploadService); + + +/***/ }), +/* 161 */ +/***/ ((module) => { + +module.exports = require("@aws-sdk/client-s3"); + +/***/ }), +/* 162 */ +/***/ ((module) => { + +module.exports = require("ali-oss"); + +/***/ }), +/* 163 */ +/***/ ((module) => { + +module.exports = require("cos-nodejs-sdk-v5"); + +/***/ }), +/* 164 */ +/***/ ((module) => { + +module.exports = require("form-data"); + +/***/ }), +/* 165 */ +/***/ ((module) => { + +module.exports = require("mime-types"); + +/***/ }), +/* 166 */ +/***/ ((module) => { + +module.exports = require("stream-to-buffer"); + +/***/ }), +/* 167 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatController = void 0; +const swagger_1 = __webpack_require__(14); +const jwtAuth_guard_1 = __webpack_require__(87); +const chat_service_1 = __webpack_require__(168); +const common_1 = __webpack_require__(2); +const express_1 = __webpack_require__(104); +const chatProcess_dto_1 = __webpack_require__(169); +let ChatController = class ChatController { + chatService; + constructor(chatService) { + this.chatService = chatService; + } + chatProcess(body, req, res) { + return this.chatService.chatProcess(body, req, res); + } + ttsProcess(body, req, res) { + return this.chatService.ttsProcess(body, req, res); + } +}; +exports.ChatController = ChatController; +__decorate([ + (0, common_1.Post)('chat-process'), + (0, swagger_1.ApiOperation)({ summary: 'gpt聊天对话' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __param(2, (0, common_1.Res)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof chatProcess_dto_1.ChatProcessDto !== "undefined" && chatProcess_dto_1.ChatProcessDto) === "function" ? _b : Object, typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object, typeof (_d = typeof express_1.Response !== "undefined" && express_1.Response) === "function" ? _d : Object]), + __metadata("design:returntype", void 0) +], ChatController.prototype, "chatProcess", null); +__decorate([ + (0, common_1.Post)('tts-process'), + (0, swagger_1.ApiOperation)({ summary: 'tts语音播报' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __param(2, (0, common_1.Res)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, typeof (_e = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _e : Object, typeof (_f = typeof express_1.Response !== "undefined" && express_1.Response) === "function" ? _f : Object]), + __metadata("design:returntype", void 0) +], ChatController.prototype, "ttsProcess", null); +exports.ChatController = ChatController = __decorate([ + (0, swagger_1.ApiTags)('chatgpt'), + (0, common_1.Controller)('chatgpt'), + __metadata("design:paramtypes", [typeof (_a = typeof chat_service_1.ChatService !== "undefined" && chat_service_1.ChatService) === "function" ? _a : Object]) +], ChatController); + + +/***/ }), +/* 168 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatService = void 0; +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const openai_1 = __webpack_require__(153); +const typeorm_2 = __webpack_require__(3); +const chat_service_1 = __webpack_require__(152); +const app_entity_1 = __webpack_require__(106); +const app_service_1 = __webpack_require__(105); +const autoReply_service_1 = __webpack_require__(135); +const badWords_service_1 = __webpack_require__(143); +const chatGroup_service_1 = __webpack_require__(155); +const chatLog_service_1 = __webpack_require__(157); +const globalConfig_service_1 = __webpack_require__(74); +const models_service_1 = __webpack_require__(76); +const plugin_entity_1 = __webpack_require__(159); +const upload_service_1 = __webpack_require__(160); +const user_service_1 = __webpack_require__(97); +const userBalance_service_1 = __webpack_require__(34); +let ChatService = class ChatService { + appEntity; + pluginEntity; + openAIChatService; + chatLogService; + userBalanceService; + userService; + uploadService; + badWordsService; + autoReplyService; + globalConfigService; + chatGroupService; + modelsService; + appService; + constructor(appEntity, pluginEntity, openAIChatService, chatLogService, userBalanceService, userService, uploadService, badWordsService, autoReplyService, globalConfigService, chatGroupService, modelsService, appService) { + this.appEntity = appEntity; + this.pluginEntity = pluginEntity; + this.openAIChatService = openAIChatService; + this.chatLogService = chatLogService; + this.userBalanceService = userBalanceService; + this.userService = userService; + this.uploadService = uploadService; + this.badWordsService = badWordsService; + this.autoReplyService = autoReplyService; + this.globalConfigService = globalConfigService; + this.chatGroupService = chatGroupService; + this.modelsService = modelsService; + this.appService = appService; + } + async chatProcess(body, req, res) { + await this.userBalanceService.checkUserCertification(req.user.id); + const { options = {}, usingPluginId, appId = null, prompt, fileUrl, imageUrl, extraParam, model, action, modelName, modelAvatar, } = body; + common_1.Logger.debug(`body: ${JSON.stringify(body)}`, 'ChatService'); + let appInfo; + if (appId) { + common_1.Logger.debug(`正在使用应用ID: ${appId}`); + appInfo = await this.appEntity.findOne({ + where: { id: appId, status: (0, typeorm_2.In)([1, 3, 4, 5]) }, + }); + if (!appInfo) { + throw new common_1.HttpException('你当前使用的应用已被下架、请删除当前对话开启新的对话吧!', common_1.HttpStatus.BAD_REQUEST); + } + const isAppMemberOnly = await this.appService.checkAppIsMemberOnly(Number(appId)); + if (isAppMemberOnly) { + common_1.Logger.debug(`检测到会员专属应用: ${isAppMemberOnly}`); + const userCatIds = await this.userBalanceService.getUserApps(req.user.id); + common_1.Logger.debug(`用户权限分类: ${userCatIds.join(',')}`); + const appCatIds = appInfo.catId.split(',').map(id => id.trim()); + common_1.Logger.debug(`应用所属分类: ${appCatIds.join(',')}`); + const hasMatchingCategory = appCatIds.some(catId => userCatIds.includes(catId)); + if (!hasMatchingCategory) { + throw new common_1.HttpException('你当前使用的应用为会员专属应用,请先开通会员!', common_1.HttpStatus.PAYMENT_REQUIRED); + } + } + } + const { groupId, usingNetwork, usingDeepThinking, usingMcpTool } = options; + const { openaiBaseUrl, openaiBaseKey, systemPreMessage, openaiTemperature, openaiBaseModel, isGeneratePromptReference, isConvertToBase64, isSensitiveWordFilter, } = await this.globalConfigService.getConfigs([ + 'openaiBaseUrl', + 'openaiBaseKey', + 'systemPreMessage', + 'openaiTemperature', + 'openaiBaseModel', + 'isGeneratePromptReference', + 'isConvertToBase64', + 'isSensitiveWordFilter', + ]); + await this.userService.checkUserStatus(req.user); + res && res.setHeader('Content-type', 'application/octet-stream; charset=utf-8'); + if (isSensitiveWordFilter === '1') { + const triggeredWords = await this.badWordsService.checkBadWords(prompt, req.user.id); + if (triggeredWords.length > 0) { + const tips = `您提交的信息中包含违规的内容,我们已对您的账户进行标记,请合规使用!`; + throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST); + } + } + const autoReplyRes = await this.autoReplyService.checkAutoReply(prompt); + common_1.Logger.debug(`自动回复检查结果: ${JSON.stringify(autoReplyRes)}`, 'ChatService'); + let currentRequestModelKey = null; + let appName = ''; + let setSystemMessage = ''; + res && res.status(200); + const curIp = (0, utils_1.getClientIp)(req); + let useModelAvatar = ''; + let usingPlugin; + if (usingPluginId) { + common_1.Logger.debug(`使用插件ID: ${usingPluginId}`, 'ChatService'); + if (usingPluginId === 999) { + usingPlugin = { + parameters: 'mermaid', + }; + } + } + if (appInfo) { + const { isGPTs, gizmoID, name, isFixedModel, appModel, coverImg } = appInfo; + useModelAvatar = coverImg; + appName = name; + if (isGPTs) { + currentRequestModelKey = await this.modelsService.getCurrentModelKeyInfo('gpts'); + currentRequestModelKey.model = `gpt-4-gizmo-${gizmoID}`; + } + else if (!isGPTs && isFixedModel && appModel) { + appInfo.preset && (setSystemMessage = appInfo.preset); + currentRequestModelKey = await this.modelsService.getCurrentModelKeyInfo(appModel); + currentRequestModelKey.model = appModel; + common_1.Logger.debug(`使用固定模型和应用预设`, 'ChatService'); + } + else { + appInfo.preset && (setSystemMessage = appInfo.preset); + currentRequestModelKey = await this.modelsService.getCurrentModelKeyInfo(model); + common_1.Logger.debug(`使用应用预设模式`, 'ChatService'); + } + } + else { + if (usingPlugin?.parameters === 'mermaid') { + setSystemMessage = ` +{ +"title": "Mermaid专业图表大师", +"description": "智能多类型Mermaid图表生成专家", + +## 角色定位 +你是一位精通Mermaid语法的专业图表设计师,具备将复杂信息转化为清晰可视化图表的卓越能力。你不仅掌握所有Mermaid图表类型,还能根据用户需求智能选择最优图表方案。 + +## 核心能力矩阵 + +### 流程与逻辑类 +- **流程图(flowchart)**: 展示流程、决策和系统工作流 +- **时序图(sequenceDiagram)**: 描述对象间的交互顺序 +- **状态图(stateDiagram)**: 展示状态转换和生命周期 +- **用户旅程图(journey)**: 可视化用户体验历程 + +### 结构与关系类 +- **类图(classDiagram)**: UML类结构和继承关系 +- **实体关系图(erDiagram)**: 数据库实体关系建模 +- **C4图(C4Context等)**: 软件架构多层次视图 +- **思维导图(mindmap)**: 思维结构和概念关联 + +### 时间与进度类 +- **甘特图(gantt)**: 项目进度和时间规划 +- **时间线图(timeline)**: 历史事件和里程碑 +- **Gitgraph图(gitGraph)**: Git版本控制历史 + +### 数据与分析类 +- **饼图(pie)**: 占比和构成分析 +- **象限图(quadrantChart)**: 二维分类和定位分析 +- **桑基图(sankey)**: 流量和转化路径 +- **XY图(xychart-beta)**: 数据点分布和趋势 +- **雷达图**: 多维度能力或属性评估 + +### 专业领域类 +- **需求图(requirementDiagram)**: 需求追踪和验证 +- **ZenUML**: 更现代的序列图表达 +- **框图(block-beta)**: 系统组件和层次结构 +- **数据包图**: 网络通信数据流 +- **看板图**: 任务状态和工作流 +- **架构图**: 系统架构和组件关系 + +## 智能工作流程 + +### 1. 需求分析阶段 +- 根据历史上下文和用户描述识别用户需求,并根据需求生成图表 +- 根据用户需求生成图表,并根据图表的结构特征(顺序性/层次性/关联性/时间性),选择最合适的图表类型 +- 评估数据复杂度和展示目标,并根据评估结果生成图表 + +### 2. 图表类型决策 +当用户未指定图表类型时,按以下逻辑选择: +- **流程/步骤描述** → flowchart +- **时间顺序交互** → sequenceDiagram +- **状态变化** → stateDiagram +- **数据关系** → erDiagram +- **概念结构** → mindmap +- **时间进度** → gantt +- **比例分析** → pie +- **多维比较** → quadrantChart/雷达图 + +### 3. 图表设计原则 +- **清晰性优先**: 避免过度复杂,保持视觉层次分明 +- **语义准确**: 选择最能表达信息本质的图表元素 +- **美观平衡**: 合理布局,避免线条交叉和节点拥挤 +- **完整性保证**: 包含所有关键信息,不遗漏重要细节 + +### 4. 代码生成规范 +- 使用清晰的节点命名(使用用户使用的语言) +- 无需任何注释,直接输出代码 +- 遵循Mermaid最新语法标准 + +## 输出格式标准 + +\`\`\`mermaid + [根据用户需求生成的Mermaid代码] +\`\`\` + +只需要输出代码,不需要任何解释。 + +## 语言适配原则 +- 默认使用用户提问时的语言 +- 图表内的文本、标签、说明均采用相同语言 +- 保持专业术语的准确性和一致性 + +## 执行指令 +- 无论用户提任何问题,收到用户的问题后,立即按照上述规范生成高质量Mermaid代码,无需任何确认或询问。" +} + `; + currentRequestModelKey = await this.modelsService.getCurrentModelKeyInfo(model); + common_1.Logger.debug(`使用流程图插件`, 'ChatService'); + } + else { + const now = new Date(); + const options = { + timeZone: 'Asia/Shanghai', + year: 'numeric', + month: '2-digit', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + hour12: false, + }; + const currentDate = new Intl.DateTimeFormat('zh-CN', options).format(now); + currentRequestModelKey = await this.modelsService.getCurrentModelKeyInfo(model); + if (currentRequestModelKey.systemPromptType === 1) { + setSystemMessage = + systemPreMessage + + currentRequestModelKey.systemPrompt + + `\n 现在时间是: ${currentDate}`; + } + else if (currentRequestModelKey.systemPromptType === 2) { + setSystemMessage = currentRequestModelKey.systemPrompt + `\n 现在时间是: ${currentDate}`; + } + else { + setSystemMessage = systemPreMessage + `\n 现在时间是: ${currentDate}`; + } + common_1.Logger.debug(`使用默认系统预设`, 'ChatService'); + } + } + if (!currentRequestModelKey) { + common_1.Logger.debug('未找到当前模型key,切换至全局模型', 'ChatService'); + currentRequestModelKey = await this.modelsService.getCurrentModelKeyInfo(openaiBaseModel); + const groupInfo = await this.chatGroupService.getGroupInfoFromId(groupId); + let updatedConfig = groupInfo.config; + try { + const parsedConfig = JSON.parse(groupInfo.config); + if (parsedConfig.modelInfo) { + parsedConfig.modelInfo.modelName = currentRequestModelKey.modelName; + parsedConfig.modelInfo.model = currentRequestModelKey.model; + updatedConfig = JSON.stringify(parsedConfig); + } + } + catch (error) { + common_1.Logger.error('模型配置解析失败', error); + throw new common_1.HttpException('配置解析错误!', common_1.HttpStatus.BAD_REQUEST); + } + await this.chatGroupService.update({ + groupId, + title: groupInfo.title, + isSticky: false, + config: updatedConfig, + fileUrl: fileUrl, + }, req); + } + const { deduct, isTokenBased, tokenFeeRatio, deductType, key, id: keyId, maxRounds, proxyUrl, maxModelTokens, max_tokens, timeout, model: useModel, isFileUpload, isImageUpload, keyType: modelType, deductDeepThink = 1, isMcpTool, deepThinkingType, drawingType, } = currentRequestModelKey; + if (await this.chatLogService.checkModelLimits(req.user, useModel)) { + res.write(`\n${JSON.stringify({ + status: 3, + content: '1 小时内对话次数过多,请切换模型或稍后再试!', + modelType: modelType, + })}`); + res.end(); + return; + } + await this.userBalanceService.validateBalance(req, deductType, deduct * (usingDeepThinking ? deductDeepThink : 1)); + const useModeName = modelName; + const proxyResUrl = (0, utils_1.formatUrl)(proxyUrl || openaiBaseUrl || 'https://api.openai.com'); + const modelKey = key || openaiBaseKey; + const modelTimeout = (timeout || 300) * 1000; + const temperature = Number(openaiTemperature) || 1; + let promptReference = ''; + if (groupId) { + const groupInfo = await this.chatGroupService.getGroupInfoFromId(groupId); + this.updateChatTitle(groupId, groupInfo, modelType, prompt, req); + await this.chatGroupService.updateTime(groupId); + } + const userSaveLog = await this.chatLogService.saveChatLog({ + appId: appId, + curIp, + userId: req.user.id, + type: modelType ? modelType : 1, + fileUrl: fileUrl ? fileUrl : null, + imageUrl: imageUrl ? imageUrl : null, + content: prompt, + promptTokens: 0, + completionTokens: 0, + totalTokens: 0, + model: useModel, + modelName: '我', + role: 'user', + groupId: groupId ? groupId : null, + }); + const assistantSaveLog = await this.chatLogService.saveChatLog({ + appId: appId ? appId : null, + action: action ? action : null, + curIp, + userId: req.user.id, + type: modelType ? modelType : 1, + progress: '0%', + model: useModel, + modelName: useModeName, + role: 'assistant', + groupId: groupId ? groupId : null, + status: 2, + modelAvatar: usingPlugin?.pluginImg || useModelAvatar || modelAvatar || '', + pluginParam: usingPlugin?.parameters + ? usingPlugin.parameters + : modelType === 2 + ? useModel + : null, + }); + const userLogId = userSaveLog.id; + const assistantLogId = assistantSaveLog.id; + if (autoReplyRes.answer && res) { + if (autoReplyRes.isAIReplyEnabled === 0) { + const chars = autoReplyRes.answer.split(''); + const sendCharByChar = index => { + if (index < chars.length) { + const msg = { text: chars[index] }; + res.write(`${JSON.stringify(msg)}\n`); + setTimeout(() => sendCharByChar(index + 1), 10); + } + else { + res.end(); + } + }; + sendCharByChar(0); + await this.chatLogService.updateChatLog(assistantLogId, { + content: autoReplyRes.answer, + }); + return; + } + else { + setSystemMessage = setSystemMessage + autoReplyRes.answer; + } + } + const { messagesHistory } = await this.buildMessageFromParentMessageId({ + groupId, + systemMessage: setSystemMessage, + maxModelTokens, + maxRounds: maxRounds, + isConvertToBase64: isConvertToBase64, + fileUrl: fileUrl, + imageUrl: imageUrl, + model: useModel, + isFileUpload, + isImageUpload, + }, this.chatLogService); + let charge; + if (action !== 'UPSCALE' && useModel === 'midjourney') { + if (prompt.includes('--v 7')) { + charge = deduct * 8; + } + else if (prompt.includes('--draft')) { + charge = deduct * 2; + } + else { + charge = deduct * 4; + } + } + else { + charge = deduct * (usingDeepThinking ? deductDeepThink : 1); + } + const abortController = new AbortController(); + try { + if (res) { + res.on('close', () => { + abortController.abort(); + }); + let response; + try { + let chatId = { + chatId: assistantLogId, + }; + res.write(`\n${JSON.stringify(chatId)}`); + response = await this.openAIChatService.chat(messagesHistory, { + chatId: assistantLogId, + extraParam, + deepThinkingType, + max_tokens: max_tokens, + apiKey: modelKey, + model: useModel, + modelName: useModeName, + temperature, + isImageUpload, + prompt, + imageUrl, + isFileUpload, + fileUrl, + usingNetwork, + timeout: modelTimeout, + proxyUrl: proxyResUrl, + modelAvatar: modelAvatar, + usingDeepThinking: usingDeepThinking, + usingMcpTool: usingMcpTool, + isMcpTool: isMcpTool, + onProgress: chat => { + res.write(`\n${JSON.stringify(chat)}`); + }, + onFailure: async (data) => { + await this.chatLogService.updateChatLog(assistantLogId, { + content: data.errMsg, + status: 4, + }); + }, + onDatabase: async (data) => { + if (data.networkSearchResult) { + await this.chatLogService.updateChatLog(assistantLogId, { + networkSearchResult: data.networkSearchResult, + }); + } + if (data.fileVectorResult) { + await this.chatLogService.updateChatLog(assistantLogId, { + fileVectorResult: data.fileVectorResult, + }); + } + }, + abortController, + }); + common_1.Logger.debug(`JSON: ${JSON.stringify(response)}`, 'ChatService'); + if (response.errMsg) { + common_1.Logger.error(`用户ID: ${req.user.id} 模型名称: ${useModeName} 模型: ${model} 回复出错,本次不扣除积分`, 'ChatService'); + return res.write(`\n${JSON.stringify(response)}`); + } + let totalText = ''; + messagesHistory.forEach(messagesHistory => { + totalText += messagesHistory.content + ' '; + }); + const promptTokens = await (0, utils_1.getTokenCount)(totalText); + const completionTokens = await (0, utils_1.getTokenCount)(response.full_reasoning_content + response.full_content); + await this.chatLogService.updateChatLog(userLogId, { + promptTokens: promptTokens, + completionTokens: completionTokens, + totalTokens: promptTokens + completionTokens, + }); + let sanitizedAnswer = response.full_content; + if (isSensitiveWordFilter === '1') { + const triggeredWords = await this.badWordsService.checkBadWords(response.full_content, req.user.id); + if (triggeredWords.length > 0) { + const regex = new RegExp(triggeredWords.join('|'), 'gi'); + sanitizedAnswer = sanitizedAnswer.replace(regex, matched => '*'.repeat(matched.length)); + common_1.Logger.debug(`检测到敏感词,已进行屏蔽处理`, 'ChatService'); + } + } + await this.chatLogService.updateChatLog(assistantLogId, { + content: sanitizedAnswer, + reasoning_content: response.full_reasoning_content, + tool_calls: response.tool_calls, + promptTokens: promptTokens, + completionTokens: completionTokens, + totalTokens: promptTokens + completionTokens, + status: 3, + }); + try { + if (isGeneratePromptReference === '1') { + promptReference = await this.openAIChatService.chatFree(`根据用户提问{${prompt}}以及AI的回答{${response.full_content}},生成三个更进入一步的问题来向AI提问,用{}包裹每个问题,不需要分行,不需要其他任何内容,单个提问不超过30个字`); + await this.chatLogService.updateChatLog(assistantLogId, { + promptReference: promptReference, + }); + common_1.Logger.debug(`生成了相关问题推荐`, 'ChatService'); + } + } + catch (error) { + common_1.Logger.debug(`生成相关问题推荐失败: ${error}`); + } + if (isTokenBased === true) { + charge = + deduct * + Math.ceil((promptTokens + completionTokens) / tokenFeeRatio) * + (usingDeepThinking ? deductDeepThink : 1); + } + await this.userBalanceService.deductFromBalance(req.user.id, deductType, charge, promptTokens + completionTokens); + await this.modelsService.saveUseLog(keyId, promptTokens + completionTokens); + common_1.Logger.log(`对话完成 - 用户: ${req.user.id}, 模型: ${useModeName}(${model}), Token: ${promptTokens + completionTokens}, 积分: ${charge}`, 'ChatService'); + const userBalance = await this.userBalanceService.queryUserBalance(req.user.id); + response.userBalance = userBalance; + response.chatId = assistantLogId; + response.promptReference = promptReference; + return res.write(`\n${JSON.stringify(response)}`); + } + catch (error) { + common_1.Logger.error('处理请求出错:', error); + await this.chatLogService.updateChatLog(assistantLogId, { + status: 5, + }); + response = { error: '处理请求时发生错误' }; + } + } + } + catch (error) { + common_1.Logger.error('聊天处理全局错误', error); + if (res) { + return res.write('发生未知错误,请稍后再试'); + } + else { + throw new common_1.HttpException('发生未知错误,请稍后再试', common_1.HttpStatus.BAD_REQUEST); + } + } + finally { + res && res.end(); + } + } + async updateChatTitle(groupId, groupInfo, modelType, prompt, req) { + if (groupInfo?.title === '新对话') { + let chatTitle; + if (modelType === 1) { + try { + chatTitle = await this.openAIChatService.chatFree(`根据用户提问{${prompt}},给这个对话取一个名字,不超过10个字,只需要返回标题,不需要其他任何内容。`); + if (chatTitle.length > 15) { + chatTitle = chatTitle.slice(0, 15); + } + common_1.Logger.debug(`已生成对话标题: ${chatTitle}`); + } + catch (error) { + common_1.Logger.debug(`标题生成失败,使用提问片段作为标题`); + chatTitle = prompt.slice(0, 10); + } + } + else { + chatTitle = '创意 AI'; + } + this.chatGroupService + .update({ + groupId, + title: chatTitle, + }, req) + .then(() => common_1.Logger.debug(`更新对话标题: ${chatTitle}`)) + .catch(error => common_1.Logger.error(`更新对话标题失败`, error)); + } + } + async buildMessageFromParentMessageId(options, chatLogService) { + const startTime = Date.now(); + let { systemMessage = '', maxRounds = 12, maxModelTokens = 64000, isFileUpload = 0, isImageUpload = 0, isConvertToBase64, groupId, } = options; + const messages = []; + if (groupId) { + try { + const history = await chatLogService.chatHistory(groupId, maxRounds); + history.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()); + let userMessages = []; + let assistantMessages = []; + for (const record of history) { + try { + let content; + content = record.content || ''; + let hasSpecialFormat = false; + if (isFileUpload === 1 && record.fileUrl) { + try { + const filesInfo = JSON.parse(record.fileUrl); + if (Array.isArray(filesInfo)) { + const fileUrls = filesInfo.map(file => file.url).join('\n'); + content = fileUrls + '\n' + content; + } + else { + content = record.fileUrl + '\n' + content; + } + } + catch (error) { + content = record.fileUrl + '\n' + content; + common_1.Logger.debug(`解析fileUrl失败,使用原始格式: ${error.message}`, 'ChatService'); + } + } + if (isImageUpload === 2 && record.imageUrl) { + hasSpecialFormat = true; + const imageContent = await Promise.all(record.imageUrl.split(',').map(async (url) => ({ + type: 'image_url', + image_url: { + url: isConvertToBase64 === '1' ? await (0, utils_1.convertUrlToBase64)(url.trim()) : url.trim(), + }, + }))); + content = [{ type: 'text', text: content }, ...imageContent]; + } + else if (isImageUpload === 1 && record.imageUrl) { + content = record.imageUrl + '\n' + content; + } + if (record.role === 'assistant') { + content = (0, utils_1.removeThinkTags)(content); + if (typeof content === 'string' && !content.trim()) { + continue; + } + assistantMessages.push({ + id: record.id, + role: 'assistant', + content: content, + createdAt: record.createdAt, + }); + } + else if (record.role === 'user') { + userMessages.push({ + id: record.id, + role: 'user', + content: content, + createdAt: record.createdAt, + }); + } + } + catch (error) { + common_1.Logger.debug(`处理历史记录ID=${record.id}失败: ${error.message}`, 'ChatService'); + } + } + if (systemMessage) { + messages.push({ role: 'system', content: systemMessage }); + } + userMessages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()); + assistantMessages.sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime()); + const pairCount = Math.min(userMessages.length, assistantMessages.length); + for (let i = 0; i < pairCount; i++) { + messages.push({ role: 'user', content: userMessages[i].content }); + messages.push({ role: 'assistant', content: assistantMessages[i].content }); + } + if (userMessages.length > pairCount) { + messages.push({ role: 'user', content: userMessages[userMessages.length - 1].content }); + } + } + catch (error) { + common_1.Logger.error(`获取聊天历史记录失败: ${error.message}`, 'ChatService'); + } + } + let totalTokens = await (0, utils_1.getTokenCount)(messages); + const tokenLimit = maxModelTokens < 8000 ? 4000 : maxModelTokens - 4000; + if (totalTokens > tokenLimit) { + common_1.Logger.debug(`消息超出token限制(${totalTokens} > ${tokenLimit}),开始裁剪`, 'ChatService'); + let trimIteration = 0; + while (totalTokens > tokenLimit && messages.length > 2) { + trimIteration++; + if (messages.length === 2 && + ((messages[0].role === 'system' && messages[1].role === 'user') || + (messages[0].role === 'user' && messages[1].role === 'user'))) { + break; + } + const systemIndex = messages.findIndex(m => m.role === 'system'); + const lastUserIndex = messages.length - 1; + if (messages.length > 2) { + const startIndex = systemIndex === 0 ? 1 : 0; + if (startIndex < lastUserIndex) { + if (messages[startIndex].role === 'user' && + startIndex + 1 < lastUserIndex && + messages[startIndex + 1].role === 'assistant') { + messages.splice(startIndex, 2); + } + else { + messages.splice(startIndex, 1); + } + } + } + const newTotalTokens = await (0, utils_1.getTokenCount)(messages); + if (newTotalTokens >= totalTokens) { + common_1.Logger.debug('Token裁剪无效,停止裁剪过程'); + break; + } + totalTokens = newTotalTokens; + } + } + if (messages.length > 1) { + const fixedMessages = []; + if (messages[0].role === 'system') { + fixedMessages.push(messages[0]); + messages.shift(); + } + const userMessages = messages + .filter(msg => msg.role === 'user') + .sort((a, b) => new Date(a.createdAt || 0).getTime() - new Date(b.createdAt || 0).getTime()); + const assistantMessages = messages + .filter(msg => msg.role === 'assistant') + .sort((a, b) => new Date(a.createdAt || 0).getTime() - new Date(b.createdAt || 0).getTime()); + const pairCount = Math.min(userMessages.length, assistantMessages.length); + for (let i = 0; i < pairCount; i++) { + fixedMessages.push(userMessages[i]); + fixedMessages.push(assistantMessages[i]); + } + if (userMessages.length > pairCount) { + fixedMessages.push(userMessages[userMessages.length - 1]); + } + messages.length = 0; + messages.push(...fixedMessages); + } + common_1.Logger.debug(`构建消息历史完成: ${Math.floor(messages.length / 2)} 组对话, ${totalTokens} tokens, 耗时: ${Date.now() - startTime}ms`, 'ChatService'); + common_1.Logger.debug(`messages: ${JSON.stringify(messages)}`, 'ChatService'); + return { + messagesHistory: messages, + round: messages.length, + }; + } + async ttsProcess(body, req, res) { + const { chatId, prompt } = body; + const detailKeyInfo = await this.modelsService.getCurrentModelKeyInfo('tts-1'); + const { openaiBaseUrl, openaiBaseKey, openaiVoice } = await this.globalConfigService.getConfigs(['openaiBaseUrl', 'openaiBaseKey', 'openaiVoice']); + const { key, proxyUrl, deduct, deductType, timeout } = detailKeyInfo; + const useKey = key || openaiBaseKey; + const useTimeout = timeout * 1000; + await this.userBalanceService.validateBalance(req, deductType, deduct); + common_1.Logger.debug(`开始TTS处理: ${prompt.substring(0, 50)}${prompt.length > 50 ? '...' : ''}`, 'TTSService'); + try { + const formattedUrl = (0, utils_1.formatUrl)(proxyUrl || openaiBaseUrl); + const correctedProxyUrl = await (0, utils_1.correctApiBaseUrl)(formattedUrl); + const openai = new openai_1.OpenAI({ + apiKey: useKey, + baseURL: correctedProxyUrl, + timeout: useTimeout, + }); + const response = await openai.audio.speech.create({ + model: 'tts-1', + input: prompt, + voice: openaiVoice || 'onyx', + }); + const buffer = Buffer.from(await response.arrayBuffer()); + common_1.Logger.debug('TTS音频数据生成成功', 'TTSService'); + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); + const day = String(now.getDate()).padStart(2, '0'); + const currentDate = `${year}${month}/${day}`; + const ttsUrl = await this.uploadService.uploadFile({ buffer, mimetype: 'audio/mpeg' }, `audio/openai/${currentDate}`); + await Promise.all([ + this.chatLogService.updateChatLog(chatId, { ttsUrl }), + this.userBalanceService.deductFromBalance(req.user.id, deductType, deduct), + ]); + res.status(200).send({ ttsUrl }); + } + catch (error) { + common_1.Logger.error('TTS处理失败', error, 'TTSService'); + res.status(500).send({ error: '语音合成请求处理失败' }); + } + } +}; +exports.ChatService = ChatService; +exports.ChatService = ChatService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(app_entity_1.AppEntity)), + __param(1, (0, typeorm_1.InjectRepository)(plugin_entity_1.PluginEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof chat_service_1.OpenAIChatService !== "undefined" && chat_service_1.OpenAIChatService) === "function" ? _c : Object, typeof (_d = typeof chatLog_service_1.ChatLogService !== "undefined" && chatLog_service_1.ChatLogService) === "function" ? _d : Object, typeof (_e = typeof userBalance_service_1.UserBalanceService !== "undefined" && userBalance_service_1.UserBalanceService) === "function" ? _e : Object, typeof (_f = typeof user_service_1.UserService !== "undefined" && user_service_1.UserService) === "function" ? _f : Object, typeof (_g = typeof upload_service_1.UploadService !== "undefined" && upload_service_1.UploadService) === "function" ? _g : Object, typeof (_h = typeof badWords_service_1.BadWordsService !== "undefined" && badWords_service_1.BadWordsService) === "function" ? _h : Object, typeof (_j = typeof autoReply_service_1.AutoReplyService !== "undefined" && autoReply_service_1.AutoReplyService) === "function" ? _j : Object, typeof (_k = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _k : Object, typeof (_l = typeof chatGroup_service_1.ChatGroupService !== "undefined" && chatGroup_service_1.ChatGroupService) === "function" ? _l : Object, typeof (_m = typeof models_service_1.ModelsService !== "undefined" && models_service_1.ModelsService) === "function" ? _m : Object, typeof (_o = typeof app_service_1.AppService !== "undefined" && app_service_1.AppService) === "function" ? _o : Object]) +], ChatService); + + +/***/ }), +/* 169 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatProcessDto = exports.Options = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +const class_transformer_1 = __webpack_require__(170); +class Options { + parentMessageId; + model; + temperature; + top_p; + groupId; +} +exports.Options = Options; +__decorate([ + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], Options.prototype, "parentMessageId", void 0); +class ChatProcessDto { + prompt; + url; + options; + systemMessage; + appId; + model; +} +exports.ChatProcessDto = ChatProcessDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'hello, Who are you', description: '对话信息' }), + (0, class_validator_1.IsNotEmpty)({ message: '提问信息不能为空!' }), + __metadata("design:type", String) +], ChatProcessDto.prototype, "prompt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'https://aiweb.com', + description: '对话附带的链接', + required: false, + }), + __metadata("design:type", String) +], ChatProcessDto.prototype, "url", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '{ parentMessageId: 0 }', + description: '上次对话信息', + required: false, + }), + (0, class_transformer_1.Type)(() => Options), + __metadata("design:type", Options) +], ChatProcessDto.prototype, "options", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.", + description: '系统预设信息', + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], ChatProcessDto.prototype, "systemMessage", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '应用id', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], ChatProcessDto.prototype, "appId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'gpt-3.5-turbo', + description: '使用模型', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], ChatProcessDto.prototype, "model", void 0); + + +/***/ }), +/* 170 */ +/***/ ((module) => { + +module.exports = require("class-transformer"); + +/***/ }), +/* 171 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatGroupModule = void 0; +const common_1 = __webpack_require__(2); +const chatGroup_controller_1 = __webpack_require__(172); +const chatGroup_service_1 = __webpack_require__(155); +const typeorm_1 = __webpack_require__(33); +const chatGroup_entity_1 = __webpack_require__(82); +const app_entity_1 = __webpack_require__(106); +let ChatGroupModule = class ChatGroupModule { +}; +exports.ChatGroupModule = ChatGroupModule; +exports.ChatGroupModule = ChatGroupModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([chatGroup_entity_1.ChatGroupEntity, app_entity_1.AppEntity])], + controllers: [chatGroup_controller_1.ChatGroupController], + providers: [chatGroup_service_1.ChatGroupService], + exports: [chatGroup_service_1.ChatGroupService], + }) +], ChatGroupModule); + + +/***/ }), +/* 172 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h, _j; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatGroupController = void 0; +const swagger_1 = __webpack_require__(14); +const chatGroup_service_1 = __webpack_require__(155); +const common_1 = __webpack_require__(2); +const createGroup_dto_1 = __webpack_require__(173); +const express_1 = __webpack_require__(104); +const jwtAuth_guard_1 = __webpack_require__(87); +const delGroup_dto_1 = __webpack_require__(174); +const updateGroup_dto_1 = __webpack_require__(175); +let ChatGroupController = class ChatGroupController { + chatGroupService; + constructor(chatGroupService) { + this.chatGroupService = chatGroupService; + } + create(body, req) { + return this.chatGroupService.create(body, req); + } + query(req) { + return this.chatGroupService.query(req); + } + update(body, req) { + return this.chatGroupService.update(body, req); + } + del(body, req) { + return this.chatGroupService.del(body, req); + } + delAll(req) { + return this.chatGroupService.delAll(req); + } +}; +exports.ChatGroupController = ChatGroupController; +__decorate([ + (0, common_1.Post)('create'), + (0, swagger_1.ApiOperation)({ summary: '创建对话组' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof createGroup_dto_1.CreateGroupDto !== "undefined" && createGroup_dto_1.CreateGroupDto) === "function" ? _b : Object, typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", void 0) +], ChatGroupController.prototype, "create", null); +__decorate([ + (0, common_1.Get)('query'), + (0, swagger_1.ApiOperation)({ summary: '查询对话组' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _d : Object]), + __metadata("design:returntype", void 0) +], ChatGroupController.prototype, "query", null); +__decorate([ + (0, common_1.Post)('update'), + (0, swagger_1.ApiOperation)({ summary: '更新对话组' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof updateGroup_dto_1.UpdateGroupDto !== "undefined" && updateGroup_dto_1.UpdateGroupDto) === "function" ? _e : Object, typeof (_f = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _f : Object]), + __metadata("design:returntype", void 0) +], ChatGroupController.prototype, "update", null); +__decorate([ + (0, common_1.Post)('del'), + (0, swagger_1.ApiOperation)({ summary: '删除对话组' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_g = typeof delGroup_dto_1.DelGroupDto !== "undefined" && delGroup_dto_1.DelGroupDto) === "function" ? _g : Object, typeof (_h = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _h : Object]), + __metadata("design:returntype", void 0) +], ChatGroupController.prototype, "del", null); +__decorate([ + (0, common_1.Post)('delAll'), + (0, swagger_1.ApiOperation)({ summary: '删除对话组' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_j = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _j : Object]), + __metadata("design:returntype", void 0) +], ChatGroupController.prototype, "delAll", null); +exports.ChatGroupController = ChatGroupController = __decorate([ + (0, swagger_1.ApiTags)('group'), + (0, common_1.Controller)('group'), + __metadata("design:paramtypes", [typeof (_a = typeof chatGroup_service_1.ChatGroupService !== "undefined" && chatGroup_service_1.ChatGroupService) === "function" ? _a : Object]) +], ChatGroupController); + + +/***/ }), +/* 173 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CreateGroupDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class CreateGroupDto { + appId; + modelConfig; + params; +} +exports.CreateGroupDto = CreateGroupDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '应用ID', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreateGroupDto.prototype, "appId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '', + description: '对话模型配置项序列化的字符串', + required: false, + }), + __metadata("design:type", Object) +], CreateGroupDto.prototype, "modelConfig", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '', + description: '对话组参数序列化的字符串', + required: false, + }), + __metadata("design:type", String) +], CreateGroupDto.prototype, "params", void 0); + + +/***/ }), +/* 174 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DelGroupDto = void 0; +const swagger_1 = __webpack_require__(14); +class DelGroupDto { + groupId; +} +exports.DelGroupDto = DelGroupDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '对话分组ID', required: true }), + __metadata("design:type", Number) +], DelGroupDto.prototype, "groupId", void 0); + + +/***/ }), +/* 175 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdateGroupDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class UpdateGroupDto { + groupId; + title; + isSticky; + config; +} +exports.UpdateGroupDto = UpdateGroupDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '修改的对话ID', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], UpdateGroupDto.prototype, "groupId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '对话组title', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], UpdateGroupDto.prototype, "title", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '对话组是否置顶', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Boolean) +], UpdateGroupDto.prototype, "isSticky", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '', + description: '对话模型配置项序列化的字符串', + required: false, + }), + __metadata("design:type", String) +], UpdateGroupDto.prototype, "config", void 0); + + +/***/ }), +/* 176 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatLogModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const chatGroup_entity_1 = __webpack_require__(82); +const user_entity_1 = __webpack_require__(83); +const chatLog_controller_1 = __webpack_require__(177); +const chatLog_entity_1 = __webpack_require__(75); +const chatLog_service_1 = __webpack_require__(157); +let ChatLogModule = class ChatLogModule { +}; +exports.ChatLogModule = ChatLogModule; +exports.ChatLogModule = ChatLogModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([chatLog_entity_1.ChatLogEntity, user_entity_1.UserEntity, chatGroup_entity_1.ChatGroupEntity])], + controllers: [chatLog_controller_1.ChatLogController], + providers: [chatLog_service_1.ChatLogService], + exports: [chatLog_service_1.ChatLogService], + }) +], ChatLogModule); + + +/***/ }), +/* 177 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatLogController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const jwtAuth_guard_1 = __webpack_require__(87); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const chatLog_service_1 = __webpack_require__(157); +const chatList_dto_1 = __webpack_require__(178); +const del_dto_1 = __webpack_require__(179); +const delByGroup_dto_1 = __webpack_require__(180); +const exportExcelChatlog_dto_1 = __webpack_require__(181); +const queryAllChatLog_dto_1 = __webpack_require__(182); +const queryByAppId_dto_1 = __webpack_require__(183); +const queryMyChatLog_dto_1 = __webpack_require__(184); +const querySingleChat_dto_1 = __webpack_require__(185); +const recDrawImg_dto_1 = __webpack_require__(186); +let ChatLogController = class ChatLogController { + chatLogService; + constructor(chatLogService) { + this.chatLogService = chatLogService; + } + querDrawLog(query, req) { + return this.chatLogService.querDrawLog(req, query); + } + recDrawImg(body) { + return this.chatLogService.recDrawImg(body); + } + queryAllChatLog(params, req) { + return this.chatLogService.querAllChatLog(params, req); + } + exportExcel(body, res) { + return this.chatLogService.exportExcel(body, res); + } + chatList(req, params) { + return this.chatLogService.chatList(req, params); + } + del(req, body) { + return this.chatLogService.deleteChatLog(req, body); + } + delByGroupId(req, body) { + return this.chatLogService.delByGroupId(req, body); + } + deleteChatsAfterId(req, body) { + return this.chatLogService.deleteChatsAfterId(req, body); + } + byAppId(req, params) { + return this.chatLogService.byAppId(req, params); + } + querySingleChat(req, params) { + return this.chatLogService.querySingleChat(req, params); + } +}; +exports.ChatLogController = ChatLogController; +__decorate([ + (0, common_1.Get)('draw'), + (0, swagger_1.ApiOperation)({ summary: '查询我的绘制记录' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Query)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof queryMyChatLog_dto_1.QuerMyChatLogDto !== "undefined" && queryMyChatLog_dto_1.QuerMyChatLogDto) === "function" ? _b : Object, typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "querDrawLog", null); +__decorate([ + (0, common_1.Post)('recDrawImg'), + (0, swagger_1.ApiOperation)({ summary: '推荐此图片对外展示' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof recDrawImg_dto_1.recDrawImgDto !== "undefined" && recDrawImg_dto_1.recDrawImgDto) === "function" ? _d : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "recDrawImg", null); +__decorate([ + (0, common_1.Get)('chatAll'), + (0, swagger_1.ApiOperation)({ summary: '查询所有的问答记录' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + __param(0, (0, common_1.Query)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof queryAllChatLog_dto_1.QuerAllChatLogDto !== "undefined" && queryAllChatLog_dto_1.QuerAllChatLogDto) === "function" ? _e : Object, typeof (_f = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _f : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "queryAllChatLog", null); +__decorate([ + (0, common_1.Post)('exportExcel'), + (0, swagger_1.ApiOperation)({ summary: '导出问答记录' }), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Res)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_g = typeof exportExcelChatlog_dto_1.ExportExcelChatlogDto !== "undefined" && exportExcelChatlog_dto_1.ExportExcelChatlogDto) === "function" ? _g : Object, typeof (_h = typeof express_1.Response !== "undefined" && express_1.Response) === "function" ? _h : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "exportExcel", null); +__decorate([ + (0, common_1.Get)('chatList'), + (0, swagger_1.ApiOperation)({ summary: '查询我的问答记录' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_j = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _j : Object, typeof (_k = typeof chatList_dto_1.ChatListDto !== "undefined" && chatList_dto_1.ChatListDto) === "function" ? _k : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "chatList", null); +__decorate([ + (0, common_1.Post)('del'), + (0, swagger_1.ApiOperation)({ summary: '删除我的问答记录' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_l = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _l : Object, typeof (_m = typeof del_dto_1.DelDto !== "undefined" && del_dto_1.DelDto) === "function" ? _m : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "del", null); +__decorate([ + (0, common_1.Post)('delByGroupId'), + (0, swagger_1.ApiOperation)({ summary: '清空一组对话' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_o = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _o : Object, typeof (_p = typeof delByGroup_dto_1.DelByGroupDto !== "undefined" && delByGroup_dto_1.DelByGroupDto) === "function" ? _p : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "delByGroupId", null); +__decorate([ + (0, common_1.Post)('deleteChatsAfterId'), + (0, swagger_1.ApiOperation)({ summary: '删除对话组中某条对话及其后的所有对话' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_q = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _q : Object, Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "deleteChatsAfterId", null); +__decorate([ + (0, common_1.Get)('byAppId'), + (0, swagger_1.ApiOperation)({ summary: '查询某个应用的问答记录' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_r = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _r : Object, typeof (_s = typeof queryByAppId_dto_1.QueryByAppIdDto !== "undefined" && queryByAppId_dto_1.QueryByAppIdDto) === "function" ? _s : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "byAppId", null); +__decorate([ + (0, common_1.Get)('querySingleChat'), + (0, swagger_1.ApiOperation)({ summary: '查询单条消息的状态和内容' }), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_t = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _t : Object, typeof (_u = typeof querySingleChat_dto_1.QuerySingleChatDto !== "undefined" && querySingleChat_dto_1.QuerySingleChatDto) === "function" ? _u : Object]), + __metadata("design:returntype", void 0) +], ChatLogController.prototype, "querySingleChat", null); +exports.ChatLogController = ChatLogController = __decorate([ + (0, common_1.Controller)('chatLog'), + (0, swagger_1.ApiTags)('chatLog'), + __metadata("design:paramtypes", [typeof (_a = typeof chatLog_service_1.ChatLogService !== "undefined" && chatLog_service_1.ChatLogService) === "function" ? _a : Object]) +], ChatLogController); + + +/***/ }), +/* 178 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ChatListDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class ChatListDto { + groupId; +} +exports.ChatListDto = ChatListDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '对话分组ID', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], ChatListDto.prototype, "groupId", void 0); + + +/***/ }), +/* 179 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DelDto = void 0; +const swagger_1 = __webpack_require__(14); +class DelDto { + id; +} +exports.DelDto = DelDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '对话Id', required: true }), + __metadata("design:type", Number) +], DelDto.prototype, "id", void 0); + + +/***/ }), +/* 180 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DelByGroupDto = void 0; +const swagger_1 = __webpack_require__(14); +class DelByGroupDto { + groupId; +} +exports.DelByGroupDto = DelByGroupDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '对话组Id', required: true }), + __metadata("design:type", Number) +], DelByGroupDto.prototype, "groupId", void 0); + + +/***/ }), +/* 181 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ExportExcelChatlogDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class ExportExcelChatlogDto { + page; + size; + prompt; + email; +} +exports.ExportExcelChatlogDto = ExportExcelChatlogDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], ExportExcelChatlogDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], ExportExcelChatlogDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '您好', + description: '用户询问的问题', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], ExportExcelChatlogDto.prototype, "prompt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'aiweb@aiweb.com', + description: '用户邮箱', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], ExportExcelChatlogDto.prototype, "email", void 0); + + +/***/ }), +/* 182 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QuerAllChatLogDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class QuerAllChatLogDto { + page; + size; + userId; + prompt; + role; + type; + model; +} +exports.QuerAllChatLogDto = QuerAllChatLogDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllChatLogDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllChatLogDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 99, description: '对话的用户id', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllChatLogDto.prototype, "userId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '您好', + description: '用户询问的问题', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerAllChatLogDto.prototype, "prompt", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'user', description: '身份', required: false }), + __metadata("design:type", String) +], QuerAllChatLogDto.prototype, "role", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '1', description: '类型', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerAllChatLogDto.prototype, "type", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'gpt-4o-mini', description: '模型', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerAllChatLogDto.prototype, "model", void 0); + + +/***/ }), +/* 183 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryByAppIdDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QueryByAppIdDto { + appId; + page; + size; +} +exports.QueryByAppIdDto = QueryByAppIdDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '应用Id', required: true }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryByAppIdDto.prototype, "appId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryByAppIdDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QueryByAppIdDto.prototype, "size", void 0); + + +/***/ }), +/* 184 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QuerMyChatLogDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QuerMyChatLogDto { + model; +} +exports.QuerMyChatLogDto = QuerMyChatLogDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'mj', description: '使用的模型', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerMyChatLogDto.prototype, "model", void 0); + + +/***/ }), +/* 185 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QuerySingleChatDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class QuerySingleChatDto { + chatId; +} +exports.QuerySingleChatDto = QuerySingleChatDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: '123', description: '聊天记录ID' }), + (0, class_validator_1.IsNotEmpty)({ message: '聊天记录ID不能为空' }), + __metadata("design:type", Number) +], QuerySingleChatDto.prototype, "chatId", void 0); + + +/***/ }), +/* 186 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.recDrawImgDto = void 0; +const swagger_1 = __webpack_require__(14); +class recDrawImgDto { + id; +} +exports.recDrawImgDto = recDrawImgDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '推荐图片的id' }), + __metadata("design:type", Number) +], recDrawImgDto.prototype, "id", void 0); + + +/***/ }), +/* 187 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CramiModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const chatGroup_entity_1 = __webpack_require__(82); +const chatLog_entity_1 = __webpack_require__(75); +const config_entity_1 = __webpack_require__(73); +const user_entity_1 = __webpack_require__(83); +const accountLog_entity_1 = __webpack_require__(79); +const balance_entity_1 = __webpack_require__(80); +const fingerprint_entity_1 = __webpack_require__(84); +const userBalance_entity_1 = __webpack_require__(81); +const userBalance_service_1 = __webpack_require__(34); +const crami_controller_1 = __webpack_require__(188); +const crami_entity_1 = __webpack_require__(190); +const crami_service_1 = __webpack_require__(189); +const cramiPackage_entity_1 = __webpack_require__(71); +let CramiModule = class CramiModule { +}; +exports.CramiModule = CramiModule; +exports.CramiModule = CramiModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [ + typeorm_1.TypeOrmModule.forFeature([ + crami_entity_1.CramiEntity, + cramiPackage_entity_1.CramiPackageEntity, + user_entity_1.UserEntity, + balance_entity_1.BalanceEntity, + accountLog_entity_1.AccountLogEntity, + config_entity_1.ConfigEntity, + userBalance_entity_1.UserBalanceEntity, + fingerprint_entity_1.FingerprintLogEntity, + chatLog_entity_1.ChatLogEntity, + chatGroup_entity_1.ChatGroupEntity, + ]), + ], + providers: [crami_service_1.CramiService, userBalance_service_1.UserBalanceService], + controllers: [crami_controller_1.CramiController], + exports: [crami_service_1.CramiService], + }) +], CramiModule); + + +/***/ }), +/* 188 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CramiController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const jwtAuth_guard_1 = __webpack_require__(87); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const crami_service_1 = __webpack_require__(189); +const batchDelCrami_dto_1 = __webpack_require__(191); +const createCrami_dto_1 = __webpack_require__(192); +const createPackage_dto_1 = __webpack_require__(193); +const deletePackage_dto_1 = __webpack_require__(194); +const queryAllCrami_dto_1 = __webpack_require__(195); +const queryAllPackage_dto_1 = __webpack_require__(196); +const updatePackage_dto_1 = __webpack_require__(197); +const useCrami_dto_1 = __webpack_require__(198); +let CramiController = class CramiController { + cramiService; + constructor(cramiService) { + this.cramiService = cramiService; + } + async queryOnePackage(id) { + return this.cramiService.queryOnePackage(id); + } + async queryAllPackage(query) { + return this.cramiService.queryAllPackage(query); + } + async createPackage(body) { + return this.cramiService.createPackage(body); + } + async updatePackage(body) { + return this.cramiService.updatePackage(body); + } + async delPackage(body) { + return this.cramiService.delPackage(body); + } + async createCrami(body) { + return this.cramiService.createCrami(body); + } + async useCrami(req, body) { + return this.cramiService.useCrami(req, body); + } + async queryAllCrami(params, req) { + return this.cramiService.queryAllCrami(params, req); + } + async delCrami(id) { + return this.cramiService.delCrami(id); + } + async batchDelCrami(body) { + return this.cramiService.batchDelCrami(body); + } +}; +exports.CramiController = CramiController; +__decorate([ + (0, common_1.Get)('queryOnePackage'), + (0, swagger_1.ApiOperation)({ summary: '查询单个套餐' }), + __param(0, (0, common_1.Query)('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "queryOnePackage", null); +__decorate([ + (0, common_1.Get)('queryAllPackage'), + (0, swagger_1.ApiOperation)({ summary: '查询所有套餐' }), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof queryAllPackage_dto_1.QuerAllPackageDto !== "undefined" && queryAllPackage_dto_1.QuerAllPackageDto) === "function" ? _b : Object]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "queryAllPackage", null); +__decorate([ + (0, common_1.Post)('createPackage'), + (0, swagger_1.ApiOperation)({ summary: '创建套餐' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_c = typeof createPackage_dto_1.CreatePackageDto !== "undefined" && createPackage_dto_1.CreatePackageDto) === "function" ? _c : Object]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "createPackage", null); +__decorate([ + (0, common_1.Post)('updatePackage'), + (0, swagger_1.ApiOperation)({ summary: '更新套餐' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof updatePackage_dto_1.UpdatePackageDto !== "undefined" && updatePackage_dto_1.UpdatePackageDto) === "function" ? _d : Object]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "updatePackage", null); +__decorate([ + (0, common_1.Post)('delPackage'), + (0, swagger_1.ApiOperation)({ summary: '删除套餐' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof deletePackage_dto_1.DeletePackageDto !== "undefined" && deletePackage_dto_1.DeletePackageDto) === "function" ? _e : Object]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "delPackage", null); +__decorate([ + (0, common_1.Post)('createCrami'), + (0, swagger_1.ApiOperation)({ summary: '生成卡密' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof createCrami_dto_1.CreatCramiDto !== "undefined" && createCrami_dto_1.CreatCramiDto) === "function" ? _f : Object]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "createCrami", null); +__decorate([ + (0, common_1.Post)('useCrami'), + (0, swagger_1.ApiOperation)({ summary: '使用卡密' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_g = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _g : Object, typeof (_h = typeof useCrami_dto_1.UseCramiDto !== "undefined" && useCrami_dto_1.UseCramiDto) === "function" ? _h : Object]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "useCrami", null); +__decorate([ + (0, common_1.Get)('queryAllCrami'), + (0, swagger_1.ApiOperation)({ summary: '查询所有卡密' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Query)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_j = typeof queryAllCrami_dto_1.QuerAllCramiDto !== "undefined" && queryAllCrami_dto_1.QuerAllCramiDto) === "function" ? _j : Object, typeof (_k = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _k : Object]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "queryAllCrami", null); +__decorate([ + (0, common_1.Post)('delCrami'), + (0, swagger_1.ApiOperation)({ summary: '删除卡密' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Number]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "delCrami", null); +__decorate([ + (0, common_1.Post)('batchDelCrami'), + (0, swagger_1.ApiOperation)({ summary: '批量删除卡密' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_l = typeof batchDelCrami_dto_1.BatchDelCramiDto !== "undefined" && batchDelCrami_dto_1.BatchDelCramiDto) === "function" ? _l : Object]), + __metadata("design:returntype", Promise) +], CramiController.prototype, "batchDelCrami", null); +exports.CramiController = CramiController = __decorate([ + (0, swagger_1.ApiTags)('crami'), + (0, common_1.Controller)('crami'), + __metadata("design:paramtypes", [typeof (_a = typeof crami_service_1.CramiService !== "undefined" && crami_service_1.CramiService) === "function" ? _a : Object]) +], CramiController); + + +/***/ }), +/* 189 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CramiService = void 0; +const balance_constant_1 = __webpack_require__(35); +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const user_entity_1 = __webpack_require__(83); +const userBalance_service_1 = __webpack_require__(34); +const crami_entity_1 = __webpack_require__(190); +const cramiPackage_entity_1 = __webpack_require__(71); +let CramiService = class CramiService { + cramiEntity; + cramiPackageEntity; + userEntity; + userBalanceService; + constructor(cramiEntity, cramiPackageEntity, userEntity, userBalanceService) { + this.cramiEntity = cramiEntity; + this.cramiPackageEntity = cramiPackageEntity; + this.userEntity = userEntity; + this.userBalanceService = userBalanceService; + } + async queryOnePackage(id) { + return await this.cramiPackageEntity.findOne({ where: { id } }); + } + async queryAllPackage(query) { + try { + const { page = 1, size = 10, name, status, type } = query; + const where = {}; + name && Object.assign(where, { name: (0, typeorm_2.Like)(`%${name}%`) }); + status && Object.assign(where, { status }); + if (type) { + if (type > 0) { + Object.assign(where, { days: (0, typeorm_2.MoreThan)(0) }); + } + else { + Object.assign(where, { days: (0, typeorm_2.LessThanOrEqual)(0) }); + } + } + const [rows, count] = await this.cramiPackageEntity.findAndCount({ + skip: (page - 1) * size, + take: size, + where, + order: { order: 'DESC' }, + }); + return { rows, count }; + } + catch (error) { + console.log('error: ', error); + } + } + async createPackage(body) { + const { name, weight } = body; + const p = await this.cramiPackageEntity.findOne({ + where: [{ name }, { weight }], + }); + if (p) { + throw new common_1.HttpException('套餐名称或套餐等级重复、请检查!', common_1.HttpStatus.BAD_REQUEST); + } + try { + return await this.cramiPackageEntity.save(body); + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException(error, common_1.HttpStatus.BAD_REQUEST); + } + } + async updatePackage(body) { + const { id, name, weight } = body; + const op = await this.cramiPackageEntity.findOne({ where: { id } }); + if (!op) { + throw new common_1.HttpException('当前套餐不存在、请检查你的输入参数!', common_1.HttpStatus.BAD_REQUEST); + } + const count = await this.cramiPackageEntity.count({ + where: [ + { name, id: (0, typeorm_2.Not)(id) }, + { weight, id: (0, typeorm_2.Not)(id) }, + ], + }); + if (count) { + throw new common_1.HttpException('套餐名称或套餐等级重复、请检查!', common_1.HttpStatus.BAD_REQUEST); + } + const res = await this.cramiPackageEntity.update({ id }, body); + if (res.affected > 0) { + return '更新套餐成功!'; + } + else { + throw new common_1.HttpException('更新套餐失败、请重试!', common_1.HttpStatus.BAD_REQUEST); + } + } + async delPackage(body) { + const { id } = body; + const count = await this.cramiEntity.count({ where: { packageId: id } }); + if (count) { + throw new common_1.HttpException('当前套餐下存在卡密、请先删除卡密后才可删除套餐!', common_1.HttpStatus.BAD_REQUEST); + } + return await this.cramiPackageEntity.delete({ id }); + } + async createCrami(body) { + const { packageId, count = 1 } = body; + if (packageId) { + const pkg = await this.cramiPackageEntity.findOne({ + where: { id: packageId }, + }); + if (!pkg) { + throw new common_1.HttpException('当前套餐不存在、请确认您选择的套餐是否存在!', common_1.HttpStatus.BAD_REQUEST); + } + const { days = -1, model3Count = 0, model4Count = 0, drawMjCount = 0, appCats = '' } = pkg; + const baseCrami = { + packageId, + days, + model3Count, + model4Count, + drawMjCount, + appCats, + }; + return await this.generateCrami(baseCrami, count); + } + if (!packageId) { + const { model3Count = 0, model4Count = 0, drawMjCount = 0 } = body; + if ([model3Count, model4Count, drawMjCount].every(v => !v)) { + throw new common_1.HttpException('自定义卡密必须至少一项余额不为0️零!', common_1.HttpStatus.BAD_REQUEST); + } + const baseCrami = { days: -1, model3Count, model4Count, drawMjCount }; + return await this.generateCrami(baseCrami, count); + } + } + async generateCrami(cramiInfo, count) { + const cramiList = []; + for (let i = 0; i < count; i++) { + const code = (0, utils_1.generateCramiCode)(); + const crami = this.cramiEntity.create({ ...cramiInfo, code }); + cramiList.push(crami); + } + return await this.cramiEntity.save(cramiList); + } + async useCrami(req, body) { + const { id } = req.user; + const crami = await this.cramiEntity.findOne({ + where: { code: body.code }, + }); + if (!crami) { + throw new common_1.HttpException('当前卡密不存在、请确认您输入的卡密是否正确!', common_1.HttpStatus.BAD_REQUEST); + } + const { status, days = -1, model3Count = 0, model4Count = 0, drawMjCount = 0, packageId, appCats, } = crami; + if (status === 1) { + throw new common_1.HttpException('当前卡密已被使用、请确认您输入的卡密是否正确!', common_1.HttpStatus.BAD_REQUEST); + } + const balanceInfo = { + model3Count, + model4Count, + drawMjCount, + packageId, + appCats, + }; + await this.userBalanceService.addBalanceToUser(id, { ...balanceInfo }, days); + await this.userBalanceService.saveRecordRechargeLog({ + userId: id, + rechargeType: balance_constant_1.RechargeType.PACKAGE_GIFT, + model3Count, + model4Count, + drawMjCount, + days, + }); + await this.cramiEntity.update({ code: body.code }, { useId: id, status: 1 }); + return '使用卡密成功'; + } + async queryAllCrami(params, req) { + const { page = 1, size = 10, status, useId } = params; + const where = {}; + status && Object.assign(where, { status }); + useId && Object.assign(where, { useId }); + const [rows, count] = await this.cramiEntity.findAndCount({ + skip: (page - 1) * size, + take: size, + order: { createdAt: 'DESC' }, + where, + }); + const userIds = rows.map(t => t.useId); + const packageIds = rows.map(t => t.packageId); + const userInfos = await this.userEntity.find({ + where: { id: (0, typeorm_2.In)(userIds) }, + }); + const packageInfos = await this.cramiPackageEntity.find({ + where: { id: (0, typeorm_2.In)(packageIds) }, + }); + rows.forEach((t) => { + t.username = userInfos.find(u => u.id === t.useId)?.username; + t.email = userInfos.find(u => u.id === t.useId)?.email; + t.packageName = packageInfos.find(p => p.id === t.packageId)?.name; + }); + req.user.role !== 'super' && rows.forEach((t) => (t.email = (0, utils_1.maskEmail)(t.email))); + req.user.role !== 'super' && rows.forEach((t) => (t.code = (0, utils_1.maskCrami)(t.code))); + return { rows, count }; + } + async delCrami(id) { + const c = await this.cramiEntity.findOne({ where: { id } }); + if (!c) { + throw new common_1.HttpException('当前卡密不存在、请确认您要删除的卡密是否存在!', common_1.HttpStatus.BAD_REQUEST); + } + if (c.status === 1) { + throw new common_1.HttpException('当前卡密已被使用、已使用的卡密禁止删除!', common_1.HttpStatus.BAD_REQUEST); + } + return await this.cramiEntity.delete({ id }); + } + async batchDelCrami(body) { + const { ids } = body; + const res = await this.cramiEntity.delete(ids); + if (res.affected > 0) { + return '删除卡密成功!'; + } + else { + throw new common_1.HttpException('删除卡密失败、请重试!', common_1.HttpStatus.BAD_REQUEST); + } + } +}; +exports.CramiService = CramiService; +exports.CramiService = CramiService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(crami_entity_1.CramiEntity)), + __param(1, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)), + __param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof userBalance_service_1.UserBalanceService !== "undefined" && userBalance_service_1.UserBalanceService) === "function" ? _d : Object]) +], CramiService); + + +/***/ }), +/* 190 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CramiEntity = void 0; +const baseEntity_1 = __webpack_require__(72); +const typeorm_1 = __webpack_require__(3); +let CramiEntity = class CramiEntity extends baseEntity_1.BaseEntity { + code; + cramiType; + packageId; + status; + useId; + days; + model3Count; + model4Count; + drawMjCount; + appCats; +}; +exports.CramiEntity = CramiEntity; +__decorate([ + (0, typeorm_1.Column)({ unique: true, comment: '存储卡密CDK编码', length: 50 }), + __metadata("design:type", String) +], CramiEntity.prototype, "code", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '卡密CDK类型:1: 普通 | 2: 单人可使用一次 ', + default: 1, + }), + __metadata("design:type", Number) +], CramiEntity.prototype, "cramiType", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '卡密CDK类型: 默认套餐类型 | 不填就是自定义类型', + nullable: true, + }), + __metadata("design:type", Number) +], CramiEntity.prototype, "packageId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '卡密CDK状态,如已使用、未使用等', default: 0 }), + __metadata("design:type", Number) +], CramiEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '卡密使用账户用户ID信息', nullable: true }), + __metadata("design:type", Number) +], CramiEntity.prototype, "useId", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '卡密有效期天数、从生成创建的时候开始计算,设为0则不限时间', + default: 0, + }), + __metadata("design:type", Number) +], CramiEntity.prototype, "days", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '卡密模型3额度', nullable: true }), + __metadata("design:type", Number) +], CramiEntity.prototype, "model3Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '卡密模型4额度', nullable: true }), + __metadata("design:type", Number) +], CramiEntity.prototype, "model4Count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '卡密MJ绘画额度', nullable: true }), + __metadata("design:type", Number) +], CramiEntity.prototype, "drawMjCount", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '卡密应用分类列表', nullable: true, default: '' }), + __metadata("design:type", String) +], CramiEntity.prototype, "appCats", void 0); +exports.CramiEntity = CramiEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'crami' }) +], CramiEntity); + + +/***/ }), +/* 191 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BatchDelCramiDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class BatchDelCramiDto { + ids; +} +exports.BatchDelCramiDto = BatchDelCramiDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要删除的套餐Ids', required: true }), + (0, class_validator_1.IsArray)({ message: '参数类型为数组' }), + (0, class_validator_1.ArrayMinSize)(1, { message: '最短长度为1' }), + __metadata("design:type", Array) +], BatchDelCramiDto.prototype, "ids", void 0); + + +/***/ }), +/* 192 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CreatCramiDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class CreatCramiDto { + packageId; + count; + model3Count; + model4Count; + drawMjCount; +} +exports.CreatCramiDto = CreatCramiDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '套餐类型', required: true }), + (0, class_validator_1.IsNumber)({}, { message: '套餐类型必须是number' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreatCramiDto.prototype, "packageId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '单次生成卡密数量' }), + (0, class_validator_1.IsNumber)({}, { message: '创建卡密的张数数量' }), + (0, class_validator_1.Max)(50, { message: '单次创建卡密的张数数量不能超过50张' }), + (0, class_validator_1.Min)(1, { message: '单次创建卡密的张数数量不能少于1张' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreatCramiDto.prototype, "count", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 0, description: '卡密携带模型3额度' }), + (0, class_validator_1.IsNumber)({}, { message: '卡密携带的余额必须是number' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreatCramiDto.prototype, "model3Count", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 100, description: '卡密携带模型4额度' }), + (0, class_validator_1.IsNumber)({}, { message: '卡密携带额度类型必须是number' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreatCramiDto.prototype, "model4Count", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 3, description: '卡密携带MJ绘画额度' }), + (0, class_validator_1.IsNumber)({}, { message: '卡密携带额度类型必须是number' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreatCramiDto.prototype, "drawMjCount", void 0); + + +/***/ }), +/* 193 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CreatePackageDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_transformer_1 = __webpack_require__(170); +const class_validator_1 = __webpack_require__(110); +class CreatePackageDto { + name; + des; + weight; + deductionType; + coverImg; + price; + order; + status; + days; + model3Count; + model4Count; + drawMjCount; + appCats; +} +exports.CreatePackageDto = CreatePackageDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '基础套餐100次卡', + description: '套餐名称', + required: true, + }), + (0, class_validator_1.IsDefined)({ message: '套餐名称是必传参数' }), + __metadata("design:type", String) +], CreatePackageDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '这是一个100次对话余额的套餐,我们将为您额外赠送3次绘画余额,活动期间,我们将在套餐基础上额外赠送您十次对话余额和1次绘画余额', + description: '套餐详情描述', + required: true, + }), + (0, class_validator_1.IsDefined)({ message: '套餐描述是必传参数' }), + __metadata("design:type", String) +], CreatePackageDto.prototype, "des", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 7, default: 0, description: '套餐等级设置' }), + (0, class_validator_1.IsNumber)({}, { message: '套餐等级权重必须为数字' }), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "weight", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: '套餐扣费类型 1:按次数 2:按Token', + required: true, + }), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "deductionType", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'https://xxxx.png', description: '套餐封面图片' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], CreatePackageDto.prototype, "coverImg", void 0); +__decorate([ + (0, class_transformer_1.Transform)(({ value }) => parseFloat(value)), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "price", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 100, description: '套餐排序、数字越大越靠前' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "order", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: '套餐状态 0:禁用 1:启用', + required: true, + }), + (0, class_validator_1.IsNumber)({}, { message: '套餐状态必须是Number' }), + (0, class_validator_1.IsIn)([0, 1], { message: '套餐状态错误' }), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 7, + default: 0, + description: '套餐有效期 -1为永久不过期', + }), + (0, class_validator_1.IsNumber)({}, { message: '套餐有效期天数类型必须是number' }), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "days", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1000, default: 0, description: '模型3对话次数' }), + (0, class_validator_1.IsNumber)({}, { message: '模型3对话次数必须是number类型' }), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "model3Count", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, default: 0, description: '模型4对话次数' }), + (0, class_validator_1.IsNumber)({}, { message: '模型4对话次数必须是number类型' }), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "model4Count", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, default: 0, description: 'MJ绘画次数' }), + (0, class_validator_1.IsNumber)({}, { message: 'MJ绘画次数必须是number类型' }), + __metadata("design:type", Number) +], CreatePackageDto.prototype, "drawMjCount", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '1,2,3', description: '套餐包含的应用分类' }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], CreatePackageDto.prototype, "appCats", void 0); + + +/***/ }), +/* 194 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DeletePackageDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_validator_1 = __webpack_require__(110); +class DeletePackageDto { + id; +} +exports.DeletePackageDto = DeletePackageDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要修改的套餐Id', required: true }), + (0, class_validator_1.IsNumber)({}, { message: '套餐ID必须是Number' }), + __metadata("design:type", Number) +], DeletePackageDto.prototype, "id", void 0); + + +/***/ }), +/* 195 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QuerAllCramiDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QuerAllCramiDto { + page; + size; + useId; + status; +} +exports.QuerAllCramiDto = QuerAllCramiDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllCramiDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllCramiDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '使用人Id', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllCramiDto.prototype, "useId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: '卡密状态 0:未使用 1:已消费', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllCramiDto.prototype, "status", void 0); + + +/***/ }), +/* 196 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QuerAllPackageDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QuerAllPackageDto { + page; + size; + name; + status; + type; +} +exports.QuerAllPackageDto = QuerAllPackageDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllPackageDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllPackageDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'name', description: '套餐名称', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerAllPackageDto.prototype, "name", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: '套餐状态 0:禁用 1:启用', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllPackageDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1, + description: '套餐类型 -1:永久套餐 1:限时套餐', + required: false, + }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllPackageDto.prototype, "type", void 0); + + +/***/ }), +/* 197 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UpdatePackageDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +const createPackage_dto_1 = __webpack_require__(193); +class UpdatePackageDto extends createPackage_dto_1.CreatePackageDto { + id; +} +exports.UpdatePackageDto = UpdatePackageDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要修改的套餐Id', required: true }), + (0, class_validator_1.IsNumber)({}, { message: '套餐ID必须是Number' }), + __metadata("design:type", Number) +], UpdatePackageDto.prototype, "id", void 0); + + +/***/ }), +/* 198 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UseCramiDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class UseCramiDto { + code; +} +exports.UseCramiDto = UseCramiDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'ffar684rv254fs4f', + description: '卡密信息', + required: true, + }), + (0, class_validator_1.IsDefined)({ message: '套餐名称是必传参数' }), + __metadata("design:type", String) +], UseCramiDto.prototype, "code", void 0); + + +/***/ }), +/* 199 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var DatabaseModule_1; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DatabaseModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const database_service_1 = __webpack_require__(200); +const app_entity_1 = __webpack_require__(106); +const appCats_entity_1 = __webpack_require__(107); +const userApps_entity_1 = __webpack_require__(108); +const autoReply_entity_1 = __webpack_require__(136); +const badWords_entity_1 = __webpack_require__(144); +const violationLog_entity_1 = __webpack_require__(145); +const chatGroup_entity_1 = __webpack_require__(82); +const chatLog_entity_1 = __webpack_require__(75); +const crami_entity_1 = __webpack_require__(190); +const cramiPackage_entity_1 = __webpack_require__(71); +const config_entity_1 = __webpack_require__(73); +const models_entity_1 = __webpack_require__(78); +const order_entity_1 = __webpack_require__(201); +const plugin_entity_1 = __webpack_require__(159); +const share_entity_1 = __webpack_require__(202); +const signIn_entity_1 = __webpack_require__(203); +const user_entity_1 = __webpack_require__(83); +const accountLog_entity_1 = __webpack_require__(79); +const balance_entity_1 = __webpack_require__(80); +const fingerprint_entity_1 = __webpack_require__(84); +const userBalance_entity_1 = __webpack_require__(81); +const verification_entity_1 = __webpack_require__(101); +let DatabaseModule = DatabaseModule_1 = class DatabaseModule { + connection; + constructor(connection) { + this.connection = connection; + } + logger = new common_1.Logger(DatabaseModule_1.name); + async onModuleInit() { + const { database } = this.connection.options; + this.logger.log(`Your MySQL database named ${database} has been connected`); + } +}; +exports.DatabaseModule = DatabaseModule; +exports.DatabaseModule = DatabaseModule = DatabaseModule_1 = __decorate([ + (0, common_1.Module)({ + imports: [ + typeorm_1.TypeOrmModule.forRootAsync({ + useFactory: () => ({ + type: 'mysql', + host: process.env.DB_HOST, + port: parseInt(process.env.DB_PORT, 10), + username: process.env.DB_USER, + password: process.env.DB_PASS, + database: process.env.DB_DATABASE, + entities: [ + share_entity_1.Share, + autoReply_entity_1.AutoReplyEntity, + crami_entity_1.CramiEntity, + cramiPackage_entity_1.CramiPackageEntity, + badWords_entity_1.BadWordsEntity, + chatGroup_entity_1.ChatGroupEntity, + verification_entity_1.VerificationEntity, + signIn_entity_1.SigninEntity, + violationLog_entity_1.ViolationLogEntity, + models_entity_1.ModelsEntity, + user_entity_1.UserEntity, + accountLog_entity_1.AccountLogEntity, + fingerprint_entity_1.FingerprintLogEntity, + balance_entity_1.BalanceEntity, + userBalance_entity_1.UserBalanceEntity, + plugin_entity_1.PluginEntity, + config_entity_1.ConfigEntity, + chatLog_entity_1.ChatLogEntity, + userApps_entity_1.UserAppsEntity, + appCats_entity_1.AppCatsEntity, + app_entity_1.AppEntity, + order_entity_1.OrderEntity, + ], + synchronize: false, + logging: false, + charset: 'utf8mb4', + timezone: '+08:00', + }), + }), + ], + providers: [database_service_1.DatabaseService], + }), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.DataSource !== "undefined" && typeorm_2.DataSource) === "function" ? _a : Object]) +], DatabaseModule); + + +/***/ }), +/* 200 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.DatabaseService = void 0; +const common_1 = __webpack_require__(2); +const bcrypt = __webpack_require__(93); +const typeorm_1 = __webpack_require__(3); +let DatabaseService = class DatabaseService { + connection; + constructor(connection) { + this.connection = connection; + } + async onModuleInit() { + await this.checkSuperAdmin(); + await this.checkSiteBaseConfig(); + } + async checkSuperAdmin() { + const user = await this.connection.query(`SELECT * FROM users WHERE role = 'super'`); + if (!user || user.length === 0) { + const superPassword = bcrypt.hashSync('123456', 10); + const superEmail = 'super'; + const superUserinfo = { + username: 'super', + password: superPassword, + status: 1, + email: superEmail, + sex: 1, + role: 'super', + }; + await this.createDefaultUser(superUserinfo); + } + } + async createDefaultUser(userInfo) { + try { + const { username, password, status, email, role } = userInfo; + const user = await this.connection.query(`INSERT INTO users (username, password, status, email, role) VALUES ('${username}', '${password}', '${status}', '${email}', '${role}')`); + const userId = user.insertId; + await this.connection.query(`INSERT INTO balance (userId, balance, usesLeft, paintCount) VALUES ('${userId}', 0, 1000, 100)`); + common_1.Logger.log(`初始化创建${role}用户成功、用户名为[${username}]、初始密码为[${username === 'super' ? 'super' : '123456'}] ==============> 请注意查阅`, 'DatabaseService'); + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException('创建默认超级管理员失败!', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } + async checkSiteBaseConfig() { + const keys = ['siteName', 'robotAvatar']; + const result = await this.connection.query(` + SELECT COUNT(*) AS count FROM config WHERE \`configKey\` IN (${keys.map(k => `'${k}'`).join(',')}) +`); + const count = parseInt(result[0].count); + if (count === 0) { + await this.createBaseSiteConfig(); + } + } + async createBaseSiteConfig() { + try { + const code = ``; + const noticeInfo = ` +#### AIWeb 欢迎您 + - 欢迎使用 AIWeb + - 初始管理员账号密码 super 123456 【前台后台登录都可以修改】 + - 初始预览账号密码 admin 123456 【为后台查看账号 仅可查看部分非敏感数据】 +`; + const defaultConfig = [ + { configKey: 'siteName', configVal: '', public: 1, encrypt: 0 }, + { configKey: 'robotAvatar', configVal: '', public: 1, encrypt: 0 }, + { + configKey: 'userDefaultAvatar', + configVal: '', + public: 0, + encrypt: 0, + }, + { configKey: 'baiduCode', configVal: code, public: 1, encrypt: 0 }, + { configKey: 'baiduSiteId', configVal: '', public: 0, encrypt: 0 }, + { + configKey: 'baiduToken', + configVal: '', + public: 0, + encrypt: 0, + }, + { + configKey: 'openaiBaseUrl', + configVal: 'https://api.lightai.io', + public: 0, + encrypt: 0, + }, + { configKey: 'openaiBaseKey', configVal: 'sk-', public: 0, encrypt: 0 }, + { configKey: 'noticeInfo', configVal: noticeInfo, public: 1, encrypt: 0 }, + { + configKey: 'registerSendStatus', + configVal: '1', + public: 1, + encrypt: 0, + }, + { + configKey: 'registerSendModel3Count', + configVal: '30', + public: 1, + encrypt: 0, + }, + { + configKey: 'registerSendModel4Count', + configVal: '3', + public: 1, + encrypt: 0, + }, + { + configKey: 'registerSendDrawMjCount', + configVal: '3', + public: 1, + encrypt: 0, + }, + { + configKey: 'firstRegisterSendStatus', + configVal: '1', + public: 1, + encrypt: 0, + }, + { + configKey: 'firstRegisterSendRank', + configVal: '500', + public: 1, + encrypt: 0, + }, + { + configKey: 'firstRegisterSendModel3Count', + configVal: '10', + public: 1, + encrypt: 0, + }, + { + configKey: 'firstRegisterSendModel4Count', + configVal: '10', + public: 1, + encrypt: 0, + }, + { + configKey: 'firstRegisterSendDrawMjCount', + configVal: '10', + public: 1, + encrypt: 0, + }, + { configKey: 'isVerifyEmail', configVal: '1', public: 1, encrypt: 0 }, + { configKey: 'model3Name', configVal: '普通积分', public: 1, encrypt: 0 }, + { configKey: 'model4Name', configVal: '高级积分', public: 1, encrypt: 0 }, + { configKey: 'drawMjName', configVal: '绘画积分', public: 1, encrypt: 0 }, + { + configKey: 'drawingStyles', + configVal: '油画风格,像素风格,赛博朋克,动漫,日系,超现实主义,油画,卡通,插画,海报,写实,扁平,中国风,水墨画,唯美二次元,印象派,炫彩插画,像素艺术,艺术创想,色彩主义,数字艺术', + public: 1, + encrypt: 0, + }, + ]; + const res = await this.connection.query(`INSERT INTO config (configKey, configVal, public, encrypt) VALUES ${defaultConfig + .map(d => `('${d.configKey}', '${d.configVal.replace(/'/g, "\\'")}', '${d.public}', '${d.encrypt}')`) + .join(', ')}`); + common_1.Logger.log(`初始化网站配置信息成功、如您需要修改网站配置信息,请前往管理系统系统配置设置 ==============> 请注意查阅`, 'DatabaseService'); + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException('创建默认网站配置失败!', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } +}; +exports.DatabaseService = DatabaseService; +exports.DatabaseService = DatabaseService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_1.Connection !== "undefined" && typeorm_1.Connection) === "function" ? _a : Object]) +], DatabaseService); + + +/***/ }), +/* 201 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OrderEntity = void 0; +const typeorm_1 = __webpack_require__(3); +const baseEntity_1 = __webpack_require__(72); +let OrderEntity = class OrderEntity extends baseEntity_1.BaseEntity { + orderId; + tradeId; + payPlatform; + userId; + goodsId; + count; + price; + total; + status; + paydAt; + channel; +}; +exports.OrderEntity = OrderEntity; +__decorate([ + (0, typeorm_1.Column)({ unique: true, comment: '订单ID', length: 64 }), + __metadata("design:type", String) +], OrderEntity.prototype, "orderId", void 0); +__decorate([ + (0, typeorm_1.Column)({ + unique: true, + comment: '交易ID(服务商)', + length: 32, + nullable: true, + }), + __metadata("design:type", String) +], OrderEntity.prototype, "tradeId", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '支付平台【epay|hupi|ltzf】)', + length: 32, + nullable: true, + }), + __metadata("design:type", String) +], OrderEntity.prototype, "payPlatform", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '用户ID', nullable: true }), + __metadata("design:type", Number) +], OrderEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '商品ID', nullable: true }), + __metadata("design:type", Number) +], OrderEntity.prototype, "goodsId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '数量', default: 1 }), + __metadata("design:type", Number) +], OrderEntity.prototype, "count", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '套餐价格¥', type: 'decimal', scale: 2, precision: 10 }), + __metadata("design:type", Number) +], OrderEntity.prototype, "price", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '订单总金额', type: 'decimal', scale: 2, precision: 10 }), + __metadata("design:type", Number) +], OrderEntity.prototype, "total", void 0); +__decorate([ + (0, typeorm_1.Column)({ + comment: '订单状态(0:未支付、1:已支付、2、支付失败、3:支付超时)', + default: 0, + }), + __metadata("design:type", Number) +], OrderEntity.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'datetime', length: 0, nullable: true, comment: '支付时间' }), + __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) +], OrderEntity.prototype, "paydAt", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '支付渠道)', length: 32, nullable: true }), + __metadata("design:type", String) +], OrderEntity.prototype, "channel", void 0); +exports.OrderEntity = OrderEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'order' }) +], OrderEntity); + + +/***/ }), +/* 202 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.Share = void 0; +const typeorm_1 = __webpack_require__(3); +let Share = class Share { + id; + shareCode; + htmlContent; + createdAt; +}; +exports.Share = Share; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)(), + __metadata("design:type", Number) +], Share.prototype, "id", void 0); +__decorate([ + (0, typeorm_1.Column)({ length: 8, unique: true }), + __metadata("design:type", String) +], Share.prototype, "shareCode", void 0); +__decorate([ + (0, typeorm_1.Column)('mediumtext'), + __metadata("design:type", String) +], Share.prototype, "htmlContent", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'timestamp', default: () => 'CURRENT_TIMESTAMP' }), + __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) +], Share.prototype, "createdAt", void 0); +exports.Share = Share = __decorate([ + (0, typeorm_1.Entity)('share') +], Share); + + +/***/ }), +/* 203 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SigninEntity = void 0; +const typeorm_1 = __webpack_require__(3); +const baseEntity_1 = __webpack_require__(72); +let SigninEntity = class SigninEntity extends baseEntity_1.BaseEntity { + userId; + signInDate; + signInTime; + isSigned; +}; +exports.SigninEntity = SigninEntity; +__decorate([ + (0, typeorm_1.Column)({ comment: '用户ID' }), + __metadata("design:type", Number) +], SigninEntity.prototype, "userId", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '签到日期' }), + __metadata("design:type", String) +], SigninEntity.prototype, "signInDate", void 0); +__decorate([ + (0, typeorm_1.Column)({ comment: '签到时间' }), + __metadata("design:type", typeof (_a = typeof Date !== "undefined" && Date) === "function" ? _a : Object) +], SigninEntity.prototype, "signInTime", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: false }), + __metadata("design:type", Boolean) +], SigninEntity.prototype, "isSigned", void 0); +exports.SigninEntity = SigninEntity = __decorate([ + (0, typeorm_1.Entity)({ name: 'signin' }) +], SigninEntity); + + +/***/ }), +/* 204 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GlobalConfigModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const chatLog_entity_1 = __webpack_require__(75); +const config_entity_1 = __webpack_require__(73); +const globalConfig_controller_1 = __webpack_require__(205); +const globalConfig_service_1 = __webpack_require__(74); +let GlobalConfigModule = class GlobalConfigModule { +}; +exports.GlobalConfigModule = GlobalConfigModule; +exports.GlobalConfigModule = GlobalConfigModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([config_entity_1.ConfigEntity, chatLog_entity_1.ChatLogEntity])], + providers: [globalConfig_service_1.GlobalConfigService], + controllers: [globalConfig_controller_1.GlobalConfigController], + exports: [globalConfig_service_1.GlobalConfigService], + }) +], GlobalConfigModule); + + +/***/ }), +/* 205 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GlobalConfigController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const queryConfig_dto_1 = __webpack_require__(206); +const setConfig_dto_1 = __webpack_require__(207); +const globalConfig_service_1 = __webpack_require__(74); +let GlobalConfigController = class GlobalConfigController { + globalConfigService; + constructor(globalConfigService) { + this.globalConfigService = globalConfigService; + } + queryAllConfig(req) { + return this.globalConfigService.queryAllConfig(req); + } + queryFrontConfig(query, req) { + return this.globalConfigService.queryFrontConfig(query, req); + } + queryConfig(body, req) { + return this.globalConfigService.queryConfig(body, req); + } + setConfig(body) { + return this.globalConfigService.setConfig(body); + } + queryNotice() { + return this.globalConfigService.queryNotice(); + } +}; +exports.GlobalConfigController = GlobalConfigController; +__decorate([ + (0, swagger_1.ApiOperation)({ summary: '查询所有配置' }), + (0, common_1.Get)('queryAll'), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _b : Object]), + __metadata("design:returntype", void 0) +], GlobalConfigController.prototype, "queryAllConfig", null); +__decorate([ + (0, swagger_1.ApiOperation)({ summary: '查询前端网站的所有配置' }), + (0, common_1.Get)('queryFront'), + __param(0, (0, common_1.Query)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", void 0) +], GlobalConfigController.prototype, "queryFrontConfig", null); +__decorate([ + (0, swagger_1.ApiOperation)({ summary: '查询所有配置' }), + (0, common_1.Post)('query'), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof queryConfig_dto_1.QueryConfigDto !== "undefined" && queryConfig_dto_1.QueryConfigDto) === "function" ? _d : Object, typeof (_e = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _e : Object]), + __metadata("design:returntype", void 0) +], GlobalConfigController.prototype, "queryConfig", null); +__decorate([ + (0, swagger_1.ApiOperation)({ summary: '设置配置信息' }), + (0, common_1.Post)('set'), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof setConfig_dto_1.SetConfigDto !== "undefined" && setConfig_dto_1.SetConfigDto) === "function" ? _f : Object]), + __metadata("design:returntype", void 0) +], GlobalConfigController.prototype, "setConfig", null); +__decorate([ + (0, swagger_1.ApiOperation)({ summary: '用户端查询公告信息' }), + (0, common_1.Get)('notice'), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", void 0) +], GlobalConfigController.prototype, "queryNotice", null); +exports.GlobalConfigController = GlobalConfigController = __decorate([ + (0, swagger_1.ApiTags)('config'), + (0, common_1.Controller)('config'), + __metadata("design:paramtypes", [typeof (_a = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _a : Object]) +], GlobalConfigController); + + +/***/ }), +/* 206 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryConfigDto = void 0; +const class_validator_1 = __webpack_require__(110); +const class_transformer_1 = __webpack_require__(170); +const swagger_1 = __webpack_require__(14); +class QueryConfigDto { + keys; +} +exports.QueryConfigDto = QueryConfigDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: ['siteName', 'qqNumber'], + description: '想要查询的配置key', + }), + (0, class_validator_1.IsArray)(), + (0, class_validator_1.ArrayNotEmpty)(), + (0, class_transformer_1.Type)(() => String), + __metadata("design:type", Array) +], QueryConfigDto.prototype, "keys", void 0); + + +/***/ }), +/* 207 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SetConfigDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_transformer_1 = __webpack_require__(170); +const class_validator_1 = __webpack_require__(110); +class SetConfigDto { + settings; +} +exports.SetConfigDto = SetConfigDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: [{ configKey: 'siteName', configVal: 'AIWeb' }], + description: '设置配置信息', + }), + (0, class_validator_1.IsArray)(), + (0, class_validator_1.ArrayNotEmpty)(), + (0, class_validator_1.ValidateNested)({ each: true }), + (0, class_transformer_1.Type)(() => Object), + __metadata("design:type", Array) +], SetConfigDto.prototype, "settings", void 0); + + +/***/ }), +/* 208 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ModelsModule = void 0; +const common_1 = __webpack_require__(2); +const models_controller_1 = __webpack_require__(209); +const models_service_1 = __webpack_require__(76); +const typeorm_1 = __webpack_require__(33); +const models_entity_1 = __webpack_require__(78); +let ModelsModule = class ModelsModule { +}; +exports.ModelsModule = ModelsModule; +exports.ModelsModule = ModelsModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([models_entity_1.ModelsEntity])], + controllers: [models_controller_1.ModelsController], + providers: [models_service_1.ModelsService], + exports: [models_service_1.ModelsService], + }) +], ModelsModule); + + +/***/ }), +/* 209 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ModelsController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const queryModel_dto_1 = __webpack_require__(210); +const queryModelType_dto_1 = __webpack_require__(211); +const setModel_dto_1 = __webpack_require__(212); +const setModelType_dto_1 = __webpack_require__(213); +const models_service_1 = __webpack_require__(76); +let ModelsController = class ModelsController { + modelsService; + constructor(modelsService) { + this.modelsService = modelsService; + } + setModel(params) { + return this.modelsService.setModel(params); + } + delModel(params) { + return this.modelsService.delModel(params); + } + queryModels(req, params) { + return this.modelsService.queryModels(req, params); + } + modelsList() { + return this.modelsService.modelsList(); + } + baseConfig() { + return this.modelsService.getBaseConfig(); + } + queryModelType(params) { + return this.modelsService.queryModelType(params); + } + setModelType(params) { + return this.modelsService.setModelType(params); + } + delModelType(params) { + return this.modelsService.delModelType(params); + } +}; +exports.ModelsController = ModelsController; +__decorate([ + (0, common_1.Post)('setModel'), + (0, swagger_1.ApiOperation)({ summary: '设置模型' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof setModel_dto_1.SetModelDto !== "undefined" && setModel_dto_1.SetModelDto) === "function" ? _b : Object]), + __metadata("design:returntype", void 0) +], ModelsController.prototype, "setModel", null); +__decorate([ + (0, common_1.Post)('delModel'), + (0, swagger_1.ApiOperation)({ summary: '删除模型' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], ModelsController.prototype, "delModel", null); +__decorate([ + (0, common_1.Get)('query'), + (0, swagger_1.ApiOperation)({ summary: '管理端查询模型列表' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_c = typeof Request !== "undefined" && Request) === "function" ? _c : Object, typeof (_d = typeof queryModel_dto_1.QueryModelDto !== "undefined" && queryModel_dto_1.QueryModelDto) === "function" ? _d : Object]), + __metadata("design:returntype", void 0) +], ModelsController.prototype, "queryModels", null); +__decorate([ + (0, common_1.Get)('list'), + (0, swagger_1.ApiOperation)({ summary: '客户端查询当前所有可以使用的模型' }), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", void 0) +], ModelsController.prototype, "modelsList", null); +__decorate([ + (0, common_1.Get)('baseConfig'), + (0, swagger_1.ApiOperation)({ summary: '客户端查询当前已经配置模型的基础配置' }), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", void 0) +], ModelsController.prototype, "baseConfig", null); +__decorate([ + (0, common_1.Get)('queryModelType'), + (0, swagger_1.ApiOperation)({ summary: '查询模型类型' }), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof queryModelType_dto_1.QueryModelTypeDto !== "undefined" && queryModelType_dto_1.QueryModelTypeDto) === "function" ? _e : Object]), + __metadata("design:returntype", void 0) +], ModelsController.prototype, "queryModelType", null); +__decorate([ + (0, common_1.Post)('setModelType'), + (0, swagger_1.ApiOperation)({ summary: '创建修改模型类型' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof setModelType_dto_1.SetModelTypeDto !== "undefined" && setModelType_dto_1.SetModelTypeDto) === "function" ? _f : Object]), + __metadata("design:returntype", void 0) +], ModelsController.prototype, "setModelType", null); +__decorate([ + (0, common_1.Post)('delModelType'), + (0, swagger_1.ApiOperation)({ summary: '删除模型类型' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], ModelsController.prototype, "delModelType", null); +exports.ModelsController = ModelsController = __decorate([ + (0, swagger_1.ApiTags)('models'), + (0, common_1.Controller)('models'), + __metadata("design:paramtypes", [typeof (_a = typeof models_service_1.ModelsService !== "undefined" && models_service_1.ModelsService) === "function" ? _a : Object]) +], ModelsController); + + +/***/ }), +/* 210 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryModelDto = void 0; +const swagger_1 = __webpack_require__(14); +class QueryModelDto { + page; + size; + keyType; + key; + status; + model; +} +exports.QueryModelDto = QueryModelDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '页码', required: true }), + __metadata("design:type", Number) +], QueryModelDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '数量', required: true }), + __metadata("design:type", Number) +], QueryModelDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '模型类型', required: true }), + __metadata("design:type", Number) +], QueryModelDto.prototype, "keyType", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'dsadgadaorjoqm', + description: '模型key', + required: true, + }), + __metadata("design:type", String) +], QueryModelDto.prototype, "key", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否开启当前key对应的模型', + required: true, + }), + __metadata("design:type", Boolean) +], QueryModelDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'gpt-3.5', + description: '当前key绑定的模型是多少 需要调用的模型', + required: true, + }), + __metadata("design:type", String) +], QueryModelDto.prototype, "model", void 0); + + +/***/ }), +/* 211 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryModelTypeDto = void 0; +const swagger_1 = __webpack_require__(14); +class QueryModelTypeDto { + page; + size; + keyType; + status; +} +exports.QueryModelTypeDto = QueryModelTypeDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '页码', required: true }), + __metadata("design:type", Number) +], QueryModelTypeDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '数量', required: true }), + __metadata("design:type", Number) +], QueryModelTypeDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '模型类型', required: true }), + __metadata("design:type", Number) +], QueryModelTypeDto.prototype, "keyType", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否开启当前key对应的模型', + required: true, + }), + __metadata("design:type", Boolean) +], QueryModelTypeDto.prototype, "status", void 0); + + +/***/ }), +/* 212 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SetModelDto = void 0; +const swagger_1 = __webpack_require__(14); +class SetModelDto { + id; + keyType; + modelName; + key; + status; + model; + modelOrder; + modelAvatar; + maxModelTokens; + proxyUrl; + timeout; + keyStatus; + deductType; + deduct; + maxRounds; + isDraw; + isFileUpload; + isTokenBased; + tokenFeeRatio; +} +exports.SetModelDto = SetModelDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: 'key id', required: false }), + __metadata("design:type", Number) +], SetModelDto.prototype, "id", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '模型类型', required: true }), + __metadata("design:type", Number) +], SetModelDto.prototype, "keyType", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: '默认', description: '模型中文名称', required: true }), + __metadata("design:type", String) +], SetModelDto.prototype, "modelName", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'sk-', description: '模型key', required: false }), + __metadata("design:type", Object) +], SetModelDto.prototype, "key", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否开启当前key对应的模型', + required: true, + }), + __metadata("design:type", Boolean) +], SetModelDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'gpt-3.5', + description: '当前key绑定的模型是多少 需要调用的模型', + required: true, + }), + __metadata("design:type", String) +], SetModelDto.prototype, "model", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '模型排序' }), + __metadata("design:type", Number) +], SetModelDto.prototype, "modelOrder", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'https://***.png', required: false }), + __metadata("design:type", String) +], SetModelDto.prototype, "modelAvatar", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 4096, + description: '模型支持的最大TOken数量', + required: false, + }), + __metadata("design:type", Number) +], SetModelDto.prototype, "maxModelTokens", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '模型的代理地址', + required: false, + }), + __metadata("design:type", String) +], SetModelDto.prototype, "proxyUrl", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 300, description: '模型超时时间', required: false }), + __metadata("design:type", Number) +], SetModelDto.prototype, "timeout", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: true, description: 'key状态', required: false }), + __metadata("design:type", Number) +], SetModelDto.prototype, "keyStatus", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '扣费类型 1: 普通 2: 高级余额', + required: false, + }), + __metadata("design:type", Number) +], SetModelDto.prototype, "deductType", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: true, description: '单次扣除金额', required: false }), + __metadata("design:type", Number) +], SetModelDto.prototype, "deduct", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '最大上下文轮次', + required: false, + }), + __metadata("design:type", Number) +], SetModelDto.prototype, "maxRounds", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否设置为绘画Key', + required: false, + }), + __metadata("design:type", Boolean) +], SetModelDto.prototype, "isDraw", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否支持文件上传', + required: false, + }), + __metadata("design:type", Number) +], SetModelDto.prototype, "isFileUpload", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否使用token计费', + required: false, + }), + __metadata("design:type", Boolean) +], SetModelDto.prototype, "isTokenBased", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: true, description: 'token计费比例', required: false }), + __metadata("design:type", Number) +], SetModelDto.prototype, "tokenFeeRatio", void 0); + + +/***/ }), +/* 213 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SetModelTypeDto = void 0; +const swagger_1 = __webpack_require__(14); +class SetModelTypeDto { + id; + keyType; + modelName; + status; + model; + timeout; + deductType; + isFileUpload; + deduct; + order; + maxTokens; + maxResponseTokens; + maxRounds; + isDallE3; + isUseTool; +} +exports.SetModelTypeDto = SetModelTypeDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: 'model id', required: false }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "id", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '模型类型', required: true }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "keyType", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: '普通模型', + description: '模型中文名称', + required: true, + }), + __metadata("design:type", String) +], SetModelTypeDto.prototype, "modelName", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否开启当前key对应的模型', + required: true, + }), + __metadata("design:type", Boolean) +], SetModelTypeDto.prototype, "status", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'gpt-3.5', + description: '当前key绑定的模型是多少 需要调用的模型', + required: true, + }), + __metadata("design:type", String) +], SetModelTypeDto.prototype, "model", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 300, description: '模型超时时间', required: false }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "timeout", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '扣费类型 1: 普通 2: 高级余额', + required: false, + }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "deductType", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '文件上传类型 0 : 不使用 1: ALL类型 2: 4V类型', + required: false, + }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "isFileUpload", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: true, description: '单次扣除金额', required: false }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "deduct", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '排序id 越大越靠前', + default: 100, + }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "order", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 4000, + description: '模型允许用户使用的最大token设置过高意味着单次的上下文会很高控制模型上下文控制使用token数量', + required: true, + }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "maxTokens", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 1000, + description: '模型支持的最大回复TOken数量', + required: true, + }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "maxResponseTokens", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '最大上下文轮次', + required: false, + }), + __metadata("design:type", Number) +], SetModelTypeDto.prototype, "maxRounds", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否设置为Dall-E3绘画Key', + required: false, + }), + __metadata("design:type", Boolean) +], SetModelTypeDto.prototype, "isDallE3", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ + example: true, + description: '是否设置为工具key', + required: false, + }), + __metadata("design:type", Boolean) +], SetModelTypeDto.prototype, "isUseTool", void 0); + + +/***/ }), +/* 214 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OfficialModule = void 0; +const common_1 = __webpack_require__(2); +const official_controller_1 = __webpack_require__(215); +const official_service_1 = __webpack_require__(218); +let OfficialModule = class OfficialModule { +}; +exports.OfficialModule = OfficialModule; +exports.OfficialModule = OfficialModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + controllers: [official_controller_1.OfficialController], + providers: [official_service_1.OfficialService], + exports: [official_service_1.OfficialService], + }) +], OfficialModule); + + +/***/ }), +/* 215 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OfficialController = void 0; +const jwtAuth_guard_1 = __webpack_require__(87); +const superAuth_guard_1 = __webpack_require__(103); +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const createMenu_dto_1 = __webpack_require__(216); +const getQrCode_dto_1 = __webpack_require__(217); +const official_service_1 = __webpack_require__(218); +let OfficialController = class OfficialController { + officialService; + constructor(officialService) { + this.officialService = officialService; + } + async notify(req, query, body) { + common_1.Logger.debug('GET通知 - ' + JSON.stringify(query), 'OfficialController'); + const result = await this.officialService.verify(query.signature, query.nonce, query.timestamp); + return result ? query.echostr : ''; + } + async notifyPost(req, query, xmlData, res) { + common_1.Logger.debug(`收到POST通知,完整请求体: ${JSON.stringify(xmlData)}`, 'OfficialController'); + if (!xmlData || !xmlData.xml) { + common_1.Logger.warn('xmlData结构异常,缺少xml字段', 'OfficialController'); + return res.status(200).send(''); + } + let xmlObject = xmlData.xml; + if (Array.isArray(xmlObject)) { + common_1.Logger.debug('XML解析为数组,取第一个元素', 'OfficialController'); + xmlObject = xmlObject[0]; + } + else if (xmlObject.xml && Array.isArray(xmlObject.xml)) { + common_1.Logger.debug('XML存在嵌套结构,使用内部xml数组的第一个元素', 'OfficialController'); + xmlObject = xmlObject.xml[0]; + } + common_1.Logger.debug(`标准化后的XML对象: ${JSON.stringify(xmlObject)}`, 'OfficialController'); + const getXmlValue = field => { + if (!xmlObject[field]) + return null; + return Array.isArray(xmlObject[field]) ? xmlObject[field][0] : xmlObject[field]; + }; + const msgType = getXmlValue('MsgType') || getXmlValue('msgtype'); + const event = getXmlValue('Event') || getXmlValue('event'); + const eventKey = getXmlValue('EventKey') || getXmlValue('eventkey'); + const content = getXmlValue('Content') || getXmlValue('content'); + const fromUserName = getXmlValue('FromUserName') || getXmlValue('fromusername'); + common_1.Logger.debug(`提取的字段 - MsgType: ${msgType}, Event: ${event}, EventKey: ${eventKey}`, 'OfficialController'); + if (msgType === 'event') { + common_1.Logger.log(`接收到事件类型消息: ${event}`, 'OfficialController'); + if (event === 'VIEW' || event === 'CLICK') { + return res.status(200).send(''); + } + if (event === 'SCAN') { + common_1.Logger.log(`接收到扫码事件, SceneStr: ${eventKey}`, 'OfficialController'); + const sceneStr = eventKey; + if (sceneStr.includes('/')) { + this.officialService.scanBindWx(fromUserName, sceneStr); + const xmlMsg = await this.officialService.genXmlMsgByConfig(xmlObject, 'officialBindAccountText'); + return res.status(200).send(xmlMsg); + } + if (sceneStr.includes('#')) { + const result = await this.officialService.scanOldWechat(fromUserName, sceneStr); + let configKey; + if (result === true) { + configKey = 'officialOldAccountSuccessText'; + } + else if (result === 'not_found') { + configKey = 'officialOldAccountNotFoundText'; + } + else { + configKey = 'officialOldAccountFailText'; + } + const xmlMsg = await this.officialService.genXmlMsgByConfig(xmlObject, configKey); + return res.status(200).send(xmlMsg); + } + this.officialService.scan(fromUserName, sceneStr); + const xmlMsg = await this.officialService.genXmlMsgByConfig(xmlObject, 'officialScanLoginText'); + return res.status(200).send(xmlMsg); + } + if (event === 'subscribe') { + common_1.Logger.log(`接收到订阅事件, EventKey: ${eventKey}`, 'OfficialController'); + const sceneStr = eventKey ? eventKey.split('qrscene_')[1] : null; + common_1.Logger.debug(`处理的sceneStr: ${sceneStr}`, 'OfficialController'); + if (!sceneStr) { + const xmlMsg = await this.officialService.genXmlMsgByConfig(xmlObject, 'officialSubscribeText'); + return res.status(200).send(xmlMsg); + } + if (sceneStr.includes('/')) { + this.officialService.scanBindWx(fromUserName, sceneStr); + const xmlMsg = await this.officialService.genXmlMsgByConfig(xmlObject, 'officialBindAccountText'); + return res.status(200).send(xmlMsg); + } + if (sceneStr.includes('#')) { + common_1.Logger.log(`接收到旧账号迁移事件, SceneStr: ${sceneStr}`, 'OfficialController'); + const result = await this.officialService.scanOldWechat(fromUserName, sceneStr); + let configKey; + if (result === true) { + configKey = 'officialOldAccountSuccessText'; + } + else if (result === 'not_found') { + configKey = 'officialOldAccountNotFoundText'; + } + else { + configKey = 'officialOldAccountFailText'; + } + const xmlMsg = await this.officialService.genXmlMsgByConfig(xmlObject, configKey); + return res.status(200).send(xmlMsg); + } + this.officialService.scan(fromUserName, sceneStr); + const xmlMsg = await this.officialService.genXmlMsgByConfig(xmlObject, 'officialSubscribeText'); + return res.status(200).send(xmlMsg); + } + if (event === 'unsubscribe') { + common_1.Logger.log(`接收到取消订阅事件, 用户: ${fromUserName}`, 'OfficialController'); + return res.status(200).send(''); + } + } + if (msgType === 'text') { + common_1.Logger.log(`接收到文本消息: ${content && content.substring(0, 20)}${content && content.length > 20 ? '...' : ''}`, 'OfficialController'); + const xmlMsg = await this.officialService.genXmlMsgByConfig(xmlObject, 'officialAutoReplyText'); + return res.status(200).send(xmlMsg); + } + common_1.Logger.debug(`未识别的消息类型: ${msgType}, 返回默认响应`, 'OfficialController'); + return 'success'; + } + async getQRSceneStr() { + return this.officialService.getQRSceneStr(); + } + async getQRSceneStrByBind(req) { + return this.officialService.getQRSceneStrByBind(req); + } + async getQRSceneStrByOldWechat(req) { + common_1.Logger.log(`获取旧账号迁移二维码sceneStr - 用户ID: ${req.user.id}`, 'OfficialController'); + const sceneStr = await this.officialService.getQRSceneStrByOldWechat(req); + common_1.Logger.log(`生成的sceneStr: ${sceneStr}`, 'OfficialController'); + return sceneStr; + } + async getQRCode(query) { + common_1.Logger.log(`获取普通登录二维码 - sceneStr: ${query.sceneStr}`, 'OfficialController'); + if (process.env.ISDEV === 'true') { + common_1.Logger.log('开发环境下,返回空二维码', 'OfficialController'); + return ''; + } + try { + const ticket = await this.officialService.getQRCodeTicket(query.sceneStr); + common_1.Logger.log(`获取普通登录二维码ticket成功: ${ticket.substring(0, 20)}...`, 'OfficialController'); + const Url = (0, utils_1.formatUrl)(process.env.weChatMpUrl || 'https://mp.weixin.qq.com'); + const qrCodeUrl = `${Url}/cgi-bin/showqrcode?ticket=${encodeURIComponent(ticket)}`; + common_1.Logger.log(`生成普通登录二维码URL: ${qrCodeUrl}`, 'OfficialController'); + return qrCodeUrl; + } + catch (error) { + common_1.Logger.error(`获取普通登录二维码失败: ${error.message}`, 'OfficialController'); + throw error; + } + } + async loginBySceneStr(req, body) { + return this.officialService.loginBySceneStr(req, body); + } + async bindWxBySceneStr(req, body) { + return this.officialService.bindWxBySceneStr(req, body.sceneStr); + } + async bindWxByOldWechat(req, body) { + return this.officialService.bindWxByOldWechat(req, body.sceneStr); + } + async getRedirectUrl(body) { + return this.officialService.getRedirectUrl(body.url); + } + async getJsapiTicket(body) { + return this.officialService.getJsapiTicket(body.url); + } + async loginByCode(req, body) { + return this.officialService.loginByCode(req, body.code); + } + async createMenu(menuData) { + common_1.Logger.log('创建自定义菜单', 'OfficialController'); + return this.officialService.createMenu(menuData); + } + async getMenu() { + common_1.Logger.log('获取自定义菜单', 'OfficialController'); + return this.officialService.getMenu(); + } + async deleteMenu() { + common_1.Logger.log('删除自定义菜单', 'OfficialController'); + return this.officialService.deleteMenu(); + } + async getOldQRCode(query) { + common_1.Logger.log(`获取旧公众号二维码 - sceneStr: ${query.sceneStr}`, 'OfficialController'); + if (process.env.ISDEV === 'true') { + common_1.Logger.log('开发环境下,返回空二维码', 'OfficialController'); + return { success: true, data: '' }; + } + try { + const ticket = await this.officialService.getOldQRCodeTicket(query.sceneStr); + const oldMpUrl = process.env.oldWeChatMpUrl; + const defaultMpUrl = process.env.weChatMpUrl || 'https://mp.weixin.qq.com'; + const Url = (0, utils_1.formatUrl)(oldMpUrl || defaultMpUrl); + common_1.Logger.log(`使用MP URL: ${Url} (oldWeChatMpUrl=${oldMpUrl}, defaultMpUrl=${defaultMpUrl})`, 'OfficialController'); + const qrCodeUrl = `${Url}/cgi-bin/showqrcode?ticket=${encodeURIComponent(ticket)}`; + common_1.Logger.log(`生成的二维码URL: ${qrCodeUrl}`, 'OfficialController'); + return qrCodeUrl; + } + catch (error) { + common_1.Logger.error(`获取旧公众号二维码失败: ${error.message}`, 'OfficialController'); + throw error; + } + } +}; +exports.OfficialController = OfficialController; +__decorate([ + (0, common_1.Get)('notify'), + (0, swagger_1.ApiOperation)({ summary: '公众号通知接口GET' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __param(2, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object, Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "notify", null); +__decorate([ + (0, common_1.Post)('notify'), + (0, swagger_1.ApiOperation)({ summary: '公众号通知接口POST' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __param(2, (0, common_1.Body)()), + __param(3, (0, common_1.Res)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object, Object, Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "notifyPost", null); +__decorate([ + (0, common_1.Post)('getQRSceneStr'), + (0, swagger_1.ApiOperation)({ summary: '获取登录二维码sceneStr' }), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "getQRSceneStr", null); +__decorate([ + (0, common_1.Post)('getQRSceneStrByBind'), + (0, swagger_1.ApiOperation)({ summary: '获取绑定二维码的sceneStr' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _b : Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "getQRSceneStrByBind", null); +__decorate([ + (0, common_1.Post)('getQRSceneStrByOldWechat'), + (0, swagger_1.ApiOperation)({ summary: '获取旧账号迁移二维码的sceneStr' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "getQRSceneStrByOldWechat", null); +__decorate([ + (0, common_1.Get)('getQRCode'), + (0, swagger_1.ApiOperation)({ summary: '获取二维码' }), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof getQrCode_dto_1.GetQrCodeDto !== "undefined" && getQrCode_dto_1.GetQrCodeDto) === "function" ? _d : Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "getQRCode", null); +__decorate([ + (0, common_1.Post)('loginBySceneStr'), + (0, swagger_1.ApiOperation)({ summary: '扫码登录轮询查询' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _e : Object, Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "loginBySceneStr", null); +__decorate([ + (0, common_1.Post)('bindWxBySceneStr'), + (0, swagger_1.ApiOperation)({ summary: '扫码绑定轮询查询' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _f : Object, typeof (_g = typeof getQrCode_dto_1.GetQrCodeDto !== "undefined" && getQrCode_dto_1.GetQrCodeDto) === "function" ? _g : Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "bindWxBySceneStr", null); +__decorate([ + (0, common_1.Post)('bindWxByOldWechat'), + (0, swagger_1.ApiOperation)({ summary: '绑定旧账号微信轮询查询' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_h = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _h : Object, typeof (_j = typeof getQrCode_dto_1.GetQrCodeDto !== "undefined" && getQrCode_dto_1.GetQrCodeDto) === "function" ? _j : Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "bindWxByOldWechat", null); +__decorate([ + (0, common_1.Post)('getRedirectUrl'), + (0, swagger_1.ApiOperation)({ summary: '获取登录跳转地址' }), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "getRedirectUrl", null); +__decorate([ + (0, common_1.Post)('getJsapiTicket'), + (0, swagger_1.ApiOperation)({ summary: '获取注册配置' }), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "getJsapiTicket", null); +__decorate([ + (0, common_1.Post)('loginByCode'), + (0, swagger_1.ApiOperation)({ summary: '公众号静默登录' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_k = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _k : Object, Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "loginByCode", null); +__decorate([ + (0, common_1.Post)('menu'), + (0, swagger_1.ApiOperation)({ summary: '创建自定义菜单' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_l = typeof createMenu_dto_1.CreateMenuDto !== "undefined" && createMenu_dto_1.CreateMenuDto) === "function" ? _l : Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "createMenu", null); +__decorate([ + (0, common_1.Get)('menu'), + (0, swagger_1.ApiOperation)({ summary: '获取自定义菜单' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "getMenu", null); +__decorate([ + (0, common_1.Delete)('menu'), + (0, swagger_1.ApiOperation)({ summary: '删除自定义菜单' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "deleteMenu", null); +__decorate([ + (0, common_1.Get)('getOldQRCode'), + (0, swagger_1.ApiOperation)({ summary: '获取旧公众号二维码(用于账号迁移)' }), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_m = typeof getQrCode_dto_1.GetQrCodeDto !== "undefined" && getQrCode_dto_1.GetQrCodeDto) === "function" ? _m : Object]), + __metadata("design:returntype", Promise) +], OfficialController.prototype, "getOldQRCode", null); +exports.OfficialController = OfficialController = __decorate([ + (0, swagger_1.ApiTags)('official'), + (0, common_1.Controller)('official'), + __metadata("design:paramtypes", [typeof (_a = typeof official_service_1.OfficialService !== "undefined" && official_service_1.OfficialService) === "function" ? _a : Object]) +], OfficialController); + + +/***/ }), +/* 216 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.CreateMenuDto = void 0; +const swagger_1 = __webpack_require__(14); +const class_transformer_1 = __webpack_require__(170); +const class_validator_1 = __webpack_require__(110); +class ButtonBase { + name; +} +__decorate([ + (0, swagger_1.ApiProperty)({ description: '菜单标题,不超过16个字节,子菜单不超过60个字节' }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], ButtonBase.prototype, "name", void 0); +class SubButton extends ButtonBase { + type; + key; + url; + media_id; + appid; + pagepath; + article_id; +} +__decorate([ + (0, swagger_1.ApiProperty)({ description: '菜单的响应动作类型', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], SubButton.prototype, "type", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '菜单KEY值,用于消息接口推送,不超过128字节', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], SubButton.prototype, "key", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '网页链接,用户点击菜单可打开链接,不超过1024字节', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], SubButton.prototype, "url", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '调用新增永久素材接口返回的合法media_id', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], SubButton.prototype, "media_id", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '小程序的appid(仅认证公众号可配置)', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], SubButton.prototype, "appid", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '小程序的页面路径', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], SubButton.prototype, "pagepath", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '发布后获得的合法article_id', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], SubButton.prototype, "article_id", void 0); +class Button extends ButtonBase { + type; + key; + url; + sub_button; + media_id; + appid; + pagepath; + article_id; +} +__decorate([ + (0, swagger_1.ApiProperty)({ description: '菜单的响应动作类型', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], Button.prototype, "type", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '菜单KEY值,用于消息接口推送,不超过128字节', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], Button.prototype, "key", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '网页链接,用户点击菜单可打开链接,不超过1024字节', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], Button.prototype, "url", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '二级菜单数组,个数应为1~5个', required: false }), + (0, class_validator_1.IsArray)(), + (0, class_validator_1.ValidateNested)({ each: true }), + (0, class_transformer_1.Type)(() => SubButton), + __metadata("design:type", Array) +], Button.prototype, "sub_button", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '调用新增永久素材接口返回的合法media_id', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], Button.prototype, "media_id", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '小程序的appid(仅认证公众号可配置)', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], Button.prototype, "appid", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '小程序的页面路径', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], Button.prototype, "pagepath", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ description: '发布后获得的合法article_id', required: false }), + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], Button.prototype, "article_id", void 0); +class CreateMenuDto { + button; +} +exports.CreateMenuDto = CreateMenuDto; +__decorate([ + (0, swagger_1.ApiProperty)({ description: '一级菜单数组,个数应为1~3个' }), + (0, class_validator_1.IsArray)(), + (0, class_validator_1.ValidateNested)({ each: true }), + (0, class_transformer_1.Type)(() => Button), + __metadata("design:type", Array) +], CreateMenuDto.prototype, "button", void 0); + + +/***/ }), +/* 217 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.GetQrCodeDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class GetQrCodeDto { + sceneStr; +} +exports.GetQrCodeDto = GetQrCodeDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'dasdasg2441lk1o24bk', + description: '1-64位的字符参数', + required: true, + }), + (0, class_validator_1.IsDefined)({ message: 'sceneStr是必传参数' }), + __metadata("design:type", String) +], GetQrCodeDto.prototype, "sceneStr", void 0); + + +/***/ }), +/* 218 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var _a, _b, _c, _d, _e; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OfficialService = void 0; +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const axios_1 = __webpack_require__(39); +const crypto = __webpack_require__(16); +const autoReply_service_1 = __webpack_require__(135); +const chat_service_1 = __webpack_require__(168); +const auth_service_1 = __webpack_require__(90); +const globalConfig_service_1 = __webpack_require__(74); +const user_service_1 = __webpack_require__(97); +let OfficialService = class OfficialService { + autoReplyService; + userService; + authService; + globalConfigService; + chatgptService; + constructor(autoReplyService, userService, authService, globalConfigService, chatgptService) { + this.autoReplyService = autoReplyService; + this.userService = userService; + this.authService = authService; + this.globalConfigService = globalConfigService; + this.chatgptService = chatgptService; + } + sceneStrMap = {}; + scanedSceneStrMap = {}; + async onModuleInit() { + await this.globalConfigService.getWechatAccessToken(true); + await this.globalConfigService.getOldWechatAccessToken(true); + } + async getQRSceneStr() { + const sceneStr = (0, utils_1.createRandomNonceStr)(32); + this.sceneStrMap[sceneStr] = true; + return sceneStr; + } + async getQRSceneStrByBind(req) { + const { id } = req.user; + const sceneStr = `${(0, utils_1.createRandomNonceStr)(32)}/${id}`; + this.sceneStrMap[sceneStr] = true; + return sceneStr; + } + async getQRCodeTicket(sceneStr) { + common_1.Logger.log(`开始获取普通二维码ticket,sceneStr: ${sceneStr}`, 'OfficialService'); + return this.fetchQRCodeTicket(sceneStr); + } + async getRedirectUrl(url) { + const appId = await this.globalConfigService.getConfigs(['wechatOfficialAppId']); + const Url = (0, utils_1.formatUrl)(process.env.weChatOpenUrl || 'https://open.weixin.qq.com'); + const res = `${Url}/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURIComponent(url)}&response_type=code&scope=snsapi_userinfo&state=weChatLogin#wechat_redirect`; + common_1.Logger.debug(`生成微信授权跳转URL: ${res}`); + return res; + } + async getJsapiTicket(url) { + const nonceStr = (0, utils_1.createRandomNonceStr)(32); + const timestamp = (Date.now() / 1000).toFixed(0); + const jsapiTicket = await this.globalConfigService.getConfigs(['wechatJsapiTicket']); + const appId = await this.globalConfigService.getConfigs(['wechatOfficialAppId']); + const str = `jsapi_ticket=${jsapiTicket}&noncestr=${nonceStr}×tamp=${timestamp}&url=${url}`; + const signature = this.sha1(str); + common_1.Logger.debug(`生成JSAPI签名,URL: ${url}`); + return { appId, nonceStr, timestamp, signature }; + } + async fetchQRCodeTicket(sceneStr) { + common_1.Logger.log(`获取普通二维码ticket - sceneStr: ${sceneStr}`, 'OfficialService'); + const accessToken = await this.globalConfigService.getConfigs(['wechatAccessToken']); + common_1.Logger.log(`获取普通二维码的access_token: ${accessToken.substring(0, 10)}...`, 'OfficialService'); + const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); + const params = { + action_name: 'QR_STR_SCENE', + action_info: { scene: { scene_str: sceneStr } }, + }; + common_1.Logger.log(`普通二维码请求参数: ${JSON.stringify(params)}`, 'OfficialService'); + const res = await axios_1.default.post(`${Url}/cgi-bin/qrcode/create?access_token=${accessToken}`, params); + common_1.Logger.log(`普通二维码创建响应: ${JSON.stringify(res.data)}`, 'OfficialService'); + const { data: { errmsg, ticket }, } = res; + if (errmsg) { + common_1.Logger.error(`获取普通二维码ticket失败: ${errmsg}`, 'OfficialService'); + throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST); + } + common_1.Logger.log(`普通二维码ticket获取成功: ${ticket.substring(0, 20)}...`, 'OfficialService'); + return ticket; + } + async loginByCode(req, code) { + const appId = await this.globalConfigService.getConfigs(['wechatOfficialAppId']); + const secret = await this.globalConfigService.getConfigs(['wechatOfficialAppSecret']); + const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); + const res = await axios_1.default.get(`${Url}/sns/oauth2/access_token?appid=${appId}&secret=${secret}&code=${code}&grant_type=authorization_code`); + const { data: { errmsg, openid, access_token }, } = res; + if (errmsg) + throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST); + if (openid) { + let user; + user = await this.userService.getUserOpenId(openid); + if (!user) { + user = await this.userService.getUserFromOpenId(openid); + } + const userInfo = await axios_1.default.get(`${Url}/sns/userinfo?access_token=${access_token}&openid=${openid}&lang=zh_CN`); + await this.userService.updateUserInfo(user.id, userInfo.data); + common_1.Logger.log(`微信授权登录成功 - OpenID: ${openid}, UserID: ${user.id}`, 'OfficialService'); + return this.authService.loginByOpenId(user, req); + } + } + async scan(openID, sceneStr) { + try { + common_1.Logger.debug(`处理扫码事件 - OpenID: ${openID}, SceneStr: ${sceneStr}`, 'OfficialService'); + if (!this.sceneStrMap[sceneStr]) { + common_1.Logger.error(`非法扫码请求 - 未找到的sceneStr: ${sceneStr}`, 'OfficialService'); + throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST); + } + common_1.Logger.debug(`sceneStrMap中存在key [${sceneStr}]`, 'OfficialService'); + const user = await this.userService.getUserFromOpenId(openID, sceneStr); + common_1.Logger.debug(`扫码用户信息 - OpenID: ${openID}, UserID: ${user?.id || '未找到'}`, 'OfficialService'); + this.scanedSceneStrMap[sceneStr] = user.id; + common_1.Logger.debug(`更新scanedSceneStrMap, 设置[${sceneStr}] = ${user.id}`, 'OfficialService'); + common_1.Logger.log(`用户扫码成功 - OpenID: ${openID}, UserID: ${user?.id || '未找到'}, SceneStr: ${sceneStr}`, 'OfficialService'); + } + catch (error) { + common_1.Logger.error(`扫码处理失败 - OpenID: ${openID}, Error: ${error.message}`, 'OfficialService'); + throw new common_1.HttpException('处理扫码事件时发生错误', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } + async loginBySceneStr(req, body) { + const { sceneStr } = body; + common_1.Logger.debug(`轮询扫码登录 - SceneStr: ${sceneStr}`, 'OfficialService'); + common_1.Logger.debug(`当前scanedSceneStrMap状态检查`, 'OfficialService'); + if (!this.sceneStrMap[sceneStr]) { + common_1.Logger.debug(`sceneStr [${sceneStr}] 不存在于sceneStrMap中`, 'OfficialService'); + return; + } + const userId = this.scanedSceneStrMap[sceneStr]; + if (!userId) { + common_1.Logger.debug(`userId不存在于scanedSceneStrMap[${sceneStr}]中`, 'OfficialService'); + return ''; + } + common_1.Logger.debug(`找到匹配的userId: ${userId}`, 'OfficialService'); + const user = await this.userService.getUserById(userId); + common_1.Logger.log(`扫码登录成功 - UserID: ${userId}, SceneStr: ${sceneStr}`, 'OfficialService'); + delete this.scanedSceneStrMap[sceneStr]; + common_1.Logger.debug(`从scanedSceneStrMap中删除 [${sceneStr}]`, 'OfficialService'); + return this.authService.loginByOpenId(user, req); + } + async scanBindWx(openId, sceneStr) { + common_1.Logger.debug(`处理绑定微信扫码 - OpenID: ${openId}, SceneStr: ${sceneStr}`, 'OfficialService'); + if (!this.sceneStrMap[sceneStr]) { + common_1.Logger.error(`非法参数 - sceneStr [${sceneStr}] 不在sceneStrMap中`, 'OfficialService'); + throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST); + } + const userId = sceneStr.split('/')[1]; + common_1.Logger.debug(`解析的UserID: ${userId}`, 'OfficialService'); + const bindRes = await this.userService.bindWx(openId, userId); + this.scanedSceneStrMap[sceneStr] = bindRes; + common_1.Logger.debug(`更新scanedSceneStrMap, 设置[${sceneStr}]`, 'OfficialService'); + common_1.Logger.log(`微信绑定成功 - OpenID: ${openId}, UserID: ${userId}`, 'OfficialService'); + return bindRes; + } + async bindWxBySceneStr(req, sceneStr) { + if (!this.sceneStrMap[sceneStr]) + throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST); + const { id } = req.user; + const res = this.scanedSceneStrMap[sceneStr]; + if (!res) + return ''; + delete this.scanedSceneStrMap[sceneStr]; + common_1.Logger.log(`微信绑定确认 - UserID: ${id}, SceneStr: ${sceneStr}`, 'OfficialService'); + return res; + } + async verify(signature, nonce, timestamp) { + const token = (await this.globalConfigService.getConfigs(['wechatOfficialToken'])) || ''; + return (await this.sha1([token, nonce, timestamp].sort().join(''))) == signature; + } + sha1(data) { + return crypto.createHash('sha1').update(data).digest('hex'); + } + async genXmlMsgByConfig(xmlData, msgKey) { + const msg = await this.globalConfigService.getConfigs([msgKey]); + common_1.Logger.debug(`使用配置消息 [${msgKey}]`, 'OfficialService'); + return this.genXmlMsg(xmlData, msg); + } + async genXmlMsg(xmlData, msg) { + const getXmlValue = field => { + const fieldLower = field.toLowerCase(); + if (xmlData[field] !== undefined) { + return Array.isArray(xmlData[field]) ? xmlData[field][0] : xmlData[field]; + } + if (xmlData[fieldLower] !== undefined) { + return Array.isArray(xmlData[fieldLower]) ? xmlData[fieldLower][0] : xmlData[fieldLower]; + } + return null; + }; + const fromUser = getXmlValue('FromUserName') || getXmlValue('fromusername'); + const toUser = getXmlValue('ToUserName') || getXmlValue('tousername'); + common_1.Logger.debug(`生成XML回复, 发送给: ${fromUser}, 来自: ${toUser}`, 'OfficialService'); + if (!fromUser) { + common_1.Logger.error(`缺少FromUserName字段: ${JSON.stringify(xmlData)}`, 'OfficialService'); + throw new common_1.HttpException('缺少必要的XML字段', common_1.HttpStatus.BAD_REQUEST); + } + if (!toUser) { + common_1.Logger.error(`缺少ToUserName字段: ${JSON.stringify(xmlData)}`, 'OfficialService'); + throw new common_1.HttpException('缺少必要的XML字段', common_1.HttpStatus.BAD_REQUEST); + } + const xmlResponse = ` + + + + ${new Date().getTime()} + + + `; + common_1.Logger.debug(`生成的XML回复已完成`, 'OfficialService'); + return xmlResponse; + } + async createMenu(menuData) { + try { + const accessToken = await this.globalConfigService.getConfigs(['wechatAccessToken']); + const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); + const res = await axios_1.default.post(`${Url}/cgi-bin/menu/create?access_token=${accessToken}`, menuData); + const { data } = res; + common_1.Logger.log(`创建自定义菜单成功`, 'OfficialService'); + return data; + } + catch (error) { + common_1.Logger.error(`创建自定义菜单失败: ${error.message}`, 'OfficialService'); + throw new common_1.HttpException(error.response?.data?.errmsg || '创建自定义菜单失败', common_1.HttpStatus.BAD_REQUEST); + } + } + async getMenu() { + try { + const accessToken = await this.globalConfigService.getConfigs(['wechatAccessToken']); + const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); + const res = await axios_1.default.get(`${Url}/cgi-bin/menu/get?access_token=${accessToken}`); + const { data } = res; + common_1.Logger.log(`查询自定义菜单成功: ${JSON.stringify(data)}`, 'OfficialService'); + common_1.Logger.log(`查询自定义菜单成功`, 'OfficialService'); + return data; + } + catch (error) { + common_1.Logger.error(`查询自定义菜单失败: ${error.message}`, 'OfficialService'); + throw new common_1.HttpException(error.response?.data?.errmsg || '查询自定义菜单失败', common_1.HttpStatus.BAD_REQUEST); + } + } + async deleteMenu() { + try { + const accessToken = await this.globalConfigService.getConfigs(['wechatAccessToken']); + const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); + const res = await axios_1.default.get(`${Url}/cgi-bin/menu/delete?access_token=${accessToken}`); + const { data } = res; + common_1.Logger.log(`删除自定义菜单成功`, 'OfficialService'); + return data; + } + catch (error) { + common_1.Logger.error(`删除自定义菜单失败: ${error.message}`, 'OfficialService'); + throw new common_1.HttpException(error.response?.data?.errmsg || '删除自定义菜单失败', common_1.HttpStatus.BAD_REQUEST); + } + } + async bindWxByOldWechat(req, sceneStr) { + try { + common_1.Logger.log(`开始处理旧账号迁移 - SceneStr: ${sceneStr}`, 'OfficialService'); + if (!this.sceneStrMap[sceneStr]) { + common_1.Logger.log(`非法参数 - sceneStr [${sceneStr}] 不在sceneStrMap中`, 'OfficialService'); + throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST); + } + const { id: currentUserId } = req.user; + common_1.Logger.log(`当前用户ID: ${currentUserId}`, 'OfficialService'); + const openidData = this.scanedSceneStrMap[sceneStr]; + if (!openidData) { + common_1.Logger.log(`未找到关联的旧OpenID数据 - sceneStr: ${sceneStr}`, 'OfficialService'); + return ''; + } + const oldOpenId = openidData.openid; + if (!oldOpenId) { + common_1.Logger.log(`旧OpenID数据格式错误 - 数据: ${JSON.stringify(openidData)}`, 'OfficialService'); + throw new common_1.HttpException('无效的OpenID数据', common_1.HttpStatus.BAD_REQUEST); + } + const oldUser = await this.userService.getUserOpenId(oldOpenId); + if (!oldUser) { + common_1.Logger.log(`未找到使用旧OpenID的用户 - OpenID: ${oldOpenId}`, 'OfficialService'); + return { + success: false, + message: '未找到旧账号,迁移失败', + }; + } + const currentUser = await this.userService.getUserById(currentUserId); + if (!currentUser) { + common_1.Logger.log(`未找到当前用户 - ID: ${currentUserId}`, 'OfficialService'); + throw new common_1.HttpException('当前用户不存在', common_1.HttpStatus.BAD_REQUEST); + } + const currentOpenId = currentUser.openId; + if (!currentOpenId) { + common_1.Logger.log(`当前用户未绑定微信 - ID: ${currentUserId}`, 'OfficialService'); + throw new common_1.HttpException('当前用户未绑定微信', common_1.HttpStatus.BAD_REQUEST); + } + common_1.Logger.log(`找到旧账号信息 - 旧用户ID: ${oldUser.id}, 旧OpenID: ${oldOpenId}`, 'OfficialService'); + common_1.Logger.log(`当前用户信息 - 用户ID: ${currentUserId}, OpenID: ${currentOpenId}`, 'OfficialService'); + const updateOldResult = await this.userService.updateUserOpenId(oldUser.id, currentOpenId); + if (!updateOldResult.status) { + common_1.Logger.log(`更新旧账号OpenID失败: ${updateOldResult.msg}`, 'OfficialService'); + return { + success: false, + message: `更新旧账号时出错: ${updateOldResult.msg}`, + }; + } + common_1.Logger.log(`成功更新旧账号OpenID - 用户ID: ${oldUser.id}, 新OpenID: ${currentOpenId}`, 'OfficialService'); + const updateCurrentResult = await this.userService.updateUserOpenId(currentUserId, null); + if (!updateCurrentResult.status) { + common_1.Logger.log(`清空当前账号OpenID失败: ${updateCurrentResult.msg}`, 'OfficialService'); + common_1.Logger.log(`尝试回滚旧账号OpenID更新`, 'OfficialService'); + const rollbackResult = await this.userService.updateUserOpenId(oldUser.id, oldOpenId); + if (!rollbackResult.status) { + common_1.Logger.log(`回滚失败,旧账号状态可能已损坏: ${rollbackResult.msg}`, 'OfficialService'); + } + return { + success: false, + message: `清空当前账号时出错: ${updateCurrentResult.msg}`, + }; + } + common_1.Logger.log(`成功清空当前账号OpenID - 用户ID: ${currentUserId}`, 'OfficialService'); + delete this.scanedSceneStrMap[sceneStr]; + common_1.Logger.log(`从scanedSceneStrMap中删除 [${sceneStr}]`, 'OfficialService'); + return { + success: true, + message: '账号迁移成功,现在可以使用旧账号登录', + needRelogin: true, + }; + } + catch (error) { + common_1.Logger.log(`旧账号迁移处理失败: ${error.message}`, 'OfficialService'); + throw new common_1.HttpException('处理账号迁移时发生错误', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } + async scanOldWechat(openId, sceneStr) { + common_1.Logger.debug(`处理旧账号微信扫码 - OpenID: ${openId}, SceneStr: ${sceneStr}`, 'OfficialService'); + if (!this.sceneStrMap[sceneStr]) { + common_1.Logger.error(`非法参数 - sceneStr [${sceneStr}] 不在sceneStrMap中`, 'OfficialService'); + throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST); + } + const oldOpenId = openId; + const oldUser = await this.userService.getUserOpenId(oldOpenId); + if (!oldUser) { + common_1.Logger.warn(`未找到使用该OpenID的旧账号 - OpenID: ${oldOpenId}`, 'OfficialService'); + this.scanedSceneStrMap[sceneStr] = { + success: false, + error: 'not_found', + message: '未找到绑定此微信的旧账号', + }; + return 'not_found'; + } + common_1.Logger.debug(`找到使用该OpenID的旧账号 - UserID: ${oldUser.id}`, 'OfficialService'); + this.scanedSceneStrMap[sceneStr] = { + success: true, + openid: oldOpenId, + userId: oldUser.id, + }; + common_1.Logger.log(`旧账号关联成功 - OpenID: ${oldOpenId}, UserID: ${oldUser.id}`, 'OfficialService'); + return true; + } + async getQRSceneStrByOldWechat(req) { + const { id } = req.user; + common_1.Logger.log(`为用户${id}生成旧账号迁移sceneStr`, 'OfficialService'); + const sceneStr = `${(0, utils_1.createRandomNonceStr)(32)}#${id}`; + common_1.Logger.log(`生成的sceneStr: ${sceneStr}`, 'OfficialService'); + this.sceneStrMap[sceneStr] = true; + common_1.Logger.log(`已将sceneStr加入sceneStrMap`, 'OfficialService'); + return sceneStr; + } + async getOldQRCodeTicket(sceneStr) { + common_1.Logger.log(`开始获取旧公众号二维码ticket,sceneStr: ${sceneStr}`, 'OfficialService'); + if (!this.sceneStrMap[sceneStr]) { + common_1.Logger.log(`将sceneStr添加到sceneStrMap: ${sceneStr}`, 'OfficialService'); + this.sceneStrMap[sceneStr] = true; + } + const oldAccessToken = await this.globalConfigService.getConfigs(['oldWechatAccessToken']); + if (!oldAccessToken) { + common_1.Logger.error('无法获取旧公众号访问令牌', 'OfficialService'); + throw new common_1.HttpException('无法获取旧公众号访问令牌', common_1.HttpStatus.BAD_REQUEST); + } + common_1.Logger.log(`成功获取旧公众号access_token: ${oldAccessToken.substring(0, 10)}...`, 'OfficialService'); + const ticket = await this.fetchQRCodeTicketWithToken(sceneStr, oldAccessToken); + common_1.Logger.log(`成功获取旧公众号ticket: ${ticket.substring(0, 15)}...`, 'OfficialService'); + return ticket; + } + async fetchQRCodeTicketWithToken(sceneStr, accessToken) { + try { + const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); + const params = { + action_name: 'QR_STR_SCENE', + action_info: { scene: { scene_str: sceneStr } }, + }; + common_1.Logger.log(`创建二维码请求 - URL: ${Url}/cgi-bin/qrcode/create, token: ${accessToken.substring(0, 10)}...`, 'OfficialService'); + common_1.Logger.log(`请求参数: ${JSON.stringify(params)}`, 'OfficialService'); + const res = await axios_1.default.post(`${Url}/cgi-bin/qrcode/create?access_token=${accessToken}`, params); + common_1.Logger.log(`二维码创建响应: ${JSON.stringify(res.data)}`, 'OfficialService'); + const { data: { errmsg, ticket, errcode }, } = res; + if (errmsg || errcode) { + common_1.Logger.error(`创建二维码失败 - 错误码: ${errcode}, 错误信息: ${errmsg}`, 'OfficialService'); + throw new common_1.HttpException(errmsg || '创建二维码失败', common_1.HttpStatus.BAD_REQUEST); + } + if (!ticket) { + common_1.Logger.error('创建二维码失败 - 未返回ticket', 'OfficialService'); + throw new common_1.HttpException('未获取到二维码ticket', common_1.HttpStatus.BAD_REQUEST); + } + return ticket; + } + catch (error) { + common_1.Logger.error(`创建二维码异常: ${error.message}`, 'OfficialService'); + throw new common_1.HttpException(error.message || '创建二维码失败', common_1.HttpStatus.INTERNAL_SERVER_ERROR); + } + } +}; +exports.OfficialService = OfficialService; +exports.OfficialService = OfficialService = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof autoReply_service_1.AutoReplyService !== "undefined" && autoReply_service_1.AutoReplyService) === "function" ? _a : Object, typeof (_b = typeof user_service_1.UserService !== "undefined" && user_service_1.UserService) === "function" ? _b : Object, typeof (_c = typeof auth_service_1.AuthService !== "undefined" && auth_service_1.AuthService) === "function" ? _c : Object, typeof (_d = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _d : Object, typeof (_e = typeof chat_service_1.ChatService !== "undefined" && chat_service_1.ChatService) === "function" ? _e : Object]) +], OfficialService); + + +/***/ }), +/* 219 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OrderModule = void 0; +const cramiPackage_entity_1 = __webpack_require__(71); +const common_1 = __webpack_require__(2); +const order_controller_1 = __webpack_require__(220); +const order_service_1 = __webpack_require__(221); +const order_entity_1 = __webpack_require__(201); +const typeorm_1 = __webpack_require__(33); +const user_entity_1 = __webpack_require__(83); +let OrderModule = class OrderModule { +}; +exports.OrderModule = OrderModule; +exports.OrderModule = OrderModule = __decorate([ + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([order_entity_1.OrderEntity, cramiPackage_entity_1.CramiPackageEntity, user_entity_1.UserEntity])], + controllers: [order_controller_1.OrderController], + providers: [order_service_1.OrderService], + }) +], OrderModule); + + +/***/ }), +/* 220 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f, _g; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OrderController = void 0; +const superAuth_guard_1 = __webpack_require__(103); +const jwtAuth_guard_1 = __webpack_require__(87); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const order_service_1 = __webpack_require__(221); +const express_1 = __webpack_require__(104); +const buy_dto_1 = __webpack_require__(223); +const queryByOrder_dto_1 = __webpack_require__(224); +const adminAuth_guard_1 = __webpack_require__(86); +const queryAllOrder_dto_1 = __webpack_require__(225); +let OrderController = class OrderController { + orderService; + constructor(orderService) { + this.orderService = orderService; + } + async buy(body, req) { + return this.orderService.buy(body, req); + } + async queryByOrderId(req, query) { + const { id: userId } = req.user; + return this.orderService.queryByOrderId(req, query); + } + async queryAllOrder(query) { + return this.orderService.queryAllOrder(query); + } + async deleteOrder(body) { + return this.orderService.deleteOrder(body); + } + async deleteNotPay() { + return this.orderService.deleteNotPay(); + } +}; +exports.OrderController = OrderController; +__decorate([ + (0, common_1.Post)('buy'), + (0, swagger_1.ApiOperation)({ summary: '购买商品' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof buy_dto_1.BuyDto !== "undefined" && buy_dto_1.BuyDto) === "function" ? _b : Object, typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", Promise) +], OrderController.prototype, "buy", null); +__decorate([ + (0, common_1.Get)('queryByOrderId'), + (0, swagger_1.ApiOperation)({ summary: '查询订单' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _d : Object, typeof (_e = typeof queryByOrder_dto_1.QueryByOrderIdDto !== "undefined" && queryByOrder_dto_1.QueryByOrderIdDto) === "function" ? _e : Object]), + __metadata("design:returntype", Promise) +], OrderController.prototype, "queryByOrderId", null); +__decorate([ + (0, common_1.Get)('queryAll'), + (0, swagger_1.ApiOperation)({ summary: '查询所有订单' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof queryAllOrder_dto_1.QuerAllOrderDto !== "undefined" && queryAllOrder_dto_1.QuerAllOrderDto) === "function" ? _f : Object]), + __metadata("design:returntype", Promise) +], OrderController.prototype, "queryAllOrder", null); +__decorate([ + (0, common_1.Post)('delete'), + (0, swagger_1.ApiOperation)({ summary: '删除订单' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_g = typeof queryByOrder_dto_1.QueryByOrderIdDto !== "undefined" && queryByOrder_dto_1.QueryByOrderIdDto) === "function" ? _g : Object]), + __metadata("design:returntype", Promise) +], OrderController.prototype, "deleteOrder", null); +__decorate([ + (0, common_1.Post)('deleteNotPay'), + (0, swagger_1.ApiOperation)({ summary: '删除未支付订单' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], OrderController.prototype, "deleteNotPay", null); +exports.OrderController = OrderController = __decorate([ + (0, swagger_1.ApiTags)('Order'), + (0, common_1.Controller)('order'), + __metadata("design:paramtypes", [typeof (_a = typeof order_service_1.OrderService !== "undefined" && order_service_1.OrderService) === "function" ? _a : Object]) +], OrderController); + + +/***/ }), +/* 221 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.OrderService = void 0; +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const cramiPackage_entity_1 = __webpack_require__(71); +const globalConfig_service_1 = __webpack_require__(74); +const pay_service_1 = __webpack_require__(222); +const user_entity_1 = __webpack_require__(83); +const order_entity_1 = __webpack_require__(201); +let OrderService = class OrderService { + orderEntity; + cramiPackageEntity; + userEntity; + payService; + globalConfigService; + constructor(orderEntity, cramiPackageEntity, userEntity, payService, globalConfigService) { + this.orderEntity = orderEntity; + this.cramiPackageEntity = cramiPackageEntity; + this.userEntity = userEntity; + this.payService = payService; + this.globalConfigService = globalConfigService; + } + async buy(params, req) { + try { + const { goodsId, count = 1, payType } = params; + const { id: userId } = req.user; + if (userId > 1000000) { + throw new common_1.HttpException('请先注册账号后购买商品!', common_1.HttpStatus.UNAUTHORIZED); + } + const order = await this.create(userId, goodsId, count, payType); + common_1.Logger.debug('order: ', order); + const res = await this.payService.pay(userId, order.orderId, payType); + return { + ...res, + orderId: order.orderId, + platform: order.payPlatform, + total: order.total, + }; + } + catch (error) { + if (error.status === 401) { + throw new common_1.HttpException(error.message, common_1.HttpStatus.UNAUTHORIZED); + } + throw new common_1.HttpException(error.message || '购买失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async queryByOrderId(req, params) { + const { id: userId } = req.user; + const { orderId } = params; + const order = await this.orderEntity.findOne({ + where: { userId, orderId }, + }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + return order; + } + async create(userId, goodsId, count, payType) { + const payPlatform = await this.globalConfigService.queryPayType(); + const goods = await this.cramiPackageEntity.findOne({ + where: { id: goodsId }, + }); + if (!goods) + throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + const doc = {}; + doc['orderId'] = (0, utils_1.createOrderId)(); + doc['userId'] = userId; + doc['goodsId'] = goodsId; + doc['price'] = Number(goods.price); + doc['count'] = count; + doc['total'] = Number(goods.price) * count; + doc['payPlatform'] = payPlatform; + doc['channel'] = payType; + const order = await this.orderEntity.save(doc); + console.log('order: ', order); + return order; + } + async query(userId, page, size) { + return await this.orderEntity.findAndCount({ + where: { userId }, + order: { id: 'DESC' }, + skip: (page - 1) * size, + take: size, + }); + } + async queryAllOrder(params) { + const { page, size, userId, platform, status } = params; + const where = {}; + if (userId) + where['userId'] = userId; + if (platform) + where['payPlatform'] = platform; + if (status) + where['status'] = status; + const [rows, count] = await this.orderEntity.findAndCount({ + order: { id: 'DESC' }, + where, + skip: (page - 1) * size, + take: size, + }); + const userIds = rows.map(item => item.userId); + const goodsIds = rows.map(item => item.goodsId); + const userInfos = await this.userEntity.find({ + where: { id: (0, typeorm_2.In)(userIds) }, + select: ['id', 'username', 'email'], + }); + const goodsInfos = await this.cramiPackageEntity.find({ + where: { id: (0, typeorm_2.In)(goodsIds) }, + select: ['id', 'name', 'coverImg', 'des'], + }); + rows.forEach((item) => { + item.userInfo = userInfos.find(user => user.id === item.userId); + item.goodsInfo = goodsInfos.find(goods => goods.id === item.goodsId); + }); + const totalPrice = await this.orderEntity + .createQueryBuilder('order') + .where('order.status = :status', { status: 1 }) + .select('SUM(order.price)', 'total_price') + .getRawOne(); + return { rows, count, ...totalPrice }; + } + async deleteOrder(body) { + const { orderId } = body; + const o = await this.orderEntity.findOne({ where: { orderId } }); + if (!o) { + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + } + return await this.orderEntity.delete({ orderId }); + } + async deleteNotPay() { + return await this.orderEntity.delete({ status: 0 }); + } +}; +exports.OrderService = OrderService; +exports.OrderService = OrderService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(order_entity_1.OrderEntity)), + __param(1, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)), + __param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof pay_service_1.PayService !== "undefined" && pay_service_1.PayService) === "function" ? _d : Object, typeof (_e = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _e : Object]) +], OrderService); + + +/***/ }), +/* 222 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PayService = void 0; +const utils_1 = __webpack_require__(36); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const axios_1 = __webpack_require__(39); +const crypto = __webpack_require__(16); +const typeorm_2 = __webpack_require__(3); +const cramiPackage_entity_1 = __webpack_require__(71); +const globalConfig_service_1 = __webpack_require__(74); +const order_entity_1 = __webpack_require__(201); +const user_service_1 = __webpack_require__(97); +const userBalance_service_1 = __webpack_require__(34); +let PayService = class PayService { + cramiPackageEntity; + orderEntity; + userBalanceService; + globalConfigService; + userService; + constructor(cramiPackageEntity, orderEntity, userBalanceService, globalConfigService, userService) { + this.cramiPackageEntity = cramiPackageEntity; + this.orderEntity = orderEntity; + this.userBalanceService = userBalanceService; + this.globalConfigService = globalConfigService; + this.userService = userService; + } + WxPay; + async onModuleInit() { + const wpay = await (0, utils_1.importDynamic)('wechatpay-node-v3'); + this.WxPay = wpay?.default ? wpay.default : wpay; + } + async notify(params) { + if (params['param'] == 'epay') { + return this.notifyEpay(params); + } + if (params['attach'] == 'hupi') { + return this.notifyHupi(params); + } + if (params['attach'] == 'ltzf') { + return this.notifyLtzf(params); + } + if (params['param'] == 'dulu') { + return this.notifyDuluPay(params); + } + if (typeof params['resource'] == 'object') { + return this.notifyWeChat(params); + } + return this.notifyMpay(params); + } + async pay(userId, orderId, payType = 'wxpay') { + const order = await this.orderEntity.findOne({ + where: { userId, orderId }, + }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + const goods = await this.cramiPackageEntity.findOne({ + where: { id: order.goodsId }, + }); + if (!goods) + throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + common_1.Logger.log('本次支付类型: ', order.payPlatform); + try { + if (order.payPlatform == 'wechat') { + return this.payWeChat(userId, orderId, payType); + } + if (order.payPlatform == 'epay') { + return this.payEpay(userId, orderId, payType); + } + if (order.payPlatform == 'dulu') { + return this.payDulu(userId, orderId, payType); + } + if (order.payPlatform == 'mpay') { + return this.payMpay(userId, orderId, payType); + } + if (order.payPlatform == 'hupi') { + return this.payHupi(userId, orderId, payType); + } + if (order.payPlatform == 'ltzf') { + return this.payLtzf(userId, orderId, payType); + } + } + catch (error) { + common_1.Logger.log('支付请求失败: ', error); + throw new common_1.HttpException('支付请求失败!', common_1.HttpStatus.BAD_REQUEST); + } + } + async query(orderId) { + const order = await this.orderEntity.findOne({ where: { orderId } }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + return order; + } + async notifyHupi(params) { + const payHupiSecret = await this.globalConfigService.getConfigs(['payHupiSecret']); + const hash = params['hash']; + delete params['hash']; + if (this.sign(params, payHupiSecret) != hash) + return 'failed'; + const order = await this.orderEntity.findOne({ + where: { orderId: params['trade_order_id'], status: 0 }, + }); + if (!order) + return 'failed'; + await this.userBalanceService.addBalanceToOrder(order); + const result = await this.orderEntity.update({ orderId: params['trade_order_id'] }, { status: 1, paydAt: new Date() }); + if (result.affected != 1) + return 'failed'; + return 'success'; + } + async payHupi(userId, orderId, payType = 'wxpay') { + const order = await this.orderEntity.findOne({ + where: { userId, orderId }, + }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + const goods = await this.cramiPackageEntity.findOne({ + where: { id: order.goodsId }, + }); + if (!goods) + throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + const { payHupiAppId, payHupiSecret, payHupiNotifyUrl, payHupiReturnUrl, payHupiGatewayUrl } = await this.globalConfigService.getConfigs([ + 'payHupiAppId', + 'payHupiSecret', + 'payHupiNotifyUrl', + 'payHupiReturnUrl', + 'payHupiGatewayUrl', + ]); + const params = {}; + params['version'] = '1.1'; + params['appid'] = payHupiAppId; + params['time'] = (Date.now() / 1000).toFixed(0); + params['nonce_str'] = (0, utils_1.createRandomNonceStr)(32); + params['trade_order_id'] = orderId; + params['title'] = goods.name; + params['total_fee'] = order.total; + params['notify_url'] = payHupiNotifyUrl; + params['return_url'] = payHupiReturnUrl; + params['attach'] = 'hupi'; + params['hash'] = this.sign(params, payHupiSecret); + const { data: { errcode, errmsg, url_qrcode, url }, } = await axios_1.default.post(payHupiGatewayUrl || 'https://api.xunhupay.com/payment/do.html', params); + if (errcode != 0) + throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST); + return { url_qrcode, url }; + } + async queryHupi(orderId) { + const { payHupiAppId, payHupiSecret } = await this.globalConfigService.getConfigs([ + 'payHupiAppId', + 'payHupiSecret', + ]); + const params = {}; + params['version'] = '1.1'; + params['appid'] = payHupiAppId; + params['time'] = (Date.now() / 1000).toFixed(0); + params['nonce_str'] = (0, utils_1.createRandomNonceStr)(32); + params['out_trade_order'] = orderId; + params['hash'] = this.sign(params, payHupiSecret); + const { data: { errcode, errmsg, data: result }, } = await axios_1.default.post('https://api.xunhupay.com/payment/query.html', params); + if (errcode != 0) + throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST); + return result; + } + async notifyEpay(params) { + const sign = params['sign']; + delete params['sign']; + delete params['sign_type']; + const payEpaySecret = await this.globalConfigService.getConfigs(['payEpaySecret']); + if (this.sign(params, payEpaySecret) != sign) + return 'failed'; + common_1.Logger.log('校验签名通过'); + const order = await this.orderEntity.findOne({ + where: { orderId: params['out_trade_no'], status: 0 }, + }); + if (!order) + return 'failed'; + const status = params['trade_status'] == 'TRADE_SUCCESS' ? 1 : 2; + const result = await this.orderEntity.update({ orderId: params['out_trade_no'] }, { status, paydAt: new Date() }); + if (status === 1) { + await this.userBalanceService.addBalanceToOrder(order); + } + if (result.affected != 1) + return 'failed'; + return 'success'; + } + async payEpay(userId, orderId, payType = 'alipay') { + const order = await this.orderEntity.findOne({ + where: { userId, orderId }, + }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + const goods = await this.cramiPackageEntity.findOne({ + where: { id: order.goodsId }, + }); + if (!goods) + throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + const { payEpayPid, payEpaySecret, payEpayNotifyUrl, payEpayReturnUrl, payEpayApiPayUrl } = await this.globalConfigService.getConfigs([ + 'payEpayPid', + 'payEpaySecret', + 'payEpayNotifyUrl', + 'payEpayReturnUrl', + 'payEpayApiPayUrl', + ]); + let convertedNumber; + if (payEpayPid.length <= 16) { + convertedNumber = Number(payEpayPid); + } + else { + convertedNumber = BigInt(payEpayPid); + } + const params = {}; + params['pid'] = convertedNumber; + params['type'] = payType; + params['out_trade_no'] = orderId; + params['name'] = goods.name; + params['money'] = order.total; + params['clientip'] = '192.168.1.100'; + params['device'] = 'pc'; + params['notify_url'] = payEpayNotifyUrl; + params['return_url'] = payEpayReturnUrl; + params['param'] = 'epay'; + params['sign'] = this.sign(params, payEpaySecret); + params['sign_type'] = 'MD5'; + const queryParams = new URLSearchParams(params).toString(); + const apiUrl = `${payEpayApiPayUrl}?${queryParams}`; + if (payEpayApiPayUrl.includes('submit.php')) { + return { + url_qrcode: null, + redirectUrl: apiUrl, + channel: payType, + isRedirect: true, + }; + } + else { + const config = { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }; + const res = await axios_1.default.post(payEpayApiPayUrl, params, config); + common_1.Logger.log('epay ---> res: ', res.data); + const { data: { code, msg, qrcode: url_qrcode }, } = res; + if (code != 1) + throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); + return { + url_qrcode, + redirectUrl: null, + channel: payType, + isRedirect: false, + }; + } + } + async queryEpay(orderId) { + const { payEpayPid, payEpaySecret, payEpayApiQueryUrl } = await this.globalConfigService.getConfigs([ + 'payEpayPid', + 'payEpaySecret', + 'payEpayApiQueryUrl', + ]); + const params = {}; + params['act'] = 'order'; + params['out_trade_no'] = orderId; + params['pid'] = payEpayPid; + params['key'] = payEpaySecret; + const { data: { code, msg, data: result }, } = await axios_1.default.get(payEpayApiQueryUrl, { params }); + if (code != 1) + throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); + return result; + } + async notifyDuluPay(params) { + const sign = params['sign']; + delete params['sign']; + delete params['sign_type']; + const payDuluPaySecret = await this.globalConfigService.getConfigs(['payDuluPaySecret']); + if (this.sign(params, payDuluPaySecret) != sign) + return 'failed'; + common_1.Logger.log('校验签名通过'); + const order = await this.orderEntity.findOne({ + where: { orderId: params['out_trade_no'], status: 0 }, + }); + if (!order) + return 'failed'; + const status = params['trade_status'] == 'TRADE_SUCCESS' ? 1 : 2; + const result = await this.orderEntity.update({ orderId: params['out_trade_no'] }, { status, paydAt: new Date() }); + if (status === 1) { + await this.userBalanceService.addBalanceToOrder(order); + } + if (result.affected != 1) + return 'failed'; + return 'success'; + } + async payDulu(userId, orderId, payType = 'alipay') { + const order = await this.orderEntity.findOne({ + where: { userId, orderId }, + }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + const goods = await this.cramiPackageEntity.findOne({ + where: { id: order.goodsId }, + }); + if (!goods) + throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + const { payDuluPayPid, payDuluPaySecret, payDuluPayNotifyUrl, payDuluPayReturnUrl, payDuluPayRedirect, } = await this.globalConfigService.getConfigs([ + 'payDuluPayPid', + 'payDuluPaySecret', + 'payDuluPayNotifyUrl', + 'payDuluPayReturnUrl', + 'payDuluPayRedirect', + ]); + let convertedNumber; + if (payDuluPayPid.length <= 16) { + convertedNumber = Number(payDuluPayPid); + } + else { + convertedNumber = BigInt(payDuluPayPid); + } + const params = {}; + params['pid'] = convertedNumber; + params['type'] = payType; + params['out_trade_no'] = orderId; + params['name'] = goods.name; + params['money'] = order.total; + params['clientip'] = '192.168.1.100'; + params['device'] = 'pc'; + params['notify_url'] = payDuluPayNotifyUrl; + params['return_url'] = payDuluPayReturnUrl; + params['param'] = 'dulu'; + params['sign'] = this.sign(params, payDuluPaySecret); + params['sign_type'] = 'MD5'; + const queryParams = new URLSearchParams(params).toString(); + if (payDuluPayRedirect == 1) { + return { + url_qrcode: null, + redirectUrl: `https://api.dulupay.com/submit.php?${queryParams}`, + channel: payType, + isRedirect: true, + }; + } + else { + const config = { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }; + const res = await axios_1.default.post('https://api.dulupay.com/mapi.php', params, config); + common_1.Logger.log('dulu ---> res: ', res.data); + const { data: { code, msg, qrcode: url_qrcode }, } = res; + if (code != 1) + throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); + return { + url_qrcode, + redirectUrl: null, + channel: payType, + isRedirect: false, + }; + } + } + async queryDuluPay(orderId) { + const { payDuluPayPid, payDuluPaySecret } = await this.globalConfigService.getConfigs([ + 'payDuluPayPid', + 'payDuluPaySecret', + ]); + const params = {}; + params['act'] = 'order'; + params['out_trade_no'] = orderId; + params['pid'] = payDuluPayPid; + params['key'] = payDuluPaySecret; + const { data: { code, msg, data: result }, } = await axios_1.default.get('https://api.dulupay.com', { params }); + if (code != 1) + throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); + return result; + } + async notifyMpay(params) { + const sign = params['sign']; + delete params['sign']; + delete params['sign_type']; + const payMpaySecret = await this.globalConfigService.getConfigs(['payMpaySecret']); + common_1.Logger.log('校验签名'); + if (this.sign(params, payMpaySecret) != sign) + return 'failed'; + common_1.Logger.log('校验签名通过'); + const order = await this.orderEntity.findOne({ + where: { orderId: params['out_trade_no'], status: 0 }, + }); + if (!order) + return 'failed'; + const status = params['trade_status'] == 'TRADE_SUCCESS' ? 1 : 2; + common_1.Logger.log('status: ', status); + const result = await this.orderEntity.update({ orderId: params['out_trade_no'] }, { status, paydAt: new Date() }); + if (status === 1) { + await this.userBalanceService.addBalanceToOrder(order); + } + if (result.affected != 1) + return 'failed'; + return 'success'; + } + async payMpay(userId, orderId, payType = 'wxpay') { + const order = await this.orderEntity.findOne({ + where: { userId, orderId }, + }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + const goods = await this.cramiPackageEntity.findOne({ + where: { id: order.goodsId }, + }); + if (!goods) + throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + const { payMpayPid, payMpaySecret, payMpayNotifyUrl, payMpayReturnUrl, payMpayApiPayUrl } = await this.globalConfigService.getConfigs([ + 'payMpayPid', + 'payMpaySecret', + 'payMpayNotifyUrl', + 'payMpayReturnUrl', + 'payMpayApiPayUrl', + ]); + const params = {}; + params['pid'] = Number(payMpayPid); + params['type'] = payType; + params['out_trade_no'] = orderId; + params['name'] = goods.name; + params['money'] = order.total; + params['notify_url'] = payMpayNotifyUrl; + params['return_url'] = payMpayReturnUrl; + params['sign'] = this.sign(params, payMpaySecret); + params['sign_type'] = 'MD5'; + const queryParams = new URLSearchParams(params).toString(); + const apiUrl = `${payMpayApiPayUrl}?${queryParams}`; + return { + url_qrcode: null, + redirectUrl: apiUrl, + channel: payType, + isRedirect: true, + }; + const res = await axios_1.default.get(payMpayApiPayUrl, { params }); + } + async queryMpay(orderId) { + const { payMpayApiQueryUrl } = await this.globalConfigService.getConfigs([ + 'payMpayPid', + 'payMpaySecret', + 'payMpayApiQueryUrl', + ]); + const params = {}; + params['type'] = 2; + params['order_no'] = orderId; + const { data: { code, msg, data: result }, } = await axios_1.default.get(payMpayApiQueryUrl, { params }); + if (code != 1) + throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); + return result; + } + async notifyWeChat(params) { + common_1.Logger.log('微信支付通知params: ', params); + const { payWeChatAppId, payWeChatMchId, payWeChatSecret, payWeChatPublicKey, payWeChatPrivateKey, } = await this.globalConfigService.getConfigs([ + 'payWeChatAppId', + 'payWeChatMchId', + 'payWeChatSecret', + 'payWeChatPublicKey', + 'payWeChatPrivateKey', + ]); + const pay = new this.WxPay({ + appid: payWeChatAppId, + mchid: payWeChatMchId, + publicKey: payWeChatPublicKey, + privateKey: payWeChatPrivateKey, + }); + try { + if (params['event_type'] == 'TRANSACTION.SUCCESS') { + const { ciphertext, associated_data, nonce } = params['resource']; + const resource = pay.decipher_gcm(ciphertext, associated_data, nonce, payWeChatSecret); + const order = await this.orderEntity.findOne({ + where: { orderId: resource['out_trade_no'], status: 0 }, + }); + if (!order) + return 'failed'; + const status = resource['trade_state'] == 'SUCCESS' ? 1 : 2; + const result = await this.orderEntity.update({ orderId: resource['out_trade_no'] }, { status, paydAt: new Date() }); + if (status === 1) { + await this.userBalanceService.addBalanceToOrder(order); + } + if (result.affected != 1) + return 'failed'; + } + return 'success'; + } + catch (error) { + common_1.Logger.log('error: ', error); + common_1.Logger.log('支付通知验证失败: ', error); + return 'failed'; + } + } + async payWeChat(userId, orderId, payType = 'native') { + common_1.Logger.log('payType: ', payType); + const order = await this.orderEntity.findOne({ + where: { userId, orderId }, + }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + const goods = await this.cramiPackageEntity.findOne({ + where: { id: order.goodsId }, + }); + if (!goods) + throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + const { payWeChatAppId, payWeChatMchId, payWeChatPublicKey, payWeChatPrivateKey, payWeChatNotifyUrl, } = await this.globalConfigService.getConfigs([ + 'payWeChatAppId', + 'payWeChatMchId', + 'payWeChatPublicKey', + 'payWeChatPrivateKey', + 'payWeChatNotifyUrl', + ]); + const pay = new this.WxPay({ + appid: payWeChatAppId, + mchid: payWeChatMchId, + publicKey: payWeChatPublicKey, + privateKey: payWeChatPrivateKey, + }); + const params = { + appid: payWeChatAppId, + mchid: payWeChatMchId, + description: goods.name, + out_trade_no: orderId, + notify_url: payWeChatNotifyUrl, + amount: { + total: Math.round(order.total * 100), + }, + }; + common_1.Logger.log('wechat-pay: ', params); + if (payType == 'jsapi') { + common_1.Logger.log(`[WeChat Pay JSAPI] 开始JSAPI支付流程,用户ID: ${userId}, 订单ID: ${orderId}`); + const openid = await this.userService.getOpenIdByUserId(userId); + common_1.Logger.log(`[WeChat Pay JSAPI] 用户OpenID: ${openid}`); + params['payer'] = { openid: openid }; + common_1.Logger.log(`[WeChat Pay JSAPI] 发送支付请求参数: `, JSON.stringify(params, null, 2)); + try { + const response = await pay.transactions_jsapi(params); + const result = response.data ? response.data : response; + common_1.Logger.log(`[WeChat Pay JSAPI] 支付请求成功,返回结果: `, JSON.stringify(result, null, 2)); + return { + status: response.status || 'unknown', + appId: result.appId || result.data?.appId, + timeStamp: result.timeStamp || result.data?.timeStamp, + nonceStr: result.nonceStr || result.data?.nonceStr, + package: result.package || result.data?.package, + signType: result.signType || result.data?.signType, + paySign: result.paySign || result.data?.paySign, + }; + } + catch (error) { + console.error(`[WeChat Pay JSAPI] 支付请求过程中发生错误: ${error.message}`, error); + console.error('[WeChat Pay JSAPI] 完整的错误对象:', error); + throw new common_1.HttpException('JSAPI支付失败', common_1.HttpStatus.BAD_REQUEST); + } + } + if (payType == 'native') { + common_1.Logger.log(`开始进行微信Native支付流程,订单ID: ${orderId}, 用户ID: ${userId}`); + try { + const res = await pay.transactions_native(params); + common_1.Logger.log(`微信Native支付响应数据: `, JSON.stringify(res, null, 2)); + const url_qrcode = res.code_url || res.data?.code_url; + if (!url_qrcode) { + console.error(`微信Native支付请求成功,但未返回code_url,响应数据: `, JSON.stringify(res, null, 2)); + } + else { + common_1.Logger.log(`微信Native支付请求成功,code_url: ${url_qrcode}`); + } + return { url_qrcode, isRedirect: false }; + } + catch (error) { + console.error(`微信Native支付过程中发生错误,错误信息: ${error.message}`, error); + console.error('完整的错误对象:', error); + throw new common_1.HttpException('微信Native支付失败', common_1.HttpStatus.BAD_REQUEST); + } + } + else { + console.warn(`支付请求使用了不支持的支付类型: ${payType}`); + throw new common_1.HttpException('unsupported pay type', common_1.HttpStatus.BAD_REQUEST); + } + } + async queryWeChat(orderId) { + const { payWeChatAppId, payWeChatMchId, payWeChatPublicKey, payWeChatPrivateKey, payWeChatNotifyUrl, } = await this.globalConfigService.getConfigs([ + 'payWeChatAppId', + 'payWeChatMchId', + 'payWeChatPublicKey', + 'payWeChatPrivateKey', + ]); + const pay = new this.WxPay({ + appid: payWeChatAppId, + mchid: payWeChatMchId, + publicKey: payWeChatPublicKey, + privateKey: payWeChatPrivateKey, + }); + const result = await pay.query({ out_trade_no: orderId }); + return result; + } + sign(params, secret) { + const str = Object.keys(params) + .sort() + .map(key => `${key}=${params[key]}`) + .join('&') + secret; + return crypto.createHash('md5').update(str).digest('hex'); + } + ltzfSign(params, secret) { + const paramsArr = Object.keys(params); + paramsArr.sort(); + const stringArr = []; + paramsArr.map(key => { + stringArr.push(key + '=' + params[key]); + }); + stringArr.push('key=' + secret); + const str = stringArr.join('&'); + return crypto.createHash('md5').update(str).digest('hex').toUpperCase(); + } + async payLtzf(userId, orderId, payType = 'wxpay') { + const order = await this.orderEntity.findOne({ + where: { userId, orderId }, + }); + if (!order) + throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); + const goods = await this.cramiPackageEntity.findOne({ + where: { id: order.goodsId }, + }); + if (!goods) + throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); + const { payLtzfMchId, payLtzfSecret, payLtzfNotifyUrl, payLtzfReturnUrl } = await this.globalConfigService.getConfigs([ + 'payLtzfMchId', + 'payLtzfSecret', + 'payLtzfNotifyUrl', + 'payLtzfReturnUrl', + ]); + const params = {}; + params['mch_id'] = payLtzfMchId; + params['timestamp'] = (Date.now() / 1000).toFixed(0); + params['out_trade_no'] = orderId; + params['body'] = goods.name; + params['total_fee'] = order.total; + params['notify_url'] = payLtzfNotifyUrl; + params['sign'] = this.ltzfSign(params, payLtzfSecret); + params['attach'] = 'ltzf'; + params['return_url'] = payLtzfReturnUrl; + const formBody = Object.keys(params) + .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key])) + .join('&'); + const config = { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }; + const response = await axios_1.default.post('https://api.ltzf.cn/api/wxpay/jsapi_convenient', formBody, config); + const { code, data, msg } = response.data; + if (code != 0) + throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); + const url_qrcode = data.QRcode_url; + const url = data.order_url; + return { url_qrcode, url }; + } + async queryLtzf(orderId) { + const { payLtzfMchId, payLtzfSecret } = await this.globalConfigService.getConfigs([ + 'payLtzfMchId', + 'payLtzfSecret', + ]); + const params = {}; + params['mch_id'] = payLtzfMchId; + params['timestamp'] = (Date.now() / 1000).toFixed(0); + params['out_trade_no'] = orderId; + params['sign'] = this.ltzfSign(params, payLtzfSecret); + const formBody = Object.keys(params) + .map(key => encodeURIComponent(key) + '=' + encodeURIComponent(params[key])) + .join('&'); + const config = { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }; + const { data: { code, msg, data: result }, } = await axios_1.default.post('https://api.ltzf.cn/api/wxpay/get_pay_order', formBody, config); + if (code != 0) + throw new common_1.HttpException(msg + JSON.stringify(params), common_1.HttpStatus.BAD_REQUEST); + return result; + } + async notifyLtzf(params) { + const payLtzfSecret = await this.globalConfigService.getConfigs(['payLtzfSecret']); + const hash = params['sign']; + delete params['sign']; + delete params['pay_channel']; + delete params['trade_type']; + delete params['success_time']; + delete params['attach']; + delete params['openid']; + if (this.ltzfSign(params, payLtzfSecret) != hash) + return 'FAIL'; + const order = await this.orderEntity.findOne({ + where: { orderId: params['out_trade_no'], status: 0 }, + }); + if (!order) + return 'FAIL'; + await this.userBalanceService.addBalanceToOrder(order); + const result = await this.orderEntity.update({ orderId: params['out_trade_no'] }, { status: 1, paydAt: new Date() }); + if (result.affected != 1) + return 'FAIL'; + return 'SUCCESS'; + } +}; +exports.PayService = PayService; +exports.PayService = PayService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)), + __param(1, (0, typeorm_1.InjectRepository)(order_entity_1.OrderEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof userBalance_service_1.UserBalanceService !== "undefined" && userBalance_service_1.UserBalanceService) === "function" ? _c : Object, typeof (_d = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _d : Object, typeof (_e = typeof user_service_1.UserService !== "undefined" && user_service_1.UserService) === "function" ? _e : Object]) +], PayService); + + +/***/ }), +/* 223 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.BuyDto = void 0; +const swagger_1 = __webpack_require__(14); +class BuyDto { + goodsId; + payType; + count; +} +exports.BuyDto = BuyDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '要购买的套餐Id', required: true }), + __metadata("design:type", Number) +], BuyDto.prototype, "goodsId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'wxpay', description: '付款方式', required: false }), + __metadata("design:type", String) +], BuyDto.prototype, "payType", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '购买数量', required: false }), + __metadata("design:type", Number) +], BuyDto.prototype, "count", void 0); + + +/***/ }), +/* 224 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryByOrderIdDto = void 0; +const swagger_1 = __webpack_require__(14); +class QueryByOrderIdDto { + orderId; +} +exports.QueryByOrderIdDto = QueryByOrderIdDto; +__decorate([ + (0, swagger_1.ApiProperty)({ + example: 'qwdadadwe-qeqwfcadqw-gguytewj', + description: '订单ID', + required: false, + }), + __metadata("design:type", String) +], QueryByOrderIdDto.prototype, "orderId", void 0); + + +/***/ }), +/* 225 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QuerAllOrderDto = void 0; +const class_validator_1 = __webpack_require__(110); +const swagger_1 = __webpack_require__(14); +class QuerAllOrderDto { + page; + size; + userId; + platform; + status; +} +exports.QuerAllOrderDto = QuerAllOrderDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllOrderDto.prototype, "page", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllOrderDto.prototype, "size", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 99, description: '支付的用户id', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllOrderDto.prototype, "userId", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 'epay', description: '支付的平台', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", String) +], QuerAllOrderDto.prototype, "platform", void 0); +__decorate([ + (0, swagger_1.ApiProperty)({ example: 1, description: '订单状态', required: false }), + (0, class_validator_1.IsOptional)(), + __metadata("design:type", Number) +], QuerAllOrderDto.prototype, "status", void 0); + + +/***/ }), +/* 226 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PayModule = void 0; +const common_1 = __webpack_require__(2); +const pay_controller_1 = __webpack_require__(227); +const pay_service_1 = __webpack_require__(222); +const order_entity_1 = __webpack_require__(201); +const cramiPackage_entity_1 = __webpack_require__(71); +const typeorm_1 = __webpack_require__(33); +let PayModule = class PayModule { +}; +exports.PayModule = PayModule; +exports.PayModule = PayModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([order_entity_1.OrderEntity, cramiPackage_entity_1.CramiPackageEntity])], + controllers: [pay_controller_1.PayController], + providers: [pay_service_1.PayService], + exports: [pay_service_1.PayService], + }) +], PayModule); + + +/***/ }), +/* 227 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PayController = void 0; +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const pay_service_1 = __webpack_require__(222); +let PayController = class PayController { + payService; + constructor(payService) { + this.payService = payService; + } + notifyHupi(body) { + console.log('hupi ->body: ', body); + return this.payService.notify(body); + } + notifyDuluPay(body) { + console.log('dulu ->body: ', body); + return this.payService.notify(body); + } + notifyLtzf(body) { + console.log('ltzf ->body: ', body); + return this.payService.notify(body); + } + notifyEpay(query) { + console.log('epay ->query: ', query); + return this.payService.notify(query); + } +}; +exports.PayController = PayController; +__decorate([ + (0, common_1.Post)('notify'), + (0, swagger_1.ApiOperation)({ summary: 'hupi支付结果通知' }), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], PayController.prototype, "notifyHupi", null); +__decorate([ + (0, common_1.Post)('notify'), + (0, swagger_1.ApiOperation)({ summary: 'Dulu支付结果通知' }), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], PayController.prototype, "notifyDuluPay", null); +__decorate([ + (0, common_1.Post)('notify'), + (0, swagger_1.ApiOperation)({ summary: 'ltzf支付结果通知' }), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], PayController.prototype, "notifyLtzf", null); +__decorate([ + (0, common_1.Get)('notify'), + (0, swagger_1.ApiOperation)({ summary: 'Epay支付结果通知' }), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], PayController.prototype, "notifyEpay", null); +exports.PayController = PayController = __decorate([ + (0, common_1.Controller)('pay'), + (0, swagger_1.ApiTags)('pay'), + __metadata("design:paramtypes", [typeof (_a = typeof pay_service_1.PayService !== "undefined" && pay_service_1.PayService) === "function" ? _a : Object]) +], PayController); + + +/***/ }), +/* 228 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PluginModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const plugin_controller_1 = __webpack_require__(229); +const plugin_entity_1 = __webpack_require__(159); +const plugin_service_1 = __webpack_require__(230); +let PluginModule = class PluginModule { +}; +exports.PluginModule = PluginModule; +exports.PluginModule = PluginModule = __decorate([ + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([plugin_entity_1.PluginEntity])], + controllers: [plugin_controller_1.PluginController], + providers: [plugin_service_1.PluginService], + }) +], PluginModule); + + +/***/ }), +/* 229 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PluginController = void 0; +const superAuth_guard_1 = __webpack_require__(103); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const plugin_service_1 = __webpack_require__(230); +let PluginController = class PluginController { + pluginService; + constructor(pluginService) { + this.pluginService = pluginService; + } + pluginList(req) { + return this.pluginService.pluginList(req); + } + createPlugin(body) { + return this.pluginService.createPlugin(body); + } + updatePlugin(body) { + return this.pluginService.updatePlugin(body); + } + delPlugin(body) { + return this.pluginService.delPlugin(body); + } +}; +exports.PluginController = PluginController; +__decorate([ + (0, common_1.Get)('pluginList'), + (0, swagger_1.ApiOperation)({ summary: '获取Plugin' }), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _b : Object]), + __metadata("design:returntype", void 0) +], PluginController.prototype, "pluginList", null); +__decorate([ + (0, common_1.Post)('createPlugin'), + (0, swagger_1.ApiOperation)({ summary: '创建Plugin' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], PluginController.prototype, "createPlugin", null); +__decorate([ + (0, common_1.Post)('updatePlugin'), + (0, swagger_1.ApiOperation)({ summary: '修改插件' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], PluginController.prototype, "updatePlugin", null); +__decorate([ + (0, common_1.Post)('delPlugin'), + (0, swagger_1.ApiOperation)({ summary: '删除插件' }), + (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", void 0) +], PluginController.prototype, "delPlugin", null); +exports.PluginController = PluginController = __decorate([ + (0, swagger_1.ApiTags)('plugin'), + (0, common_1.Controller)('plugin'), + __metadata("design:paramtypes", [typeof (_a = typeof plugin_service_1.PluginService !== "undefined" && plugin_service_1.PluginService) === "function" ? _a : Object]) +], PluginController); + + +/***/ }), +/* 230 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.PluginService = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const models_service_1 = __webpack_require__(76); +const plugin_entity_1 = __webpack_require__(159); +let PluginService = class PluginService { + PluginEntity; + modelsService; + constructor(PluginEntity, modelsService) { + this.PluginEntity = PluginEntity; + this.modelsService = modelsService; + } + async pluginList(query) { + const { page = 1, size = 100 } = query; + const rows = await this.PluginEntity.find({ + order: { sortOrder: 'ASC', id: 'DESC' }, + skip: (page - 1) * size, + take: size, + }); + const processedRows = await Promise.all(rows.map(async (plugin) => { + try { + const parameters = await this.modelsService.getCurrentModelKeyInfo(plugin.parameters); + const deductType = parameters.deductType; + const drawingType = parameters.drawingType; + const modelType = parameters.keyType; + return { + ...plugin, + deductType, + drawingType, + modelType, + }; + } + catch (error) { + return { + ...plugin, + deductType: 0, + drawingType: 0, + modelType: 2, + }; + } + })); + const filteredRows = processedRows.filter(plugin => plugin !== null); + return { rows: filteredRows, count: filteredRows.length }; + } + async createPlugin(body) { + const { name, pluginImg, description, isEnabled, parameters, sortOrder } = body; + const existingPlugin = await this.PluginEntity.findOne({ + where: { name }, + }); + if (existingPlugin) { + throw new common_1.HttpException('该插件名称已存在!', common_1.HttpStatus.BAD_REQUEST); + } + const newPlugin = this.PluginEntity.create({ + name, + pluginImg, + description, + isEnabled: isEnabled !== undefined ? isEnabled : 1, + parameters, + sortOrder: sortOrder !== undefined ? sortOrder : 0, + }); + return await this.PluginEntity.save(newPlugin); + } + async updatePlugin(body) { + const { id, name, pluginImg, description, isEnabled, parameters, sortOrder } = body; + const existingPlugin = await this.PluginEntity.findOne({ + where: { id }, + }); + if (!existingPlugin) { + throw new common_1.HttpException('插件不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const duplicatePlugin = await this.PluginEntity.findOne({ + where: { name, id: (0, typeorm_2.Not)(id) }, + }); + if (duplicatePlugin) { + throw new common_1.HttpException('该插件名称已存在!', common_1.HttpStatus.BAD_REQUEST); + } + existingPlugin.name = name; + existingPlugin.pluginImg = pluginImg; + existingPlugin.description = description; + existingPlugin.isEnabled = isEnabled !== undefined ? isEnabled : existingPlugin.isEnabled; + existingPlugin.parameters = parameters; + existingPlugin.sortOrder = sortOrder !== undefined ? sortOrder : existingPlugin.sortOrder; + await this.PluginEntity.save(existingPlugin); + return '修改插件信息成功'; + } + async delPlugin(body) { + const { id } = body; + const existingPlugin = await this.PluginEntity.findOne({ + where: { id }, + }); + if (!existingPlugin) { + throw new common_1.HttpException('该插件不存在!', common_1.HttpStatus.BAD_REQUEST); + } + const deleteResult = await this.PluginEntity.delete(id); + if (deleteResult.affected > 0) { + return '删除插件成功'; + } + else { + throw new common_1.HttpException('删除插件失败!', common_1.HttpStatus.BAD_REQUEST); + } + } +}; +exports.PluginService = PluginService; +exports.PluginService = PluginService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(plugin_entity_1.PluginEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof models_service_1.ModelsService !== "undefined" && models_service_1.ModelsService) === "function" ? _b : Object]) +], PluginService); + + +/***/ }), +/* 231 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ShareModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const share_controller_1 = __webpack_require__(232); +const share_entity_1 = __webpack_require__(202); +const share_service_1 = __webpack_require__(233); +let ShareModule = class ShareModule { +}; +exports.ShareModule = ShareModule; +exports.ShareModule = ShareModule = __decorate([ + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([share_entity_1.Share])], + controllers: [share_controller_1.ShareController], + providers: [share_service_1.ShareService], + }) +], ShareModule); + + +/***/ }), +/* 232 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ShareController = void 0; +const jwtAuth_guard_1 = __webpack_require__(87); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const share_service_1 = __webpack_require__(233); +let ShareController = class ShareController { + shareService; + constructor(shareService) { + this.shareService = shareService; + } + async createShare(htmlContent) { + if (!htmlContent) { + throw new common_1.HttpException('HTML content is required', common_1.HttpStatus.BAD_REQUEST); + } + const shareCode = await this.shareService.createShare(htmlContent); + return { shareCode }; + } + async getShare(shareCode) { + const share = await this.shareService.getShareByCode(shareCode); + if (!share) { + throw new common_1.HttpException('Share not found', common_1.HttpStatus.NOT_FOUND); + } + return { htmlContent: share.htmlContent }; + } +}; +exports.ShareController = ShareController; +__decorate([ + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, common_1.Post)('create'), + (0, swagger_1.ApiBearerAuth)(), + (0, swagger_1.ApiOperation)({ summary: '创建分享' }), + __param(0, (0, common_1.Body)('htmlContent')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], ShareController.prototype, "createShare", null); +__decorate([ + (0, common_1.Get)(':shareCode'), + (0, swagger_1.ApiOperation)({ summary: '获取分享内容' }), + __param(0, (0, common_1.Param)('shareCode')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], ShareController.prototype, "getShare", null); +exports.ShareController = ShareController = __decorate([ + (0, swagger_1.ApiTags)('share'), + (0, common_1.Controller)('share'), + __metadata("design:paramtypes", [typeof (_a = typeof share_service_1.ShareService !== "undefined" && share_service_1.ShareService) === "function" ? _a : Object]) +], ShareController); + + +/***/ }), +/* 233 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.ShareService = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const globalConfig_service_1 = __webpack_require__(74); +const share_entity_1 = __webpack_require__(202); +let ShareService = class ShareService { + shareRepository; + globalConfigService; + constructor(shareRepository, globalConfigService) { + this.shareRepository = shareRepository; + this.globalConfigService = globalConfigService; + } + generateShareCode() { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let code = ''; + for (let i = 0; i < 8; i++) { + code += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return code; + } + async createShare(htmlContent) { + let shareCode; + let isUnique = false; + while (!isUnique) { + shareCode = this.generateShareCode(); + const existing = await this.shareRepository.findOne({ + where: { shareCode }, + }); + if (!existing) { + isUnique = true; + } + } + const share = new share_entity_1.Share(); + share.shareCode = shareCode; + share.htmlContent = htmlContent; + try { + await this.shareRepository.save(share); + const siteUrl = await this.globalConfigService.getConfigs(['siteUrl']); + console.log(siteUrl); + return `${siteUrl}/?shareCode=${shareCode}`; + } + catch (error) { + console.error('保存分享内容失败:', error); + throw new Error(`创建分享失败: ${error.message || '未知错误'}`); + } + } + async getShareByCode(shareCode) { + const share = await this.shareRepository.findOne({ where: { shareCode } }); + return await this.shareRepository.findOne({ where: { shareCode } }); + } +}; +exports.ShareService = ShareService; +exports.ShareService = ShareService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(share_entity_1.Share)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _b : Object]) +], ShareService); + + +/***/ }), +/* 234 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SigninModule = void 0; +const common_1 = __webpack_require__(2); +const signin_controller_1 = __webpack_require__(235); +const signin_service_1 = __webpack_require__(236); +const typeorm_1 = __webpack_require__(33); +const signIn_entity_1 = __webpack_require__(203); +const user_entity_1 = __webpack_require__(83); +let SigninModule = class SigninModule { +}; +exports.SigninModule = SigninModule; +exports.SigninModule = SigninModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([signIn_entity_1.SigninEntity, user_entity_1.UserEntity])], + controllers: [signin_controller_1.SigninController], + providers: [signin_service_1.SigninService], + exports: [signin_service_1.SigninService], + }) +], SigninModule); + + +/***/ }), +/* 235 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SigninController = void 0; +const common_1 = __webpack_require__(2); +const signin_service_1 = __webpack_require__(236); +const swagger_1 = __webpack_require__(14); +const jwtAuth_guard_1 = __webpack_require__(87); +const express_1 = __webpack_require__(104); +let SigninController = class SigninController { + signinService; + constructor(signinService) { + this.signinService = signinService; + } + async sign(req) { + return await this.signinService.sign(req); + } + async getSigninLog(req) { + return await this.signinService.getSigninLog(req); + } +}; +exports.SigninController = SigninController; +__decorate([ + (0, common_1.Post)('sign'), + (0, swagger_1.ApiOperation)({ summary: '用户签到' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _b : Object]), + __metadata("design:returntype", Promise) +], SigninController.prototype, "sign", null); +__decorate([ + (0, common_1.Get)('signinLog'), + (0, swagger_1.ApiOperation)({ summary: '获取用户签到信息' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object]), + __metadata("design:returntype", Promise) +], SigninController.prototype, "getSigninLog", null); +exports.SigninController = SigninController = __decorate([ + (0, swagger_1.ApiTags)('signIn'), + (0, common_1.Controller)('signin'), + __metadata("design:paramtypes", [typeof (_a = typeof signin_service_1.SigninService !== "undefined" && signin_service_1.SigninService) === "function" ? _a : Object]) +], SigninController); + + +/***/ }), +/* 236 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SigninService = void 0; +const globalConfig_service_1 = __webpack_require__(74); +const userBalance_service_1 = __webpack_require__(34); +const common_1 = __webpack_require__(2); +const signIn_entity_1 = __webpack_require__(203); +const typeorm_1 = __webpack_require__(33); +const typeorm_2 = __webpack_require__(3); +const date_1 = __webpack_require__(47); +const user_entity_1 = __webpack_require__(83); +const balance_constant_1 = __webpack_require__(35); +let SigninService = class SigninService { + signinEntity; + userEntity; + userBalanceService; + globalConfigService; + constructor(signinEntity, userEntity, userBalanceService, globalConfigService) { + this.signinEntity = signinEntity; + this.userEntity = userEntity; + this.userBalanceService = userBalanceService; + this.globalConfigService = globalConfigService; + } + async sign(req) { + const { id: userId } = req.user; + const formattedDate = (0, date_1.default)(new Date()).format('YYYY-MM-DD'); + const existingSignin = await this.signinEntity.findOne({ + where: { userId, signInDate: formattedDate }, + }); + if (existingSignin) { + throw new common_1.HttpException('今日已签到、改天再来吧!.', common_1.HttpStatus.BAD_REQUEST); + } + const { model3Count, model4Count, drawMjCount } = await this.globalConfigService.getSignatureGiftConfig(); + await this.signinEntity.save({ + userId: userId, + signInTime: new Date(), + signInDate: formattedDate, + isSigned: true, + }); + await this.userBalanceService.addBalanceToUser(userId, { + model3Count, + model4Count, + drawMjCount, + }); + await this.userBalanceService.saveRecordRechargeLog({ + userId, + rechargeType: balance_constant_1.RechargeType.SIGN_IN, + model3Count, + model4Count, + drawMjCount, + }); + const yesterday = (0, date_1.default)(new Date()).subtract(1, 'day').format('YYYY-MM-DD'); + const previousSignin = await this.signinEntity.findOne({ + where: { userId: userId, signInDate: yesterday }, + }); + if (previousSignin) { + common_1.Logger.debug(`用户${userId}昨天签到了、今天是连续签到!`, 'SigninService'); + const userInfo = await this.userEntity.findOne({ where: { id: userId } }); + if (!userInfo) { + throw new common_1.HttpException('用户不存在', common_1.HttpStatus.BAD_REQUEST); + } + const { consecutiveDays = 0 } = userInfo; + await this.userEntity.update({ id: userId }, { consecutiveDays: consecutiveDays + 1 }); + } + else { + common_1.Logger.debug(`用户${userId}昨天没签到、今天重置天数!`, 'SigninService'); + await this.userEntity.update({ id: userId }, { consecutiveDays: 1 }); + } + return 'Sign in successful.'; + } + async getSigninLog(req) { + try { + const { id: userId } = req.user; + const firstDay = (0, date_1.default)().startOf('month').format('YYYY-MM-DD HH:mm:ss'); + const lastDay = (0, date_1.default)().endOf('month').format('YYYY-MM-DD HH:mm:ss'); + const queryBuilder = this.signinEntity.createQueryBuilder('signin'); + const signInData = await queryBuilder + .select('signin.signInDate as signInDate, signin.isSigned as isSigned') + .andWhere('signin.userId = :userId', { userId: req.user.id }) + .andWhere('signin.signInTime >= :firstDay', { firstDay }) + .andWhere('signin.signInTime <= :lastDay', { lastDay }) + .getRawMany(); + const startDate = new Date(firstDay); + const endDate = new Date(lastDay); + const dateRange = []; + const currentDate = new Date(startDate); + while (currentDate <= endDate) { + dateRange.push((0, date_1.default)(new Date(currentDate)).format('YYYY-MM-DD')); + currentDate.setDate(currentDate.getDate() + 1); + } + const res = []; + for (const date of dateRange) { + const existingData = signInData.find(item => item.signInDate === date); + if (!existingData) { + res.push({ signInDate: date, isSigned: false }); + } + else { + existingData.isSigned = true; + res.push(existingData); + } + } + return res; + } + catch (error) { + console.log('error: ', error); + throw new common_1.HttpException('获取签到数据失败!', common_1.HttpStatus.BAD_REQUEST); + } + } +}; +exports.SigninService = SigninService; +exports.SigninService = SigninService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(signIn_entity_1.SigninEntity)), + __param(1, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof userBalance_service_1.UserBalanceService !== "undefined" && userBalance_service_1.UserBalanceService) === "function" ? _c : Object, typeof (_d = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _d : Object]) +], SigninService); + + +/***/ }), +/* 237 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SpaModule = void 0; +const common_1 = __webpack_require__(2); +const spa_controller_1 = __webpack_require__(238); +let SpaModule = class SpaModule { +}; +exports.SpaModule = SpaModule; +exports.SpaModule = SpaModule = __decorate([ + (0, common_1.Module)({ + controllers: [spa_controller_1.SpaController], + }) +], SpaModule); + + +/***/ }), +/* 238 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var SpaController_1; +var _a, _b; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.SpaController = void 0; +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const fs = __webpack_require__(18); +const path_1 = __webpack_require__(20); +let SpaController = SpaController_1 = class SpaController { + logger = new common_1.Logger(SpaController_1.name); + indexPath = (0, path_1.join)(process.cwd(), 'public/chat/index.html'); + publicPath = (0, path_1.join)(process.cwd(), 'public/chat'); + exists; + adminPath; + constructor() { + this.exists = fs.existsSync(this.indexPath); + this.adminPath = process.env.ADMIN_SERVE_ROOT || '/admin'; + common_1.Logger.log(`管理后台路径已配置: ${this.adminPath}`, 'SpaController'); + } + serveClient(req, res, next) { + this.logger.debug(`收到请求: ${req.path}`); + if (req.path.startsWith('/api') || + req.path.startsWith('/file') || + req.path.startsWith(this.adminPath)) { + return next(); + } + const filePath = (0, path_1.join)(this.publicPath, req.path); + if (fs.existsSync(filePath) && !fs.statSync(filePath).isDirectory()) { + return next(); + } + if (!this.exists) { + return res.status(500).send({ code: 500, message: 'SPA入口文件不存在', data: null }); + } + return res.sendFile(this.indexPath); + } +}; +exports.SpaController = SpaController; +__decorate([ + (0, common_1.Get)('*'), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Res)()), + __param(2, (0, common_1.Next)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_a = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _a : Object, typeof (_b = typeof express_1.Response !== "undefined" && express_1.Response) === "function" ? _b : Object, Object]), + __metadata("design:returntype", void 0) +], SpaController.prototype, "serveClient", null); +exports.SpaController = SpaController = SpaController_1 = __decorate([ + (0, swagger_1.ApiTags)('spa'), + (0, common_1.Controller)(), + __metadata("design:paramtypes", []) +], SpaController); + + +/***/ }), +/* 239 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.StatisticModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const chatLog_entity_1 = __webpack_require__(75); +const config_entity_1 = __webpack_require__(73); +const order_entity_1 = __webpack_require__(201); +const user_entity_1 = __webpack_require__(83); +const statistic_controller_1 = __webpack_require__(240); +const statistic_service_1 = __webpack_require__(242); +let StatisticModule = class StatisticModule { +}; +exports.StatisticModule = StatisticModule; +exports.StatisticModule = StatisticModule = __decorate([ + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([user_entity_1.UserEntity, chatLog_entity_1.ChatLogEntity, config_entity_1.ConfigEntity, order_entity_1.OrderEntity])], + controllers: [statistic_controller_1.StatisticController], + providers: [statistic_service_1.StatisticService], + }) +], StatisticModule); + + +/***/ }), +/* 240 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.StatisticController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const queryStatisticDto_dto_1 = __webpack_require__(241); +const statistic_service_1 = __webpack_require__(242); +let StatisticController = class StatisticController { + statisticService; + constructor(statisticService) { + this.statisticService = statisticService; + } + getBaseStatistic() { + return this.statisticService.getBaseStatistic(); + } + getChatStatistic(params) { + return this.statisticService.getChatStatistic(params); + } + getBaiduStatistics(params) { + return this.statisticService.getBaiduVisit(params); + } +}; +exports.StatisticController = StatisticController; +__decorate([ + (0, common_1.Get)('base'), + (0, swagger_1.ApiOperation)({ summary: '获取基础统计数据' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", void 0) +], StatisticController.prototype, "getBaseStatistic", null); +__decorate([ + (0, common_1.Get)('chatStatistic'), + (0, swagger_1.ApiOperation)({ summary: '获取聊天绘画统计数据' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof queryStatisticDto_dto_1.QueryStatisticDto !== "undefined" && queryStatisticDto_dto_1.QueryStatisticDto) === "function" ? _b : Object]), + __metadata("design:returntype", void 0) +], StatisticController.prototype, "getChatStatistic", null); +__decorate([ + (0, common_1.Get)('baiduVisit'), + (0, swagger_1.ApiOperation)({ summary: '获取百度统计数据' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_c = typeof queryStatisticDto_dto_1.QueryStatisticDto !== "undefined" && queryStatisticDto_dto_1.QueryStatisticDto) === "function" ? _c : Object]), + __metadata("design:returntype", void 0) +], StatisticController.prototype, "getBaiduStatistics", null); +exports.StatisticController = StatisticController = __decorate([ + (0, swagger_1.ApiTags)('statistic'), + (0, common_1.Controller)('statistic'), + __metadata("design:paramtypes", [typeof (_a = typeof statistic_service_1.StatisticService !== "undefined" && statistic_service_1.StatisticService) === "function" ? _a : Object]) +], StatisticController); + + +/***/ }), +/* 241 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.QueryStatisticDto = void 0; +const swagger_1 = __webpack_require__(14); +class QueryStatisticDto { + days; +} +exports.QueryStatisticDto = QueryStatisticDto; +__decorate([ + (0, swagger_1.ApiProperty)({ example: 7, description: '查询最近N天的数据', required: true }), + __metadata("design:type", Number) +], QueryStatisticDto.prototype, "days", void 0); + + +/***/ }), +/* 242 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.StatisticService = void 0; +const balance_constant_1 = __webpack_require__(35); +const date_1 = __webpack_require__(47); +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const axios_1 = __webpack_require__(39); +const typeorm_2 = __webpack_require__(3); +const chatLog_entity_1 = __webpack_require__(75); +const config_entity_1 = __webpack_require__(73); +const globalConfig_service_1 = __webpack_require__(74); +const order_entity_1 = __webpack_require__(201); +const user_entity_1 = __webpack_require__(83); +let StatisticService = class StatisticService { + userEntity; + chatLogEntity; + configEntity; + orderEntity; + globalConfigService; + constructor(userEntity, chatLogEntity, configEntity, orderEntity, globalConfigService) { + this.userEntity = userEntity; + this.chatLogEntity = chatLogEntity; + this.configEntity = configEntity; + this.orderEntity = orderEntity; + this.globalConfigService = globalConfigService; + } + async getBaseStatistic() { + const userCount = await this.countUsers(); + const newUserCount = await this.countNewUsersToday(); + const chatCount = await this.countChats(); + const newChatCount = await this.countNewChatsToday(); + const drawCount = await this.countDraws(); + const dellDrawCount = await this.countNewDrawsToday(); + const orderCount = await this.countOrders(); + const newOrderCount = await this.countNewOrdersToday(); + return { + userCount, + newUserCount, + chatCount, + newChatCount, + drawCount, + newDrawCount: dellDrawCount, + orderCount, + newOrderCount, + }; + } + async getChatStatistic({ days = 7 }) { + const chatData = await this.countChatsByTimeRange(days); + const drawData = await this.countDrawsByTimeRange(days); + return { + date: chatData.map(item => item.date), + chat: chatData.map((item) => item.value), + draw: drawData.map((item, index) => { + return item.value; + }), + }; + } + async getBaiduVisit({ days = 7 }) { + const data = await this.getBaiduStatistics(days); + return data; + } + async countUsers() { + const userCount = await this.userEntity.count(); + return userCount; + } + async countNewUsersToday() { + const today = new Date(); + today.setHours(0, 0, 0, 0); + const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000); + const queryBuilder = this.userEntity.createQueryBuilder('user'); + const userCount = await queryBuilder + .where('user.createdAt >= :today', { today }) + .andWhere('user.createdAt < :tomorrow', { tomorrow }) + .getCount(); + return userCount; + } + async countChats() { + const chatCount = await this.chatLogEntity.count({ + where: { type: balance_constant_1.ChatType.NORMAL_CHAT }, + }); + return chatCount; + } + async countNewChatsToday() { + const today = new Date(); + today.setHours(0, 0, 0, 0); + const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000); + const queryBuilder = this.chatLogEntity.createQueryBuilder('chatLog'); + const chatCount = await queryBuilder + .where('chatLog.type = :type', { type: balance_constant_1.ChatType.NORMAL_CHAT }) + .andWhere('chatLog.createdAt >= :today', { today }) + .andWhere('chatLog.createdAt < :tomorrow', { tomorrow }) + .getCount(); + return chatCount; + } + async countDraws() { + const drawCount = await this.chatLogEntity.count({ + where: { type: balance_constant_1.ChatType.PAINT }, + }); + return drawCount; + } + async countNewDrawsToday() { + const today = new Date(); + today.setHours(0, 0, 0, 0); + const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000); + const queryBuilder = this.chatLogEntity.createQueryBuilder('chatLog'); + const drawCount = await queryBuilder + .where('chatLog.type = :type', { type: balance_constant_1.ChatType.PAINT }) + .andWhere('chatLog.createdAt >= :today', { today }) + .andWhere('chatLog.createdAt < :tomorrow', { tomorrow }) + .getCount(); + return drawCount; + } + async countChatsByTimeRange(days) { + const today = new Date(); + today.setHours(0, 0, 0, 0); + const startDate = new Date(today.getTime() - (days - 1) * 24 * 60 * 60 * 1000); + const queryBuilder = this.chatLogEntity.createQueryBuilder('chatlog'); + const result = await queryBuilder + .select(`DATE(chatlog.createdAt) as date, COUNT(*) as count`) + .where(`chatlog.type = :type`, { type: balance_constant_1.ChatType.NORMAL_CHAT }) + .andWhere('chatlog.createdAt >= :startDate', { startDate }) + .groupBy('date') + .orderBy('date') + .getRawMany(); + const dailyData = []; + const currentDate = startDate; + for (let i = 0; i < days; i++) { + const dateString = (0, date_1.formatDate)(new Date(currentDate), 'M.DD'); + const count = result.find((r) => (0, date_1.formatDate)(new Date(r.date), 'M.DD') === dateString)?.count ?? 0; + if (count > 0) { + dailyData.push({ date: dateString, value: Number(count) }); + } + else { + dailyData.push({ date: dateString, value: 0 }); + } + currentDate.setDate(currentDate.getDate() + 1); + } + return dailyData; + } + async countDrawsByTimeRange(days) { + const today = new Date(); + today.setHours(0, 0, 0, 0); + const startDate = new Date(today.getTime() - (days - 1) * 24 * 60 * 60 * 1000); + const queryBuilder = this.chatLogEntity.createQueryBuilder('chatlog'); + const result = await queryBuilder + .select(`DATE(chatlog.createdAt) as date, COUNT(*) as count`) + .where(`chatlog.type = :type`, { type: balance_constant_1.ChatType.PAINT }) + .andWhere('chatlog.createdAt >= :startDate', { startDate }) + .groupBy('date') + .orderBy('date') + .getRawMany(); + const dailyData = []; + const currentDate = startDate; + for (let i = 0; i < days; i++) { + const dateString = (0, date_1.formatDate)(new Date(currentDate), 'M.DD'); + const count = result.find((r) => (0, date_1.formatDate)(new Date(r.date), 'M.DD') === dateString)?.count ?? 0; + if (count > 0) { + dailyData.push({ date: dateString, value: Number(count) }); + } + else { + dailyData.push({ date: dateString, value: 0 }); + } + currentDate.setDate(currentDate.getDate() + 1); + } + return dailyData; + } + async getNewAccessToken(baiduApiKey, baiduSecretKey, baiduRefreshToken) { + const tokenUrl = `http://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token=${baiduRefreshToken}&client_id=${baiduApiKey}&client_secret=${baiduSecretKey}`; + common_1.Logger.log('获取新 accessToken', tokenUrl); + try { + const tokenRes = await axios_1.default.get(tokenUrl); + if (tokenRes.status === 200 && tokenRes.data.access_token) { + return { + accessToken: tokenRes.data.access_token, + refreshToken: tokenRes.data.refresh_token, + }; + } + else { + throw new Error('Failed to get new access token'); + } + } + catch (tokenError) { + common_1.Logger.error('获取新 accessToken 失败', { + message: tokenError.message, + stack: tokenError.stack, + response: tokenError.response ? tokenError.response.data : 'No response data', + }); + throw new common_1.HttpException('获取新 accessToken 失败', common_1.HttpStatus.BAD_REQUEST); + } + } + async updateAccessTokenInDatabase(accessToken, refreshToken, configEntity) { + await configEntity.update({ configKey: 'baiduToken' }, { configVal: accessToken }); + await configEntity.update({ configKey: 'baiduRefreshToken' }, { configVal: refreshToken }); + } + async getBaiduStatistics(days) { + const end_date = (0, date_1.formatDate)(new Date(), 'YYYYMMDD'); + const start_date = (0, date_1.formatDate)(new Date(Date.now() - Number(days - 1) * 24 * 60 * 60 * 1000), 'YYYYMMDD'); + const metrics = 'pv_count,visitor_count,ip_count,bounce_ratio,avg_visit_time'; + const method = 'overview/getTimeTrendRpt'; + const { baiduToken, baiduSiteId, baiduApiKey, baiduSecretKey, baiduRefreshToken } = await this.globalConfigService.getConfigs([ + 'baiduToken', + 'baiduSiteId', + 'baiduApiKey', + 'baiduSecretKey', + 'baiduRefreshToken', + ]); + if (!baiduApiKey || !baiduSiteId || !baiduRefreshToken || !baiduSecretKey) { + return []; + } + let accessToken = baiduToken; + let res; + let url; + const fetchData = async (token) => { + url = `https://openapi.baidu.com/rest/2.0/tongji/report/getData?access_token=${token}&site_id=${baiduSiteId}&method=${method}&start_date=${start_date}&end_date=${end_date}&metrics=${metrics}`; + try { + return await axios_1.default.get(url); + } + catch (error) { + return { + data: { + error_code: 111, + message: 'Access token invalid or no longer valid', + }, + }; + } + }; + res = await fetchData(accessToken); + if (res.data.error_code === 111 || !baiduToken) { + const { accessToken: newAccessToken, refreshToken: newRefreshToken } = await this.getNewAccessToken(baiduApiKey, baiduSecretKey, baiduRefreshToken); + accessToken = newAccessToken; + await this.updateAccessTokenInDatabase(accessToken, newRefreshToken, this.configEntity); + res = await fetchData(accessToken); + } + const { error_code, message } = res.data; + if (error_code && error_code !== 200) { + throw new common_1.HttpException(message || '获取百度统计数据失败', common_1.HttpStatus.BAD_REQUEST); + } + return res.data.result; + } + async countOrders() { + const orderCount = await this.orderEntity.count(); + return orderCount; + } + async countNewOrdersToday() { + const today = new Date(); + today.setHours(0, 0, 0, 0); + const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000); + const queryBuilder = this.orderEntity.createQueryBuilder('order'); + const orderCount = await queryBuilder + .where('order.createdAt >= :today', { today }) + .andWhere('order.createdAt < :tomorrow', { tomorrow }) + .getCount(); + return orderCount; + } +}; +exports.StatisticService = StatisticService; +exports.StatisticService = StatisticService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), + __param(1, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)), + __param(2, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), + __param(3, (0, typeorm_1.InjectRepository)(order_entity_1.OrderEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _d : Object, typeof (_e = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _e : Object]) +], StatisticService); + + +/***/ }), +/* 243 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TaskModule = void 0; +const common_1 = __webpack_require__(2); +const schedule_1 = __webpack_require__(244); +const typeorm_1 = __webpack_require__(33); +const globalConfig_module_1 = __webpack_require__(204); +const models_module_1 = __webpack_require__(208); +const userBalance_entity_1 = __webpack_require__(81); +const task_service_1 = __webpack_require__(245); +let TaskModule = class TaskModule { +}; +exports.TaskModule = TaskModule; +exports.TaskModule = TaskModule = __decorate([ + (0, common_1.Module)({ + imports: [ + schedule_1.ScheduleModule.forRoot(), + typeorm_1.TypeOrmModule.forFeature([userBalance_entity_1.UserBalanceEntity]), + globalConfig_module_1.GlobalConfigModule, + models_module_1.ModelsModule, + ], + providers: [task_service_1.TaskService], + }) +], TaskModule); + + +/***/ }), +/* 244 */ +/***/ ((module) => { + +module.exports = require("@nestjs/schedule"); + +/***/ }), +/* 245 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.TaskService = void 0; +const common_1 = __webpack_require__(2); +const schedule_1 = __webpack_require__(244); +const typeorm_1 = __webpack_require__(33); +const fs = __webpack_require__(18); +const path = __webpack_require__(20); +const typeorm_2 = __webpack_require__(3); +const models_service_1 = __webpack_require__(76); +const userBalance_entity_1 = __webpack_require__(81); +const globalConfig_service_1 = __webpack_require__(74); +let TaskService = class TaskService { + userBalanceEntity; + globalConfigService; + modelsService; + constructor(userBalanceEntity, globalConfigService, modelsService) { + this.userBalanceEntity = userBalanceEntity; + this.globalConfigService = globalConfigService; + this.modelsService = modelsService; + } + handleCron() { + common_1.Logger.debug('Automatically refresh WeChat access every hour Token', 'TaskService'); + this.globalConfigService.getWechatAccessToken(); + } + async checkUserMemerExpire() { + const expireUsers = await this.userBalanceEntity.find({ + where: { expirationTime: (0, typeorm_2.LessThanOrEqual)(new Date()) }, + }); + if (!expireUsers || !expireUsers.length) + return; + expireUsers.forEach((user) => { + this.userBalanceEntity + .update({ id: user.id }, { + expirationTime: null, + packageId: 0, + memberModel3Count: 0, + memberModel4Count: 0, + memberDrawMjCount: 0, + appCats: '', + }) + .then(res => { + common_1.Logger.debug(`${user.id}会员已到期、清空所有余额并移除会员身份!`, 'TaskService'); + }); + }); + } + findFilePath(filename) { + const possiblePaths = [ + path.join(process.cwd(), filename), + path.join(__dirname, '..', '..', '..', filename), + path.join(__dirname, filename), + path.resolve(filename), + path.join(process.cwd(), '..', filename), + path.join(process.cwd(), 'dist', filename), + ]; + for (const filePath of possiblePaths) { + if (fs.existsSync(filePath)) { + return filePath; + } + } + return null; + } +}; +exports.TaskService = TaskService; +__decorate([ + (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_HOUR), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", void 0) +], TaskService.prototype, "handleCron", null); +__decorate([ + (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_5_MINUTES), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], TaskService.prototype, "checkUserMemerExpire", null); +exports.TaskService = TaskService = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(userBalance_entity_1.UserBalanceEntity)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof globalConfig_service_1.GlobalConfigService !== "undefined" && globalConfig_service_1.GlobalConfigService) === "function" ? _b : Object, typeof (_c = typeof models_service_1.ModelsService !== "undefined" && models_service_1.ModelsService) === "function" ? _c : Object]) +], TaskService); + + +/***/ }), +/* 246 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UploadModule = void 0; +const common_1 = __webpack_require__(2); +const redisCache_module_1 = __webpack_require__(26); +const upload_controller_1 = __webpack_require__(247); +const upload_service_1 = __webpack_require__(160); +let UploadModule = class UploadModule { +}; +exports.UploadModule = UploadModule; +exports.UploadModule = UploadModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [redisCache_module_1.RedisCacheModule], + providers: [upload_service_1.UploadService], + controllers: [upload_controller_1.UploadController], + exports: [upload_service_1.UploadService], + }) +], UploadModule); + + +/***/ }), +/* 247 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UploadController = void 0; +const jwtAuth_guard_1 = __webpack_require__(87); +const common_1 = __webpack_require__(2); +const platform_express_1 = __webpack_require__(248); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const upload_service_1 = __webpack_require__(160); +let UploadController = class UploadController { + uploadService; + constructor(uploadService) { + this.uploadService = uploadService; + } + async uploadFile(file, req, dir) { + return this.uploadService.uploadFile(file, dir, req.user); + } +}; +exports.UploadController = UploadController; +__decorate([ + (0, common_1.Post)('file'), + (0, swagger_1.ApiOperation)({ summary: '上传文件' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseInterceptors)((0, platform_express_1.FileInterceptor)('file', { + limits: { + fileSize: 10 * 1024 * 1024, + }, + })), + __param(0, (0, common_1.UploadedFile)()), + __param(1, (0, common_1.Req)()), + __param(2, (0, common_1.Query)('dir')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, typeof (_b = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _b : Object, String]), + __metadata("design:returntype", Promise) +], UploadController.prototype, "uploadFile", null); +exports.UploadController = UploadController = __decorate([ + (0, swagger_1.ApiTags)('upload'), + (0, common_1.Controller)('upload'), + __metadata("design:paramtypes", [typeof (_a = typeof upload_service_1.UploadService !== "undefined" && upload_service_1.UploadService) === "function" ? _a : Object]) +], UploadController); + + +/***/ }), +/* 248 */ +/***/ ((module) => { + +module.exports = require("@nestjs/platform-express"); + +/***/ }), +/* 249 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserBalanceModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const app_entity_1 = __webpack_require__(106); +const app_service_1 = __webpack_require__(105); +const appCats_entity_1 = __webpack_require__(107); +const userApps_entity_1 = __webpack_require__(108); +const chatGroup_entity_1 = __webpack_require__(82); +const chatLog_entity_1 = __webpack_require__(75); +const cramiPackage_entity_1 = __webpack_require__(71); +const config_entity_1 = __webpack_require__(73); +const globalConfig_module_1 = __webpack_require__(204); +const redisCache_service_1 = __webpack_require__(28); +const user_entity_1 = __webpack_require__(83); +const verification_entity_1 = __webpack_require__(101); +const verification_service_1 = __webpack_require__(100); +const accountLog_entity_1 = __webpack_require__(79); +const balance_entity_1 = __webpack_require__(80); +const fingerprint_entity_1 = __webpack_require__(84); +const userBalance_controller_1 = __webpack_require__(250); +const userBalance_entity_1 = __webpack_require__(81); +const userBalance_service_1 = __webpack_require__(34); +let UserBalanceModule = class UserBalanceModule { +}; +exports.UserBalanceModule = UserBalanceModule; +exports.UserBalanceModule = UserBalanceModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + imports: [ + typeorm_1.TypeOrmModule.forFeature([ + appCats_entity_1.AppCatsEntity, + app_entity_1.AppEntity, + userApps_entity_1.UserAppsEntity, + accountLog_entity_1.AccountLogEntity, + balance_entity_1.BalanceEntity, + userBalance_entity_1.UserBalanceEntity, + cramiPackage_entity_1.CramiPackageEntity, + config_entity_1.ConfigEntity, + chatGroup_entity_1.ChatGroupEntity, + chatLog_entity_1.ChatLogEntity, + user_entity_1.UserEntity, + verification_entity_1.VerificationEntity, + fingerprint_entity_1.FingerprintLogEntity, + ]), + globalConfig_module_1.GlobalConfigModule, + ], + controllers: [userBalance_controller_1.UserBalanceController], + providers: [userBalance_service_1.UserBalanceService, verification_service_1.VerificationService, redisCache_service_1.RedisCacheService, app_service_1.AppService], + exports: [userBalance_service_1.UserBalanceService, app_service_1.AppService, typeorm_1.TypeOrmModule], + }) +], UserBalanceModule); + + +/***/ }), +/* 250 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var _a, _b, _c, _d, _e, _f; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.UserBalanceController = void 0; +const adminAuth_guard_1 = __webpack_require__(86); +const jwtAuth_guard_1 = __webpack_require__(87); +const common_1 = __webpack_require__(2); +const swagger_1 = __webpack_require__(14); +const express_1 = __webpack_require__(104); +const userBalance_service_1 = __webpack_require__(34); +let UserBalanceController = class UserBalanceController { + userBalanceService; + constructor(userBalanceService) { + this.userBalanceService = userBalanceService; + } + async getRechargeLog(req, params) { + return this.userBalanceService.getRechargeLog(req, params); + } + async getAccountLog(req, params) { + return this.userBalanceService.getAccountLog(req, params); + } + async getBalance(req) { + return this.userBalanceService.queryUserBalance(req.user.id); + } + async inheritVisitorData(req) { + return this.userBalanceService.inheritVisitorData(req); + } + async getVisitorCount(req) { + return this.userBalanceService.getVisitorCount(req); + } +}; +exports.UserBalanceController = UserBalanceController; +__decorate([ + (0, common_1.Get)('rechargeLog'), + (0, swagger_1.ApiOperation)({ summary: '获取个人充值记录' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_b = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _b : Object, Object]), + __metadata("design:returntype", Promise) +], UserBalanceController.prototype, "getRechargeLog", null); +__decorate([ + (0, common_1.Get)('accountLog'), + (0, swagger_1.ApiOperation)({ summary: '获取所有人账户记录' }), + (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_c = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _c : Object, Object]), + __metadata("design:returntype", Promise) +], UserBalanceController.prototype, "getAccountLog", null); +__decorate([ + (0, common_1.Get)('query'), + (0, swagger_1.ApiOperation)({ summary: '获取个人余额信息' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_d = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _d : Object]), + __metadata("design:returntype", Promise) +], UserBalanceController.prototype, "getBalance", null); +__decorate([ + (0, common_1.Post)('inheritVisitorData'), + (0, swagger_1.ApiOperation)({ summary: '继承当前设备数据' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_e = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _e : Object]), + __metadata("design:returntype", Promise) +], UserBalanceController.prototype, "inheritVisitorData", null); +__decorate([ + (0, common_1.Get)('getVisitorCount'), + (0, swagger_1.ApiOperation)({ summary: '获取本机指纹数据' }), + (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), + (0, swagger_1.ApiBearerAuth)(), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [typeof (_f = typeof express_1.Request !== "undefined" && express_1.Request) === "function" ? _f : Object]), + __metadata("design:returntype", Promise) +], UserBalanceController.prototype, "getVisitorCount", null); +exports.UserBalanceController = UserBalanceController = __decorate([ + (0, swagger_1.ApiTags)('balance'), + (0, common_1.Controller)('balance'), + __metadata("design:paramtypes", [typeof (_a = typeof userBalance_service_1.UserBalanceService !== "undefined" && userBalance_service_1.UserBalanceService) === "function" ? _a : Object]) +], UserBalanceController); + + +/***/ }), +/* 251 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.VerificationModule = void 0; +const common_1 = __webpack_require__(2); +const typeorm_1 = __webpack_require__(33); +const redisCache_service_1 = __webpack_require__(28); +const verification_entity_1 = __webpack_require__(101); +const verification_service_1 = __webpack_require__(100); +let VerificationModule = class VerificationModule { +}; +exports.VerificationModule = VerificationModule; +exports.VerificationModule = VerificationModule = __decorate([ + (0, common_1.Module)({ + imports: [typeorm_1.TypeOrmModule.forFeature([verification_entity_1.VerificationEntity])], + providers: [redisCache_service_1.RedisCacheService, verification_service_1.VerificationService], + }) +], VerificationModule); + + +/***/ }), +/* 252 */ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + + +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.AllExceptionsFilter = void 0; +const common_1 = __webpack_require__(2); +let AllExceptionsFilter = class AllExceptionsFilter { + catch(exception, host) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + const _request = ctx.getRequest(); + if (exception instanceof common_1.HttpException) { + const status = exception.getStatus(); + const exceptionResponse = exception.getResponse(); + if (status === common_1.HttpStatus.BAD_REQUEST && Array.isArray(exceptionResponse?.message)) { + response.status(status).json({ + code: status, + message: exceptionResponse.message[0], + data: null, + }); + return; + } + response.status(status).json({ + code: status, + message: exception.message, + data: null, + }); + return; + } + response.status(common_1.HttpStatus.INTERNAL_SERVER_ERROR).json({ + code: common_1.HttpStatus.INTERNAL_SERVER_ERROR, + message: '服务器内部错误', + data: null, + }); + } +}; +exports.AllExceptionsFilter = AllExceptionsFilter; +exports.AllExceptionsFilter = AllExceptionsFilter = __decorate([ + (0, common_1.Catch)() +], AllExceptionsFilter); + + +/***/ }), +/* 253 */ +/***/ ((__unused_webpack_module, exports, __webpack_require__) => { + + +Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.initDatabase = initDatabase; +const common_1 = __webpack_require__(2); +const dotenv_1 = __webpack_require__(17); +const mysql = __webpack_require__(254); +const typeorm_1 = __webpack_require__(3); +const app_entity_1 = __webpack_require__(106); +const appCats_entity_1 = __webpack_require__(107); +const userApps_entity_1 = __webpack_require__(108); +const autoReply_entity_1 = __webpack_require__(136); +const badWords_entity_1 = __webpack_require__(144); +const violationLog_entity_1 = __webpack_require__(145); +const chatGroup_entity_1 = __webpack_require__(82); +const chatLog_entity_1 = __webpack_require__(75); +const crami_entity_1 = __webpack_require__(190); +const cramiPackage_entity_1 = __webpack_require__(71); +const config_entity_1 = __webpack_require__(73); +const models_entity_1 = __webpack_require__(78); +const order_entity_1 = __webpack_require__(201); +const plugin_entity_1 = __webpack_require__(159); +const share_entity_1 = __webpack_require__(202); +const signIn_entity_1 = __webpack_require__(203); +const user_entity_1 = __webpack_require__(83); +const accountLog_entity_1 = __webpack_require__(79); +const balance_entity_1 = __webpack_require__(80); +const fingerprint_entity_1 = __webpack_require__(84); +const userBalance_entity_1 = __webpack_require__(81); +const verification_entity_1 = __webpack_require__(101); +(0, dotenv_1.config)(); +const dataSourceOptions = { + type: 'mysql', + port: parseInt(process.env.DB_PORT, 10), + host: process.env.DB_HOST, + username: process.env.DB_USER, + password: process.env.DB_PASS, + database: process.env.DB_DATABASE, + entities: [ + share_entity_1.Share, + autoReply_entity_1.AutoReplyEntity, + crami_entity_1.CramiEntity, + cramiPackage_entity_1.CramiPackageEntity, + badWords_entity_1.BadWordsEntity, + chatGroup_entity_1.ChatGroupEntity, + verification_entity_1.VerificationEntity, + signIn_entity_1.SigninEntity, + violationLog_entity_1.ViolationLogEntity, + models_entity_1.ModelsEntity, + user_entity_1.UserEntity, + accountLog_entity_1.AccountLogEntity, + fingerprint_entity_1.FingerprintLogEntity, + balance_entity_1.BalanceEntity, + userBalance_entity_1.UserBalanceEntity, + plugin_entity_1.PluginEntity, + config_entity_1.ConfigEntity, + chatLog_entity_1.ChatLogEntity, + userApps_entity_1.UserAppsEntity, + appCats_entity_1.AppCatsEntity, + app_entity_1.AppEntity, + order_entity_1.OrderEntity, + ], + synchronize: false, + charset: 'utf8mb4', + timezone: '+08:00', +}; +async function migrateColumnType(tableName, columnName, targetType, conn) { + try { + const [tables] = (await conn.execute(`SHOW TABLES LIKE '${tableName}'`)); + if (tables.length === 0) { + common_1.Logger.log(`表 ${tableName} 不存在,跳过 ${columnName} 列的迁移`, 'Database'); + return false; + } + const [columns] = (await conn.execute(`SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND COLUMN_NAME = ?`, [process.env.DB_DATABASE, tableName, columnName])); + if (columns.length === 0) { + common_1.Logger.log(`表 ${tableName} 中不存在 ${columnName} 列,跳过迁移`, 'Database'); + return false; + } + const currentType = columns[0].DATA_TYPE.toLowerCase(); + if (currentType === targetType.toLowerCase()) { + common_1.Logger.log(`表 ${tableName} 中的 ${columnName} 列已经是 ${targetType} 类型`, 'Database'); + return false; + } + const [constraints] = (await conn.execute(`SELECT k.CONSTRAINT_NAME + FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE k + WHERE k.TABLE_SCHEMA = ? AND k.TABLE_NAME = ? AND k.COLUMN_NAME = ?`, [process.env.DB_DATABASE, tableName, columnName])); + for (const constraint of constraints) { + if (constraint.CONSTRAINT_NAME) { + common_1.Logger.log(`发现 ${columnName} 列有约束: ${constraint.CONSTRAINT_NAME},尝试删除`, 'Database'); + try { + await conn.execute(`ALTER TABLE ${tableName} DROP FOREIGN KEY ${constraint.CONSTRAINT_NAME}`); + common_1.Logger.log(`成功删除 ${columnName} 外键约束`, 'Database'); + } + catch (constraintError) { + common_1.Logger.error(`删除外键约束失败: ${constraintError.message}`, 'Database'); + } + } + } + const [indexes] = (await conn.execute(`SELECT INDEX_NAME FROM INFORMATION_SCHEMA.STATISTICS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND COLUMN_NAME = ?`, [process.env.DB_DATABASE, tableName, columnName])); + for (const idx of indexes) { + if (idx.INDEX_NAME !== 'PRIMARY') { + common_1.Logger.log(`发现 ${columnName} 是索引 ${idx.INDEX_NAME} 的一部分,尝试删除索引`, 'Database'); + try { + await conn.execute(`ALTER TABLE ${tableName} DROP INDEX ${idx.INDEX_NAME}`); + common_1.Logger.log(`成功删除索引 ${idx.INDEX_NAME}`, 'Database'); + } + catch (indexError) { + common_1.Logger.error(`删除索引失败: ${indexError.message}`, 'Database'); + } + } + } + common_1.Logger.log(`开始将 ${tableName} 表中的 ${columnName} 列类型从 ${currentType} 升级为 ${targetType}`, 'Database'); + await conn.execute(`ALTER TABLE ${tableName} MODIFY COLUMN \`${columnName}\` ${targetType}`); + common_1.Logger.log(`${tableName} 表中的 ${columnName} 列类型已成功升级为 ${targetType}`, 'Database'); + return true; + } + catch (error) { + common_1.Logger.error(`迁移 ${tableName}.${columnName} 列类型时出错:`, error, 'Database'); + return false; + } +} +async function runAllMigrations() { + const conn = await mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASS, + port: parseInt(process.env.DB_PORT, 10), + database: process.env.DB_DATABASE, + }); + try { + try { + await migrateColumnType('config', 'configVal', 'TEXT', conn); + } + catch (error) { + common_1.Logger.log(`迁移config表configVal列时跳过: ${error.message}`, 'Database'); + } + try { + await migrateColumnType('app', 'coverImg', 'TEXT', conn); + } + catch (error) { + common_1.Logger.log(`迁移app表coverImg列时跳过: ${error.message}`, 'Database'); + } + try { + const appCatIdMigrated = await migrateColumnType('app', 'catId', 'TEXT', conn); + if (appCatIdMigrated) { + const [apps] = (await conn.execute(`SELECT id, catId FROM app`)); + for (const app of apps) { + if (app.catId !== null && app.catId !== undefined) { + await conn.execute(`UPDATE app SET catId = ? WHERE id = ?`, [ + app.catId.toString(), + app.id, + ]); + } + } + } + } + catch (error) { + common_1.Logger.log(`迁移app表catId列时跳过: ${error.message}`, 'Database'); + } + const chatlogColumns = ['content', 'fileVectorResult']; + for (const column of chatlogColumns) { + try { + await migrateColumnType('chatlog', column, 'MEDIUMTEXT', conn); + } + catch (error) { + common_1.Logger.log(`迁移chatlog表${column}列时跳过: ${error.message}`, 'Database'); + } + } + } + finally { + await conn.end(); + } +} +async function initDatabase() { + try { + common_1.Logger.log('开始数据库初始化流程', 'Database'); + common_1.Logger.log('执行数据库迁移操作', 'Database'); + await runAllMigrations(); + common_1.Logger.log('数据迁移操作完成,现在执行同步确保所有新表和字段存在', 'Database'); + const dataSource = new typeorm_1.DataSource(dataSourceOptions); + await dataSource.initialize(); + common_1.Logger.log('已连接到数据库,准备同步结构', 'Database'); + if (dataSource.isInitialized) { + await dataSource.destroy(); + } + const syncOptions = { + ...dataSourceOptions, + synchronize: true, + }; + const syncDataSource = new typeorm_1.DataSource(syncOptions); + await syncDataSource.initialize(); + common_1.Logger.log('数据库结构同步完成', 'Database'); + if (syncDataSource.isInitialized) { + await syncDataSource.destroy(); + } + common_1.Logger.log('数据库初始化成功完成', 'Database'); + } + catch (error) { + common_1.Logger.error(`数据库初始化错误: ${error.message}`, 'Database'); + if (error instanceof SyntaxError) { + common_1.Logger.error(`语法错误详情: ${JSON.stringify({ + name: error.name, + message: error.message, + stack: error.stack, + })}`, 'Database'); + } + } +} + + +/***/ }), +/* 254 */ +/***/ ((module) => { + +module.exports = require("mysql2/promise"); + +/***/ }) +/******/ ]); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ var cachedModule = __webpack_module_cache__[moduleId]; +/******/ if (cachedModule !== undefined) { +/******/ return cachedModule.exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +var __webpack_exports__ = {}; +// This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. +(() => { +var exports = __webpack_exports__; + +Object.defineProperty(exports, "__esModule", ({ value: true })); +const typeOrmQueryFailed_filter_1 = __webpack_require__(1); +const transform_interceptor_1 = __webpack_require__(4); +const custom_logger_service_1 = __webpack_require__(8); +const fast_xml_middleware_1 = __webpack_require__(10); +const common_1 = __webpack_require__(2); +const core_1 = __webpack_require__(13); +const swagger_1 = __webpack_require__(14); +const compression = __webpack_require__(15); +const crypto_1 = __webpack_require__(16); +const Dotenv = __webpack_require__(17); +const fs = __webpack_require__(18); +const ioredis_1 = __webpack_require__(19); +const path = __webpack_require__(20); +__webpack_require__(21); +const app_module_1 = __webpack_require__(22); +const allExceptions_filter_1 = __webpack_require__(252); Dotenv.config({ path: '.env' }); +function findFilePath(filename) { + const possiblePaths = [ + path.join(process.cwd(), filename), + path.join(__dirname, '..', filename), + path.join(__dirname, filename), + path.resolve(filename), + path.join(process.cwd(), '..', filename), + path.join(process.cwd(), 'dist', filename), + ]; + for (const filePath of possiblePaths) { + if (fs.existsSync(filePath)) { + return filePath; + } + } + return null; +} async function bootstrap() { + console.log('\n======================================'); + console.log(' 99AI 服务启动中... '); + console.log('======================================\n'); const redis = new ioredis_1.default({ host: process.env.REDIS_HOST, port: Number(process.env.REDIS_PORT), @@ -27,28 +19647,91 @@ async function bootstrap() { common_1.Logger.log('Generating and setting new JWT_SECRET'); await redis.set('JWT_SECRET', jwtSecret); } - const app = await core_1.NestFactory.create(app_module_1.AppModule); - await (0, initDatabase_1.initDatabase)(); + const { initDatabase } = __webpack_require__(253); + const app = await core_1.NestFactory.create(app_module_1.AppModule, { + bufferLogs: true, + logger: ['log', 'error', 'warn', 'debug', 'verbose'], + }); + try { + common_1.Logger.log('正在预初始化数据库结构...', 'Bootstrap'); + await initDatabase(); + common_1.Logger.log('数据库结构预初始化完成', 'Bootstrap'); + } + catch (dbError) { + common_1.Logger.error(`数据库预初始化失败: ${dbError.message}`, 'Bootstrap'); + } app.useLogger(app.get(custom_logger_service_1.CustomLoggerService)); - app.use(compression()); - app.use(xmlBodyParser()); + const xmlMiddleware = new fast_xml_middleware_1.FastXmlMiddleware(); + app.use(xmlMiddleware.use.bind(xmlMiddleware)); + app.use(compression({ + filter: (req, res) => { + if (req.path.includes('/api/chatgpt/chat-process')) { + return false; + } + return compression.filter(req, res); + }, + })); app.enableCors({ origin: '*', methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', preflightContinue: false, optionsSuccessStatus: 204, }); - app.setGlobalPrefix('/api'); + app.setGlobalPrefix('/api', { + exclude: [{ path: '*', method: common_1.RequestMethod.GET }], + }); app.useGlobalInterceptors(new transform_interceptor_1.TransformInterceptor()); app.useGlobalFilters(new typeOrmQueryFailed_filter_1.TypeOrmQueryFailedFilter()); app.useGlobalFilters(new allExceptions_filter_1.AllExceptionsFilter()); app.useGlobalPipes(new common_1.ValidationPipe()); app.getHttpAdapter().getInstance().set('views', 'templates/pages'); app.getHttpAdapter().getInstance().set('view engine', 'hbs'); + if (process.env.ISDEV === 'true') { + const config = new swagger_1.DocumentBuilder() + .setTitle('99AI API') + .setDescription('99AI服务API文档') + .setVersion('1.0') + .addBearerAuth() + .build(); + const document = swagger_1.SwaggerModule.createDocument(app, config); + const responseSchema = { + type: 'object', + properties: { + code: { type: 'number', example: 200 }, + data: { type: 'object' }, + success: { type: 'boolean', example: true }, + message: { type: 'string', example: '请求成功' }, + }, + }; + Object.values(document.paths).forEach(path => { + Object.values(path).forEach(method => { + method.responses = { + ...method.responses, + '200': { + description: '成功响应', + content: { + 'application/json': { + schema: responseSchema, + }, + }, + }, + }; + }); + }); + swagger_1.SwaggerModule.setup('api-docs', app, document); + common_1.Logger.log('Swagger API文档已启用: http://localhost:' + (process.env.PORT || 3000) + '/api-docs', 'Main'); + } const PORT = process.env.PORT || 3000; const server = await app.listen(PORT, () => { - common_1.Logger.log(`服务启动成功: http://localhost:${PORT}`, 'Main'); + console.log('\n======================================'); + console.log(` 服务启动成功: http://localhost:${PORT}`); + console.log('======================================\n'); }); server.timeout = 5 * 60 * 1000; } bootstrap(); + +})(); + +/******/ })() +; \ No newline at end of file diff --git a/AIWebQuickDeploy/dist/modules/ai/aiPPT.js b/AIWebQuickDeploy/dist/modules/ai/aiPPT.js deleted file mode 100644 index d4a04e7..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/aiPPT.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var AiPptService_1; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AiPptService = void 0; -const common_1 = require("@nestjs/common"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const models_service_1 = require("../models/models.service"); -const upload_service_1 = require("../upload/upload.service"); -const openaiChat_service_1 = require("./openaiChat.service"); -let AiPptService = AiPptService_1 = class AiPptService { - constructor(uploadService, globalConfigService, chatLogService, openAIChatService, modelsService) { - this.uploadService = uploadService; - this.globalConfigService = globalConfigService; - this.chatLogService = chatLogService; - this.openAIChatService = openAIChatService; - this.modelsService = modelsService; - this.logger = new common_1.Logger(AiPptService_1.name); - } - async aiPPT(inputs) { - return; - } - async pptCover(inputs) { - return; - } -}; -AiPptService = AiPptService_1 = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [upload_service_1.UploadService, - globalConfig_service_1.GlobalConfigService, - chatLog_service_1.ChatLogService, - openaiChat_service_1.OpenAIChatService, - models_service_1.ModelsService]) -], AiPptService); -exports.AiPptService = AiPptService; diff --git a/AIWebQuickDeploy/dist/modules/ai/cogVideo.service.js b/AIWebQuickDeploy/dist/modules/ai/cogVideo.service.js deleted file mode 100644 index faca2ee..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/cogVideo.service.js +++ /dev/null @@ -1,214 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CogVideoService = void 0; -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const upload_service_1 = require("../upload/upload.service"); -let CogVideoService = class CogVideoService { - constructor(chatLogService, globalConfigService, uploadService) { - this.chatLogService = chatLogService; - this.globalConfigService = globalConfigService; - this.uploadService = uploadService; - } - async cogVideo(inputs) { - var _a, _b, _c; - const { apiKey, proxyUrl, fileInfo, prompt, timeout, assistantLogId } = inputs; - let result = { - text: '', - fileInfo: '', - taskId: '', - taskData: '', - status: 2, - }; - let response = null; - let url = ''; - let payloadJson = {}; - const headers = { Authorization: `Bearer ${apiKey}` }; - url = `${proxyUrl}/cogvideox/v4/videos/generations`; - payloadJson = { - model: 'cogvideox', - prompt: prompt, - }; - if (fileInfo) { - payloadJson['image_url'] = fileInfo; - } - common_1.Logger.log(`正在准备发送请求到 ${url},payload: ${JSON.stringify(payloadJson)}, headers: ${JSON.stringify(headers)}`, 'CogService'); - try { - response = await axios_1.default.post(url, payloadJson, { headers }); - common_1.Logger.debug(`任务提交结果,状态码: ${response.status}, 状态消息: ${response.statusText}, 数据: ${JSON.stringify(response.data)}`); - } - catch (error) { - common_1.Logger.error(`任务提交失败: ${error.message}`, 'CogService'); - throw new Error('任务提交失败'); - } - if ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.id) { - result.taskId = (_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.id; - common_1.Logger.log(`任务提交成功, 任务ID: ${(_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.id}`, 'CogService'); - } - else { - throw new Error('未能获取结果数据, 即将重试'); - } - try { - await this.pollCogVideoResult({ - proxyUrl, - apiKey, - taskId: response.data.id, - timeout, - prompt, - onSuccess: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl, - audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl, - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: 3, - taskId: data === null || data === void 0 ? void 0 : data.taskId, - taskData: data === null || data === void 0 ? void 0 : data.taskData, - }); - common_1.Logger.log('视频任务已完成', 'CogService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'CogService'); - } - }, - onGenerating: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl, - audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl, - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || '视频生成中...', - progress: data === null || data === void 0 ? void 0 : data.progress, - status: data.status, - }); - common_1.Logger.log('视频生成中...', 'CogService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'CogService'); - } - }, - onFailure: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '视频生成失败', - status: data.status, - }); - common_1.Logger.log('生成失败', 'Lum aService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'CogService'); - } - }, - }); - } - catch (error) { - common_1.Logger.error('查询生成结果时发生错误:', error.message, 'CogService'); - throw new Error('查询生成结果时发生错误'); - } - return result; - } - async pollCogVideoResult(inputs) { - const { proxyUrl, apiKey, taskId, timeout, onSuccess, onFailure, onGenerating, prompt, action, } = inputs; - let result = { - videoUrl: '', - audioUrl: '', - fileInfo: '', - drawId: '', - taskData: '', - status: 2, - progress: 0, - answer: '', - }; - const headers = { Authorization: `Bearer ${apiKey}` }; - const url = `${proxyUrl}/cogvideox/v4/async-result/${taskId}`; - const startTime = Date.now(); - const totalDuration = 300000; - const POLL_INTERVAL = 5000; - let retryCount = 0; - try { - while (Date.now() - startTime < timeout) { - await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL)); - try { - const res = await axios_1.default.get(url, { headers }); - const interval = setInterval(() => { - const elapsed = Date.now() - startTime; - let percentage = Math.floor((elapsed / totalDuration) * 100); - if (percentage >= 99) - percentage = 99; - result.answer = `视频生成中 (${percentage}%)`; - }, 1000); - const responses = res.data; - common_1.Logger.debug(`轮询结果: ${JSON.stringify(responses)}`, 'CogService'); - if (responses.task_status === 'SUCCESS') { - result.taskId = responses.request_id; - result.taskData = JSON.stringify(responses); - common_1.Logger.log('视频生成成功', 'CogService'); - result.fileInfo = responses.video_result[0].url; - common_1.Logger.log(result.fileInfo, 'CogService'); - try { - const localStorageStatus = await this.globalConfigService.getConfigs([ - 'localStorageStatus', - ]); - if (Number(localStorageStatus)) { - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const currentDate = `${year}${month}/${day}`; - result.fileInfo = await this.uploadService.uploadFileFromUrl({ - url: responses.video_result[0].url, - dir: `video/cog/${currentDate}`, - }); - } - } - catch (error) { - common_1.Logger.error(`上传文件失败: ${error.message}`, 'CogService'); - } - result.answer = `提示词: "${prompt}"`; - onSuccess(result); - clearInterval(interval); - return; - } - else { - onGenerating(result); - } - if (result.progress) { - } - } - catch (error) { - retryCount++; - common_1.Logger.error(`轮询失败,重试次数: ${retryCount}`, 'CogService'); - } - } - common_1.Logger.error('轮询超时,请稍后再试!', 'CogService'); - result.status = 4; - onFailure(result); - throw new Error('查询超时,请稍后再试!'); - } - catch (error) { - common_1.Logger.error(`轮询过程中发生错误: ${error}`, 'CogService'); - result.status = 5; - onFailure(result); - } - } -}; -CogVideoService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [chatLog_service_1.ChatLogService, - globalConfig_service_1.GlobalConfigService, - upload_service_1.UploadService]) -], CogVideoService); -exports.CogVideoService = CogVideoService; diff --git a/AIWebQuickDeploy/dist/modules/ai/fluxDraw.service.js b/AIWebQuickDeploy/dist/modules/ai/fluxDraw.service.js deleted file mode 100644 index 728d4da..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/fluxDraw.service.js +++ /dev/null @@ -1,148 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var FluxDrawService_1; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FluxDrawService = void 0; -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const upload_service_1 = require("../upload/upload.service"); -const openaiChat_service_1 = require("./openaiChat.service"); -let FluxDrawService = FluxDrawService_1 = class FluxDrawService { - constructor(uploadService, globalConfigService, chatLogService, openAIChatService) { - this.uploadService = uploadService; - this.globalConfigService = globalConfigService; - this.chatLogService = chatLogService; - this.openAIChatService = openAIChatService; - this.logger = new common_1.Logger(FluxDrawService_1.name); - } - async fluxDraw(inputs, buildMessageFromParentMessageId) { - var _a, _b, _c, _d; - common_1.Logger.log('开始提交 Flux 绘图任务 ', 'DrawService'); - const { apiKey, model, proxyUrl, prompt, extraParam, timeout, onSuccess, onFailure, groupId, } = inputs; - const isDalleChat = await this.globalConfigService.getConfigs([ - 'isDalleChat', - ]); - let drawPrompt; - if (isDalleChat === '1') { - try { - common_1.Logger.log('已开启连续绘画模式', 'FluxDraw'); - const { messagesHistory } = await buildMessageFromParentMessageId(`参考上文,结合我的需求,给出绘画描述。我的需求是:${prompt}`, { - groupId, - systemMessage: '你是一个绘画提示词生成工具,请根据用户的要求,结合上下文,用一段文字,描述用户需要的绘画需求,不用包含任何礼貌性的寒暄,只需要场景的描述,可以适当联想', - maxModelTokens: 8000, - maxRounds: 5, - fileInfo: '', - }, this.chatLogService); - drawPrompt = await this.openAIChatService.chatFree(prompt, undefined, messagesHistory); - } - catch (error) { - console.error('调用chatFree失败:', error); - drawPrompt = prompt; - } - } - else { - drawPrompt = prompt; - } - const size = (extraParam === null || extraParam === void 0 ? void 0 : extraParam.size) || '1024x1024'; - let result = { answer: '', fileInfo: '', status: 2 }; - try { - const options = { - method: 'POST', - url: `${proxyUrl}/v1/images/generations`, - timeout: timeout, - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - data: { - model: model, - prompt: drawPrompt, - size, - }, - }; - common_1.Logger.log(`正在准备发送请求到 ${options.url},payload: ${JSON.stringify(options.data)}, headers: ${JSON.stringify(options.headers)}`, 'FluxDrawService'); - const response = await (0, axios_1.default)(options); - common_1.Logger.debug(`请求成功${JSON.stringify(response.data.data[0])}`); - common_1.Logger.debug(`请求状态${JSON.stringify(response.status)}`); - const url = response.data.data[0].url; - try { - common_1.Logger.log(`------> 开始上传图片!!!`, 'DrawService'); - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const currentDate = `${year}${month}/${day}`; - result.fileInfo = await this.uploadService.uploadFileFromUrl({ - url: url, - dir: `images/dalle/${currentDate}`, - }); - common_1.Logger.log(`图片上传成功,URL: ${result.fileInfo}`, 'DrawService'); - } - catch (error) { - common_1.Logger.error(`上传图片过程中出现错误: ${error}`, 'DrawService'); - } - let revised_prompt_cn; - try { - revised_prompt_cn = await this.openAIChatService.chatFree(`根据提示词{${drawPrompt}}, 模拟AI绘画机器人的语气,用中文回复,告诉用户已经画好了`); - } - catch (error) { - revised_prompt_cn = `${prompt} 绘制成功`; - common_1.Logger.error('翻译失败: ', error); - } - result.answer = revised_prompt_cn; - result.status = 3; - onSuccess(result); - return; - } - catch (error) { - result.status = 5; - onFailure(result); - const status = ((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) || 500; - console.log('draw error: ', JSON.stringify(error), status); - const message = (_d = (_c = (_b = error === null || error === void 0 ? void 0 : error.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.error) === null || _d === void 0 ? void 0 : _d.message; - if (status === 429) { - result.text = '当前请求已过载、请稍等会儿再试试吧!'; - return result; - } - if (status === 400 && - message.includes('This request has been blocked by our content filters')) { - result.text = '您的请求已被系统拒绝。您的提示可能存在一些非法的文本。'; - return result; - } - if (status === 400 && - message.includes('Billing hard limit has been reached')) { - result.text = - '当前模型key已被封禁、已冻结当前调用Key、尝试重新对话试试吧!'; - return result; - } - if (status === 500) { - result.text = '绘制图片失败,请检查你的提示词是否有非法描述!'; - return result; - } - if (status === 401) { - result.text = '绘制图片失败,此次绘画被拒绝了!'; - return result; - } - result.text = '绘制图片失败,请稍后试试吧!'; - return result; - } - } -}; -FluxDrawService = FluxDrawService_1 = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [upload_service_1.UploadService, - globalConfig_service_1.GlobalConfigService, - chatLog_service_1.ChatLogService, - openaiChat_service_1.OpenAIChatService]) -], FluxDrawService); -exports.FluxDrawService = FluxDrawService; diff --git a/AIWebQuickDeploy/dist/modules/ai/lumaVideo.service.js b/AIWebQuickDeploy/dist/modules/ai/lumaVideo.service.js deleted file mode 100644 index 5da1b3e..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/lumaVideo.service.js +++ /dev/null @@ -1,213 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LumaVideoService = void 0; -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const upload_service_1 = require("../upload/upload.service"); -let LumaVideoService = class LumaVideoService { - constructor(chatLogService, globalConfigService, uploadService) { - this.chatLogService = chatLogService; - this.globalConfigService = globalConfigService; - this.uploadService = uploadService; - } - async lumaVideo(inputs) { - var _a, _b, _c; - const { apiKey, proxyUrl, fileInfo, prompt, timeout, assistantLogId, extraParam, } = inputs; - let result = { - text: '', - fileInfo: '', - taskId: '', - taskData: '', - status: 2, - }; - let response = null; - let url = ''; - let payloadJson = {}; - const headers = { Authorization: `Bearer ${apiKey}` }; - url = `${proxyUrl}/luma/generations/`; - const aspectRatio = extraParam.size || '16:9'; - payloadJson = { - user_prompt: prompt, - aspect_ratio: aspectRatio, - expand_prompt: true, - }; - if (fileInfo) { - payloadJson['image_url'] = fileInfo; - } - common_1.Logger.log(`正在准备发送请求到 ${url},payload: ${JSON.stringify(payloadJson)}, headers: ${JSON.stringify(headers)}`, 'LumaService'); - try { - response = await axios_1.default.post(url, payloadJson, { headers }); - } - catch (error) { - common_1.Logger.error(`任务提交失败: ${error.message}`, 'LumaService'); - throw new Error('任务提交失败'); - } - if ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.id) { - result.taskId = (_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.id; - common_1.Logger.log(`任务提交成功, 任务ID: ${(_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.id}`, 'LumaService'); - } - else { - throw new Error('未能获取结果数据, 即将重试'); - } - try { - await this.pollLumaVideoResult({ - proxyUrl, - apiKey, - taskId: response.data.id, - timeout, - prompt, - onSuccess: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl, - audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl, - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: 3, - taskId: data === null || data === void 0 ? void 0 : data.taskId, - taskData: data === null || data === void 0 ? void 0 : data.taskData, - }); - common_1.Logger.log('视频任务已完成', 'LumaService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'LumaService'); - } - }, - onGenerating: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl, - audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl, - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || '视频生成中...', - progress: data === null || data === void 0 ? void 0 : data.progress, - status: data.status, - }); - common_1.Logger.log('视频生成中...', 'LumaService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'LumaService'); - } - }, - onFailure: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '视频生成失败', - status: data.status, - }); - common_1.Logger.log('生成失败', 'Lum aService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'LumaService'); - } - }, - }); - } - catch (error) { - common_1.Logger.error('查询生成结果时发生错误:', error.message, 'LumaService'); - throw new Error('查询生成结果时发生错误'); - } - return result; - } - async pollLumaVideoResult(inputs) { - const { proxyUrl, apiKey, taskId, timeout, onSuccess, onFailure, onGenerating, action, } = inputs; - let result = { - videoUrl: '', - audioUrl: '', - fileInfo: '', - drawId: '', - taskData: '', - status: 2, - progress: 0, - answer: '', - }; - const headers = { Authorization: `Bearer ${apiKey}` }; - const url = `${proxyUrl}/luma/generations/${taskId}`; - const startTime = Date.now(); - const totalDuration = 300000; - const POLL_INTERVAL = 5000; - let retryCount = 0; - try { - while (Date.now() - startTime < timeout) { - await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL)); - try { - const res = await axios_1.default.get(url, { headers }); - const interval = setInterval(() => { - const elapsed = Date.now() - startTime; - let percentage = Math.floor((elapsed / totalDuration) * 100); - if (percentage >= 99) - percentage = 99; - result.answer = `视频生成中 (${percentage}%)`; - }, 1000); - const responses = res.data; - common_1.Logger.debug(`轮询结果: ${JSON.stringify(responses)}`, 'LumaService'); - if (responses.state === 'completed') { - result.taskId = responses.id; - result.taskData = JSON.stringify(responses); - result.fileInfo = responses.video.url; - try { - const localStorageStatus = await this.globalConfigService.getConfigs([ - 'localStorageStatus', - ]); - if (Number(localStorageStatus)) { - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const currentDate = `${year}${month}/${day}`; - result.fileInfo = await this.uploadService.uploadFileFromUrl({ - url: responses.video.download_url, - dir: `video/luma/${currentDate}`, - }); - } - } - catch (error) { - common_1.Logger.error(`上传文件失败: ${error.message}`, 'LumaService'); - } - result.answer = `提示词: "${responses.prompt}"`; - onSuccess(result); - clearInterval(interval); - return; - } - else { - onGenerating(result); - } - if (result.progress) { - } - } - catch (error) { - retryCount++; - common_1.Logger.error(`轮询失败,重试次数: ${retryCount}`, 'LumaService'); - } - } - common_1.Logger.error('轮询超时,请稍后再试!', 'LumaService'); - result.status = 4; - onFailure(result); - throw new Error('查询超时,请稍后再试!'); - } - catch (error) { - common_1.Logger.error(`轮询过程中发生错误: ${error}`, 'LumaService'); - result.status = 5; - onFailure(result); - } - } -}; -LumaVideoService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [chatLog_service_1.ChatLogService, - globalConfig_service_1.GlobalConfigService, - upload_service_1.UploadService]) -], LumaVideoService); -exports.LumaVideoService = LumaVideoService; diff --git a/AIWebQuickDeploy/dist/modules/ai/midjourneyDraw.service.js b/AIWebQuickDeploy/dist/modules/ai/midjourneyDraw.service.js deleted file mode 100644 index 695ed13..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/midjourneyDraw.service.js +++ /dev/null @@ -1,237 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MidjourneyService = void 0; -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const upload_service_1 = require("../upload/upload.service"); -let MidjourneyService = class MidjourneyService { - constructor(uploadService, globalConfigService, chatLogService) { - this.uploadService = uploadService; - this.globalConfigService = globalConfigService; - this.chatLogService = chatLogService; - } - async midjourneyDraw(inputs) { - var _a, _b, _c, _d; - const { id, apiKey, proxyUrl, action, drawId, prompt, usePrompt, customId, timeout, fileInfo, assistantLogId, } = inputs; - let result = { - text: '', - fileInfo: '', - drawId: '', - customId: '', - status: 2, - }; - let response; - let retryCount = 0; - let url = ''; - const headers = { 'mj-api-secret': apiKey }; - common_1.Logger.debug(`当前任务类型: ${action}`, 'MidjourneyService'); - while (retryCount < 3) { - let payloadJson = {}; - try { - if (action === 'IMAGINE') { - url = `${proxyUrl}/mj/submit/imagine`; - payloadJson = { prompt: usePrompt }; - } - else if (action === 'DESCRIBE') { - url = `${proxyUrl}/mj/submit/describe`; - if (fileInfo) { - const response = await fetch(fileInfo); - const blob = await response.blob(); - const buffer = Buffer.from(await blob.arrayBuffer()); - const base64String = buffer.toString('base64'); - payloadJson = { base64: `data:image/png;base64,${base64String}` }; - } - else { - return; - } - } - else if (action === 'PICREADER') { - url = `${proxyUrl}/mj/submit/action`; - payloadJson = { taskId: drawId, customId: customId }; - response = await axios_1.default.post(url, payloadJson, { headers }); - if ((response === null || response === void 0 ? void 0 : response.status) === 200 && ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.result)) { - url = `${proxyUrl}/mj/submit/modal`; - payloadJson = { taskId: (_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.result }; - } - } - else { - url = `${proxyUrl}/mj/submit/action`; - payloadJson = { taskId: drawId, customId: customId }; - } - common_1.Logger.log(`正在准备发送请求到 ${url},payload: ${JSON.stringify(payloadJson)}, headers: ${JSON.stringify(headers)}`, 'MidjourneyService'); - response = await axios_1.default.post(url, payloadJson, { headers }); - if ((response === null || response === void 0 ? void 0 : response.status) === 200 && ((_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.result)) { - common_1.Logger.debug(`收到响应: ${JSON.stringify(response.data)}`, 'MidjourneyService'); - result.drawId = (_d = response === null || response === void 0 ? void 0 : response.data) === null || _d === void 0 ? void 0 : _d.result; - result.state = 2; - result.answer = '绘画任务提交成功'; - common_1.Logger.log(`绘画任务提交成功, 绘画ID: ${response.data.result}`, 'MidjourneyService'); - break; - } - else { - throw new Error('未能获取结果数据, 即将重试'); - } - } - catch (error) { - retryCount++; - if (retryCount >= 3) { - result.answer = '任务提交失败,请检查提示词后重试'; - result.status = 5; - common_1.Logger.log(`绘画任务提交失败, 请检查后台配置或者稍后重试! ${error}`, 'MidjourneyService'); - } - } - } - this.pollMjDrawingResult({ - proxyUrl, - apiKey, - drawId: result.drawId, - timeout, - prompt, - onSuccess: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: 3, - drawId: data === null || data === void 0 ? void 0 : data.drawId, - customId: data === null || data === void 0 ? void 0 : data.customId, - }); - common_1.Logger.log('绘图成功!', 'MidjourneyService'); - }, - onDrawing: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: (data === null || data === void 0 ? void 0 : data.answer) || '绘制中', - progress: data === null || data === void 0 ? void 0 : data.progress, - status: 2, - }); - common_1.Logger.log(`绘制中!绘制进度${data === null || data === void 0 ? void 0 : data.progress}`, 'MidjourneyService'); - }, - onFailure: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '绘图失败', - status: data.status, - }); - common_1.Logger.log('绘图失败', 'MidjourneyService'); - }, - }).catch((error) => { - common_1.Logger.error('查询绘图结果时发生错误:', error, 'MidjourneyService'); - }); - return result; - } - async pollMjDrawingResult(inputs) { - const { proxyUrl, apiKey, drawId, timeout, onSuccess, prompt, onFailure, onDrawing, } = inputs; - const { mjNotSaveImg, mjProxyImgUrl, mjNotUseProxy } = await this.globalConfigService.getConfigs([ - 'mjNotSaveImg', - 'mjProxyImgUrl', - 'mjNotUseProxy', - ]); - let result = { - fileInfo: '', - drawId: '', - customId: '', - status: 2, - progress: 0, - answer: '', - }; - const startTime = Date.now(); - const POLL_INTERVAL = 5000; - let retryCount = 0; - try { - while (Date.now() - startTime < timeout) { - await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL)); - try { - const headers = { - 'Content-Type': 'application/x-www-form-urlencoded', - 'mj-api-secret': apiKey, - }; - const url = `${proxyUrl}/mj/task/${drawId}/fetch`; - const res = await axios_1.default.get(url, { headers }); - const responses = res.data; - common_1.Logger.debug(`查询结果: ${JSON.stringify(responses)}`, 'MidjourneyService'); - if (responses.status === 'SUCCESS') { - common_1.Logger.log(`绘制成功, 获取到的URL: ${responses.imageUrl}`, 'MidjourneyService'); - let processedUrl = responses.imageUrl; - const shouldReplaceUrl = mjNotUseProxy === '0' && mjProxyImgUrl; - let logMessage = ''; - if (shouldReplaceUrl) { - const newUrlBase = new URL(mjProxyImgUrl); - const parsedUrl = new URL(responses.imageUrl); - parsedUrl.protocol = newUrlBase.protocol; - parsedUrl.hostname = newUrlBase.hostname; - parsedUrl.port = newUrlBase.port ? newUrlBase.port : ''; - processedUrl = parsedUrl.toString(); - logMessage = `使用代理替换后的 URL: ${processedUrl}`; - common_1.Logger.log(logMessage, 'MidjourneyService'); - } - if (mjNotSaveImg !== '1') { - try { - common_1.Logger.log(`------> 开始上传图片!!!`, 'MidjourneyService'); - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const currentDate = `${year}${month}/${day}`; - processedUrl = await this.uploadService.uploadFileFromUrl({ - url: processedUrl, - dir: `images/midjourney/${currentDate}`, - }); - logMessage = `上传成功 URL: ${processedUrl}`; - } - catch (uploadError) { - common_1.Logger.error('存储图片失败,使用原始/代理图片链接'); - logMessage = `存储图片失败,使用原始/代理图片链接 ${processedUrl}`; - } - common_1.Logger.log(logMessage, 'MidjourneyService'); - } - else { - logMessage = `不保存图片,使用 URL: ${processedUrl}`; - common_1.Logger.log(logMessage, 'MidjourneyService'); - } - result.fileInfo = processedUrl; - result.drawId = responses.id; - result.customId = JSON.stringify(responses.buttons); - result.answer = `${prompt}\n${responses.finalPrompt || responses.properties.finalPrompt || ''}`; - onSuccess(result); - return; - } - result.progress = responses === null || responses === void 0 ? void 0 : responses.progress; - result.answer = `当前绘制进度 ${responses === null || responses === void 0 ? void 0 : responses.progress}`; - if (result.progress) { - onDrawing(result); - } - } - catch (error) { - retryCount++; - common_1.Logger.error(`轮询过程中发生错误: ${error}`, 'MidjourneyService'); - } - } - common_1.Logger.error(`超过 ${startTime / 1000} s 未完成绘画, 请稍后再试! MidjourneyService`); - result.status = 4; - onFailure(result); - throw new common_1.HttpException('绘画超时,请稍后再试!', common_1.HttpStatus.BAD_REQUEST); - } - catch (error) { - common_1.Logger.error(`绘画失败: ${error} MidjourneyService`); - result.status = 5; - onFailure(result); - } - } -}; -MidjourneyService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [upload_service_1.UploadService, - globalConfig_service_1.GlobalConfigService, - chatLog_service_1.ChatLogService]) -], MidjourneyService); -exports.MidjourneyService = MidjourneyService; diff --git a/AIWebQuickDeploy/dist/modules/ai/netSearch.service.js b/AIWebQuickDeploy/dist/modules/ai/netSearch.service.js deleted file mode 100644 index df9dadd..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/netSearch.service.js +++ /dev/null @@ -1,128 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.netSearchService = void 0; -const common_1 = require("@nestjs/common"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -let netSearchService = class netSearchService { - constructor(globalConfigService) { - this.globalConfigService = globalConfigService; - } - async webSearchPro(prompt) { - var _a, _b, _c, _d, _e, _f; - try { - const { pluginUrl, pluginKey } = await this.globalConfigService.getConfigs(['pluginUrl', 'pluginKey']); - if (!pluginUrl || !pluginKey) { - common_1.Logger.warn('搜索插件配置缺失'); - return { searchResults: [] }; - } - const keys = pluginKey.split(',').filter((key) => key.trim()); - const selectedKey = keys[Math.floor(Math.random() * keys.length)]; - const isBochaiApi = pluginUrl.includes('bochaai.com'); - const isBigModelApi = pluginUrl.includes('bigmodel.cn'); - const isTavilyApi = pluginUrl.includes('tavily.com'); - common_1.Logger.log(`[搜索] API类型: ${isBochaiApi - ? 'Bochai' - : isBigModelApi - ? 'BigModel' - : isTavilyApi - ? 'Tavily' - : '未知'}`); - common_1.Logger.log(`[搜索] 请求URL: ${pluginUrl}`); - common_1.Logger.log(`[搜索] 搜索关键词: ${prompt}`); - const requestBody = isBochaiApi - ? { - query: prompt, - freshness: 'oneWeek', - summary: true, - } - : isTavilyApi - ? { - query: prompt, - search_depth: 'basic', - include_answer: false, - include_raw_content: false, - include_images: false, - } - : { - tool: 'web-search-pro', - stream: false, - messages: [{ role: 'user', content: prompt }], - }; - common_1.Logger.log(`[搜索] 请求参数: ${JSON.stringify(requestBody, null, 2)}`); - const response = await fetch(pluginUrl, { - method: 'POST', - headers: { - Authorization: selectedKey, - 'Content-Type': 'application/json', - }, - body: JSON.stringify(requestBody), - }); - if (!response.ok) { - common_1.Logger.error(`[搜索] 接口返回错误: ${response.status}`); - return { searchResults: [] }; - } - const apiResult = await response.json(); - common_1.Logger.log(`[搜索] 原始返回数据: ${JSON.stringify(apiResult, null, 2)}`); - let searchResults = []; - if (isBochaiApi) { - if ((apiResult === null || apiResult === void 0 ? void 0 : apiResult.code) === 200 && ((_b = (_a = apiResult === null || apiResult === void 0 ? void 0 : apiResult.data) === null || _a === void 0 ? void 0 : _a.webPages) === null || _b === void 0 ? void 0 : _b.value)) { - searchResults = apiResult.data.webPages.value.map((item) => ({ - title: (item === null || item === void 0 ? void 0 : item.name) || '', - link: (item === null || item === void 0 ? void 0 : item.url) || '', - content: (item === null || item === void 0 ? void 0 : item.summary) || '', - icon: (item === null || item === void 0 ? void 0 : item.siteIcon) || '', - media: (item === null || item === void 0 ? void 0 : item.siteName) || '', - })); - } - } - else if (isBigModelApi) { - if (((_f = (_e = (_d = (_c = apiResult === null || apiResult === void 0 ? void 0 : apiResult.choices) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.message) === null || _e === void 0 ? void 0 : _e.tool_calls) === null || _f === void 0 ? void 0 : _f.length) > 0) { - for (const toolCall of apiResult.choices[0].message.tool_calls) { - if (Array.isArray(toolCall.search_result)) { - searchResults = toolCall.search_result.map((item) => ({ - title: (item === null || item === void 0 ? void 0 : item.title) || '', - link: (item === null || item === void 0 ? void 0 : item.link) || '', - content: (item === null || item === void 0 ? void 0 : item.content) || '', - icon: (item === null || item === void 0 ? void 0 : item.icon) || '', - media: (item === null || item === void 0 ? void 0 : item.media) || '', - })); - break; - } - } - } - } - else if (isTavilyApi) { - if (Array.isArray(apiResult === null || apiResult === void 0 ? void 0 : apiResult.results)) { - searchResults = apiResult.results.map((item) => ({ - title: (item === null || item === void 0 ? void 0 : item.title) || '', - link: (item === null || item === void 0 ? void 0 : item.url) || '', - content: (item === null || item === void 0 ? void 0 : item.content) || '', - icon: '', - media: '', - })); - } - } - const formattedResult = searchResults.map((item, index) => (Object.assign({ resultIndex: index + 1 }, item))); - common_1.Logger.log(`[搜索] 格式化后的结果: ${JSON.stringify(formattedResult, null, 2)}`); - return { searchResults: formattedResult }; - } - catch (fetchError) { - common_1.Logger.error('[搜索] 调用接口出错:', fetchError); - return { searchResults: [] }; - } - } -}; -netSearchService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [globalConfig_service_1.GlobalConfigService]) -], netSearchService); -exports.netSearchService = netSearchService; diff --git a/AIWebQuickDeploy/dist/modules/ai/openaiChat.service.js b/AIWebQuickDeploy/dist/modules/ai/openaiChat.service.js deleted file mode 100644 index b77d51a..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/openaiChat.service.js +++ /dev/null @@ -1,180 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OpenAIChatService = void 0; -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -let OpenAIChatService = class OpenAIChatService { - constructor(globalConfigService) { - this.globalConfigService = globalConfigService; - } - async openAIChat(messagesHistory, inputs) { - const { onFailure, onProgress, apiKey, model, proxyUrl, modelName, timeout, chatId, isFileUpload, modelAvatar, temperature, abortController, } = inputs; - let result = { - text: '', - model: '', - modelName: modelName, - chatId: chatId, - answer: '', - errMsg: '', - modelAvatar: modelAvatar, - }; - const data = Object.assign({ model, messages: messagesHistory }, (isFileUpload === 2 && { max_tokens: 2048 })); - data.stream = true; - data.temperature = temperature; - const options = { - method: 'POST', - url: `${proxyUrl}/v1/chat/completions`, - responseType: 'stream', - timeout: timeout, - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - data: data, - }; - const sanitizedOptions = await this.sanitizeOptionsForLogging(options); - console.log('请求配置:', JSON.stringify(sanitizedOptions, null, 2), 'ChatService'); - console.log('请求配置:', JSON.stringify(sanitizedOptions, null, 2), 'ChatService'); - try { - const response = await (0, axios_1.default)(options); - const stream = response.data; - let buffer = ''; - await new Promise((resolve, reject) => { - stream.on('data', (chunk) => { - buffer += chunk.toString(); - let lines = buffer.split('\n'); - buffer = lines.pop(); - lines.forEach((line) => { - var _a, _b; - if (line.trim() === 'data: [DONE]') { - console.log('处理结束信号 [DONE]'); - resolve(result); - return; - } - if (line.startsWith('data: ')) { - try { - const cleanedLine = line.slice(6).trim(); - if (cleanedLine) { - const jsonLine = JSON.parse(cleanedLine); - const content = ((_b = (_a = jsonLine.choices[0]) === null || _a === void 0 ? void 0 : _a.delta) === null || _b === void 0 ? void 0 : _b.content) || ''; - result.answer += content; - onProgress === null || onProgress === void 0 ? void 0 : onProgress({ text: content, answer: result.answer }); - } - } - catch (error) { - console.error('Error parsing line:', line, error); - } - } - }); - }); - stream.on('end', () => { - resolve(result); - }); - stream.on('error', (error) => { - reject(error); - }); - abortController.signal.addEventListener('abort', () => { - resolve(result); - }); - }); - return result; - } - catch (error) { - result.errMsg = (0, utils_1.handleError)(error); - common_1.Logger.error(result.errMsg); - onFailure(result); - return result; - } - } - async sanitizeOptionsForLogging(options) { - const sanitizedOptions = JSON.parse(JSON.stringify(options)); - if (sanitizedOptions.headers && sanitizedOptions.headers.Authorization) { - const authHeader = sanitizedOptions.headers.Authorization; - if (authHeader.startsWith('Bearer ')) { - const token = authHeader.slice(7); - if (token.length > 10) { - sanitizedOptions.headers.Authorization = `Bearer ${token.slice(0, 5)}****${token.slice(-4)}`; - } - } - } - if (sanitizedOptions.data && - sanitizedOptions.data.messages && - Array.isArray(sanitizedOptions.data.messages)) { - sanitizedOptions.data.messages = sanitizedOptions.data.messages.map((message) => { - if (message.content && Array.isArray(message.content)) { - message.content = message.content.map((content) => { - if (content.type === 'image_url' && - content.image_url && - content.image_url.url) { - content.image_url.url = 'data:image/***;base64 ... ...'; - } - return content; - }); - } - return message; - }); - } - return sanitizedOptions; - } - async chatFree(prompt, systemMessage, messagesHistory) { - const { openaiBaseUrl = '', openaiBaseKey = '', openaiBaseModel, } = await this.globalConfigService.getConfigs([ - 'openaiBaseKey', - 'openaiBaseUrl', - 'openaiBaseModel', - ]); - const key = openaiBaseKey; - const proxyUrl = openaiBaseUrl; - let requestData = []; - if (systemMessage) { - requestData.push({ - role: 'system', - content: systemMessage, - }); - } - if (messagesHistory && messagesHistory.length > 0) { - requestData = requestData.concat(messagesHistory); - } - else { - requestData.push({ - role: 'user', - content: prompt, - }); - } - const options = { - method: 'POST', - url: `${proxyUrl}/v1/chat/completions`, - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${key}`, - }, - data: { - model: openaiBaseModel || 'gpt-3.5-turbo-0125', - messages: requestData, - }, - }; - try { - const response = await (0, axios_1.default)(options); - common_1.Logger.log(`全局模型调用成功, 返回结果: ${response === null || response === void 0 ? void 0 : response.data.choices[0].message.content}`, 'ChatService'); - return response === null || response === void 0 ? void 0 : response.data.choices[0].message.content; - } - catch (error) { - console.log('error: ', error); - } - } -}; -OpenAIChatService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [globalConfig_service_1.GlobalConfigService]) -], OpenAIChatService); -exports.OpenAIChatService = OpenAIChatService; diff --git a/AIWebQuickDeploy/dist/modules/ai/openaiDraw.service.js b/AIWebQuickDeploy/dist/modules/ai/openaiDraw.service.js deleted file mode 100644 index 490a0a1..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/openaiDraw.service.js +++ /dev/null @@ -1,145 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var OpenAIDrawService_1; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OpenAIDrawService = void 0; -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const upload_service_1 = require("../upload/upload.service"); -const openaiChat_service_1 = require("./openaiChat.service"); -let OpenAIDrawService = OpenAIDrawService_1 = class OpenAIDrawService { - constructor(uploadService, globalConfigService, chatLogService, openAIChatService) { - this.uploadService = uploadService; - this.globalConfigService = globalConfigService; - this.chatLogService = chatLogService; - this.openAIChatService = openAIChatService; - this.logger = new common_1.Logger(OpenAIDrawService_1.name); - } - async dalleDraw(inputs, buildMessageFromParentMessageId) { - var _a, _b, _c, _d; - common_1.Logger.log('开始提交 Dalle 绘图任务 ', 'DrawService'); - const { apiKey, model, proxyUrl, prompt, extraParam, timeout, onSuccess, onFailure, groupId, } = inputs; - const isDalleChat = await this.globalConfigService.getConfigs([ - 'isDalleChat', - ]); - let drawPrompt; - if (isDalleChat === '1') { - try { - common_1.Logger.log('已开启连续绘画模式', 'DalleDraw'); - const { messagesHistory } = await buildMessageFromParentMessageId(`参考上文,结合我的需求,给出绘画描述。我的需求是:${prompt}`, { - groupId, - systemMessage: '你是一个绘画提示词生成工具,请根据用户的要求,结合上下文,用一段文字,描述用户需要的绘画需求,不用包含任何礼貌性的寒暄,只需要场景的描述,可以适当联想', - maxModelTokens: 8000, - maxRounds: 5, - fileInfo: '', - }, this.chatLogService); - drawPrompt = await this.openAIChatService.chatFree(prompt, undefined, messagesHistory); - } - catch (error) { - console.error('调用chatFree失败:', error); - drawPrompt = prompt; - } - } - else { - drawPrompt = prompt; - } - const size = (extraParam === null || extraParam === void 0 ? void 0 : extraParam.size) || '1024x1024'; - let result = { answer: '', fileInfo: '', status: 2 }; - try { - const options = { - method: 'POST', - url: `${proxyUrl}/v1/images/generations`, - timeout: timeout, - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - data: { - model: model, - prompt: drawPrompt, - size, - }, - }; - const response = await (0, axios_1.default)(options); - const url = response.data.data[0].url; - try { - common_1.Logger.log(`------> 开始上传图片!!!`, 'DrawService'); - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const currentDate = `${year}${month}/${day}`; - result.fileInfo = await this.uploadService.uploadFileFromUrl({ - url: url, - dir: `images/dalle/${currentDate}`, - }); - common_1.Logger.log(`图片上传成功,URL: ${result.fileInfo}`, 'DrawService'); - } - catch (error) { - common_1.Logger.error(`上传图片过程中出现错误: ${error}`, 'DrawService'); - } - let revised_prompt_cn; - try { - revised_prompt_cn = await this.openAIChatService.chatFree(`根据提示词{${response.data.data[0].revised_prompt}}, 模拟AI绘画机器人的语气,用中文回复,告诉用户已经画好了`); - } - catch (error) { - revised_prompt_cn = `${prompt} 绘制成功`; - common_1.Logger.error('翻译失败: ', error); - } - result.answer = revised_prompt_cn; - result.status = 3; - onSuccess(result); - return; - } - catch (error) { - result.status = 5; - onFailure(result); - const status = ((_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) || 500; - console.log('draw error: ', JSON.stringify(error), status); - const message = (_d = (_c = (_b = error === null || error === void 0 ? void 0 : error.response) === null || _b === void 0 ? void 0 : _b.data) === null || _c === void 0 ? void 0 : _c.error) === null || _d === void 0 ? void 0 : _d.message; - if (status === 429) { - result.text = '当前请求已过载、请稍等会儿再试试吧!'; - return result; - } - if (status === 400 && - message.includes('This request has been blocked by our content filters')) { - result.text = '您的请求已被系统拒绝。您的提示可能存在一些非法的文本。'; - return result; - } - if (status === 400 && - message.includes('Billing hard limit has been reached')) { - result.text = - '当前模型key已被封禁、已冻结当前调用Key、尝试重新对话试试吧!'; - return result; - } - if (status === 500) { - result.text = '绘制图片失败,请检查你的提示词是否有非法描述!'; - return result; - } - if (status === 401) { - result.text = '绘制图片失败,此次绘画被拒绝了!'; - return result; - } - result.text = '绘制图片失败,请稍后试试吧!'; - return result; - } - } -}; -OpenAIDrawService = OpenAIDrawService_1 = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [upload_service_1.UploadService, - globalConfig_service_1.GlobalConfigService, - chatLog_service_1.ChatLogService, - openaiChat_service_1.OpenAIChatService]) -], OpenAIDrawService); -exports.OpenAIDrawService = OpenAIDrawService; diff --git a/AIWebQuickDeploy/dist/modules/ai/stableDiffusion.service.js b/AIWebQuickDeploy/dist/modules/ai/stableDiffusion.service.js deleted file mode 100644 index 825952d..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/stableDiffusion.service.js +++ /dev/null @@ -1,104 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var StableDiffusionService_1; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StableDiffusionService = void 0; -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const upload_service_1 = require("../upload/upload.service"); -let StableDiffusionService = StableDiffusionService_1 = class StableDiffusionService { - constructor(uploadService, globalConfigService) { - this.uploadService = uploadService; - this.globalConfigService = globalConfigService; - this.logger = new common_1.Logger(StableDiffusionService_1.name); - } - async sdxl(inputs) { - const { onSuccess, onFailure, apiKey, model, proxyUrl, modelName, timeout, chatId, prompt, } = inputs; - let result = { - answer: '', - model: model, - modelName: modelName, - chatId: chatId, - fileInfo: '', - status: 2, - }; - console.log('开始处理', { model, modelName, prompt }); - const options = { - method: 'POST', - url: `${proxyUrl}/v1/chat/completions`, - timeout: timeout, - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${apiKey}`, - }, - data: { - model, - messages: [{ role: 'user', content: prompt }], - }, - }; - try { - const response = await (0, axios_1.default)(options); - console.log('API响应接收', response.data); - if (response.data.choices && response.data.choices.length > 0) { - const choice = response.data.choices[0]; - const content = choice.message.content; - console.log('处理内容', content); - const regex = /\]\((https?:\/\/[^\)]+)\)/; - const match = content.match(regex); - if (match && match[1]) { - result.fileInfo = match[1]; - try { - const localStorageStatus = await this.globalConfigService.getConfigs(['localStorageStatus']); - if (Number(localStorageStatus)) { - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const currentDate = `${year}${month}/${day}`; - result.fileInfo = await this.uploadService.uploadFileFromUrl({ - url: result.fileInfo, - dir: `images/stable-diffusion/${currentDate}`, - }); - } - } - catch (error) { - common_1.Logger.error(`上传文件失败: ${error.message}`, 'StableDiffusionService'); - } - console.log('找到链接', match[1]); - } - else { - console.log('没有找到链接'); - } - result.answer = `${prompt} 绘制成功`; - if (result.fileInfo) { - onSuccess(result); - return; - } - else { - onFailure('No link found.'); - } - } - else { - onFailure('No choices returned.'); - } - } - catch (error) { - common_1.Logger.error('服务器错误,请求失败:', error); - } - } -}; -StableDiffusionService = StableDiffusionService_1 = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [upload_service_1.UploadService, - globalConfig_service_1.GlobalConfigService]) -], StableDiffusionService); -exports.StableDiffusionService = StableDiffusionService; diff --git a/AIWebQuickDeploy/dist/modules/ai/suno.service.js b/AIWebQuickDeploy/dist/modules/ai/suno.service.js deleted file mode 100644 index 00a8c60..0000000 --- a/AIWebQuickDeploy/dist/modules/ai/suno.service.js +++ /dev/null @@ -1,325 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SunoService = void 0; -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const upload_service_1 = require("../upload/upload.service"); -let SunoService = class SunoService { - constructor(chatLogService, uploadService, globalConfigService) { - this.chatLogService = chatLogService; - this.uploadService = uploadService; - this.globalConfigService = globalConfigService; - } - async suno(inputs) { - var _a, _b, _c; - const { apiKey, proxyUrl, action, prompt, timeout, assistantLogId, taskData, extraParam, } = inputs; - common_1.Logger.debug(`SunoService: ${JSON.stringify(inputs)}`, 'SunoService'); - let result = { - text: '', - fileInfo: '', - taskId: '', - taskData: '', - status: 2, - }; - common_1.Logger.log('开始生成音乐', 'SunoService'); - let response = null; - let url = ''; - let payloadJson = {}; - const headers = { Authorization: `Bearer ${apiKey}` }; - if (action === 'LYRICS') { - url = `${proxyUrl}/task/suno/v1/submit/lyrics`; - payloadJson = { prompt: prompt }; - } - if (action === 'MUSIC') { - url = `${proxyUrl}/task/suno/v1/submit/music`; - try { - payloadJson = JSON.parse(taskData); - } - catch (error) { - common_1.Logger.error(`解析taskData失败: ${error.message}`, 'SunoService'); - throw new Error('taskData格式错误'); - } - } - common_1.Logger.log(`正在准备发送请求到 ${url},payload: ${JSON.stringify(payloadJson)}, headers: ${JSON.stringify(headers)}`, 'SunoService'); - try { - response = await axios_1.default.post(url, payloadJson, { headers }); - common_1.Logger.debug(`任务提交结果,状态码: ${response.status}, 状态消息: ${response.statusText}, 数据: ${JSON.stringify(response.data)}`); - } - catch (error) { - common_1.Logger.error(`任务提交失败: ${error.message}`, 'SunoService'); - throw new Error('任务提交失败'); - } - if ((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.data) { - result.taskId = (_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.data; - common_1.Logger.log(`任务提交成功, 任务ID: ${(_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.data}`, 'SunoService'); - } - else { - throw new Error('未能获取结果数据, 即将重试'); - } - try { - await this.pollSunoMusicResult({ - proxyUrl, - apiKey, - taskId: response.data.data, - timeout, - prompt, - action, - onSuccess: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl, - audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl, - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: 3, - taskId: data === null || data === void 0 ? void 0 : data.taskId, - taskData: data === null || data === void 0 ? void 0 : data.taskData, - }); - common_1.Logger.log('音乐任务已完成', 'SunoService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'SunoService'); - } - }, - onAudioSuccess: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl, - audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl, - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: data === null || data === void 0 ? void 0 : data.progress, - status: data.status, - taskId: data === null || data === void 0 ? void 0 : data.taskId, - taskData: data === null || data === void 0 ? void 0 : data.taskData, - }); - common_1.Logger.log('音频生成成功,等待视频生成...', 'SunoService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'SunoService'); - } - }, - onGenerating: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - videoUrl: data === null || data === void 0 ? void 0 : data.videoUrl, - audioUrl: data === null || data === void 0 ? void 0 : data.audioUrl, - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || '音乐生成中...', - progress: data === null || data === void 0 ? void 0 : data.progress, - status: data.status, - }); - common_1.Logger.log('音乐生成中...', 'SunoService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'SunoService'); - } - }, - onFailure: async (data) => { - try { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '音乐生成失败', - status: data.status, - }); - common_1.Logger.log('生成失败', 'SunoService'); - } - catch (error) { - common_1.Logger.error(`更新日志失败: ${error.message}`, 'SunoService'); - } - }, - }); - } - catch (error) { - common_1.Logger.error('查询生成结果时发生错误:', error.message, 'SunoService'); - throw new Error('查询生成结果时发生错误'); - } - return result; - } - async pollSunoMusicResult(inputs) { - const { proxyUrl, apiKey, taskId, timeout, onSuccess, onAudioSuccess, onFailure, onGenerating, action, } = inputs; - let result = { - videoUrl: '', - audioUrl: '', - fileInfo: '', - drawId: '', - taskData: '', - status: 2, - progress: 0, - answer: '', - }; - const headers = { Authorization: `Bearer ${apiKey}` }; - const url = `${proxyUrl}/task/suno/v1/fetch/${taskId}`; - const startTime = Date.now(); - const POLL_INTERVAL = 5000; - let retryCount = 0; - try { - while (Date.now() - startTime < timeout) { - await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL)); - try { - const res = await axios_1.default.get(url, { headers }); - const responses = res.data.data; - common_1.Logger.debug(`轮询结果: ${JSON.stringify(responses)}`, 'SunoService'); - if (action === 'LYRICS') { - if (responses.status === 'SUCCESS') { - result.taskId = responses.data.id; - result.taskData = JSON.stringify(responses.data); - result.answer = responses.data.text; - onSuccess(result); - return; - } - result.progress = responses === null || responses === void 0 ? void 0 : responses.progress; - result.answer = `歌词生成中`; - if (result.progress) { - onGenerating(result); - } - } - if (action === 'MUSIC') { - if (responses.data) { - const data = responses.data; - result.taskData = JSON.stringify(data); - if (Array.isArray(data)) { - const validAudioUrls = data - .map((item) => item.audio_url) - .filter((url) => url); - const validVideoUrls = data - .map((item) => item.video_url) - .filter((url) => url); - const validImageUrls = data - .map((item) => item.image_url) - .filter((url) => url); - const titles = data.map((item) => item.title); - const firstTitle = titles.length > 0 ? titles[0] : '音乐已生成'; - if (responses.status === 'SUCCESS') { - let audioUrls = []; - let videoUrls = []; - let imageUrls = []; - try { - const localStorageStatus = await this.globalConfigService.getConfigs([ - 'localStorageStatus', - ]); - if (Number(localStorageStatus)) { - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const currentDate = `${year}${month}/${day}`; - for (const url of validAudioUrls) { - try { - const uploadedUrl = await this.uploadService.uploadFileFromUrl({ - url: url, - dir: `audio/suno-music/${currentDate}`, - }); - audioUrls.push(uploadedUrl); - } - catch (error) { - common_1.Logger.error(`上传音频文件失败: ${error.message}`, 'SunoService'); - audioUrls.push(url); - } - } - for (const url of validVideoUrls) { - try { - const uploadedUrl = await this.uploadService.uploadFileFromUrl({ - url: url, - dir: `video/suno-music/${currentDate}`, - }); - videoUrls.push(uploadedUrl); - } - catch (error) { - common_1.Logger.error(`上传视频文件失败: ${error.message}`, 'SunoService'); - videoUrls.push(url); - } - } - for (const url of validImageUrls) { - try { - const uploadedUrl = await this.uploadService.uploadFileFromUrl({ - url: url, - dir: `images/suno-music/${currentDate}`, - }); - imageUrls.push(uploadedUrl); - } - catch (error) { - common_1.Logger.error(`上传图片文件失败: ${error.message}`, 'SunoService'); - imageUrls.push(url); - } - } - } - else { - audioUrls = validAudioUrls; - videoUrls = validVideoUrls; - imageUrls = validImageUrls; - } - } - catch (error) { - common_1.Logger.error(`获取配置失败: ${error.message}`, 'LumaService'); - audioUrls = validAudioUrls; - videoUrls = validVideoUrls; - imageUrls = validImageUrls; - } - result.audioUrl = audioUrls.join(','); - result.videoUrl = videoUrls.join(','); - result.fileInfo = imageUrls.join(','); - if (validAudioUrls.length === 2) { - result.status = 3; - result.answer = firstTitle; - } - else { - result.status = 2; - result.progress = responses === null || responses === void 0 ? void 0 : responses.progress; - result.answer = `当前生成进度 ${responses === null || responses === void 0 ? void 0 : responses.progress}`; - } - common_1.Logger.debug(`音乐生成成功: ${JSON.stringify(data)}`, 'SunoService'); - onSuccess(result); - return; - } - else { - result.audioUrl = validAudioUrls.join(','); - result.videoUrl = validVideoUrls.join(','); - result.fileInfo = validImageUrls.join(','); - result.status = 2; - result.progress = responses === null || responses === void 0 ? void 0 : responses.progress; - result.answer = firstTitle; - onAudioSuccess(result); - } - } - } - if (!result.audioUrl && result.progress && result.status === 2) { - onGenerating(result); - } - } - } - catch (error) { - retryCount++; - common_1.Logger.error(`轮询失败,重试次数: ${retryCount}`, 'SunoService'); - } - } - common_1.Logger.error('轮询超时,请稍后再试!', 'SunoService'); - result.status = 4; - onFailure(result); - throw new Error('查询超时,请稍后再试!'); - } - catch (error) { - common_1.Logger.error(`轮询过程中发生错误: ${error}`, 'SunoService'); - result.status = 5; - onFailure(result); - } - } -}; -SunoService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [chatLog_service_1.ChatLogService, - upload_service_1.UploadService, - globalConfig_service_1.GlobalConfigService]) -], SunoService); -exports.SunoService = SunoService; diff --git a/AIWebQuickDeploy/dist/modules/app/app.controller.js b/AIWebQuickDeploy/dist/modules/app/app.controller.js deleted file mode 100644 index d0e770f..0000000 --- a/AIWebQuickDeploy/dist/modules/app/app.controller.js +++ /dev/null @@ -1,218 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppController = void 0; -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const app_service_1 = require("./app.service"); -const collectApp_dto_1 = require("./dto/collectApp.dto"); -const createApp_dto_1 = require("./dto/createApp.dto"); -const createCats_dto_1 = require("./dto/createCats.dto"); -const deleteApp_dto_1 = require("./dto/deleteApp.dto"); -const deleteCats_dto_1 = require("./dto/deleteCats.dto"); -const queryApp_dto_1 = require("./dto/queryApp.dto"); -const queryCats_dto_1 = require("./dto/queryCats.dto"); -const updateApp_dto_1 = require("./dto/updateApp.dto"); -const updateCats_dto_1 = require("./dto/updateCats.dto"); -let AppController = class AppController { - constructor(appService) { - this.appService = appService; - } - appCatsList(query) { - return this.appService.appCatsList(query); - } - catsList() { - const params = { status: 1, page: 1, size: 1000, name: '' }; - return this.appService.appCatsList(params); - } - queryOneCats(query) { - return this.appService.queryOneCat(query); - } - createAppCat(body) { - return this.appService.createAppCat(body); - } - updateAppCats(body) { - return this.appService.updateAppCats(body); - } - delAppCat(body) { - return this.appService.delAppCat(body); - } - appList(req, query) { - return this.appService.appList(req, query); - } - list(req, query) { - return this.appService.frontAppList(req, query); - } - async searchList(body) { - return this.appService.searchAppList(body); - } - createApp(body) { - return this.appService.createApp(body); - } - updateApp(body) { - return this.appService.updateApp(body); - } - delApp(body) { - return this.appService.delApp(body); - } - collect(body, req) { - return this.appService.collect(body, req); - } - mineApps(req) { - return this.appService.mineApps(req); - } -}; -__decorate([ - (0, common_1.Get)('queryAppCats'), - (0, swagger_1.ApiOperation)({ summary: '获取App分类列表' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryCats_dto_1.QuerCatsDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "appCatsList", null); -__decorate([ - (0, common_1.Get)('queryCats'), - (0, swagger_1.ApiOperation)({ summary: '用户端获取App分类列表' }), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], AppController.prototype, "catsList", null); -__decorate([ - (0, common_1.Get)('queryOneCat'), - (0, swagger_1.ApiOperation)({ summary: '用户端获取App分类列表' }), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], AppController.prototype, "queryOneCats", null); -__decorate([ - (0, common_1.Post)('createAppCats'), - (0, swagger_1.ApiOperation)({ summary: '添加App分类' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [createCats_dto_1.CreateCatsDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "createAppCat", null); -__decorate([ - (0, common_1.Post)('updateAppCats'), - (0, swagger_1.ApiOperation)({ summary: '修改App分类' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [updateCats_dto_1.UpdateCatsDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "updateAppCats", null); -__decorate([ - (0, common_1.Post)('delAppCats'), - (0, swagger_1.ApiOperation)({ summary: '删除App分类' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [deleteCats_dto_1.DeleteCatsDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "delAppCat", null); -__decorate([ - (0, common_1.Get)('queryApp'), - (0, swagger_1.ApiOperation)({ summary: '获取App列表' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, queryApp_dto_1.QuerAppDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "appList", null); -__decorate([ - (0, common_1.Get)('list'), - (0, swagger_1.ApiOperation)({ summary: '客户端获取App' }), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, queryApp_dto_1.QuerAppDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "list", null); -__decorate([ - (0, common_1.Post)('searchList'), - (0, swagger_1.ApiOperation)({ summary: '客户端获取App' }), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], AppController.prototype, "searchList", null); -__decorate([ - (0, common_1.Post)('createApp'), - (0, swagger_1.ApiOperation)({ summary: '添加App' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [createApp_dto_1.CreateAppDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "createApp", null); -__decorate([ - (0, common_1.Post)('updateApp'), - (0, swagger_1.ApiOperation)({ summary: '修改App' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [updateApp_dto_1.UpdateAppDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "updateApp", null); -__decorate([ - (0, common_1.Post)('delApp'), - (0, swagger_1.ApiOperation)({ summary: '删除App' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [deleteApp_dto_1.OperateAppDto]), - __metadata("design:returntype", void 0) -], AppController.prototype, "delApp", null); -__decorate([ - (0, common_1.Post)('collect'), - (0, swagger_1.ApiOperation)({ summary: '收藏/取消收藏App' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [collectApp_dto_1.CollectAppDto, Object]), - __metadata("design:returntype", void 0) -], AppController.prototype, "collect", null); -__decorate([ - (0, common_1.Get)('mineApps'), - (0, swagger_1.ApiOperation)({ summary: '我的收藏' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], AppController.prototype, "mineApps", null); -AppController = __decorate([ - (0, swagger_1.ApiTags)('App'), - (0, common_1.Controller)('app'), - __metadata("design:paramtypes", [app_service_1.AppService]) -], AppController); -exports.AppController = AppController; diff --git a/AIWebQuickDeploy/dist/modules/app/app.entity.js b/AIWebQuickDeploy/dist/modules/app/app.entity.js deleted file mode 100644 index 63b60d4..0000000 --- a/AIWebQuickDeploy/dist/modules/app/app.entity.js +++ /dev/null @@ -1,84 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let AppEntity = class AppEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ unique: true, comment: 'App应用名称' }), - __metadata("design:type", String) -], AppEntity.prototype, "name", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App分类Id' }), - __metadata("design:type", Number) -], AppEntity.prototype, "catId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用描述信息' }), - __metadata("design:type", String) -], AppEntity.prototype, "des", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用预设场景信息', type: 'text' }), - __metadata("design:type", String) -], AppEntity.prototype, "preset", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用封面图片', nullable: true, type: 'text' }), - __metadata("design:type", String) -], AppEntity.prototype, "coverImg", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用排序、数字越大越靠前', default: 100 }), - __metadata("design:type", Number) -], AppEntity.prototype, "order", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用是否启用中 0:禁用 1:启用', default: 1 }), - __metadata("design:type", Number) -], AppEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App示例数据', nullable: true, type: 'text' }), - __metadata("design:type", String) -], AppEntity.prototype, "demoData", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用角色 system user', default: 'system' }), - __metadata("design:type", String) -], AppEntity.prototype, "role", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用是否是GPTs', default: '0' }), - __metadata("design:type", Number) -], AppEntity.prototype, "isGPTs", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用是否是固定使用模型', default: '0' }), - __metadata("design:type", Number) -], AppEntity.prototype, "isFixedModel", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用使用的模型', type: 'text' }), - __metadata("design:type", String) -], AppEntity.prototype, "appModel", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'GPTs 的调用ID', default: '' }), - __metadata("design:type", String) -], AppEntity.prototype, "gizmoID", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App是否共享到应用广场', default: false }), - __metadata("design:type", Boolean) -], AppEntity.prototype, "public", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '用户Id', nullable: true }), - __metadata("design:type", Number) -], AppEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '是否系统预留', default: false, nullable: true }), - __metadata("design:type", Boolean) -], AppEntity.prototype, "isSystemReserved", void 0); -AppEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'app' }) -], AppEntity); -exports.AppEntity = AppEntity; diff --git a/AIWebQuickDeploy/dist/modules/app/app.module.js b/AIWebQuickDeploy/dist/modules/app/app.module.js deleted file mode 100644 index ae88144..0000000 --- a/AIWebQuickDeploy/dist/modules/app/app.module.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppModule = void 0; -const common_1 = require("@nestjs/common"); -const app_controller_1 = require("./app.controller"); -const app_service_1 = require("./app.service"); -const typeorm_1 = require("@nestjs/typeorm"); -const appCats_entity_1 = require("./appCats.entity"); -const app_entity_1 = require("./app.entity"); -const userApps_entity_1 = require("./userApps.entity"); -let AppModule = class AppModule { -}; -AppModule = __decorate([ - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([appCats_entity_1.AppCatsEntity, app_entity_1.AppEntity, userApps_entity_1.UserAppsEntity])], - controllers: [app_controller_1.AppController], - providers: [app_service_1.AppService], - }) -], AppModule); -exports.AppModule = AppModule; diff --git a/AIWebQuickDeploy/dist/modules/app/app.service.js b/AIWebQuickDeploy/dist/modules/app/app.service.js deleted file mode 100644 index 81ed5f9..0000000 --- a/AIWebQuickDeploy/dist/modules/app/app.service.js +++ /dev/null @@ -1,331 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppService = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const app_entity_1 = require("./app.entity"); -const appCats_entity_1 = require("./appCats.entity"); -const userApps_entity_1 = require("./userApps.entity"); -let AppService = class AppService { - constructor(appCatsEntity, appEntity, userAppsEntity) { - this.appCatsEntity = appCatsEntity; - this.appEntity = appEntity; - this.userAppsEntity = userAppsEntity; - } - async createAppCat(body) { - const { name } = body; - const c = await this.appCatsEntity.findOne({ where: { name } }); - if (c) { - throw new common_1.HttpException('该分类名称已存在!', common_1.HttpStatus.BAD_REQUEST); - } - return await this.appCatsEntity.save(body); - } - async delAppCat(body) { - const { id } = body; - const c = await this.appCatsEntity.findOne({ where: { id } }); - if (!c) { - throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const count = await this.appEntity.count({ where: { catId: id } }); - if (count > 0) { - throw new common_1.HttpException('该分类下存在App,不可删除!', common_1.HttpStatus.BAD_REQUEST); - } - const res = await this.appCatsEntity.delete(id); - if (res.affected > 0) - return '删除成功'; - throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST); - } - async updateAppCats(body) { - const { id, name } = body; - const c = await this.appCatsEntity.findOne({ - where: { name, id: (0, typeorm_2.Not)(id) }, - }); - if (c) { - throw new common_1.HttpException('该分类名称已存在!', common_1.HttpStatus.BAD_REQUEST); - } - const res = await this.appCatsEntity.update({ id }, body); - if (res.affected > 0) - return '修改成功'; - throw new common_1.HttpException('修改失败!', common_1.HttpStatus.BAD_REQUEST); - } - async queryOneCat(params) { - const { id } = params; - if (!id) { - throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST); - } - const app = await this.appEntity.findOne({ where: { id } }); - const { demoData: demo, coverImg, des, name, isFixedModel, isGPTs, appModel, } = app; - return { - demoData: demo ? demo.split('\n') : [], - coverImg, - des, - name, - isGPTs, - isFixedModel, - appModel, - }; - } - async appCatsList(query) { - const { page = 1, size = 10, name, status } = query; - const where = {}; - name && (where.name = (0, typeorm_2.Like)(`%${name}%`)); - [0, 1, '0', '1'].includes(status) && (where.status = status); - const [rows, count] = await this.appCatsEntity.findAndCount({ - where, - order: { order: 'DESC' }, - skip: (page - 1) * size, - take: size, - }); - const catIds = rows.map((item) => item.id); - const apps = await this.appEntity.find({ where: { catId: (0, typeorm_2.In)(catIds) } }); - const appCountMap = {}; - apps.forEach((item) => { - if (appCountMap[item.catId]) { - appCountMap[item.catId] += 1; - } - else { - appCountMap[item.catId] = 1; - } - }); - rows.forEach((item) => (item.appCount = appCountMap[item.id] || 0)); - return { rows, count }; - } - async appList(req, query, orderKey = 'id') { - var _a; - const { page = 1, size = 10, name, status, catId, role } = query; - const where = { isSystemReserved: 0 }; - name && (where.name = (0, typeorm_2.Like)(`%${name}%`)); - catId && (where.catId = catId); - role && (where.role = role); - status && (where.status = status); - const [rows, count] = await this.appEntity.findAndCount({ - where, - order: { [orderKey]: 'DESC' }, - skip: (page - 1) * size, - take: size, - }); - const catIds = rows.map((item) => item.catId); - const cats = await this.appCatsEntity.find({ where: { id: (0, typeorm_2.In)(catIds) } }); - rows.forEach((item) => { - const cat = cats.find((c) => c.id === item.catId); - item.catName = cat ? cat.name : ''; - }); - if (((_a = req === null || req === void 0 ? void 0 : req.user) === null || _a === void 0 ? void 0 : _a.role) !== 'super') { - rows.forEach((item) => { - delete item.preset; - }); - } - return { rows, count }; - } - async frontAppList(req, query, orderKey = 'id') { - var _a; - const { page = 1, size = 1000, name, catId, role } = query; - const where = [ - { - status: (0, typeorm_2.In)([1, 4]), - userId: (0, typeorm_2.IsNull)(), - public: false, - isSystemReserved: 0, - }, - { userId: (0, typeorm_2.MoreThan)(0), public: true }, - ]; - const [rows, count] = await this.appEntity.findAndCount({ - where, - order: { order: 'DESC' }, - skip: (page - 1) * size, - take: size, - }); - const catIds = rows.map((item) => item.catId); - const cats = await this.appCatsEntity.find({ where: { id: (0, typeorm_2.In)(catIds) } }); - rows.forEach((item) => { - const cat = cats.find((c) => c.id === item.catId); - item.catName = cat ? cat.name : ''; - }); - if (((_a = req === null || req === void 0 ? void 0 : req.user) === null || _a === void 0 ? void 0 : _a.role) !== 'super') { - rows.forEach((item) => { - delete item.preset; - }); - } - return { rows, count }; - } - async searchAppList(body) { - console.log('搜索App列表', body); - const { page = 1, size = 1000, keyword } = body; - console.log(`搜索关键词:${keyword}`); - let baseWhere = [ - { - status: (0, typeorm_2.In)([1, 4]), - userId: (0, typeorm_2.IsNull)(), - public: false, - isSystemReserved: 0, - }, - { userId: (0, typeorm_2.MoreThan)(0), public: true }, - ]; - console.log('初始查询条件:', JSON.stringify(baseWhere)); - if (keyword) { - baseWhere = baseWhere.map((condition) => (Object.assign(Object.assign({}, condition), { name: (0, typeorm_2.Like)(`%${keyword}%`) }))); - console.log('更新后的查询条件:', JSON.stringify(baseWhere)); - } - try { - const [rows, count] = await this.appEntity.findAndCount({ - where: baseWhere, - skip: (page - 1) * size, - take: size, - }); - console.log(`查询返回 ${count} 条结果,显示第 ${page} 页的结果。`); - rows.forEach((item) => { - delete item.preset; - }); - console.log('完成查询,准备返回结果'); - return { rows, count }; - } - catch (error) { - console.error('查询数据库时出错:', error); - throw new Error('Database query failed'); - } - } - async createApp(body) { - const { name, catId } = body; - body.role = 'system'; - const a = await this.appEntity.findOne({ where: { name } }); - if (a) { - throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST); - } - const c = await this.appCatsEntity.findOne({ where: { id: catId } }); - if (!c) { - throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST); - } - return await this.appEntity.save(body); - } - async updateApp(body) { - const { id, name, catId, status } = body; - const a = await this.appEntity.findOne({ where: { name, id: (0, typeorm_2.Not)(id) } }); - if (a) { - throw new common_1.HttpException('该应用名称已存在!', common_1.HttpStatus.BAD_REQUEST); - } - const c = await this.appCatsEntity.findOne({ where: { id: catId } }); - if (!c) { - throw new common_1.HttpException('该分类不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const curApp = await this.appEntity.findOne({ where: { id } }); - if (curApp.status !== body.status) { - await this.userAppsEntity.update({ appId: id }, { status }); - } - const res = await this.appEntity.update({ id }, body); - if (res.affected > 0) - return '修改App信息成功'; - throw new common_1.HttpException('修改App信息失败!', common_1.HttpStatus.BAD_REQUEST); - } - async delApp(body) { - const { id } = body; - const a = await this.appEntity.findOne({ where: { id } }); - if (!a) { - throw new common_1.HttpException('该应用不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const useApp = await this.userAppsEntity.count({ where: { appId: id } }); - const res = await this.appEntity.delete(id); - if (res.affected > 0) - return '删除App成功'; - throw new common_1.HttpException('删除App失败!', common_1.HttpStatus.BAD_REQUEST); - } - async auditPass(body) { - const { id } = body; - const a = await this.appEntity.findOne({ where: { id, status: 3 } }); - if (!a) { - throw new common_1.HttpException('该应用不存在!', common_1.HttpStatus.BAD_REQUEST); - } - await this.appEntity.update({ id }, { status: 4 }); - await this.userAppsEntity.update({ appId: id }, { status: 4 }); - return '应用审核通过'; - } - async auditFail(body) { - const { id } = body; - const a = await this.appEntity.findOne({ where: { id, status: 3 } }); - if (!a) { - throw new common_1.HttpException('该应用不存在!', common_1.HttpStatus.BAD_REQUEST); - } - await this.appEntity.update({ id }, { status: 5 }); - await this.userAppsEntity.update({ appId: id }, { status: 5 }); - return '应用审核拒绝完成'; - } - async collect(body, req) { - const { appId } = body; - const { id: userId } = req.user; - const historyApp = await this.userAppsEntity.findOne({ - where: { appId, userId }, - }); - if (historyApp) { - const r = await this.userAppsEntity.delete({ appId, userId }); - if (r.affected > 0) { - return '取消收藏成功!'; - } - else { - throw new common_1.HttpException('取消收藏失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - const app = await this.appEntity.findOne({ where: { id: appId } }); - const { id, role: appRole, catId } = app; - const collectInfo = { - userId, - appId: id, - catId, - appRole, - public: true, - status: 1, - }; - await this.userAppsEntity.save(collectInfo); - return '已将应用加入到我的收藏!'; - } - async mineApps(req, query = { page: 1, size: 30 }) { - const { id } = req.user; - const { page = 1, size = 30 } = query; - let rows, count; - try { - [rows, count] = await this.userAppsEntity.findAndCount({ - where: { userId: id, status: (0, typeorm_2.In)([1, 3, 4, 5]) }, - order: { id: 'DESC' }, - skip: (page - 1) * size, - take: size, - }); - const appIds = rows.map((item) => item.appId); - const appsInfo = await this.appEntity.find({ where: { id: (0, typeorm_2.In)(appIds) } }); - rows.forEach((item) => { - const app = appsInfo.find((c) => c.id === item.appId); - item.appName = app ? app.name : '未知'; - item.appRole = app ? app.role : '未知'; - item.appDes = app ? app.des : '未知'; - item.coverImg = app ? app.coverImg : '未知'; - item.demoData = app ? app.demoData : '未知'; - item.preset = app.userId === id ? app.preset : '******'; - }); - } - catch (error) { - console.error(`处理用户ID: ${id} 的mineApps请求时发生错误`, error); - throw error; - } - return { rows, count }; - } -}; -AppService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(appCats_entity_1.AppCatsEntity)), - __param(1, (0, typeorm_1.InjectRepository)(app_entity_1.AppEntity)), - __param(2, (0, typeorm_1.InjectRepository)(userApps_entity_1.UserAppsEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository]) -], AppService); -exports.AppService = AppService; diff --git a/AIWebQuickDeploy/dist/modules/app/appCats.entity.js b/AIWebQuickDeploy/dist/modules/app/appCats.entity.js deleted file mode 100644 index 8a5d0bc..0000000 --- a/AIWebQuickDeploy/dist/modules/app/appCats.entity.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AppCatsEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let AppCatsEntity = class AppCatsEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ unique: true, comment: 'App分类名称' }), - __metadata("design:type", String) -], AppCatsEntity.prototype, "name", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App分类排序、数字越大越靠前', default: 100 }), - __metadata("design:type", Number) -], AppCatsEntity.prototype, "order", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App分类是否启用中 0:禁用 1:启用', default: 1 }), - __metadata("design:type", Number) -], AppCatsEntity.prototype, "status", void 0); -AppCatsEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'app_cats' }) -], AppCatsEntity); -exports.AppCatsEntity = AppCatsEntity; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/collectApp.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/collectApp.dto.js deleted file mode 100644 index 182f370..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/collectApp.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CollectAppDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class CollectAppDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要收藏的appId', required: true }), - (0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }), - __metadata("design:type", Number) -], CollectAppDto.prototype, "appId", void 0); -exports.CollectAppDto = CollectAppDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/createApp.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/createApp.dto.js deleted file mode 100644 index 8d9535c..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/createApp.dto.js +++ /dev/null @@ -1,75 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateAppDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class CreateAppDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '前端助手', description: 'app名称', required: true }), - (0, class_validator_1.IsDefined)({ message: 'app名称是必传参数' }), - __metadata("design:type", String) -], CreateAppDto.prototype, "name", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: 'app分类Id', required: true }), - (0, class_validator_1.IsDefined)({ message: 'app分类Id必传参数' }), - __metadata("design:type", Number) -], CreateAppDto.prototype, "catId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '适用于编程编码、期望成为您的编程助手', - description: 'app名称详情描述', - required: false, - }), - (0, class_validator_1.IsDefined)({ message: 'app名称描述是必传参数' }), - __metadata("design:type", String) -], CreateAppDto.prototype, "des", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '你现在是一个翻译官。接下来我说的所有话帮我翻译成中文', description: '预设的prompt', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], CreateAppDto.prototype, "preset", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'GPTs 的调用ID', description: 'GPTs 使用的 ID', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], CreateAppDto.prototype, "gizmoID", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ description: '是否GPTs', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreateAppDto.prototype, "isGPTs", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'https://xxxx.png', description: '套餐封面图片', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], CreateAppDto.prototype, "coverImg", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 100, description: '套餐排序、数字越大越靠前', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreateAppDto.prototype, "order", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '套餐状态 0:禁用 1:启用', required: true }), - (0, class_validator_1.IsNumber)({}, { message: '套餐状态必须是Number' }), - (0, class_validator_1.IsIn)([0, 1, 3, 4, 5], { message: '套餐状态错误' }), - __metadata("design:type", Number) -], CreateAppDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '这是一句示例数据', description: 'app示例数据', required: false }), - __metadata("design:type", String) -], CreateAppDto.prototype, "demoData", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'system', description: '创建的角色', required: false }), - __metadata("design:type", String) -], CreateAppDto.prototype, "role", void 0); -exports.CreateAppDto = CreateAppDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/createCats.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/createCats.dto.js deleted file mode 100644 index 0f97568..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/createCats.dto.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateCatsDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class CreateCatsDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '编程助手', - description: 'app分类名称', - required: true, - }), - (0, class_validator_1.IsDefined)({ message: 'app分类名称是必传参数' }), - __metadata("design:type", String) -], CreateCatsDto.prototype, "name", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: 100, - description: '分类排序、数字越大越靠前', - required: false, - }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreateCatsDto.prototype, "order", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: 1, - description: '分类状态 0:禁用 1:启用', - required: true, - }), - (0, class_validator_1.IsNumber)({}, { message: '状态必须是Number' }), - (0, class_validator_1.IsIn)([0, 1, 3, 4, 5], { message: '套餐状态错误' }), - __metadata("design:type", Number) -], CreateCatsDto.prototype, "status", void 0); -exports.CreateCatsDto = CreateCatsDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/custonApp.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/custonApp.dto.js deleted file mode 100644 index 83c0516..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/custonApp.dto.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CustomAppDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class CustomAppDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '前端助手', description: 'app名称', required: true }), - __metadata("design:type", String) -], CustomAppDto.prototype, "name", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: 'app分类Id', required: true }), - __metadata("design:type", Number) -], CustomAppDto.prototype, "catId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '适用于编程编码、期望成为您的编程助手', - description: 'app名称详情描述', - required: false, - }), - (0, class_validator_1.IsDefined)({ message: 'app名称描述是必传参数' }), - __metadata("design:type", String) -], CustomAppDto.prototype, "des", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '你现在是一个翻译官。接下来我说的所有话帮我翻译成中文', description: '预设的prompt', required: true }), - __metadata("design:type", String) -], CustomAppDto.prototype, "preset", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'https://xxxx.png', description: '套餐封面图片', required: false }), - __metadata("design:type", String) -], CustomAppDto.prototype, "coverImg", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '这是一句示例数据', description: 'app示例数据', required: false }), - __metadata("design:type", String) -], CustomAppDto.prototype, "demoData", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: false, description: '是否共享到所有人', required: false }), - __metadata("design:type", Boolean) -], CustomAppDto.prototype, "public", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '应用ID', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CustomAppDto.prototype, "appId", void 0); -exports.CustomAppDto = CustomAppDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/deleteApp.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/deleteApp.dto.js deleted file mode 100644 index 35f49c4..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/deleteApp.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OperateAppDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class OperateAppDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要删除的appId', required: true }), - (0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }), - __metadata("design:type", Number) -], OperateAppDto.prototype, "id", void 0); -exports.OperateAppDto = OperateAppDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/deleteCats.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/deleteCats.dto.js deleted file mode 100644 index f654100..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/deleteCats.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DeleteCatsDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class DeleteCatsDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要删除app分类Id', required: true }), - (0, class_validator_1.IsNumber)({}, { message: 'ID必须是Number' }), - __metadata("design:type", Number) -], DeleteCatsDto.prototype, "id", void 0); -exports.DeleteCatsDto = DeleteCatsDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/queryApp.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/queryApp.dto.js deleted file mode 100644 index 910da1e..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/queryApp.dto.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QuerAppDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class QuerAppDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAppDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAppDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'name', description: 'app名称', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerAppDto.prototype, "name", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: 'app状态 0:禁用 1:启用 3:审核加入广场中 4:已拒绝加入广场', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAppDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 2, description: 'app分类Id', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAppDto.prototype, "catId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'role', description: 'app角色', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerAppDto.prototype, "role", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '关键词', description: '搜索关键词', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerAppDto.prototype, "keyword", void 0); -exports.QuerAppDto = QuerAppDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/queryCats.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/queryCats.dto.js deleted file mode 100644 index 63b7e31..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/queryCats.dto.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QuerCatsDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QuerCatsDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerCatsDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerCatsDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'name', description: '分类名称', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerCatsDto.prototype, "name", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '分类状态 0:禁用 1:启用', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerCatsDto.prototype, "status", void 0); -exports.QuerCatsDto = QuerCatsDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/updateApp.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/updateApp.dto.js deleted file mode 100644 index fc89fd2..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/updateApp.dto.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateAppDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -const createApp_dto_1 = require("./createApp.dto"); -class UpdateAppDto extends createApp_dto_1.CreateAppDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要修改的分类Id', required: true }), - (0, class_validator_1.IsNumber)({}, { message: '分类ID必须是Number' }), - __metadata("design:type", Number) -], UpdateAppDto.prototype, "id", void 0); -exports.UpdateAppDto = UpdateAppDto; diff --git a/AIWebQuickDeploy/dist/modules/app/dto/updateCats.dto.js b/AIWebQuickDeploy/dist/modules/app/dto/updateCats.dto.js deleted file mode 100644 index 4d50c1a..0000000 --- a/AIWebQuickDeploy/dist/modules/app/dto/updateCats.dto.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateCatsDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -const createCats_dto_1 = require("./createCats.dto"); -class UpdateCatsDto extends createCats_dto_1.CreateCatsDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要修改的分类Id', required: true }), - (0, class_validator_1.IsNumber)({}, { message: '分类ID必须是Number' }), - __metadata("design:type", Number) -], UpdateCatsDto.prototype, "id", void 0); -exports.UpdateCatsDto = UpdateCatsDto; diff --git a/AIWebQuickDeploy/dist/modules/app/userApps.entity.js b/AIWebQuickDeploy/dist/modules/app/userApps.entity.js deleted file mode 100644 index e73e09c..0000000 --- a/AIWebQuickDeploy/dist/modules/app/userApps.entity.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserAppsEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let UserAppsEntity = class UserAppsEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户ID' }), - __metadata("design:type", Number) -], UserAppsEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '应用ID' }), - __metadata("design:type", Number) -], UserAppsEntity.prototype, "appId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '应用分类ID' }), - __metadata("design:type", Number) -], UserAppsEntity.prototype, "catId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'app类型 system/user', default: 'user' }), - __metadata("design:type", String) -], UserAppsEntity.prototype, "appType", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '是否公开到公告菜单', default: false }), - __metadata("design:type", Boolean) -], UserAppsEntity.prototype, "public", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'app状态 1正常 2审核 3违规', default: 1 }), - __metadata("design:type", Number) -], UserAppsEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'App应用排序、数字越大越靠前', default: 100 }), - __metadata("design:type", Number) -], UserAppsEntity.prototype, "order", void 0); -UserAppsEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'user_apps' }) -], UserAppsEntity); -exports.UserAppsEntity = UserAppsEntity; diff --git a/AIWebQuickDeploy/dist/modules/auth/auth.controller.js b/AIWebQuickDeploy/dist/modules/auth/auth.controller.js deleted file mode 100644 index e5c460a..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/auth.controller.js +++ /dev/null @@ -1,161 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthController = void 0; -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const auth_service_1 = require("./auth.service"); -const authLogin_dto_1 = require("./dto/authLogin.dto"); -const authRegister_dto_1 = require("./dto/authRegister.dto"); -const updatePassByOther_dto_1 = require("./dto/updatePassByOther.dto"); -const updatePassword_dto_1 = require("./dto/updatePassword.dto"); -let AuthController = class AuthController { - constructor(authService) { - this.authService = authService; - } - async register(body, req) { - return await this.authService.register(body, req); - } - async login(body, req) { - return this.authService.login(body, req); - } - async loginWithCaptcha(body, req) { - return this.authService.loginWithCaptcha(body, req); - } - async updatePassword(req, body) { - return this.authService.updatePassword(req, body); - } - async updatePassByOther(req, body) { - return this.authService.updatePassByOther(req, body); - } - async getInfo(req) { - return this.authService.getInfo(req); - } - async sendCode(parmas) { - return this.authService.sendCode(parmas); - } - async sendPhoneCode(parmas) { - return this.authService.sendPhoneCode(parmas); - } - async verifyIdentity(req, body) { - return this.authService.verifyIdentity(req, body); - } - async verifyPhoneIdentity(req, body) { - return this.authService.verifyPhoneIdentity(req, body); - } -}; -__decorate([ - (0, common_1.Post)('register'), - (0, swagger_1.ApiOperation)({ summary: '用户注册' }), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [authRegister_dto_1.UserRegisterDto, Object]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "register", null); -__decorate([ - (0, common_1.Post)('login'), - (0, swagger_1.ApiOperation)({ summary: '用户登录' }), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [authLogin_dto_1.UserLoginDto, Object]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "login", null); -__decorate([ - (0, common_1.Post)('loginWithCaptcha'), - (0, swagger_1.ApiOperation)({ summary: '用户使用验证码登录' }), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "loginWithCaptcha", null); -__decorate([ - (0, common_1.Post)('updatePassword'), - (0, swagger_1.ApiOperation)({ summary: '用户更改密码' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, updatePassword_dto_1.UpdatePasswordDto]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "updatePassword", null); -__decorate([ - (0, common_1.Post)('updatePassByOther'), - (0, swagger_1.ApiOperation)({ summary: '用户更改密码' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, updatePassByOther_dto_1.UpdatePassByOtherDto]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "updatePassByOther", null); -__decorate([ - (0, common_1.Get)('getInfo'), - (0, swagger_1.ApiOperation)({ summary: '获取用户个人信息' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "getInfo", null); -__decorate([ - (0, common_1.Post)('sendCode'), - (0, swagger_1.ApiOperation)({ summary: '发送验证码' }), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "sendCode", null); -__decorate([ - (0, common_1.Post)('sendPhoneCode'), - (0, swagger_1.ApiOperation)({ summary: '发送手机验证码' }), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "sendPhoneCode", null); -__decorate([ - (0, common_1.Post)('verifyIdentity'), - (0, swagger_1.ApiOperation)({ summary: '验证身份' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "verifyIdentity", null); -__decorate([ - (0, common_1.Post)('verifyPhoneIdentity'), - (0, swagger_1.ApiOperation)({ summary: '验证手机号' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", Promise) -], AuthController.prototype, "verifyPhoneIdentity", null); -AuthController = __decorate([ - (0, swagger_1.ApiTags)('auth'), - (0, common_1.Controller)('auth'), - __metadata("design:paramtypes", [auth_service_1.AuthService]) -], AuthController); -exports.AuthController = AuthController; diff --git a/AIWebQuickDeploy/dist/modules/auth/auth.module.js b/AIWebQuickDeploy/dist/modules/auth/auth.module.js deleted file mode 100644 index 039db53..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/auth.module.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthModule = void 0; -const jwt_strategy_1 = require("../../common/auth/jwt.strategy"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const common_1 = require("@nestjs/common"); -const jwt_1 = require("@nestjs/jwt"); -const passport_1 = require("@nestjs/passport"); -const typeorm_1 = require("@nestjs/typeorm"); -const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const cramiPackage_entity_1 = require("../crami/cramiPackage.entity"); -const config_entity_1 = require("../globalConfig/config.entity"); -const mailer_service_1 = require("../mailer/mailer.service"); -const redisCache_module_1 = require("../redisCache/redisCache.module"); -const redisCache_service_1 = require("../redisCache/redisCache.service"); -const user_entity_1 = require("../user/user.entity"); -const user_module_1 = require("../user/user.module"); -const accountLog_entity_1 = require("../userBalance/accountLog.entity"); -const balance_entity_1 = require("../userBalance/balance.entity"); -const fingerprint_entity_1 = require("../userBalance/fingerprint.entity"); -const userBalance_entity_1 = require("../userBalance/userBalance.entity"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -const verification_service_1 = require("./../verification/verification.service"); -const verifycation_entity_1 = require("./../verification/verifycation.entity"); -const auth_controller_1 = require("./auth.controller"); -const auth_service_1 = require("./auth.service"); -let AuthModule = class AuthModule { -}; -AuthModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - user_module_1.UserModule, - redisCache_module_1.RedisCacheModule, - passport_1.PassportModule.register({ defaultStrategy: 'jwt' }), - jwt_1.JwtModule.registerAsync({ - inject: [redisCache_service_1.RedisCacheService], - useFactory: async (redisService) => ({ - secret: await redisService.getJwtSecret(), - signOptions: { expiresIn: '7d' }, - }), - }), - typeorm_1.TypeOrmModule.forFeature([ - verifycation_entity_1.VerifycationEntity, - balance_entity_1.BalanceEntity, - accountLog_entity_1.AccountLogEntity, - config_entity_1.ConfigEntity, - cramiPackage_entity_1.CramiPackageEntity, - userBalance_entity_1.UserBalanceEntity, - user_entity_1.UserEntity, - fingerprint_entity_1.FingerprintLogEntity, - chatLog_entity_1.ChatLogEntity, - chatGroup_entity_1.ChatGroupEntity, - ]), - ], - controllers: [auth_controller_1.AuthController], - providers: [ - auth_service_1.AuthService, - jwt_strategy_1.JwtStrategy, - jwtAuth_guard_1.JwtAuthGuard, - mailer_service_1.MailerService, - verification_service_1.VerificationService, - userBalance_service_1.UserBalanceService, - redisCache_service_1.RedisCacheService, - ], - exports: [auth_service_1.AuthService], - }) -], AuthModule); -exports.AuthModule = AuthModule; diff --git a/AIWebQuickDeploy/dist/modules/auth/auth.service.js b/AIWebQuickDeploy/dist/modules/auth/auth.service.js deleted file mode 100644 index 8cbecc4..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/auth.service.js +++ /dev/null @@ -1,460 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AuthService = void 0; -const user_constant_1 = require("../../common/constants/user.constant"); -const utils_1 = require("../../common/utils"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const common_1 = require("@nestjs/common"); -const jwt_1 = require("@nestjs/jwt"); -const typeorm_1 = require("@nestjs/typeorm"); -const bcrypt = require("bcryptjs"); -const os = require("os"); -const typeorm_2 = require("typeorm"); -const config_entity_1 = require("../globalConfig/config.entity"); -const mailer_service_1 = require("../mailer/mailer.service"); -const redisCache_service_1 = require("../redisCache/redisCache.service"); -const user_service_1 = require("../user/user.service"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -const verification_service_1 = require("./../verification/verification.service"); -let AuthService = class AuthService { - constructor(configEntity, userService, jwtService, mailerService, verificationService, userBalanceService, redisCacheService, globalConfigService) { - this.configEntity = configEntity; - this.userService = userService; - this.jwtService = jwtService; - this.mailerService = mailerService; - this.verificationService = verificationService; - this.userBalanceService = userBalanceService; - this.redisCacheService = redisCacheService; - this.globalConfigService = globalConfigService; - } - async onModuleInit() { - this.getIp(); - } - async register(body, req) { - const { password, contact, code } = body; - let email = '', phone = ''; - const isEmail = /\S+@\S+\.\S+/.test(contact); - const isPhone = /^\d{10,}$/.test(contact); - common_1.Logger.debug(`Contact: ${contact}, isEmail: ${isEmail}, isPhone: ${isPhone}`); - let username = (0, utils_1.createRandomUid)(); - while (true) { - const usernameTaken = await this.userService.verifyUserRegister({ - username, - }); - common_1.Logger.debug(`Checking if username ${username} is taken: ${usernameTaken}`); - if (usernameTaken) { - break; - } - username = (0, utils_1.createRandomUid)(); - } - if (isEmail) { - email = contact; - const isAvailable = await this.userService.verifyUserRegister({ - username, - email, - }); - common_1.Logger.debug(`Email ${email} is available: ${isAvailable}`); - if (!isAvailable) { - throw new common_1.HttpException('当前邮箱已注册,请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); - } - } - else if (isPhone) { - phone = contact; - const isAvailable = await this.userService.verifyUserRegister({ - username, - phone, - }); - common_1.Logger.debug(`Phone ${phone} is available: ${isAvailable}`); - if (!isAvailable) { - throw new common_1.HttpException('当前手机号已注册,请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); - } - } - else { - throw new common_1.HttpException('请提供有效的邮箱地址或手机号码。', common_1.HttpStatus.BAD_REQUEST); - } - const noVerifyRegister = await this.globalConfigService.getConfigs([ - 'noVerifyRegister', - ]); - common_1.Logger.debug(`noVerifyRegister: ${noVerifyRegister}`); - if (noVerifyRegister !== '1') { - const nameSpace = await this.globalConfigService.getNamespace(); - const key = `${nameSpace}:CODE:${contact}`; - const redisCode = await this.redisCacheService.get({ key }); - common_1.Logger.debug(`Retrieved redisCode for ${contact}: ${redisCode}`); - if (code === '') { - throw new common_1.HttpException('请输入验证码', common_1.HttpStatus.BAD_REQUEST); - } - if (!redisCode) { - common_1.Logger.log(`验证码过期: ${contact}`, 'authService'); - throw new common_1.HttpException('验证码已过期,请重新发送!', common_1.HttpStatus.BAD_REQUEST); - } - if (code !== redisCode) { - common_1.Logger.log(`验证码错误: ${contact} 输入的验证码: ${code}, 期望的验证码: ${redisCode}`, 'authService'); - throw new common_1.HttpException('验证码填写错误,请重新输入!', common_1.HttpStatus.BAD_REQUEST); - } - } - let newUser; - if (isEmail) { - newUser = { - username, - password, - email: contact, - status: user_constant_1.UserStatusEnum.ACTIVE, - }; - } - else { - const email = `${(0, utils_1.createRandomUid)()}@aiweb.com`; - newUser = { - username, - password, - email, - phone: contact, - status: user_constant_1.UserStatusEnum.ACTIVE, - }; - } - common_1.Logger.debug('获取默认用户头像...'); - const userDefautlAvatar = await this.globalConfigService.getConfigs([ - 'userDefautlAvatar', - ]); - common_1.Logger.debug(`使用默认用户头像: ${userDefautlAvatar}`); - newUser.avatar = userDefautlAvatar; - common_1.Logger.debug('加密用户密码...'); - const hashedPassword = bcrypt.hashSync(password, 10); - newUser.password = hashedPassword; - common_1.Logger.debug('保存新用户到数据库...'); - const u = await this.userService.createUser(newUser); - common_1.Logger.debug(`用户创建成功,用户ID: ${u.id}`); - await this.userBalanceService.addBalanceToNewUser(u.id); - common_1.Logger.debug('完成新用户余额处理'); - return { success: true, message: '注册成功' }; - } - async login(user, req) { - console.log(`开始用户登录流程,用户名: ${user.username}`); - const u = await this.userService.verifyUserCredentials(user); - if (!u) { - console.error(`登录失败: 用户凭证无效 - 用户名: ${user.username}`); - throw new common_1.HttpException('登录失败,用户凭证无效。', common_1.HttpStatus.UNAUTHORIZED); - } - const { username, id, email, role, openId, client, phone } = u; - console.log(`用户凭证验证成功,用户ID: ${id}, 用户名: ${username}`); - const ip = (0, utils_1.getClientIp)(req); - await this.userService.savaLoginIp(id, ip); - console.log(`保存登录IP: ${ip} - 用户ID: ${id}`); - const token = await this.jwtService.sign({ - username, - id, - email, - role, - openId, - client, - phone, - }); - console.log(`JWT令牌生成成功 - 用户ID: ${id}`); - await this.redisCacheService.saveToken(id, token); - console.log(`令牌已保存到Redis - 用户ID: ${id}`); - return token; - } - async loginWithCaptcha(body, req) { - const { contact, code } = body; - let email = '', phone = ''; - const isEmail = /\S+@\S+\.\S+/.test(contact); - const isPhone = /^\d{10,}$/.test(contact); - if (isEmail) { - email = contact; - } - else if (isPhone) { - phone = contact; - } - else { - throw new common_1.HttpException('请提供有效的邮箱地址或手机号码。', common_1.HttpStatus.BAD_REQUEST); - } - const isAvailable = await this.userService.verifyUserRegister({ - email, - phone, - }); - const nameSpace = await this.globalConfigService.getNamespace(); - const key = `${nameSpace}:CODE:${contact}`; - const redisCode = await this.redisCacheService.get({ key }); - if (!redisCode) { - common_1.Logger.log(`验证码过期: ${contact}`, 'authService'); - throw new common_1.HttpException('验证码已过期,请重新发送!', common_1.HttpStatus.BAD_REQUEST); - } - if (code !== redisCode) { - common_1.Logger.log(`验证码错误: ${contact} 输入的验证码: ${code}, 期望的验证码: ${redisCode}`, 'authService'); - throw new common_1.HttpException('验证码填写错误,请重新输入!', common_1.HttpStatus.BAD_REQUEST); - } - let u; - if (isAvailable) { - u = await this.userService.createUserFromContact({ email, phone }); - } - else { - u = await this.userService.getUserByContact({ email, phone }); - } - if (!u) { - throw new common_1.HttpException('登录失败,用户凭证无效。', common_1.HttpStatus.UNAUTHORIZED); - } - const { username, id, role, openId, client } = u; - console.log(`用户凭证验证成功,用户ID: ${id}, 用户名: ${username}`); - const ip = (0, utils_1.getClientIp)(req); - await this.userService.savaLoginIp(id, ip); - console.log(`保存登录IP: ${ip} - 用户ID: ${id}`); - const token = await this.jwtService.sign({ - username, - id, - email, - role, - openId, - client, - phone, - }); - console.log(`JWT令牌生成成功 - 用户ID: ${id}`); - await this.redisCacheService.saveToken(id, token); - console.log(`令牌已保存到Redis - 用户ID: ${id}`); - return token; - } - async loginByOpenId(user, req) { - const { status } = user; - if (status !== user_constant_1.UserStatusEnum.ACTIVE) { - throw new common_1.HttpException(user_constant_1.UserStatusErrMsg[status], common_1.HttpStatus.BAD_REQUEST); - } - const { username, id, email, role, openId, client } = user; - const ip = (0, utils_1.getClientIp)(req); - await this.userService.savaLoginIp(id, ip); - const token = await this.jwtService.sign({ - username, - id, - email, - role, - openId, - client, - }); - await this.redisCacheService.saveToken(id, token); - return token; - } - async getInfo(req) { - const { id } = req.user; - return await this.userService.getUserInfo(id); - } - async updatePassword(req, body) { - const { id, client, role } = req.user; - if (client && Number(client) > 0) { - throw new common_1.HttpException('无权此操作、请联系管理员!', common_1.HttpStatus.BAD_REQUEST); - } - if (role === 'admin') { - throw new common_1.HttpException('非法操作、请联系管理员!', common_1.HttpStatus.BAD_REQUEST); - } - this.userService.updateUserPassword(id, body.password); - return '密码修改成功'; - } - async updatePassByOther(req, body) { - const { id, client } = req.user; - if (!client) { - throw new common_1.HttpException('无权此操作!', common_1.HttpStatus.BAD_REQUEST); - } - this.userService.updateUserPassword(id, body.password); - return '密码修改成功'; - } - getIp() { - let ipAddress; - const interfaces = os.networkInterfaces(); - Object.keys(interfaces).forEach((interfaceName) => { - const interfaceInfo = interfaces[interfaceName]; - for (let i = 0; i < interfaceInfo.length; i++) { - const alias = interfaceInfo[i]; - if (alias.family === 'IPv4' && - alias.address !== '127.0.0.1' && - !alias.internal) { - ipAddress = alias.address; - break; - } - } - }); - this.ipAddress = ipAddress; - } - async sendCode(body) { - const { contact, isLogin } = body; - let email = '', phone = ''; - const code = (0, utils_1.createRandomCode)(); - const isEmail = /\S+@\S+\.\S+/.test(contact); - const isPhone = /^\d{10,}$/.test(contact); - if (!isEmail && !isPhone) { - throw new common_1.HttpException('请提供有效的邮箱地址或手机号码。', common_1.HttpStatus.BAD_REQUEST); - } - if (!isLogin) { - if (isEmail) { - email = contact; - const isAvailable = await this.userService.verifyUserRegister({ - email, - }); - if (!isAvailable) { - throw new common_1.HttpException('当前邮箱已注册,请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); - } - } - else if (isPhone) { - phone = contact; - const isAvailable = await this.userService.verifyUserRegister({ - phone, - }); - if (!isAvailable) { - throw new common_1.HttpException('当前手机号已注册,请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); - } - } - } - const nameSpace = await this.globalConfigService.getNamespace(); - const key = `${nameSpace}:CODE:${contact}`; - const ttl = await this.redisCacheService.ttl(key); - if (ttl && ttl > 0 && isPhone) { - throw new common_1.HttpException(`${ttl}秒内不得重复发送验证码!`, common_1.HttpStatus.BAD_REQUEST); - } - if (isEmail) { - const existingCode = await this.redisCacheService.get({ key }); - if (existingCode) { - await this.mailerService.sendMail({ - to: email, - context: { - code: existingCode, - }, - }); - return `验证码发送成功、请填写验证码完成注册!`; - } - else { - try { - await this.mailerService.sendMail({ - to: email, - context: { - code: code, - }, - }); - console.log('邮件发送成功'); - } - catch (error) { - console.error('邮件发送失败', error); - } - await this.redisCacheService.set({ key, val: code }, 10 * 60); - return `验证码发送成功、请填写验证码完成注册!`; - } - } - else if (isPhone) { - const messageInfo = { phone, code }; - await this.verificationService.sendPhoneCode(messageInfo); - await this.redisCacheService.set({ key, val: code }, 10 * 60); - return `验证码发送成功、请填写验证码完成注册!`; - } - } - async sendPhoneCode(body) { - const { phone, isLogin } = body; - const code = (0, utils_1.createRandomCode)(); - const isPhone = /^\d{10,}$/.test(phone); - if (!isPhone) { - throw new common_1.HttpException('请提供有效的邮箱地址或手机号码。', common_1.HttpStatus.BAD_REQUEST); - } - if (isLogin) { - if (isPhone) { - const isAvailable = await this.userService.verifyUserRegister({ - phone, - }); - if (!isAvailable) { - throw new common_1.HttpException('当前手机号已注册,请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); - } - } - } - const nameSpace = await this.globalConfigService.getNamespace(); - const key = `${nameSpace}:CODE:${phone}`; - const ttl = await this.redisCacheService.ttl(key); - if (ttl && ttl > 0 && isPhone) { - throw new common_1.HttpException(`${ttl}秒内不得重复发送验证码!`, common_1.HttpStatus.BAD_REQUEST); - } - const messageInfo = { phone, code }; - await this.redisCacheService.set({ key, val: code }, 10 * 60); - await this.verificationService.sendPhoneCode(messageInfo); - return `验证码发送成功、请填写验证码完成认证!`; - } - createTokenFromFingerprint(fingerprint) { - const token = this.jwtService.sign({ - username: `游客${fingerprint}`, - id: fingerprint, - email: `${fingerprint}@visitor.com`, - role: 'visitor', - openId: null, - client: null, - }); - return token; - } - async verifyIdentity(req, body) { - common_1.Logger.debug('开始实名认证流程'); - const { name, idCard } = body; - const { id } = req.user; - try { - const result = await this.verificationService.verifyIdentity(body); - common_1.Logger.debug(`实名认证结果: ${result}`); - if (!result) { - throw new common_1.HttpException('身份验证错误,请检查实名信息', common_1.HttpStatus.BAD_REQUEST); - } - await this.userService.saveRealNameInfo(id, name, idCard); - return '认证成功'; - } - catch (error) { - common_1.Logger.error('验证过程出现错误', error); - throw new common_1.HttpException('认证失败,请检查相关信息', common_1.HttpStatus.BAD_REQUEST); - } - } - async verifyPhoneIdentity(req, body) { - common_1.Logger.debug('开始手机号认证流程'); - const { phone, username, password, code } = body; - const { id } = req.user; - const nameSpace = this.globalConfigService.getNamespace(); - const key = `${nameSpace}:CODE:${phone}`; - const redisCode = await this.redisCacheService.get({ key }); - common_1.Logger.debug(`Retrieved redisCode for ${phone}: ${redisCode}`); - if (code === '') { - throw new common_1.HttpException('请输入验证码', common_1.HttpStatus.BAD_REQUEST); - } - if (!redisCode) { - common_1.Logger.log(`验证码过期: ${phone}`, 'authService'); - throw new common_1.HttpException('验证码已过期,请重新发送!', common_1.HttpStatus.BAD_REQUEST); - } - if (code !== redisCode) { - common_1.Logger.log(`验证码错误: ${phone} 输入的验证码: ${code}, 期望的验证码: ${redisCode}`, 'authService'); - throw new common_1.HttpException('验证码填写错误,请重新输入!', common_1.HttpStatus.BAD_REQUEST); - } - if (username) { - const usernameTaken = await this.userService.isUsernameTaken(body.username, id); - if (usernameTaken) { - throw new common_1.HttpException('用户名已存在!', common_1.HttpStatus.BAD_REQUEST); - } - } - try { - await this.userService.updateUserPhone(id, phone, username, password); - return '认证成功'; - } - catch (error) { - common_1.Logger.error('验证过程出现错误', error); - throw new common_1.HttpException('身份验证错误,请检查相关信息', common_1.HttpStatus.BAD_REQUEST); - } - } -}; -AuthService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - user_service_1.UserService, - jwt_1.JwtService, - mailer_service_1.MailerService, - verification_service_1.VerificationService, - userBalance_service_1.UserBalanceService, - redisCache_service_1.RedisCacheService, - globalConfig_service_1.GlobalConfigService]) -], AuthService); -exports.AuthService = AuthService; diff --git a/AIWebQuickDeploy/dist/modules/auth/dto/adminLogin.dto.js b/AIWebQuickDeploy/dist/modules/auth/dto/adminLogin.dto.js deleted file mode 100644 index b8c61a3..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/dto/adminLogin.dto.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AdminLoginDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class AdminLoginDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'super', description: '邮箱' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }), - (0, class_validator_1.MinLength)(2, { message: '用户名最短是两位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户名最长不得超过30位!' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], AdminLoginDto.prototype, "username", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '999999', description: '密码' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }), - (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), - __metadata("design:type", String) -], AdminLoginDto.prototype, "password", void 0); -exports.AdminLoginDto = AdminLoginDto; diff --git a/AIWebQuickDeploy/dist/modules/auth/dto/authLogin.dto.js b/AIWebQuickDeploy/dist/modules/auth/dto/authLogin.dto.js deleted file mode 100644 index 19686ad..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/dto/authLogin.dto.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserLoginDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class UserLoginDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'super', description: '邮箱' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }), - (0, class_validator_1.MinLength)(2, { message: '用户名最短是两位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户名最长不得超过30位!' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UserLoginDto.prototype, "username", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '用户ID' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UserLoginDto.prototype, "uid", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '999999', description: '密码' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }), - (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), - __metadata("design:type", String) -], UserLoginDto.prototype, "password", void 0); -exports.UserLoginDto = UserLoginDto; diff --git a/AIWebQuickDeploy/dist/modules/auth/dto/authRegister.dto.js b/AIWebQuickDeploy/dist/modules/auth/dto/authRegister.dto.js deleted file mode 100644 index 5f94880..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/dto/authRegister.dto.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserRegisterDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class UserRegisterDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'cooper', description: '用户名称' }), - __metadata("design:type", String) -], UserRegisterDto.prototype, "username", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '123456', description: '用户密码' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空' }), - (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), - __metadata("design:type", String) -], UserRegisterDto.prototype, "password", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'ai@aiweb.com', description: '用户邮箱' }), - __metadata("design:type", String) -], UserRegisterDto.prototype, "email", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '', - description: '用户头像', - required: false, - }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UserRegisterDto.prototype, "avatar", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: 'default', - description: '用户注册来源', - required: false, - }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UserRegisterDto.prototype, "client", void 0); -exports.UserRegisterDto = UserRegisterDto; diff --git a/AIWebQuickDeploy/dist/modules/auth/dto/loginByPhone.dt.js b/AIWebQuickDeploy/dist/modules/auth/dto/loginByPhone.dt.js deleted file mode 100644 index 26971f7..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/dto/loginByPhone.dt.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.LoginByPhoneDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class LoginByPhoneDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '19999999', description: '手机号' }), - (0, class_validator_1.IsNotEmpty)({ message: '手机号不能为空!' }), - (0, class_validator_1.IsPhoneNumber)('CN', { message: '手机号格式不正确!' }), - __metadata("design:type", String) -], LoginByPhoneDto.prototype, "phone", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '999999', description: '密码' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }), - (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), - __metadata("design:type", String) -], LoginByPhoneDto.prototype, "password", void 0); -exports.LoginByPhoneDto = LoginByPhoneDto; diff --git a/AIWebQuickDeploy/dist/modules/auth/dto/sendPhoneCode.dto.js b/AIWebQuickDeploy/dist/modules/auth/dto/sendPhoneCode.dto.js deleted file mode 100644 index 9962f05..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/dto/sendPhoneCode.dto.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SendPhoneCodeDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class SendPhoneCodeDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '199999999', description: '手机号' }), - (0, class_validator_1.IsNotEmpty)({ message: '手机号不能为空' }), - (0, class_validator_1.MinLength)(11, { message: '手机号长度为11位' }), - (0, class_validator_1.MaxLength)(11, { message: '手机号长度为11位!' }), - __metadata("design:type", String) -], SendPhoneCodeDto.prototype, "phone", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '2b4i1b4', description: '图形验证码KEY' }), - (0, class_validator_1.IsNotEmpty)({ message: '验证码KEY不能为空' }), - __metadata("design:type", String) -], SendPhoneCodeDto.prototype, "captchaId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '1g4d', description: '图形验证码' }), - (0, class_validator_1.IsNotEmpty)({ message: '验证码不能为空' }), - __metadata("design:type", String) -], SendPhoneCodeDto.prototype, "captchaCode", void 0); -exports.SendPhoneCodeDto = SendPhoneCodeDto; diff --git a/AIWebQuickDeploy/dist/modules/auth/dto/updatePassByOther.dto.js b/AIWebQuickDeploy/dist/modules/auth/dto/updatePassByOther.dto.js deleted file mode 100644 index aa59a68..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/dto/updatePassByOther.dto.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdatePassByOtherDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class UpdatePassByOtherDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '666666', description: '三方用户更新新密码' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }), - (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), - __metadata("design:type", String) -], UpdatePassByOtherDto.prototype, "password", void 0); -exports.UpdatePassByOtherDto = UpdatePassByOtherDto; diff --git a/AIWebQuickDeploy/dist/modules/auth/dto/updatePassword.dto.js b/AIWebQuickDeploy/dist/modules/auth/dto/updatePassword.dto.js deleted file mode 100644 index b5a8f77..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/dto/updatePassword.dto.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdatePasswordDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class UpdatePasswordDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '666666', description: '用户更新新密码' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }), - (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), - __metadata("design:type", String) -], UpdatePasswordDto.prototype, "password", void 0); -exports.UpdatePasswordDto = UpdatePasswordDto; diff --git a/AIWebQuickDeploy/dist/modules/auth/dto/userRegisterByPhone.dto.js b/AIWebQuickDeploy/dist/modules/auth/dto/userRegisterByPhone.dto.js deleted file mode 100644 index e6337e3..0000000 --- a/AIWebQuickDeploy/dist/modules/auth/dto/userRegisterByPhone.dto.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserRegisterByPhoneDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class UserRegisterByPhoneDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'cooper', description: '用户名称' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }), - (0, class_validator_1.MinLength)(2, { message: '用户名最低需要大于2位数!' }), - (0, class_validator_1.MaxLength)(12, { message: '用户名不得超过12位!' }), - __metadata("design:type", String) -], UserRegisterByPhoneDto.prototype, "username", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '123456', description: '用户密码' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空' }), - (0, class_validator_1.MinLength)(6, { message: '用户密码最低需要大于6位数!' }), - (0, class_validator_1.MaxLength)(30, { message: '用户密码最长不能超过30位数!' }), - __metadata("design:type", String) -], UserRegisterByPhoneDto.prototype, "password", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '19999999999', description: '用户手机号码' }), - (0, class_validator_1.IsPhoneNumber)('CN', { message: '手机号码格式不正确!' }), - (0, class_validator_1.IsNotEmpty)({ message: '手机号码不能为空!' }), - __metadata("design:type", String) -], UserRegisterByPhoneDto.prototype, "phone", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '152546', description: '手机验证码' }), - (0, class_validator_1.IsNotEmpty)({ message: '手机验证码不能为空!' }), - __metadata("design:type", String) -], UserRegisterByPhoneDto.prototype, "phoneCode", void 0); -exports.UserRegisterByPhoneDto = UserRegisterByPhoneDto; diff --git a/AIWebQuickDeploy/dist/modules/autoreply/autoreply.controller.js b/AIWebQuickDeploy/dist/modules/autoreply/autoreply.controller.js deleted file mode 100644 index 52eb4a9..0000000 --- a/AIWebQuickDeploy/dist/modules/autoreply/autoreply.controller.js +++ /dev/null @@ -1,87 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AutoreplyController = void 0; -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const autoreply_service_1 = require("./autoreply.service"); -const addAutoReply_dto_1 = require("./dto/addAutoReply.dto"); -const delBadWords_dto_1 = require("./dto/delBadWords.dto"); -const queryAutoReply_dto_1 = require("./dto/queryAutoReply.dto"); -const updateAutoReply_dto_1 = require("./dto/updateAutoReply.dto"); -let AutoreplyController = class AutoreplyController { - constructor(autoreplyService) { - this.autoreplyService = autoreplyService; - } - queryAutoreply(query) { - return this.autoreplyService.queryAutoreply(query); - } - addAutoreply(body) { - return this.autoreplyService.addAutoreply(body); - } - updateAutoreply(body) { - return this.autoreplyService.updateAutoreply(body); - } - delAutoreply(body) { - return this.autoreplyService.delAutoreply(body); - } -}; -__decorate([ - (0, common_1.Get)('query'), - (0, swagger_1.ApiOperation)({ summary: '查询自动回复' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryAutoReply_dto_1.QueryAutoReplyDto]), - __metadata("design:returntype", void 0) -], AutoreplyController.prototype, "queryAutoreply", null); -__decorate([ - (0, common_1.Post)('add'), - (0, swagger_1.ApiOperation)({ summary: '添加自动回复' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [addAutoReply_dto_1.AddAutoReplyDto]), - __metadata("design:returntype", void 0) -], AutoreplyController.prototype, "addAutoreply", null); -__decorate([ - (0, common_1.Post)('update'), - (0, swagger_1.ApiOperation)({ summary: '修改自动回复' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [updateAutoReply_dto_1.UpdateAutoReplyDto]), - __metadata("design:returntype", void 0) -], AutoreplyController.prototype, "updateAutoreply", null); -__decorate([ - (0, common_1.Post)('del'), - (0, swagger_1.ApiOperation)({ summary: '删除自动回复' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [delBadWords_dto_1.DelAutoReplyDto]), - __metadata("design:returntype", void 0) -], AutoreplyController.prototype, "delAutoreply", null); -AutoreplyController = __decorate([ - (0, swagger_1.ApiTags)('autoreply'), - (0, common_1.Controller)('autoreply'), - __metadata("design:paramtypes", [autoreply_service_1.AutoreplyService]) -], AutoreplyController); -exports.AutoreplyController = AutoreplyController; diff --git a/AIWebQuickDeploy/dist/modules/autoreply/autoreply.entity.js b/AIWebQuickDeploy/dist/modules/autoreply/autoreply.entity.js deleted file mode 100644 index 2831d34..0000000 --- a/AIWebQuickDeploy/dist/modules/autoreply/autoreply.entity.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AutoReplyEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let AutoReplyEntity = class AutoReplyEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '提问的问题', type: 'text' }), - __metadata("design:type", String) -], AutoReplyEntity.prototype, "prompt", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '定义的答案', type: 'text' }), - __metadata("design:type", String) -], AutoReplyEntity.prototype, "answer", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 1, comment: '是否开启AI回复,0:关闭 1:启用' }), - __metadata("design:type", Number) -], AutoReplyEntity.prototype, "isAIReplyEnabled", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 1, comment: '启用当前自动回复状态, 0:关闭 1:启用' }), - __metadata("design:type", Number) -], AutoReplyEntity.prototype, "status", void 0); -AutoReplyEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'auto_reply' }) -], AutoReplyEntity); -exports.AutoReplyEntity = AutoReplyEntity; diff --git a/AIWebQuickDeploy/dist/modules/autoreply/autoreply.module.js b/AIWebQuickDeploy/dist/modules/autoreply/autoreply.module.js deleted file mode 100644 index 1c84706..0000000 --- a/AIWebQuickDeploy/dist/modules/autoreply/autoreply.module.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AutoreplyModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const autoreply_controller_1 = require("./autoreply.controller"); -const autoreply_entity_1 = require("./autoreply.entity"); -const autoreply_service_1 = require("./autoreply.service"); -let AutoreplyModule = class AutoreplyModule { -}; -AutoreplyModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([autoreply_entity_1.AutoReplyEntity])], - controllers: [autoreply_controller_1.AutoreplyController], - providers: [autoreply_service_1.AutoreplyService], - exports: [autoreply_service_1.AutoreplyService], - }) -], AutoreplyModule); -exports.AutoreplyModule = AutoreplyModule; diff --git a/AIWebQuickDeploy/dist/modules/autoreply/autoreply.service.js b/AIWebQuickDeploy/dist/modules/autoreply/autoreply.service.js deleted file mode 100644 index 67bb951..0000000 --- a/AIWebQuickDeploy/dist/modules/autoreply/autoreply.service.js +++ /dev/null @@ -1,126 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AutoreplyService = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const autoreply_entity_1 = require("./autoreply.entity"); -let AutoreplyService = class AutoreplyService { - constructor(autoReplyEntity) { - this.autoReplyEntity = autoReplyEntity; - this.autoReplyKes = []; - this.autoReplyMap = {}; - this.autoReplyFuzzyMatch = true; - } - async onModuleInit() { - await this.loadAutoReplyList(); - } - async loadAutoReplyList() { - const res = await this.autoReplyEntity.find({ - where: { status: 1 }, - select: ['prompt', 'answer', 'isAIReplyEnabled'], - }); - this.autoReplyMap = {}; - this.autoReplyKes = []; - res.forEach((t) => { - this.autoReplyMap[t.prompt] = { - answer: t.answer, - isAIReplyEnabled: t.isAIReplyEnabled, - }; - const keywords = t.prompt.split(' ').map((k) => k.trim()); - this.autoReplyKes.push({ prompt: t.prompt, keywords }); - }); - } - async checkAutoReply(prompt) { - let answers = []; - let isAIReplyEnabled = 0; - const seenGroups = new Set(); - if (this.autoReplyFuzzyMatch) { - for (const item of this.autoReplyKes) { - if (item.keywords.some((keyword) => prompt.includes(keyword))) { - if (!seenGroups.has(item.prompt)) { - answers.push(this.autoReplyMap[item.prompt].answer); - seenGroups.add(item.prompt); - if (this.autoReplyMap[item.prompt].isAIReplyEnabled === 1) { - isAIReplyEnabled = 1; - } - } - } - } - } - else { - const matches = this.autoReplyKes.filter((item) => item.prompt === prompt); - for (const match of matches) { - if (!seenGroups.has(match.prompt)) { - answers.push(this.autoReplyMap[match.prompt].answer); - seenGroups.add(match.prompt); - if (this.autoReplyMap[match.prompt].isAIReplyEnabled === 1) { - isAIReplyEnabled = 1; - } - } - } - } - return { - answer: answers.join('\n'), - isAIReplyEnabled, - }; - } - async queryAutoreply(query) { - const { page = 1, size = 10, prompt, status } = query; - const where = {}; - [0, 1, '0', '1'].includes(status) && (where.status = status); - prompt && (where.prompt = (0, typeorm_2.Like)(`%${prompt}%`)); - const [rows, count] = await this.autoReplyEntity.findAndCount({ - where, - skip: (page - 1) * size, - take: size, - order: { id: 'DESC' }, - }); - return { rows, count }; - } - async addAutoreply(body) { - await this.autoReplyEntity.save(body); - await this.loadAutoReplyList(); - return '添加问题成功!'; - } - async updateAutoreply(body) { - const { id } = body; - const res = await this.autoReplyEntity.update({ id }, body); - if (res.affected > 0) { - await this.loadAutoReplyList(); - return '更新问题成功'; - } - throw new common_1.HttpException('更新失败', common_1.HttpStatus.BAD_REQUEST); - } - async delAutoreply(body) { - const { id } = body; - const z = await this.autoReplyEntity.findOne({ where: { id } }); - if (!z) { - throw new common_1.HttpException('该问题不存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST); - } - const res = await this.autoReplyEntity.delete({ id }); - if (res.affected > 0) { - await this.loadAutoReplyList(); - return '删除问题成功'; - } - throw new common_1.HttpException('删除失败', common_1.HttpStatus.BAD_REQUEST); - } -}; -AutoreplyService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(autoreply_entity_1.AutoReplyEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository]) -], AutoreplyService); -exports.AutoreplyService = AutoreplyService; diff --git a/AIWebQuickDeploy/dist/modules/autoreply/dto/addAutoReply.dto.js b/AIWebQuickDeploy/dist/modules/autoreply/dto/addAutoReply.dto.js deleted file mode 100644 index 173c815..0000000 --- a/AIWebQuickDeploy/dist/modules/autoreply/dto/addAutoReply.dto.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AddAutoReplyDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class AddAutoReplyDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '你是谁', description: '提问的问题', required: true }), - __metadata("design:type", String) -], AddAutoReplyDto.prototype, "prompt", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '我是AIWeb提供的Ai服务机器人', - description: '回答的答案', - required: true, - }), - __metadata("design:type", String) -], AddAutoReplyDto.prototype, "answer", void 0); -exports.AddAutoReplyDto = AddAutoReplyDto; diff --git a/AIWebQuickDeploy/dist/modules/autoreply/dto/delBadWords.dto.js b/AIWebQuickDeploy/dist/modules/autoreply/dto/delBadWords.dto.js deleted file mode 100644 index ac40b54..0000000 --- a/AIWebQuickDeploy/dist/modules/autoreply/dto/delBadWords.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DelAutoReplyDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class DelAutoReplyDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '自动回复id', required: true }), - __metadata("design:type", Number) -], DelAutoReplyDto.prototype, "id", void 0); -exports.DelAutoReplyDto = DelAutoReplyDto; diff --git a/AIWebQuickDeploy/dist/modules/autoreply/dto/queryAutoReply.dto.js b/AIWebQuickDeploy/dist/modules/autoreply/dto/queryAutoReply.dto.js deleted file mode 100644 index b6f2c78..0000000 --- a/AIWebQuickDeploy/dist/modules/autoreply/dto/queryAutoReply.dto.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryAutoReplyDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QueryAutoReplyDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryAutoReplyDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryAutoReplyDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '你是谁', description: '提问问题', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QueryAutoReplyDto.prototype, "prompt", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '问题状态', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryAutoReplyDto.prototype, "status", void 0); -exports.QueryAutoReplyDto = QueryAutoReplyDto; diff --git a/AIWebQuickDeploy/dist/modules/autoreply/dto/updateAutoReply.dto.js b/AIWebQuickDeploy/dist/modules/autoreply/dto/updateAutoReply.dto.js deleted file mode 100644 index 84d9de2..0000000 --- a/AIWebQuickDeploy/dist/modules/autoreply/dto/updateAutoReply.dto.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateAutoReplyDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class UpdateAutoReplyDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '自动回复id', required: true }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UpdateAutoReplyDto.prototype, "id", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '你可以干嘛', description: '问题', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UpdateAutoReplyDto.prototype, "prompt", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '我可以干很多事情.......', - description: '答案', - required: false, - }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UpdateAutoReplyDto.prototype, "answer", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 0, description: '状态', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UpdateAutoReplyDto.prototype, "status", void 0); -exports.UpdateAutoReplyDto = UpdateAutoReplyDto; diff --git a/AIWebQuickDeploy/dist/modules/badWords/badWords.controller.js b/AIWebQuickDeploy/dist/modules/badWords/badWords.controller.js deleted file mode 100644 index 83ef24c..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/badWords.controller.js +++ /dev/null @@ -1,100 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BadWordsController = void 0; -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const badWords_service_1 = require("./badWords.service"); -const addBadWords_dto_1 = require("./dto/addBadWords.dto"); -const delBadWords_dto_1 = require("./dto/delBadWords.dto"); -const queryBadWords_dto_1 = require("./dto/queryBadWords.dto"); -const queryViolation_dto_1 = require("./dto/queryViolation.dto"); -const updateBadWords_dto_1 = require("./dto/updateBadWords.dto"); -let BadWordsController = class BadWordsController { - constructor(badWordsService) { - this.badWordsService = badWordsService; - } - queryBadWords(query) { - return this.badWordsService.queryBadWords(query); - } - delBadWords(body) { - return this.badWordsService.delBadWords(body); - } - updateBadWords(body) { - return this.badWordsService.updateBadWords(body); - } - addBadWord(body) { - return this.badWordsService.addBadWord(body); - } - violation(req, query) { - return this.badWordsService.violation(req, query); - } -}; -__decorate([ - (0, common_1.Get)('query'), - (0, swagger_1.ApiOperation)({ summary: '查询所有敏感词' }), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryBadWords_dto_1.QueryBadWordsDto]), - __metadata("design:returntype", void 0) -], BadWordsController.prototype, "queryBadWords", null); -__decorate([ - (0, common_1.Post)('del'), - (0, swagger_1.ApiOperation)({ summary: '删除敏感词' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [delBadWords_dto_1.DelBadWordsDto]), - __metadata("design:returntype", void 0) -], BadWordsController.prototype, "delBadWords", null); -__decorate([ - (0, common_1.Post)('update'), - (0, swagger_1.ApiOperation)({ summary: '更新敏感词' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [updateBadWords_dto_1.UpdateBadWordsDto]), - __metadata("design:returntype", void 0) -], BadWordsController.prototype, "updateBadWords", null); -__decorate([ - (0, common_1.Post)('add'), - (0, swagger_1.ApiOperation)({ summary: '新增敏感词' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [addBadWords_dto_1.AddBadWordDto]), - __metadata("design:returntype", void 0) -], BadWordsController.prototype, "addBadWord", null); -__decorate([ - (0, common_1.Get)('violation'), - (0, swagger_1.ApiOperation)({ summary: '查询违规记录' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, queryViolation_dto_1.QueryViolationDto]), - __metadata("design:returntype", void 0) -], BadWordsController.prototype, "violation", null); -BadWordsController = __decorate([ - (0, swagger_1.ApiTags)('badWords'), - (0, common_1.Controller)('badWords'), - __metadata("design:paramtypes", [badWords_service_1.BadWordsService]) -], BadWordsController); -exports.BadWordsController = BadWordsController; diff --git a/AIWebQuickDeploy/dist/modules/badWords/badWords.entity.js b/AIWebQuickDeploy/dist/modules/badWords/badWords.entity.js deleted file mode 100644 index 626ca33..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/badWords.entity.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BadWordsEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let BadWordsEntity = class BadWordsEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ length: 20, comment: '敏感词' }), - __metadata("design:type", String) -], BadWordsEntity.prototype, "word", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 1, comment: '敏感词开启状态' }), - __metadata("design:type", Number) -], BadWordsEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 0, comment: '敏感词触发次数' }), - __metadata("design:type", Number) -], BadWordsEntity.prototype, "count", void 0); -BadWordsEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'bad_words' }) -], BadWordsEntity); -exports.BadWordsEntity = BadWordsEntity; diff --git a/AIWebQuickDeploy/dist/modules/badWords/badWords.module.js b/AIWebQuickDeploy/dist/modules/badWords/badWords.module.js deleted file mode 100644 index 1275fa9..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/badWords.module.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BadWordsModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const user_entity_1 = require("../user/user.entity"); -const badWords_controller_1 = require("./badWords.controller"); -const badWords_entity_1 = require("./badWords.entity"); -const badWords_service_1 = require("./badWords.service"); -const violationLog_entity_1 = require("./violationLog.entity"); -let BadWordsModule = class BadWordsModule { -}; -BadWordsModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([badWords_entity_1.BadWordsEntity, violationLog_entity_1.ViolationLogEntity, user_entity_1.UserEntity]), - ], - providers: [badWords_service_1.BadWordsService], - controllers: [badWords_controller_1.BadWordsController], - exports: [badWords_service_1.BadWordsService], - }) -], BadWordsModule); -exports.BadWordsModule = BadWordsModule; diff --git a/AIWebQuickDeploy/dist/modules/badWords/badWords.service.js b/AIWebQuickDeploy/dist/modules/badWords/badWords.service.js deleted file mode 100644 index d6c5361..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/badWords.service.js +++ /dev/null @@ -1,208 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BadWordsService = void 0; -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const axios_1 = require("axios"); -const typeorm_2 = require("typeorm"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const user_entity_1 = require("../user/user.entity"); -const badWords_entity_1 = require("./badWords.entity"); -const violationLog_entity_1 = require("./violationLog.entity"); -let BadWordsService = class BadWordsService { - constructor(badWordsEntity, violationLogEntity, userEntity, globalConfigService) { - this.badWordsEntity = badWordsEntity; - this.violationLogEntity = violationLogEntity; - this.userEntity = userEntity; - this.globalConfigService = globalConfigService; - this.badWords = []; - } - async onModuleInit() { - this.loadBadWords(); - } - async customSensitiveWords(content, userId) { - const triggeredWords = []; - for (let i = 0; i < this.badWords.length; i++) { - const word = this.badWords[i]; - if (content.includes(word)) { - triggeredWords.push(word); - } - } - if (triggeredWords.length) { - await this.recordUserBadWords(userId, content, triggeredWords, ['自定义'], '自定义检测'); - } - return triggeredWords; - } - async checkBadWords(content, userId) { - const config = await this.globalConfigService.getSensitiveConfig(); - if (config) { - await this.checkBadWordsByConfig(content, config, userId); - } - return await this.customSensitiveWords(content, userId); - } - async checkBadWordsByConfig(content, config, userId) { - const { useType } = config; - useType === 'baidu' && - (await this.baiduCheckBadWords(content, config.baiduTextAccessToken, userId)); - } - extractContent(str) { - const pattern = /存在(.*?)不合规/; - const match = str.match(pattern); - return match ? match[1] : ''; - } - async baiduCheckBadWords(content, accessToken, userId) { - if (!accessToken) - return; - const url = `https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined?access_token=${accessToken}}`; - const headers = { - 'Content-Type': 'application/x-www-form-urlencoded', - Accept: 'application/json', - }; - const response = await axios_1.default.post(url, { text: content }, { headers }); - const { conclusion, error_code, error_msg, conclusionType, data } = response.data; - if (error_code) { - console.log('百度文本检测出现错误、请查看配置信息: ', error_msg); - } - if (conclusionType !== 1) { - const types = [ - ...new Set(data.map((item) => this.extractContent(item.msg))), - ]; - await this.recordUserBadWords(userId, content, ['***'], types, '百度云检测'); - const tips = `您提交的信息中包含${types.join(',')}的内容、我们已对您的账户进行标记、请合规使用!`; - throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST); - } - } - formarTips(wordList) { - const categorys = wordList.map((t) => t.category); - const unSet = [...new Set(categorys)]; - return `您提交的内容中包含${unSet.join(',')}的信息、我们已对您账号进行标记、请合规使用!`; - } - async loadBadWords() { - const data = await this.badWordsEntity.find({ - where: { status: 1 }, - select: ['word'], - }); - this.badWords = data.map((t) => t.word); - } - async queryBadWords(query) { - const { page = 1, size = 500, word, status } = query; - const where = {}; - [0, 1, '0', '1'].includes(status) && (where.status = status); - word && (where.word = (0, typeorm_2.Like)(`%${word}%`)); - const [rows, count] = await this.badWordsEntity.findAndCount({ - where, - skip: (page - 1) * size, - take: size, - order: { id: 'ASC' }, - }); - return { rows, count }; - } - async delBadWords(body) { - const b = await this.badWordsEntity.findOne({ where: { id: body.id } }); - if (!b) { - throw new common_1.HttpException('敏感词不存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST); - } - const res = await this.badWordsEntity.delete({ id: body.id }); - if (res.affected > 0) { - await this.loadBadWords(); - return '删除敏感词成功'; - } - else { - throw new common_1.HttpException('删除敏感词失败', common_1.HttpStatus.BAD_REQUEST); - } - } - async updateBadWords(body) { - const { id, word, status } = body; - const b = await this.badWordsEntity.findOne({ where: { word } }); - if (b) { - throw new common_1.HttpException('敏感词已经存在了、请勿重复添加', common_1.HttpStatus.BAD_REQUEST); - } - const res = await this.badWordsEntity.update({ id }, { word, status }); - if (res.affected > 0) { - await this.loadBadWords(); - return '更新敏感词成功'; - } - else { - throw new common_1.HttpException('更新敏感词失败', common_1.HttpStatus.BAD_REQUEST); - } - } - async addBadWord(body) { - const { word } = body; - const b = await this.badWordsEntity.findOne({ where: { word } }); - if (b) { - throw new common_1.HttpException('敏感词已存在,请检查您的提交信息', common_1.HttpStatus.BAD_REQUEST); - } - await this.badWordsEntity.save({ word }); - await this.loadBadWords(); - return '添加敏感词成功'; - } - async recordUserBadWords(userId, content, words, typeCn, typeOriginCn) { - const data = { - userId, - content, - words: JSON.stringify(words), - typeCn: JSON.stringify(typeCn), - typeOriginCn, - }; - try { - await this.userEntity - .createQueryBuilder() - .update(user_entity_1.UserEntity) - .set({ violationCount: () => 'violationCount + 1' }) - .where('id = :userId', { userId }) - .execute(); - await this.violationLogEntity.save(data); - } - catch (error) { - console.log('error: ', error); - } - } - async violation(req, query) { - const { role } = req.user; - const { page = 1, size = 10, userId, typeOriginCn } = query; - const where = {}; - userId && (where['userId'] = userId); - typeOriginCn && (where['typeOriginCn'] = typeOriginCn); - const [rows, count] = await this.violationLogEntity.findAndCount({ - where, - skip: (page - 1) * size, - take: size, - order: { id: 'DESC' }, - }); - const userIds = [...new Set(rows.map((t) => t.userId))]; - const usersInfo = await this.userEntity.find({ - where: { id: (0, typeorm_2.In)(userIds) }, - select: ['id', 'avatar', 'username', 'email', 'violationCount', 'status'], - }); - rows.forEach((t) => { - const user = usersInfo.find((u) => u.id === t.userId) || {}; - role !== 'super' && (user.email = (0, utils_1.hideString)(user.email)); - t.userInfo = user; - }); - return { rows, count }; - } -}; -BadWordsService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(badWords_entity_1.BadWordsEntity)), - __param(1, (0, typeorm_1.InjectRepository)(violationLog_entity_1.ViolationLogEntity)), - __param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - globalConfig_service_1.GlobalConfigService]) -], BadWordsService); -exports.BadWordsService = BadWordsService; diff --git a/AIWebQuickDeploy/dist/modules/badWords/dto/addBadWords.dto.js b/AIWebQuickDeploy/dist/modules/badWords/dto/addBadWords.dto.js deleted file mode 100644 index cee5e14..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/dto/addBadWords.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AddBadWordDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class AddBadWordDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词', required: true }), - __metadata("design:type", String) -], AddBadWordDto.prototype, "word", void 0); -exports.AddBadWordDto = AddBadWordDto; diff --git a/AIWebQuickDeploy/dist/modules/badWords/dto/delBadWords.dto.js b/AIWebQuickDeploy/dist/modules/badWords/dto/delBadWords.dto.js deleted file mode 100644 index af05fed..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/dto/delBadWords.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DelBadWordsDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class DelBadWordsDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '敏感词id', required: true }), - __metadata("design:type", Number) -], DelBadWordsDto.prototype, "id", void 0); -exports.DelBadWordsDto = DelBadWordsDto; diff --git a/AIWebQuickDeploy/dist/modules/badWords/dto/queryBadWords.dto.js b/AIWebQuickDeploy/dist/modules/badWords/dto/queryBadWords.dto.js deleted file mode 100644 index a32266b..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/dto/queryBadWords.dto.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryBadWordsDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QueryBadWordsDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryBadWordsDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryBadWordsDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词内容', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QueryBadWordsDto.prototype, "word", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '关键词状态', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryBadWordsDto.prototype, "status", void 0); -exports.QueryBadWordsDto = QueryBadWordsDto; diff --git a/AIWebQuickDeploy/dist/modules/badWords/dto/queryViolation.dto.js b/AIWebQuickDeploy/dist/modules/badWords/dto/queryViolation.dto.js deleted file mode 100644 index cac1925..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/dto/queryViolation.dto.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryViolationDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QueryViolationDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryViolationDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryViolationDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '用户ID', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryViolationDto.prototype, "userId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '百度云检测', description: '检测平台来源', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QueryViolationDto.prototype, "typeOriginCn", void 0); -exports.QueryViolationDto = QueryViolationDto; diff --git a/AIWebQuickDeploy/dist/modules/badWords/dto/updateBadWords.dto.js b/AIWebQuickDeploy/dist/modules/badWords/dto/updateBadWords.dto.js deleted file mode 100644 index 68115cf..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/dto/updateBadWords.dto.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateBadWordsDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class UpdateBadWordsDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '敏感词id', required: true }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UpdateBadWordsDto.prototype, "id", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'test', description: '敏感词内容', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UpdateBadWordsDto.prototype, "word", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '关键词状态', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UpdateBadWordsDto.prototype, "status", void 0); -exports.UpdateBadWordsDto = UpdateBadWordsDto; diff --git a/AIWebQuickDeploy/dist/modules/badWords/violationLog.entity.js b/AIWebQuickDeploy/dist/modules/badWords/violationLog.entity.js deleted file mode 100644 index 9a983ff..0000000 --- a/AIWebQuickDeploy/dist/modules/badWords/violationLog.entity.js +++ /dev/null @@ -1,40 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ViolationLogEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let ViolationLogEntity = class ViolationLogEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户id' }), - __metadata("design:type", Number) -], ViolationLogEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '违规内容', type: 'text' }), - __metadata("design:type", String) -], ViolationLogEntity.prototype, "content", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '敏感词', type: 'text' }), - __metadata("design:type", String) -], ViolationLogEntity.prototype, "words", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '违规类型' }), - __metadata("design:type", String) -], ViolationLogEntity.prototype, "typeCn", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '违规检测失败于哪个平台' }), - __metadata("design:type", String) -], ViolationLogEntity.prototype, "typeOriginCn", void 0); -ViolationLogEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'violation_log' }) -], ViolationLogEntity); -exports.ViolationLogEntity = ViolationLogEntity; diff --git a/AIWebQuickDeploy/dist/modules/chat/chat.controller.js b/AIWebQuickDeploy/dist/modules/chat/chat.controller.js deleted file mode 100644 index 7f4f132..0000000 --- a/AIWebQuickDeploy/dist/modules/chat/chat.controller.js +++ /dev/null @@ -1,123 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatController = void 0; -const swagger_1 = require("@nestjs/swagger"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const chat_service_1 = require("./chat.service"); -const common_1 = require("@nestjs/common"); -const chatProcess_dto_1 = require("./dto/chatProcess.dto"); -const aiPPT_1 = require("../ai/aiPPT"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -let ChatController = class ChatController { - constructor(chatService, globalConfigService, aiPptService) { - this.chatService = chatService; - this.globalConfigService = globalConfigService; - this.aiPptService = aiPptService; - } - chatProcess(body, req, res) { - return this.chatService.chatProcess(body, req, res); - } - chatProcessSync(body, req) { - return this.chatService.chatProcess(Object.assign({}, body), req); - } - async mjFanyi(body, req) { - return this.chatService.chatProcess(Object.assign(Object.assign({}, body), { specialModel: 'PromptOptimization' }), req); - } - async chatmind(body, req, res) { - return this.chatService.chatProcess(Object.assign(Object.assign({}, body), { specialModel: 'MindMap' }), req, res); - } - ttsProcess(body, req, res) { - return this.chatService.ttsProcess(body, req, res); - } - pptCover(body) { - return this.aiPptService.pptCover(body); - } -}; -__decorate([ - (0, common_1.Post)('chat-process'), - (0, swagger_1.ApiOperation)({ summary: 'gpt聊天对话' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __param(2, (0, common_1.Res)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object, Object]), - __metadata("design:returntype", void 0) -], ChatController.prototype, "chatProcess", null); -__decorate([ - (0, common_1.Post)('chat-sync'), - (0, swagger_1.ApiOperation)({ summary: 'gpt聊天对话' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object]), - __metadata("design:returntype", void 0) -], ChatController.prototype, "chatProcessSync", null); -__decorate([ - (0, common_1.Post)('mj-fy'), - (0, swagger_1.ApiOperation)({ summary: 'gpt描述词绘画翻译' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object]), - __metadata("design:returntype", Promise) -], ChatController.prototype, "mjFanyi", null); -__decorate([ - (0, common_1.Post)('chat-mind'), - (0, swagger_1.ApiOperation)({ summary: 'mind思维导图提示' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __param(2, (0, common_1.Res)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [chatProcess_dto_1.ChatProcessDto, Object, Object]), - __metadata("design:returntype", Promise) -], ChatController.prototype, "chatmind", null); -__decorate([ - (0, common_1.Post)('tts-process'), - (0, swagger_1.ApiOperation)({ summary: 'tts语音播报' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __param(2, (0, common_1.Res)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object, Object]), - __metadata("design:returntype", void 0) -], ChatController.prototype, "ttsProcess", null); -__decorate([ - (0, common_1.Post)('ppt-cover'), - (0, swagger_1.ApiOperation)({ summary: 'ppt封面获取' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], ChatController.prototype, "pptCover", null); -ChatController = __decorate([ - (0, swagger_1.ApiTags)('chatgpt'), - (0, common_1.Controller)('chatgpt'), - __metadata("design:paramtypes", [chat_service_1.ChatService, - globalConfig_service_1.GlobalConfigService, - aiPPT_1.AiPptService]) -], ChatController); -exports.ChatController = ChatController; diff --git a/AIWebQuickDeploy/dist/modules/chat/chat.module.js b/AIWebQuickDeploy/dist/modules/chat/chat.module.js deleted file mode 100644 index f696b76..0000000 --- a/AIWebQuickDeploy/dist/modules/chat/chat.module.js +++ /dev/null @@ -1,87 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const aiPPT_1 = require("../ai/aiPPT"); -const cogVideo_service_1 = require("../ai/cogVideo.service"); -const fluxDraw_service_1 = require("../ai/fluxDraw.service"); -const lumaVideo_service_1 = require("../ai/lumaVideo.service"); -const midjourneyDraw_service_1 = require("../ai/midjourneyDraw.service"); -const openaiChat_service_1 = require("../ai/openaiChat.service"); -const openaiDraw_service_1 = require("../ai/openaiDraw.service"); -const stableDiffusion_service_1 = require("../ai/stableDiffusion.service"); -const suno_service_1 = require("../ai/suno.service"); -const app_entity_1 = require("../app/app.entity"); -const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const cramiPackage_entity_1 = require("../crami/cramiPackage.entity"); -const config_entity_1 = require("../globalConfig/config.entity"); -const mailer_service_1 = require("../mailer/mailer.service"); -const plugin_entity_1 = require("../plugin/plugin.entity"); -const redisCache_service_1 = require("../redisCache/redisCache.service"); -const user_entity_1 = require("../user/user.entity"); -const user_service_1 = require("../user/user.service"); -const accountLog_entity_1 = require("../userBalance/accountLog.entity"); -const balance_entity_1 = require("../userBalance/balance.entity"); -const fingerprint_entity_1 = require("../userBalance/fingerprint.entity"); -const userBalance_entity_1 = require("../userBalance/userBalance.entity"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -const verification_service_1 = require("../verification/verification.service"); -const verifycation_entity_1 = require("../verification/verifycation.entity"); -const chat_controller_1 = require("./chat.controller"); -const chat_service_1 = require("./chat.service"); -const netSearch_service_1 = require("../ai/netSearch.service"); -let ChatModule = class ChatModule { -}; -ChatModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([ - balance_entity_1.BalanceEntity, - user_entity_1.UserEntity, - plugin_entity_1.PluginEntity, - verifycation_entity_1.VerifycationEntity, - chatLog_entity_1.ChatLogEntity, - accountLog_entity_1.AccountLogEntity, - config_entity_1.ConfigEntity, - user_entity_1.UserEntity, - cramiPackage_entity_1.CramiPackageEntity, - chatGroup_entity_1.ChatGroupEntity, - app_entity_1.AppEntity, - userBalance_entity_1.UserBalanceEntity, - fingerprint_entity_1.FingerprintLogEntity, - ]), - ], - controllers: [chat_controller_1.ChatController], - providers: [ - chat_service_1.ChatService, - userBalance_service_1.UserBalanceService, - user_service_1.UserService, - verification_service_1.VerificationService, - chatLog_service_1.ChatLogService, - redisCache_service_1.RedisCacheService, - mailer_service_1.MailerService, - suno_service_1.SunoService, - openaiChat_service_1.OpenAIChatService, - stableDiffusion_service_1.StableDiffusionService, - midjourneyDraw_service_1.MidjourneyService, - openaiDraw_service_1.OpenAIDrawService, - lumaVideo_service_1.LumaVideoService, - cogVideo_service_1.CogVideoService, - fluxDraw_service_1.FluxDrawService, - aiPPT_1.AiPptService, - netSearch_service_1.netSearchService, - ], - exports: [chat_service_1.ChatService], - }) -], ChatModule); -exports.ChatModule = ChatModule; diff --git a/AIWebQuickDeploy/dist/modules/chat/chat.service.js b/AIWebQuickDeploy/dist/modules/chat/chat.service.js deleted file mode 100644 index ae4cea7..0000000 --- a/AIWebQuickDeploy/dist/modules/chat/chat.service.js +++ /dev/null @@ -1,1007 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatService = void 0; -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const axios_1 = require("axios"); -const typeorm_2 = require("typeorm"); -const aiPPT_1 = require("../ai/aiPPT"); -const cogVideo_service_1 = require("../ai/cogVideo.service"); -const fluxDraw_service_1 = require("../ai/fluxDraw.service"); -const lumaVideo_service_1 = require("../ai/lumaVideo.service"); -const midjourneyDraw_service_1 = require("../ai/midjourneyDraw.service"); -const openaiChat_service_1 = require("../ai/openaiChat.service"); -const openaiDraw_service_1 = require("../ai/openaiDraw.service"); -const stableDiffusion_service_1 = require("../ai/stableDiffusion.service"); -const suno_service_1 = require("../ai/suno.service"); -const app_entity_1 = require("../app/app.entity"); -const autoreply_service_1 = require("../autoreply/autoreply.service"); -const badWords_service_1 = require("../badWords/badWords.service"); -const chatGroup_service_1 = require("../chatGroup/chatGroup.service"); -const chatLog_service_1 = require("../chatLog/chatLog.service"); -const config_entity_1 = require("../globalConfig/config.entity"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const models_service_1 = require("../models/models.service"); -const plugin_entity_1 = require("../plugin/plugin.entity"); -const upload_service_1 = require("../upload/upload.service"); -const user_service_1 = require("../user/user.service"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -const netSearch_service_1 = require("../ai/netSearch.service"); -let ChatService = class ChatService { - constructor(configEntity, appEntity, pluginEntity, sunoService, openAIChatService, chatLogService, midjourneyService, stableDiffusionService, userBalanceService, userService, uploadService, badWordsService, autoreplyService, globalConfigService, chatGroupService, modelsService, openAIDrawService, lumaVideoService, cogVideoService, fluxDrawService, aiPptService, netSearchService) { - this.configEntity = configEntity; - this.appEntity = appEntity; - this.pluginEntity = pluginEntity; - this.sunoService = sunoService; - this.openAIChatService = openAIChatService; - this.chatLogService = chatLogService; - this.midjourneyService = midjourneyService; - this.stableDiffusionService = stableDiffusionService; - this.userBalanceService = userBalanceService; - this.userService = userService; - this.uploadService = uploadService; - this.badWordsService = badWordsService; - this.autoreplyService = autoreplyService; - this.globalConfigService = globalConfigService; - this.chatGroupService = chatGroupService; - this.modelsService = modelsService; - this.openAIDrawService = openAIDrawService; - this.lumaVideoService = lumaVideoService; - this.cogVideoService = cogVideoService; - this.fluxDrawService = fluxDrawService; - this.aiPptService = aiPptService; - this.netSearchService = netSearchService; - } - async chatProcess(body, req, res) { - await this.userBalanceService.checkUserCertification(req.user.id); - const { options = {}, usingPluginId, appId = null, specialModel, prompt, fileInfo, extraParam, model, drawId, customId, action, modelName, modelAvatar, } = body; - let appInfo; - if (specialModel) { - appInfo = await this.appEntity.findOne({ - where: { des: specialModel, isSystemReserved: true }, - }); - } - else if (appId) { - appInfo = await this.appEntity.findOne({ - where: { id: appId, status: (0, typeorm_2.In)([1, 3, 4, 5]) }, - }); - if (!appInfo) { - throw new common_1.HttpException('你当前使用的应用已被下架、请删除当前对话开启新的对话吧!', common_1.HttpStatus.BAD_REQUEST); - } - } - const { groupId, fileParsing } = options; - const { openaiTimeout, openaiBaseUrl, openaiBaseKey, systemPreMessage, isMjTranslate, mjTranslatePrompt, openaiTemperature, openaiBaseModel, isGeneratePromptReference, isConvertToBase64, isSensitiveWordFilter, } = await this.globalConfigService.getConfigs([ - 'openaiTimeout', - 'openaiBaseUrl', - 'openaiBaseKey', - 'systemPreMessage', - 'isMjTranslate', - 'mjTranslatePrompt', - 'openaiTemperature', - 'openaiBaseModel', - 'isGeneratePromptReference', - 'isConvertToBase64', - 'isSensitiveWordFilter', - ]); - await this.userService.checkUserStatus(req.user); - res && - res.setHeader('Content-type', 'application/octet-stream; charset=utf-8'); - if (isSensitiveWordFilter === '1') { - const triggeredWords = await this.badWordsService.checkBadWords(prompt, req.user.id); - if (triggeredWords.length > 0) { - const tips = `您提交的信息中包含违规的内容,我们已对您的账户进行标记,请合规使用!`; - throw new common_1.HttpException(tips, common_1.HttpStatus.BAD_REQUEST); - } - } - const autoReplyRes = await this.autoreplyService.checkAutoReply(prompt); - let currentRequestModelKey = null; - let appName = ''; - let setSystemMessage = ''; - res && res.status(200); - let response = null; - const curIp = (0, utils_1.getClientIp)(req); - let usePrompt; - let useModelAvatar = ''; - let usingPlugin; - let searchResult; - if (usingPluginId) { - usingPlugin = await this.pluginEntity.findOne({ - where: { id: usingPluginId }, - }); - } - if (appInfo) { - const { isGPTs, gizmoID, name, isFixedModel, appModel, coverImg } = appInfo; - useModelAvatar = coverImg; - appName = name; - if (isGPTs) { - currentRequestModelKey = - await this.modelsService.getCurrentModelKeyInfo('gpts'); - currentRequestModelKey.model = `gpt-4-gizmo-${gizmoID}`; - } - else if (!isGPTs && isFixedModel && appModel) { - appInfo.preset && (setSystemMessage = appInfo.preset); - currentRequestModelKey = - await this.modelsService.getCurrentModelKeyInfo(appModel); - currentRequestModelKey.model = appModel; - if (fileParsing) { - setSystemMessage = `${setSystemMessage}以下是我提供给你的知识库:【${fileParsing}】,在回答问题之前,先检索知识库内有没有相关的内容,尽量使用知识库中获取到的信息来回答我的问题,以知识库中的为准。`; - } - common_1.Logger.log(`固定模型、使用应用预设: ${setSystemMessage}`, 'ChatService'); - } - else { - appInfo.preset && (setSystemMessage = appInfo.preset); - currentRequestModelKey = - await this.modelsService.getCurrentModelKeyInfo(model); - if (fileParsing) { - setSystemMessage = `${setSystemMessage}以下是我提供给你的知识库:【${fileParsing}】,在回答问题之前,先检索知识库内有没有相关的内容,尽量使用知识库中获取到的信息来回答我的问题,以知识库中的为准。`; - } - common_1.Logger.log(`使用应用预设: ${setSystemMessage}`, 'ChatService'); - } - } - else { - const groupInfo = await this.chatGroupService.getGroupInfoFromId(groupId); - if ((usingPlugin === null || usingPlugin === void 0 ? void 0 : usingPlugin.parameters) === 'net-search') { - try { - searchResult = await this.netSearchService.webSearchPro(prompt); - } - catch (error) { - common_1.Logger.error('网络请求失败', error); - searchResult = null; - } - const now = new Date(); - const options = { - timeZone: 'Asia/Shanghai', - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - hour12: false, - }; - const currentDate = new Intl.DateTimeFormat('zh-CN', options).format(now); - let searchPrompt = ''; - if (searchResult) { - searchPrompt = JSON.stringify(searchResult, null, 2); - } - setSystemMessage = ` - 你的任务是根据用户的问题,通过下面的搜索结果提供更精确、详细、具体的回答。 - 请在适当的情况下在对应部分句子末尾标注引用的链接,使用[[序号resultIndex](链接地址link)]格式,同时使用多个链接可连续使用比如[[2](链接地址)][[5](链接地址)], - 在回答的最后,使用 序号resultIndex.[title](链接地址link) 标记出所有的来源。 - 以下是搜索结果: - ${searchPrompt} - 在回答时,请注意以下几点: - - 现在时间是: ${currentDate}。 - - 并非搜索结果的所有内容都与用户的问题密切相关,你需要结合问题,对搜索结果进行甄别、筛选。 - - 对于列举类的问题(如列举所有航班信息),尽量将答案控制在10个要点以内,并告诉用户可以查看搜索来源、获得完整信息。优先提供信息完整、最相关的列举项;如非必要,不要主动告诉用户搜索结果未提供的内容。 - - 对于创作类的问题(如写论文),请务必在正文的段落中引用对应的参考编号。你需要解读并概括用户的题目要求,选择合适的格式,充分利用搜索结果并抽取重要信息,生成符合用户要求、极具思想深度、富有创造力与专业性的答案。你的创作篇幅需要尽可能延长,对于每一个要点的论述要推测用户的意图,给出尽可能多角度的回答要点,且务必信息量大、论述详尽。 - - 如果回答很长,请尽量结构化、分段落总结。如果需要分点作答,尽量控制在5个点以内,并合并相关的内容。 - - 对于客观类的问答,如果问题的答案非常简短,可以适当补充一到两句相关信息,以丰富内容。 - - 你需要根据用户要求和回答内容选择合适、美观的回答格式,确保可读性强。 - - 你的回答应该综合多个相关网页来回答,不能只重复引用一个网页。 - - 除非用户要求,否则你回答的语言需要和用户提问的语言保持一致。 - `; - currentRequestModelKey = - await this.modelsService.getCurrentModelKeyInfo(model); - } - else if ((usingPlugin === null || usingPlugin === void 0 ? void 0 : usingPlugin.parameters) === 'mind-map') { - setSystemMessage = - 'Please provide a detailed outline in Markdown format: Use a multi-level structure with at least 3-4 levels. Include specific solutions or steps under each topic. Make it suitable for creating mind maps. Provide only the outline content without any irrelevant explanations. Start directly with the outline, no introduction needed. Use the language I asked in. Note: Use #, ##, ### etc. for different heading levels. Use - or * for list items. Use bold, italic etc. to emphasize key points. Use tables, code blocks etc. as needed. Please provide a clear, content-rich Markdown format outline based on these requirements.'; - currentRequestModelKey = - await this.modelsService.getCurrentModelKeyInfo(model); - common_1.Logger.log(`使用插件预设: ${setSystemMessage}`, 'ChatService'); - } - else if (fileParsing) { - setSystemMessage = `以下是我提供给你的知识库:【${fileParsing}】,在回答问题之前,先检索知识库内有没有相关的内容,尽量使用知识库中获取到的信息来回答我的问题,以知识库中的为准。`; - currentRequestModelKey = - await this.modelsService.getCurrentModelKeyInfo(model); - common_1.Logger.log(`使用文件解析: ${setSystemMessage}`, 'ChatService'); - } - else { - const currentDate = new Date().toISOString().split('T')[0]; - setSystemMessage = systemPreMessage + `\n Current date: ${currentDate}`; - currentRequestModelKey = - await this.modelsService.getCurrentModelKeyInfo(model); - common_1.Logger.log(`使用全局预设: ${setSystemMessage}`, 'ChatService'); - } - } - if (!currentRequestModelKey) { - common_1.Logger.debug('未找到当前模型key,切换至全局模型', 'ChatService'); - currentRequestModelKey = await this.modelsService.getCurrentModelKeyInfo(openaiBaseModel); - const groupInfo = await this.chatGroupService.getGroupInfoFromId(groupId); - let updatedConfig = groupInfo.config; - try { - const parsedConfig = JSON.parse(groupInfo.config); - if (parsedConfig.modelInfo) { - parsedConfig.modelInfo.modelName = currentRequestModelKey.modelName; - parsedConfig.modelInfo.model = currentRequestModelKey.model; - updatedConfig = JSON.stringify(parsedConfig); - } - } - catch (error) { - common_1.Logger.debug('模型切换错误,请检查全局模型配置!', 'ChatService'); - throw new common_1.HttpException('配置解析错误!', common_1.HttpStatus.BAD_REQUEST); - } - await this.chatGroupService.update({ - groupId, - title: groupInfo.title, - isSticky: false, - config: updatedConfig, - fileUrl: '', - }, req); - } - const { deduct, isTokenBased, tokenFeeRatio, deductType, key, id: keyId, maxRounds, proxyUrl, maxModelTokens, timeout, model: useModel, isFileUpload, keyType: modelType, } = currentRequestModelKey; - if (await this.chatLogService.checkModelLimits(req.user, useModel)) { - throw new common_1.HttpException('1 小时内对话次数过多,请切换模型或稍后再试!', common_1.HttpStatus.TOO_MANY_REQUESTS); - } - if (isMjTranslate === '1' && - action === 'IMAGINE' && - model === 'midjourney') { - const [beforeArgs, afterArgs] = prompt.split(/(?= --)/); - const urlPattern = /(https?:\/\/[^\s]+)/g; - const urls = beforeArgs.match(urlPattern) || []; - let textToTranslate = beforeArgs.replace(urlPattern, '').trim(); - const translatedText = await this.openAIChatService.chatFree(textToTranslate, mjTranslatePrompt || - "Translate any given phrase from any language into English. For instance, when I input '{可爱的熊猫}', you should output '{cute panda}', with no period at the end."); - const finalTranslatedPrompt = [...urls, translatedText].join(' ').trim(); - usePrompt = afterArgs - ? `${finalTranslatedPrompt}${afterArgs}` - : finalTranslatedPrompt; - if (isFileUpload === '1' && fileInfo) { - usePrompt = `${fileInfo} ${usePrompt}`; - } - } - else { - usePrompt = - isFileUpload === '1' && fileInfo ? fileInfo + ' ' + prompt : prompt; - } - await this.userBalanceService.validateBalance(req, deductType, deduct); - const useModeName = modelName; - const proxyResUrl = (0, utils_1.formatUrl)(proxyUrl || openaiBaseUrl || 'https://api.openai.com'); - const modelKey = key || openaiBaseKey; - const modelTimeout = (timeout || openaiTimeout || 300) * 1000; - const temperature = Number(openaiTemperature) || 1; - if (groupId) { - const groupInfo = await this.chatGroupService.getGroupInfoFromId(groupId); - this.updateChatTitle(groupId, groupInfo, modelType, prompt, req); - await this.chatGroupService.updateTime(groupId); - } - const userSaveLog = await this.chatLogService.saveChatLog({ - appId: appId, - curIp, - userId: req.user.id, - type: modelType ? modelType : 1, - prompt, - fileInfo: fileInfo ? fileInfo : null, - answer: '', - promptTokens: 0, - completionTokens: 0, - totalTokens: 0, - model: useModel, - modelName: '我', - role: 'user', - groupId: groupId ? groupId : null, - }); - const assistantSaveLog = await this.chatLogService.saveChatLog({ - appId: appId ? appId : null, - action: action ? action : null, - curIp, - userId: req.user.id, - type: modelType ? modelType : 1, - prompt: prompt, - fileInfo: null, - answer: '', - progress: '0%', - promptTokens: 0, - completionTokens: 0, - totalTokens: 0, - model: useModel, - modelName: useModeName, - role: 'assistant', - groupId: groupId ? groupId : null, - status: 2, - modelAvatar: (usingPlugin === null || usingPlugin === void 0 ? void 0 : usingPlugin.pluginImg) || useModelAvatar || modelAvatar || '', - pluginParam: (usingPlugin === null || usingPlugin === void 0 ? void 0 : usingPlugin.parameters) - ? usingPlugin.parameters - : modelType === 2 - ? useModel - : null, - }); - const userLogId = userSaveLog.id; - const assistantLogId = assistantSaveLog.id; - if (autoReplyRes.answer && res) { - if (autoReplyRes.isAIReplyEnabled === 0) { - const chars = autoReplyRes.answer.split(''); - const sendCharByChar = (index) => { - if (index < chars.length) { - const msg = { text: chars[index] }; - res.write(`${JSON.stringify(msg)}\n`); - setTimeout(() => sendCharByChar(index + 1), 10); - } - else { - res.end(); - } - }; - sendCharByChar(0); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: autoReplyRes.answer, - }); - return; - } - else { - setSystemMessage = setSystemMessage + autoReplyRes.answer; - } - } - const { messagesHistory } = await this.buildMessageFromParentMessageId(prompt, { - groupId, - systemMessage: setSystemMessage, - maxModelTokens, - maxRounds: maxRounds, - isConvertToBase64: isConvertToBase64, - fileInfo: fileInfo, - model: useModel, - isFileUpload, - }, this.chatLogService); - let charge = action !== 'UPSCALE' && useModel === 'midjourney' ? deduct * 4 : deduct; - const abortController = new AbortController(); - try { - if (res) { - res.on('close', () => { - abortController.abort(); - }); - let response; - let firstChunk = true; - try { - if ((useModel === 'dall-e-3' || - useModel === 'midjourney' || - useModel === 'ai-ppt' || - useModel === 'suno-music' || - useModel === 'luma-video' || - useModel.includes('stable-diffusion') || - useModel.includes('cog-video') || - useModel.includes('flux')) && - modelType === 2) { - if (useModel === 'dall-e-3') { - response = this.openAIDrawService.dalleDraw({ - prompt: prompt, - extraParam: extraParam, - apiKey: modelKey, - proxyUrl: proxyResUrl, - model: useModel, - timeout: modelTimeout, - modelName: useModeName, - groupId: groupId, - onSuccess: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: data.status, - }); - }, - onFailure: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '绘图失败', - status: data.status, - }); - }, - }, this.buildMessageFromParentMessageId); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '绘制中', - }); - } - else if (useModel === 'ai-ppt') { - common_1.Logger.log('开始生成PPT', 'DrawService'); - response = this.aiPptService.aiPPT({ - usePrompt: usePrompt, - prompt: prompt, - apiKey: modelKey, - proxyUrl: proxyResUrl, - model: useModel, - modelName: useModeName, - drawId, - customId, - action, - timeout: modelTimeout, - assistantLogId, - extraParam, - fileInfo, - }); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '生成中', - }); - } - else if (useModel.includes('flux')) { - response = this.fluxDrawService.fluxDraw({ - prompt: prompt, - extraParam: extraParam, - apiKey: modelKey, - proxyUrl: proxyResUrl, - model: useModel, - timeout: modelTimeout, - modelName: useModeName, - groupId: groupId, - onSuccess: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: data.status, - }); - }, - onFailure: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '绘图失败', - status: data.status, - }); - }, - }, this.buildMessageFromParentMessageId); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '绘制中', - }); - } - else if (useModel.includes('suno-music')) { - response = this.sunoService.suno({ - assistantLogId, - apiKey: modelKey, - action, - prompt, - timeout: modelTimeout, - proxyUrl: proxyResUrl, - taskData: customId, - }); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '提交成功,歌曲生成中', - }); - } - else if (useModel.includes('luma-video')) { - response = this.lumaVideoService.lumaVideo({ - fileInfo, - extraParam, - assistantLogId, - apiKey: modelKey, - action, - prompt, - model: useModel, - timeout: modelTimeout, - proxyUrl: proxyResUrl, - taskData: customId, - onGenerate: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - status: 2, - }); - }, - onSuccess: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: 3, - }); - }, - onFailure: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: data.errMsg, - status: 4, - }); - }, - }); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '提交成功,视频生成中', - }); - } - else if (useModel.includes('cog-video')) { - response = this.cogVideoService.cogVideo({ - fileInfo, - extraParam, - assistantLogId, - apiKey: modelKey, - action, - prompt, - model: useModel, - timeout: modelTimeout, - proxyUrl: proxyResUrl, - taskData: customId, - onGenerate: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - status: 2, - }); - }, - onSuccess: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: 3, - }); - }, - onFailure: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: data.errMsg, - status: 4, - }); - }, - }); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '提交成功,视频生成中', - }); - } - else if (useModel.includes('stable-diffusion')) { - response = this.stableDiffusionService.sdxl({ - chatId: assistantLogId, - maxModelTokens, - apiKey: modelKey, - model: useModel, - modelName: useModeName, - modelType, - prompt, - fileInfo, - isFileUpload, - timeout: modelTimeout, - proxyUrl: proxyResUrl, - onSuccess: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: data === null || data === void 0 ? void 0 : data.fileInfo, - answer: (data === null || data === void 0 ? void 0 : data.answer) || prompt, - progress: '100%', - status: 3, - }); - }, - onFailure: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '生成失败', - status: 4, - }); - }, - }); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: '绘制中', - }); - } - else { - response = await this.midjourneyService.midjourneyDraw({ - usePrompt: usePrompt, - prompt: prompt, - apiKey: modelKey, - proxyUrl: proxyResUrl, - model: useModel, - modelName: useModeName, - drawId, - customId, - action, - fileInfo, - timeout: modelTimeout, - assistantLogId, - }); - await this.chatLogService.updateChatLog(assistantLogId, { - answer: response.answer, - status: response.status, - }); - } - if (response.status !== 5) { - await this.modelsService.saveUseLog(keyId, 1); - await this.userBalanceService.deductFromBalance(req.user.id, deductType, charge); - } - else { - common_1.Logger.log('任务提交失败,不执行扣费', 'ChatService'); - } - const userBalance = await this.userBalanceService.queryUserBalance(req.user.id); - response.userBalance = Object.assign({}, userBalance); - response.text = response.answer; - response.status = response.status || 2; - response.model = model; - response.modelName = modelName; - return res.write(`\n${JSON.stringify(response)}`); - } - else { - response = await this.openAIChatService.openAIChat(messagesHistory, { - chatId: assistantLogId, - maxModelTokens, - apiKey: modelKey, - model: useModel, - modelName: useModeName, - temperature, - modelType, - prompt, - fileInfo, - isFileUpload, - timeout: modelTimeout, - proxyUrl: proxyResUrl, - modelAvatar: modelAvatar, - onProgress: (chat) => { - res.write(firstChunk - ? JSON.stringify(chat) - : `\n${JSON.stringify(chat)}`); - firstChunk = false; - }, - onFailure: async (data) => { - await this.chatLogService.updateChatLog(assistantLogId, { - answer: data.errMsg, - status: 4, - }); - }, - abortController, - }); - if (response.errMsg) { - common_1.Logger.error(`用户ID: ${req.user.id} 模型名称: ${useModeName} 模型: ${model} 回复出错,本次不扣除积分`, 'ChatService'); - return res.write(`\n${JSON.stringify(response)}`); - } - let totalText = ''; - messagesHistory.forEach((messagesHistory) => { - totalText += messagesHistory.content + ' '; - }); - const promptTokens = await (0, utils_1.getTokenCount)(totalText); - const completionTokens = await (0, utils_1.getTokenCount)(response.answer); - await this.chatLogService.updateChatLog(userLogId, { - promptTokens: promptTokens, - completionTokens: completionTokens, - totalTokens: promptTokens + completionTokens, - }); - let sanitizedAnswer = response.answer; - if (isSensitiveWordFilter === '1') { - const triggeredWords = await this.badWordsService.checkBadWords(response.answer, req.user.id); - if (triggeredWords.length > 0) { - const regex = new RegExp(triggeredWords.join('|'), 'gi'); - sanitizedAnswer = sanitizedAnswer.replace(regex, (matched) => '*'.repeat(matched.length)); - } - } - await this.chatLogService.updateChatLog(assistantLogId, { - fileInfo: response === null || response === void 0 ? void 0 : response.fileInfo, - answer: sanitizedAnswer, - promptTokens: promptTokens, - completionTokens: completionTokens, - totalTokens: promptTokens + completionTokens, - status: 3, - }); - try { - if (isGeneratePromptReference === '1') { - const promptReference = await this.openAIChatService.chatFree(`根据用户提问{${prompt}}以及 AI 的回答{${response.answer}},生成三个更进入一步的提问,用{}包裹每个问题,不需要分行,不需要其他任何内容,单个提问不超过30个字`); - await this.chatLogService.updateChatLog(assistantLogId, { - promptReference: promptReference, - }); - } - } - catch (error) { - common_1.Logger.error(`调用 chatFree 出错: ${error}`); - } - if (isTokenBased === true) { - charge = - deduct * - Math.ceil((promptTokens + completionTokens) / tokenFeeRatio); - } - await this.userBalanceService.deductFromBalance(req.user.id, deductType, charge, promptTokens + completionTokens); - await this.modelsService.saveUseLog(keyId, promptTokens + completionTokens); - common_1.Logger.log(`用户ID: ${req.user.id} 模型名称: ${useModeName} 模型: ${model} 消耗token: ${promptTokens + completionTokens}, 消耗积分: ${charge}`, 'ChatService'); - const userBalance = await this.userBalanceService.queryUserBalance(req.user.id); - response.userBalance = Object.assign({}, userBalance); - return res.write(`\n${JSON.stringify(response)}`); - } - } - catch (error) { - common_1.Logger.error('发生错误:', error); - await this.chatLogService.updateChatLog(assistantLogId, { - status: 5, - }); - response = { error: '处理请求时发生错误' }; - } - } - else { - response = await this.openAIChatService.openAIChat(messagesHistory, { - chatId: assistantLogId, - maxModelTokens, - apiKey: modelKey, - model: useModel, - modelName: useModeName, - modelType, - temperature, - prompt, - fileInfo, - isFileUpload, - timeout: modelTimeout, - proxyUrl: proxyResUrl, - abortController, - }); - await this.userBalanceService.deductFromBalance(req.user.id, deductType, charge); - return response.answer; - } - } - catch (error) { - common_1.Logger.error('chat-error <----------------------------------------->', modelKey, error); - if (res) { - return res.write('发生未知错误,请稍后再试'); - } - else { - throw new common_1.HttpException('发生未知错误,请稍后再试', common_1.HttpStatus.BAD_REQUEST); - } - } - finally { - res && res.end(); - } - } - async usePlugin(prompt, pluginParam) { - const { pluginUrl, pluginKey } = await this.globalConfigService.getConfigs([ - 'pluginUrl', - 'pluginKey', - ]); - const key = pluginKey; - const proxyUrl = pluginUrl; - const options = { - method: 'POST', - url: `${proxyUrl}/plugins/${pluginParam}`, - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${key}`, - }, - data: { - prompt: prompt, - }, - }; - try { - const response = await (0, axios_1.default)(options); - common_1.Logger.log(`插件调用成功 返回结果: ${JSON.stringify(response.data, null, 2)}`, 'PluginService'); - return response.data.text; - } - catch (error) { - common_1.Logger.error('error: ', error); - } - } - async updateChatTitle(groupId, groupInfo, modelType, prompt, req) { - if ((groupInfo === null || groupInfo === void 0 ? void 0 : groupInfo.title) === '新对话') { - let chatTitle; - if (modelType === 1) { - try { - chatTitle = await this.openAIChatService.chatFree(`根据用户提问{${prompt}},给这个对话取一个名字,不超过10个字`); - if (chatTitle.length > 15) { - chatTitle = chatTitle.slice(0, 15); - } - } - catch (error) { - common_1.Logger.error(`调用 chatFree 出错: ${error}`); - chatTitle = prompt.slice(0, 10); - } - } - else { - chatTitle = '创意 AI'; - } - this.chatGroupService - .update({ - groupId, - title: chatTitle, - isSticky: false, - config: '', - fileUrl: '', - }, req) - .then(() => common_1.Logger.log(`更新标题名称为: ${chatTitle}`, 'ChatService')) - .catch((error) => common_1.Logger.error(`更新对话组标题失败: ${error}`)); - } - } - async buildMessageFromParentMessageId(text, options, chatLogService) { - let { systemMessage = '', fileInfo, groupId, maxRounds = 5, maxModelTokens = 8000, isFileUpload = 0, isConvertToBase64, } = options; - if (systemMessage.length > maxModelTokens) { - common_1.Logger.log('系统消息超过最大长度,将被截断', 'ChatService'); - systemMessage = systemMessage.slice(0, maxModelTokens); - } - let messages = []; - if (systemMessage) { - messages.push({ role: 'system', content: systemMessage }); - } - if (groupId) { - const history = await chatLogService.chatHistory(groupId, maxRounds); - let tempUserMessage = null; - for (const record of history) { - try { - let content; - if ((isFileUpload === 2 || isFileUpload === 3) && - record.fileInfo && - record.role === 'user') { - const imageUrls = await Promise.all(record.fileInfo.split(',').map(async (url) => ({ - type: 'image_url', - image_url: { - url: isConvertToBase64 === '1' - ? await this.convertUrlToBase64(url.trim()) - : url.trim(), - }, - }))); - content = [{ type: 'text', text: record.text }, ...imageUrls]; - } - else if (isFileUpload === 1 && - record.fileInfo && - record.role === 'user') { - content = record.fileInfo + '\n' + record.text; - } - else { - content = record.text; - } - if (record.role === 'user') { - tempUserMessage = { role: record.role, content }; - } - else if (record.role === 'assistant') { - const contentStr = Array.isArray(content) - ? JSON.stringify(content) - : content; - if (tempUserMessage && contentStr.trim() !== '') { - messages.push(tempUserMessage); - messages.push({ role: record.role, content }); - tempUserMessage = null; - } - } - } - catch (error) { - common_1.Logger.error('处理历史记录时出错:', error, '记录:', JSON.stringify(record, null, 2)); - } - } - } - let currentMessageContent; - if ((isFileUpload === 2 || isFileUpload === 3) && fileInfo) { - const imageUrls = await Promise.all(fileInfo.split(',').map(async (url) => ({ - type: 'image_url', - image_url: { - url: isConvertToBase64 === '1' - ? await this.convertUrlToBase64(url.trim()) - : url.trim(), - }, - }))); - currentMessageContent = [{ type: 'text', text }, ...imageUrls]; - } - else if (isFileUpload === 1 && fileInfo) { - currentMessageContent = fileInfo + '\n' + text; - } - else { - currentMessageContent = text; - } - messages.push({ role: 'user', content: currentMessageContent }); - let totalTokens = await (0, utils_1.getTokenCount)(messages); - let tokenLimit; - if (maxModelTokens < 8000) { - tokenLimit = 4000; - } - else { - tokenLimit = maxModelTokens - 4000; - } - while (totalTokens > tokenLimit) { - if (messages.length === 2 && - messages[0].role === 'system' && - messages[1].role === 'user') { - break; - } - let foundPairToDelete = false; - for (let i = 0; i < messages.length; i++) { - if (messages[i].role !== 'system' && - messages[i + 1] && - messages[i + 1].role === 'assistant') { - messages.splice(i, 2); - foundPairToDelete = true; - break; - } - } - if (!foundPairToDelete) { - for (let i = 0; i < messages.length; i++) { - if (messages[i].role === 'user') { - messages.splice(i, 1); - break; - } - } - } - totalTokens = await (0, utils_1.getTokenCount)(messages); - if (messages.length <= 2) { - break; - } - } - return { - messagesHistory: messages, - round: messages.length, - }; - } - async convertUrlToBase64(url) { - try { - console.log(`正在尝试转换URL为Base64: ${url}`); - const response = await axios_1.default.get(url, { responseType: 'arraybuffer' }); - const buffer = Buffer.from(response.data, 'binary'); - console.log(`成功获取图片,正在转换为Base64: ${url}`); - const base64Data = `data:${response.headers['content-type']};base64,${buffer.toString('base64')}`; - console.log(`成功转换URL为Base64: ${url}`); - return base64Data; - } - catch (error) { - console.error('转换URL为Base64时发生错误:', error); - console.warn(`返回原始链接: ${url}`); - return url; - } - } - async ttsProcess(body, req, res) { - const { chatId, prompt } = body; - const detailKeyInfo = await this.modelsService.getCurrentModelKeyInfo('tts-1'); - const { openaiTimeout, openaiBaseUrl, openaiBaseKey, openaiVoice } = await this.globalConfigService.getConfigs([ - 'openaiTimeout', - 'openaiBaseUrl', - 'openaiBaseKey', - 'openaiVoice', - ]); - const { key, proxyUrl, deduct, deductType, timeout } = detailKeyInfo; - const useKey = key || openaiBaseKey; - const useUrl = (0, utils_1.formatUrl)(proxyUrl || openaiBaseUrl); - const useTimeout = (timeout || openaiTimeout) * 1000; - await this.userBalanceService.validateBalance(req, deductType, deduct); - common_1.Logger.log('开始 TTS 请求:', prompt, 'TTSService'); - const options = { - method: 'POST', - url: `${useUrl}/v1/audio/speech`, - headers: { - 'Content-Type': 'application/json', - Authorization: `Bearer ${useKey}`, - }, - responseType: 'arraybuffer', - timeout: useTimeout, - data: { - model: 'tts-1', - input: prompt, - voice: openaiVoice || 'onyx', - }, - }; - try { - const response = await (0, axios_1.default)(options); - common_1.Logger.log('TTS 请求获取成功', 'TTSService'); - const buffer = Buffer.from(response.data); - const now = new Date(); - const year = now.getFullYear(); - const month = String(now.getMonth() + 1).padStart(2, '0'); - const day = String(now.getDate()).padStart(2, '0'); - const currentDate = `${year}${month}/${day}`; - const ttsUrl = await this.uploadService.uploadFile({ buffer, mimetype: 'audio/mpeg' }, `audio/openai/${currentDate}`); - await Promise.all([ - this.chatLogService.updateChatLog(chatId, { ttsUrl }), - this.userBalanceService.deductFromBalance(req.user.id, deductType, deduct), - ]); - res.status(200).send({ ttsUrl }); - } - catch (error) { - common_1.Logger.error('TTS 请求或上传过程失败:', error, 'TTSService'); - res.status(500).send({ error: 'Failed to process TTS request' }); - } - } -}; -ChatService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), - __param(1, (0, typeorm_1.InjectRepository)(app_entity_1.AppEntity)), - __param(2, (0, typeorm_1.InjectRepository)(plugin_entity_1.PluginEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - suno_service_1.SunoService, - openaiChat_service_1.OpenAIChatService, - chatLog_service_1.ChatLogService, - midjourneyDraw_service_1.MidjourneyService, - stableDiffusion_service_1.StableDiffusionService, - userBalance_service_1.UserBalanceService, - user_service_1.UserService, - upload_service_1.UploadService, - badWords_service_1.BadWordsService, - autoreply_service_1.AutoreplyService, - globalConfig_service_1.GlobalConfigService, - chatGroup_service_1.ChatGroupService, - models_service_1.ModelsService, - openaiDraw_service_1.OpenAIDrawService, - lumaVideo_service_1.LumaVideoService, - cogVideo_service_1.CogVideoService, - fluxDraw_service_1.FluxDrawService, - aiPPT_1.AiPptService, - netSearch_service_1.netSearchService]) -], ChatService); -exports.ChatService = ChatService; diff --git a/AIWebQuickDeploy/dist/modules/chat/dto/chatDraw.dto.js b/AIWebQuickDeploy/dist/modules/chat/dto/chatDraw.dto.js deleted file mode 100644 index a4c086b..0000000 --- a/AIWebQuickDeploy/dist/modules/chat/dto/chatDraw.dto.js +++ /dev/null @@ -1,78 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatDrawDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class ChatDrawDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'Draw a cute little dog', description: '绘画描述信息' }), - __metadata("design:type", String) -], ChatDrawDto.prototype, "prompt", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '绘画张数', required: true }), - __metadata("design:type", Number) -], ChatDrawDto.prototype, "n", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '1024x1024', description: '图片尺寸', required: true }), - __metadata("design:type", String) -], ChatDrawDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'standard', description: '图片质量', required: true }), - __metadata("design:type", String) -], ChatDrawDto.prototype, "quality", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: 'close-up polaroid photo, of a little joyful cute panda, in the forest, sun rays coming, photographic, sharp focus, depth of field, soft lighting, heigh quality, 24mm, Nikon Z FX', - description: '绘画提示词!', - required: true, - }), - (0, swagger_1.ApiProperty)({ example: '--ar 16:9 --c 0', description: '除了prompt的额外参数' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ChatDrawDto.prototype, "extraParam", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'https://xsdasdasd.com', description: '垫图图片地址' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ChatDrawDto.prototype, "imgUrl", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'IMAGINE', description: '任务类型,可用值:IMAGINE,UPSCALE,VARIATION,ZOOM,PAN,DESCRIBE,BLEND,SHORTEN,SWAP_FACE' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ChatDrawDto.prototype, "action", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '变体或者放大的序号' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], ChatDrawDto.prototype, "orderId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '绘画的DBID' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], ChatDrawDto.prototype, "drawId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: 'customId' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ChatDrawDto.prototype, "customId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: 'base64' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ChatDrawDto.prototype, "base64", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '任务ID' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], ChatDrawDto.prototype, "taskId", void 0); -exports.ChatDrawDto = ChatDrawDto; diff --git a/AIWebQuickDeploy/dist/modules/chat/dto/chatProcess.dto.js b/AIWebQuickDeploy/dist/modules/chat/dto/chatProcess.dto.js deleted file mode 100644 index 65962f9..0000000 --- a/AIWebQuickDeploy/dist/modules/chat/dto/chatProcess.dto.js +++ /dev/null @@ -1,57 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatProcessDto = exports.Options = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -const class_transformer_1 = require("class-transformer"); -class Options { -} -__decorate([ - (0, class_validator_1.IsString)(), - __metadata("design:type", String) -], Options.prototype, "parentMessageId", void 0); -exports.Options = Options; -class ChatProcessDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'hello, Who are you', description: '对话信息' }), - (0, class_validator_1.IsNotEmpty)({ message: '提问信息不能为空!' }), - __metadata("design:type", String) -], ChatProcessDto.prototype, "prompt", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'https://aiweb.com', description: '对话附带的链接', required: false }), - __metadata("design:type", String) -], ChatProcessDto.prototype, "url", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '{ parentMessageId: 0 }', description: '上次对话信息', required: false }), - (0, class_transformer_1.Type)(() => Options), - __metadata("design:type", Options) -], ChatProcessDto.prototype, "options", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: "You are ChatGPT, a large language model trained by OpenAI. Follow the user's instructions carefully. Respond using markdown.", - description: '系统预设信息', - }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ChatProcessDto.prototype, "systemMessage", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '应用id', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], ChatProcessDto.prototype, "appId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: "gpt-3.5-turbo", description: '使用模型', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ChatProcessDto.prototype, "model", void 0); -exports.ChatProcessDto = ChatProcessDto; diff --git a/AIWebQuickDeploy/dist/modules/chat/helper.js b/AIWebQuickDeploy/dist/modules/chat/helper.js deleted file mode 100644 index 8e20c05..0000000 --- a/AIWebQuickDeploy/dist/modules/chat/helper.js +++ /dev/null @@ -1,46 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.addOneIfOdd = exports.unifiedFormattingResponse = void 0; -function unifiedFormattingResponse(keyType, response, others) { - let formatRes = { - keyType, - parentMessageId: '', - text: '', - usage: { - prompt_tokens: 0, - completion_tokens: 0, - total_tokens: 0, - } - }; - const { parentMessageId } = response === null || response === void 0 ? void 0 : response.detail; - let { usage } = response === null || response === void 0 ? void 0 : response.detail; - if (!usage) { - usage = { - prompt_tokens: 0, - completion_tokens: 0, - total_tokens: 0 - }; - } - const { prompt_tokens, completion_tokens, total_tokens } = usage; - formatRes = { - keyType, - parentMessageId, - text: response.text, - usage: { - prompt_tokens, - completion_tokens, - total_tokens - } - }; - return formatRes; -} -exports.unifiedFormattingResponse = unifiedFormattingResponse; -function addOneIfOdd(num) { - if (num % 2 !== 0) { - return num + 1; - } - else { - return num; - } -} -exports.addOneIfOdd = addOneIfOdd; diff --git a/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.controller.js b/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.controller.js deleted file mode 100644 index ffc1a2c..0000000 --- a/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.controller.js +++ /dev/null @@ -1,101 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatGroupController = void 0; -const swagger_1 = require("@nestjs/swagger"); -const chatGroup_service_1 = require("./chatGroup.service"); -const common_1 = require("@nestjs/common"); -const createGroup_dto_1 = require("./dto/createGroup.dto"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const delGroup_dto_1 = require("./dto/delGroup.dto"); -const updateGroup_dto_1 = require("./dto/updateGroup.dto"); -let ChatGroupController = class ChatGroupController { - constructor(chatGroupService) { - this.chatGroupService = chatGroupService; - } - create(body, req) { - return this.chatGroupService.create(body, req); - } - query(req) { - return this.chatGroupService.query(req); - } - update(body, req) { - return this.chatGroupService.update(body, req); - } - del(body, req) { - return this.chatGroupService.del(body, req); - } - delAll(req) { - return this.chatGroupService.delAll(req); - } -}; -__decorate([ - (0, common_1.Post)('create'), - (0, swagger_1.ApiOperation)({ summary: '创建对话组' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [createGroup_dto_1.CreateGroupDto, Object]), - __metadata("design:returntype", void 0) -], ChatGroupController.prototype, "create", null); -__decorate([ - (0, common_1.Get)('query'), - (0, swagger_1.ApiOperation)({ summary: '查询对话组' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], ChatGroupController.prototype, "query", null); -__decorate([ - (0, common_1.Post)('update'), - (0, swagger_1.ApiOperation)({ summary: '更新对话组' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [updateGroup_dto_1.UpdateGroupDto, Object]), - __metadata("design:returntype", void 0) -], ChatGroupController.prototype, "update", null); -__decorate([ - (0, common_1.Post)('del'), - (0, swagger_1.ApiOperation)({ summary: '删除对话组' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [delGroup_dto_1.DelGroupDto, Object]), - __metadata("design:returntype", void 0) -], ChatGroupController.prototype, "del", null); -__decorate([ - (0, common_1.Post)('delAll'), - (0, swagger_1.ApiOperation)({ summary: '删除对话组' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], ChatGroupController.prototype, "delAll", null); -ChatGroupController = __decorate([ - (0, swagger_1.ApiTags)('group'), - (0, common_1.Controller)('group'), - __metadata("design:paramtypes", [chatGroup_service_1.ChatGroupService]) -], ChatGroupController); -exports.ChatGroupController = ChatGroupController; diff --git a/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.entity.js b/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.entity.js deleted file mode 100644 index fe1efb9..0000000 --- a/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.entity.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatGroupEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let ChatGroupEntity = class ChatGroupEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户ID' }), - __metadata("design:type", Number) -], ChatGroupEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '是否置顶聊天', type: 'boolean', default: false }), - __metadata("design:type", Boolean) -], ChatGroupEntity.prototype, "isSticky", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '分组名称', nullable: true }), - __metadata("design:type", String) -], ChatGroupEntity.prototype, "title", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '应用ID', nullable: true }), - __metadata("design:type", Number) -], ChatGroupEntity.prototype, "appId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '是否删除了', default: false }), - __metadata("design:type", Boolean) -], ChatGroupEntity.prototype, "isDelete", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '配置', nullable: true, default: null, type: 'text' }), - __metadata("design:type", String) -], ChatGroupEntity.prototype, "config", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '附加参数', nullable: true, type: 'text' }), - __metadata("design:type", String) -], ChatGroupEntity.prototype, "params", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '文件链接', nullable: true, default: null, type: 'text' }), - __metadata("design:type", String) -], ChatGroupEntity.prototype, "fileUrl", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'PDF中的文字内容', nullable: true, type: 'mediumtext' }), - __metadata("design:type", String) -], ChatGroupEntity.prototype, "pdfTextContent", void 0); -ChatGroupEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'chat_group' }) -], ChatGroupEntity); -exports.ChatGroupEntity = ChatGroupEntity; diff --git a/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.module.js b/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.module.js deleted file mode 100644 index 70c026f..0000000 --- a/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.module.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatGroupModule = void 0; -const common_1 = require("@nestjs/common"); -const chatGroup_controller_1 = require("./chatGroup.controller"); -const chatGroup_service_1 = require("./chatGroup.service"); -const typeorm_1 = require("@nestjs/typeorm"); -const chatGroup_entity_1 = require("./chatGroup.entity"); -const app_entity_1 = require("../app/app.entity"); -let ChatGroupModule = class ChatGroupModule { -}; -ChatGroupModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([chatGroup_entity_1.ChatGroupEntity, app_entity_1.AppEntity])], - controllers: [chatGroup_controller_1.ChatGroupController], - providers: [chatGroup_service_1.ChatGroupService], - exports: [chatGroup_service_1.ChatGroupService] - }) -], ChatGroupModule); -exports.ChatGroupModule = ChatGroupModule; diff --git a/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.service.js b/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.service.js deleted file mode 100644 index 1897be2..0000000 --- a/AIWebQuickDeploy/dist/modules/chatGroup/chatGroup.service.js +++ /dev/null @@ -1,219 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var __rest = (this && this.__rest) || function (s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatGroupService = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const axios_1 = require("axios"); -const pdf = require("pdf-parse"); -const typeorm_2 = require("typeorm"); -const app_entity_1 = require("../app/app.entity"); -const models_service_1 = require("../models/models.service"); -const chatGroup_entity_1 = require("./chatGroup.entity"); -let ChatGroupService = class ChatGroupService { - constructor(chatGroupEntity, appEntity, modelsService) { - this.chatGroupEntity = chatGroupEntity; - this.appEntity = appEntity; - this.modelsService = modelsService; - } - async create(body, req) { - const { id } = req.user; - const { appId, modelConfig: bodyModelConfig, params } = body; - let modelConfig = bodyModelConfig || (await this.modelsService.getBaseConfig()); - if (!modelConfig) { - throw new common_1.HttpException('管理员未配置任何AI模型、请先联系管理员开通聊天模型配置!', common_1.HttpStatus.BAD_REQUEST); - } - modelConfig = JSON.parse(JSON.stringify(modelConfig)); - const groupParams = { title: '新对话', userId: id, appId, params }; - if (appId) { - const appInfo = await this.appEntity.findOne({ where: { id: appId } }); - if (!appInfo) { - throw new common_1.HttpException('非法操作、您在使用一个不存在的应用!', common_1.HttpStatus.BAD_REQUEST); - } - const { status, name, isFixedModel, isGPTs, appModel, coverImg } = appInfo; - Object.assign(modelConfig.modelInfo, { - isGPTs, - isFixedModel, - modelAvatar: coverImg, - modelName: name, - }); - if (isGPTs === 1 || isFixedModel === 1) { - const appModelKey = await this.modelsService.getCurrentModelKeyInfo(isFixedModel === 1 ? appModel : 'gpts'); - Object.assign(modelConfig.modelInfo, { - deductType: appModelKey.deductType, - deduct: appModelKey.deduct, - model: appModel, - isFileUpload: appModelKey.isFileUpload, - }); - } - if (![1, 3, 4, 5].includes(status)) { - throw new common_1.HttpException('非法操作、您在使用一个未启用的应用!', common_1.HttpStatus.BAD_REQUEST); - } - if (name) { - groupParams.title = name; - } - } - const newGroup = await this.chatGroupEntity.save(Object.assign(Object.assign({}, groupParams), { config: JSON.stringify(modelConfig) })); - return newGroup; - } - async query(req) { - try { - const { id } = req.user; - const params = { userId: id, isDelete: false }; - const res = await this.chatGroupEntity.find({ - where: params, - order: { isSticky: 'DESC', updatedAt: 'DESC' }, - }); - return res; - const appIds = res.filter((t) => t.appId).map((t) => t.appId); - const appInfos = await this.appEntity.find({ where: { id: (0, typeorm_2.In)(appIds) } }); - return res.map((item) => { - var _a; - item.appLogo = (_a = appInfos.find((t) => t.id === item.appId)) === null || _a === void 0 ? void 0 : _a.coverImg; - return item; - }); - } - catch (error) { - console.log('error: ', error); - } - } - async update(body, req) { - const { title, isSticky, groupId, config, fileUrl } = body; - const { id } = req.user; - const g = await this.chatGroupEntity.findOne({ - where: { id: groupId, userId: id }, - }); - if (!g) { - throw new common_1.HttpException('请先选择一个对话或者新加一个对话再操作!', common_1.HttpStatus.BAD_REQUEST); - } - const { appId } = g; - if (appId && !title) { - try { - const parseData = JSON.parse(config); - if (Number(parseData.keyType) !== 1) { - throw new common_1.HttpException('应用对话名称不能修改哟!', common_1.HttpStatus.BAD_REQUEST); - } - } - catch (error) { - } - } - const data = {}; - title && (data['title'] = title); - typeof isSticky !== 'undefined' && (data['isSticky'] = isSticky); - config && (data['config'] = config); - fileUrl && (data['fileUrl'] = fileUrl); - const u = await this.chatGroupEntity.update({ id: groupId }, data); - if (u.affected) { - if (fileUrl) { - this.handlePdfExtraction(fileUrl, groupId); - } - return true; - } - else { - throw new common_1.HttpException('更新对话失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async handlePdfExtraction(fileUrl, groupId) { - try { - const pdfText = await this.extractPdfText(fileUrl); - await this.chatGroupEntity.update({ id: groupId }, { pdfTextContent: pdfText }); - } - catch (error) { - console.error('PDF 读取失败:', error); - } - } - async extractPdfText(fileUrl) { - try { - const response = await axios_1.default.get(fileUrl, { - responseType: 'arraybuffer', - }); - const dataBuffer = Buffer.from(response.data); - const pdfData = await pdf(dataBuffer); - return pdfData.text; - } - catch (error) { - console.error('PDF 解析失败:', error); - throw new Error('PDF 解析失败'); - } - } - async updateTime(groupId) { - await this.chatGroupEntity.update(groupId, { - updatedAt: new Date(), - }); - } - async del(body, req) { - const { groupId } = body; - const { id } = req.user; - const g = await this.chatGroupEntity.findOne({ - where: { id: groupId, userId: id }, - }); - if (!g) { - throw new common_1.HttpException('非法操作、您在删除一个非法资源!', common_1.HttpStatus.BAD_REQUEST); - } - const r = await this.chatGroupEntity.update({ id: groupId }, { isDelete: true }); - if (r.affected) { - return '删除成功'; - } - else { - throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async delAll(req) { - const { id } = req.user; - const r = await this.chatGroupEntity.update({ userId: id, isSticky: false, isDelete: false }, { isDelete: true }); - if (r.affected) { - return '删除成功'; - } - else { - throw new common_1.HttpException('删除失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async getGroupInfoFromId(id) { - if (!id) - return; - const groupInfo = await this.chatGroupEntity.findOne({ where: { id } }); - if (groupInfo) { - const { pdfTextContent } = groupInfo, rest = __rest(groupInfo, ["pdfTextContent"]); - return rest; - } - } - async getGroupPdfText(groupId) { - const groupInfo = await this.chatGroupEntity.findOne({ - where: { id: groupId }, - }); - if (groupInfo) { - return groupInfo.pdfTextContent; - } - } -}; -ChatGroupService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)), - __param(1, (0, typeorm_1.InjectRepository)(app_entity_1.AppEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - models_service_1.ModelsService]) -], ChatGroupService); -exports.ChatGroupService = ChatGroupService; diff --git a/AIWebQuickDeploy/dist/modules/chatGroup/dto/createGroup.dto.js b/AIWebQuickDeploy/dist/modules/chatGroup/dto/createGroup.dto.js deleted file mode 100644 index e47fecf..0000000 --- a/AIWebQuickDeploy/dist/modules/chatGroup/dto/createGroup.dto.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreateGroupDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class CreateGroupDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '应用ID', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreateGroupDto.prototype, "appId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '', - description: '对话模型配置项序列化的字符串', - required: false, - }), - __metadata("design:type", Object) -], CreateGroupDto.prototype, "modelConfig", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '', - description: '对话组参数序列化的字符串', - required: false, - }), - __metadata("design:type", String) -], CreateGroupDto.prototype, "params", void 0); -exports.CreateGroupDto = CreateGroupDto; diff --git a/AIWebQuickDeploy/dist/modules/chatGroup/dto/delGroup.dto.js b/AIWebQuickDeploy/dist/modules/chatGroup/dto/delGroup.dto.js deleted file mode 100644 index 5413b20..0000000 --- a/AIWebQuickDeploy/dist/modules/chatGroup/dto/delGroup.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DelGroupDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class DelGroupDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '对话分组ID', required: true }), - __metadata("design:type", Number) -], DelGroupDto.prototype, "groupId", void 0); -exports.DelGroupDto = DelGroupDto; diff --git a/AIWebQuickDeploy/dist/modules/chatGroup/dto/updateGroup.dto.js b/AIWebQuickDeploy/dist/modules/chatGroup/dto/updateGroup.dto.js deleted file mode 100644 index 071c19c..0000000 --- a/AIWebQuickDeploy/dist/modules/chatGroup/dto/updateGroup.dto.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateGroupDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class UpdateGroupDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '修改的对话ID', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UpdateGroupDto.prototype, "groupId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '对话组title', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UpdateGroupDto.prototype, "title", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '对话组是否置顶', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Boolean) -], UpdateGroupDto.prototype, "isSticky", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '', description: '对话组文件地址', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UpdateGroupDto.prototype, "fileUrl", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '', - description: '对话模型配置项序列化的字符串', - required: false, - }), - __metadata("design:type", String) -], UpdateGroupDto.prototype, "config", void 0); -exports.UpdateGroupDto = UpdateGroupDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/chatLog.controller.js b/AIWebQuickDeploy/dist/modules/chatLog/chatLog.controller.js deleted file mode 100644 index 0eff985..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/chatLog.controller.js +++ /dev/null @@ -1,176 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatLogController = void 0; -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const chatLog_service_1 = require("./chatLog.service"); -const chatList_dto_1 = require("./dto/chatList.dto"); -const del_dto_1 = require("./dto/del.dto"); -const delByGroup_dto_1 = require("./dto/delByGroup.dto"); -const exportExcelChatlog_dto_1 = require("./dto/exportExcelChatlog.dto"); -const queryAllChatLog_dto_1 = require("./dto/queryAllChatLog.dto"); -const queryAllDrawLog_dto_1 = require("./dto/queryAllDrawLog.dto"); -const queryByAppId_dto_1 = require("./dto/queryByAppId.dto"); -const queryMyChatLog_dto_1 = require("./dto/queryMyChatLog.dto"); -const recDrawImg_dto_1 = require("./dto/recDrawImg.dto"); -let ChatLogController = class ChatLogController { - constructor(chatLogService) { - this.chatLogService = chatLogService; - } - querDrawLog(query, req) { - return this.chatLogService.querDrawLog(req, query); - } - recDrawImg(body) { - return this.chatLogService.recDrawImg(body); - } - querAllDrawLog(params) { - return this.chatLogService.querAllDrawLog(params); - } - queryAllChatLog(params, req) { - return this.chatLogService.querAllChatLog(params, req); - } - exportExcel(body, res) { - return this.chatLogService.exportExcel(body, res); - } - chatList(req, params) { - return this.chatLogService.chatList(req, params); - } - del(req, body) { - return this.chatLogService.deleteChatLog(req, body); - } - delByGroupId(req, body) { - return this.chatLogService.delByGroupId(req, body); - } - deleteChatsAfterId(req, body) { - return this.chatLogService.deleteChatsAfterId(req, body); - } - byAppId(req, params) { - return this.chatLogService.byAppId(req, params); - } -}; -__decorate([ - (0, common_1.Get)('draw'), - (0, swagger_1.ApiOperation)({ summary: '查询我的绘制记录' }), - (0, swagger_1.ApiBearerAuth)(), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - __param(0, (0, common_1.Query)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryMyChatLog_dto_1.QuerMyChatLogDto, Object]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "querDrawLog", null); -__decorate([ - (0, common_1.Post)('recDrawImg'), - (0, swagger_1.ApiOperation)({ summary: '推荐此图片对外展示' }), - (0, swagger_1.ApiBearerAuth)(), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [recDrawImg_dto_1.recDrawImgDto]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "recDrawImg", null); -__decorate([ - (0, common_1.Get)('drawAll'), - (0, swagger_1.ApiOperation)({ summary: '查询所有的绘制记录' }), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryAllDrawLog_dto_1.QuerAllDrawLogDto]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "querAllDrawLog", null); -__decorate([ - (0, common_1.Get)('chatAll'), - (0, swagger_1.ApiOperation)({ summary: '查询所有的问答记录' }), - (0, swagger_1.ApiBearerAuth)(), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - __param(0, (0, common_1.Query)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryAllChatLog_dto_1.QuerAllChatLogDto, Object]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "queryAllChatLog", null); -__decorate([ - (0, common_1.Post)('exportExcel'), - (0, swagger_1.ApiOperation)({ summary: '导出问答记录' }), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Res)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [exportExcelChatlog_dto_1.ExportExcelChatlogDto, Object]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "exportExcel", null); -__decorate([ - (0, common_1.Get)('chatList'), - (0, swagger_1.ApiOperation)({ summary: '查询我的问答记录' }), - (0, swagger_1.ApiBearerAuth)(), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, chatList_dto_1.ChatListDto]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "chatList", null); -__decorate([ - (0, common_1.Post)('del'), - (0, swagger_1.ApiOperation)({ summary: '删除我的问答记录' }), - (0, swagger_1.ApiBearerAuth)(), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, del_dto_1.DelDto]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "del", null); -__decorate([ - (0, common_1.Post)('delByGroupId'), - (0, swagger_1.ApiOperation)({ summary: '清空一组对话' }), - (0, swagger_1.ApiBearerAuth)(), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, delByGroup_dto_1.DelByGroupDto]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "delByGroupId", null); -__decorate([ - (0, common_1.Post)('deleteChatsAfterId'), - (0, swagger_1.ApiOperation)({ summary: '删除对话组中某条对话及其后的所有对话' }), - (0, swagger_1.ApiBearerAuth)(), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "deleteChatsAfterId", null); -__decorate([ - (0, common_1.Get)('byAppId'), - (0, swagger_1.ApiOperation)({ summary: '查询某个应用的问答记录' }), - (0, swagger_1.ApiBearerAuth)(), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, queryByAppId_dto_1.QueryByAppIdDto]), - __metadata("design:returntype", void 0) -], ChatLogController.prototype, "byAppId", null); -ChatLogController = __decorate([ - (0, common_1.Controller)('chatLog'), - (0, swagger_1.ApiTags)('ChatLog'), - __metadata("design:paramtypes", [chatLog_service_1.ChatLogService]) -], ChatLogController); -exports.ChatLogController = ChatLogController; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/chatLog.entity.js b/AIWebQuickDeploy/dist/modules/chatLog/chatLog.entity.js deleted file mode 100644 index 6d76d5c..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/chatLog.entity.js +++ /dev/null @@ -1,144 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatLogEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let ChatLogEntity = class ChatLogEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户ID' }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '使用的模型', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "model", void 0); -__decorate([ - (0, typeorm_1.Column)({ - comment: '使用类型1: 普通对话 2: 绘图 3: 拓展性对话', - nullable: true, - default: 1, - }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "type", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '自定义的模型名称', nullable: true, default: 'AI' }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "modelName", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '自定义的模型名称', nullable: false, default: '' }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "modelAvatar", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'Ip地址', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "curIp", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '询问的问题', type: 'text', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "prompt", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '附加参数', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "extraParam", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '插件参数', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "pluginParam", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '回答的答案', type: 'text', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "answer", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '提问的token', nullable: true }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "promptTokens", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '回答的token', nullable: true }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "completionTokens", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '总花费的token', nullable: true }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "totalTokens", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'role system user assistant', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "role", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '任务进度', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "progress", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '任务状态', nullable: true, default: 3 }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '任务类型', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "action", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '对图片操作的按钮ID', type: 'text', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "customId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '绘画的ID每条不一样', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "drawId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '文件信息', nullable: true, type: 'text' }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "fileInfo", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '对话转语音的链接', nullable: true, type: 'text' }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "ttsUrl", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '是否推荐0: 默认 1: 推荐', nullable: true, default: 0 }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "rec", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '分组ID', nullable: true }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "groupId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '使用的应用id', nullable: true }), - __metadata("design:type", Number) -], ChatLogEntity.prototype, "appId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '是否删除', default: false }), - __metadata("design:type", Boolean) -], ChatLogEntity.prototype, "isDelete", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '任务ID', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "taskId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '任务数据', nullable: true, type: 'text' }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "taskData", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '视频Url', nullable: true, type: 'text' }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "videoUrl", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '音频Url', nullable: true, type: 'text' }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "audioUrl", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '提问参考', nullable: true }), - __metadata("design:type", String) -], ChatLogEntity.prototype, "promptReference", void 0); -ChatLogEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'chatlog' }) -], ChatLogEntity); -exports.ChatLogEntity = ChatLogEntity; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/chatLog.module.js b/AIWebQuickDeploy/dist/modules/chatLog/chatLog.module.js deleted file mode 100644 index aa5c63e..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/chatLog.module.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatLogModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity"); -const user_entity_1 = require("../user/user.entity"); -const chatLog_controller_1 = require("./chatLog.controller"); -const chatLog_entity_1 = require("./chatLog.entity"); -const chatLog_service_1 = require("./chatLog.service"); -let ChatLogModule = class ChatLogModule { -}; -ChatLogModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([chatLog_entity_1.ChatLogEntity, user_entity_1.UserEntity, chatGroup_entity_1.ChatGroupEntity]), - ], - controllers: [chatLog_controller_1.ChatLogController], - providers: [chatLog_service_1.ChatLogService], - exports: [chatLog_service_1.ChatLogService], - }) -], ChatLogModule); -exports.ChatLogModule = ChatLogModule; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/chatLog.service.js b/AIWebQuickDeploy/dist/modules/chatLog/chatLog.service.js deleted file mode 100644 index fe0454f..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/chatLog.service.js +++ /dev/null @@ -1,390 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatLogService = void 0; -const balance_constant_1 = require("../../common/constants/balance.constant"); -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const exceljs_1 = require("exceljs"); -const typeorm_2 = require("typeorm"); -const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity"); -const user_entity_1 = require("../user/user.entity"); -const chatLog_entity_1 = require("./chatLog.entity"); -const models_service_1 = require("../models/models.service"); -let ChatLogService = class ChatLogService { - constructor(chatLogEntity, userEntity, chatGroupEntity, modelsService) { - this.chatLogEntity = chatLogEntity; - this.userEntity = userEntity; - this.chatGroupEntity = chatGroupEntity; - this.modelsService = modelsService; - } - async saveChatLog(logInfo) { - const savedLog = await this.chatLogEntity.save(logInfo); - return savedLog; - } - async updateChatLog(id, logInfo) { - return await this.chatLogEntity.update({ id }, logInfo); - } - async findOneChatLog(id) { - return await this.chatLogEntity.findOne({ where: { id } }); - } - async querDrawLog(req, query) { - const { id } = req.user; - const { model } = query; - const where = { userId: id, type: balance_constant_1.ChatType.PAINT }; - if (model) { - where.model = model; - if (model === 'DALL-E2') { - where.model = (0, typeorm_2.In)(['DALL-E2', 'dall-e-3']); - } - } - const data = await this.chatLogEntity.find({ - where, - order: { id: 'DESC' }, - select: ['id', 'answer', 'prompt', 'model', 'type', 'fileInfo'], - }); - data.forEach((r) => { - if (r.type === 'paintCount') { - const w = r.model === 'mj' ? 310 : 160; - const imgType = r.answer.includes('cos') ? 'tencent' : 'ali'; - const compress = imgType === 'tencent' - ? `?imageView2/1/w/${w}/q/55` - : `?x-oss-process=image/resize,w_${w}`; - r.thumbImg = r.answer + compress; - try { - r.fileInfo = r.fileInfo ? JSON.parse(r.fileInfo) : null; - } - catch (error) { - r.fileInfo = {}; - } - } - }); - return data; - } - async querAllDrawLog(params) { - const { page = 1, size = 20, rec, userId, model } = params; - const where = { - type: 2, - prompt: (0, typeorm_2.Not)(''), - answer: (0, typeorm_2.Not)(''), - fileInfo: (0, typeorm_2.Not)(''), - }; - rec && Object.assign(where, { rec }); - userId && Object.assign(where, { userId }); - if (model) { - where.model = model; - } - else { - where.model = (0, typeorm_2.In)(['midjourney', 'dall-e-3', 'stable-diffusion']); - } - const [rows, count] = await this.chatLogEntity.findAndCount({ - order: { id: 'DESC' }, - skip: (page - 1) * size, - take: size, - where, - }); - const userIds = rows - .map((item) => item.userId) - .filter((id) => id < 100000); - const userInfos = await this.userEntity.find({ - where: { id: (0, typeorm_2.In)(userIds) }, - select: ['id', 'username', 'avatar', 'email'], - }); - rows.forEach((item) => { - item.userInfo = userInfos.find((user) => user.id === item.userId); - }); - rows.forEach((r) => { - var _a; - const w = r.model === 'midjourney' ? 310 : 160; - const imgType = r.answer.includes('cos') ? 'tencent' : 'ali'; - const compress = imgType === 'tencent' - ? `?imageView2/1/w/${w}/q/55` - : `?x-oss-process=image/resize,w_${w}`; - r.thumbImg = r.answer + compress; - try { - const detailInfo = r.extend ? JSON.parse(r.extend) : null; - if (detailInfo) { - if (detailInfo) { - r.isGroup = ((_a = detailInfo === null || detailInfo === void 0 ? void 0 : detailInfo.components[0]) === null || _a === void 0 ? void 0 : _a.components.length) === 5; - } - else { - r.isGroup = false; - } - } - } - catch (error) { - console.log('querAllDrawLog Json parse error', error); - } - }); - return { rows, count }; - } - async findOneDrawLog(params) { - const { id } = params; - const record = await this.chatLogEntity.findOne({ where: { id } }); - return record; - } - async recDrawImg(body) { - const { id } = body; - const l = await this.chatLogEntity.findOne({ - where: { id, type: balance_constant_1.ChatType.PAINT }, - }); - if (!l) { - throw new common_1.HttpException('你推荐的图片不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); - } - const rec = l.rec === 1 ? 0 : 1; - const res = await this.chatLogEntity.update({ id }, { rec }); - if (res.affected > 0) { - return `${rec ? '推荐' : '取消推荐'}图片成功!`; - } - throw new common_1.HttpException('你操作的图片不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); - } - async exportExcel(body, res) { - const where = { type: balance_constant_1.ChatType.NORMAL_CHAT }; - const { page = 1, size = 30, prompt, email } = body; - prompt && Object.assign(where, { prompt: (0, typeorm_2.Like)(`%${prompt}%`) }); - if (email) { - const user = await this.userEntity.findOne({ where: { email } }); - (user === null || user === void 0 ? void 0 : user.id) && Object.assign(where, { userId: user.id }); - } - const [rows, count] = await this.chatLogEntity.findAndCount({ - order: { id: 'DESC' }, - skip: (page - 1) * size, - take: size, - where, - }); - const userIds = rows.map((r) => r.userId); - const userInfos = await this.userEntity.find({ - where: { id: (0, typeorm_2.In)(userIds) }, - }); - const data = rows.map((r) => { - const userInfo = userInfos.find((u) => u.id === r.userId); - return { - username: userInfo ? userInfo.username : '', - email: userInfo ? userInfo.email : '', - prompt: r.prompt, - answer: r.answer, - createdAt: (0, utils_1.formatDate)(r.createdAt), - }; - }); - const workbook = new exceljs_1.default.Workbook(); - const worksheet = workbook.addWorksheet('chatlog'); - worksheet.columns = [ - { header: '用户名', key: 'username', width: 20 }, - { header: '用户邮箱', key: 'email', width: 20 }, - { header: '提问时间', key: 'createdAt', width: 20 }, - { header: '提问问题', key: 'prompt', width: 80 }, - { header: '回答答案', key: 'answer', width: 150 }, - ]; - data.forEach((row) => worksheet.addRow(row)); - res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); - res.setHeader('Content-Disposition', 'attachment; filename=' + 'chat.xlsx'); - await workbook.xlsx.write(res); - res.end(); - } - async querAllChatLog(params, req) { - const { page = 1, size = 20, userId, prompt } = params; - const where = { type: balance_constant_1.ChatType.NORMAL_CHAT, prompt: (0, typeorm_2.Not)('') }; - userId && Object.assign(where, { userId }); - prompt && Object.assign(where, { prompt: (0, typeorm_2.Like)(`%${prompt}%`) }); - const [rows, count] = await this.chatLogEntity.findAndCount({ - order: { id: 'DESC' }, - skip: (page - 1) * size, - take: size, - where, - }); - const userIds = rows.map((item) => item.userId); - const userInfo = await this.userEntity.find({ - where: { id: (0, typeorm_2.In)(userIds) }, - select: ['id', 'username', 'email'], - }); - rows.forEach((item) => { - const { username, email } = userInfo.find((u) => u.id === item.userId) || {}; - item.username = username; - item.email = email; - }); - req.user.role !== 'super' && - rows.forEach((t) => (t.email = (0, utils_1.maskEmail)(t.email))); - rows.forEach((item) => { - !item.email && (item.email = `${item === null || item === void 0 ? void 0 : item.userId}@aiweb.com`); - !item.username && (item.username = `游客${item === null || item === void 0 ? void 0 : item.userId}`); - }); - return { rows, count }; - } - async chatList(req, params) { - const { id } = req.user; - const { groupId } = params; - const where = { userId: id, isDelete: false }; - groupId && Object.assign(where, { groupId }); - if (groupId) { - const count = await this.chatGroupEntity.count({ - where: { isDelete: false }, - }); - if (count === 0) - return []; - } - const list = await this.chatLogEntity.find({ where }); - return list.map((item) => { - const { prompt, role, answer, createdAt, model, modelName, type, status, action, drawId, id, fileInfo, ttsUrl, videoUrl, audioUrl, customId, pluginParam, modelAvatar, taskData, promptReference, } = item; - return { - chatId: id, - dateTime: (0, utils_1.formatDate)(createdAt), - text: role === 'user' ? prompt : answer, - modelType: type, - status: status, - action: action, - drawId: drawId, - customId: customId, - inversion: role === 'user', - error: false, - fileInfo: fileInfo, - ttsUrl: ttsUrl, - videoUrl: videoUrl, - audioUrl: audioUrl, - model: model, - modelName: modelName, - pluginParam: pluginParam, - modelAvatar: modelAvatar, - taskData: taskData, - promptReference: promptReference, - }; - }); - } - async chatHistory(groupId, rounds) { - if (rounds === 0) { - return []; - } - const where = { isDelete: false, groupId: groupId }; - const list = await this.chatLogEntity.find({ - where, - order: { - createdAt: 'DESC', - }, - take: rounds * 2, - }); - const result = list - .map((item) => { - const { role, prompt, answer, fileInfo } = item; - const record = { - role: role, - text: role === 'user' ? prompt : answer, - fileInfo: fileInfo, - }; - return record; - }) - .reverse(); - return result; - } - async deleteChatLog(req, body) { - const { id: userId } = req.user; - const { id } = body; - const c = await this.chatLogEntity.findOne({ where: { id, userId } }); - if (!c) { - throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); - } - const r = await this.chatLogEntity.update({ id }, { isDelete: true }); - if (r.affected > 0) { - return '删除对话记录成功!'; - } - else { - throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); - } - } - async delByGroupId(req, body) { - const { groupId } = body; - const { id } = req.user; - const g = await this.chatGroupEntity.findOne({ - where: { id: groupId, userId: id }, - }); - if (!g) { - throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); - } - const r = await this.chatLogEntity.update({ groupId }, { isDelete: true }); - if (r.affected > 0) { - return '删除对话记录成功!'; - } - if (r.affected === 0) { - throw new common_1.HttpException('当前页面已经没有东西可以删除了!', common_1.HttpStatus.BAD_REQUEST); - } - } - async deleteChatsAfterId(req, body) { - const { id } = body; - const { id: userId } = req.user; - const chatLog = await this.chatLogEntity.findOne({ where: { id, userId } }); - if (!chatLog) { - throw new common_1.HttpException('你删除的对话记录不存在、请检查!', common_1.HttpStatus.BAD_REQUEST); - } - const { groupId } = chatLog; - const result = await this.chatLogEntity.update({ groupId, id: (0, typeorm_2.MoreThanOrEqual)(id) }, { isDelete: true }); - if (result.affected > 0) { - return '删除对话记录成功!'; - } - else { - throw new common_1.HttpException('当前页面已经没有东西可以删除了!', common_1.HttpStatus.BAD_REQUEST); - } - } - async byAppId(req, body) { - const { id } = req.user; - const { appId, page = 1, size = 10 } = body; - const [rows, count] = await this.chatLogEntity.findAndCount({ - where: { userId: id, appId, role: 'assistant' }, - order: { id: 'DESC' }, - take: size, - skip: (page - 1) * size, - }); - return { rows, count }; - } - async checkModelLimits(userId, model) { - const ONE_HOUR_IN_MS = 3600 * 1000; - const oneHourAgo = new Date(Date.now() - ONE_HOUR_IN_MS); - try { - const usageCount = await this.chatLogEntity.count({ - where: { - userId: userId.id, - model, - createdAt: (0, typeorm_2.MoreThan)(oneHourAgo), - }, - }); - const adjustedUsageCount = Math.ceil(usageCount / 2); - common_1.Logger.log(`用户ID: ${userId.id} 一小时内调用 ${model} 模型 ${adjustedUsageCount + 1} 次`, 'ChatLogService'); - let modelInfo; - if (model.startsWith('gpt-4-gizmo')) { - modelInfo = await this.modelsService.getCurrentModelKeyInfo('gpts'); - } - else { - modelInfo = await this.modelsService.getCurrentModelKeyInfo(model); - } - const modelLimits = Number(modelInfo.modelLimits); - common_1.Logger.log(`模型 ${model} 的使用次数限制为 ${modelLimits}`, 'ChatLogService'); - if (adjustedUsageCount > modelLimits) { - return true; - } - return false; - } - catch (error) { - common_1.Logger.error(`查询数据库出错 - 用户ID: ${userId.id}, 模型: ${model}, 错误信息: ${error.message}`, error.stack, 'ChatLogService'); - } - } -}; -ChatLogService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)), - __param(1, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), - __param(2, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - models_service_1.ModelsService]) -], ChatLogService); -exports.ChatLogService = ChatLogService; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/chatList.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/chatList.dto.js deleted file mode 100644 index ac9a437..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/chatList.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ChatListDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class ChatListDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '对话分组ID', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], ChatListDto.prototype, "groupId", void 0); -exports.ChatListDto = ChatListDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/del.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/del.dto.js deleted file mode 100644 index 00cda9f..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/del.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DelDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class DelDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '对话Id', required: true }), - __metadata("design:type", Number) -], DelDto.prototype, "id", void 0); -exports.DelDto = DelDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/delByGroup.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/delByGroup.dto.js deleted file mode 100644 index ea4d2c3..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/delByGroup.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DelByGroupDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class DelByGroupDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '对话组Id', required: true }), - __metadata("design:type", Number) -], DelByGroupDto.prototype, "groupId", void 0); -exports.DelByGroupDto = DelByGroupDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/exportExcelChatlog.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/exportExcelChatlog.dto.js deleted file mode 100644 index 3ebdd0c..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/exportExcelChatlog.dto.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ExportExcelChatlogDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class ExportExcelChatlogDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], ExportExcelChatlogDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], ExportExcelChatlogDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '您好', description: '用户询问的问题', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ExportExcelChatlogDto.prototype, "prompt", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'J_longyan@163.com', description: '用户邮箱', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], ExportExcelChatlogDto.prototype, "email", void 0); -exports.ExportExcelChatlogDto = ExportExcelChatlogDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/queryAllChatLog.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/queryAllChatLog.dto.js deleted file mode 100644 index 0739235..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/queryAllChatLog.dto.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QuerAllChatLogDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QuerAllChatLogDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllChatLogDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllChatLogDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 99, description: '对话的用户id', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllChatLogDto.prototype, "userId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '您好', description: '用户询问的问题', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerAllChatLogDto.prototype, "prompt", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'user', description: '身份', required: false }), - __metadata("design:type", String) -], QuerAllChatLogDto.prototype, "role", void 0); -exports.QuerAllChatLogDto = QuerAllChatLogDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/queryAllDrawLog.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/queryAllDrawLog.dto.js deleted file mode 100644 index f46883b..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/queryAllDrawLog.dto.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QuerAllDrawLogDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QuerAllDrawLogDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllDrawLogDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllDrawLogDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '是否推荐0: 默认 1: 推荐', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllDrawLogDto.prototype, "rec", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 99, description: '生成图片的用户id', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllDrawLogDto.prototype, "userId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'DALL-E2', description: '生成图片使用的模型', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerAllDrawLogDto.prototype, "model", void 0); -exports.QuerAllDrawLogDto = QuerAllDrawLogDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/queryByAppId.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/queryByAppId.dto.js deleted file mode 100644 index 6adf4f5..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/queryByAppId.dto.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryByAppIdDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QueryByAppIdDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '应用Id', required: true }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryByAppIdDto.prototype, "appId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryByAppIdDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryByAppIdDto.prototype, "size", void 0); -exports.QueryByAppIdDto = QueryByAppIdDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/queryMyChatLog.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/queryMyChatLog.dto.js deleted file mode 100644 index 76c0df4..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/queryMyChatLog.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QuerMyChatLogDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QuerMyChatLogDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'mj', description: '使用的模型', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerMyChatLogDto.prototype, "model", void 0); -exports.QuerMyChatLogDto = QuerMyChatLogDto; diff --git a/AIWebQuickDeploy/dist/modules/chatLog/dto/recDrawImg.dto.js b/AIWebQuickDeploy/dist/modules/chatLog/dto/recDrawImg.dto.js deleted file mode 100644 index ec93b2d..0000000 --- a/AIWebQuickDeploy/dist/modules/chatLog/dto/recDrawImg.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.recDrawImgDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class recDrawImgDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '推荐图片的id' }), - __metadata("design:type", Number) -], recDrawImgDto.prototype, "id", void 0); -exports.recDrawImgDto = recDrawImgDto; diff --git a/AIWebQuickDeploy/dist/modules/crami/crami.controller.js b/AIWebQuickDeploy/dist/modules/crami/crami.controller.js deleted file mode 100644 index 46a10c2..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/crami.controller.js +++ /dev/null @@ -1,168 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CramiController = void 0; -const crami_service_1 = require("./crami.service"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const createPackage_dto_1 = require("./dto/createPackage.dto"); -const updatePackage_dto_1 = require("./dto/updatePackage.dto"); -const createCrami_dto_1 = require("./dto/createCrami.dto"); -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const useCrami_dto_1 = require("./dto/useCrami.dto"); -const queryAllPackage_dto_1 = require("./dto/queryAllPackage.dto"); -const deletePackage_dto_1 = require("./dto/deletePackage.dto"); -const queryAllCrami_dto_1 = require("./dto/queryAllCrami.dto"); -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const batchDelCrami_dto_1 = require("./dto/batchDelCrami.dto"); -let CramiController = class CramiController { - constructor(cramiService) { - this.cramiService = cramiService; - } - async queryOnePackage(id) { - return this.cramiService.queryOnePackage(id); - } - async queryAllPackage(query) { - return this.cramiService.queryAllPackage(query); - } - async createPackage(body) { - return this.cramiService.createPackage(body); - } - async updatePackage(body) { - return this.cramiService.updatePackage(body); - } - async delPackage(body) { - return this.cramiService.delPackage(body); - } - async createCrami(body) { - return this.cramiService.createCrami(body); - } - async useCrami(req, body) { - return this.cramiService.useCrami(req, body); - } - async queryAllCrami(params, req) { - return this.cramiService.queryAllCrami(params, req); - } - async delCrami(id) { - return this.cramiService.delCrami(id); - } - async batchDelCrami(body) { - return this.cramiService.batchDelCrami(body); - } -}; -__decorate([ - (0, common_1.Get)('queryOnePackage'), - (0, swagger_1.ApiOperation)({ summary: '查询单个套餐' }), - __param(0, (0, common_1.Query)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "queryOnePackage", null); -__decorate([ - (0, common_1.Get)('queryAllPackage'), - (0, swagger_1.ApiOperation)({ summary: '查询所有套餐' }), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryAllPackage_dto_1.QuerAllPackageDto]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "queryAllPackage", null); -__decorate([ - (0, common_1.Post)('createPackage'), - (0, swagger_1.ApiOperation)({ summary: '创建套餐' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [createPackage_dto_1.CreatePackageDto]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "createPackage", null); -__decorate([ - (0, common_1.Post)('updatePackage'), - (0, swagger_1.ApiOperation)({ summary: '更新套餐' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [updatePackage_dto_1.UpdatePackageDto]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "updatePackage", null); -__decorate([ - (0, common_1.Post)('delPackage'), - (0, swagger_1.ApiOperation)({ summary: '删除套餐' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [deletePackage_dto_1.DeletePackageDto]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "delPackage", null); -__decorate([ - (0, common_1.Post)('createCrami'), - (0, swagger_1.ApiOperation)({ summary: '生成卡密' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [createCrami_dto_1.CreatCramiDto]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "createCrami", null); -__decorate([ - (0, common_1.Post)('useCrami'), - (0, swagger_1.ApiOperation)({ summary: '使用卡密' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, useCrami_dto_1.UseCramiDto]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "useCrami", null); -__decorate([ - (0, common_1.Get)('queryAllCrami'), - (0, swagger_1.ApiOperation)({ summary: '查询所有卡密' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Query)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryAllCrami_dto_1.QuerAllCramiDto, Object]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "queryAllCrami", null); -__decorate([ - (0, common_1.Post)('delCrami'), - (0, swagger_1.ApiOperation)({ summary: '删除卡密' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)('id')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Number]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "delCrami", null); -__decorate([ - (0, common_1.Post)('batchDelCrami'), - (0, swagger_1.ApiOperation)({ summary: '批量删除卡密' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [batchDelCrami_dto_1.BatchDelCramiDto]), - __metadata("design:returntype", Promise) -], CramiController.prototype, "batchDelCrami", null); -CramiController = __decorate([ - (0, swagger_1.ApiTags)('Crami'), - (0, common_1.Controller)('crami'), - __metadata("design:paramtypes", [crami_service_1.CramiService]) -], CramiController); -exports.CramiController = CramiController; diff --git a/AIWebQuickDeploy/dist/modules/crami/crami.entity.js b/AIWebQuickDeploy/dist/modules/crami/crami.entity.js deleted file mode 100644 index 0461757..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/crami.entity.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CramiEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let CramiEntity = class CramiEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ unique: true, comment: '存储卡密CDK编码', length: 50 }), - __metadata("design:type", String) -], CramiEntity.prototype, "code", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密CDK类型:1: 普通 | 2: 单人可使用一次 ', default: 1 }), - __metadata("design:type", Number) -], CramiEntity.prototype, "cramiType", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密CDK类型: 默认套餐类型 | 不填就是自定义类型', nullable: true }), - __metadata("design:type", Number) -], CramiEntity.prototype, "packageId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密CDK状态,如已使用、未使用等', default: 0 }), - __metadata("design:type", Number) -], CramiEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密使用账户用户ID信息', nullable: true }), - __metadata("design:type", Number) -], CramiEntity.prototype, "useId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密有效期天数、从生成创建的时候开始计算,设为0则不限时间', default: 0 }), - __metadata("design:type", Number) -], CramiEntity.prototype, "days", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密模型3额度', nullable: true }), - __metadata("design:type", Number) -], CramiEntity.prototype, "model3Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密模型4额度', nullable: true }), - __metadata("design:type", Number) -], CramiEntity.prototype, "model4Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密MJ绘画额度', nullable: true }), - __metadata("design:type", Number) -], CramiEntity.prototype, "drawMjCount", void 0); -CramiEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'crami' }) -], CramiEntity); -exports.CramiEntity = CramiEntity; diff --git a/AIWebQuickDeploy/dist/modules/crami/crami.module.js b/AIWebQuickDeploy/dist/modules/crami/crami.module.js deleted file mode 100644 index 069d358..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/crami.module.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CramiModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const config_entity_1 = require("../globalConfig/config.entity"); -const user_entity_1 = require("../user/user.entity"); -const accountLog_entity_1 = require("../userBalance/accountLog.entity"); -const balance_entity_1 = require("../userBalance/balance.entity"); -const fingerprint_entity_1 = require("../userBalance/fingerprint.entity"); -const userBalance_entity_1 = require("../userBalance/userBalance.entity"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -const crami_controller_1 = require("./crami.controller"); -const crami_entity_1 = require("./crami.entity"); -const crami_service_1 = require("./crami.service"); -const cramiPackage_entity_1 = require("./cramiPackage.entity"); -let CramiModule = class CramiModule { -}; -CramiModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([ - crami_entity_1.CramiEntity, - cramiPackage_entity_1.CramiPackageEntity, - user_entity_1.UserEntity, - balance_entity_1.BalanceEntity, - accountLog_entity_1.AccountLogEntity, - config_entity_1.ConfigEntity, - userBalance_entity_1.UserBalanceEntity, - fingerprint_entity_1.FingerprintLogEntity, - chatLog_entity_1.ChatLogEntity, - chatGroup_entity_1.ChatGroupEntity, - ]), - ], - providers: [crami_service_1.CramiService, userBalance_service_1.UserBalanceService], - controllers: [crami_controller_1.CramiController], - exports: [crami_service_1.CramiService], - }) -], CramiModule); -exports.CramiModule = CramiModule; diff --git a/AIWebQuickDeploy/dist/modules/crami/crami.service.js b/AIWebQuickDeploy/dist/modules/crami/crami.service.js deleted file mode 100644 index 151ede4..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/crami.service.js +++ /dev/null @@ -1,214 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CramiService = void 0; -const common_1 = require("@nestjs/common"); -const crami_entity_1 = require("./crami.entity"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const cramiPackage_entity_1 = require("./cramiPackage.entity"); -const utils_1 = require("../../common/utils"); -const user_entity_1 = require("../user/user.entity"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -const balance_constant_1 = require("../../common/constants/balance.constant"); -let CramiService = class CramiService { - constructor(cramiEntity, cramiPackageEntity, userEntity, userBalanceService) { - this.cramiEntity = cramiEntity; - this.cramiPackageEntity = cramiPackageEntity; - this.userEntity = userEntity; - this.userBalanceService = userBalanceService; - } - async queryOnePackage(id) { - return await this.cramiPackageEntity.findOne({ where: { id } }); - } - async queryAllPackage(query) { - try { - const { page = 1, size = 10, name, status, type } = query; - const where = {}; - name && Object.assign(where, { name: (0, typeorm_2.Like)(`%${name}%`) }); - status && Object.assign(where, { status }); - if (type) { - if (type > 0) { - Object.assign(where, { days: (0, typeorm_2.MoreThan)(0) }); - } - else { - Object.assign(where, { days: (0, typeorm_2.LessThanOrEqual)(0) }); - } - } - const [rows, count] = await this.cramiPackageEntity.findAndCount({ - skip: (page - 1) * size, - take: size, - where, - order: { order: 'DESC' }, - }); - return { rows, count }; - } - catch (error) { - console.log('error: ', error); - } - } - async createPackage(body) { - const { name, weight } = body; - const p = await this.cramiPackageEntity.findOne({ where: [{ name }, { weight }] }); - if (p) { - throw new common_1.HttpException('套餐名称或套餐等级重复、请检查!', common_1.HttpStatus.BAD_REQUEST); - } - try { - return await this.cramiPackageEntity.save(body); - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException(error, common_1.HttpStatus.BAD_REQUEST); - } - } - async updatePackage(body) { - const { id, name, weight } = body; - const op = await this.cramiPackageEntity.findOne({ where: { id } }); - if (!op) { - throw new common_1.HttpException('当前套餐不存在、请检查你的输入参数!', common_1.HttpStatus.BAD_REQUEST); - } - const count = await this.cramiPackageEntity.count({ - where: [ - { name, id: (0, typeorm_2.Not)(id) }, - { weight, id: (0, typeorm_2.Not)(id) }, - ], - }); - if (count) { - throw new common_1.HttpException('套餐名称或套餐等级重复、请检查!', common_1.HttpStatus.BAD_REQUEST); - } - const res = await this.cramiPackageEntity.update({ id }, body); - if (res.affected > 0) { - return '更新套餐成功!'; - } - else { - throw new common_1.HttpException('更新套餐失败、请重试!', common_1.HttpStatus.BAD_REQUEST); - } - } - async delPackage(body) { - const { id } = body; - const count = await this.cramiEntity.count({ where: { packageId: id } }); - if (count) { - throw new common_1.HttpException('当前套餐下存在卡密、请先删除卡密后才可删除套餐!', common_1.HttpStatus.BAD_REQUEST); - } - return await this.cramiPackageEntity.delete({ id }); - } - async createCrami(body) { - const { packageId, count = 1 } = body; - if (packageId) { - const pkg = await this.cramiPackageEntity.findOne({ where: { id: packageId } }); - if (!pkg) { - throw new common_1.HttpException('当前套餐不存在、请确认您选择的套餐是否存在!', common_1.HttpStatus.BAD_REQUEST); - } - const { days = -1, model3Count = 0, model4Count = 0, drawMjCount = 0 } = pkg; - const baseCrami = { packageId, days, model3Count, model4Count, drawMjCount }; - return await this.generateCrami(baseCrami, count); - } - if (!packageId) { - const { model3Count = 0, model4Count = 0, drawMjCount = 0 } = body; - if ([model3Count, model4Count, drawMjCount].every((v) => !v)) { - throw new common_1.HttpException('自定义卡密必须至少一项余额不为0️零!', common_1.HttpStatus.BAD_REQUEST); - } - const baseCrami = { days: -1, model3Count, model4Count, drawMjCount }; - return await this.generateCrami(baseCrami, count); - } - } - async generateCrami(cramiInfo, count) { - const cramiList = []; - for (let i = 0; i < count; i++) { - const code = (0, utils_1.generateCramiCode)(); - const crami = this.cramiEntity.create(Object.assign(Object.assign({}, cramiInfo), { code })); - cramiList.push(crami); - } - return await this.cramiEntity.save(cramiList); - } - async useCrami(req, body) { - const { id } = req.user; - const crami = await this.cramiEntity.findOne({ where: { code: body.code } }); - if (!crami) { - throw new common_1.HttpException('当前卡密不存在、请确认您输入的卡密是否正确!', common_1.HttpStatus.BAD_REQUEST); - } - const { status, days = -1, model3Count = 0, model4Count = 0, drawMjCount = 0, packageId } = crami; - if (status === 1) { - throw new common_1.HttpException('当前卡密已被使用、请确认您输入的卡密是否正确!', common_1.HttpStatus.BAD_REQUEST); - } - const balanceInfo = { model3Count, model4Count, drawMjCount, packageId }; - await this.userBalanceService.addBalanceToUser(id, Object.assign({}, balanceInfo), days); - await this.userBalanceService.saveRecordRechargeLog({ - userId: id, - rechargeType: balance_constant_1.RechargeType.PACKAGE_GIFT, - model3Count, - model4Count, - drawMjCount, - days, - }); - await this.cramiEntity.update({ code: body.code }, { useId: id, status: 1 }); - return '使用卡密成功'; - } - async queryAllCrami(params, req) { - const { page = 1, size = 10, status, useId } = params; - const where = {}; - status && Object.assign(where, { status }); - useId && Object.assign(where, { useId }); - const [rows, count] = await this.cramiEntity.findAndCount({ - skip: (page - 1) * size, - take: size, - order: { createdAt: 'DESC' }, - where, - }); - const userIds = rows.map((t) => t.useId); - const packageIds = rows.map((t) => t.packageId); - const userInfos = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(userIds) } }); - const packageInfos = await this.cramiPackageEntity.find({ where: { id: (0, typeorm_2.In)(packageIds) } }); - rows.forEach((t) => { - var _a, _b, _c; - t.username = (_a = userInfos.find((u) => u.id === t.useId)) === null || _a === void 0 ? void 0 : _a.username; - t.email = (_b = userInfos.find((u) => u.id === t.useId)) === null || _b === void 0 ? void 0 : _b.email; - t.packageName = (_c = packageInfos.find((p) => p.id === t.packageId)) === null || _c === void 0 ? void 0 : _c.name; - }); - req.user.role !== 'super' && rows.forEach((t) => (t.email = (0, utils_1.maskEmail)(t.email))); - req.user.role !== 'super' && rows.forEach((t) => (t.code = (0, utils_1.maskCrami)(t.code))); - return { rows, count }; - } - async delCrami(id) { - const c = await this.cramiEntity.findOne({ where: { id } }); - if (!c) { - throw new common_1.HttpException('当前卡密不存在、请确认您要删除的卡密是否存在!', common_1.HttpStatus.BAD_REQUEST); - } - if (c.status === 1) { - throw new common_1.HttpException('当前卡密已被使用、已使用的卡密禁止删除!', common_1.HttpStatus.BAD_REQUEST); - } - return await this.cramiEntity.delete({ id }); - } - async batchDelCrami(body) { - const { ids } = body; - const res = await this.cramiEntity.delete(ids); - if (res.affected > 0) { - return '删除卡密成功!'; - } - else { - throw new common_1.HttpException('删除卡密失败、请重试!', common_1.HttpStatus.BAD_REQUEST); - } - } -}; -CramiService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(crami_entity_1.CramiEntity)), - __param(1, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)), - __param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - userBalance_service_1.UserBalanceService]) -], CramiService); -exports.CramiService = CramiService; diff --git a/AIWebQuickDeploy/dist/modules/crami/cramiPackage.entity.js b/AIWebQuickDeploy/dist/modules/crami/cramiPackage.entity.js deleted file mode 100644 index 524e856..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/cramiPackage.entity.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CramiPackageEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let CramiPackageEntity = class CramiPackageEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ unique: true, comment: '套餐名称' }), - __metadata("design:type", String) -], CramiPackageEntity.prototype, "name", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐介绍详细信息' }), - __metadata("design:type", String) -], CramiPackageEntity.prototype, "des", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐封面图片', nullable: true }), - __metadata("design:type", String) -], CramiPackageEntity.prototype, "coverImg", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐价格¥', type: 'decimal', scale: 2, precision: 10 }), - __metadata("design:type", Number) -], CramiPackageEntity.prototype, "price", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐排序、数字越大越靠前', default: 100 }), - __metadata("design:type", Number) -], CramiPackageEntity.prototype, "order", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐是否启用中 0:禁用 1:启用', default: 1 }), - __metadata("design:type", Number) -], CramiPackageEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐权重、数字越大表示套餐等级越高越贵', unique: true }), - __metadata("design:type", Number) -], CramiPackageEntity.prototype, "weight", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '卡密有效期天数、从使用的时候开始计算,设为-1则不限时间', default: 0 }), - __metadata("design:type", Number) -], CramiPackageEntity.prototype, "days", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐包含的模型3数量', default: 0, nullable: true }), - __metadata("design:type", Number) -], CramiPackageEntity.prototype, "model3Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐包含的模型4数量', default: 0, nullable: true }), - __metadata("design:type", Number) -], CramiPackageEntity.prototype, "model4Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐包含的MJ绘画数量', default: 0, nullable: true }), - __metadata("design:type", Number) -], CramiPackageEntity.prototype, "drawMjCount", void 0); -CramiPackageEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'crami_package' }) -], CramiPackageEntity); -exports.CramiPackageEntity = CramiPackageEntity; diff --git a/AIWebQuickDeploy/dist/modules/crami/dto/batchDelCrami.dto.js b/AIWebQuickDeploy/dist/modules/crami/dto/batchDelCrami.dto.js deleted file mode 100644 index 6df2e51..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/dto/batchDelCrami.dto.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BatchDelCramiDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class BatchDelCramiDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要删除的套餐Ids', required: true }), - (0, class_validator_1.IsArray)({ message: '参数类型为数组' }), - (0, class_validator_1.ArrayMinSize)(1, { message: '最短长度为1' }), - __metadata("design:type", Array) -], BatchDelCramiDto.prototype, "ids", void 0); -exports.BatchDelCramiDto = BatchDelCramiDto; diff --git a/AIWebQuickDeploy/dist/modules/crami/dto/createCrami.dto.js b/AIWebQuickDeploy/dist/modules/crami/dto/createCrami.dto.js deleted file mode 100644 index 68b44d5..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/dto/createCrami.dto.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreatCramiDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class CreatCramiDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '套餐类型', required: true }), - (0, class_validator_1.IsNumber)({}, { message: '套餐类型必须是number' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreatCramiDto.prototype, "packageId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '单次生成卡密数量' }), - (0, class_validator_1.IsNumber)({}, { message: '创建卡密的张数数量' }), - (0, class_validator_1.Max)(50, { message: '单次创建卡密的张数数量不能超过50张' }), - (0, class_validator_1.Min)(1, { message: '单次创建卡密的张数数量不能少于1张' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreatCramiDto.prototype, "count", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 0, description: '卡密携带模型3额度' }), - (0, class_validator_1.IsNumber)({}, { message: '卡密携带的余额必须是number' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreatCramiDto.prototype, "model3Count", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 100, description: '卡密携带模型4额度' }), - (0, class_validator_1.IsNumber)({}, { message: '卡密携带额度类型必须是number' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreatCramiDto.prototype, "model4Count", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 3, description: '卡密携带MJ绘画额度' }), - (0, class_validator_1.IsNumber)({}, { message: '卡密携带额度类型必须是number' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreatCramiDto.prototype, "drawMjCount", void 0); -exports.CreatCramiDto = CreatCramiDto; diff --git a/AIWebQuickDeploy/dist/modules/crami/dto/createPackage.dto.js b/AIWebQuickDeploy/dist/modules/crami/dto/createPackage.dto.js deleted file mode 100644 index f4743af..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/dto/createPackage.dto.js +++ /dev/null @@ -1,81 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.CreatePackageDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -const class_transformer_1 = require("class-transformer"); -class CreatePackageDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '基础套餐100次卡', description: '套餐名称', required: true }), - (0, class_validator_1.IsDefined)({ message: '套餐名称是必传参数' }), - __metadata("design:type", String) -], CreatePackageDto.prototype, "name", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '这是一个100次对话余额的套餐,我们将为您额外赠送3次绘画余额,活动期间,我们将在套餐基础上额外赠送您十次对话余额和1次绘画余额', - description: '套餐详情描述', - required: true, - }), - (0, class_validator_1.IsDefined)({ message: '套餐描述是必传参数' }), - __metadata("design:type", String) -], CreatePackageDto.prototype, "des", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 7, default: 0, description: '套餐等级设置' }), - (0, class_validator_1.IsNumber)({}, { message: '套餐等级权重必须为数字' }), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "weight", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '套餐扣费类型 1:按次数 2:按Token', required: true }), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "deductionType", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'https://xxxx.png', description: '套餐封面图片' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], CreatePackageDto.prototype, "coverImg", void 0); -__decorate([ - (0, class_transformer_1.Transform)(({ value }) => parseFloat(value)), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "price", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 100, description: '套餐排序、数字越大越靠前' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "order", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '套餐状态 0:禁用 1:启用', required: true }), - (0, class_validator_1.IsNumber)({}, { message: '套餐状态必须是Number' }), - (0, class_validator_1.IsIn)([0, 1], { message: '套餐状态错误' }), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 7, default: 0, description: '套餐有效期 -1为永久不过期' }), - (0, class_validator_1.IsNumber)({}, { message: '套餐有效期天数类型必须是number' }), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "days", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1000, default: 0, description: '模型3对话次数' }), - (0, class_validator_1.IsNumber)({}, { message: '模型3对话次数必须是number类型' }), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "model3Count", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, default: 0, description: '模型4对话次数' }), - (0, class_validator_1.IsNumber)({}, { message: '模型4对话次数必须是number类型' }), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "model4Count", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, default: 0, description: 'MJ绘画次数' }), - (0, class_validator_1.IsNumber)({}, { message: 'MJ绘画次数必须是number类型' }), - __metadata("design:type", Number) -], CreatePackageDto.prototype, "drawMjCount", void 0); -exports.CreatePackageDto = CreatePackageDto; diff --git a/AIWebQuickDeploy/dist/modules/crami/dto/deletePackage.dto.js b/AIWebQuickDeploy/dist/modules/crami/dto/deletePackage.dto.js deleted file mode 100644 index 5a8e423..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/dto/deletePackage.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DeletePackageDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_validator_1 = require("class-validator"); -class DeletePackageDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要修改的套餐Id', required: true }), - (0, class_validator_1.IsNumber)({}, { message: '套餐ID必须是Number' }), - __metadata("design:type", Number) -], DeletePackageDto.prototype, "id", void 0); -exports.DeletePackageDto = DeletePackageDto; diff --git a/AIWebQuickDeploy/dist/modules/crami/dto/queryAllCrami.dto.js b/AIWebQuickDeploy/dist/modules/crami/dto/queryAllCrami.dto.js deleted file mode 100644 index 961961d..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/dto/queryAllCrami.dto.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QuerAllCramiDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QuerAllCramiDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllCramiDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllCramiDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '使用人Id', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllCramiDto.prototype, "useId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '卡密状态 0:未使用 1:已消费', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllCramiDto.prototype, "status", void 0); -exports.QuerAllCramiDto = QuerAllCramiDto; diff --git a/AIWebQuickDeploy/dist/modules/crami/dto/queryAllPackage.dto.js b/AIWebQuickDeploy/dist/modules/crami/dto/queryAllPackage.dto.js deleted file mode 100644 index 621c6ae..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/dto/queryAllPackage.dto.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QuerAllPackageDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QuerAllPackageDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllPackageDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllPackageDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'name', description: '套餐名称', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerAllPackageDto.prototype, "name", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '套餐状态 0:禁用 1:启用', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllPackageDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '套餐类型 -1:永久套餐 1:限时套餐', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllPackageDto.prototype, "type", void 0); -exports.QuerAllPackageDto = QuerAllPackageDto; diff --git a/AIWebQuickDeploy/dist/modules/crami/dto/updatePackage.dto.js b/AIWebQuickDeploy/dist/modules/crami/dto/updatePackage.dto.js deleted file mode 100644 index f948d67..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/dto/updatePackage.dto.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdatePackageDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -const createPackage_dto_1 = require("./createPackage.dto"); -class UpdatePackageDto extends createPackage_dto_1.CreatePackageDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要修改的套餐Id', required: true }), - (0, class_validator_1.IsNumber)({}, { message: '套餐ID必须是Number' }), - __metadata("design:type", Number) -], UpdatePackageDto.prototype, "id", void 0); -exports.UpdatePackageDto = UpdatePackageDto; diff --git a/AIWebQuickDeploy/dist/modules/crami/dto/useCrami.dto.js b/AIWebQuickDeploy/dist/modules/crami/dto/useCrami.dto.js deleted file mode 100644 index 60422a8..0000000 --- a/AIWebQuickDeploy/dist/modules/crami/dto/useCrami.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UseCramiDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class UseCramiDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'ffar684rv254fs4f', description: '卡密信息', required: true }), - (0, class_validator_1.IsDefined)({ message: '套餐名称是必传参数' }), - __metadata("design:type", String) -], UseCramiDto.prototype, "code", void 0); -exports.UseCramiDto = UseCramiDto; diff --git a/AIWebQuickDeploy/dist/modules/database/database.module.js b/AIWebQuickDeploy/dist/modules/database/database.module.js deleted file mode 100644 index 344ec19..0000000 --- a/AIWebQuickDeploy/dist/modules/database/database.module.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var DatabaseModule_1; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DatabaseModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const database_service_1 = require("./database.service"); -let DatabaseModule = DatabaseModule_1 = class DatabaseModule { - constructor(connection) { - this.connection = connection; - this.logger = new common_1.Logger(DatabaseModule_1.name); - } - onModuleInit() { - const { database } = this.connection.options; - this.logger.log(`Your MySQL database named ${database} has been connected`); - } -}; -DatabaseModule = DatabaseModule_1 = __decorate([ - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forRootAsync({ - useFactory: () => ({ - type: 'mysql', - host: process.env.DB_HOST, - port: parseInt(process.env.DB_PORT, 10), - username: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_DATABASE, - entities: [__dirname + '/../**/*.entity{.ts,.js}'], - logging: false, - charset: 'utf8mb4', - timezone: '+08:00', - }), - }), - ], - providers: [database_service_1.DatabaseService], - }), - __metadata("design:paramtypes", [typeorm_2.DataSource]) -], DatabaseModule); -exports.DatabaseModule = DatabaseModule; diff --git a/AIWebQuickDeploy/dist/modules/database/database.service.js b/AIWebQuickDeploy/dist/modules/database/database.service.js deleted file mode 100644 index e1b3a1b..0000000 --- a/AIWebQuickDeploy/dist/modules/database/database.service.js +++ /dev/null @@ -1,198 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DatabaseService = void 0; -const common_1 = require("@nestjs/common"); -const bcrypt = require("bcryptjs"); -const typeorm_1 = require("typeorm"); -let DatabaseService = class DatabaseService { - constructor(connection) { - this.connection = connection; - } - async onModuleInit() { - await this.checkSuperAdmin(); - await this.checkSiteBaseConfig(); - } - async checkSuperAdmin() { - const user = await this.connection.query(`SELECT * FROM users WHERE role = 'super'`); - if (!user || user.length === 0) { - const superPassword = bcrypt.hashSync('123456', 10); - const adminPassword = bcrypt.hashSync('123456', 10); - const superEmail = 'super'; - const adminEmail = 'admin'; - const superUserinfo = { - username: 'super', - password: superPassword, - status: 1, - email: superEmail, - sex: 1, - role: 'super', - }; - const adminUserinfo = { - username: 'admin', - password: adminPassword, - status: 0, - email: adminEmail, - sex: 1, - role: 'admin', - }; - await this.createDefaultUser(superUserinfo); - await this.createDefaultUser(adminUserinfo); - } - } - async createDefaultUser(userInfo) { - try { - const { username, password, status, email, role } = userInfo; - const user = await this.connection.query(`INSERT INTO users (username, password, status, email, role) VALUES ('${username}', '${password}', '${status}', '${email}', '${role}')`); - const userId = user.insertId; - await this.connection.query(`INSERT INTO balance (userId, balance, usesLeft, paintCount) VALUES ('${userId}', 0, 1000, 100)`); - common_1.Logger.log(`初始化创建${role}用户成功、用户名为[${username}]、初始密码为[${username === 'super' ? 'super' : '123456'}] ==============> 请注意查阅`, 'DatabaseService'); - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('创建默认超级管理员失败!', common_1.HttpStatus.INTERNAL_SERVER_ERROR); - } - } - async checkSiteBaseConfig() { - const keys = ['siteName', 'robotAvatar']; - const result = await this.connection.query(` - SELECT COUNT(*) AS count FROM config WHERE \`configKey\` IN (${keys - .map((k) => `'${k}'`) - .join(',')}) -`); - const count = parseInt(result[0].count); - if (count === 0) { - await this.createBaseSiteConfig(); - } - } - async createBaseSiteConfig() { - try { - const code = ``; - const noticeInfo = ` -#### AIWeb 欢迎您 - - 欢迎使用 AIWeb - - 初始管理员账号密码 super 123456 【前台后台登录都可以修改】 - - 初始预览账号密码 admin 123456 【为后台查看账号 仅可查看部分非敏感数据】 -`; - const defaultConfig = [ - { configKey: 'siteName', configVal: '', public: 1, encry: 0 }, - { configKey: 'robotAvatar', configVal: '', public: 1, encry: 0 }, - { - configKey: 'userDefautlAvatar', - configVal: '', - public: 0, - encry: 0, - }, - { configKey: 'baiduCode', configVal: code, public: 1, encry: 0 }, - { configKey: 'baiduSiteId', configVal: '', public: 0, encry: 0 }, - { - configKey: 'baiduToken', - configVal: '', - public: 0, - encry: 0, - }, - { configKey: 'buyCramiAddress', configVal: '', public: 1, encry: 0 }, - { - configKey: 'openaiBaseUrl', - configVal: 'https://api.lightai.io', - public: 0, - encry: 0, - }, - { configKey: 'openaiTimeout', configVal: '300', public: 0, encry: 0 }, - { configKey: 'openaiBaseKey', configVal: 'sk-', public: 0, encry: 0 }, - { - configKey: 'mjTranslatePrompt', - configVal: `Translate any given phrase from any language into English. For instance, when I input '{可爱的熊猫}', you should output '{cute panda}', with no period at the end.`, - public: 0, - encry: 0, - }, - { configKey: 'noticeInfo', configVal: noticeInfo, public: 1, encry: 0 }, - { - configKey: 'registerSendStatus', - configVal: '1', - public: 1, - encry: 0, - }, - { - configKey: 'registerSendModel3Count', - configVal: '30', - public: 1, - encry: 0, - }, - { - configKey: 'registerSendModel4Count', - configVal: '3', - public: 1, - encry: 0, - }, - { - configKey: 'registerSendDrawMjCount', - configVal: '3', - public: 1, - encry: 0, - }, - { - configKey: 'firstRegisterSendStatus', - configVal: '1', - public: 1, - encry: 0, - }, - { - configKey: 'firstRegisterSendRank', - configVal: '500', - public: 1, - encry: 0, - }, - { - configKey: 'firstRregisterSendModel3Count', - configVal: '10', - public: 1, - encry: 0, - }, - { - configKey: 'firstRregisterSendModel4Count', - configVal: '10', - public: 1, - encry: 0, - }, - { - configKey: 'firstRregisterSendDrawMjCount', - configVal: '10', - public: 1, - encry: 0, - }, - { configKey: 'isVerifyEmail', configVal: '1', public: 1, encry: 0 }, - { configKey: 'model3Name', configVal: '普通积分', public: 1, encry: 0 }, - { configKey: 'model4Name', configVal: '高级积分', public: 1, encry: 0 }, - { configKey: 'drawMjName', configVal: '绘画积分', public: 1, encry: 0 }, - { - configKey: 'drawingStyles', - configVal: '油画风格,像素风格,赛博朋克,动漫,日系,超现实主义,油画,卡通,插画,海报,写实,扁平,中国风,水墨画,唯美二次元,印象派,炫彩插画,像素艺术,艺术创想,色彩主义,数字艺术', - public: 1, - encry: 0, - }, - ]; - const res = await this.connection.query(`INSERT INTO config (configKey, configVal, public, encry) VALUES ${defaultConfig - .map((d) => `('${d.configKey}', '${d.configVal.replace(/'/g, "\\'")}', '${d.public}', '${d.encry}')`) - .join(', ')}`); - common_1.Logger.log(`初始化网站配置信息成功、如您需要修改网站配置信息,请前往管理系统系统配置设置 ==============> 请注意查阅`, 'DatabaseService'); - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('创建默认网站配置失败!', common_1.HttpStatus.INTERNAL_SERVER_ERROR); - } - } -}; -DatabaseService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [typeorm_1.Connection]) -], DatabaseService); -exports.DatabaseService = DatabaseService; diff --git a/AIWebQuickDeploy/dist/modules/database/initDatabase.js b/AIWebQuickDeploy/dist/modules/database/initDatabase.js deleted file mode 100644 index df0a452..0000000 --- a/AIWebQuickDeploy/dist/modules/database/initDatabase.js +++ /dev/null @@ -1,95 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.initDatabase = void 0; -const common_1 = require("@nestjs/common"); -const dotenv_1 = require("dotenv"); -const mysql = require("mysql2/promise"); -const typeorm_1 = require("typeorm"); -(0, dotenv_1.config)(); -const dataSourceOptions = { - type: 'mysql', - port: parseInt(process.env.DB_PORT, 10), - host: process.env.DB_HOST, - username: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_DATABASE, - entities: [__dirname + '/../**/*.entity{.ts,.js}'], - logging: false, - synchronize: true, - charset: 'utf8mb4', - timezone: '+08:00', -}; -async function validateDatabase() { - const conn = await mysql.createConnection({ - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - port: parseInt(process.env.DB_PORT, 10), - }); - try { - const [rows] = (await conn.execute(`SHOW DATABASES LIKE '${process.env.DB_DATABASE}'`)); - if (Array.isArray(rows) && rows.length === 0) { - await conn.execute(`CREATE DATABASE ${process.env.DB_DATABASE}`); - common_1.Logger.log(`数据库创建成功[${process.env.DB_DATABASE}]`, 'Database'); - } - else { - common_1.Logger.log(`数据库已存在[${process.env.DB_DATABASE}]`, 'Database'); - } - } - catch (error) { - common_1.Logger.error('Error during database validation:', error, 'Database'); - } - finally { - await conn.end(); - } -} -async function updateColumnType() { - const conn = await mysql.createConnection({ - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - port: parseInt(process.env.DB_PORT, 10), - database: process.env.DB_DATABASE, - }); - async function checkAndUpdateColumnType(tableName, columnName) { - try { - const [rows] = (await conn.execute(`SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ? AND COLUMN_NAME = ?`, [tableName, columnName])); - if (rows.length > 0 && rows[0].DATA_TYPE !== 'text') { - await conn.execute(`ALTER TABLE ?? MODIFY COLUMN ?? TEXT`, [ - tableName, - columnName, - ]); - common_1.Logger.log(`Column ${columnName} type updated to TEXT in table ${tableName}`, 'Database'); - } - else { - common_1.Logger.log(`Column ${columnName} is already of type TEXT in table ${tableName}`, 'Database'); - } - } - catch (error) { - common_1.Logger.error(`Error updating column type in table ${tableName}:`, error); - } - } - try { - await checkAndUpdateColumnType('config', 'configVal'); - await checkAndUpdateColumnType('app', 'coverImg'); - } - finally { - await conn.end(); - } -} -async function initDatabase() { - await validateDatabase(); - await updateColumnType(); - const dataSource = new typeorm_1.DataSource(dataSourceOptions); - try { - await dataSource.initialize(); - common_1.Logger.log('Database connected and synchronized successfully', 'Database'); - } - catch (error) { - common_1.Logger.error('Error during TypeORM initialization:', error); - } - finally { - await dataSource.destroy(); - } -} -exports.initDatabase = initDatabase; diff --git a/AIWebQuickDeploy/dist/modules/globalConfig/config.entity.js b/AIWebQuickDeploy/dist/modules/globalConfig/config.entity.js deleted file mode 100644 index 6ce11bd..0000000 --- a/AIWebQuickDeploy/dist/modules/globalConfig/config.entity.js +++ /dev/null @@ -1,46 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ConfigEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let ConfigEntity = class ConfigEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ length: 255, comment: '配置名称', nullable: true }), - __metadata("design:type", String) -], ConfigEntity.prototype, "configKey", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'text', comment: '配置内容', nullable: true }), - __metadata("design:type", String) -], ConfigEntity.prototype, "configVal", void 0); -__decorate([ - (0, typeorm_1.Column)({ - default: 0, - comment: '配置是否公开,公开内容对前端项目展示 0:不公开 1:公开', - }), - __metadata("design:type", Number) -], ConfigEntity.prototype, "public", void 0); -__decorate([ - (0, typeorm_1.Column)({ - default: 0, - comment: '配置是否加密,加密内容仅仅super权限可看 0:不加 1:加', - }), - __metadata("design:type", Number) -], ConfigEntity.prototype, "encry", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 1, comment: '配置状态 0:关闭 1:启用' }), - __metadata("design:type", Number) -], ConfigEntity.prototype, "status", void 0); -ConfigEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'config' }) -], ConfigEntity); -exports.ConfigEntity = ConfigEntity; diff --git a/AIWebQuickDeploy/dist/modules/globalConfig/dto/queryConfig.dto.js b/AIWebQuickDeploy/dist/modules/globalConfig/dto/queryConfig.dto.js deleted file mode 100644 index 9ba5d3a..0000000 --- a/AIWebQuickDeploy/dist/modules/globalConfig/dto/queryConfig.dto.js +++ /dev/null @@ -1,25 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryConfigDto = void 0; -const class_validator_1 = require("class-validator"); -const class_transformer_1 = require("class-transformer"); -const swagger_1 = require("@nestjs/swagger"); -class QueryConfigDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: ['siteName', 'qqNumber'], description: '想要查询的配置key' }), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.ArrayNotEmpty)(), - (0, class_transformer_1.Type)(() => String), - __metadata("design:type", Array) -], QueryConfigDto.prototype, "keys", void 0); -exports.QueryConfigDto = QueryConfigDto; diff --git a/AIWebQuickDeploy/dist/modules/globalConfig/dto/setConfig.dto.js b/AIWebQuickDeploy/dist/modules/globalConfig/dto/setConfig.dto.js deleted file mode 100644 index 72705d0..0000000 --- a/AIWebQuickDeploy/dist/modules/globalConfig/dto/setConfig.dto.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SetConfigDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_transformer_1 = require("class-transformer"); -const class_validator_1 = require("class-validator"); -class SetConfigDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ - example: [{ configKey: 'siteName', configVal: 'AIWeb' }], - description: '设置配置信息', - }), - (0, class_validator_1.IsArray)(), - (0, class_validator_1.ArrayNotEmpty)(), - (0, class_validator_1.ValidateNested)({ each: true }), - (0, class_transformer_1.Type)(() => Object), - __metadata("design:type", Array) -], SetConfigDto.prototype, "settings", void 0); -exports.SetConfigDto = SetConfigDto; diff --git a/AIWebQuickDeploy/dist/modules/globalConfig/dto/setConfigCustom.dto.js b/AIWebQuickDeploy/dist/modules/globalConfig/dto/setConfigCustom.dto.js deleted file mode 100644 index c804b26..0000000 --- a/AIWebQuickDeploy/dist/modules/globalConfig/dto/setConfigCustom.dto.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SetConfigCustomDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -const class_transformer_1 = require("class-transformer"); -const class_validator_1 = require("class-validator"); -class SetConfigCustomDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ - example: { configKey: 'siteName', configVal: 'AIWeb', infoKey: 'AIWeb' }, - description: '设置更新配置信息', - }), - (0, class_validator_1.ValidateNested)({ each: true }), - (0, class_transformer_1.Type)(() => Object), - __metadata("design:type", Object) -], SetConfigCustomDto.prototype, "settings", void 0); -exports.SetConfigCustomDto = SetConfigCustomDto; diff --git a/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.controller.js b/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.controller.js deleted file mode 100644 index 7988802..0000000 --- a/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.controller.js +++ /dev/null @@ -1,95 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GlobalConfigController = void 0; -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const queryConfig_dto_1 = require("./dto/queryConfig.dto"); -const setConfig_dto_1 = require("./dto/setConfig.dto"); -const globalConfig_service_1 = require("./globalConfig.service"); -let GlobalConfigController = class GlobalConfigController { - constructor(globalConfigService) { - this.globalConfigService = globalConfigService; - } - queryAllConfig(req) { - return this.globalConfigService.queryAllConfig(req); - } - queryFrontConfig(query, req) { - return this.globalConfigService.queryFrontConfig(query, req); - } - queryConfig(body, req) { - return this.globalConfigService.queryConfig(body, req); - } - setConfig(body) { - return this.globalConfigService.setConfig(body); - } - queryNotice() { - return this.globalConfigService.queryNotice(); - } -}; -__decorate([ - (0, swagger_1.ApiOperation)({ summary: '查询所有配置' }), - (0, common_1.Get)('queryAll'), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], GlobalConfigController.prototype, "queryAllConfig", null); -__decorate([ - (0, swagger_1.ApiOperation)({ summary: '查询前端网站的所有配置' }), - (0, common_1.Get)('queryFronet'), - __param(0, (0, common_1.Query)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", void 0) -], GlobalConfigController.prototype, "queryFrontConfig", null); -__decorate([ - (0, swagger_1.ApiOperation)({ summary: '查询所有配置' }), - (0, common_1.Post)('query'), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryConfig_dto_1.QueryConfigDto, Object]), - __metadata("design:returntype", void 0) -], GlobalConfigController.prototype, "queryConfig", null); -__decorate([ - (0, swagger_1.ApiOperation)({ summary: '设置配置信息' }), - (0, common_1.Post)('set'), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [setConfig_dto_1.SetConfigDto]), - __metadata("design:returntype", void 0) -], GlobalConfigController.prototype, "setConfig", null); -__decorate([ - (0, swagger_1.ApiOperation)({ summary: '用户端查询公告信息' }), - (0, common_1.Get)('notice'), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], GlobalConfigController.prototype, "queryNotice", null); -GlobalConfigController = __decorate([ - (0, swagger_1.ApiTags)('config'), - (0, common_1.Controller)('config'), - __metadata("design:paramtypes", [globalConfig_service_1.GlobalConfigService]) -], GlobalConfigController); -exports.GlobalConfigController = GlobalConfigController; diff --git a/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.module.js b/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.module.js deleted file mode 100644 index 7ee42ef..0000000 --- a/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.module.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GlobalConfigModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const config_entity_1 = require("./config.entity"); -const globalConfig_controller_1 = require("./globalConfig.controller"); -const globalConfig_service_1 = require("./globalConfig.service"); -let GlobalConfigModule = class GlobalConfigModule { -}; -GlobalConfigModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([config_entity_1.ConfigEntity, chatLog_entity_1.ChatLogEntity])], - providers: [globalConfig_service_1.GlobalConfigService], - controllers: [globalConfig_controller_1.GlobalConfigController], - exports: [globalConfig_service_1.GlobalConfigService], - }) -], GlobalConfigModule); -exports.GlobalConfigModule = GlobalConfigModule; diff --git a/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.service.js b/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.service.js deleted file mode 100644 index 4d966ef..0000000 --- a/AIWebQuickDeploy/dist/modules/globalConfig/globalConfig.service.js +++ /dev/null @@ -1,408 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GlobalConfigService = void 0; -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const axios_1 = require("axios"); -const fs = require("fs"); -const typeorm_2 = require("typeorm"); -const chatLog_entity_1 = require("./../chatLog/chatLog.entity"); -const models_service_1 = require("./../models/models.service"); -const config_entity_1 = require("./config.entity"); -const packageJsonContent = fs.readFileSync('package.json', 'utf-8'); -const packageJson = JSON.parse(packageJsonContent); -const version = packageJson.version; -console.log(' current use version in ------>: ', version); -let GlobalConfigService = class GlobalConfigService { - constructor(configEntity, chatLogEntity, modelsService) { - this.configEntity = configEntity; - this.chatLogEntity = chatLogEntity; - this.modelsService = modelsService; - this.globalConfigs = {}; - } - async onModuleInit() { - await this.initGetAllConfig(); - } - async getConfigs(configKey) { - if (configKey.length === 0) - return; - if (configKey.includes('wechatAccessToken') && configKey.length === 1) { - return this.wechatAccessToken; - } - if (configKey.includes('wechatJsapiTicket') && configKey.length === 1) { - return this.wechatJsapiTicket; - } - if (configKey.length === 1) { - return this.globalConfigs[configKey[0]]; - } - else { - const result = {}; - configKey.forEach((key) => (result[key] = this.globalConfigs[key])); - return result; - } - } - async initGetAllConfig() { - const data = await this.configEntity.find(); - this.globalConfigs = data.reduce((prev, cur) => { - prev[cur.configKey] = cur.configVal; - return prev; - }, {}); - this.initBaiduSensitive(); - } - async initBaiduSensitive(isInit = true) { - const { baiduTextApiKey, baiduTextSecretKey } = await this.getConfigs([ - 'baiduTextApiKey', - 'baiduTextSecretKey', - ]); - if (!baiduTextApiKey || !baiduTextSecretKey) { - return; - } - const headers = { - 'Content-Type': 'application/json', - Accept: 'application/json', - }; - const url = `https://aip.baidubce.com/oauth/2.0/token?client_id=${baiduTextApiKey}&client_secret=${baiduTextSecretKey}&grant_type=client_credentials`; - try { - const response = await axios_1.default.post(url, { headers }); - this.globalConfigs.baiduTextAccessToken = response.data.access_token; - } - catch (error) { - if (isInit) { - } - else { - throw new common_1.HttpException(error.response.data.error_description, common_1.HttpStatus.BAD_REQUEST); - } - } - } - async getWechatAccessToken(isInit = false) { - const { wechatOfficialAppId: appId, wechatOfficialAppSecret: secret } = await this.getConfigs(['wechatOfficialAppId', 'wechatOfficialAppSecret']); - if (!appId || !secret) { - return common_1.Logger.error('还未配置微信的appId和secret、配置后才可进行微信扫码登录!!!', 'OfficialService'); - } - this.wechatAccessToken = await this.fetchBaseAccessToken(appId, secret, isInit); - this.wechatJsapiTicket = await this.fetchJsapiTicket(this.wechatAccessToken); - common_1.Logger.log(`wechat refresh access_token ==> ${this.wechatAccessToken}`, 'OfficialService'); - } - async fetchBaseAccessToken(appId, secret, isInit = false) { - if (process.env.ISDEV === 'TRUE') { - this.wechatAccessToken = ''; - return; - } - const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); - const { data: { errmsg, access_token }, } = await axios_1.default.get(`${Url}/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${secret}`); - if (errmsg) { - if (isInit) { - common_1.Logger.error(`获取微信access_token失败、错误信息:${errmsg}`, 'OfficialService'); - } - return ''; - } - return access_token; - } - async fetchJsapiTicket(accessToken) { - var _a; - if (process.env.ISDEV === 'TRUE') { - this.wechatJsapiTicket = ''; - return; - } - const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); - const res = await axios_1.default.get(`${Url}/cgi-bin/ticket/getticket?access_token=${accessToken}&type=jsapi`); - return (_a = res === null || res === void 0 ? void 0 : res.data) === null || _a === void 0 ? void 0 : _a.ticket; - } - async queryAllConfig(req) { - const { role } = req.user; - return this.globalConfigs; - } - async queryFrontConfig(query, req) { - const allowKeys = [ - 'registerSendStatus', - 'registerSendModel3Count', - 'registerSendModel4Count', - 'registerSendDrawMjCount', - 'firstRegisterSendStatus', - 'firstRegisterSendRank', - 'firstRregisterSendModel3Count', - 'firstRregisterSendModel4Count', - 'firstRregisterSendDrawMjCount', - 'clientHomePath', - 'clientLogoPath', - 'clientFavoIconPath', - 'drawingStyles', - 'isUseWxLogin', - 'siteName', - 'robotAvatar', - 'siteRobotName', - 'buyCramiAddress', - 'mindDefaultData', - 'baiduCode', - 'payEpayChannel', - 'payMpayChannel', - 'payEpayApiPayUrl', - 'payEpayStatus', - 'payHupiStatus', - 'payWechatStatus', - 'payMpayStatus', - 'payLtzfStatus', - 'isAutoOpenNotice', - 'isShowAppCatIcon', - 'salesBaseRatio', - 'salesSeniorRatio', - 'salesAllowDrawMoney', - 'companyName', - 'filingNumber', - 'emailLoginStatus', - 'phoneLoginStatus', - 'wechatRegisterStatus', - 'wechatSilentLoginStatus', - 'signInStatus', - 'signInModel3Count', - 'signInModel4Count', - 'signInMjDrawToken', - 'appMenuHeaderTips', - 'pluginFirst', - 'mjUseBaiduFy', - 'mjHideNotBlock', - 'mjHideWorkIn', - 'isVerifyEmail', - 'showWatermark', - 'isHideTts', - 'isHideDefaultPreset', - 'isHideModel3Point', - 'isHideModel4Point', - 'isHideDrawMjPoint', - 'isHidePlugin', - 'model3Name', - 'model4Name', - 'drawMjName', - 'isModelInherited', - 'noVerifyRegister', - 'noticeInfo', - 'homeHtml', - 'isAutoOpenAgreement', - 'agreementInfo', - 'agreementTitle', - ]; - const data = await this.configEntity.find({ - where: { configKey: (0, typeorm_2.In)(allowKeys) }, - }); - const { domain } = query; - const domainDb = this.globalConfigs['domain']; - if (domainDb !== domain) { - this.createOrUpdate({ - configKey: `domain`, - configVal: domain, - status: 1, - }); - await this.initGetAllConfig(); - } - const publicConfig = data.reduce((prev, cur) => { - prev[cur.configKey] = cur.configVal; - return prev; - }, {}); - const { wechatOfficialAppId, wechatOfficialAppSecret } = await this.getConfigs(['wechatOfficialAppId', 'wechatOfficialAppSecret']); - const isUseWxLogin = !!(wechatOfficialAppId && wechatOfficialAppSecret); - return Object.assign(Object.assign({}, publicConfig), { isUseWxLogin }); - } - async queryConfig(body, req) { - const { role } = req.user; - const { keys } = body; - const data = await this.configEntity.find({ - where: { configKey: (0, typeorm_2.In)(keys) }, - }); - if (role !== 'super') { - data.forEach((item) => { - if (item.configKey.includes('mj') || - item.configKey.includes('Key') || - item.configKey.includes('gpt') || - item.configKey.includes('cos') || - item.configKey.includes('baidu') || - item.configKey.includes('ali') || - item.configKey.includes('tencent') || - item.configKey.includes('pay') || - item.configKey.includes('wechat') || - item.configKey.includes('mjProxyImgUrl') || - item.configKey === 'openaiBaseUrl') { - const longKeys = ['payWeChatPublicKey', 'payWeChatPrivateKey']; - if (longKeys.includes(item.configKey)) { - return (item.configVal = (0, utils_1.hideString)(item.configVal, '隐私内容、非超级管理员无权查看')); - } - const whiteListKey = [ - 'payEpayStatus', - 'payHupiStatus', - 'mjProxy', - 'payLtzfStatus', - ]; - if (!whiteListKey.includes(item.configKey) && - !item.configKey.includes('Status')) { - item.configVal = (0, utils_1.hideString)(item.configVal); - } - } - }); - } - return data.reduce((prev, cur) => { - prev[cur.configKey] = cur.configVal; - return prev; - }, {}); - } - async setConfig(body) { - try { - const { settings } = body; - for (const item of settings) { - await this.createOrUpdate(item); - } - await this.initGetAllConfig(); - const keys = settings.map((t) => t.configKey); - if (keys.includes('baiduTextApiKey') || - keys.includes('baiduTextSecretKey')) { - await this.initBaiduSensitive(false); - } - if (keys.includes('wechatOfficialAppId') || - keys.includes('wechatOfficialAppSecret')) { - await this.getWechatAccessToken(); - } - return '设置完成!'; - } - catch (error) { - console.log('error: ', error); - } - } - async createOrUpdate(setting) { - try { - const { configKey, configVal, status = 1 } = setting; - const c = await this.configEntity.findOne({ where: { configKey } }); - if (c) { - const res = await this.configEntity.update({ configKey }, { configVal, status }); - } - else { - const save = await this.configEntity.save({ - configKey, - configVal, - status, - }); - } - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('设置配置信息错误!', common_1.HttpStatus.BAD_REQUEST); - } - } - async queryNotice() { - return await this.getConfigs(['noticeInfo', 'noticeTitle']); - } - async queryPayType() { - const { payHupiStatus = 0, payEpayStatus = 0, payWechatStatus = 0, payMpayStatus = 0, payLtzfStatus = 0, } = await this.getConfigs([ - 'payHupiStatus', - 'payEpayStatus', - 'payMpayStatus', - 'payWechatStatus', - 'payLtzfStatus', - ]); - if ([ - payHupiStatus, - payEpayStatus, - payWechatStatus, - payMpayStatus, - payLtzfStatus, - ].every((status) => status === 0)) { - throw new common_1.HttpException('支付功能暂未开放!', common_1.HttpStatus.BAD_REQUEST); - } - if (Number(payWechatStatus) === 1) { - return 'wechat'; - } - if (Number(payEpayStatus) === 1) { - return 'epay'; - } - if (Number(payMpayStatus) === 1) { - return 'mpay'; - } - if (Number(payHupiStatus) === 1) { - return 'hupi'; - } - if (Number(payLtzfStatus) === 1) { - return 'ltzf'; - } - } - async getAuthInfo() { - const { siteName, registerBaseUrl, domain } = await this.getConfigs([ - 'siteName', - 'registerBaseUrl', - 'domain', - ]); - return { siteName, registerBaseUrl, domain }; - } - async getPhoneVerifyConfig() { - const { phoneLoginStatus, aliPhoneAccessKeyId, aliPhoneAccessKeySecret, aliPhoneSignName, aliPhoneTemplateCode, } = await this.getConfigs([ - 'phoneLoginStatus', - 'aliPhoneAccessKeyId', - 'aliPhoneAccessKeySecret', - 'aliPhoneSignName', - 'aliPhoneTemplateCode', - ]); - if (Number(phoneLoginStatus) !== 1) { - throw new common_1.HttpException('手机验证码功能暂未开放!', common_1.HttpStatus.BAD_REQUEST); - } - return { - accessKeyId: aliPhoneAccessKeyId, - accessKeySecret: aliPhoneAccessKeySecret, - SignName: aliPhoneSignName, - TemplateCode: aliPhoneTemplateCode, - }; - } - getNamespace() { - return process.env.NAMESPACE || 'AIWeb'; - } - async getSignatureGiftConfig() { - const { signInStatus = 0, signInModel3Count = 0, signInModel4Count = 0, signInMjDrawToken = 0, } = await this.getConfigs([ - 'signInStatus', - 'signInModel3Count', - 'signInModel4Count', - 'signInMjDrawToken', - ]); - if (Number(signInStatus) !== 1) { - throw new common_1.HttpException('签到功能暂未开放!', common_1.HttpStatus.BAD_REQUEST); - } - return { - model3Count: Number(signInModel3Count), - model4Count: Number(signInModel4Count), - drawMjCount: Number(signInMjDrawToken), - }; - } - async auth() { - const api = ''; - const response = await fetch(api, {}); - const responseData = await response.json(); - const { success = true, message } = responseData; - common_1.Logger.debug('感谢您使用AIWeb,祝您使用愉快~'); - } - async getSensitiveConfig() { - const { baiduTextStatus = 0, baiduTextAccessToken } = await this.getConfigs(['baiduTextStatus', 'baiduTextAccessToken']); - if (Number(baiduTextStatus) === 1) { - return { - useType: 'baidu', - baiduTextAccessToken, - }; - } - return null; - } -}; -GlobalConfigService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), - __param(1, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - models_service_1.ModelsService]) -], GlobalConfigService); -exports.GlobalConfigService = GlobalConfigService; diff --git a/AIWebQuickDeploy/dist/modules/mailer/mailer.service.js b/AIWebQuickDeploy/dist/modules/mailer/mailer.service.js deleted file mode 100644 index 2df5a8b..0000000 --- a/AIWebQuickDeploy/dist/modules/mailer/mailer.service.js +++ /dev/null @@ -1,68 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.MailerService = void 0; -const common_1 = require("@nestjs/common"); -const nodemailer = require("nodemailer"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -let MailerService = class MailerService { - constructor(globalConfigService) { - this.globalConfigService = globalConfigService; - } - async sendMail(options) { - try { - const configs = await this.globalConfigService.getConfigs([ - 'MAILER_HOST', - 'MAILER_PORT', - 'MAILER_USER', - 'MAILER_PASS', - 'MAILER_SECURE', - 'siteName', - 'siteUrl', - ]); - const html = ` -
-

验证您的邮箱

-
-
- ${options.context.code} -
-

此验证码将在 10 分钟后失效,非本人操作请忽略。

-
-

点击访问:${configs.siteName}

-
`; - const transporter = nodemailer.createTransport({ - host: configs.MAILER_HOST, - port: configs.MAILER_PORT, - secure: (configs.MAILER_SECURE === '1') ? true : false, - auth: { - user: configs.MAILER_USER, - pass: configs.MAILER_PASS, - }, - }); - await transporter.sendMail({ - from: configs.MAILER_USER, - to: options.to, - subject: `验证码${options.context.code}`, - html: html, - }); - } - catch (error) { - console.error('error: ', error); - throw new common_1.HttpException('邮件发送失败!', common_1.HttpStatus.BAD_REQUEST); - } - } -}; -MailerService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [globalConfig_service_1.GlobalConfigService]) -], MailerService); -exports.MailerService = MailerService; diff --git a/AIWebQuickDeploy/dist/modules/models/dto/queryModel.dto.js b/AIWebQuickDeploy/dist/modules/models/dto/queryModel.dto.js deleted file mode 100644 index 807b5b6..0000000 --- a/AIWebQuickDeploy/dist/modules/models/dto/queryModel.dto.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryModelDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class QueryModelDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '页码', required: true }), - __metadata("design:type", Number) -], QueryModelDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '数量', required: true }), - __metadata("design:type", Number) -], QueryModelDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '模型类型', required: true }), - __metadata("design:type", Number) -], QueryModelDto.prototype, "keyType", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: 'dsadgadaorjoqm', - description: '模型key', - required: true, - }), - __metadata("design:type", String) -], QueryModelDto.prototype, "key", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: true, - description: '是否开启当前key对应的模型', - required: true, - }), - __metadata("design:type", Boolean) -], QueryModelDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: 'gpt-3.5', - description: '当前key绑定的模型是多少 需要调用的模型', - required: true, - }), - __metadata("design:type", String) -], QueryModelDto.prototype, "model", void 0); -exports.QueryModelDto = QueryModelDto; diff --git a/AIWebQuickDeploy/dist/modules/models/dto/queryModelType.dto.js b/AIWebQuickDeploy/dist/modules/models/dto/queryModelType.dto.js deleted file mode 100644 index 618e343..0000000 --- a/AIWebQuickDeploy/dist/modules/models/dto/queryModelType.dto.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryModelTypeDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class QueryModelTypeDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '页码', required: true }), - __metadata("design:type", Number) -], QueryModelTypeDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '数量', required: true }), - __metadata("design:type", Number) -], QueryModelTypeDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '模型类型', required: true }), - __metadata("design:type", Number) -], QueryModelTypeDto.prototype, "keyType", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '是否开启当前key对应的模型', required: true }), - __metadata("design:type", Boolean) -], QueryModelTypeDto.prototype, "status", void 0); -exports.QueryModelTypeDto = QueryModelTypeDto; diff --git a/AIWebQuickDeploy/dist/modules/models/dto/setModel.dto.js b/AIWebQuickDeploy/dist/modules/models/dto/setModel.dto.js deleted file mode 100644 index 5dc21a9..0000000 --- a/AIWebQuickDeploy/dist/modules/models/dto/setModel.dto.js +++ /dev/null @@ -1,128 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SetModelDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class SetModelDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: 'key id', required: false }), - __metadata("design:type", Number) -], SetModelDto.prototype, "id", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '模型类型', required: true }), - __metadata("design:type", Number) -], SetModelDto.prototype, "keyType", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '默认', description: '模型中文名称', required: true }), - __metadata("design:type", String) -], SetModelDto.prototype, "modelName", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'sk-', description: '模型key', required: false }), - __metadata("design:type", Object) -], SetModelDto.prototype, "key", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: true, - description: '是否开启当前key对应的模型', - required: true, - }), - __metadata("design:type", Boolean) -], SetModelDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: 'gpt-3.5', - description: '当前key绑定的模型是多少 需要调用的模型', - required: true, - }), - __metadata("design:type", String) -], SetModelDto.prototype, "model", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '模型排序' }), - __metadata("design:type", Number) -], SetModelDto.prototype, "modelOrder", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'https://***.png', required: false }), - __metadata("design:type", String) -], SetModelDto.prototype, "modelAvatar", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: 4096, - description: '模型支持的最大TOken数量', - required: false, - }), - __metadata("design:type", Number) -], SetModelDto.prototype, "maxModelTokens", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: true, - description: '模型的代理地址', - required: false, - }), - __metadata("design:type", String) -], SetModelDto.prototype, "proxyUrl", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 300, description: '模型超时时间', required: false }), - __metadata("design:type", Number) -], SetModelDto.prototype, "timeout", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: 'key状态', required: false }), - __metadata("design:type", Number) -], SetModelDto.prototype, "keyStatus", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: true, - description: '扣费类型 1: 普通 2: 高级余额', - required: false, - }), - __metadata("design:type", Number) -], SetModelDto.prototype, "deductType", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '单次扣除金额', required: false }), - __metadata("design:type", Number) -], SetModelDto.prototype, "deduct", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: true, - description: '最大上下文轮次', - required: false, - }), - __metadata("design:type", Number) -], SetModelDto.prototype, "maxRounds", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: true, - description: '是否设置为绘画Key', - required: false, - }), - __metadata("design:type", Boolean) -], SetModelDto.prototype, "isDraw", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: true, - description: '是否支持文件上传', - required: false, - }), - __metadata("design:type", Number) -], SetModelDto.prototype, "isFileUpload", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: true, - description: '是否使用token计费', - required: false, - }), - __metadata("design:type", Boolean) -], SetModelDto.prototype, "isTokenBased", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: 'token计费比例', required: false }), - __metadata("design:type", Number) -], SetModelDto.prototype, "tokenFeeRatio", void 0); -exports.SetModelDto = SetModelDto; diff --git a/AIWebQuickDeploy/dist/modules/models/dto/setModelType.dto.js b/AIWebQuickDeploy/dist/modules/models/dto/setModelType.dto.js deleted file mode 100644 index 0c79cbd..0000000 --- a/AIWebQuickDeploy/dist/modules/models/dto/setModelType.dto.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SetModelTypeDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class SetModelTypeDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: 'model id', required: false }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "id", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '模型类型', required: true }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "keyType", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '普通模型', description: '模型中文名称', required: true }), - __metadata("design:type", String) -], SetModelTypeDto.prototype, "modelName", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '是否开启当前key对应的模型', required: true }), - __metadata("design:type", Boolean) -], SetModelTypeDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'gpt-3.5', description: '当前key绑定的模型是多少 需要调用的模型', required: true }), - __metadata("design:type", String) -], SetModelTypeDto.prototype, "model", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 300, description: '模型超时时间', required: false }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "timeout", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '扣费类型 1: 普通 2: 高级余额', required: false }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "deductType", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '文件上传类型 0 : 不使用 1: ALL类型 2: 4V类型', required: false }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "isFileUpload", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '单次扣除金额', required: false }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "deduct", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '排序id 越大越靠前', default: 100 }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "order", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 4000, description: '模型允许用户使用的最大token设置过高意味着单次的上下文会很高控制模型上下文控制使用token数量', required: true }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "maxTokens", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1000, description: '模型支持的最大回复TOken数量', required: true }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "maxResponseTokens", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '最大上下文轮次', required: false }), - __metadata("design:type", Number) -], SetModelTypeDto.prototype, "maxRounds", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '是否设置为Dall-E3绘画Key', required: false }), - __metadata("design:type", Boolean) -], SetModelTypeDto.prototype, "isDallE3", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: true, description: '是否设置为工具key', required: false }), - __metadata("design:type", Boolean) -], SetModelTypeDto.prototype, "isUseTool", void 0); -exports.SetModelTypeDto = SetModelTypeDto; diff --git a/AIWebQuickDeploy/dist/modules/models/models.controller.js b/AIWebQuickDeploy/dist/modules/models/models.controller.js deleted file mode 100644 index 4048e49..0000000 --- a/AIWebQuickDeploy/dist/modules/models/models.controller.js +++ /dev/null @@ -1,141 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ModelsController = void 0; -const swagger_1 = require("@nestjs/swagger"); -const models_service_1 = require("./models.service"); -const common_1 = require("@nestjs/common"); -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const setModel_dto_1 = require("./dto/setModel.dto"); -const queryModel_dto_1 = require("./dto/queryModel.dto"); -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const setModelType_dto_1 = require("./dto/setModelType.dto"); -const queryModelType_dto_1 = require("./dto/queryModelType.dto"); -let ModelsController = class ModelsController { - constructor(modelsService) { - this.modelsService = modelsService; - } - setModel(params) { - return this.modelsService.setModel(params); - } - delModel(params) { - return this.modelsService.delModel(params); - } - queryModels(req, params) { - return this.modelsService.queryModels(req, params); - } - modelsList() { - return this.modelsService.modelsList(); - } - getMjInfo() { - return this.modelsService.getMjInfo(); - } - baseConfig() { - return this.modelsService.getBaseConfig(); - } - queryModelType(params) { - return this.modelsService.queryModelType(params); - } - setModelType(params) { - return this.modelsService.setModelType(params); - } - delModelType(params) { - return this.modelsService.delModelType(params); - } -}; -__decorate([ - (0, common_1.Post)('setModel'), - (0, swagger_1.ApiOperation)({ summary: '设置模型' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [setModel_dto_1.SetModelDto]), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "setModel", null); -__decorate([ - (0, common_1.Post)('delModel'), - (0, swagger_1.ApiOperation)({ summary: '删除模型' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "delModel", null); -__decorate([ - (0, common_1.Get)('query'), - (0, swagger_1.ApiOperation)({ summary: '管理端查询模型列表' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Request, queryModel_dto_1.QueryModelDto]), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "queryModels", null); -__decorate([ - (0, common_1.Get)('list'), - (0, swagger_1.ApiOperation)({ summary: '客户端查询当前所有可以使用的模型' }), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "modelsList", null); -__decorate([ - (0, common_1.Get)('mjInfo'), - (0, swagger_1.ApiOperation)({ summary: '客户端查询当前所有可以使用的模型' }), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "getMjInfo", null); -__decorate([ - (0, common_1.Get)('baseConfig'), - (0, swagger_1.ApiOperation)({ summary: '客户端查询当前已经配置模型的基础配置' }), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "baseConfig", null); -__decorate([ - (0, common_1.Get)('queryModelType'), - (0, swagger_1.ApiOperation)({ summary: '查询模型类型' }), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryModelType_dto_1.QueryModelTypeDto]), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "queryModelType", null); -__decorate([ - (0, common_1.Post)('setModelType'), - (0, swagger_1.ApiOperation)({ summary: '创建修改模型类型' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [setModelType_dto_1.SetModelTypeDto]), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "setModelType", null); -__decorate([ - (0, common_1.Post)('delModelType'), - (0, swagger_1.ApiOperation)({ summary: '删除模型类型' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], ModelsController.prototype, "delModelType", null); -ModelsController = __decorate([ - (0, common_1.Controller)('models'), - __metadata("design:paramtypes", [models_service_1.ModelsService]) -], ModelsController); -exports.ModelsController = ModelsController; diff --git a/AIWebQuickDeploy/dist/modules/models/models.entity.js b/AIWebQuickDeploy/dist/modules/models/models.entity.js deleted file mode 100644 index a09f588..0000000 --- a/AIWebQuickDeploy/dist/modules/models/models.entity.js +++ /dev/null @@ -1,118 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ModelsEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let ModelsEntity = class ModelsEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '模型类型 1: 普通对话 2: 绘画 3:高级对话' }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "keyType", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型名称' }), - __metadata("design:type", String) -], ModelsEntity.prototype, "modelName", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '绑定的模型是?' }), - __metadata("design:type", String) -], ModelsEntity.prototype, "model", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 1024, comment: '模型头像', nullable: true }), - __metadata("design:type", String) -], ModelsEntity.prototype, "modelAvatar", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型排序', default: 1 }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "modelOrder", void 0); -__decorate([ - (0, typeorm_1.Column)({ - comment: '模型上下文支持的最大Token', - default: 2000, - nullable: true, - }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "maxModelTokens", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型上下文最大条数', nullable: true }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "maxRounds", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型上下文最大条数', nullable: true }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "timeout", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型单次调用扣除的次数', default: 1 }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "deduct", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型扣除余额类型 1: 普通模型 2: 高级模型', default: 1 }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "deductType", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '是否使用token计费: 0:不是 1: 是', default: 0 }), - __metadata("design:type", Boolean) -], ModelsEntity.prototype, "isTokenBased", void 0); -__decorate([ - (0, typeorm_1.Column)({ - comment: '是否支持文件上传: 0:不是 1: 附件链接格式 2: 4V格式', - default: 0, - }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "isFileUpload", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'token计费比例', default: 0 }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "tokenFeeRatio", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型附加信息', nullable: true }), - __metadata("design:type", String) -], ModelsEntity.prototype, "remark", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型的key', nullable: true }), - __metadata("design:type", String) -], ModelsEntity.prototype, "key", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '使用的状态: 0:禁用 1:启用', default: 1 }), - __metadata("design:type", Boolean) -], ModelsEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ - comment: 'key的状态: 1:有效 -1:被封号 -2: 错误的秘钥 -3: 余额使用完了', - default: 1, - }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "keyStatus", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'key的使用次数', default: 0 }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "useCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'key的已经使用的token数量', default: 0 }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "useToken", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '当前模型的代理地址', nullable: true }), - __metadata("design:type", String) -], ModelsEntity.prototype, "proxyUrl", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型频率限制 次/小时', default: 999 }), - __metadata("design:type", Number) -], ModelsEntity.prototype, "modelLimits", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型介绍', nullable: true }), - __metadata("design:type", String) -], ModelsEntity.prototype, "modelDescription", void 0); -ModelsEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'models' }) -], ModelsEntity); -exports.ModelsEntity = ModelsEntity; diff --git a/AIWebQuickDeploy/dist/modules/models/models.module.js b/AIWebQuickDeploy/dist/modules/models/models.module.js deleted file mode 100644 index 99c84b6..0000000 --- a/AIWebQuickDeploy/dist/modules/models/models.module.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ModelsModule = void 0; -const common_1 = require("@nestjs/common"); -const models_controller_1 = require("./models.controller"); -const models_service_1 = require("./models.service"); -const typeorm_1 = require("@nestjs/typeorm"); -const models_entity_1 = require("./models.entity"); -let ModelsModule = class ModelsModule { -}; -ModelsModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([models_entity_1.ModelsEntity])], - controllers: [models_controller_1.ModelsController], - providers: [models_service_1.ModelsService], - exports: [models_service_1.ModelsService] - }) -], ModelsModule); -exports.ModelsModule = ModelsModule; diff --git a/AIWebQuickDeploy/dist/modules/models/models.service.js b/AIWebQuickDeploy/dist/modules/models/models.service.js deleted file mode 100644 index 10a7986..0000000 --- a/AIWebQuickDeploy/dist/modules/models/models.service.js +++ /dev/null @@ -1,264 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ModelsService = void 0; -const status_constant_1 = require("../../common/constants/status.constant"); -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const models_entity_1 = require("./models.entity"); -let ModelsService = class ModelsService { - constructor(modelsEntity) { - this.modelsEntity = modelsEntity; - this.modelTypes = []; - this.modelMaps = {}; - this.keyList = {}; - this.keyPoolMap = {}; - this.keyPoolIndexMap = {}; - } - async onModuleInit() { - await this.initCalcKey(); - } - async initCalcKey() { - this.keyPoolMap = {}; - this.keyPoolIndexMap = {}; - this.keyList = {}; - this.modelMaps = {}; - this.modelTypes = []; - const allKeys = await this.modelsEntity.find({ where: { status: true } }); - const keyTypes = allKeys.reduce((pre, cur) => { - if (!pre[cur.keyType]) { - pre[cur.keyType] = [cur]; - } - else { - pre[cur.keyType].push(cur); - } - return pre; - }, {}); - this.modelTypes = Object.keys(keyTypes).map((keyType) => { - return { label: status_constant_1.ModelsMapCn[keyType], val: keyType }; - }); - this.modelMaps = keyTypes; - this.keyList = {}; - allKeys.forEach((keyDetail) => { - const { keyType, model } = keyDetail; - if (!this.keyPoolMap[model]) - this.keyPoolMap[model] = []; - this.keyPoolMap[model].push(keyDetail); - if (!this.keyPoolIndexMap[model]) - this.keyPoolIndexMap[model] = 0; - if (!this.keyList[keyType]) - this.keyList[keyType] = {}; - if (!this.keyList[keyType][model]) - this.keyList[keyType][model] = []; - this.keyList[keyType][model].push(keyDetail); - }); - } - async lockKey(keyId, remark, keyStatus = -1) { - const res = await this.modelsEntity.update({ id: keyId }, { status: false, keyStatus, remark }); - common_1.Logger.error(`key: ${keyId} 欠费或被官方封禁导致不可用,已被系统自动锁定`); - this.initCalcKey(); - } - async getCurrentModelKeyInfo(model) { - let modelKeyInfo = await this.modelsEntity.findOne({ - where: { model: model }, - }); - if (!modelKeyInfo) { - return null; - } - return modelKeyInfo; - } - async getSpecialModelKeyInfo(modelPrefix) { - const matchingModels = await this.modelsEntity.find({ - where: { model: (0, typeorm_2.Like)(`${modelPrefix}%`) }, - }); - if (matchingModels.length === 0) { - throw new common_1.HttpException('未找到匹配的模型,请重新选择模型!', common_1.HttpStatus.BAD_REQUEST); - } - const firstMatchModel = matchingModels[0]; - const modifiedModelName = firstMatchModel.model.replace(modelPrefix, ''); - const modifiedModel = Object.assign(Object.assign({}, firstMatchModel), { model: modifiedModelName }); - return modifiedModel; - } - async getBaseConfig() { - if (!this.modelTypes.length || !Object.keys(this.modelMaps).length) - return; - const { keyType, modelName, model, deductType, deduct, isFileUpload, modelAvatar, modelDescription, } = this.modelMaps[1][0]; - return { - modelInfo: { - keyType, - modelName, - model, - deductType, - deduct, - isFileUpload, - modelAvatar, - modelDescription, - }, - }; - } - async setModel(params) { - try { - if (isNaN(params.timeout)) { - params.timeout = null; - } - const { id } = params; - params.status && (params.keyStatus = 1); - if (id) { - const res = await this.modelsEntity.update({ id }, params); - await this.initCalcKey(); - return res.affected > 0; - } - else { - const { keyType, key } = params; - if (Number(keyType !== 1)) { - const res = await this.modelsEntity.save(params); - await this.initCalcKey(); - return res; - } - else { - const data = key.map((k) => { - try { - const data = JSON.parse(JSON.stringify(params)); - data.key = k; - if (isNaN(data.timeout)) { - data.timeout = null; - } - return data; - } - catch (error) { - console.log('parse error: ', error); - } - }); - const res = await this.modelsEntity.save(data); - await this.initCalcKey(); - return res; - } - } - } - catch (error) { - console.log('error: ', error); - } - } - async delModel({ id }) { - if (!id) { - throw new common_1.HttpException('缺失必要参数!', common_1.HttpStatus.BAD_REQUEST); - } - const m = await this.modelsEntity.findOne({ where: { id } }); - if (!m) { - throw new common_1.HttpException('当前账号不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const res = await this.modelsEntity.delete({ id }); - await this.initCalcKey(); - return res; - } - async queryModels(req, params) { - const { role } = req.user; - const { keyType, key, status, model, page = 1, size = 10 } = params; - let where = {}; - keyType && (where.keyType = keyType); - model && (where.model = model); - status && (where.status = Number(status) === 1 ? true : false); - key && (where.key = (0, typeorm_2.Like)(`%${key}%`)); - const [rows, count] = await this.modelsEntity.findAndCount({ - where: where, - order: { - modelOrder: 'ASC', - }, - skip: (page - 1) * size, - take: size, - }); - if (role !== 'super') { - rows.forEach((item) => { - item.key && (item.key = (0, utils_1.hideString)(item.key)); - }); - } - return { rows, count }; - } - async modelsList() { - const cloneModelMaps = JSON.parse(JSON.stringify(this.modelMaps)); - Object.keys(cloneModelMaps).forEach((key) => { - cloneModelMaps[key] = cloneModelMaps[key] - .filter((t) => t.keyStatus === 1) - .sort((a, b) => a.modelOrder - b.modelOrder); - cloneModelMaps[key] = Array.from(cloneModelMaps[key] - .map((t) => { - const { modelName, keyType, model, deduct, deductType, maxRounds, modelAvatar, isFileUpload, modelDescription, } = t; - return { - modelName, - keyType, - model, - deduct, - deductType, - maxRounds, - modelAvatar, - isFileUpload, - modelDescription, - }; - }) - .reduce((map, obj) => map.set(obj.modelName, obj), new Map()) - .values()); - }); - return { - modelTypeList: this.modelTypes, - modelMaps: cloneModelMaps, - }; - } - async getMjInfo() { - const modelInfo = await this.modelsEntity.findOne({ - where: { model: 'midjourney' }, - }); - if (modelInfo) { - return { - modelName: modelInfo.modelName, - model: modelInfo.model, - deduct: modelInfo.deduct, - deductType: modelInfo.deductType, - }; - } - else { - return null; - } - } - async saveUseLog(id, useToken) { - await this.modelsEntity - .createQueryBuilder() - .update(models_entity_1.ModelsEntity) - .set({ - useCount: () => 'useCount + 1', - useToken: () => `useToken + ${useToken}`, - }) - .where('id = :id', { id }) - .execute(); - } - async getAllKey() { - return await this.modelsEntity.find(); - } - async queryModelType(params) { - return 1; - } - async setModelType(params) { - return 1; - } - async delModelType(params) { - return 1; - } -}; -ModelsService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(models_entity_1.ModelsEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository]) -], ModelsService); -exports.ModelsService = ModelsService; diff --git a/AIWebQuickDeploy/dist/modules/official/dto/getQrCode.dto.js b/AIWebQuickDeploy/dist/modules/official/dto/getQrCode.dto.js deleted file mode 100644 index 80d3b46..0000000 --- a/AIWebQuickDeploy/dist/modules/official/dto/getQrCode.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.GetQrCodeDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class GetQrCodeDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'dasdasg2441lk1o24bk', description: '1-64位的字符参数', required: true }), - (0, class_validator_1.IsDefined)({ message: 'sceneStr是必传参数' }), - __metadata("design:type", String) -], GetQrCodeDto.prototype, "sceneStr", void 0); -exports.GetQrCodeDto = GetQrCodeDto; diff --git a/AIWebQuickDeploy/dist/modules/official/official.controller.js b/AIWebQuickDeploy/dist/modules/official/official.controller.js deleted file mode 100644 index a35888f..0000000 --- a/AIWebQuickDeploy/dist/modules/official/official.controller.js +++ /dev/null @@ -1,201 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OfficialController = void 0; -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const getQrCode_dto_1 = require("./dto/getQrCode.dto"); -const official_service_1 = require("./official.service"); -let OfficialController = class OfficialController { - constructor(officialService) { - this.officialService = officialService; - } - async notify(req, query, body) { - console.log('get 通知>>>', query, body); - const result = await this.officialService.verify(query.signature, query.nonce, query.timestamp); - return result ? query.echostr : ''; - } - async notifyPost(req, query, xmlData, res) { - const { xml } = xmlData; - console.log('xml: ', xml); - if (xml.msgtype[0] == 'event') { - if (xml.event[0] == 'VIEW' || xml.event[0] == 'CLICK') { - return res.status(200).send(''); - } - if (xml.event[0] == 'SCAN') { - console.log('扫码'); - const sceneStr = xml.eventkey[0]; - if (sceneStr.includes('/')) { - this.officialService.scanBindWx(xml.fromusername[0], sceneStr); - const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialBindAccountText'); - return res.status(200).send(xmlMsg); - } - this.officialService.scan(xml.fromusername[0], sceneStr); - const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialScanLoginText'); - return res.status(200).send(xmlMsg); - } - if (xml.event[0] == 'subscribe') { - console.log('订阅', xml.eventkey[0]); - const sceneStr = xml.eventkey[0].split('qrscene_')[1]; - console.log('sceneStr: ', sceneStr); - if (!sceneStr) { - const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialSubscribeText'); - return res.status(200).send(xmlMsg); - } - if (sceneStr.includes('/')) { - this.officialService.scanBindWx(xml.fromusername[0], sceneStr); - const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialBindAccountText'); - return res.status(200).send(xmlMsg); - } - this.officialService.scan(xml.fromusername[0], sceneStr); - const xmlMsg = await this.officialService.genXmlMsgByConfig(xml, 'officialSubscribeText'); - return res.status(200).send(xmlMsg); - } - if (xml.event[0] == 'unsubscribe') { - return res.status(200).send(''); - } - } - if (xml.msgtype[0] == 'text') { - const aotoPlayMsg = await this.officialService.aotoPlay(xml.content[0]); - const xmlMsg = await this.officialService.genXmlMsg(xml, aotoPlayMsg); - return res.status(200).send(xmlMsg); - } - return 'success'; - } - async getQRSceneStr() { - return this.officialService.getQRSceneStr(); - } - async getQRSceneStrByBind(req) { - return this.officialService.getQRSceneStrByBind(req); - } - async getQRCode(query) { - if (process.env.ISDEV === 'TRUE') - return ''; - const ticket = await this.officialService.getQRCodeTicket(query.sceneStr); - const Url = (0, utils_1.formatUrl)(process.env.weChatMpUrl || 'https://mp.weixin.qq.com'); - return `${Url}/cgi-bin/showqrcode?ticket=${encodeURIComponent(ticket)}`; - } - async loginBySceneStr(req, body) { - return this.officialService.loginBySceneStr(req, body); - } - async bindWxBySceneStr(req, body) { - return this.officialService.bindWxBySceneStr(req, body.sceneStr); - } - async getRedirectUrl(body) { - return this.officialService.getRedirectUrl(body.url); - } - async getJsapiTicket(body) { - return this.officialService.getJsapiTicket(body.url); - } - async loginByCode(req, body) { - return this.officialService.loginByCode(req, body.code); - } -}; -__decorate([ - (0, common_1.Get)('notify'), - (0, swagger_1.ApiOperation)({ summary: '公众号通知接口GET' }), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __param(2, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object, Object]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "notify", null); -__decorate([ - (0, common_1.Post)('notify'), - (0, swagger_1.ApiOperation)({ summary: '公众号通知接口POST' }), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __param(2, (0, common_1.Body)()), - __param(3, (0, common_1.Res)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object, Object, Object]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "notifyPost", null); -__decorate([ - (0, common_1.Post)('getQRSceneStr'), - (0, swagger_1.ApiOperation)({ summary: '获取登录二维码sceneStr' }), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "getQRSceneStr", null); -__decorate([ - (0, common_1.Post)('getQRSceneStrByBind'), - (0, swagger_1.ApiOperation)({ summary: '获取绑定二维码的sceneStr' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "getQRSceneStrByBind", null); -__decorate([ - (0, common_1.Get)('getQRCode'), - (0, swagger_1.ApiOperation)({ summary: '获取二维码' }), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [getQrCode_dto_1.GetQrCodeDto]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "getQRCode", null); -__decorate([ - (0, common_1.Post)('loginBySceneStr'), - (0, swagger_1.ApiOperation)({ summary: '扫码登录轮询查询' }), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "loginBySceneStr", null); -__decorate([ - (0, common_1.Post)('bindWxBySceneStr'), - (0, swagger_1.ApiOperation)({ summary: '扫码绑定轮询查询' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, getQrCode_dto_1.GetQrCodeDto]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "bindWxBySceneStr", null); -__decorate([ - (0, common_1.Post)('getRedirectUrl'), - (0, swagger_1.ApiOperation)({ summary: '获取登录跳转地址' }), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "getRedirectUrl", null); -__decorate([ - (0, common_1.Post)('getJsapiTicket'), - (0, swagger_1.ApiOperation)({ summary: '获取注册配置' }), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "getJsapiTicket", null); -__decorate([ - (0, common_1.Post)('loginByCode'), - (0, swagger_1.ApiOperation)({ summary: '公众号静默登录' }), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", Promise) -], OfficialController.prototype, "loginByCode", null); -OfficialController = __decorate([ - (0, swagger_1.ApiTags)('official'), - (0, common_1.Controller)('official'), - __metadata("design:paramtypes", [official_service_1.OfficialService]) -], OfficialController); -exports.OfficialController = OfficialController; diff --git a/AIWebQuickDeploy/dist/modules/official/official.module.js b/AIWebQuickDeploy/dist/modules/official/official.module.js deleted file mode 100644 index 7fb0e9b..0000000 --- a/AIWebQuickDeploy/dist/modules/official/official.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OfficialModule = void 0; -const common_1 = require("@nestjs/common"); -const official_controller_1 = require("./official.controller"); -const official_service_1 = require("./official.service"); -let OfficialModule = class OfficialModule { -}; -OfficialModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - controllers: [official_controller_1.OfficialController], - providers: [official_service_1.OfficialService], - exports: [official_service_1.OfficialService], - }) -], OfficialModule); -exports.OfficialModule = OfficialModule; diff --git a/AIWebQuickDeploy/dist/modules/official/official.service.js b/AIWebQuickDeploy/dist/modules/official/official.service.js deleted file mode 100644 index 84dc541..0000000 --- a/AIWebQuickDeploy/dist/modules/official/official.service.js +++ /dev/null @@ -1,194 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OfficialService = void 0; -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const axios_1 = require("axios"); -const crypto = require("crypto"); -const chat_service_1 = require("../chat/chat.service"); -const auth_service_1 = require("./../auth/auth.service"); -const autoreply_service_1 = require("./../autoreply/autoreply.service"); -const globalConfig_service_1 = require("./../globalConfig/globalConfig.service"); -const user_service_1 = require("./../user/user.service"); -let OfficialService = class OfficialService { - constructor(autoreplyService, userService, authService, globalConfigService, chatgptService) { - this.autoreplyService = autoreplyService; - this.userService = userService; - this.authService = authService; - this.globalConfigService = globalConfigService; - this.chatgptService = chatgptService; - this.sceneStrMap = {}; - this.scanedSceneStrMap = {}; - } - async onModuleInit() { - await this.globalConfigService.getWechatAccessToken(true); - } - async getQRSceneStr() { - let sceneStr = (0, utils_1.createRandomNonceStr)(32); - this.sceneStrMap[sceneStr] = true; - return sceneStr; - } - async getQRSceneStrByBind(req) { - const { id } = req.user; - const sceneStr = `${(0, utils_1.createRandomNonceStr)(32)}/${id}`; - this.sceneStrMap[sceneStr] = true; - return sceneStr; - } - async getQRCodeTicket(sceneStr) { - return this.fetchQRCodeTicket(sceneStr); - } - async getRedirectUrl(url) { - const appId = await this.globalConfigService.getConfigs([ - 'wechatOfficialAppId', - ]); - const Url = (0, utils_1.formatUrl)(process.env.weChatOpenUrl || 'https://open.weixin.qq.com'); - const res = `${Url}/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURIComponent(url)}&response_type=code&scope=snsapi_base&state=weChatLogin#wechat_redirect`; - console.log('回跳跳转地址: ', res); - return res; - } - async getJsapiTicket(url) { - const nonceStr = (0, utils_1.createRandomNonceStr)(32); - const timestamp = (Date.now() / 1000).toFixed(0); - const jsapiTicket = await this.globalConfigService.getConfigs([ - 'wechatJsapiTicket', - ]); - console.log('jsapiTicket: ', jsapiTicket); - const appId = await this.globalConfigService.getConfigs([ - 'wechatOfficialAppId', - ]); - console.log('appId: ', appId); - const str = `jsapi_ticket=${jsapiTicket}&noncestr=${nonceStr}×tamp=${timestamp}&url=${url}`; - console.log('str: ', str); - const signature = this.sha1(str); - return { appId, nonceStr, timestamp, signature }; - } - async fetchQRCodeTicket(sceneStr) { - const accessToken = await this.globalConfigService.getConfigs([ - 'wechatAccessToken', - ]); - const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); - const params = { - action_name: 'QR_STR_SCENE', - action_info: { scene: { scene_str: sceneStr } }, - }; - const res = await axios_1.default.post(`${Url}/cgi-bin/qrcode/create?access_token=${accessToken}`, params); - const { data: { errmsg, ticket }, } = res; - if (errmsg) - throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST); - return ticket; - } - async loginByCode(req, code) { - const appId = await this.globalConfigService.getConfigs([ - 'wechatOfficialAppId', - ]); - const secret = await this.globalConfigService.getConfigs([ - 'wechatOfficialAppSecret', - ]); - const Url = (0, utils_1.formatUrl)(process.env.weChatApiUrl || 'https://api.weixin.qq.com'); - const res = await axios_1.default.get(`${Url}/sns/oauth2/access_token?appid=${appId}&secret=${secret}&code=${code}&grant_type=authorization_code`); - const { data: { errmsg, openid }, } = res; - if (errmsg) - throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST); - let user; - user = await this.userService.getUserOpenId(openid); - if (!user) { - user = await this.userService.getUserFromOpenId(openid); - } - return this.authService.loginByOpenId(user, req); - } - async scan(openID, sceneStr) { - try { - common_1.Logger.log(`Scanning with openID: ${openID}, sceneStr: ${sceneStr}`, 'OfficialService'); - if (!this.sceneStrMap[sceneStr]) { - common_1.Logger.error(`非法参数: 未找到的 sceneStr ${sceneStr}`); - throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST); - } - const user = await this.userService.getUserFromOpenId(openID, sceneStr); - common_1.Logger.log(`User found: ${user ? user.id : 'No user found'}`, 'OfficialService'); - this.scanedSceneStrMap[sceneStr] = user.id; - } - catch (error) { - common_1.Logger.error('Error in scan method:', error.message); - common_1.Logger.error('Stack trace:', error.stack); - throw new common_1.HttpException('处理扫码事件时发生错误', common_1.HttpStatus.INTERNAL_SERVER_ERROR); - } - } - async loginBySceneStr(req, body) { - const { sceneStr } = body; - if (!this.sceneStrMap[sceneStr]) - return; - const userId = this.scanedSceneStrMap[sceneStr]; - if (!userId) - return ''; - const user = await this.userService.getUserById(userId); - delete this.scanedSceneStrMap[sceneStr]; - return this.authService.loginByOpenId(user, req); - } - async scanBindWx(openId, sceneStr) { - if (!this.sceneStrMap[sceneStr]) - throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST); - const userId = sceneStr.split('/')[1]; - const bindRes = await this.userService.bindWx(openId, userId); - this.scanedSceneStrMap[sceneStr] = bindRes; - } - async bindWxBySceneStr(req, sceneStr) { - if (!this.sceneStrMap[sceneStr]) - throw new common_1.HttpException('非法参数', common_1.HttpStatus.BAD_REQUEST); - const { id } = req.user; - const res = this.scanedSceneStrMap[sceneStr]; - if (!res) - return ''; - delete this.scanedSceneStrMap[sceneStr]; - return res; - } - async verify(signature, nonce, timestamp) { - const token = (await this.globalConfigService.getConfigs(['wechatOfficialToken'])) || - ''; - return ((await this.sha1([token, nonce, timestamp].sort().join(''))) == signature); - } - sha1(data) { - return crypto.createHash('sha1').update(data).digest('hex'); - } - async genXmlMsgByConfig(xmlData, msgKey) { - const msg = await this.globalConfigService.getConfigs([msgKey]); - return this.genXmlMsg(xmlData, msg); - } - async genXmlMsg(xmlData, msg) { - return ` - - - - ${new Date().getTime()} - - - `; - } - async aotoPlay(msg) { - const timeoutPromise = new Promise((resolve, reject) => { - setTimeout(() => { - reject(new Error('请求超时')); - }, 4800); - }); - let question = (await this.globalConfigService.getConfigs(['officialAutoReplyText'])) || - '由于公众号的回复限制、过长的问题我们可能无法回复、您可以前往我们的官方站点享受更加完善的服务、如果您有更多问题、欢迎像我提问!'; - return question; - } -}; -OfficialService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [autoreply_service_1.AutoreplyService, - user_service_1.UserService, - auth_service_1.AuthService, - globalConfig_service_1.GlobalConfigService, - chat_service_1.ChatService]) -], OfficialService); -exports.OfficialService = OfficialService; diff --git a/AIWebQuickDeploy/dist/modules/order/dto/buy.dto.js b/AIWebQuickDeploy/dist/modules/order/dto/buy.dto.js deleted file mode 100644 index f12f4e4..0000000 --- a/AIWebQuickDeploy/dist/modules/order/dto/buy.dto.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BuyDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class BuyDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '要购买的套餐Id', required: true }), - __metadata("design:type", Number) -], BuyDto.prototype, "goodsId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'wxpay', description: '付款方式', required: false }), - __metadata("design:type", String) -], BuyDto.prototype, "payType", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '购买数量', required: false }), - __metadata("design:type", Number) -], BuyDto.prototype, "count", void 0); -exports.BuyDto = BuyDto; diff --git a/AIWebQuickDeploy/dist/modules/order/dto/queryAllOrder.dto.js b/AIWebQuickDeploy/dist/modules/order/dto/queryAllOrder.dto.js deleted file mode 100644 index d0d8e49..0000000 --- a/AIWebQuickDeploy/dist/modules/order/dto/queryAllOrder.dto.js +++ /dev/null @@ -1,42 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QuerAllOrderDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QuerAllOrderDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllOrderDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllOrderDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 99, description: '支付的用户id', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllOrderDto.prototype, "userId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'epay', description: '支付的平台', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QuerAllOrderDto.prototype, "platform", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '订单状态', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QuerAllOrderDto.prototype, "status", void 0); -exports.QuerAllOrderDto = QuerAllOrderDto; diff --git a/AIWebQuickDeploy/dist/modules/order/dto/queryByOrder.dto.js b/AIWebQuickDeploy/dist/modules/order/dto/queryByOrder.dto.js deleted file mode 100644 index 1488fa5..0000000 --- a/AIWebQuickDeploy/dist/modules/order/dto/queryByOrder.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryByOrderIdDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class QueryByOrderIdDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'qwdadadwe-qeqwfcadqw-gguytewj', description: '订单ID', required: false }), - __metadata("design:type", String) -], QueryByOrderIdDto.prototype, "orderId", void 0); -exports.QueryByOrderIdDto = QueryByOrderIdDto; diff --git a/AIWebQuickDeploy/dist/modules/order/order.controller.js b/AIWebQuickDeploy/dist/modules/order/order.controller.js deleted file mode 100644 index ecada53..0000000 --- a/AIWebQuickDeploy/dist/modules/order/order.controller.js +++ /dev/null @@ -1,99 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OrderController = void 0; -const superAuth_guard_1 = require("./../../common/auth/superAuth.guard"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const order_service_1 = require("./order.service"); -const buy_dto_1 = require("./dto/buy.dto"); -const queryByOrder_dto_1 = require("./dto/queryByOrder.dto"); -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const queryAllOrder_dto_1 = require("./dto/queryAllOrder.dto"); -let OrderController = class OrderController { - constructor(orderService) { - this.orderService = orderService; - } - async buy(body, req) { - return this.orderService.buy(body, req); - } - async queryByOrderId(req, query) { - const { id: userId } = req.user; - return this.orderService.queryByOrderId(req, query); - } - async queryAllOrder(query) { - return this.orderService.queryAllOrder(query); - } - async deleteOrder(body) { - return this.orderService.deleteOrder(body); - } - async deleteNotPay() { - return this.orderService.deleteNotPay(); - } -}; -__decorate([ - (0, common_1.Post)('buy'), - (0, swagger_1.ApiOperation)({ summary: '购买商品' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [buy_dto_1.BuyDto, Object]), - __metadata("design:returntype", Promise) -], OrderController.prototype, "buy", null); -__decorate([ - (0, common_1.Get)('queryByOrderId'), - (0, swagger_1.ApiOperation)({ summary: '查询订单' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, queryByOrder_dto_1.QueryByOrderIdDto]), - __metadata("design:returntype", Promise) -], OrderController.prototype, "queryByOrderId", null); -__decorate([ - (0, common_1.Get)('queryAll'), - (0, swagger_1.ApiOperation)({ summary: '查询所有订单' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryAllOrder_dto_1.QuerAllOrderDto]), - __metadata("design:returntype", Promise) -], OrderController.prototype, "queryAllOrder", null); -__decorate([ - (0, common_1.Post)('delete'), - (0, swagger_1.ApiOperation)({ summary: '删除订单' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryByOrder_dto_1.QueryByOrderIdDto]), - __metadata("design:returntype", Promise) -], OrderController.prototype, "deleteOrder", null); -__decorate([ - (0, common_1.Post)('deleteNotPay'), - (0, swagger_1.ApiOperation)({ summary: '删除未支付订单' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], OrderController.prototype, "deleteNotPay", null); -OrderController = __decorate([ - (0, swagger_1.ApiTags)('Order'), - (0, common_1.Controller)('order'), - __metadata("design:paramtypes", [order_service_1.OrderService]) -], OrderController); -exports.OrderController = OrderController; diff --git a/AIWebQuickDeploy/dist/modules/order/order.entity.js b/AIWebQuickDeploy/dist/modules/order/order.entity.js deleted file mode 100644 index 4b038b8..0000000 --- a/AIWebQuickDeploy/dist/modules/order/order.entity.js +++ /dev/null @@ -1,64 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OrderEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let OrderEntity = class OrderEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ unique: true, comment: '订单ID', length: 64 }), - __metadata("design:type", String) -], OrderEntity.prototype, "orderId", void 0); -__decorate([ - (0, typeorm_1.Column)({ unique: true, comment: '交易ID(服务商)', length: 32, nullable: true }), - __metadata("design:type", String) -], OrderEntity.prototype, "tradeId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '支付平台【epay|hupi|ltzf】)', length: 32, nullable: true }), - __metadata("design:type", String) -], OrderEntity.prototype, "payPlatform", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '用户ID', nullable: true }), - __metadata("design:type", Number) -], OrderEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '商品ID', nullable: true }), - __metadata("design:type", Number) -], OrderEntity.prototype, "goodsId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '数量', default: 1 }), - __metadata("design:type", Number) -], OrderEntity.prototype, "count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐价格¥', type: 'decimal', scale: 2, precision: 10 }), - __metadata("design:type", Number) -], OrderEntity.prototype, "price", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '订单总金额', type: 'decimal', scale: 2, precision: 10 }), - __metadata("design:type", Number) -], OrderEntity.prototype, "total", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '订单状态(0:未支付、1:已支付、2、支付失败、3:支付超时)', default: 0 }), - __metadata("design:type", Number) -], OrderEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ type: 'datetime', length: 0, nullable: true, comment: '支付时间' }), - __metadata("design:type", Date) -], OrderEntity.prototype, "paydAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '支付渠道)', length: 32, nullable: true }), - __metadata("design:type", String) -], OrderEntity.prototype, "channel", void 0); -OrderEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'order' }) -], OrderEntity); -exports.OrderEntity = OrderEntity; diff --git a/AIWebQuickDeploy/dist/modules/order/order.module.js b/AIWebQuickDeploy/dist/modules/order/order.module.js deleted file mode 100644 index 3193214..0000000 --- a/AIWebQuickDeploy/dist/modules/order/order.module.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OrderModule = void 0; -const cramiPackage_entity_1 = require("./../crami/cramiPackage.entity"); -const common_1 = require("@nestjs/common"); -const order_controller_1 = require("./order.controller"); -const order_service_1 = require("./order.service"); -const order_entity_1 = require("./order.entity"); -const typeorm_1 = require("@nestjs/typeorm"); -const user_entity_1 = require("../user/user.entity"); -let OrderModule = class OrderModule { -}; -OrderModule = __decorate([ - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([order_entity_1.OrderEntity, cramiPackage_entity_1.CramiPackageEntity, user_entity_1.UserEntity])], - controllers: [order_controller_1.OrderController], - providers: [order_service_1.OrderService], - }) -], OrderModule); -exports.OrderModule = OrderModule; diff --git a/AIWebQuickDeploy/dist/modules/order/order.service.js b/AIWebQuickDeploy/dist/modules/order/order.service.js deleted file mode 100644 index 86bb890..0000000 --- a/AIWebQuickDeploy/dist/modules/order/order.service.js +++ /dev/null @@ -1,128 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.OrderService = void 0; -const user_entity_1 = require("./../user/user.entity"); -const typeorm_1 = require("@nestjs/typeorm"); -const common_1 = require("@nestjs/common"); -const typeorm_2 = require("typeorm"); -const order_entity_1 = require("./order.entity"); -const cramiPackage_entity_1 = require("../crami/cramiPackage.entity"); -const utils_1 = require("../../common/utils"); -const pay_service_1 = require("../pay/pay.service"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -let OrderService = class OrderService { - constructor(orderEntity, cramiPackageEntity, userEntity, payService, globalConfigService) { - this.orderEntity = orderEntity; - this.cramiPackageEntity = cramiPackageEntity; - this.userEntity = userEntity; - this.payService = payService; - this.globalConfigService = globalConfigService; - } - async buy(params, req) { - try { - const { goodsId, count = 1, payType } = params; - const { id: userId } = req.user; - if (userId > 1000000) { - throw new common_1.HttpException('请先注册账号后购买商品!', common_1.HttpStatus.UNAUTHORIZED); - } - const order = await this.create(userId, goodsId, count, payType); - const res = await this.payService.pay(userId, order.orderId, payType); - return Object.assign(Object.assign({}, res), { orderId: order.orderId, platform: order.payPlatform, total: order.total }); - } - catch (error) { - if (error.status === 401) { - throw new common_1.HttpException(error.message, common_1.HttpStatus.UNAUTHORIZED); - } - throw new common_1.HttpException(error.message || '购买失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async queryByOrderId(req, params) { - const { id: userId } = req.user; - const { orderId } = params; - const order = await this.orderEntity.findOne({ where: { userId, orderId } }); - if (!order) - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - return order; - } - async create(userId, goodsId, count, payType) { - const payPlatform = await this.globalConfigService.queryPayType(); - const goods = await this.cramiPackageEntity.findOne({ where: { id: goodsId } }); - if (!goods) - throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); - const doc = {}; - doc['orderId'] = (0, utils_1.createOrderId)(); - doc['userId'] = userId; - doc['goodsId'] = goodsId; - doc['price'] = Number(goods.price); - doc['count'] = count; - doc['total'] = Number(goods.price) * count; - doc['payPlatform'] = payPlatform; - doc['channel'] = payType; - const order = await this.orderEntity.save(doc); - console.log('order: ', order); - return order; - } - async query(userId, page, size) { - return await this.orderEntity.findAndCount({ where: { userId }, order: { id: 'DESC' }, skip: (page - 1) * size, take: size }); - } - async queryAllOrder(params) { - const { page, size, userId, platform, status } = params; - const where = {}; - if (userId) - where['userId'] = userId; - if (platform) - where['payPlatform'] = platform; - if (status) - where['status'] = status; - const [rows, count] = await this.orderEntity.findAndCount({ order: { id: 'DESC' }, where, skip: (page - 1) * size, take: size }); - const userIds = rows.map((item) => item.userId); - const goodsIds = rows.map((item) => item.goodsId); - const userInfos = await this.userEntity.find({ where: { id: (0, typeorm_2.In)(userIds) }, select: ['id', 'username', 'email'] }); - const goodsInfos = await this.cramiPackageEntity.find({ where: { id: (0, typeorm_2.In)(goodsIds) }, select: ['id', 'name', 'coverImg', 'des'] }); - rows.forEach((item) => { - item.userInfo = userInfos.find((user) => user.id === item.userId); - item.goodsInfo = goodsInfos.find((goods) => goods.id === item.goodsId); - }); - const totalPrice = await this.orderEntity - .createQueryBuilder("order") - .where("order.status = :status", { status: 1 }) - .select("SUM(order.price)", "total_price") - .getRawOne(); - return Object.assign({ rows, count }, totalPrice); - } - async deleteOrder(body) { - const { orderId } = body; - const o = await this.orderEntity.findOne({ where: { orderId } }); - if (!o) { - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - } - return await this.orderEntity.delete({ orderId }); - } - async deleteNotPay() { - return await this.orderEntity.delete({ status: 0 }); - } -}; -OrderService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(order_entity_1.OrderEntity)), - __param(1, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)), - __param(2, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - pay_service_1.PayService, - globalConfig_service_1.GlobalConfigService]) -], OrderService); -exports.OrderService = OrderService; diff --git a/AIWebQuickDeploy/dist/modules/pay/dto/pay.dto.js b/AIWebQuickDeploy/dist/modules/pay/dto/pay.dto.js deleted file mode 100644 index 7247bf8..0000000 --- a/AIWebQuickDeploy/dist/modules/pay/dto/pay.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PayDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class PayDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '订单号', required: true }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], PayDto.prototype, "orderId", void 0); -exports.PayDto = PayDto; diff --git a/AIWebQuickDeploy/dist/modules/pay/pay.controller.js b/AIWebQuickDeploy/dist/modules/pay/pay.controller.js deleted file mode 100644 index 05e2901..0000000 --- a/AIWebQuickDeploy/dist/modules/pay/pay.controller.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PayController = void 0; -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const pay_service_1 = require("./pay.service"); -let PayController = class PayController { - constructor(payService) { - this.payService = payService; - } - notifyHupi(body) { - console.log('hupi ->body: ', body); - return this.payService.notify(body); - } - notifyLtzf(body) { - console.log('ltzf ->body: ', body); - return this.payService.notify(body); - } - notifyEpay(query) { - console.log('epay ->query: ', query); - return this.payService.notify(query); - } -}; -__decorate([ - (0, common_1.Post)('notify'), - (0, swagger_1.ApiOperation)({ summary: 'hupi支付结果通知' }), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], PayController.prototype, "notifyHupi", null); -__decorate([ - (0, common_1.Post)('notify'), - (0, swagger_1.ApiOperation)({ summary: 'ltzf支付结果通知' }), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], PayController.prototype, "notifyLtzf", null); -__decorate([ - (0, common_1.Get)('notify'), - (0, swagger_1.ApiOperation)({ summary: 'Epay支付结果通知' }), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], PayController.prototype, "notifyEpay", null); -PayController = __decorate([ - (0, common_1.Controller)('pay'), - (0, swagger_1.ApiTags)('pay'), - __metadata("design:paramtypes", [pay_service_1.PayService]) -], PayController); -exports.PayController = PayController; diff --git a/AIWebQuickDeploy/dist/modules/pay/pay.module.js b/AIWebQuickDeploy/dist/modules/pay/pay.module.js deleted file mode 100644 index 1d49e69..0000000 --- a/AIWebQuickDeploy/dist/modules/pay/pay.module.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PayModule = void 0; -const common_1 = require("@nestjs/common"); -const pay_controller_1 = require("./pay.controller"); -const pay_service_1 = require("./pay.service"); -const order_entity_1 = require("../order/order.entity"); -const cramiPackage_entity_1 = require("../crami/cramiPackage.entity"); -const typeorm_1 = require("@nestjs/typeorm"); -let PayModule = class PayModule { -}; -PayModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([order_entity_1.OrderEntity, cramiPackage_entity_1.CramiPackageEntity])], - controllers: [pay_controller_1.PayController], - providers: [pay_service_1.PayService], - exports: [pay_service_1.PayService], - }) -], PayModule); -exports.PayModule = PayModule; diff --git a/AIWebQuickDeploy/dist/modules/pay/pay.service.js b/AIWebQuickDeploy/dist/modules/pay/pay.service.js deleted file mode 100644 index 2e7baa3..0000000 --- a/AIWebQuickDeploy/dist/modules/pay/pay.service.js +++ /dev/null @@ -1,613 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PayService = void 0; -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const axios_1 = require("axios"); -const crypto = require("crypto"); -const typeorm_2 = require("typeorm"); -const cramiPackage_entity_1 = require("../crami/cramiPackage.entity"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const order_entity_1 = require("../order/order.entity"); -const user_service_1 = require("../user/user.service"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -let PayService = class PayService { - constructor(cramiPackageEntity, orderEntity, userBalanceService, globalConfigService, userService) { - this.cramiPackageEntity = cramiPackageEntity; - this.orderEntity = orderEntity; - this.userBalanceService = userBalanceService; - this.globalConfigService = globalConfigService; - this.userService = userService; - } - async onModuleInit() { - const wpay = await (0, utils_1.importDynamic)('wechatpay-node-v3'); - this.WxPay = (wpay === null || wpay === void 0 ? void 0 : wpay.default) ? wpay.default : wpay; - } - async notify(params) { - if (params['param'] == 'epay') { - return this.notifyEpay(params); - } - if (params['attach'] == 'hupi') { - return this.notifyHupi(params); - } - if (params['attach'] == 'ltzf') { - return this.notifyLtzf(params); - } - if (typeof params['resource'] == 'object') { - return this.notifyWeChat(params); - } - return this.notifyMpay(params); - } - async pay(userId, orderId, payType = 'wxpay') { - const order = await this.orderEntity.findOne({ - where: { userId, orderId }, - }); - if (!order) - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - const goods = await this.cramiPackageEntity.findOne({ - where: { id: order.goodsId }, - }); - if (!goods) - throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); - common_1.Logger.log('本次支付类型: ', order.payPlatform); - try { - if (order.payPlatform == 'wechat') { - return this.payWeChat(userId, orderId, payType); - } - if (order.payPlatform == 'epay') { - return this.payEpay(userId, orderId, payType); - } - if (order.payPlatform == 'mpay') { - return this.payMpay(userId, orderId, payType); - } - if (order.payPlatform == 'hupi') { - return this.payHupi(userId, orderId, payType); - } - if (order.payPlatform == 'ltzf') { - return this.payLtzf(userId, orderId, payType); - } - } - catch (error) { - common_1.Logger.log('支付请求失败: ', error); - throw new common_1.HttpException('支付请求失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async query(orderId) { - const order = await this.orderEntity.findOne({ where: { orderId } }); - if (!order) - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - return order; - } - async notifyHupi(params) { - const payHupiSecret = await this.globalConfigService.getConfigs([ - 'payHupiSecret', - ]); - const hash = params['hash']; - delete params['hash']; - if (this.sign(params, payHupiSecret) != hash) - return 'failed'; - const order = await this.orderEntity.findOne({ - where: { orderId: params['trade_order_id'], status: 0 }, - }); - if (!order) - return 'failed'; - await this.userBalanceService.addBalanceToOrder(order); - const result = await this.orderEntity.update({ orderId: params['trade_order_id'] }, { status: 1, paydAt: new Date() }); - if (result.affected != 1) - return 'failed'; - return 'success'; - } - async payHupi(userId, orderId, payType = 'wxpay') { - const order = await this.orderEntity.findOne({ - where: { userId, orderId }, - }); - if (!order) - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - const goods = await this.cramiPackageEntity.findOne({ - where: { id: order.goodsId }, - }); - if (!goods) - throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); - const { payHupiAppId, payHupiSecret, payHupiNotifyUrl, payHupiReturnUrl, payHupiGatewayUrl, } = await this.globalConfigService.getConfigs([ - 'payHupiAppId', - 'payHupiSecret', - 'payHupiNotifyUrl', - 'payHupiReturnUrl', - 'payHupiGatewayUrl', - ]); - const params = {}; - params['version'] = '1.1'; - params['appid'] = payHupiAppId; - params['time'] = (Date.now() / 1000).toFixed(0); - params['nonce_str'] = (0, utils_1.createRandomNonceStr)(32); - params['trade_order_id'] = orderId; - params['title'] = goods.name; - params['total_fee'] = order.total; - params['notify_url'] = payHupiNotifyUrl; - params['return_url'] = payHupiReturnUrl; - params['attach'] = 'hupi'; - params['hash'] = this.sign(params, payHupiSecret); - const { data: { errcode, errmsg, url_qrcode, url }, } = await axios_1.default.post(payHupiGatewayUrl || 'https://api.xunhupay.com/payment/do.html', params); - if (errcode != 0) - throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST); - return { url_qrcode, url }; - } - async queryHupi(orderId) { - const { payHupiAppId, payHupiSecret } = await this.globalConfigService.getConfigs([ - 'payHupiAppId', - 'payHupiSecret', - ]); - const params = {}; - params['version'] = '1.1'; - params['appid'] = payHupiAppId; - params['time'] = (Date.now() / 1000).toFixed(0); - params['nonce_str'] = (0, utils_1.createRandomNonceStr)(32); - params['out_trade_order'] = orderId; - params['hash'] = this.sign(params, payHupiSecret); - const { data: { errcode, errmsg, data: result }, } = await axios_1.default.post('https://api.xunhupay.com/payment/query.html', params); - if (errcode != 0) - throw new common_1.HttpException(errmsg, common_1.HttpStatus.BAD_REQUEST); - return result; - } - async notifyEpay(params) { - const sign = params['sign']; - delete params['sign']; - delete params['sign_type']; - const payEpaySecret = await this.globalConfigService.getConfigs([ - 'payEpaySecret', - ]); - if (this.sign(params, payEpaySecret) != sign) - return 'failed'; - common_1.Logger.log('校验签名通过'); - const order = await this.orderEntity.findOne({ - where: { orderId: params['out_trade_no'], status: 0 }, - }); - if (!order) - return 'failed'; - const status = params['trade_status'] == 'TRADE_SUCCESS' ? 1 : 2; - const result = await this.orderEntity.update({ orderId: params['out_trade_no'] }, { status, paydAt: new Date() }); - if (status === 1) { - await this.userBalanceService.addBalanceToOrder(order); - } - if (result.affected != 1) - return 'failed'; - return 'success'; - } - async payEpay(userId, orderId, payType = 'alipay') { - const order = await this.orderEntity.findOne({ - where: { userId, orderId }, - }); - if (!order) - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - const goods = await this.cramiPackageEntity.findOne({ - where: { id: order.goodsId }, - }); - if (!goods) - throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); - const { payEpayPid, payEpaySecret, payEpayNotifyUrl, payEpayReturnUrl, payEpayApiPayUrl, } = await this.globalConfigService.getConfigs([ - 'payEpayPid', - 'payEpaySecret', - 'payEpayNotifyUrl', - 'payEpayReturnUrl', - 'payEpayApiPayUrl', - ]); - let convertedNumber; - if (payEpayPid.length <= 16) { - convertedNumber = Number(payEpayPid); - } - else { - convertedNumber = BigInt(payEpayPid); - } - const params = {}; - params['pid'] = convertedNumber; - params['type'] = payType; - params['out_trade_no'] = orderId; - params['name'] = goods.name; - params['money'] = order.total; - params['clientip'] = '192.168.1.100'; - params['device'] = 'pc'; - params['notify_url'] = payEpayNotifyUrl; - params['return_url'] = payEpayReturnUrl; - params['param'] = 'epay'; - params['sign'] = this.sign(params, payEpaySecret); - params['sign_type'] = 'MD5'; - const queryParams = new URLSearchParams(params).toString(); - const apiUrl = `${payEpayApiPayUrl}?${queryParams}`; - if (payEpayApiPayUrl.includes('submit.php')) { - return { - url_qrcode: null, - redirectUrl: apiUrl, - channel: payType, - isRedirect: true, - }; - } - else { - const config = { - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - }; - const res = await axios_1.default.post(payEpayApiPayUrl, params, config); - common_1.Logger.log('epay ---> res: ', res.data); - const { data: { code, msg, qrcode: url_qrcode }, } = res; - if (code != 1) - throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); - return { - url_qrcode, - redirectUrl: null, - channel: payType, - isRedirect: false, - }; - } - } - async queryEpay(orderId) { - const { payEpayPid, payEpaySecret, payEpayApiQueryUrl } = await this.globalConfigService.getConfigs([ - 'payEpayPid', - 'payEpaySecret', - 'payEpayApiQueryUrl', - ]); - const params = {}; - params['act'] = 'order'; - params['out_trade_no'] = orderId; - params['pid'] = payEpayPid; - params['key'] = payEpaySecret; - const { data: { code, msg, data: result }, } = await axios_1.default.get(payEpayApiQueryUrl, { params }); - if (code != 1) - throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); - return result; - } - async notifyMpay(params) { - const sign = params['sign']; - delete params['sign']; - delete params['sign_type']; - const payMpaySecret = await this.globalConfigService.getConfigs([ - 'payMpaySecret', - ]); - common_1.Logger.log('校验签名'); - if (this.sign(params, payMpaySecret) != sign) - return 'failed'; - common_1.Logger.log('校验签名通过'); - const order = await this.orderEntity.findOne({ - where: { orderId: params['out_trade_no'], status: 0 }, - }); - if (!order) - return 'failed'; - const status = params['trade_status'] == 'TRADE_SUCCESS' ? 1 : 2; - common_1.Logger.log('status: ', status); - const result = await this.orderEntity.update({ orderId: params['out_trade_no'] }, { status, paydAt: new Date() }); - if (status === 1) { - await this.userBalanceService.addBalanceToOrder(order); - } - if (result.affected != 1) - return 'failed'; - return 'success'; - } - async payMpay(userId, orderId, payType = 'wxpay') { - const order = await this.orderEntity.findOne({ - where: { userId, orderId }, - }); - if (!order) - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - const goods = await this.cramiPackageEntity.findOne({ - where: { id: order.goodsId }, - }); - if (!goods) - throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); - const { payMpayPid, payMpaySecret, payMpayNotifyUrl, payMpayReturnUrl, payMpayApiPayUrl, } = await this.globalConfigService.getConfigs([ - 'payMpayPid', - 'payMpaySecret', - 'payMpayNotifyUrl', - 'payMpayReturnUrl', - 'payMpayApiPayUrl', - ]); - const params = {}; - params['pid'] = Number(payMpayPid); - params['type'] = payType; - params['out_trade_no'] = orderId; - params['name'] = goods.name; - params['money'] = order.total; - params['notify_url'] = payMpayNotifyUrl; - params['return_url'] = payMpayReturnUrl; - params['sign'] = this.sign(params, payMpaySecret); - params['sign_type'] = 'MD5'; - const queryParams = new URLSearchParams(params).toString(); - const apiUrl = `${payMpayApiPayUrl}?${queryParams}`; - return { - url_qrcode: null, - redirectUrl: apiUrl, - channel: payType, - isRedirect: true, - }; - const res = await axios_1.default.get(payMpayApiPayUrl, { params }); - } - async queryMpay(orderId) { - const { payMpayApiQueryUrl } = await this.globalConfigService.getConfigs([ - 'payMpayPid', - 'payMpaySecret', - 'payMpayApiQueryUrl', - ]); - const params = {}; - params['type'] = 2; - params['order_no'] = orderId; - const { data: { code, msg, data: result }, } = await axios_1.default.get(payMpayApiQueryUrl, { params }); - if (code != 1) - throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); - return result; - } - async notifyWeChat(params) { - common_1.Logger.log('微信支付通知params: ', params); - const { payWeChatAppId, payWeChatMchId, payWeChatSecret, payWeChatPublicKey, payWeChatPrivateKey, } = await this.globalConfigService.getConfigs([ - 'payWeChatAppId', - 'payWeChatMchId', - 'payWeChatSecret', - 'payWeChatPublicKey', - 'payWeChatPrivateKey', - ]); - const pay = new this.WxPay({ - appid: payWeChatAppId, - mchid: payWeChatMchId, - publicKey: payWeChatPublicKey, - privateKey: payWeChatPrivateKey, - }); - try { - if (params['event_type'] == 'TRANSACTION.SUCCESS') { - const { ciphertext, associated_data, nonce } = params['resource']; - const resource = pay.decipher_gcm(ciphertext, associated_data, nonce, payWeChatSecret); - const order = await this.orderEntity.findOne({ - where: { orderId: resource['out_trade_no'], status: 0 }, - }); - if (!order) - return 'failed'; - const status = resource['trade_state'] == 'SUCCESS' ? 1 : 2; - const result = await this.orderEntity.update({ orderId: resource['out_trade_no'] }, { status, paydAt: new Date() }); - if (status === 1) { - await this.userBalanceService.addBalanceToOrder(order); - } - if (result.affected != 1) - return 'failed'; - } - return 'success'; - } - catch (error) { - common_1.Logger.log('error: ', error); - common_1.Logger.log('支付通知验证失败: ', error); - return 'failed'; - } - } - async payWeChat(userId, orderId, payType = 'native') { - var _a, _b, _c, _d, _e, _f, _g; - common_1.Logger.log('payType: ', payType); - const order = await this.orderEntity.findOne({ - where: { userId, orderId }, - }); - if (!order) - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - const goods = await this.cramiPackageEntity.findOne({ - where: { id: order.goodsId }, - }); - if (!goods) - throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); - const { payWeChatAppId, payWeChatMchId, payWeChatPublicKey, payWeChatPrivateKey, payWeChatNotifyUrl, } = await this.globalConfigService.getConfigs([ - 'payWeChatAppId', - 'payWeChatMchId', - 'payWeChatPublicKey', - 'payWeChatPrivateKey', - 'payWeChatNotifyUrl', - ]); - const pay = new this.WxPay({ - appid: payWeChatAppId, - mchid: payWeChatMchId, - publicKey: payWeChatPublicKey, - privateKey: payWeChatPrivateKey, - }); - const params = { - appid: payWeChatAppId, - mchid: payWeChatMchId, - description: goods.name, - out_trade_no: orderId, - notify_url: payWeChatNotifyUrl, - amount: { - total: Math.round(order.total * 100), - }, - }; - common_1.Logger.log('wechat-pay: ', params); - if (payType == 'jsapi') { - common_1.Logger.log(`[WeChat Pay JSAPI] 开始JSAPI支付流程,用户ID: ${userId}, 订单ID: ${orderId}`); - const openid = await this.userService.getOpenIdByUserId(userId); - common_1.Logger.log(`[WeChat Pay JSAPI] 用户OpenID: ${openid}`); - params['payer'] = { openid: openid }; - common_1.Logger.log(`[WeChat Pay JSAPI] 发送支付请求参数: `, JSON.stringify(params, null, 2)); - try { - const response = await pay.transactions_jsapi(params); - const result = response.data ? response.data : response; - common_1.Logger.log(`[WeChat Pay JSAPI] 支付请求成功,返回结果: `, JSON.stringify(result, null, 2)); - return { - status: response.status || 'unknown', - appId: result.appId || ((_a = result.data) === null || _a === void 0 ? void 0 : _a.appId), - timeStamp: result.timeStamp || ((_b = result.data) === null || _b === void 0 ? void 0 : _b.timeStamp), - nonceStr: result.nonceStr || ((_c = result.data) === null || _c === void 0 ? void 0 : _c.nonceStr), - package: result.package || ((_d = result.data) === null || _d === void 0 ? void 0 : _d.package), - signType: result.signType || ((_e = result.data) === null || _e === void 0 ? void 0 : _e.signType), - paySign: result.paySign || ((_f = result.data) === null || _f === void 0 ? void 0 : _f.paySign), - }; - } - catch (error) { - console.error(`[WeChat Pay JSAPI] 支付请求过程中发生错误: ${error.message}`, error); - console.error('[WeChat Pay JSAPI] 完整的错误对象:', error); - throw new common_1.HttpException('JSAPI支付失败', common_1.HttpStatus.BAD_REQUEST); - } - } - if (payType == 'native') { - common_1.Logger.log(`开始进行微信Native支付流程,订单ID: ${orderId}, 用户ID: ${userId}`); - try { - const res = await pay.transactions_native(params); - common_1.Logger.log(`微信Native支付响应数据: `, JSON.stringify(res, null, 2)); - let url_qrcode = res.code_url || ((_g = res.data) === null || _g === void 0 ? void 0 : _g.code_url); - if (!url_qrcode) { - console.error(`微信Native支付请求成功,但未返回code_url,响应数据: `, JSON.stringify(res, null, 2)); - } - else { - common_1.Logger.log(`微信Native支付请求成功,code_url: ${url_qrcode}`); - } - return { url_qrcode, isRedirect: false }; - } - catch (error) { - console.error(`微信Native支付过程中发生错误,错误信息: ${error.message}`, error); - console.error('完整的错误对象:', error); - throw new common_1.HttpException('微信Native支付失败', common_1.HttpStatus.BAD_REQUEST); - } - } - else { - console.warn(`支付请求使用了不支持的支付类型: ${payType}`); - throw new common_1.HttpException('unsupported pay type', common_1.HttpStatus.BAD_REQUEST); - } - } - async queryWeChat(orderId) { - const { payWeChatAppId, payWeChatMchId, payWeChatPublicKey, payWeChatPrivateKey, payWeChatNotifyUrl, } = await this.globalConfigService.getConfigs([ - 'payWeChatAppId', - 'payWeChatMchId', - 'payWeChatPublicKey', - 'payWeChatPrivateKey', - ]); - const pay = new this.WxPay({ - appid: payWeChatAppId, - mchid: payWeChatMchId, - publicKey: payWeChatPublicKey, - privateKey: payWeChatPrivateKey, - }); - const result = await pay.query({ out_trade_no: orderId }); - return result; - } - sign(params, secret) { - const str = Object.keys(params) - .sort() - .map((key) => `${key}=${params[key]}`) - .join('&') + secret; - return crypto.createHash('md5').update(str).digest('hex'); - } - ltzfSign(params, secret) { - const paramsArr = Object.keys(params); - paramsArr.sort(); - const stringArr = []; - paramsArr.map((key) => { - stringArr.push(key + '=' + params[key]); - }); - stringArr.push('key=' + secret); - const str = stringArr.join('&'); - return crypto.createHash('md5').update(str).digest('hex').toUpperCase(); - } - async payLtzf(userId, orderId, payType = 'wxpay') { - const order = await this.orderEntity.findOne({ - where: { userId, orderId }, - }); - if (!order) - throw new common_1.HttpException('订单不存在!', common_1.HttpStatus.BAD_REQUEST); - const goods = await this.cramiPackageEntity.findOne({ - where: { id: order.goodsId }, - }); - if (!goods) - throw new common_1.HttpException('套餐不存在!', common_1.HttpStatus.BAD_REQUEST); - const { payLtzfMchId, payLtzfSecret, payLtzfNotifyUrl, payLtzfReturnUrl } = await this.globalConfigService.getConfigs([ - 'payLtzfMchId', - 'payLtzfSecret', - 'payLtzfNotifyUrl', - 'payLtzfReturnUrl', - ]); - const params = {}; - params['mch_id'] = payLtzfMchId; - params['timestamp'] = (Date.now() / 1000).toFixed(0); - params['out_trade_no'] = orderId; - params['body'] = goods.name; - params['total_fee'] = order.total; - params['notify_url'] = payLtzfNotifyUrl; - params['sign'] = this.ltzfSign(params, payLtzfSecret); - params['attach'] = 'ltzf'; - params['return_url'] = payLtzfReturnUrl; - const formBody = Object.keys(params) - .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(params[key])) - .join('&'); - const config = { - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - }; - const response = await axios_1.default.post('https://api.ltzf.cn/api/wxpay/jsapi_convenient', formBody, config); - const { code, data, msg } = response.data; - if (code != 0) - throw new common_1.HttpException(msg, common_1.HttpStatus.BAD_REQUEST); - const url_qrcode = data.QRcode_url; - const url = data.order_url; - return { url_qrcode, url }; - } - async queryLtzf(orderId) { - const { payLtzfMchId, payLtzfSecret } = await this.globalConfigService.getConfigs([ - 'payLtzfMchId', - 'payLtzfSecret', - ]); - const params = {}; - params['mch_id'] = payLtzfMchId; - params['timestamp'] = (Date.now() / 1000).toFixed(0); - params['out_trade_no'] = orderId; - params['sign'] = this.ltzfSign(params, payLtzfSecret); - const formBody = Object.keys(params) - .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(params[key])) - .join('&'); - const config = { - headers: { - 'Content-Type': 'application/x-www-form-urlencoded', - }, - }; - const { data: { code, msg, data: result }, } = await axios_1.default.post('https://api.ltzf.cn/api/wxpay/get_pay_order', formBody, config); - if (code != 0) - throw new common_1.HttpException(msg + JSON.stringify(params), common_1.HttpStatus.BAD_REQUEST); - return result; - } - async notifyLtzf(params) { - const payLtzfSecret = await this.globalConfigService.getConfigs([ - 'payLtzfSecret', - ]); - const hash = params['sign']; - delete params['sign']; - delete params['pay_channel']; - delete params['trade_type']; - delete params['success_time']; - delete params['attach']; - delete params['openid']; - if (this.ltzfSign(params, payLtzfSecret) != hash) - return 'FAIL'; - const order = await this.orderEntity.findOne({ - where: { orderId: params['out_trade_no'], status: 0 }, - }); - if (!order) - return 'FAIL'; - await this.userBalanceService.addBalanceToOrder(order); - const result = await this.orderEntity.update({ orderId: params['out_trade_no'] }, { status: 1, paydAt: new Date() }); - if (result.affected != 1) - return 'FAIL'; - return 'SUCCESS'; - } -}; -PayService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)), - __param(1, (0, typeorm_1.InjectRepository)(order_entity_1.OrderEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - userBalance_service_1.UserBalanceService, - globalConfig_service_1.GlobalConfigService, - user_service_1.UserService]) -], PayService); -exports.PayService = PayService; diff --git a/AIWebQuickDeploy/dist/modules/plugin/plugin.controller.js b/AIWebQuickDeploy/dist/modules/plugin/plugin.controller.js deleted file mode 100644 index d74e1b2..0000000 --- a/AIWebQuickDeploy/dist/modules/plugin/plugin.controller.js +++ /dev/null @@ -1,80 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PluginController = void 0; -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const plugin_service_1 = require("./plugin.service"); -let PluginController = class PluginController { - constructor(pluginService) { - this.pluginService = pluginService; - } - pluginList(req) { - return this.pluginService.pluginList(req); - } - createPlugin(body) { - return this.pluginService.createPlugin(body); - } - updatePlugin(body) { - return this.pluginService.updatePlugin(body); - } - delPlugin(body) { - return this.pluginService.delPlugin(body); - } -}; -__decorate([ - (0, common_1.Get)('pluginList'), - (0, swagger_1.ApiOperation)({ summary: '获取Plugin' }), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], PluginController.prototype, "pluginList", null); -__decorate([ - (0, common_1.Post)('createPlugin'), - (0, swagger_1.ApiOperation)({ summary: '创建Plugin' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], PluginController.prototype, "createPlugin", null); -__decorate([ - (0, common_1.Post)('updatePlugin'), - (0, swagger_1.ApiOperation)({ summary: '修改插件' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], PluginController.prototype, "updatePlugin", null); -__decorate([ - (0, common_1.Post)('delPlugin'), - (0, swagger_1.ApiOperation)({ summary: '删除插件' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", void 0) -], PluginController.prototype, "delPlugin", null); -PluginController = __decorate([ - (0, swagger_1.ApiTags)('Plugin'), - (0, common_1.Controller)('plugin'), - __metadata("design:paramtypes", [plugin_service_1.PluginService]) -], PluginController); -exports.PluginController = PluginController; diff --git a/AIWebQuickDeploy/dist/modules/plugin/plugin.entity.js b/AIWebQuickDeploy/dist/modules/plugin/plugin.entity.js deleted file mode 100644 index 0e38af3..0000000 --- a/AIWebQuickDeploy/dist/modules/plugin/plugin.entity.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PluginEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let PluginEntity = class PluginEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ unique: true, comment: '插件名称' }), - __metadata("design:type", String) -], PluginEntity.prototype, "name", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '插件封面', nullable: true, type: 'text' }), - __metadata("design:type", String) -], PluginEntity.prototype, "pluginImg", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '插件描述' }), - __metadata("design:type", String) -], PluginEntity.prototype, "description", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '插件是否启用 0:禁用 1:启用', default: 1 }), - __metadata("design:type", Number) -], PluginEntity.prototype, "isEnabled", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '调用参数', type: 'text' }), - __metadata("design:type", String) -], PluginEntity.prototype, "parameters", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '排序值', default: 0 }), - __metadata("design:type", Number) -], PluginEntity.prototype, "sortOrder", void 0); -PluginEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'plugin' }) -], PluginEntity); -exports.PluginEntity = PluginEntity; diff --git a/AIWebQuickDeploy/dist/modules/plugin/plugin.module.js b/AIWebQuickDeploy/dist/modules/plugin/plugin.module.js deleted file mode 100644 index e4d3708..0000000 --- a/AIWebQuickDeploy/dist/modules/plugin/plugin.module.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PluginModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const plugin_controller_1 = require("./plugin.controller"); -const plugin_entity_1 = require("./plugin.entity"); -const plugin_service_1 = require("./plugin.service"); -let PluginModule = class PluginModule { -}; -PluginModule = __decorate([ - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([plugin_entity_1.PluginEntity])], - controllers: [plugin_controller_1.PluginController], - providers: [plugin_service_1.PluginService], - }) -], PluginModule); -exports.PluginModule = PluginModule; diff --git a/AIWebQuickDeploy/dist/modules/plugin/plugin.service.js b/AIWebQuickDeploy/dist/modules/plugin/plugin.service.js deleted file mode 100644 index 816dc34..0000000 --- a/AIWebQuickDeploy/dist/modules/plugin/plugin.service.js +++ /dev/null @@ -1,112 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.PluginService = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const models_service_1 = require("../models/models.service"); -const plugin_entity_1 = require("./plugin.entity"); -let PluginService = class PluginService { - constructor(PluginEntity, modelsService) { - this.PluginEntity = PluginEntity; - this.modelsService = modelsService; - } - async pluginList(query) { - const { page = 1, size = 100 } = query; - const rows = await this.PluginEntity.find({ - order: { sortOrder: 'ASC', id: 'DESC' }, - skip: (page - 1) * size, - take: size, - }); - const processedRows = await Promise.all(rows.map(async (plugin) => { - try { - const parameters = await this.modelsService.getCurrentModelKeyInfo(plugin.parameters); - const deductType = parameters.deductType; - return Object.assign(Object.assign({}, plugin), { deductType }); - } - catch (error) { - return Object.assign(Object.assign({}, plugin), { deductType: 0 }); - } - })); - const filteredRows = processedRows.filter((plugin) => plugin !== null); - return { rows: filteredRows, count: filteredRows.length }; - } - async createPlugin(body) { - const { name, pluginImg, description, isEnabled, parameters, sortOrder } = body; - const existingPlugin = await this.PluginEntity.findOne({ - where: { name }, - }); - if (existingPlugin) { - throw new common_1.HttpException('该插件名称已存在!', common_1.HttpStatus.BAD_REQUEST); - } - const newPlugin = this.PluginEntity.create({ - name, - pluginImg, - description, - isEnabled: isEnabled !== undefined ? isEnabled : 1, - parameters, - sortOrder: sortOrder !== undefined ? sortOrder : 0, - }); - return await this.PluginEntity.save(newPlugin); - } - async updatePlugin(body) { - const { id, name, pluginImg, description, isEnabled, parameters, sortOrder, } = body; - const existingPlugin = await this.PluginEntity.findOne({ - where: { id }, - }); - if (!existingPlugin) { - throw new common_1.HttpException('插件不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const duplicatePlugin = await this.PluginEntity.findOne({ - where: { name, id: (0, typeorm_2.Not)(id) }, - }); - if (duplicatePlugin) { - throw new common_1.HttpException('该插件名称已存在!', common_1.HttpStatus.BAD_REQUEST); - } - existingPlugin.name = name; - existingPlugin.pluginImg = pluginImg; - existingPlugin.description = description; - existingPlugin.isEnabled = - isEnabled !== undefined ? isEnabled : existingPlugin.isEnabled; - existingPlugin.parameters = parameters; - existingPlugin.sortOrder = - sortOrder !== undefined ? sortOrder : existingPlugin.sortOrder; - await this.PluginEntity.save(existingPlugin); - return '修改插件信息成功'; - } - async delPlugin(body) { - const { id } = body; - const existingPlugin = await this.PluginEntity.findOne({ - where: { id }, - }); - if (!existingPlugin) { - throw new common_1.HttpException('该插件不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const deleteResult = await this.PluginEntity.delete(id); - if (deleteResult.affected > 0) { - return '删除插件成功'; - } - else { - throw new common_1.HttpException('删除插件失败!', common_1.HttpStatus.BAD_REQUEST); - } - } -}; -PluginService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(plugin_entity_1.PluginEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - models_service_1.ModelsService]) -], PluginService); -exports.PluginService = PluginService; diff --git a/AIWebQuickDeploy/dist/modules/redisCache/dto/redis.dto.js b/AIWebQuickDeploy/dist/modules/redisCache/dto/redis.dto.js deleted file mode 100644 index dd81b92..0000000 --- a/AIWebQuickDeploy/dist/modules/redisCache/dto/redis.dto.js +++ /dev/null @@ -1,26 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RedisDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class RedisDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'name', description: '邮箱' }), - __metadata("design:type", String) -], RedisDto.prototype, "key", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '123456', description: '密码' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户密码不能为空!' }), - __metadata("design:type", String) -], RedisDto.prototype, "val", void 0); -exports.RedisDto = RedisDto; diff --git a/AIWebQuickDeploy/dist/modules/redisCache/redisCache.controller.js b/AIWebQuickDeploy/dist/modules/redisCache/redisCache.controller.js deleted file mode 100644 index a50de8d..0000000 --- a/AIWebQuickDeploy/dist/modules/redisCache/redisCache.controller.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RedisCacheController = void 0; -const redis_dto_1 = require("./dto/redis.dto"); -const redisCache_service_1 = require("./redisCache.service"); -const common_1 = require("@nestjs/common"); -let RedisCacheController = class RedisCacheController { - constructor(redisCacheService) { - this.redisCacheService = redisCacheService; - } - set(body) { - return this.redisCacheService.set(body); - } - get(body) { - return this.redisCacheService.get(body); - } -}; -__decorate([ - (0, common_1.Post)('set'), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [redis_dto_1.RedisDto]), - __metadata("design:returntype", void 0) -], RedisCacheController.prototype, "set", null); -__decorate([ - (0, common_1.Get)('get'), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [redis_dto_1.RedisDto]), - __metadata("design:returntype", void 0) -], RedisCacheController.prototype, "get", null); -RedisCacheController = __decorate([ - (0, common_1.Controller)('redisCache'), - __metadata("design:paramtypes", [redisCache_service_1.RedisCacheService]) -], RedisCacheController); -exports.RedisCacheController = RedisCacheController; diff --git a/AIWebQuickDeploy/dist/modules/redisCache/redisCache.module.js b/AIWebQuickDeploy/dist/modules/redisCache/redisCache.module.js deleted file mode 100644 index b3ac90c..0000000 --- a/AIWebQuickDeploy/dist/modules/redisCache/redisCache.module.js +++ /dev/null @@ -1,58 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RedisCacheModule = void 0; -const common_1 = require("@nestjs/common"); -const redis_1 = require("redis"); -const redisCache_controller_1 = require("./redisCache.controller"); -const redisCache_service_1 = require("./redisCache.service"); -let RedisCacheModule = class RedisCacheModule { -}; -RedisCacheModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [], - controllers: [redisCache_controller_1.RedisCacheController], - providers: [ - { - provide: 'REDIS_CLIENT', - useFactory: async () => { - const host = process.env.REDIS_HOST; - const port = parseInt(process.env.REDIS_PORT, 10); - const password = process.env.REDIS_PASSWORD; - const username = process.env.REDIS_USER; - const database = parseInt(process.env.REDIS_DB, 10) || 0; - if (!host || !port) { - common_1.Logger.error(`Please configure Redis config | 未配置 Redis 配置信息,请确认配置 Redis 服务以获得更好的体验`, 'RedisCacheModule'); - return; - } - const client = (0, redis_1.createClient)({ - socket: { - host, - port, - }, - username, - password, - database, - }); - client.on('ready', () => { - common_1.Logger.log(`Redis connection successful`, 'RedisCacheModule'); - }); - client.on('error', (err) => { - common_1.Logger.error(`Redis connection failed: ${err}`, 'RedisCacheModule'); - }); - await client.connect(); - return client; - }, - }, - redisCache_service_1.RedisCacheService, - ], - exports: ['REDIS_CLIENT', redisCache_service_1.RedisCacheService], - }) -], RedisCacheModule); -exports.RedisCacheModule = RedisCacheModule; diff --git a/AIWebQuickDeploy/dist/modules/redisCache/redisCache.service.js b/AIWebQuickDeploy/dist/modules/redisCache/redisCache.service.js deleted file mode 100644 index 6a96f4b..0000000 --- a/AIWebQuickDeploy/dist/modules/redisCache/redisCache.service.js +++ /dev/null @@ -1,83 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RedisCacheService = void 0; -const common_1 = require("@nestjs/common"); -let RedisCacheService = class RedisCacheService { - constructor(redisClient) { - this.redisClient = redisClient; - } - async get(body) { - const { key } = body; - const res = await this.redisClient.get(key); - return await this.redisClient.get(key); - } - async set(body, time) { - try { - const { key, val } = body; - await this.redisClient.set(key, val); - time && (await this.redisClient.expire(key, time)); - return; - } - catch (error) { - throw new common_1.HttpException(error, common_1.HttpStatus.BAD_REQUEST); - } - } - async getJwtSecret() { - const secret = await this.redisClient.get('JWT_SECRET'); - if (!secret) { - throw new Error('JWT secret not found in Redis'); - } - return secret; - } - async ttl(key) { - return await this.redisClient.ttl(key); - } - async del(body) { - const { key } = body; - await this.redisClient.del(key); - return; - } - async saveToken(userId, token) { - const tokens = await this.redisClient.zRange(`tokens:${userId}`, 0, -1); - await this.invalidateTokens(userId, tokens); - this.redisClient.set(`token:${userId}`, token); - } - async invalidateTokens(userId, tokens) { - tokens.forEach((token) => { - this.redisClient.del(`token:${userId}:${token}`); - }); - } - async checkTokenAuth(token, req) { - const { id: userId, role } = req.user; - if (role === 'visitor') - return true; - const storedToken = await this.redisClient.get(`token:${userId}`); - if (storedToken === null) { - await this.redisClient.set(`token:${userId}`, token); - return true; - } - if (storedToken !== token) { - if (['super', 'admin'].includes(role)) - return true; - throw new common_1.HttpException('您已在其他设备覆盖登录、请您重新登录!', common_1.HttpStatus.UNAUTHORIZED); - } - } -}; -RedisCacheService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, common_1.Inject)('REDIS_CLIENT')), - __metadata("design:paramtypes", [Object]) -], RedisCacheService); -exports.RedisCacheService = RedisCacheService; diff --git a/AIWebQuickDeploy/dist/modules/signin/signIn.entity.js b/AIWebQuickDeploy/dist/modules/signin/signIn.entity.js deleted file mode 100644 index e506938..0000000 --- a/AIWebQuickDeploy/dist/modules/signin/signIn.entity.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SigninEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let SigninEntity = class SigninEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户ID' }), - __metadata("design:type", Number) -], SigninEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '签到日期' }), - __metadata("design:type", String) -], SigninEntity.prototype, "signInDate", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '签到时间' }), - __metadata("design:type", Date) -], SigninEntity.prototype, "signInTime", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: false }), - __metadata("design:type", Boolean) -], SigninEntity.prototype, "isSigned", void 0); -SigninEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'signin' }) -], SigninEntity); -exports.SigninEntity = SigninEntity; diff --git a/AIWebQuickDeploy/dist/modules/signin/signin.controller.js b/AIWebQuickDeploy/dist/modules/signin/signin.controller.js deleted file mode 100644 index 45e26c1..0000000 --- a/AIWebQuickDeploy/dist/modules/signin/signin.controller.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SigninController = void 0; -const common_1 = require("@nestjs/common"); -const signin_service_1 = require("./signin.service"); -const swagger_1 = require("@nestjs/swagger"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -let SigninController = class SigninController { - constructor(signinService) { - this.signinService = signinService; - } - async sign(req) { - return await this.signinService.sign(req); - } - async getSigninLog(req) { - return await this.signinService.getSigninLog(req); - } -}; -__decorate([ - (0, common_1.Post)('sign'), - (0, swagger_1.ApiOperation)({ summary: '用户签到' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], SigninController.prototype, "sign", null); -__decorate([ - (0, common_1.Get)('signinLog'), - (0, swagger_1.ApiOperation)({ summary: '获取用户签到信息' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], SigninController.prototype, "getSigninLog", null); -SigninController = __decorate([ - (0, swagger_1.ApiTags)('signIn'), - (0, common_1.Controller)('signin'), - __metadata("design:paramtypes", [signin_service_1.SigninService]) -], SigninController); -exports.SigninController = SigninController; diff --git a/AIWebQuickDeploy/dist/modules/signin/signin.module.js b/AIWebQuickDeploy/dist/modules/signin/signin.module.js deleted file mode 100644 index 205e7ef..0000000 --- a/AIWebQuickDeploy/dist/modules/signin/signin.module.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SigninModule = void 0; -const common_1 = require("@nestjs/common"); -const signin_controller_1 = require("./signin.controller"); -const signin_service_1 = require("./signin.service"); -const typeorm_1 = require("@nestjs/typeorm"); -const signIn_entity_1 = require("./signIn.entity"); -const user_entity_1 = require("../user/user.entity"); -let SigninModule = class SigninModule { -}; -SigninModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([signIn_entity_1.SigninEntity, user_entity_1.UserEntity])], - controllers: [signin_controller_1.SigninController], - providers: [signin_service_1.SigninService], - exports: [signin_service_1.SigninService], - }) -], SigninModule); -exports.SigninModule = SigninModule; diff --git a/AIWebQuickDeploy/dist/modules/signin/signin.service.js b/AIWebQuickDeploy/dist/modules/signin/signin.service.js deleted file mode 100644 index d126946..0000000 --- a/AIWebQuickDeploy/dist/modules/signin/signin.service.js +++ /dev/null @@ -1,117 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.SigninService = void 0; -const globalConfig_service_1 = require("./../globalConfig/globalConfig.service"); -const userBalance_service_1 = require("./../userBalance/userBalance.service"); -const common_1 = require("@nestjs/common"); -const signIn_entity_1 = require("./signIn.entity"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const date_1 = require("../../common/utils/date"); -const user_entity_1 = require("../user/user.entity"); -const balance_constant_1 = require("../../common/constants/balance.constant"); -let SigninService = class SigninService { - constructor(signinEntity, userEntity, userBalanceService, globalConfigService) { - this.signinEntity = signinEntity; - this.userEntity = userEntity; - this.userBalanceService = userBalanceService; - this.globalConfigService = globalConfigService; - } - async sign(req) { - const { id: userId } = req.user; - const formattedDate = (0, date_1.default)(new Date()).format('YYYY-MM-DD'); - const existingSignin = await this.signinEntity.findOne({ - where: { userId, signInDate: formattedDate }, - }); - if (existingSignin) { - throw new common_1.HttpException('今日已签到、改天再来吧!.', common_1.HttpStatus.BAD_REQUEST); - } - const { model3Count, model4Count, drawMjCount } = await this.globalConfigService.getSignatureGiftConfig(); - await this.signinEntity.save({ - userId: userId, - signInTime: new Date(), - signInDate: formattedDate, - isSigned: true, - }); - await this.userBalanceService.addBalanceToUser(userId, { model3Count, model4Count, drawMjCount }); - await this.userBalanceService.saveRecordRechargeLog({ userId, rechargeType: balance_constant_1.RechargeType.SIGN_IN, model3Count, model4Count, drawMjCount }); - const yesterday = (0, date_1.default)(new Date()).subtract(1, 'day').format('YYYY-MM-DD'); - const previousSignin = await this.signinEntity.findOne({ - where: { userId: userId, signInDate: yesterday }, - }); - if (previousSignin) { - common_1.Logger.debug(`用户${userId}昨天签到了、今天是连续签到!`, 'SigninService'); - const userInfo = await this.userEntity.findOne({ where: { id: userId } }); - if (!userInfo) { - throw new common_1.HttpException('用户不存在', common_1.HttpStatus.BAD_REQUEST); - } - const { consecutiveDays = 0 } = userInfo; - await this.userEntity.update({ id: userId }, { consecutiveDays: consecutiveDays + 1 }); - } - else { - common_1.Logger.debug(`用户${userId}昨天没签到、今天重置天数!`, 'SigninService'); - await this.userEntity.update({ id: userId }, { consecutiveDays: 1 }); - } - return 'Sign in successful.'; - } - async getSigninLog(req) { - try { - const { id: userId } = req.user; - const firstDay = (0, date_1.default)().startOf('month').format('YYYY-MM-DD HH:mm:ss'); - const lastDay = (0, date_1.default)().endOf('month').format('YYYY-MM-DD HH:mm:ss'); - const queryBuilder = this.signinEntity.createQueryBuilder('signin'); - const signInData = await queryBuilder - .select('signin.signInDate as signInDate, signin.isSigned as isSigned') - .andWhere('signin.userId = :userId', { userId: req.user.id }) - .andWhere('signin.signInTime >= :firstDay', { firstDay }) - .andWhere('signin.signInTime <= :lastDay', { lastDay }) - .getRawMany(); - const startDate = new Date(firstDay); - const endDate = new Date(lastDay); - const dateRange = []; - const currentDate = new Date(startDate); - while (currentDate <= endDate) { - dateRange.push((0, date_1.default)(new Date(currentDate)).format('YYYY-MM-DD')); - currentDate.setDate(currentDate.getDate() + 1); - } - const res = []; - for (const date of dateRange) { - const existingData = signInData.find((item) => item.signInDate === date); - if (!existingData) { - res.push({ signInDate: date, isSigned: false }); - } - else { - existingData.isSigned = true; - res.push(existingData); - } - } - return res; - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('获取签到数据失败!', common_1.HttpStatus.BAD_REQUEST); - } - } -}; -SigninService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(signIn_entity_1.SigninEntity)), - __param(1, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - userBalance_service_1.UserBalanceService, - globalConfig_service_1.GlobalConfigService]) -], SigninService); -exports.SigninService = SigninService; diff --git a/AIWebQuickDeploy/dist/modules/statistic/dto/queryStatisticDto.dto.js b/AIWebQuickDeploy/dist/modules/statistic/dto/queryStatisticDto.dto.js deleted file mode 100644 index 8dac718..0000000 --- a/AIWebQuickDeploy/dist/modules/statistic/dto/queryStatisticDto.dto.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryStatisticDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class QueryStatisticDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 7, description: '查询最近N天的数据', required: true }), - __metadata("design:type", Number) -], QueryStatisticDto.prototype, "days", void 0); -exports.QueryStatisticDto = QueryStatisticDto; diff --git a/AIWebQuickDeploy/dist/modules/statistic/statistic.controller.js b/AIWebQuickDeploy/dist/modules/statistic/statistic.controller.js deleted file mode 100644 index c650d33..0000000 --- a/AIWebQuickDeploy/dist/modules/statistic/statistic.controller.js +++ /dev/null @@ -1,69 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StatisticController = void 0; -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const queryStatisticDto_dto_1 = require("./dto/queryStatisticDto.dto"); -const statistic_service_1 = require("./statistic.service"); -let StatisticController = class StatisticController { - constructor(statisticService) { - this.statisticService = statisticService; - } - getBaseStatistic() { - return this.statisticService.getBaseStatistic(); - } - getChatStatistic(params) { - return this.statisticService.getChatStatistic(params); - } - getBaiduStatistics(params) { - return this.statisticService.getBaiduVisit(params); - } -}; -__decorate([ - (0, common_1.Get)('base'), - (0, swagger_1.ApiOperation)({ summary: '获取基础统计数据' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], StatisticController.prototype, "getBaseStatistic", null); -__decorate([ - (0, common_1.Get)('chatStatistic'), - (0, swagger_1.ApiOperation)({ summary: '获取聊天绘画统计数据' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryStatisticDto_dto_1.QueryStatisticDto]), - __metadata("design:returntype", void 0) -], StatisticController.prototype, "getChatStatistic", null); -__decorate([ - (0, common_1.Get)('baiduVisit'), - (0, swagger_1.ApiOperation)({ summary: '获取百度统计数据' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryStatisticDto_dto_1.QueryStatisticDto]), - __metadata("design:returntype", void 0) -], StatisticController.prototype, "getBaiduStatistics", null); -StatisticController = __decorate([ - (0, swagger_1.ApiTags)('statistic'), - (0, common_1.Controller)('statistic'), - __metadata("design:paramtypes", [statistic_service_1.StatisticService]) -], StatisticController); -exports.StatisticController = StatisticController; diff --git a/AIWebQuickDeploy/dist/modules/statistic/statistic.module.js b/AIWebQuickDeploy/dist/modules/statistic/statistic.module.js deleted file mode 100644 index f4f3844..0000000 --- a/AIWebQuickDeploy/dist/modules/statistic/statistic.module.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StatisticModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const config_entity_1 = require("../globalConfig/config.entity"); -const order_entity_1 = require("../order/order.entity"); -const user_entity_1 = require("../user/user.entity"); -const statistic_controller_1 = require("./statistic.controller"); -const statistic_service_1 = require("./statistic.service"); -let StatisticModule = class StatisticModule { -}; -StatisticModule = __decorate([ - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([ - user_entity_1.UserEntity, - chatLog_entity_1.ChatLogEntity, - config_entity_1.ConfigEntity, - order_entity_1.OrderEntity, - ]), - ], - controllers: [statistic_controller_1.StatisticController], - providers: [statistic_service_1.StatisticService], - }) -], StatisticModule); -exports.StatisticModule = StatisticModule; diff --git a/AIWebQuickDeploy/dist/modules/statistic/statistic.service.js b/AIWebQuickDeploy/dist/modules/statistic/statistic.service.js deleted file mode 100644 index e5f23c3..0000000 --- a/AIWebQuickDeploy/dist/modules/statistic/statistic.service.js +++ /dev/null @@ -1,280 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.StatisticService = void 0; -const balance_constant_1 = require("../../common/constants/balance.constant"); -const date_1 = require("../../common/utils/date"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const axios_1 = require("axios"); -const typeorm_2 = require("typeorm"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const config_entity_1 = require("../globalConfig/config.entity"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const order_entity_1 = require("../order/order.entity"); -const user_entity_1 = require("../user/user.entity"); -let StatisticService = class StatisticService { - constructor(userEntity, chatLogEntity, configEntity, orderEntity, globalConfigService) { - this.userEntity = userEntity; - this.chatLogEntity = chatLogEntity; - this.configEntity = configEntity; - this.orderEntity = orderEntity; - this.globalConfigService = globalConfigService; - } - async getBaseStatistic() { - const userCount = await this.countUsers(); - const newUserCount = await this.countNewUsersToday(); - const chatCount = await this.countChats(); - const newChatCount = await this.countNewChatsToday(); - const drawCount = await this.countDraws(); - const dellDrawCount = await this.countNewDrawsToday(); - const orderCount = await this.countOrders(); - const newOrderCount = await this.countNewOrdersToday(); - return { - userCount, - newUserCount, - chatCount, - newChatCount, - drawCount, - newDrawCount: dellDrawCount, - orderCount, - newOrderCount, - }; - } - async getChatStatistic({ days = 7 }) { - const chatData = await this.countChatsByTimeRange(days); - const drawData = await this.countDrawsByTimeRange(days); - return { - date: chatData.map((item) => item.date), - chat: chatData.map((item) => item.value), - draw: drawData.map((item, index) => { - return item.value; - }), - }; - } - async getBaiduVisit({ days = 7 }) { - const data = await this.getBaiduStatistics(days); - return data; - } - async countUsers() { - const userCount = await this.userEntity.count(); - return userCount; - } - async countNewUsersToday() { - const today = new Date(); - today.setHours(0, 0, 0, 0); - const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000); - const queryBuilder = this.userEntity.createQueryBuilder('user'); - const userCount = await queryBuilder - .where('user.createdAt >= :today', { today }) - .andWhere('user.createdAt < :tomorrow', { tomorrow }) - .getCount(); - return userCount; - } - async countChats() { - const chatCount = await this.chatLogEntity.count({ - where: { type: balance_constant_1.ChatType.NORMAL_CHAT }, - }); - return chatCount; - } - async countNewChatsToday() { - const today = new Date(); - today.setHours(0, 0, 0, 0); - const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000); - const queryBuilder = this.chatLogEntity.createQueryBuilder('chatLog'); - const chatCount = await queryBuilder - .where('chatLog.type = :type', { type: balance_constant_1.ChatType.NORMAL_CHAT }) - .andWhere('chatLog.createdAt >= :today', { today }) - .andWhere('chatLog.createdAt < :tomorrow', { tomorrow }) - .getCount(); - return chatCount; - } - async countDraws() { - const drawCount = await this.chatLogEntity.count({ - where: { type: balance_constant_1.ChatType.PAINT }, - }); - return drawCount; - } - async countNewDrawsToday() { - const today = new Date(); - today.setHours(0, 0, 0, 0); - const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000); - const queryBuilder = this.chatLogEntity.createQueryBuilder('chatLog'); - const drawCount = await queryBuilder - .where('chatLog.type = :type', { type: balance_constant_1.ChatType.PAINT }) - .andWhere('chatLog.createdAt >= :today', { today }) - .andWhere('chatLog.createdAt < :tomorrow', { tomorrow }) - .getCount(); - return drawCount; - } - async countChatsByTimeRange(days) { - var _a, _b; - const today = new Date(); - today.setHours(0, 0, 0, 0); - const startDate = new Date(today.getTime() - (days - 1) * 24 * 60 * 60 * 1000); - const queryBuilder = this.chatLogEntity.createQueryBuilder('chatlog'); - const result = await queryBuilder - .select(`DATE(chatlog.createdAt) as date, COUNT(*) as count`) - .where(`chatlog.type = :type`, { type: balance_constant_1.ChatType.NORMAL_CHAT }) - .andWhere('chatlog.createdAt >= :startDate', { startDate }) - .groupBy('date') - .orderBy('date') - .getRawMany(); - const dailyData = []; - const currentDate = startDate; - for (let i = 0; i < days; i++) { - const dateString = (0, date_1.formatDate)(new Date(currentDate), 'M.DD'); - const count = (_b = (_a = result.find((r) => (0, date_1.formatDate)(new Date(r.date), 'M.DD') === dateString)) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0; - if (count > 0) { - dailyData.push({ date: dateString, value: Number(count) }); - } - else { - dailyData.push({ date: dateString, value: 0 }); - } - currentDate.setDate(currentDate.getDate() + 1); - } - return dailyData; - } - async countDrawsByTimeRange(days) { - var _a, _b; - const today = new Date(); - today.setHours(0, 0, 0, 0); - const startDate = new Date(today.getTime() - (days - 1) * 24 * 60 * 60 * 1000); - const queryBuilder = this.chatLogEntity.createQueryBuilder('chatlog'); - const result = await queryBuilder - .select(`DATE(chatlog.createdAt) as date, COUNT(*) as count`) - .where(`chatlog.type = :type`, { type: balance_constant_1.ChatType.PAINT }) - .andWhere('chatlog.createdAt >= :startDate', { startDate }) - .groupBy('date') - .orderBy('date') - .getRawMany(); - const dailyData = []; - const currentDate = startDate; - for (let i = 0; i < days; i++) { - const dateString = (0, date_1.formatDate)(new Date(currentDate), 'M.DD'); - const count = (_b = (_a = result.find((r) => (0, date_1.formatDate)(new Date(r.date), 'M.DD') === dateString)) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0; - if (count > 0) { - dailyData.push({ date: dateString, value: Number(count) }); - } - else { - dailyData.push({ date: dateString, value: 0 }); - } - currentDate.setDate(currentDate.getDate() + 1); - } - return dailyData; - } - async getNewAccessToken(baiduApiKey, baiduSecretKey, baiduRefreshToken) { - const tokenUrl = `http://openapi.baidu.com/oauth/2.0/token?grant_type=refresh_token&refresh_token=${baiduRefreshToken}&client_id=${baiduApiKey}&client_secret=${baiduSecretKey}`; - common_1.Logger.log('获取新 accessToken', tokenUrl); - try { - const tokenRes = await axios_1.default.get(tokenUrl); - if (tokenRes.status === 200 && tokenRes.data.access_token) { - return { - accessToken: tokenRes.data.access_token, - refreshToken: tokenRes.data.refresh_token, - }; - } - else { - throw new Error('Failed to get new access token'); - } - } - catch (tokenError) { - common_1.Logger.error('获取新 accessToken 失败', { - message: tokenError.message, - stack: tokenError.stack, - response: tokenError.response - ? tokenError.response.data - : 'No response data', - }); - throw new common_1.HttpException('获取新 accessToken 失败', common_1.HttpStatus.BAD_REQUEST); - } - } - async updateAccessTokenInDatabase(accessToken, refreshToken, configEntity) { - await configEntity.update({ configKey: 'baiduToken' }, { configVal: accessToken }); - await configEntity.update({ configKey: 'baiduRefreshToken' }, { configVal: refreshToken }); - } - async getBaiduStatistics(days) { - const end_date = (0, date_1.formatDate)(new Date(), 'YYYYMMDD'); - const start_date = (0, date_1.formatDate)(new Date(Date.now() - Number(days - 1) * 24 * 60 * 60 * 1000), 'YYYYMMDD'); - const metrics = 'pv_count,visitor_count,ip_count,bounce_ratio,avg_visit_time'; - const method = 'overview/getTimeTrendRpt'; - const { baiduToken, baiduSiteId, baiduApiKey, baiduSecretKey, baiduRefreshToken, } = await this.globalConfigService.getConfigs([ - 'baiduToken', - 'baiduSiteId', - 'baiduApiKey', - 'baiduSecretKey', - 'baiduRefreshToken', - ]); - if (!baiduApiKey || !baiduSiteId || !baiduRefreshToken || !baiduSecretKey) { - return []; - } - let accessToken = baiduToken; - let res; - let url; - const fetchData = async (token) => { - url = `https://openapi.baidu.com/rest/2.0/tongji/report/getData?access_token=${token}&site_id=${baiduSiteId}&method=${method}&start_date=${start_date}&end_date=${end_date}&metrics=${metrics}`; - try { - return await axios_1.default.get(url); - } - catch (error) { - return { - data: { - error_code: 111, - message: 'Access token invalid or no longer valid', - }, - }; - } - }; - res = await fetchData(accessToken); - if (res.data.error_code === 111 || !baiduToken) { - const { accessToken: newAccessToken, refreshToken: newRefreshToken } = await this.getNewAccessToken(baiduApiKey, baiduSecretKey, baiduRefreshToken); - accessToken = newAccessToken; - await this.updateAccessTokenInDatabase(accessToken, newRefreshToken, this.configEntity); - res = await fetchData(accessToken); - } - const { error_code, message } = res.data; - if (error_code && error_code !== 200) { - throw new common_1.HttpException(message || '获取百度统计数据失败', common_1.HttpStatus.BAD_REQUEST); - } - return res.data.result; - } - async countOrders() { - const orderCount = await this.orderEntity.count(); - return orderCount; - } - async countNewOrdersToday() { - const today = new Date(); - today.setHours(0, 0, 0, 0); - const tomorrow = new Date(today.getTime() + 24 * 60 * 60 * 1000); - const queryBuilder = this.orderEntity.createQueryBuilder('order'); - const orderCount = await queryBuilder - .where('order.createdAt >= :today', { today }) - .andWhere('order.createdAt < :tomorrow', { tomorrow }) - .getCount(); - return orderCount; - } -}; -StatisticService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), - __param(1, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)), - __param(2, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), - __param(3, (0, typeorm_1.InjectRepository)(order_entity_1.OrderEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - globalConfig_service_1.GlobalConfigService]) -], StatisticService); -exports.StatisticService = StatisticService; diff --git a/AIWebQuickDeploy/dist/modules/task/task.module.js b/AIWebQuickDeploy/dist/modules/task/task.module.js deleted file mode 100644 index 76a68e3..0000000 --- a/AIWebQuickDeploy/dist/modules/task/task.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TaskModule = void 0; -const typeorm_1 = require("@nestjs/typeorm"); -const common_1 = require("@nestjs/common"); -const task_service_1 = require("./task.service"); -const schedule_1 = require("@nestjs/schedule"); -const userBalance_entity_1 = require("../userBalance/userBalance.entity"); -let TaskModule = class TaskModule { -}; -TaskModule = __decorate([ - (0, common_1.Module)({ - imports: [schedule_1.ScheduleModule.forRoot(), typeorm_1.TypeOrmModule.forFeature([userBalance_entity_1.UserBalanceEntity])], - providers: [task_service_1.TaskService], - }) -], TaskModule); -exports.TaskModule = TaskModule; diff --git a/AIWebQuickDeploy/dist/modules/task/task.service.js b/AIWebQuickDeploy/dist/modules/task/task.service.js deleted file mode 100644 index ac38bea..0000000 --- a/AIWebQuickDeploy/dist/modules/task/task.service.js +++ /dev/null @@ -1,67 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TaskService = void 0; -const globalConfig_service_1 = require("./../globalConfig/globalConfig.service"); -const common_1 = require("@nestjs/common"); -const schedule_1 = require("@nestjs/schedule"); -const userBalance_entity_1 = require("../userBalance/userBalance.entity"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const models_service_1 = require("../models/models.service"); -let TaskService = class TaskService { - constructor(userBalanceEntity, globalConfigService, modelsService) { - this.userBalanceEntity = userBalanceEntity; - this.globalConfigService = globalConfigService; - this.modelsService = modelsService; - } - handleCron() { - common_1.Logger.debug('Automatically refresh WeChat access every hour Token', 'TaskService'); - this.globalConfigService.getWechatAccessToken(); - } - async checkUserMemerExpire() { - const expireUsers = await this.userBalanceEntity.find({ - where: { expirationTime: (0, typeorm_2.LessThanOrEqual)(new Date()) }, - }); - if (!expireUsers || !expireUsers.length) - return; - expireUsers.forEach((user) => { - this.userBalanceEntity - .update({ id: user.id }, { expirationTime: null, packageId: 0, memberModel3Count: 0, memberModel4Count: 0, memberDrawMjCount: 0 }) - .then((res) => { - common_1.Logger.debug(`${user.id}会员已到期、清空所有余额并移除会员身份!`, 'TaskService'); - }); - }); - } -}; -__decorate([ - (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_HOUR), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", void 0) -], TaskService.prototype, "handleCron", null); -__decorate([ - (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_5_MINUTES), - __metadata("design:type", Function), - __metadata("design:paramtypes", []), - __metadata("design:returntype", Promise) -], TaskService.prototype, "checkUserMemerExpire", null); -TaskService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(userBalance_entity_1.UserBalanceEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - globalConfig_service_1.GlobalConfigService, - models_service_1.ModelsService]) -], TaskService); -exports.TaskService = TaskService; diff --git a/AIWebQuickDeploy/dist/modules/upload/upload.controller.js b/AIWebQuickDeploy/dist/modules/upload/upload.controller.js deleted file mode 100644 index 2f169ea..0000000 --- a/AIWebQuickDeploy/dist/modules/upload/upload.controller.js +++ /dev/null @@ -1,54 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UploadController = void 0; -const common_1 = require("@nestjs/common"); -const platform_express_1 = require("@nestjs/platform-express"); -const swagger_1 = require("@nestjs/swagger"); -const upload_service_1 = require("./upload.service"); -let UploadController = class UploadController { - constructor(uploadService) { - this.uploadService = uploadService; - } - async uploadFile(file, dir) { - return this.uploadService.uploadFile(file, dir); - } - async uploadFileFromUrl({ url, dir = 'ai' }) { - return this.uploadService.uploadFileFromUrl({ url, dir }); - } -}; -__decorate([ - (0, common_1.Post)('file'), - (0, swagger_1.ApiOperation)({ summary: '上传文件' }), - (0, common_1.UseInterceptors)((0, platform_express_1.FileInterceptor)('file')), - __param(0, (0, common_1.UploadedFile)()), - __param(1, (0, common_1.Query)('dir')), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, String]), - __metadata("design:returntype", Promise) -], UploadController.prototype, "uploadFile", null); -__decorate([ - (0, common_1.Post)('fileFromUrl'), - (0, swagger_1.ApiOperation)({ summary: '从URL上传文件' }), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], UploadController.prototype, "uploadFileFromUrl", null); -UploadController = __decorate([ - (0, swagger_1.ApiTags)('upload'), - (0, common_1.Controller)('upload'), - __metadata("design:paramtypes", [upload_service_1.UploadService]) -], UploadController); -exports.UploadController = UploadController; diff --git a/AIWebQuickDeploy/dist/modules/upload/upload.module.js b/AIWebQuickDeploy/dist/modules/upload/upload.module.js deleted file mode 100644 index 487d3ed..0000000 --- a/AIWebQuickDeploy/dist/modules/upload/upload.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UploadModule = void 0; -const common_1 = require("@nestjs/common"); -const upload_service_1 = require("./upload.service"); -const upload_controller_1 = require("./upload.controller"); -let UploadModule = class UploadModule { -}; -UploadModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - providers: [upload_service_1.UploadService], - controllers: [upload_controller_1.UploadController], - exports: [upload_service_1.UploadService], - }) -], UploadModule); -exports.UploadModule = UploadModule; diff --git a/AIWebQuickDeploy/dist/modules/upload/upload.service.js b/AIWebQuickDeploy/dist/modules/upload/upload.service.js deleted file mode 100644 index ef95877..0000000 --- a/AIWebQuickDeploy/dist/modules/upload/upload.service.js +++ /dev/null @@ -1,303 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UploadService = void 0; -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const ALIOSS = require("ali-oss"); -const axios_1 = require("axios"); -const TENCENTCOS = require("cos-nodejs-sdk-v5"); -const FormData = require("form-data"); -const fs_1 = require("fs"); -const mime = require("mime-types"); -const path = require("path"); -const streamToBuffer = require("stream-to-buffer"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const blacklist = ['exe', 'sh', 'bat', 'js', 'php', 'py']; -let UploadService = class UploadService { - constructor(globalConfigService) { - this.globalConfigService = globalConfigService; - } - onModuleInit() { } - async uploadFile(file, dir = 'others') { - const { buffer, mimetype } = file; - if (process.env.ISDEV === 'TRUE') { - dir = `dev/${dir}`; - } - const fileExtension = mime.extension(mimetype) || ''; - if (!fileExtension) { - common_1.Logger.error('无法识别文件类型,请检查文件', 'UploadService'); - } - if (blacklist.includes(fileExtension.toLowerCase())) { - common_1.Logger.error('不允许上传此类型的文件', 'UploadService'); - throw new Error('不允许上传此类型的文件'); - } - const now = new Date(); - const timestamp = now.getTime(); - const randomString = Math.random().toString(36).substring(2, 6); - const filename = `${timestamp}_${randomString}.${fileExtension}`; - const { tencentCosStatus = 0, aliOssStatus = 0, cheveretoStatus = 0, localStorageStatus = 0, } = await this.globalConfigService.getConfigs([ - 'tencentCosStatus', - 'aliOssStatus', - 'cheveretoStatus', - 'localStorageStatus', - ]); - common_1.Logger.log(`上传配置状态 - 腾讯云:本地存储: ${localStorageStatus}, ${tencentCosStatus}, 阿里云: ${aliOssStatus}, Chevereto: ${cheveretoStatus}`, 'UploadService'); - if (!Number(tencentCosStatus) && - !Number(aliOssStatus) && - !Number(cheveretoStatus) && - !Number(localStorageStatus)) { - common_1.Logger.error('未配置任何上传方式', 'UploadService'); - throw new common_1.HttpException('请先前往后台配置上传图片的方式', common_1.HttpStatus.BAD_REQUEST); - } - try { - if (Number(localStorageStatus)) { - common_1.Logger.log('使用本地存储上传文件', 'UploadService'); - const result = await this.uploadFileToLocal({ filename, buffer, dir }); - common_1.Logger.log(`文件已上传到本地存储。访问 URL: ${result}`, 'UploadService'); - return result; - } - if (Number(tencentCosStatus)) { - common_1.Logger.log('使用腾讯云 COS 上传文件', 'UploadService'); - const result = await this.uploadFileByTencentCos({ - filename, - buffer, - dir, - }); - common_1.Logger.log(`文件已上传到腾讯云 COS。访问 URL: ${result}`, 'UploadService'); - return result; - } - if (Number(aliOssStatus)) { - common_1.Logger.log('使用阿里云 OSS 上传文件', 'UploadService'); - const result = await this.uploadFileByAliOss({ - filename, - buffer, - dir, - }); - common_1.Logger.log(`文件已上传到阿里云 OSS。访问 URL: ${result}`, 'UploadService'); - return result; - } - if (Number(cheveretoStatus)) { - common_1.Logger.log('使用 Chevereto 上传文件', 'UploadService'); - const result = await this.uploadFileByChevereto({ - filename, - buffer: buffer.toString('base64'), - }); - common_1.Logger.log(`文件已上传到 Chevereto。访问 URL: ${result}`, 'UploadService'); - return result; - } - } - catch (error) { - common_1.Logger.error(`上传失败: ${error.message}`, 'UploadService'); - throw error; - } - } - async getUploadType() { - const { tencentCosStatus = 0, aliOssStatus = 0, cheveretoStatus = 0, } = await this.globalConfigService.getConfigs([ - 'tencentCosStatus', - 'aliOssStatus', - 'cheveretoStatus', - ]); - if (Number(tencentCosStatus)) { - return 'tencent'; - } - if (Number(aliOssStatus)) { - return 'ali'; - } - if (Number(cheveretoStatus)) { - return 'chevereto'; - } - } - async uploadFileFromUrl({ url, dir = 'others' }) { - if (process.env.ISDEV === 'TRUE') { - dir = `dev/${dir}`; - } - const { buffer, mimeType } = await this.getBufferFromUrl(url); - return await this.uploadFile({ buffer, mimetype: mimeType }, dir); - } - async uploadFileByTencentCos({ filename, buffer, dir }) { - const { Bucket, Region, SecretId, SecretKey } = await this.getUploadConfig('tencent'); - this.tencentCos = new TENCENTCOS({ - SecretId, - SecretKey, - FileParallelLimit: 10, - }); - try { - return new Promise(async (resolve, reject) => { - this.tencentCos.putObject({ - Bucket: (0, utils_1.removeSpecialCharacters)(Bucket), - Region: (0, utils_1.removeSpecialCharacters)(Region), - Key: `${dir}/${filename}`, - StorageClass: 'STANDARD', - Body: buffer, - }, async (err, data) => { - if (err) { - console.log('cos -> err: ', err); - return reject(err); - } - let locationUrl = data.Location.replace(/^(http:\/\/|https:\/\/|\/\/|)(.*)/, 'https://$2'); - const { acceleratedDomain } = await this.getUploadConfig('tencent'); - if (acceleratedDomain) { - locationUrl = locationUrl.replace(/^(https:\/\/[^/]+)(\/.*)$/, `https://${acceleratedDomain}$2`); - console.log('当前已开启全球加速----------------->', locationUrl); - } - return resolve(locationUrl); - }); - }); - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('上传图片失败[ten]', common_1.HttpStatus.BAD_REQUEST); - } - } - async uploadFileByAliOss({ filename, buffer, dir }) { - const { region, bucket, accessKeyId, accessKeySecret } = await this.getUploadConfig('ali'); - const client = new ALIOSS({ - region: (0, utils_1.removeSpecialCharacters)(region), - accessKeyId, - accessKeySecret, - bucket: (0, utils_1.removeSpecialCharacters)(bucket), - }); - try { - console.log('ali 开始上传'); - return new Promise((resolve, reject) => { - client - .put(`${dir}/${filename}`, buffer) - .then(async (result) => { - const { acceleratedDomain } = await this.getUploadConfig('ali'); - if (acceleratedDomain) { - result.url = result.url.replace(/^(https:\/\/[^/]+)(\/.*)$/, `https://${acceleratedDomain}$2`); - console.log('当前已开启全球加速----------------->', result.url); - } - resolve(result.url); - }) - .catch((err) => { - reject(err); - }); - }); - } - catch (error) { - throw new common_1.HttpException('上传图片失败[ali]', common_1.HttpStatus.BAD_REQUEST); - } - } - async uploadFileToLocal({ filename, buffer, dir = 'others' }) { - const normalizedDir = path.normalize(dir).replace(/^(\.\.(\/|\\|$))+/, ''); - const normalizedFilename = path.basename(filename); - const projectRoot = process.cwd(); - const uploadDir = path.join(projectRoot, 'public', 'file', normalizedDir); - const filePath = path.join(uploadDir, normalizedFilename); - if (!filePath.startsWith(path.join(projectRoot, 'public', 'file'))) { - throw new Error('非法路径,禁止访问目录之外的位置'); - } - try { - await fs_1.promises.mkdir(uploadDir, { recursive: true }); - } - catch (err) { - common_1.Logger.error(`创建目录失败: ${uploadDir}`, err); - throw err; - } - try { - await fs_1.promises.writeFile(filePath, buffer, { mode: 0o444 }); - } - catch (err) { - common_1.Logger.error(`文件保存失败: ${filePath}`, err); - throw err; - } - let fileUrl = `file/${normalizedDir}/${normalizedFilename}`; - const siteUrl = await this.globalConfigService.getConfigs(['siteUrl']); - if (siteUrl) { - const url = (0, utils_1.formatUrl)(siteUrl); - fileUrl = `${url}/${fileUrl}`; - } - return fileUrl; - } - async uploadFileByChevereto({ filename = '', buffer }) { - var _a; - const { key, uploadPath } = await this.getUploadConfig('chevereto'); - let url = uploadPath.endsWith('/') ? uploadPath.slice(0, -1) : uploadPath; - const formData = new FormData(); - const fromBuffer = buffer.toString('base64'); - formData.append('source', fromBuffer); - formData.append('key', key); - formData.append('title', filename); - try { - const res = await axios_1.default.post(url, formData, { - headers: { 'X-API-Key': key }, - }); - if ((res === null || res === void 0 ? void 0 : res.status) === 200) { - return res.data.image.url; - } - else { - console.log('Chevereto ---> res', res === null || res === void 0 ? void 0 : res.data.code, res === null || res === void 0 ? void 0 : res.data.error.message); - common_1.Logger.error('上传图片失败[Chevereto]', JSON.stringify(res.data)); - } - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException(`上传图片失败[Chevereto|buffer] --> ${(_a = error.response) === null || _a === void 0 ? void 0 : _a.data.error.message}`, common_1.HttpStatus.BAD_REQUEST); - } - } - async getUploadConfig(type) { - if (type === 'ali') { - const { aliOssRegion: region, aliOssBucket: bucket, aliOssAccessKeyId: accessKeyId, aliOssAccessKeySecret: accessKeySecret, aliOssAcceleratedDomain: acceleratedDomain, } = await this.globalConfigService.getConfigs([ - 'aliOssRegion', - 'aliOssBucket', - 'aliOssAccessKeyId', - 'aliOssAccessKeySecret', - 'acceleratedDomain', - ]); - return { - region, - bucket, - accessKeyId, - accessKeySecret, - acceleratedDomain, - }; - } - if (type === 'tencent') { - const { cosBucket: Bucket, cosRegion: Region, cosSecretId: SecretId, cosSecretKey: SecretKey, tencentCosAcceleratedDomain: acceleratedDomain, } = await this.globalConfigService.getConfigs([ - 'cosBucket', - 'cosRegion', - 'cosSecretId', - 'cosSecretKey', - 'tencentCosAcceleratedDomain', - ]); - return { Bucket, Region, SecretId, SecretKey, acceleratedDomain }; - } - if (type === 'chevereto') { - const { cheveretoKey: key, cheveretoUploadPath: uploadPath } = await this.globalConfigService.getConfigs([ - 'cheveretoKey', - 'cheveretoUploadPath', - ]); - return { key, uploadPath }; - } - } - async getBufferFromUrl(url) { - const response = await axios_1.default.get(url, { responseType: 'stream' }); - const buffer = await new Promise((resolve, reject) => { - streamToBuffer(response.data, (err, buffer) => { - if (err) { - reject(new common_1.HttpException('获取图片资源失败,请重新试试吧!', common_1.HttpStatus.BAD_REQUEST)); - } - else { - resolve(buffer); - } - }); - }); - const mimeType = response.headers['content-type']; - return { buffer, mimeType }; - } -}; -UploadService = __decorate([ - (0, common_1.Injectable)(), - __metadata("design:paramtypes", [globalConfig_service_1.GlobalConfigService]) -], UploadService); -exports.UploadService = UploadService; diff --git a/AIWebQuickDeploy/dist/modules/user/dto/queryAllUser.dto.js b/AIWebQuickDeploy/dist/modules/user/dto/queryAllUser.dto.js deleted file mode 100644 index 8dffd2e..0000000 --- a/AIWebQuickDeploy/dist/modules/user/dto/queryAllUser.dto.js +++ /dev/null @@ -1,52 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryAllUserDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QueryAllUserDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryAllUserDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryAllUserDto.prototype, "size", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '小九', description: '用户姓名', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QueryAllUserDto.prototype, "username", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'J_longyan@163.com', description: '用户邮箱', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QueryAllUserDto.prototype, "email", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '18888888888', description: '用户手机号码', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QueryAllUserDto.prototype, "phone", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 2, description: '用户状态', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], QueryAllUserDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'super', description: '关键字查询', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], QueryAllUserDto.prototype, "keyword", void 0); -exports.QueryAllUserDto = QueryAllUserDto; diff --git a/AIWebQuickDeploy/dist/modules/user/dto/queryInviteRecord.dto.js b/AIWebQuickDeploy/dist/modules/user/dto/queryInviteRecord.dto.js deleted file mode 100644 index fd194dc..0000000 --- a/AIWebQuickDeploy/dist/modules/user/dto/queryInviteRecord.dto.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.queryInviteRecordDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class queryInviteRecordDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '查询页数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], queryInviteRecordDto.prototype, "page", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 10, description: '每页数量', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], queryInviteRecordDto.prototype, "size", void 0); -exports.queryInviteRecordDto = queryInviteRecordDto; diff --git a/AIWebQuickDeploy/dist/modules/user/dto/queryOne.dto.js b/AIWebQuickDeploy/dist/modules/user/dto/queryOne.dto.js deleted file mode 100644 index 8e07c28..0000000 --- a/AIWebQuickDeploy/dist/modules/user/dto/queryOne.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.QueryOneUserDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class QueryOneUserDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, nullable: true, description: '查询用户的id', required: false }), - (0, class_validator_1.IsDefined)({ message: '用户id是必传参数' }), - __metadata("design:type", Number) -], QueryOneUserDto.prototype, "id", void 0); -exports.QueryOneUserDto = QueryOneUserDto; diff --git a/AIWebQuickDeploy/dist/modules/user/dto/resetUserPass.dto.js b/AIWebQuickDeploy/dist/modules/user/dto/resetUserPass.dto.js deleted file mode 100644 index 28d58a6..0000000 --- a/AIWebQuickDeploy/dist/modules/user/dto/resetUserPass.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.ResetUserPassDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class ResetUserPassDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, nullable: true, description: '用户id', required: false }), - (0, class_validator_1.IsDefined)({ message: '用户id是必传参数' }), - __metadata("design:type", Number) -], ResetUserPassDto.prototype, "id", void 0); -exports.ResetUserPassDto = ResetUserPassDto; diff --git a/AIWebQuickDeploy/dist/modules/user/dto/retrieve.dto.js b/AIWebQuickDeploy/dist/modules/user/dto/retrieve.dto.js deleted file mode 100644 index 0af8820..0000000 --- a/AIWebQuickDeploy/dist/modules/user/dto/retrieve.dto.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.RetrieveUserDto = void 0; -const swagger_1 = require("@nestjs/swagger"); -class RetrieveUserDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 100, nullable: true, description: '查询用户的id', required: false }), - __metadata("design:type", Number) -], RetrieveUserDto.prototype, "id", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'sfas12', nullable: true, description: 'TODO待完善', required: false }), - __metadata("design:type", String) -], RetrieveUserDto.prototype, "secret", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 100, nullable: true, description: 'TODO待完善', required: false }), - __metadata("design:type", Number) -], RetrieveUserDto.prototype, "moreId", void 0); -exports.RetrieveUserDto = RetrieveUserDto; diff --git a/AIWebQuickDeploy/dist/modules/user/dto/updateUser.dto.js b/AIWebQuickDeploy/dist/modules/user/dto/updateUser.dto.js deleted file mode 100644 index cd244e8..0000000 --- a/AIWebQuickDeploy/dist/modules/user/dto/updateUser.dto.js +++ /dev/null @@ -1,41 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateUserDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class UpdateUserDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 'cooper', nullable: true, description: '用户名称', required: false }), - (0, class_validator_1.MinLength)(2, { message: '用户名最低需要大于2位数!' }), - (0, class_validator_1.MaxLength)(12, { message: '用户名不得超过12位!' }), - (0, class_validator_1.IsNotEmpty)({ message: '用户名不能为空!' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UpdateUserDto.prototype, "username", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '', description: '用户头像', required: false }), - (0, class_validator_1.IsNotEmpty)({ message: '用户头像不能为空!' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UpdateUserDto.prototype, "avatar", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ - example: '我是一台基于深度学习和自然语言处理技术的 AI 机器人,旨在为用户提供高效、精准、个性化的智能服务。', - description: '用户签名', - required: false, - }), - (0, class_validator_1.IsNotEmpty)({ message: '用户签名不能为空!' }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", String) -], UpdateUserDto.prototype, "sign", void 0); -exports.UpdateUserDto = UpdateUserDto; diff --git a/AIWebQuickDeploy/dist/modules/user/dto/updateUserStatus.dto.js b/AIWebQuickDeploy/dist/modules/user/dto/updateUserStatus.dto.js deleted file mode 100644 index d9426eb..0000000 --- a/AIWebQuickDeploy/dist/modules/user/dto/updateUserStatus.dto.js +++ /dev/null @@ -1,29 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UpdateUserStatusDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class UpdateUserStatusDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 2, description: '用户状态', required: false }), - (0, class_validator_1.IsNotEmpty)({ message: '用户状态不能为空!' }), - (0, class_validator_1.IsDefined)({ message: '用户状态是必传参数' }), - (0, class_validator_1.IsIn)([0, 1, 2, 3], { message: '非法参数、用户状态非法!' }), - __metadata("design:type", Number) -], UpdateUserStatusDto.prototype, "status", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '修改的用户id', required: false }), - (0, class_validator_1.IsDefined)({ message: '用户id是必传参数' }), - __metadata("design:type", Number) -], UpdateUserStatusDto.prototype, "id", void 0); -exports.UpdateUserStatusDto = UpdateUserStatusDto; diff --git a/AIWebQuickDeploy/dist/modules/user/dto/userRecharge.dto.js b/AIWebQuickDeploy/dist/modules/user/dto/userRecharge.dto.js deleted file mode 100644 index d5c43bf..0000000 --- a/AIWebQuickDeploy/dist/modules/user/dto/userRecharge.dto.js +++ /dev/null @@ -1,37 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserRechargeDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class UserRechargeDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, description: '用户id', required: true }), - (0, class_validator_1.IsDefined)({ message: '用户id是必传参数' }), - __metadata("design:type", Number) -], UserRechargeDto.prototype, "userId", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 100, description: '用户对话模型3次数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UserRechargeDto.prototype, "model3Count", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 5, description: '用户对话模型4次数', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UserRechargeDto.prototype, "model4Count", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: 0, description: '用户MJ额度', required: false }), - (0, class_validator_1.IsOptional)(), - __metadata("design:type", Number) -], UserRechargeDto.prototype, "drawMjCount", void 0); -exports.UserRechargeDto = UserRechargeDto; diff --git a/AIWebQuickDeploy/dist/modules/user/user.controller.js b/AIWebQuickDeploy/dist/modules/user/user.controller.js deleted file mode 100644 index ace2d06..0000000 --- a/AIWebQuickDeploy/dist/modules/user/user.controller.js +++ /dev/null @@ -1,118 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserController = void 0; -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const superAuth_guard_1 = require("../../common/auth/superAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const queryAllUser_dto_1 = require("./dto/queryAllUser.dto"); -const queryOne_dto_1 = require("./dto/queryOne.dto"); -const resetUserPass_dto_1 = require("./dto/resetUserPass.dto"); -const updateUser_dto_1 = require("./dto/updateUser.dto"); -const updateUserStatus_dto_1 = require("./dto/updateUserStatus.dto"); -const userRecharge_dto_1 = require("./dto/userRecharge.dto"); -const user_service_1 = require("./user.service"); -let UserController = class UserController { - constructor(userService) { - this.userService = userService; - } - async update(body, req) { - return await this.userService.updateInfo(body, req); - } - async userRecharge(body) { - return await this.userService.userRecharge(body); - } - async queryAll(query, req) { - return await this.userService.queryAll(query, req); - } - async queryOne(params) { - return await this.userService.queryOne(params); - } - async updateStatus(body) { - return await this.userService.updateStatus(body); - } - async resetUserPass(body) { - return await this.userService.resetUserPass(body); - } -}; -__decorate([ - (0, common_1.Post)('update'), - (0, swagger_1.ApiOperation)({ summary: '更新用户信息' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [updateUser_dto_1.UpdateUserDto, Object]), - __metadata("design:returntype", Promise) -], UserController.prototype, "update", null); -__decorate([ - (0, common_1.Post)('recharge'), - (0, swagger_1.ApiOperation)({ summary: '用户充值' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [userRecharge_dto_1.UserRechargeDto]), - __metadata("design:returntype", Promise) -], UserController.prototype, "userRecharge", null); -__decorate([ - (0, common_1.Get)('queryAll'), - (0, swagger_1.ApiOperation)({ summary: '查询所有用户' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Query)()), - __param(1, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryAllUser_dto_1.QueryAllUserDto, Object]), - __metadata("design:returntype", Promise) -], UserController.prototype, "queryAll", null); -__decorate([ - (0, common_1.Get)('queryOne'), - (0, swagger_1.ApiOperation)({ summary: '查询单个用户' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [queryOne_dto_1.QueryOneUserDto]), - __metadata("design:returntype", Promise) -], UserController.prototype, "queryOne", null); -__decorate([ - (0, common_1.Post)('updateStatus'), - (0, swagger_1.ApiOperation)({ summary: '更新用户状态' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [updateUserStatus_dto_1.UpdateUserStatusDto]), - __metadata("design:returntype", Promise) -], UserController.prototype, "updateStatus", null); -__decorate([ - (0, common_1.Post)('resetUserPass'), - (0, swagger_1.ApiOperation)({ summary: '重置用户密码' }), - (0, common_1.UseGuards)(superAuth_guard_1.SuperAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Body)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [resetUserPass_dto_1.ResetUserPassDto]), - __metadata("design:returntype", Promise) -], UserController.prototype, "resetUserPass", null); -UserController = __decorate([ - (0, common_1.Controller)('user'), - (0, swagger_1.ApiTags)('user'), - __metadata("design:paramtypes", [user_service_1.UserService]) -], UserController); -exports.UserController = UserController; diff --git a/AIWebQuickDeploy/dist/modules/user/user.entity.js b/AIWebQuickDeploy/dist/modules/user/user.entity.js deleted file mode 100644 index 4560e29..0000000 --- a/AIWebQuickDeploy/dist/modules/user/user.entity.js +++ /dev/null @@ -1,115 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserEntity = void 0; -const baseEntity_1 = require("../../common/entity/baseEntity"); -const typeorm_1 = require("typeorm"); -let UserEntity = class UserEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ length: 12, comment: '用户昵称' }), - __metadata("design:type", String) -], UserEntity.prototype, "username", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 64, comment: '用户密码', nullable: true }), - __metadata("design:type", String) -], UserEntity.prototype, "password", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 0, comment: '用户状态' }), - __metadata("design:type", Number) -], UserEntity.prototype, "status", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 1, comment: '用户性别' }), - __metadata("design:type", Number) -], UserEntity.prototype, "sex", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 64, unique: true, comment: '用户邮箱' }), - __metadata("design:type", String) -], UserEntity.prototype, "email", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 64, nullable: true, comment: '用户手机号' }), - __metadata("design:type", String) -], UserEntity.prototype, "phone", void 0); -__decorate([ - (0, typeorm_1.Column)({ - length: 300, - nullable: true, - default: '', - comment: '用户头像', - }), - __metadata("design:type", String) -], UserEntity.prototype, "avatar", void 0); -__decorate([ - (0, typeorm_1.Column)({ - length: 300, - nullable: true, - default: '我是一台基于深度学习和自然语言处理技术的 AI 机器人,旨在为用户提供高效、精准、个性化的智能服务。', - comment: '用户签名', - }), - __metadata("design:type", String) -], UserEntity.prototype, "sign", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 64, default: '', comment: '注册IP', nullable: true }), - __metadata("design:type", String) -], UserEntity.prototype, "registerIp", void 0); -__decorate([ - (0, typeorm_1.Column)({ - length: 64, - default: '', - comment: '最后一次登录IP', - nullable: true, - }), - __metadata("design:type", String) -], UserEntity.prototype, "lastLoginIp", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 10, default: '', comment: '用户邀请码' }), - __metadata("design:type", String) -], UserEntity.prototype, "inviteCode", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 10, default: '', comment: '用户填写的别人的邀请码' }), - __metadata("design:type", String) -], UserEntity.prototype, "invitedBy", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 10, default: 'viewer', comment: '用户角色' }), - __metadata("design:type", String) -], UserEntity.prototype, "role", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 64, default: '', comment: '微信openId', nullable: true }), - __metadata("design:type", String) -], UserEntity.prototype, "openId", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 64, comment: '用户注册来源', nullable: true }), - __metadata("design:type", String) -], UserEntity.prototype, "client", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '用户邀请链接被点击次数', default: 0 }), - __metadata("design:type", Number) -], UserEntity.prototype, "inviteLinkCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '用户连续签到天数', default: 0 }), - __metadata("design:type", Number) -], UserEntity.prototype, "consecutiveDays", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '用户违规记录次数', default: 0 }), - __metadata("design:type", Number) -], UserEntity.prototype, "violationCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '真实姓名', nullable: true }), - __metadata("design:type", String) -], UserEntity.prototype, "realName", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '身份证号', nullable: true }), - __metadata("design:type", String) -], UserEntity.prototype, "idCard", void 0); -UserEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'users' }) -], UserEntity); -exports.UserEntity = UserEntity; diff --git a/AIWebQuickDeploy/dist/modules/user/user.module.js b/AIWebQuickDeploy/dist/modules/user/user.module.js deleted file mode 100644 index 4ca26ab..0000000 --- a/AIWebQuickDeploy/dist/modules/user/user.module.js +++ /dev/null @@ -1,58 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const cramiPackage_entity_1 = require("../crami/cramiPackage.entity"); -const config_entity_1 = require("../globalConfig/config.entity"); -const mailer_service_1 = require("../mailer/mailer.service"); -const redisCache_service_1 = require("../redisCache/redisCache.service"); -const accountLog_entity_1 = require("../userBalance/accountLog.entity"); -const balance_entity_1 = require("../userBalance/balance.entity"); -const fingerprint_entity_1 = require("../userBalance/fingerprint.entity"); -const userBalance_entity_1 = require("../userBalance/userBalance.entity"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -const verification_service_1 = require("./../verification/verification.service"); -const verifycation_entity_1 = require("./../verification/verifycation.entity"); -const user_controller_1 = require("./user.controller"); -const user_entity_1 = require("./user.entity"); -const user_service_1 = require("./user.service"); -let UserModule = class UserModule { -}; -UserModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([ - user_entity_1.UserEntity, - verifycation_entity_1.VerifycationEntity, - balance_entity_1.BalanceEntity, - accountLog_entity_1.AccountLogEntity, - config_entity_1.ConfigEntity, - cramiPackage_entity_1.CramiPackageEntity, - userBalance_entity_1.UserBalanceEntity, - fingerprint_entity_1.FingerprintLogEntity, - chatLog_entity_1.ChatLogEntity, - chatGroup_entity_1.ChatGroupEntity, - ]), - ], - controllers: [user_controller_1.UserController], - providers: [ - user_service_1.UserService, - verification_service_1.VerificationService, - userBalance_service_1.UserBalanceService, - redisCache_service_1.RedisCacheService, - mailer_service_1.MailerService, - ], - exports: [user_service_1.UserService], - }) -], UserModule); -exports.UserModule = UserModule; diff --git a/AIWebQuickDeploy/dist/modules/user/user.service.js b/AIWebQuickDeploy/dist/modules/user/user.service.js deleted file mode 100644 index 40bb732..0000000 --- a/AIWebQuickDeploy/dist/modules/user/user.service.js +++ /dev/null @@ -1,523 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserService = void 0; -const balance_constant_1 = require("../../common/constants/balance.constant"); -const verification_constant_1 = require("../../common/constants/verification.constant"); -const utils_1 = require("../../common/utils"); -const mailer_service_1 = require("../mailer/mailer.service"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const bcrypt = require("bcryptjs"); -const _ = require("lodash"); -const typeorm_2 = require("typeorm"); -const config_entity_1 = require("../globalConfig/config.entity"); -const userBalance_service_1 = require("../userBalance/userBalance.service"); -const user_constant_1 = require("./../../common/constants/user.constant"); -const globalConfig_service_1 = require("./../globalConfig/globalConfig.service"); -const verification_service_1 = require("./../verification/verification.service"); -const user_entity_1 = require("./user.entity"); -let UserService = class UserService { - constructor(userEntity, connection, verificationService, mailerService, userBalanceService, globalConfigService, configEntity) { - this.userEntity = userEntity; - this.connection = connection; - this.verificationService = verificationService; - this.mailerService = mailerService; - this.userBalanceService = userBalanceService; - this.globalConfigService = globalConfigService; - this.configEntity = configEntity; - } - async createUserAndVerifycation(user, req) { - const { username, email, password, client = 0 } = user; - const where = [{ username }, { email }]; - const u = await this.userEntity.findOne({ where: where }); - if (u && u.status !== user_constant_1.UserStatusEnum.PENDING) { - throw new common_1.HttpException('用户名或者邮箱已被注册!', common_1.HttpStatus.BAD_REQUEST); - } - try { - const userInput = _.cloneDeep(user); - const hashedPassword = bcrypt.hashSync(password, 10); - const ip = (0, utils_1.getClientIp)(req); - userInput.password = hashedPassword; - userInput.registerIp = ip; - userInput.client = client; - let n; - if (!u) { - const userDefautlAvatar = await this.globalConfigService.getConfigs([ - 'userDefautlAvatar', - ]); - userInput.avatar = userDefautlAvatar; - n = await this.userEntity.save(userInput); - } - else { - n = u; - } - const emailConfigs = await this.configEntity.find({ - where: { - configKey: (0, typeorm_2.In)([ - 'isVerifyEmail', - 'registerBaseUrl', - 'registerVerifyEmailTitle', - 'registerVerifyEmailDesc', - 'registerVerifyEmailFrom', - 'registerVerifyExpir', - ]), - }, - }); - const configMap = emailConfigs.reduce((pre, cur) => { - pre[cur.configKey] = cur.configVal; - return pre; - }, {}); - const isVerifyEmail = configMap['isVerifyEmail'] - ? Number(configMap['isVerifyEmail']) - : 1; - if (isVerifyEmail) { - const expir = configMap['registerVerifyExpir'] - ? Number(configMap['registerVerifyExpir']) - : 30 * 60; - const v = await this.verificationService.createVerification(n, verification_constant_1.VerificationEnum.Registration, expir); - const { code, email, id } = v; - const { registerVerifyEmailFrom } = configMap; - console.log('configMap: ', configMap); - console.log(`尝试发送邮件到: ${email}`); - } - else { - const { id } = n; - await this.updateUserStatus(id, user_constant_1.UserStatusEnum.ACTIVE); - await this.userBalanceService.addBalanceToNewUser(id); - } - return n; - } - catch (error) { - console.log('error: ', error); - throw error; - } - } - async getSuper() { - const user = await this.userEntity.findOne({ where: { role: 'super' } }); - return user; - } - async verifyUserCredentials(user) { - const { username, password, uid = 0, phone } = user; - let u = null; - if (uid > 0) { - u = await this.userEntity.findOne({ where: { id: uid } }); - if (!u) { - throw new common_1.HttpException('当前账户不存在!', common_1.HttpStatus.BAD_REQUEST); - } - if (!bcrypt.compareSync(password, u.password)) { - throw new common_1.HttpException('当前密码错误!', common_1.HttpStatus.BAD_REQUEST); - } - } - if (username && password) { - const where = [ - { username }, - { email: username }, - { phone: username }, - ]; - u = await this.userEntity.findOne({ where: where }); - if (!u) { - throw new common_1.HttpException('当前账户不存在!', common_1.HttpStatus.BAD_REQUEST); - } - if (!bcrypt.compareSync(password, u.password)) { - throw new common_1.HttpException('当前密码错误!', common_1.HttpStatus.BAD_REQUEST); - } - } - if (!u) { - throw new common_1.HttpException('当前账户不存在!', common_1.HttpStatus.BAD_REQUEST); - } - if (u.status !== user_constant_1.UserStatusEnum.ACTIVE) { - throw new common_1.HttpException(user_constant_1.UserStatusErrMsg[u.status], common_1.HttpStatus.BAD_REQUEST); - } - return u; - } - async verifyUserPassword(userId, password) { - const u = await this.userEntity.findOne({ where: { id: userId } }); - return bcrypt.compareSync(password, u.password); - } - async updateUserStatus(id, status) { - const u = await this.userEntity.update({ id }, { status }); - return u.affected > 0; - } - async getUserStatus(id) { - const u = await this.userEntity.findOne({ where: { id } }); - return u.status; - } - async queryUserInfoById(id) { - return await this.userEntity.findOne({ where: { id } }); - } - async queryOneUserInfo(userId) { - return await this.userEntity.findOne({ where: { id: userId } }); - } - async checkUserStatus(user) { - const { id: userId, role } = user; - if (role === 'visitor') - return true; - const u = await this.userEntity.findOne({ where: { id: userId } }); - if (!u) { - throw new common_1.HttpException('当前用户信息失效、请重新登录!', common_1.HttpStatus.UNAUTHORIZED); - } - if (u.status === user_constant_1.UserStatusEnum.BLACKLISTED) { - throw new common_1.HttpException('您的账户已被永久加入黑名单、如有疑问、请联系管理员!', common_1.HttpStatus.BAD_REQUEST); - } - if (u.status === user_constant_1.UserStatusEnum.LOCKED) { - throw new common_1.HttpException('您的账户已被封禁、如有疑问、请联系管理员!', common_1.HttpStatus.BAD_REQUEST); - } - } - async getUserInfo(userId) { - const userInfo = await this.userEntity.findOne({ - where: { id: userId }, - select: [ - 'username', - 'avatar', - 'role', - 'email', - 'sign', - 'openId', - 'consecutiveDays', - ], - }); - if (!userInfo) { - throw new common_1.HttpException('当前用户信息失效、请重新登录!', common_1.HttpStatus.UNAUTHORIZED); - } - userInfo.isBindWx = !!(userInfo === null || userInfo === void 0 ? void 0 : userInfo.openId); - delete userInfo.openId; - const userBalance = await this.userBalanceService.queryUserBalance(userId); - const processedId = (userId * 123 + 100000000) - .toString(36) - .toUpperCase() - .slice(-6); - userInfo.id = processedId; - return { userInfo, userBalance: Object.assign({}, userBalance) }; - } - async getUserById(id) { - return await this.userEntity.findOne({ where: { id } }); - } - async getUserOpenId(openId) { - return await this.userEntity.findOne({ where: { openId } }); - } - async updateInfo(body, req) { - const { id } = req.user; - const u = await this.userEntity.findOne({ where: { id } }); - if (!u) { - throw new common_1.HttpException('当前用户不存在!', common_1.HttpStatus.BAD_REQUEST); - } - if (body.username && u.username === body.username) { - throw new common_1.HttpException('没有变更,无需更改!', common_1.HttpStatus.BAD_REQUEST); - } - if (body.username) { - const usernameTaken = await this.isUsernameTaken(body.username, id); - if (usernameTaken) { - throw new common_1.HttpException('用户名已存在!', common_1.HttpStatus.BAD_REQUEST); - } - } - const r = await this.userEntity.update({ id }, body); - if (r.affected <= 0) { - throw new common_1.HttpException('修改用户信息失败!', common_1.HttpStatus.BAD_REQUEST); - } - return '修改用户信息成功!'; - } - async isUsernameTaken(username, excludeUserId) { - const where = { username }; - if (excludeUserId) { - where.id = (0, typeorm_2.Not)(excludeUserId); - } - const user = await this.userEntity.findOne({ where }); - return !!user; - } - async updateUserPassword(userId, password) { - const hashedPassword = bcrypt.hashSync(password, 10); - const r = await this.userEntity.update({ id: userId }, { password: hashedPassword }); - if (r.affected <= 0) { - throw new common_1.HttpException('修改密码失败、请重新试试吧。', common_1.HttpStatus.BAD_REQUEST); - } - } - async userRecharge(body) { - const { userId, model3Count = 0, model4Count = 0, drawMjCount = 0 } = body; - await this.userBalanceService.addBalanceToUser(userId, { - model3Count, - model4Count, - drawMjCount, - }); - const res = await this.userBalanceService.saveRecordRechargeLog({ - userId, - rechargeType: balance_constant_1.RechargeType.ADMIN_GIFT, - model3Count, - model4Count, - drawMjCount, - extent: '', - }); - return res; - } - async queryAll(query, req) { - const { page = 1, size = 10, username, email, status, keyword, phone, } = query; - let where = {}; - username && Object.assign(where, { username: (0, typeorm_2.Like)(`%${username}%`) }); - email && Object.assign(where, { email: (0, typeorm_2.Like)(`%${email}%`) }); - phone && Object.assign(where, { phone: (0, typeorm_2.Like)(`%${phone}%`) }); - status && Object.assign(where, { status }); - if (keyword) { - where = [ - { username: (0, typeorm_2.Like)(`%${keyword}%`) }, - { email: (0, typeorm_2.Like)(`%${keyword}%`) }, - { phone: (0, typeorm_2.Like)(`%${keyword}%`) }, - ]; - } - const [rows, count] = await this.userEntity.findAndCount({ - skip: (page - 1) * size, - where, - take: size, - order: { createdAt: 'DESC' }, - cache: true, - select: [ - 'username', - 'avatar', - 'role', - 'sign', - 'status', - 'id', - 'email', - 'createdAt', - 'lastLoginIp', - 'phone', - 'realName', - 'idCard', - ], - }); - const ids = rows.map((t) => t.id); - const data = await this.userBalanceService.queryUserBalanceByIds(ids); - rows.forEach((user) => (user.balanceInfo = data.find((t) => t.userId === user.id))); - req.user.role !== 'super' && - rows.forEach((t) => (t.email = (0, utils_1.maskEmail)(t.email))); - req.user.role !== 'super' && - rows.forEach((t) => (t.lastLoginIp = (0, utils_1.maskIpAddress)(t.lastLoginIp))); - req.user.role !== 'super' && - rows.forEach((t) => (t.phone = (0, utils_1.maskIpAddress)(t.phone))); - return { rows, count }; - } - async queryOne({ id }) { - return await this.userEntity.findOne({ - where: { id }, - select: ['username', 'avatar', 'role', 'sign', 'status'], - }); - } - async updateStatus(body) { - const { id, status } = body; - const n = await this.userEntity.findOne({ where: { id } }); - if (!n) { - throw new common_1.HttpException('用户不存在!', common_1.HttpStatus.BAD_REQUEST); - } - if (n.role === 'super') { - throw new common_1.HttpException('超级管理员不可被操作!', common_1.HttpStatus.BAD_REQUEST); - } - if (n.role === 'super') { - throw new common_1.HttpException('超级管理员不可被操作!', common_1.HttpStatus.BAD_REQUEST); - } - const r = await this.userEntity.update({ id }, { status }); - if (r.affected <= 0) { - throw new common_1.HttpException('修改用户状态失败!', common_1.HttpStatus.BAD_REQUEST); - } - return '修改用户状态成功!'; - } - async resetUserPass(body) { - const { id } = body; - const u = await this.userEntity.findOne({ where: { id } }); - if (!u) { - throw new common_1.HttpException('用户不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const defaultPassword = '123456'; - const hashPassword = bcrypt.hashSync(defaultPassword, 10); - const raw = await this.userEntity.update({ id }, { password: hashPassword }); - if (raw.affected <= 0) { - throw new common_1.HttpException('重置密码失败!', common_1.HttpStatus.BAD_REQUEST); - } - return `密码重置为[${defaultPassword}]成功!`; - } - async savaLoginIp(userId, ip) { - return await this.userEntity.update({ id: userId }, { lastLoginIp: ip }); - } - async getUserFromOpenId(openId, sceneStr) { - const user = await this.userEntity.findOne({ where: { openId } }); - if (!user) { - const user = await this.createUserFromOpenId(openId); - await this.userBalanceService.addBalanceToNewUser(user.id); - return user; - } - return user; - } - async createUserFromOpenId(openId) { - const userDefautlAvatar = await this.globalConfigService.getConfigs([ - 'userDefautlAvatar', - ]); - const userInfo = { - avatar: userDefautlAvatar, - username: `用户${(0, utils_1.createRandomUid)()}`, - status: user_constant_1.UserStatusEnum.ACTIVE, - sex: 0, - email: `${(0, utils_1.createRandomUid)()}@default.com`, - openId, - }; - const user = await this.userEntity.save(userInfo); - return user; - } - async createUserFromContact(params) { - const { username, email, phone } = params; - const userDefautlAvatar = await this.globalConfigService.getConfigs([ - 'userDefautlAvatar', - ]); - const userInfo = { - avatar: userDefautlAvatar, - username: `用户${(0, utils_1.createRandomUid)()}`, - status: user_constant_1.UserStatusEnum.ACTIVE, - sex: 0, - }; - if (username) { - userInfo.username = username; - } - if (email) { - userInfo.email = email; - } - if (phone) { - userInfo.phone = phone; - } - const user = await this.userEntity.save(userInfo); - return user; - } - async getUserByContact(params) { - const { username, email, phone } = params; - const where = []; - if (username) { - where.push({ username }); - } - if (email) { - where.push({ email }); - } - if (phone) { - where.push({ phone }); - } - return await this.userEntity.findOne({ where }); - } - async bindWx(openId, userId) { - try { - const user = await this.userEntity.findOne({ where: { id: userId } }); - if (!user) - return { status: false, msg: '当前绑定用户不存在!' }; - const bindU = await this.userEntity.findOne({ where: { openId } }); - if (bindU) - return { status: false, msg: '该微信已绑定其他账号!' }; - const res = await this.userEntity.update({ id: userId }, { openId }); - if (res.affected <= 0) - return { status: false, msg: '绑定微信失败、请联系管理员!' }; - return { status: true, msg: '恭喜您绑定成功、后续可直接扫码登录了!' }; - } - catch (error) { - return { status: false, msg: '绑定微信失败、请联系管理员!' }; - } - } - async getOpenIdByUserId(userId) { - const user = await this.userEntity.findOne({ where: { id: userId } }); - return user === null || user === void 0 ? void 0 : user.openId; - } - async verifyUserRegister(params) { - const { username, phone, email } = params; - if (phone) { - const userByPhone = await this.userEntity.findOne({ where: { phone } }); - if (userByPhone) { - return false; - } - } - if (email) { - const userByEmail = await this.userEntity.findOne({ where: { email } }); - if (userByEmail) { - return false; - } - } - if (username) { - const userByUsername = await this.userEntity.findOne({ - where: { username }, - }); - if (userByUsername) { - return false; - } - } - if (!phone && !email && !username) { - return false; - } - return true; - } - async verifyUserRegisterByPhone(params) { - const { username, password, phone, phoneCode } = params; - const user = await this.userEntity.findOne({ - where: [{ username }, { phone }], - }); - if (user && user.username === username) { - throw new common_1.HttpException('用户名已存在、请更换用户名!', common_1.HttpStatus.BAD_REQUEST); - } - if (user && user.phone === phone) { - throw new common_1.HttpException('当前手机号已注册、请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); - } - } - async verifyUserRegisterByEmail(params) { - const { username, email } = params; - console.log(`校验邮箱注册: 开始 - 用户名: ${username}, 邮箱: ${email}`); - const user = await this.userEntity.findOne({ - where: [{ username }, { email }], - }); - if (user && user.username === username) { - console.error(`校验失败: 用户名 "${username}" 已存在`); - throw new common_1.HttpException('用户名已存在、请更换用户名!', common_1.HttpStatus.BAD_REQUEST); - } - if (user && user.email === email) { - console.error(`校验失败: 邮箱 "${email}" 已被注册`); - throw new common_1.HttpException('当前邮箱已注册、请勿重复注册!', common_1.HttpStatus.BAD_REQUEST); - } - console.log(`校验邮箱注册: 成功 - 用户名: ${username}, 邮箱: ${email} 未被占用`); - } - async createUser(userInfo) { - return await this.userEntity.save(userInfo); - } - async saveRealNameInfo(userId, realName, idCard) { - const user = await this.userEntity.findOne({ where: { id: userId } }); - if (!user) { - common_1.Logger.error('用户不存在'); - } - await this.userEntity.update({ id: userId }, { realName, idCard }); - return; - } - async updateUserPhone(userId, phone, username, password) { - const user = await this.userEntity.findOne({ where: { id: userId } }); - const hashedPassword = bcrypt.hashSync(password, 10); - if (!user) { - common_1.Logger.error('用户不存在'); - } - if (!phone || !username || !hashedPassword) { - throw new common_1.HttpException('参数错误!', common_1.HttpStatus.BAD_REQUEST); - } - await this.userEntity.update({ id: userId }, { phone, username, password: hashedPassword }); - return; - } -}; -UserService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), - __param(6, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Connection, - verification_service_1.VerificationService, - mailer_service_1.MailerService, - userBalance_service_1.UserBalanceService, - globalConfig_service_1.GlobalConfigService, - typeorm_2.Repository]) -], UserService); -exports.UserService = UserService; diff --git a/AIWebQuickDeploy/dist/modules/userBalance/accountLog.entity.js b/AIWebQuickDeploy/dist/modules/userBalance/accountLog.entity.js deleted file mode 100644 index b748bc3..0000000 --- a/AIWebQuickDeploy/dist/modules/userBalance/accountLog.entity.js +++ /dev/null @@ -1,68 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.AccountLogEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let AccountLogEntity = class AccountLogEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户ID' }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '会员套餐名称', nullable: true }), - __metadata("design:type", String) -], AccountLogEntity.prototype, "pkgName", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '推荐人ID、返佣用户ID', nullable: true }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "rebateUserId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '充值套餐ID', nullable: true }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "packageId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '会员有效天数', nullable: true }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "memberDays", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '账户充值类型' }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "rechargeType", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型3对话次数' }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "model3Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型4对话次数' }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "model4Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'MJ绘画次数' }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "drawMjCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '套餐有效期' }), - __metadata("design:type", Number) -], AccountLogEntity.prototype, "days", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '随机订单uid' }), - __metadata("design:type", String) -], AccountLogEntity.prototype, "uid", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '扩展字段', nullable: true }), - __metadata("design:type", String) -], AccountLogEntity.prototype, "extent", void 0); -AccountLogEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'account_log' }) -], AccountLogEntity); -exports.AccountLogEntity = AccountLogEntity; diff --git a/AIWebQuickDeploy/dist/modules/userBalance/balance.entity.js b/AIWebQuickDeploy/dist/modules/userBalance/balance.entity.js deleted file mode 100644 index 727208b..0000000 --- a/AIWebQuickDeploy/dist/modules/userBalance/balance.entity.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.BalanceEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let BalanceEntity = class BalanceEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户ID' }), - __metadata("design:type", Number) -], BalanceEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '用户账户余额' }), - __metadata("design:type", Number) -], BalanceEntity.prototype, "balance", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '用户使用次数余额' }), - __metadata("design:type", Number) -], BalanceEntity.prototype, "usesLeft", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '绘画使用次数余额' }), - __metadata("design:type", Number) -], BalanceEntity.prototype, "paintCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 0, comment: '用户总计使用的token数量' }), - __metadata("design:type", Number) -], BalanceEntity.prototype, "useTokens", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 0, comment: '用户总计使用的对话次数' }), - __metadata("design:type", Number) -], BalanceEntity.prototype, "useChats", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 0, comment: '用户总计使用的绘画次数' }), - __metadata("design:type", Number) -], BalanceEntity.prototype, "usePaints", void 0); -BalanceEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'balance' }) -], BalanceEntity); -exports.BalanceEntity = BalanceEntity; diff --git a/AIWebQuickDeploy/dist/modules/userBalance/dto/test.dto.js b/AIWebQuickDeploy/dist/modules/userBalance/dto/test.dto.js deleted file mode 100644 index acf0119..0000000 --- a/AIWebQuickDeploy/dist/modules/userBalance/dto/test.dto.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.TestDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class TestDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: 1, nullable: true, description: '查询用户的id', required: false }), - (0, class_validator_1.IsDefined)({ message: '用户id是必传参数' }), - __metadata("design:type", Number) -], TestDto.prototype, "id", void 0); -exports.TestDto = TestDto; diff --git a/AIWebQuickDeploy/dist/modules/userBalance/fingerprint.entity.js b/AIWebQuickDeploy/dist/modules/userBalance/fingerprint.entity.js deleted file mode 100644 index f1a4a36..0000000 --- a/AIWebQuickDeploy/dist/modules/userBalance/fingerprint.entity.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.FingerprintLogEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let FingerprintLogEntity = class FingerprintLogEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '指纹ID' }), - __metadata("design:type", String) -], FingerprintLogEntity.prototype, "fingerprint", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型3对话次数' }), - __metadata("design:type", Number) -], FingerprintLogEntity.prototype, "model3Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '模型4对话次数' }), - __metadata("design:type", Number) -], FingerprintLogEntity.prototype, "model4Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: 'MJ绘画次数' }), - __metadata("design:type", Number) -], FingerprintLogEntity.prototype, "drawMjCount", void 0); -FingerprintLogEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'fingerprint_log' }) -], FingerprintLogEntity); -exports.FingerprintLogEntity = FingerprintLogEntity; diff --git a/AIWebQuickDeploy/dist/modules/userBalance/userBalance.controller.js b/AIWebQuickDeploy/dist/modules/userBalance/userBalance.controller.js deleted file mode 100644 index 9120e99..0000000 --- a/AIWebQuickDeploy/dist/modules/userBalance/userBalance.controller.js +++ /dev/null @@ -1,98 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserBalanceController = void 0; -const adminAuth_guard_1 = require("../../common/auth/adminAuth.guard"); -const jwtAuth_guard_1 = require("../../common/auth/jwtAuth.guard"); -const common_1 = require("@nestjs/common"); -const swagger_1 = require("@nestjs/swagger"); -const userBalance_service_1 = require("./userBalance.service"); -let UserBalanceController = class UserBalanceController { - constructor(userBalanceService) { - this.userBalanceService = userBalanceService; - } - async getRechargeLog(req, params) { - return this.userBalanceService.getRechargeLog(req, params); - } - async getAccountLog(req, params) { - return this.userBalanceService.getAccountLog(req, params); - } - async getBalance(req) { - return this.userBalanceService.queryUserBalance(req.user.id); - } - async inheritVisitorData(req) { - return this.userBalanceService.inheritVisitorData(req); - } - async getVisitorCount(req) { - return this.userBalanceService.getVisitorCount(req); - } -}; -__decorate([ - (0, common_1.Get)('rechargeLog'), - (0, swagger_1.ApiOperation)({ summary: '获取个人充值记录' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", Promise) -], UserBalanceController.prototype, "getRechargeLog", null); -__decorate([ - (0, common_1.Get)('accountLog'), - (0, swagger_1.ApiOperation)({ summary: '获取所有人账户记录' }), - (0, common_1.UseGuards)(adminAuth_guard_1.AdminAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __param(1, (0, common_1.Query)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object, Object]), - __metadata("design:returntype", Promise) -], UserBalanceController.prototype, "getAccountLog", null); -__decorate([ - (0, common_1.Get)('query'), - (0, swagger_1.ApiOperation)({ summary: '获取个人余额信息' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], UserBalanceController.prototype, "getBalance", null); -__decorate([ - (0, common_1.Post)('inheritVisitorData'), - (0, swagger_1.ApiOperation)({ summary: '继承当前设备数据' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], UserBalanceController.prototype, "inheritVisitorData", null); -__decorate([ - (0, common_1.Get)('getVisitorCount'), - (0, swagger_1.ApiOperation)({ summary: '获取本机指纹数据' }), - (0, common_1.UseGuards)(jwtAuth_guard_1.JwtAuthGuard), - (0, swagger_1.ApiBearerAuth)(), - __param(0, (0, common_1.Req)()), - __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), - __metadata("design:returntype", Promise) -], UserBalanceController.prototype, "getVisitorCount", null); -UserBalanceController = __decorate([ - (0, swagger_1.ApiTags)('balance'), - (0, common_1.Controller)('balance'), - __metadata("design:paramtypes", [userBalance_service_1.UserBalanceService]) -], UserBalanceController); -exports.UserBalanceController = UserBalanceController; diff --git a/AIWebQuickDeploy/dist/modules/userBalance/userBalance.entity.js b/AIWebQuickDeploy/dist/modules/userBalance/userBalance.entity.js deleted file mode 100644 index 6940e07..0000000 --- a/AIWebQuickDeploy/dist/modules/userBalance/userBalance.entity.js +++ /dev/null @@ -1,80 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserBalanceEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let UserBalanceEntity = class UserBalanceEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户ID' }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '充值的套餐包含的模型3次数', nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "model3Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '充值的套餐包含的模型4次数', nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "model4Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '充值的套餐包含的MJ绘画次数', nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "drawMjCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '当前使用的套餐ID', default: 0, nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "packageId", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '会员模型3额度', default: 0, nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "memberModel3Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '会员模型4额度', default: 0, nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "memberModel4Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '会员MJ绘画额度', default: 0, nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "memberDrawMjCount", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '已经使用的对话3的模型次数', nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "useModel3Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '已经使用的对话4的模型次数', nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "useModel4Count", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '已经使用的对话3的模型Token', nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "useModel3Token", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '已经使用的对话4的模型Token', nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "useModel4Token", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '已经使用的MJ绘画Token', nullable: true }), - __metadata("design:type", Number) -], UserBalanceEntity.prototype, "useDrawMjToken", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '扩展字段', nullable: true }), - __metadata("design:type", String) -], UserBalanceEntity.prototype, "extent", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '会员到期时间', nullable: true }), - __metadata("design:type", Date) -], UserBalanceEntity.prototype, "expirationTime", void 0); -UserBalanceEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'user_balances' }) -], UserBalanceEntity); -exports.UserBalanceEntity = UserBalanceEntity; diff --git a/AIWebQuickDeploy/dist/modules/userBalance/userBalance.module.js b/AIWebQuickDeploy/dist/modules/userBalance/userBalance.module.js deleted file mode 100644 index 24d9a1a..0000000 --- a/AIWebQuickDeploy/dist/modules/userBalance/userBalance.module.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserBalanceModule = void 0; -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const cramiPackage_entity_1 = require("../crami/cramiPackage.entity"); -const config_entity_1 = require("../globalConfig/config.entity"); -const redisCache_service_1 = require("../redisCache/redisCache.service"); -const user_entity_1 = require("../user/user.entity"); -const verification_service_1 = require("../verification/verification.service"); -const verifycation_entity_1 = require("../verification/verifycation.entity"); -const accountLog_entity_1 = require("./accountLog.entity"); -const balance_entity_1 = require("./balance.entity"); -const fingerprint_entity_1 = require("./fingerprint.entity"); -const userBalance_controller_1 = require("./userBalance.controller"); -const userBalance_entity_1 = require("./userBalance.entity"); -const userBalance_service_1 = require("./userBalance.service"); -let UserBalanceModule = class UserBalanceModule { -}; -UserBalanceModule = __decorate([ - (0, common_1.Global)(), - (0, common_1.Module)({ - imports: [ - typeorm_1.TypeOrmModule.forFeature([ - balance_entity_1.BalanceEntity, - userBalance_entity_1.UserBalanceEntity, - verifycation_entity_1.VerifycationEntity, - accountLog_entity_1.AccountLogEntity, - config_entity_1.ConfigEntity, - cramiPackage_entity_1.CramiPackageEntity, - user_entity_1.UserEntity, - fingerprint_entity_1.FingerprintLogEntity, - chatLog_entity_1.ChatLogEntity, - chatGroup_entity_1.ChatGroupEntity, - ]), - ], - controllers: [userBalance_controller_1.UserBalanceController], - providers: [userBalance_service_1.UserBalanceService, verification_service_1.VerificationService, redisCache_service_1.RedisCacheService], - exports: [userBalance_service_1.UserBalanceService], - }) -], UserBalanceModule); -exports.UserBalanceModule = UserBalanceModule; diff --git a/AIWebQuickDeploy/dist/modules/userBalance/userBalance.service.js b/AIWebQuickDeploy/dist/modules/userBalance/userBalance.service.js deleted file mode 100644 index 6a3466a..0000000 --- a/AIWebQuickDeploy/dist/modules/userBalance/userBalance.service.js +++ /dev/null @@ -1,570 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.UserBalanceService = void 0; -const balance_constant_1 = require("../../common/constants/balance.constant"); -const utils_1 = require("../../common/utils"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const cramiPackage_entity_1 = require("../crami/cramiPackage.entity"); -const config_entity_1 = require("../globalConfig/config.entity"); -const globalConfig_service_1 = require("./../globalConfig/globalConfig.service"); -const accountLog_entity_1 = require("./accountLog.entity"); -const balance_entity_1 = require("./balance.entity"); -const userBalance_entity_1 = require("./userBalance.entity"); -const date_1 = require("../../common/utils/date"); -const chatGroup_entity_1 = require("../chatGroup/chatGroup.entity"); -const chatLog_entity_1 = require("../chatLog/chatLog.entity"); -const user_entity_1 = require("../user/user.entity"); -const fingerprint_entity_1 = require("./fingerprint.entity"); -let UserBalanceService = class UserBalanceService { - constructor(balanceEntity, userBalanceEntity, accountLogEntity, cramiPackageEntity, configEntity, userEntity, fingerprintLogEntity, chatGroupEntity, chatLogEntity, globalConfigService) { - this.balanceEntity = balanceEntity; - this.userBalanceEntity = userBalanceEntity; - this.accountLogEntity = accountLogEntity; - this.cramiPackageEntity = cramiPackageEntity; - this.configEntity = configEntity; - this.userEntity = userEntity; - this.fingerprintLogEntity = fingerprintLogEntity; - this.chatGroupEntity = chatGroupEntity; - this.chatLogEntity = chatLogEntity; - this.globalConfigService = globalConfigService; - } - async addBalanceToNewUser(userId) { - try { - const registerConfigs = await this.configEntity.find({ - where: { - configKey: (0, typeorm_2.In)([ - 'registerSendStatus', - 'registerSendModel3Count', - 'registerSendModel4Count', - 'registerSendDrawMjCount', - 'firstRegisterSendStatus', - 'firstRegisterSendRank', - 'firstRregisterSendModel3Count', - 'firstRregisterSendModel4Count', - 'firstRregisterSendDrawMjCount', - ]), - }, - }); - const configMap = registerConfigs.reduce((pre, cur) => { - const num = Number(cur.configVal); - const n = Number.isInteger(num) && num > 0 ? num : 0; - pre[cur.configKey] = n; - return pre; - }, {}); - let model3Count = 0; - let model4Count = 0; - let drawMjCount = 0; - if (configMap.registerSendStatus === 1) { - model3Count = model3Count + configMap.registerSendModel3Count; - model4Count = model4Count + configMap.registerSendModel4Count; - drawMjCount = drawMjCount + configMap.registerSendDrawMjCount; - } - if (configMap.registerSendStatus === 1 && - configMap.firstRegisterSendStatus === 1 && - userId <= configMap.firstRegisterSendRank) { - model3Count = model3Count + configMap.firstRregisterSendModel3Count; - model4Count = model4Count + configMap.firstRregisterSendModel4Count; - drawMjCount = drawMjCount + configMap.firstRregisterSendDrawMjCount; - } - await this.saveRecordRechargeLog({ - userId, - rechargeType: balance_constant_1.RechargeType.REG_GIFT, - model3Count, - drawMjCount, - model4Count, - }); - await this.userBalanceEntity.save({ - userId, - model3Count, - model4Count, - drawMjCount, - useTokens: 0, - }); - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('注册赠送失败,请联系管理员!', common_1.HttpStatus.BAD_REQUEST); - } - } - async validateBalance(req, type, amount) { - const { id: userId, role } = req.user; - let b = await this.userBalanceEntity.findOne({ where: { userId } }); - if (!b) { - b = await this.createBaseUserBalance(userId); - } - if (role === 'visitor') { - return this.validateVisitorBalance(req, type, amount); - } - const memberKey = type === 1 - ? 'memberModel3Count' - : type === 2 - ? 'memberModel4Count' - : type === 3 - ? 'memberDrawMjCount' - : null; - const baseKey = type === 1 - ? 'model3Count' - : type === 2 - ? 'model4Count' - : type === 3 - ? 'drawMjCount' - : null; - if (b.packageId && b[memberKey] + b[baseKey] < amount) { - if (b[baseKey] < amount) { - throw new common_1.HttpException(`积分不足,继续体验服务,请按需选购套餐!`, common_1.HttpStatus.PAYMENT_REQUIRED); - } - } - if (!b.packageId && b[baseKey] < amount) { - throw new common_1.HttpException(`积分不足,继续体验服务,请按需选购套餐!`, common_1.HttpStatus.PAYMENT_REQUIRED); - } - return b; - } - async validateVisitorBalance(req, type, amount) { - const { id } = req.user; - const baseKey = type === 1 - ? 'model3Count' - : type === 2 - ? 'model4Count' - : type === 3 - ? 'drawMjCount' - : null; - const now = new Date(); - const log = await this.fingerprintLogEntity.findOne({ - where: { fingerprint: id }, - }); - const { visitorModel3Num, visitorModel4Num, visitorMJNum } = await this.globalConfigService.getConfigs([ - 'visitorModel3Num', - 'visitorModel4Num', - 'visitorMJNum', - ]); - const settings = { - model3Count: visitorModel3Num ? Number(visitorModel3Num) : 0, - model4Count: visitorModel4Num ? Number(visitorModel4Num) : 0, - drawMjCount: visitorMJNum ? Number(visitorMJNum) : 0, - }; - if (!log) { - let data = { - fingerprint: id, - model3Count: 0, - model4Count: 0, - drawMjCount: 0, - }; - data[baseKey] = data[baseKey] + amount; - if (data[baseKey] > settings[baseKey]) { - throw new common_1.HttpException(`今日体验额度使用完毕,请注册使用完整服务!`, common_1.HttpStatus.PAYMENT_REQUIRED); - } - else { - await this.fingerprintLogEntity.save(data); - return true; - } - } - else { - const { model3Count, model4Count, drawMjCount } = log; - let data = { - model3Count, - model4Count, - drawMjCount, - }; - const date = Number(new Date(log.updatedAt)); - const isUpdateLastDay = this.isUpdatedToday(date); - if (isUpdateLastDay) { - data[baseKey] = data[baseKey] + amount; - } - else { - data = { - model3Count: 0, - model4Count: 0, - drawMjCount: 0, - }; - data[baseKey] = data[baseKey] + amount; - } - if (data[baseKey] > settings[baseKey]) { - throw new common_1.HttpException(`今日体验额度使用完毕,请注册使用完整服务!`, common_1.HttpStatus.PAYMENT_REQUIRED); - } - else { - await this.fingerprintLogEntity.update({ fingerprint: id }, data); - return true; - } - } - } - isUpdatedToday(date) { - const now = new Date(); - const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()); - return date >= todayStart; - } - async deductFromBalance(userId, deductionType, amount, UseAmount = 0) { - const b = await this.userBalanceEntity.findOne({ where: { userId } }); - if (!b) { - throw new common_1.HttpException('缺失当前用户账户记录!', common_1.HttpStatus.BAD_REQUEST); - } - const keys = { - 1: { - member: 'memberModel3Count', - nonMember: 'model3Count', - token: 'useModel3Token', - }, - 2: { - member: 'memberModel4Count', - nonMember: 'model4Count', - token: 'useModel4Token', - }, - 3: { - member: 'memberDrawMjCount', - nonMember: 'drawMjCount', - token: 'useDrawMjToken', - }, - }; - const { member, nonMember, token } = keys[deductionType]; - let remainingAmount = amount; - let newMemberBalance = Math.max(b[member] - remainingAmount, 0); - remainingAmount -= b[member] - newMemberBalance; - let newNonMemberBalance = b[nonMember]; - if (remainingAmount > 0) { - newNonMemberBalance = Math.max(b[nonMember] - remainingAmount, 0); - remainingAmount -= b[nonMember] - newNonMemberBalance; - } - const updateBalance = { - [member]: newMemberBalance, - [nonMember]: newNonMemberBalance, - [token]: (b[token] || 0) + UseAmount, - }; - if (token === 'useModel3Token' || token === 'useModel4Token') { - updateBalance[token.replace('Token', 'Count')] = - (b[token.replace('Token', 'Count')] || 0) + amount; - } - const result = await this.userBalanceEntity.update({ userId }, updateBalance); - if (result.affected === 0) { - throw new common_1.HttpException('消费余额失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async queryUserBalance(userId) { - try { - const res = await this.userBalanceEntity.findOne({ - where: { userId }, - select: [ - 'packageId', - 'model3Count', - 'model4Count', - 'drawMjCount', - 'memberModel3Count', - 'memberModel4Count', - 'memberDrawMjCount', - 'useModel3Count', - 'useModel4Count', - 'useModel3Token', - 'useModel4Token', - 'useDrawMjToken', - 'expirationTime', - ], - }); - if (!res) { - const user = await this.createBaseUserBalance(userId); - if (user) { - return await this.queryUserBalance(userId); - } - else { - throw new common_1.HttpException('查询当前用户余额失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - res.sumModel3Count = res.packageId - ? res.model3Count + res.memberModel3Count - : res.model3Count; - res.sumModel4Count = res.packageId - ? res.model4Count + res.memberModel4Count - : res.model4Count; - res.sumDrawMjCount = res.packageId - ? res.drawMjCount + res.memberDrawMjCount - : res.drawMjCount; - res.expirationTime = res.expirationTime - ? (0, date_1.formatDate)(res.expirationTime, 'YYYY-MM-DD') - : null; - return res; - } - catch (error) { - console.log('error: ', error); - } - } - async saveRecordRechargeLog(logInfo) { - const { userId, rechargeType, model3Count, model4Count, drawMjCount, days = -1, pkgName = '', extent = '', } = logInfo; - if (!userId) { - throw new common_1.HttpException('当前用户不存在,记录充值日志异常', common_1.HttpStatus.BAD_REQUEST); - } - const uid = (0, utils_1.createRandomUid)(); - return await this.accountLogEntity.save({ - userId, - rechargeType, - model3Count, - model4Count, - drawMjCount, - days, - extent, - uid, - pkgName, - }); - } - async createBaseUserBalance(userId, userBalanceInfo = {}) { - const { model3Count = 0, model4Count = 0, drawMjCount = 0, } = userBalanceInfo; - const balance = await this.userBalanceEntity.findOne({ where: { userId } }); - if (balance) { - throw new common_1.HttpException('当前用户无需创建账户信息!', common_1.HttpStatus.BAD_REQUEST); - } - return await this.userBalanceEntity.save({ - userId, - model3Count, - model4Count, - drawMjCount, - }); - } - async addBalanceToUser(userId, balance, days = -1) { - try { - const userBalanceInfo = (await this.userBalanceEntity.findOne({ where: { userId } })) || - (await this.createBaseUserBalance(userId)); - if (!userBalanceInfo) { - throw new common_1.HttpException('查询用户账户信息失败!', common_1.HttpStatus.BAD_REQUEST); - } - const { model3Count, model4Count, drawMjCount, memberModel3Count, memberModel4Count, memberDrawMjCount, } = userBalanceInfo; - let params = {}; - if (days > 0) { - const { packageId } = balance; - if (!packageId) { - throw new common_1.HttpException('缺失当前套餐ID、充值失败!', common_1.HttpStatus.BAD_REQUEST); - } - const pkgInfo = await this.cramiPackageEntity.findOne({ - where: { id: packageId }, - }); - if (!pkgInfo) { - throw new common_1.HttpException('当前套餐不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const { weight } = pkgInfo; - if (!userBalanceInfo.packageId) { - params = { - memberModel3Count: memberModel3Count + balance.model3Count, - memberModel4Count: memberModel4Count + balance.model4Count, - memberDrawMjCount: memberDrawMjCount + balance.drawMjCount, - expirationTime: (0, date_1.default)() - .add(days > 0 ? days : 0, 'day') - .format('YYYY-MM-DD HH:mm:ss'), - packageId: packageId, - }; - } - else { - const curPackageInfo = await this.cramiPackageEntity.findOne({ - where: { id: userBalanceInfo.packageId }, - }); - if (weight >= curPackageInfo.weight) { - params = { - memberModel3Count: memberModel3Count + balance.model3Count, - memberModel4Count: memberModel4Count + balance.model4Count, - memberDrawMjCount: memberDrawMjCount + balance.drawMjCount, - expirationTime: (0, date_1.default)(userBalanceInfo.expirationTime) - .add(days > 0 ? days : 0, 'day') - .format('YYYY-MM-DD HH:mm:ss'), - packageId: packageId, - }; - } - if (weight < curPackageInfo.weight) { - params = { - memberModel3Count: memberModel3Count + balance.model3Count, - memberModel4Count: memberModel4Count + balance.model4Count, - memberDrawMjCount: memberDrawMjCount + balance.drawMjCount, - }; - } - } - } - if (days <= 0) { - params = { - model3Count: model3Count + balance.model3Count, - model4Count: model4Count + balance.model4Count, - drawMjCount: drawMjCount + balance.drawMjCount, - }; - } - const result = await this.userBalanceEntity.update({ userId }, params); - if (result.affected === 0) { - throw new common_1.HttpException(`${userId}充值失败`, common_1.HttpStatus.BAD_REQUEST); - } - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('用户充值失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async addBalanceToOrder(order) { - console.log('充值的工单信息:', order); - try { - const { userId, goodsId } = order; - const pkg = await this.cramiPackageEntity.findOne({ - where: { id: order.goodsId, status: 1 }, - }); - if (!pkg) { - throw new common_1.HttpException('非法操作、当前充值套餐暂不存在!', common_1.HttpStatus.BAD_REQUEST); - } - const { model3Count, model4Count, drawMjCount, days, name: pkgName, } = pkg; - const money = { - model3Count, - model4Count, - drawMjCount, - days, - packageId: order.goodsId, - }; - await this.addBalanceToUser(userId, money, days); - await this.saveRecordRechargeLog({ - userId, - rechargeType: balance_constant_1.RechargeType.SCAN_PAY, - model3Count, - model4Count, - drawMjCount, - pkgName, - days, - }); - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('充值失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async getRechargeLog(req, params) { - const { page = 1, size = 20 } = params; - const { id } = req.user; - const [rows, count] = await this.accountLogEntity.findAndCount({ - where: { userId: id }, - order: { id: 'DESC' }, - skip: (page - 1) * size, - take: size, - }); - rows.forEach((item) => { - item.expireDateCn = item.days > 0 ? `${item.days}天` : '永久'; - }); - return { rows: (0, date_1.formatCreateOrUpdateDate)(rows), count }; - } - async getAccountLog(req, params) { - try { - const { page = 1, size = 10, userId, rechargeType, packageId } = params; - const { role } = req.user; - const where = {}; - rechargeType && (where.rechargeType = rechargeType); - where.userId = userId || (0, typeorm_2.LessThan)(100000); - packageId && (where.packageId = { $like: `%${packageId}%` }); - const [rows, count] = await this.accountLogEntity.findAndCount({ - where, - order: { id: 'DESC' }, - skip: (page - 1) * size, - take: size, - }); - const userIds = rows.map((item) => item.userId); - const userInfo = await this.userEntity.find({ - where: { id: (0, typeorm_2.In)(userIds) }, - }); - rows.forEach((item) => { - const user = userInfo.find((user) => user.id === item.userId); - item.username = user === null || user === void 0 ? void 0 : user.username; - item.email = user === null || user === void 0 ? void 0 : user.email; - item.phone = user === null || user === void 0 ? void 0 : user.phone; - item.status = user === null || user === void 0 ? void 0 : user.status; - item.avatar = user === null || user === void 0 ? void 0 : user.avatar; - }); - if (role !== 'super') { - rows.forEach((item) => { - item.email = item.email ? (0, utils_1.hideString)(item.email) : ''; - item.phone = item.phone ? (0, utils_1.hideString)(item.phone) : ''; - }); - } - return { rows, count }; - } - catch (error) { - console.log('error: ', error); - throw new common_1.HttpException('查询用户账户失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async queryUserBalanceByIds(ids) { - return await this.userBalanceEntity.find({ where: { userId: (0, typeorm_2.In)(ids) } }); - } - async refundMjBalance(userId, amount) { - return await this.deductFromBalance(userId, 'mjDraw', -amount); - } - async inheritVisitorData(req) { - const { fingerprint } = req.headers; - const { id: userId } = req.user; - await this.chatLogEntity.update({ userId: Number(fingerprint) }, { userId }); - await this.chatGroupEntity.update({ userId: Number(fingerprint) }, { userId }); - return 1; - } - async getVisitorCount(req) { - const { fingerprint } = req.headers; - const countChat = await this.chatLogEntity.count({ - where: { userId: fingerprint }, - }); - const countChatGroup = await this.chatGroupEntity.count({ - where: { userId: fingerprint }, - }); - return countChat || countChatGroup || 0; - } - async checkUserCertification(userId) { - const userInfo = await this.userEntity.findOne({ - where: { id: userId }, - }); - const userBalance = await this.userBalanceEntity.findOne({ - where: { userId }, - }); - if (!userInfo || !userBalance) { - return; - } - const { phoneValidationMessageCount, identityVerificationMessageCount, openIdentity, openPhoneValidation, } = await this.globalConfigService.getConfigs([ - 'phoneValidationMessageCount', - 'identityVerificationMessageCount', - 'openIdentity', - 'openPhoneValidation', - ]); - const phoneValidationCount = Number(phoneValidationMessageCount); - const identityValidationCount = Number(identityVerificationMessageCount); - const model3Count = Number(userBalance.useModel3Count) || 0; - const model4Count = Number(userBalance.useModel4Count) || 0; - const totalTokens = model3Count + model4Count; - if (openPhoneValidation === '1' && - totalTokens >= phoneValidationCount && - !userInfo.phone) { - throw new common_1.HttpException('请完成手机号绑定', common_1.HttpStatus.BAD_REQUEST); - } - if (openIdentity === '1' && - totalTokens >= identityValidationCount && - (!userInfo.realName || !userInfo.idCard)) { - throw new common_1.HttpException('请完成实名认证', common_1.HttpStatus.BAD_REQUEST); - } - } -}; -UserBalanceService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(balance_entity_1.BalanceEntity)), - __param(1, (0, typeorm_1.InjectRepository)(userBalance_entity_1.UserBalanceEntity)), - __param(2, (0, typeorm_1.InjectRepository)(accountLog_entity_1.AccountLogEntity)), - __param(3, (0, typeorm_1.InjectRepository)(cramiPackage_entity_1.CramiPackageEntity)), - __param(4, (0, typeorm_1.InjectRepository)(config_entity_1.ConfigEntity)), - __param(5, (0, typeorm_1.InjectRepository)(user_entity_1.UserEntity)), - __param(6, (0, typeorm_1.InjectRepository)(fingerprint_entity_1.FingerprintLogEntity)), - __param(7, (0, typeorm_1.InjectRepository)(chatGroup_entity_1.ChatGroupEntity)), - __param(8, (0, typeorm_1.InjectRepository)(chatLog_entity_1.ChatLogEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - globalConfig_service_1.GlobalConfigService]) -], UserBalanceService); -exports.UserBalanceService = UserBalanceService; diff --git a/AIWebQuickDeploy/dist/modules/verification/dto/verifyCode.dto.js b/AIWebQuickDeploy/dist/modules/verification/dto/verifyCode.dto.js deleted file mode 100644 index 6096653..0000000 --- a/AIWebQuickDeploy/dist/modules/verification/dto/verifyCode.dto.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerifyCodeDto = void 0; -const class_validator_1 = require("class-validator"); -const swagger_1 = require("@nestjs/swagger"); -class VerifyCodeDto { -} -__decorate([ - (0, swagger_1.ApiProperty)({ example: '1', description: '验证码下发id' }), - (0, class_validator_1.IsNotEmpty)({ message: '缺少必要参数!' }), - __metadata("design:type", Number) -], VerifyCodeDto.prototype, "id", void 0); -__decorate([ - (0, swagger_1.ApiProperty)({ example: '15366754', description: '验证码' }), - (0, class_validator_1.IsNotEmpty)({ message: '验证码不能为空!' }), - __metadata("design:type", Number) -], VerifyCodeDto.prototype, "code", void 0); -exports.VerifyCodeDto = VerifyCodeDto; diff --git a/AIWebQuickDeploy/dist/modules/verification/verification.module.js b/AIWebQuickDeploy/dist/modules/verification/verification.module.js deleted file mode 100644 index 5c8c891..0000000 --- a/AIWebQuickDeploy/dist/modules/verification/verification.module.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerificationModule = void 0; -const typeorm_1 = require("@nestjs/typeorm"); -const common_1 = require("@nestjs/common"); -const verification_service_1 = require("./verification.service"); -const verifycation_entity_1 = require("./verifycation.entity"); -const redisCache_service_1 = require("../redisCache/redisCache.service"); -let VerificationModule = class VerificationModule { -}; -VerificationModule = __decorate([ - (0, common_1.Module)({ - imports: [typeorm_1.TypeOrmModule.forFeature([verifycation_entity_1.VerifycationEntity])], - providers: [redisCache_service_1.RedisCacheService, verification_service_1.VerificationService], - }) -], VerificationModule); -exports.VerificationModule = VerificationModule; diff --git a/AIWebQuickDeploy/dist/modules/verification/verification.service.js b/AIWebQuickDeploy/dist/modules/verification/verification.service.js deleted file mode 100644 index 1e20817..0000000 --- a/AIWebQuickDeploy/dist/modules/verification/verification.service.js +++ /dev/null @@ -1,150 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerificationService = void 0; -const utils_1 = require("../../common/utils"); -const globalConfig_service_1 = require("../globalConfig/globalConfig.service"); -const common_1 = require("@nestjs/common"); -const typeorm_1 = require("@nestjs/typeorm"); -const typeorm_2 = require("typeorm"); -const redisCache_service_1 = require("../redisCache/redisCache.service"); -const status_constant_1 = require("./../../common/constants/status.constant"); -const verifycation_entity_1 = require("./verifycation.entity"); -const Core = require("@alicloud/pop-core"); -const axios_1 = require("axios"); -let VerificationService = class VerificationService { - constructor(verifycationEntity, globalConfigService, redisCacheService) { - this.verifycationEntity = verifycationEntity; - this.globalConfigService = globalConfigService; - this.redisCacheService = redisCacheService; - } - async createVerification(user, type, expir = 30 * 60) { - const historyVerify = await this.verifycationEntity.findOne({ - where: { userId: user.id, type }, - order: { createdAt: 'DESC' }, - }); - if (historyVerify && - historyVerify.createdAt.getTime() + 1 * 60 * 1000 > Date.now()) { - const diffS = Math.ceil((historyVerify.createdAt.getTime() + 1 * 60 * 1000 - Date.now()) / 1000); - throw new common_1.HttpException(`${diffS}S内不得重新发送`, common_1.HttpStatus.BAD_REQUEST); - } - const code = (0, utils_1.createRandomCode)(); - const expiresAt = new Date(Date.now() + expir * 1000); - const { id, email } = user; - const verifycation = { userId: id, type, code, expiresAt, email }; - return await this.verifycationEntity.save(verifycation); - } - async verifyCode({ code, id }, type) { - const v = await this.verifycationEntity.findOne({ - where: { id, type }, - order: { createdAt: 'DESC' }, - }); - if (!v) { - throw new common_1.HttpException('验证码不存在', common_1.HttpStatus.BAD_REQUEST); - } - if (v.used === status_constant_1.VerificationUseStatusEnum.USED) { - throw new common_1.HttpException('当前验证码已被使用!', common_1.HttpStatus.BAD_REQUEST); - } - else { - v.used = status_constant_1.VerificationUseStatusEnum.USED; - await this.verifycationEntity.update({ id }, v); - } - if (Number(v.code) !== Number(code)) { - throw new common_1.HttpException('验证码错误', common_1.HttpStatus.BAD_REQUEST); - } - if (v.expiresAt < new Date()) { - throw new common_1.HttpException('验证码已过期', common_1.HttpStatus.BAD_REQUEST); - } - return v; - } - async sendPhoneCode(messageInfo) { - var _a; - const { accessKeyId, accessKeySecret, SignName, TemplateCode } = await this.globalConfigService.getPhoneVerifyConfig(); - console.log('Received messageInfo:', messageInfo); - const { phone, code } = messageInfo; - if (!phone || !code) { - throw new common_1.HttpException('确实必要参数错误!', common_1.HttpStatus.BAD_REQUEST); - } - const client = new Core({ - accessKeyId, - accessKeySecret, - endpoint: 'https://dysmsapi.aliyuncs.com', - apiVersion: '2017-05-25', - }); - const params = { - PhoneNumbers: phone, - SignName, - TemplateCode, - TemplateParam: JSON.stringify({ code }), - }; - const requestOption = { method: 'POST', formatParams: false }; - try { - const response = await client.request('SendSms', params, requestOption); - if (response.Code === 'OK') { - return true; - } - else { - throw new common_1.HttpException(response.Message || '验证码发送失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - catch (error) { - throw new common_1.HttpException(((_a = error === null || error === void 0 ? void 0 : error.data) === null || _a === void 0 ? void 0 : _a.Message) || '验证码发送失败!', common_1.HttpStatus.BAD_REQUEST); - } - } - async verifyIdentity(identityInfo) { - const appCode = await this.globalConfigService.getConfigs(['appCode']); - const { name, idCard } = identityInfo; - if (!name || !idCard) { - throw new common_1.HttpException('缺少必要参数!', common_1.HttpStatus.BAD_REQUEST); - } - common_1.Logger.debug(`Received identityInfo: ${name}, ${idCard}`); - const apiUrl = 'https://eid.shumaidata.com/eid/check'; - const headers = { - Authorization: `APPCODE ${appCode}`, - 'Content-Type': 'application/x-www-form-urlencoded', - }; - const params = new URLSearchParams({ - name: name, - idcard: idCard, - }); - try { - const response = await axios_1.default.post(apiUrl, params, { headers }); - const responseString = JSON.stringify(response.data); - common_1.Logger.debug(`Received response: ${responseString}`); - switch (response.data.result.res) { - case '1': - return true; - case '2': - common_1.Logger.log('验证不一致', 'VerificationService'); - case '3': - common_1.Logger.log('实名认证异常', 'VerificationService'); - default: - common_1.Logger.log('未知的认证结果', 'VerificationService'); - } - return false; - } - catch (error) { - common_1.Logger.error(`Error: ${error.message}`, error.stack, 'Verification'); - return false; - } - } -}; -VerificationService = __decorate([ - (0, common_1.Injectable)(), - __param(0, (0, typeorm_1.InjectRepository)(verifycation_entity_1.VerifycationEntity)), - __metadata("design:paramtypes", [typeorm_2.Repository, - globalConfig_service_1.GlobalConfigService, - redisCache_service_1.RedisCacheService]) -], VerificationService); -exports.VerificationService = VerificationService; diff --git a/AIWebQuickDeploy/dist/modules/verification/verifycation.entity.js b/AIWebQuickDeploy/dist/modules/verification/verifycation.entity.js deleted file mode 100644 index fb0e58b..0000000 --- a/AIWebQuickDeploy/dist/modules/verification/verifycation.entity.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.VerifycationEntity = void 0; -const typeorm_1 = require("typeorm"); -const baseEntity_1 = require("../../common/entity/baseEntity"); -let VerifycationEntity = class VerifycationEntity extends baseEntity_1.BaseEntity { -}; -__decorate([ - (0, typeorm_1.Column)({ comment: '用户id' }), - __metadata("design:type", Number) -], VerifycationEntity.prototype, "userId", void 0); -__decorate([ - (0, typeorm_1.Column)({ nullable: false, comment: '验证类型' }), - __metadata("design:type", Number) -], VerifycationEntity.prototype, "type", void 0); -__decorate([ - (0, typeorm_1.Column)({ nullable: false, comment: '验证码' }), - __metadata("design:type", Number) -], VerifycationEntity.prototype, "code", void 0); -__decorate([ - (0, typeorm_1.Column)({ comment: '过期时间' }), - __metadata("design:type", Date) -], VerifycationEntity.prototype, "expiresAt", void 0); -__decorate([ - (0, typeorm_1.Column)({ length: 64, nullable: false, comment: '发送的邮箱' }), - __metadata("design:type", String) -], VerifycationEntity.prototype, "email", void 0); -__decorate([ - (0, typeorm_1.Column)({ default: 0, nullable: false, comment: '是否已经使用了' }), - __metadata("design:type", Number) -], VerifycationEntity.prototype, "used", void 0); -VerifycationEntity = __decorate([ - (0, typeorm_1.Entity)({ name: 'verifycation' }) -], VerifycationEntity); -exports.VerifycationEntity = VerifycationEntity; diff --git a/AIWebQuickDeploy/docker-compose.yml b/AIWebQuickDeploy/docker-compose.yml index 4661828..9039bc8 100644 --- a/AIWebQuickDeploy/docker-compose.yml +++ b/AIWebQuickDeploy/docker-compose.yml @@ -13,10 +13,10 @@ services: # - "3306:3306" environment: TZ: Asia/Shanghai - MYSQL_ROOT_PASSWORD: "123456" - MYSQL_DATABASE: "chatgpt" - MYSQL_USER: "chatgpt" - MYSQL_PASSWORD: "123456" + MYSQL_ROOT_PASSWORD: '123456' + MYSQL_DATABASE: 'chatgpt' + MYSQL_USER: 'chatgpt' + MYSQL_PASSWORD: '123456' redis: image: redis @@ -30,16 +30,27 @@ services: - ./data/redis/:/data/ 99ai: - build: ./ - # image: vastxie/99ai:latest + build: + context: . # Use the current directory as build context + dockerfile: Dockerfile # Specify the Dockerfile name container_name: 99ai restart: always ports: - - "9520:9520" + - '9520:9520' volumes: - - ./.env.docker:/app/.env + - ./.env.docker:/usr/src/app/.env:rw # Mount with explicit read-write permissions + - ./dist:/usr/src/app/dist:ro # 挂载dist目录(只读) + - ./public:/usr/src/app/public:ro # 挂载public目录(只读) + - ./public/file:/usr/src/app/public/file:rw # 挂载public/file目录(读写) + - ./package.json:/usr/src/app/package.json:ro # 挂载package.json(只读) + - ./pm2.conf.json:/usr/src/app/pm2.conf.json:ro # 挂载pm2.conf.json(只读) + - myapp_data:/app/data # Mount the named volume for persistent instance ID environment: - TZ=Asia/Shanghai - depends_on: - - mysql - - redis + # depends_on can often be removed if the app handles connection retries + # depends_on: + # - mysql + # - redis + +volumes: + myapp_data: # Define the named volume diff --git a/AIWebQuickDeploy/package.json b/AIWebQuickDeploy/package.json index ea491bd..dc4a022 100644 --- a/AIWebQuickDeploy/package.json +++ b/AIWebQuickDeploy/package.json @@ -1,6 +1,6 @@ { "name": "99ai", - "version": "4.1.0", + "version": "4.3.0", "description": "", "author": "vastxie", "private": true, @@ -8,12 +8,13 @@ "bin": "./dist/main.js", "scripts": { "start": "pm2 start pm2.conf.json", - "build": "nest build", + "prebuild": "pnpm run format", + "build": "pnpm format && nest build", "build:test": "nest build", - "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "format": "prettier --write 'src/**/*.{vue,ts,tsx,js,jsx,css,scss,less}'", "encrypt": "node ./encrypt.js", "start:daemon": "pm2 start pm2.conf.json --no-daemon", - "dev": "nest start --watch", + "dev": "nest start --watch --preserveWatchOutput", "start:debug": "nest start --debug --watch", "start:prod": "node dist/main", "test": "jest", @@ -26,68 +27,102 @@ "pkg:linux": "pkg . -t node16-linux-x64 -o app-linux --debug" }, "dependencies": { - "@alicloud/pop-core": "^1.7.13", - "@nestjs/bull": "^0.6.3", - "@nestjs/common": "^9.4.3", - "@nestjs/core": "^9.4.3", + "@alicloud/pop-core": "^1.8.0", + "@aws-sdk/client-s3": "^3.817.0", + "@google/genai": "^0.10.0", + "@langchain/community": "^0.3.42", + "@langchain/core": "^0.3.55", + "@langchain/langgraph": "^0.2.72", + "@langchain/langgraph-sdk": "^0.0.74", + "@langchain/openai": "^0.5.10", + "@langchain/tavily": "^0.1.1", + "@modelcontextprotocol/sdk": "^1.10.1", + "@nestjs/common": "^10.4.17", + "@nestjs/core": "^10.4.17", "@nestjs/jwt": "^10.2.0", - "@nestjs/passport": "^9.0.3", - "@nestjs/platform-express": "^9.4.3", - "@nestjs/schedule": "^2.2.3", + "@nestjs/passport": "^10.0.3", + "@nestjs/platform-express": "^10.4.17", + "@nestjs/schedule": "^4.1.2", "@nestjs/serve-static": "^4.0.2", - "@nestjs/swagger": "^6.3.0", - "@nestjs/typeorm": "^9.0.1", - "@nestjs/websockets": "^10.3.9", + "@nestjs/swagger": "^7.4.2", + "@nestjs/typeorm": "^10.0.2", + "@nestjs/websockets": "^10.4.17", + "@types/raw-body": "^2.3.0", "abort-controller": "^3.0.0", - "ali-oss": "^6.20.0", - "axios": "^1.7.2", + "ali-oss": "^6.22.0", + "axios": "^1.8.4", "bcryptjs": "^2.4.3", - "body-parser": "^1.20.2", - "bull": "^4.14.0", + "body-parser": "^1.20.3", "class-transformer": "^0.5.1", "class-validator": "^0.14.1", - "compression": "^1.7.4", - "cos-nodejs-sdk-v5": "^2.14.2", - "dayjs": "^1.11.11", - "decimal.js": "^10.4.3", - "dotenv": "^16.4.5", + "compression": "^1.8.0", + "cos-nodejs-sdk-v5": "^2.14.7", + "cross-fetch": "3.1.6", + "dayjs": "^1.11.13", + "dotenv": "^16.5.0", "exceljs": "^4.4.0", - "express": "^4.19.2", - "express-xml-bodyparser": "^0.3.0", - "form-data": "^4.0.0", - "gpt-tokenizer": "^2.2.1", + "express": "^4.21.2", + "fast-xml-parser": "^5.2.0", + "form-data": "^4.0.2", + "gpt-tokenizer": "^2.9.0", "guid-typescript": "^1.0.9", - "image-size": "^1.1.1", - "ioredis": "^5.4.1", - "isomorphic-fetch": "^3.0.0", - "javascript-obfuscator": "^4.1.1", + "https-proxy-agent": "7.0.2", + "iconv-lite": "^0.6.3", + "ioredis": "^5.6.1", + "jschardet": "^3.1.4", "jsonwebtoken": "^9.0.2", "lodash": "^4.17.21", + "mammoth": "^1.9.0", + "markdown-table": "^3.0.4", "mime-types": "^2.1.35", - "mysql2": "^3.10.1", - "nodemailer": "^6.9.14", + "mysql2": "^3.14.0", + "node-cron": "^3.0.3", + "node-machine-id": "^1.1.12", + "nodemailer": "^6.10.1", + "openai": "^4.96.0", "passport": "^0.6.0", "passport-jwt": "^4.0.1", + "path-to-regexp": "^1.9.0", "pdf-parse": "^1.1.1", - "qs": "^6.12.3", - "redis": "^4.6.14", + "pm2": "^6.0.5", + "pptxtojson": "^1.3.1", + "raw-body": "^3.0.0", + "redis": "^4.7.0", "reflect-metadata": "^0.1.14", - "rxjs": "^7.8.1", + "rxjs": "^7.8.2", "stream-to-buffer": "^0.1.0", - "typeorm": "^0.3.20", + "tough-cookie": "^4.1.3", + "typeorm": "^0.3.22", "uuid": "^9.0.1", - "wechatpay-node-v3": "^2.2.0" + "wechatpay-node-v3": "^2.2.1", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz" }, "devDependencies": { - "@nestjs/cli": "^9.5.0", - "@nestjs/testing": "^9.4.3", + "@babel/core": "^7.26.10", + "@nestjs/cli": "^10.4.9", "@types/express": "^4.17.21", "@types/node": "18.11.18", + "fs-extra": "^11.3.0", + "javascript-obfuscator": "^4.1.1", "jest": "29.3.1", "prettier": "^2.8.8", "ts-jest": "29.0.3", + "ts-loader": "^9.5.2", "ts-node": "^10.9.2", - "typescript": "^4.9.5" + "typescript": "^5.8.3" + }, + "pnpm": { + "peerDependencyRules": { + "ignoreMissing": [ + "@nestjs/websockets", + "@nestjs/common", + "@nestjs/core" + ] + }, + "overrides": { + "@nestjs/serve-static>path-to-regexp": "^1.9.0", + "tough-cookie": "^4.1.3" + } }, "jest": { "moduleFileExtensions": [ diff --git a/AIWebQuickDeploy/public/admin/assets/HButton-Ujw0orpR.js b/AIWebQuickDeploy/public/admin/assets/HButton-BuyjdFXj.js similarity index 65% rename from AIWebQuickDeploy/public/admin/assets/HButton-Ujw0orpR.js rename to AIWebQuickDeploy/public/admin/assets/HButton-BuyjdFXj.js index 98bb1b0..3452512 100644 --- a/AIWebQuickDeploy/public/admin/assets/HButton-Ujw0orpR.js +++ b/AIWebQuickDeploy/public/admin/assets/HButton-BuyjdFXj.js @@ -5,4 +5,4 @@ * https://fantastic-admin.github.io */ -import{_ as f}from"./index-6QRvoxq4.js";export{f as default}; +import{j as a}from"./index-BERX8Mlm.js";export{a as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HCheckList-BvP-W6tS.js b/AIWebQuickDeploy/public/admin/assets/HCheckList-BvP-W6tS.js new file mode 100644 index 0000000..6b1d003 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HCheckList-BvP-W6tS.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as e}from"./HCheckList.vue_vue_type_script_setup_true_lang-Di8Bi58Y.js";import"./index-BERX8Mlm.js";export{e as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HCheckList-DmjIeCde.js b/AIWebQuickDeploy/public/admin/assets/HCheckList-DmjIeCde.js deleted file mode 100644 index 0224d4a..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HCheckList-DmjIeCde.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as m}from"./HCheckList.vue_vue_type_script_setup_true_lang-BLNEihme.js";import"./index-6QRvoxq4.js";export{m as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HCheckList.vue_vue_type_script_setup_true_lang-BLNEihme.js b/AIWebQuickDeploy/public/admin/assets/HCheckList.vue_vue_type_script_setup_true_lang-BLNEihme.js deleted file mode 100644 index 9141141..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HCheckList.vue_vue_type_script_setup_true_lang-BLNEihme.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{d as u,as as n,at as m,X as b,g as s,c as t,F as o,s as p,Q as _,z as g,h,t as f,j as v}from"./index-6QRvoxq4.js";const k={class:"inline-flex select-none items-center justify-center of-hidden rounded-md bg-stone-3 dark-bg-stone-7"},y=["disabled","onClick"],V=u({__name:"HCheckList",props:n({options:{},disabled:{type:Boolean,default:!1}},{modelValue:{},modelModifiers:{}}),emits:n(["change"],["update:modelValue"]),setup(i,{emit:d}){const r=d,l=m(i,"modelValue");return b(l,a=>{r("change",a)}),(a,x)=>{const c=v;return s(),t("div",k,[(s(!0),t(o,null,p(a.options,e=>(s(),t("button",{key:e.value,disabled:a.disabled||e.disabled,class:_(["flex cursor-pointer items-center truncate border-size-0 bg-inherit px-2 py-1.5 text-sm disabled-cursor-not-allowed disabled-opacity-50 hover-not-disabled-bg-ui-primary hover-not-disabled-text-ui-text",{"text-ui-text bg-ui-primary":l.value===e.value}]),onClick:C=>l.value=e.value},[e.icon?(s(),g(c,{key:0,name:e.icon},null,8,["name"])):(s(),t(o,{key:1},[h(f(e.label),1)],64))],10,y))),128))])}}});export{V as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HCheckList.vue_vue_type_script_setup_true_lang-Di8Bi58Y.js b/AIWebQuickDeploy/public/admin/assets/HCheckList.vue_vue_type_script_setup_true_lang-Di8Bi58Y.js new file mode 100644 index 0000000..0f469f7 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HCheckList.vue_vue_type_script_setup_true_lang-Di8Bi58Y.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{d as e,aS as a,aT as s,a0 as t,c as i,e as l,V as o,W as n,a6 as d,a2 as r,_ as u,h as c,t as b}from"./index-BERX8Mlm.js";const m={class:"inline-flex select-none items-center justify-center of-hidden rounded-md bg-stone-3 dark-bg-stone-7"},p=["disabled","onClick"],x=e({__name:"HCheckList",props:a({options:{},disabled:{type:Boolean,default:!1}},{modelValue:{},modelModifiers:{}}),emits:a(["change"],["update:modelValue"]),setup(e,{emit:a}){const x=a,y=s(e,"modelValue");return t(y,(e=>{x("change",e)})),(e,a)=>{const s=u;return l(),i("div",m,[(l(!0),i(o,null,n(e.options,(a=>(l(),i("button",{key:a.value,disabled:e.disabled||a.disabled,class:d(["flex cursor-pointer items-center truncate border-size-0 bg-inherit px-2 py-1.5 text-sm disabled-cursor-not-allowed disabled-opacity-50 hover-not-disabled-bg-ui-primary hover-not-disabled-text-ui-text",{"text-ui-text bg-ui-primary":y.value===a.value}]),onClick:e=>y.value=a.value},[a.icon?(l(),r(s,{key:0,name:a.icon},null,8,["name"])):(l(),i(o,{key:1},[c(b(a.label),1)],64))],10,p)))),128))])}}});export{x as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDialog-Dc3-VFqw.js b/AIWebQuickDeploy/public/admin/assets/HDialog-Dc3-VFqw.js new file mode 100644 index 0000000..88b634b --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HDialog-Dc3-VFqw.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as e}from"./HDialog.vue_vue_type_script_setup_true_lang-BfrjeNSs.js";import"./index-BERX8Mlm.js";export{e as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDialog-SD64xsF6.js b/AIWebQuickDeploy/public/admin/assets/HDialog-SD64xsF6.js deleted file mode 100644 index c715366..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HDialog-SD64xsF6.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as m}from"./HDialog.vue_vue_type_script_setup_true_lang-an5zbG4e.js";import"./index-6QRvoxq4.js";export{m as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDialog.vue_vue_type_script_setup_true_lang-BfrjeNSs.js b/AIWebQuickDeploy/public/admin/assets/HDialog.vue_vue_type_script_setup_true_lang-BfrjeNSs.js new file mode 100644 index 0000000..dfc697d --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HDialog.vue_vue_type_script_setup_true_lang-BfrjeNSs.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{d as e,aS as a,aT as t,al as l,r as s,P as o,a2 as r,e as n,w as i,f as p,i as d,aJ as u,g as c,aK as f,R as y,a6 as m,aL as x,c as v,T as g,aU as w,h as b,t as _,_ as h,aN as k,aj as T,aP as j}from"./index-BERX8Mlm.js";const B={class:"fixed inset-0 overflow-y-auto"},C={class:"min-h-full flex items-end justify-center p-4 text-center lg-items-center"},F={flex:"~ items-center justify-between","px-4":"","py-3":"","border-b":"~ solid stone/15","text-6":""},V={key:0,flex:"~ items-center justify-end","px-4":"","py-3":"","border-t":"~ solid stone/15"},P=e({__name:"HDialog",props:a({appear:{type:Boolean,default:!1},title:{},preventClose:{type:Boolean,default:!1},overlay:{type:Boolean,default:!1}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:a(["close"],["update:modelValue"]),setup(e,{emit:a}){const P=a,$=t(e,"modelValue"),z=l(),D=s({enter:"ease-in-out duration-500",enterFrom:"opacity-0",enterTo:"opacity-100",leave:"ease-in-out duration-500",leaveFrom:"opacity-100",leaveTo:"opacity-0"}),H=o((()=>({enter:"ease-out duration-300",enterFrom:"opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95",enterTo:"opacity-100 translate-y-0 lg-scale-100",leave:"ease-in duration-200",leaveFrom:"opacity-100 translate-y-0 lg-scale-100",leaveTo:"opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95"})));function J(){$.value=!1,P("close")}return(e,a)=>{const t=h;return n(),r(d(j),{as:"template",appear:e.appear,show:$.value},{default:i((()=>[p(d(u),{class:"fixed inset-0 z-2000 flex",onClose:a[0]||(a[0]=a=>!e.preventClose&&J())},{default:i((()=>[p(d(f),y({as:"template",appear:e.appear},d(D)),{default:i((()=>[c("div",{class:m(["fixed inset-0 bg-stone-2/75 transition-opacity dark-bg-stone-8/75",{"backdrop-blur-sm":e.overlay}])},null,2)])),_:1},16,["appear"]),c("div",B,[c("div",C,[p(d(f),y({as:"template",appear:e.appear},d(H)),{default:i((()=>[p(d(x),{class:"relative w-full flex flex-col overflow-hidden rounded-xl bg-white text-left shadow-xl lg-my-8 lg-max-w-lg dark-bg-stone-8"},{default:i((()=>[c("div",F,[p(d(w),{"m-0":"","text-lg":"","text-dark":"","dark-text-white":""},{default:i((()=>[b(_(e.title),1)])),_:1}),p(t,{name:"i-carbon:close","cursor-pointer":"",onClick:J})]),p(d(k),{"m-0":"","overflow-y-auto":"","p-4":""},{default:i((()=>[T(e.$slots,"default")])),_:3}),d(z).footer?(n(),v("div",V,[T(e.$slots,"footer")])):g("",!0)])),_:3})])),_:3},16,["appear"])])])])),_:3})])),_:3},8,["appear","show"])}}});export{P as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDialog.vue_vue_type_script_setup_true_lang-an5zbG4e.js b/AIWebQuickDeploy/public/admin/assets/HDialog.vue_vue_type_script_setup_true_lang-an5zbG4e.js deleted file mode 100644 index 27d8c52..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HDialog.vue_vue_type_script_setup_true_lang-an5zbG4e.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{d as h,as as i,at as w,U as b,r as k,n as C,g as d,z as B,w as t,b as s,i as e,ah as p,ai as c,e as o,Q as V,aj as T,au as j,h as S,t as F,al as N,P as u,c as $,A as z,an as M,ao as D,j as P}from"./index-6QRvoxq4.js";const A={class:"fixed inset-0 overflow-y-auto"},E={class:"min-h-full flex items-end justify-center p-4 text-center lg-items-center"},G={flex:"~ items-center justify-between","px-4":"","py-3":"","border-b":"~ solid stone/15","text-6":""},H={key:0,flex:"~ items-center justify-end","px-4":"","py-3":"","border-t":"~ solid stone/15"},O=h({__name:"HDialog",props:i({appear:{type:Boolean,default:!1},title:{},preventClose:{type:Boolean,default:!1},overlay:{type:Boolean,default:!1}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:i(["close"],["update:modelValue"]),setup(f,{emit:m}){const y=m,l=w(f,"modelValue"),v=b(),g=k({enter:"ease-in-out duration-500",enterFrom:"opacity-0",enterTo:"opacity-100",leave:"ease-in-out duration-500",leaveFrom:"opacity-100",leaveTo:"opacity-0"}),x=C(()=>({enter:"ease-out duration-300",enterFrom:"opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95",enterTo:"opacity-100 translate-y-0 lg-scale-100",leave:"ease-in duration-200",leaveFrom:"opacity-100 translate-y-0 lg-scale-100",leaveTo:"opacity-0 translate-y-4 lg-translate-y-0 lg-scale-95"}));function n(){l.value=!1,y("close")}return(a,r)=>{const _=P;return d(),B(e(D),{as:"template",appear:a.appear,show:l.value},{default:t(()=>[s(e(M),{class:"fixed inset-0 z-2000 flex",onClose:r[0]||(r[0]=I=>!a.preventClose&&n())},{default:t(()=>[s(e(p),c({as:"template",appear:a.appear},e(g)),{default:t(()=>[o("div",{class:V(["fixed inset-0 bg-stone-2/75 transition-opacity dark-bg-stone-8/75",{"backdrop-blur-sm":a.overlay}])},null,2)]),_:1},16,["appear"]),o("div",A,[o("div",E,[s(e(p),c({as:"template",appear:a.appear},e(x)),{default:t(()=>[s(e(T),{class:"relative w-full flex flex-col overflow-hidden rounded-xl bg-white text-left shadow-xl lg-my-8 lg-max-w-lg dark-bg-stone-8"},{default:t(()=>[o("div",G,[s(e(j),{"m-0":"","text-lg":"","text-dark":"","dark-text-white":""},{default:t(()=>[S(F(a.title),1)]),_:1}),s(_,{name:"i-carbon:close","cursor-pointer":"",onClick:n})]),s(e(N),{"m-0":"","overflow-y-auto":"","p-4":""},{default:t(()=>[u(a.$slots,"default")]),_:3}),e(v).footer?(d(),$("div",H,[u(a.$slots,"footer")])):z("",!0)]),_:3})]),_:3},16,["appear"])])])]),_:3})]),_:3},8,["appear","show"])}}});export{O as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDropdown-7q7O_XMK.js b/AIWebQuickDeploy/public/admin/assets/HDropdown-7q7O_XMK.js deleted file mode 100644 index 2ab0663..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HDropdown-7q7O_XMK.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{l as t,p as n,g as a,z as p,w as o,P as r,ai as d}from"./index-6QRvoxq4.js";const l={};function c(e,_){const s=n("VDropdown");return a(),p(s,d({"show-triggers":["hover"],"hide-triggers":["hover"],"auto-hide":!1,"popper-triggers":["hover"],delay:200},e.$attrs),{popper:o(()=>[r(e.$slots,"dropdown")]),default:o(()=>[r(e.$slots,"default")]),_:3},16)}const f=t(l,[["render",c]]);export{f as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDropdown-DFGm5c_S.js b/AIWebQuickDeploy/public/admin/assets/HDropdown-DFGm5c_S.js new file mode 100644 index 0000000..2c7b29b --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HDropdown-DFGm5c_S.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{Z as r,Q as e,a2 as s,e as o,w as t,aj as a,R as d}from"./index-BERX8Mlm.js";const p=r({},[["render",function(r,p){const n=e("VDropdown");return o(),s(n,d({"show-triggers":["hover"],"hide-triggers":["hover"],"auto-hide":!1,"popper-triggers":["hover"],delay:200},r.$attrs),{popper:t((()=>[a(r.$slots,"dropdown")])),default:t((()=>[a(r.$slots,"default")])),_:3},16)}]]);export{p as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDropdownMenu-D4uhC_T8.js b/AIWebQuickDeploy/public/admin/assets/HDropdownMenu-D4uhC_T8.js deleted file mode 100644 index 70e7c9d..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HDropdownMenu-D4uhC_T8.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as m}from"./HDropdownMenu.vue_vue_type_script_setup_true_lang-BzkPBd44.js";import"./index-6QRvoxq4.js";export{m as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDropdownMenu-STCC9von.js b/AIWebQuickDeploy/public/admin/assets/HDropdownMenu-STCC9von.js new file mode 100644 index 0000000..a5811d1 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HDropdownMenu-STCC9von.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as e}from"./HDropdownMenu.vue_vue_type_script_setup_true_lang-Wc6l-Ngn.js";import"./index-BERX8Mlm.js";export{e as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDropdownMenu.vue_vue_type_script_setup_true_lang-BzkPBd44.js b/AIWebQuickDeploy/public/admin/assets/HDropdownMenu.vue_vue_type_script_setup_true_lang-BzkPBd44.js deleted file mode 100644 index 0429d7f..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HDropdownMenu.vue_vue_type_script_setup_true_lang-BzkPBd44.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{d as h,n as g,p as k,g as t,z as f,w as n,c as s,s as a,i as _,F as l,P as w,ai as y,t as x}from"./index-6QRvoxq4.js";const C=["disabled","onClick"],z=h({__name:"HDropdownMenu",props:{items:{}},setup(d){const i=d,p=g(()=>i.items.map(e=>e.filter(o=>!o.hide)).filter(e=>e.length));return(e,o)=>{const c=k("VMenu");return t(),f(c,y({"show-triggers":["hover"],"auto-hide":!1,"popper-triggers":["hover","click"],delay:200},e.$attrs),{popper:n(()=>[(t(!0),s(l,null,a(_(p),(u,b)=>(t(),s("div",{key:b,class:"b-b-stone-2 b-b-solid p-1 last-b-b-size-0 dark-b-b-stone-7"},[(t(!0),s(l,null,a(u,(r,m)=>(t(),s("button",{key:m,disabled:r.disabled,class:"w-full flex cursor-pointer items-center gap-2 border-size-0 rounded-md bg-inherit px-2 py-1.5 text-sm text-dark disabled-cursor-not-allowed dark-text-white disabled-opacity-50 hover-not-disabled-bg-stone-1 dark-hover-not-disabled-bg-stone-9",onClick:r.handle},x(r.label),9,C))),128))]))),128))]),default:n(()=>[w(e.$slots,"default")]),_:3},16)}}});export{z as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HDropdownMenu.vue_vue_type_script_setup_true_lang-Wc6l-Ngn.js b/AIWebQuickDeploy/public/admin/assets/HDropdownMenu.vue_vue_type_script_setup_true_lang-Wc6l-Ngn.js new file mode 100644 index 0000000..df450ad --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HDropdownMenu.vue_vue_type_script_setup_true_lang-Wc6l-Ngn.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{d as e,P as s,Q as t,a2 as a,e as o,w as r,aj as d,c as l,V as i,W as n,i as b,t as p,R as u}from"./index-BERX8Mlm.js";const c=["disabled","onClick"],h=e({__name:"HDropdownMenu",props:{items:{}},setup(e){const h=e,g=s((()=>h.items.map((e=>e.filter((e=>!e.hide)))).filter((e=>e.length))));return(e,s)=>{const h=t("VMenu");return o(),a(h,u({"show-triggers":["hover"],"auto-hide":!1,"popper-triggers":["hover","click"],delay:200},e.$attrs),{popper:r((()=>[(o(!0),l(i,null,n(b(g),((e,s)=>(o(),l("div",{key:s,class:"b-b-stone-2 b-b-solid p-1 last-b-b-size-0 dark-b-b-stone-7"},[(o(!0),l(i,null,n(e,((e,s)=>(o(),l("button",{key:s,disabled:e.disabled,class:"w-full flex cursor-pointer items-center gap-2 border-size-0 rounded-md bg-inherit px-2 py-1.5 text-sm text-dark disabled-cursor-not-allowed dark-text-white disabled-opacity-50 hover-not-disabled-bg-stone-1 dark-hover-not-disabled-bg-stone-9",onClick:e.handle},p(e.label),9,c)))),128))])))),128))])),default:r((()=>[d(e.$slots,"default")])),_:3},16)}}});export{h as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HInput-BYvs3nsX.js b/AIWebQuickDeploy/public/admin/assets/HInput-BYvs3nsX.js deleted file mode 100644 index d3e11d3..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HInput-BYvs3nsX.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as m}from"./HInput.vue_vue_type_script_setup_true_lang-B93h6qE_.js";import"./index-6QRvoxq4.js";export{m as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HInput-D-evHGWk.js b/AIWebQuickDeploy/public/admin/assets/HInput-D-evHGWk.js new file mode 100644 index 0000000..d5cb93b --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HInput-D-evHGWk.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as t}from"./HInput.vue_vue_type_script_setup_true_lang-DbpA_N81.js";import"./index-BERX8Mlm.js";export{t as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HInput.vue_vue_type_script_setup_true_lang-B93h6qE_.js b/AIWebQuickDeploy/public/admin/assets/HInput.vue_vue_type_script_setup_true_lang-B93h6qE_.js deleted file mode 100644 index 2596f3e..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HInput.vue_vue_type_script_setup_true_lang-B93h6qE_.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{d as r,as as n,at as i,r as u,g as p,c,y as m,ak as f,e as g}from"./index-6QRvoxq4.js";const b={class:"relative w-full lg-w-48"},h=["placeholder","disabled"],v=r({__name:"HInput",props:n({placeholder:{},disabled:{type:Boolean,default:!1}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(o,{expose:s}){const e=i(o,"modelValue"),d=u();return s({ref:d}),(l,a)=>(p(),c("div",b,[m(g("input",{"onUpdate:modelValue":a[0]||(a[0]=t=>e.value=t),type:"text",placeholder:l.placeholder,disabled:l.disabled,class:"relative block w-full border-0 rounded-md bg-white px-2.5 py-1.5 text-sm shadow-sm ring-1 ring-stone-2 ring-inset disabled-cursor-not-allowed dark-bg-dark disabled-opacity-50 focus-outline-none focus-ring-2 dark-ring-stone-8 focus-ring-ui-primary placeholder-stone-4 dark-placeholder-stone-5"},null,8,h),[[f,e.value]])]))}});export{v as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HInput.vue_vue_type_script_setup_true_lang-DbpA_N81.js b/AIWebQuickDeploy/public/admin/assets/HInput.vue_vue_type_script_setup_true_lang-DbpA_N81.js new file mode 100644 index 0000000..3dad72c --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HInput.vue_vue_type_script_setup_true_lang-DbpA_N81.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{d as e,aS as a,aT as l,r as d,c as s,e as o,a5 as r,aM as t,g as i}from"./index-BERX8Mlm.js";const n={class:"relative w-full lg-w-48"},p=["placeholder","disabled"],u=e({__name:"HInput",props:a({placeholder:{},disabled:{type:Boolean,default:!1}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(e,{expose:a}){const u=l(e,"modelValue");return a({ref:d()}),(e,a)=>(o(),s("div",n,[r(i("input",{"onUpdate:modelValue":a[0]||(a[0]=e=>u.value=e),type:"text",placeholder:e.placeholder,disabled:e.disabled,class:"relative block w-full border-0 rounded-md bg-white px-2.5 py-1.5 text-sm shadow-sm ring-1 ring-stone-2 ring-inset disabled-cursor-not-allowed dark-bg-dark disabled-opacity-50 focus-outline-none focus-ring-2 dark-ring-stone-8 focus-ring-ui-primary placeholder-stone-4 dark-placeholder-stone-5"},null,8,p),[[t,u.value]])]))}});export{u as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HKbd-Be5shIQ7.js b/AIWebQuickDeploy/public/admin/assets/HKbd-Be5shIQ7.js deleted file mode 100644 index d6f14d3..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HKbd-Be5shIQ7.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{l as t,g as n,c as r,P as s}from"./index-6QRvoxq4.js";const o={},a={class:"mr-[4px] h-6 min-w-[24px] inline-flex items-center justify-center rounded bg-stone-1 px-1 text-[12px] text-dark font-medium font-sans ring-1 ring-stone-3 ring-inset last:mr-0 dark-bg-dark-9 dark-text-white dark-ring-stone-7"};function c(e,i){return n(),r("kbd",a,[s(e.$slots,"default")])}const l=t(o,[["render",c]]);export{l as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HKbd-LjWkyhwy.js b/AIWebQuickDeploy/public/admin/assets/HKbd-LjWkyhwy.js new file mode 100644 index 0000000..6d07e44 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HKbd-LjWkyhwy.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{Z as t,c as e,e as n,aj as r}from"./index-BERX8Mlm.js";const s={class:"mr-[4px] h-6 min-w-[24px] inline-flex items-center justify-center rounded bg-stone-1 px-1 text-[12px] text-dark font-medium font-sans ring-1 ring-stone-3 ring-inset last:mr-0 dark-bg-dark-9 dark-text-white dark-ring-stone-7"};const a=t({},[["render",function(t,a){return n(),e("kbd",s,[r(t.$slots,"default")])}]]);export{a as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HSelect-BCiFn2nk.js b/AIWebQuickDeploy/public/admin/assets/HSelect-BCiFn2nk.js deleted file mode 100644 index 0e8a7ee..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HSelect-BCiFn2nk.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{d as b,as as m,at as f,n as g,p as v,g as a,z as h,w as r,e as t,c as i,s as _,F as k,t as c,i as w,b as x,ai as y,j as V,Q as C}from"./index-6QRvoxq4.js";const B={class:"w-full inline-flex"},M=["disabled"],z={class:"block truncate"},S={class:"pointer-events-none absolute end-0 inset-y-0 flex items-center pe-2.5"},$={class:"max-h-60 w-full scroll-py-1 overflow-y-auto p-1 lg-w-48 focus-outline-none"},F=["disabled","onClick"],E=b({__name:"HSelect",props:m({options:{},disabled:{type:Boolean,default:!1}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(o){const l=o,n=f(o,"modelValue"),d=g({get(){return l.options.find(e=>e.value===n.value)??l.options[0]},set(e){n.value=e.value}});return(e,N)=>{const u=V,p=v("VMenu");return a(),h(p,y({triggers:["click"],"popper-triggers":["click"],delay:0,disabled:e.disabled},e.$attrs),{popper:r(()=>[t("div",$,[(a(!0),i(k,null,_(e.options,s=>(a(),i("button",{key:s.value,disabled:s.disabled,class:C(["w-full cursor-pointer truncate border-size-0 rounded-md bg-inherit px-2 py-1.5 text-left text-sm disabled-cursor-not-allowed hover-not-disabled-bg-stone-1 dark-hover-not-disabled-bg-stone-9",{"font-bold":o.modelValue===s.value}]),onClick:j=>d.value=s},c(s.label),11,F))),128))])]),default:r(()=>[t("div",B,[t("button",{class:"relative block w-full flex cursor-default items-center gap-x-2 border-0 rounded-md bg-white px-2.5 py-1.5 pe-9 text-left text-sm shadow-sm ring-1 ring-stone-2 ring-inset lg-w-48 disabled-cursor-not-allowed dark-bg-dark focus-outline-none focus-ring-2 dark-ring-stone-8 focus-ring-ui-primary",disabled:e.disabled},[t("span",z,c(w(d).label),1),t("span",S,[x(u,{name:"i-carbon:chevron-down",class:"h-5 w-5 flex-shrink-0 text-stone-5"})])],8,M)])]),_:1},16,["disabled"])}}});export{E as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HSelect-IW2K-3mo.js b/AIWebQuickDeploy/public/admin/assets/HSelect-IW2K-3mo.js new file mode 100644 index 0000000..da0015e --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HSelect-IW2K-3mo.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{d as e,aS as s,aT as a,P as l,Q as o,a2 as t,e as n,w as d,g as i,t as r,i as u,f as c,_ as p,c as b,V as f,W as g,a6 as m,R as v}from"./index-BERX8Mlm.js";const x={class:"w-full inline-flex"},w=["disabled"],k={class:"block truncate"},h={class:"pointer-events-none absolute end-0 inset-y-0 flex items-center pe-2.5"},y={class:"max-h-60 w-full scroll-py-1 overflow-y-auto p-1 lg-w-48 focus-outline-none"},V=["disabled","onClick"],_=e({__name:"HSelect",props:s({options:{},disabled:{type:Boolean,default:!1}},{modelValue:{},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const s=e,_=a(e,"modelValue"),C=l({get:()=>s.options.find((e=>e.value===_.value))??s.options[0],set(e){_.value=e.value}});return(s,a)=>{const l=p,_=o("VMenu");return n(),t(_,v({triggers:["click"],"popper-triggers":["click"],delay:0,disabled:s.disabled},s.$attrs),{popper:d((()=>[i("div",y,[(n(!0),b(f,null,g(s.options,(s=>(n(),b("button",{key:s.value,disabled:s.disabled,class:m(["w-full cursor-pointer truncate border-size-0 rounded-md bg-inherit px-2 py-1.5 text-left text-sm disabled-cursor-not-allowed hover-not-disabled-bg-stone-1 dark-hover-not-disabled-bg-stone-9",{"font-bold":e.modelValue===s.value}]),onClick:e=>C.value=s},r(s.label),11,V)))),128))])])),default:d((()=>[i("div",x,[i("button",{class:"relative block w-full flex cursor-default items-center gap-x-2 border-0 rounded-md bg-white px-2.5 py-1.5 pe-9 text-left text-sm shadow-sm ring-1 ring-stone-2 ring-inset lg-w-48 disabled-cursor-not-allowed dark-bg-dark focus-outline-none focus-ring-2 dark-ring-stone-8 focus-ring-ui-primary",disabled:s.disabled},[i("span",k,r(u(C).label),1),i("span",h,[c(l,{name:"i-carbon:chevron-down",class:"h-5 w-5 flex-shrink-0 text-stone-5"})])],8,w)])])),_:1},16,["disabled"])}}});export{_ as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HSlideover-DFpKLdtr.js b/AIWebQuickDeploy/public/admin/assets/HSlideover-DoUM21Up.js similarity index 65% rename from AIWebQuickDeploy/public/admin/assets/HSlideover-DFpKLdtr.js rename to AIWebQuickDeploy/public/admin/assets/HSlideover-DoUM21Up.js index f428fdc..c60d856 100644 --- a/AIWebQuickDeploy/public/admin/assets/HSlideover-DFpKLdtr.js +++ b/AIWebQuickDeploy/public/admin/assets/HSlideover-DoUM21Up.js @@ -5,4 +5,4 @@ * https://fantastic-admin.github.io */ -import{cy as f}from"./index-6QRvoxq4.js";export{f as default}; +import{bq as a}from"./index-BERX8Mlm.js";export{a as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HTabList-DKMxIM5w.js b/AIWebQuickDeploy/public/admin/assets/HTabList-DKMxIM5w.js deleted file mode 100644 index 6bb75bd..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HTabList-DKMxIM5w.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as o}from"./HTabList.vue_vue_type_script_setup_true_lang-BuGUQxxq.js";import"./index-6QRvoxq4.js";import"./use-resolve-button-type-BE1XPlJv.js";export{o as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HTabList-DmcAR84M.js b/AIWebQuickDeploy/public/admin/assets/HTabList-DmcAR84M.js new file mode 100644 index 0000000..598e16d --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HTabList-DmcAR84M.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as t}from"./HTabList.vue_vue_type_script_setup_true_lang-BEyYCazB.js";import"./index-BERX8Mlm.js";import"./use-resolve-button-type-DnRVrBaM.js";export{t as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HTabList.vue_vue_type_script_setup_true_lang-BEyYCazB.js b/AIWebQuickDeploy/public/admin/assets/HTabList.vue_vue_type_script_setup_true_lang-BEyYCazB.js new file mode 100644 index 0000000..05c197a --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HTabList.vue_vue_type_script_setup_true_lang-BEyYCazB.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{d as e,r as a,au as t,bb as l,bc as n,bd as s,be as r,b as u,ai as o,ap as i,P as d,bf as v,aq as c,a0 as p,bg as b,bh as f,V as m,bi as x,bj as g,bk as h,bl as y,bm as I,bn as k,bo as S,bp as T,aS as w,aT as P,a2 as A,e as F,w as O,f as E,i as j,c as D,W as L,g as _,a6 as q,T as B,h as C,_ as G,t as W}from"./index-BERX8Mlm.js";import{s as M}from"./use-resolve-button-type-DnRVrBaM.js";let N=e({props:{onFocus:{type:Function,required:!0}},setup(e){let s=a(!0);return()=>s.value?t(n,{as:"button",type:"button",features:l.Focusable,onFocus(a){a.preventDefault();let t,l=50;t=requestAnimationFrame((function a(){var n;if(!(l--<=0))return null!=(n=e.onFocus)&&n.call(e)?(s.value=!1,void cancelAnimationFrame(t)):void(t=requestAnimationFrame(a));t&&cancelAnimationFrame(t)}))}}):null}});var V,z,$=((z=$||{})[z.Forwards=0]="Forwards",z[z.Backwards=1]="Backwards",z),H=((V=H||{})[V.Less=-1]="Less",V[V.Equal=0]="Equal",V[V.Greater=1]="Greater",V);let R=Symbol("TabsContext");function U(e){let a=i(R,null);if(null===a){let a=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(a,U),a}return a}let K=Symbol("TabsSSRContext"),J=e({name:"TabGroup",emits:{change:e=>!0},props:{as:{type:[Object,String],default:"template"},selectedIndex:{type:[Number],default:null},defaultIndex:{type:[Number],default:0},vertical:{type:[Boolean],default:!1},manual:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(e,{slots:l,attrs:n,emit:r}){var o;let i=a(null!=(o=e.selectedIndex)?o:e.defaultIndex),h=a([]),y=a([]),I=d((()=>null!==e.selectedIndex)),k=d((()=>I.value?e.selectedIndex:i.value));function S(e){var a;let t=x(T.tabs.value,v),l=x(T.panels.value,v),n=t.filter((e=>{var a;return!(null!=(a=v(e))&&a.hasAttribute("disabled"))}));if(e<0||e>t.length-1){let a=g(null===i.value?0:Math.sign(e-i.value),{[-1]:()=>1,0:()=>g(Math.sign(e),{[-1]:()=>0,0:()=>0,1:()=>1}),1:()=>0}),s=g(a,{0:()=>t.indexOf(n[0]),1:()=>t.indexOf(n[n.length-1])});-1!==s&&(i.value=s),T.tabs.value=t,T.panels.value=l}else{let s=t.slice(0,e),r=[...t.slice(e),...s].find((e=>n.includes(e)));if(!r)return;let u=null!=(a=t.indexOf(r))?a:T.selectedIndex.value;-1===u&&(u=T.selectedIndex.value),i.value=u,T.tabs.value=t,T.panels.value=l}}let T={selectedIndex:d((()=>{var a,t;return null!=(t=null!=(a=i.value)?a:e.defaultIndex)?t:null})),orientation:d((()=>e.vertical?"vertical":"horizontal")),activation:d((()=>e.manual?"manual":"auto")),tabs:h,panels:y,setSelectedIndex(e){k.value!==e&&r("change",e),I.value||S(e)},registerTab(e){var a;if(h.value.includes(e))return;let t=h.value[i.value];if(h.value.push(e),h.value=x(h.value,v),!I.value){let e=null!=(a=h.value.indexOf(t))?a:i.value;-1!==e&&(i.value=e)}},unregisterTab(e){let a=h.value.indexOf(e);-1!==a&&h.value.splice(a,1)},registerPanel(e){y.value.includes(e)||(y.value.push(e),y.value=x(y.value,v))},unregisterPanel(e){let a=y.value.indexOf(e);-1!==a&&y.value.splice(a,1)}};c(R,T);let w=a({tabs:[],panels:[]}),P=a(!1);u((()=>{P.value=!0})),c(K,d((()=>P.value?null:w.value)));let A=d((()=>e.selectedIndex));return u((()=>{p([A],(()=>{var a;return S(null!=(a=e.selectedIndex)?a:e.defaultIndex)}),{immediate:!0})})),b((()=>{if(!I.value||null==k.value||T.tabs.value.length<=0)return;let e=x(T.tabs.value,v);e.some(((e,a)=>v(T.tabs.value[a])!==v(e)))&&T.setSelectedIndex(e.findIndex((e=>v(e)===v(T.tabs.value[k.value]))))})),()=>{let a={selectedIndex:i.value};return t(m,[h.value.length<=0&&t(N,{onFocus:()=>{for(let e of h.value){let a=v(e);if(0===(null==a?void 0:a.tabIndex))return a.focus(),!0}return!1}}),s({theirProps:{...n,...f(e,["selectedIndex","defaultIndex","manual","vertical","onChange"])},ourProps:{},slot:a,slots:l,attrs:n,name:"TabGroup"})])}}}),Q=e({name:"TabList",props:{as:{type:[Object,String],default:"div"}},setup(e,{attrs:a,slots:t}){let l=U("TabList");return()=>{let n={selectedIndex:l.selectedIndex.value},r={role:"tablist","aria-orientation":l.orientation.value};return s({ourProps:r,theirProps:e,slot:n,attrs:a,slots:t,name:"TabList"})}}}),X=e({name:"Tab",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(e,{attrs:t,slots:l,expose:n}){var c;let p=null!=(c=e.id)?c:`headlessui-tabs-tab-${r()}`,b=U("Tab"),f=a(null);n({el:f,$el:f}),u((()=>b.registerTab(f))),o((()=>b.unregisterTab(f)));let m=i(K),x=d((()=>{if(m.value){let e=m.value.tabs.indexOf(p);return-1===e?m.value.tabs.push(p)-1:e}return-1})),w=d((()=>{let e=b.tabs.value.indexOf(f);return-1===e?x.value:e})),P=d((()=>w.value===b.selectedIndex.value));function A(e){var a;let t=e();if(t===y.Success&&"auto"===b.activation.value){let e=null==(a=k(f))?void 0:a.activeElement,t=b.tabs.value.findIndex((a=>v(a)===e));-1!==t&&b.setSelectedIndex(t)}return t}function F(e){let a=b.tabs.value.map((e=>v(e))).filter(Boolean);if(e.key===h.Space||e.key===h.Enter)return e.preventDefault(),e.stopPropagation(),void b.setSelectedIndex(w.value);switch(e.key){case h.Home:case h.PageUp:return e.preventDefault(),e.stopPropagation(),A((()=>S(a,T.First)));case h.End:case h.PageDown:return e.preventDefault(),e.stopPropagation(),A((()=>S(a,T.Last)))}return A((()=>g(b.orientation.value,{vertical:()=>e.key===h.ArrowUp?S(a,T.Previous|T.WrapAround):e.key===h.ArrowDown?S(a,T.Next|T.WrapAround):y.Error,horizontal:()=>e.key===h.ArrowLeft?S(a,T.Previous|T.WrapAround):e.key===h.ArrowRight?S(a,T.Next|T.WrapAround):y.Error})))===y.Success?e.preventDefault():void 0}let O=a(!1);function E(){var a;O.value||(O.value=!0,!e.disabled&&(null==(a=v(f))||a.focus({preventScroll:!0}),b.setSelectedIndex(w.value),I((()=>{O.value=!1}))))}function j(e){e.preventDefault()}let D=M(d((()=>({as:e.as,type:t.type}))),f);return()=>{var a,n;let r={selected:P.value,disabled:null!=(a=e.disabled)&&a},{...u}=e,o={ref:f,onKeydown:F,onMousedown:j,onClick:E,id:p,role:"tab",type:D.value,"aria-controls":null==(n=v(b.panels.value[w.value]))?void 0:n.id,"aria-selected":P.value,tabIndex:P.value?0:-1,disabled:!!e.disabled||void 0};return s({ourProps:o,theirProps:u,slot:r,attrs:t,slots:l,name:"Tab"})}}});const Y=e({__name:"HTabList",props:w({options:{}},{modelValue:{},modelModifiers:{}}),emits:w(["change"],["update:modelValue"]),setup(e,{emit:a}){const t=e,l=a,n=P(e,"modelValue"),s=d({get:()=>t.options.findIndex((e=>e.value===n.value)),set(e){n.value=t.options[e].value}});function r(e){n.value=t.options[e].value}return p(n,(e=>{e&&l("change",e)})),(e,a)=>{const t=G;return F(),A(j(J),{"selected-index":j(s),onChange:r},{default:O((()=>[E(j(Q),{class:"inline-flex select-none items-center justify-center rounded-md bg-stone-1 p-1 ring-1 ring-stone-2 dark-bg-stone-9 dark-ring-stone-8"},{default:O((()=>[(F(!0),D(m,null,L(e.options,((e,a)=>(F(),A(j(X),{key:a,as:"template"},{default:O((({selected:a})=>[_("button",{class:q(["w-full inline-flex items-center justify-center gap-1 break-keep border-size-0 rounded-md bg-inherit px-2 py-1.5 text-sm text-dark ring-stone-2 ring-inset dark-text-white focus-outline-none focus-ring-2 dark-ring-stone-8",{"cursor-default bg-white dark-bg-dark-9":a,"cursor-pointer opacity-50 hover-opacity-100":!a}])},[e.icon?(F(),A(t,{key:0,name:e.icon,class:"flex-shrink-0"},null,8,["name"])):B("",!0),C(" "+W(e.label),1)],2)])),_:2},1024)))),128))])),_:1})])),_:1},8,["selected-index"])}}});export{Y as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HTabList.vue_vue_type_script_setup_true_lang-BuGUQxxq.js b/AIWebQuickDeploy/public/admin/assets/HTabList.vue_vue_type_script_setup_true_lang-BuGUQxxq.js deleted file mode 100644 index 03ce089..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HTabList.vue_vue_type_script_setup_true_lang-BuGUQxxq.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{d as E,r as T,a1 as j,cj as Q,ck as X,n as x,cl as F,a4 as G,a as M,X as W,c9 as J,cm as c,cn as V,co as Y,F as R,W as U,cp as B,cq as Z,O as ee,cr as h,cs as $,ct as te,cu as ae,cv as A,cw as I,as as z,at as le,g as C,z as L,w as N,b as ne,c as re,s as ue,i as _,e as se,Q as oe,A as ie,h as de,t as ce,j as ve}from"./index-6QRvoxq4.js";import{s as pe}from"./use-resolve-button-type-BE1XPlJv.js";let fe=E({props:{onFocus:{type:Function,required:!0}},setup(e){let v=T(!0);return()=>v.value?j(X,{as:"button",type:"button",features:Q.Focusable,onFocus(d){d.preventDefault();let p,f=50;function u(){var l;if(f--<=0){p&&cancelAnimationFrame(p);return}if((l=e.onFocus)!=null&&l.call(e)){v.value=!1,cancelAnimationFrame(p);return}p=requestAnimationFrame(u)}p=requestAnimationFrame(u)}}):null}});var me=(e=>(e[e.Forwards=0]="Forwards",e[e.Backwards=1]="Backwards",e))(me||{}),be=(e=>(e[e.Less=-1]="Less",e[e.Equal=0]="Equal",e[e.Greater=1]="Greater",e))(be||{});let H=Symbol("TabsContext");function q(e){let v=U(H,null);if(v===null){let d=new Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(d,q),d}return v}let K=Symbol("TabsSSRContext"),xe=E({name:"TabGroup",emits:{change:e=>!0},props:{as:{type:[Object,String],default:"template"},selectedIndex:{type:[Number],default:null},defaultIndex:{type:[Number],default:0},vertical:{type:[Boolean],default:!1},manual:{type:[Boolean],default:!1}},inheritAttrs:!1,setup(e,{slots:v,attrs:d,emit:p}){var f;let u=T((f=e.selectedIndex)!=null?f:e.defaultIndex),l=T([]),n=T([]),y=x(()=>e.selectedIndex!==null),S=x(()=>y.value?e.selectedIndex:u.value);function g(a){var r;let o=F(s.tabs.value,c),t=F(s.panels.value,c),i=o.filter(m=>{var b;return!((b=c(m))!=null&&b.hasAttribute("disabled"))});if(a<0||a>o.length-1){let m=B(u.value===null?0:Math.sign(a-u.value),{[-1]:()=>1,0:()=>B(Math.sign(a),{[-1]:()=>0,0:()=>0,1:()=>1}),1:()=>0}),b=B(m,{0:()=>o.indexOf(i[0]),1:()=>o.indexOf(i[i.length-1])});b!==-1&&(u.value=b),s.tabs.value=o,s.panels.value=t}else{let m=o.slice(0,a),b=[...o.slice(a),...m].find(D=>i.includes(D));if(!b)return;let w=(r=o.indexOf(b))!=null?r:s.selectedIndex.value;w===-1&&(w=s.selectedIndex.value),u.value=w,s.tabs.value=o,s.panels.value=t}}let s={selectedIndex:x(()=>{var a,r;return(r=(a=u.value)!=null?a:e.defaultIndex)!=null?r:null}),orientation:x(()=>e.vertical?"vertical":"horizontal"),activation:x(()=>e.manual?"manual":"auto"),tabs:l,panels:n,setSelectedIndex(a){S.value!==a&&p("change",a),y.value||g(a)},registerTab(a){var r;if(l.value.includes(a))return;let o=l.value[u.value];if(l.value.push(a),l.value=F(l.value,c),!y.value){let t=(r=l.value.indexOf(o))!=null?r:u.value;t!==-1&&(u.value=t)}},unregisterTab(a){let r=l.value.indexOf(a);r!==-1&&l.value.splice(r,1)},registerPanel(a){n.value.includes(a)||(n.value.push(a),n.value=F(n.value,c))},unregisterPanel(a){let r=n.value.indexOf(a);r!==-1&&n.value.splice(r,1)}};G(H,s);let k=T({tabs:[],panels:[]}),O=T(!1);M(()=>{O.value=!0}),G(K,x(()=>O.value?null:k.value));let P=x(()=>e.selectedIndex);return M(()=>{W([P],()=>{var a;return g((a=e.selectedIndex)!=null?a:e.defaultIndex)},{immediate:!0})}),J(()=>{if(!y.value||S.value==null||s.tabs.value.length<=0)return;let a=F(s.tabs.value,c);a.some((r,o)=>c(s.tabs.value[o])!==c(r))&&s.setSelectedIndex(a.findIndex(r=>c(r)===c(s.tabs.value[S.value])))}),()=>{let a={selectedIndex:u.value};return j(R,[l.value.length<=0&&j(fe,{onFocus:()=>{for(let r of l.value){let o=c(r);if((o==null?void 0:o.tabIndex)===0)return o.focus(),!0}return!1}}),V({theirProps:{...d,...Y(e,["selectedIndex","defaultIndex","manual","vertical","onChange"])},ourProps:{},slot:a,slots:v,attrs:d,name:"TabGroup"})])}}}),ge=E({name:"TabList",props:{as:{type:[Object,String],default:"div"}},setup(e,{attrs:v,slots:d}){let p=q("TabList");return()=>{let f={selectedIndex:p.selectedIndex.value},u={role:"tablist","aria-orientation":p.orientation.value};return V({ourProps:u,theirProps:e,slot:f,attrs:v,slots:d,name:"TabList"})}}}),he=E({name:"Tab",props:{as:{type:[Object,String],default:"button"},disabled:{type:[Boolean],default:!1},id:{type:String,default:null}},setup(e,{attrs:v,slots:d,expose:p}){var f;let u=(f=e.id)!=null?f:`headlessui-tabs-tab-${Z()}`,l=q("Tab"),n=T(null);p({el:n,$el:n}),M(()=>l.registerTab(n)),ee(()=>l.unregisterTab(n));let y=U(K),S=x(()=>{if(y.value){let t=y.value.tabs.indexOf(u);return t===-1?y.value.tabs.push(u)-1:t}return-1}),g=x(()=>{let t=l.tabs.value.indexOf(n);return t===-1?S.value:t}),s=x(()=>g.value===l.selectedIndex.value);function k(t){var i;let m=t();if(m===$.Success&&l.activation.value==="auto"){let b=(i=ae(n))==null?void 0:i.activeElement,w=l.tabs.value.findIndex(D=>c(D)===b);w!==-1&&l.setSelectedIndex(w)}return m}function O(t){let i=l.tabs.value.map(m=>c(m)).filter(Boolean);if(t.key===h.Space||t.key===h.Enter){t.preventDefault(),t.stopPropagation(),l.setSelectedIndex(g.value);return}switch(t.key){case h.Home:case h.PageUp:return t.preventDefault(),t.stopPropagation(),k(()=>A(i,I.First));case h.End:case h.PageDown:return t.preventDefault(),t.stopPropagation(),k(()=>A(i,I.Last))}if(k(()=>B(l.orientation.value,{vertical(){return t.key===h.ArrowUp?A(i,I.Previous|I.WrapAround):t.key===h.ArrowDown?A(i,I.Next|I.WrapAround):$.Error},horizontal(){return t.key===h.ArrowLeft?A(i,I.Previous|I.WrapAround):t.key===h.ArrowRight?A(i,I.Next|I.WrapAround):$.Error}}))===$.Success)return t.preventDefault()}let P=T(!1);function a(){var t;P.value||(P.value=!0,!e.disabled&&((t=c(n))==null||t.focus({preventScroll:!0}),l.setSelectedIndex(g.value),te(()=>{P.value=!1})))}function r(t){t.preventDefault()}let o=pe(x(()=>({as:e.as,type:v.type})),n);return()=>{var t,i;let m={selected:s.value,disabled:(t=e.disabled)!=null?t:!1},{...b}=e,w={ref:n,onKeydown:O,onMousedown:r,onClick:a,id:u,role:"tab",type:o.value,"aria-controls":(i=c(l.panels.value[g.value]))==null?void 0:i.id,"aria-selected":s.value,tabIndex:s.value?0:-1,disabled:e.disabled?!0:void 0};return V({ourProps:w,theirProps:b,slot:m,attrs:v,slots:d,name:"Tab"})}}});const ke=E({__name:"HTabList",props:z({options:{}},{modelValue:{},modelModifiers:{}}),emits:z(["change"],["update:modelValue"]),setup(e,{emit:v}){const d=e,p=v,f=le(e,"modelValue"),u=x({get(){return d.options.findIndex(n=>n.value===f.value)},set(n){f.value=d.options[n].value}});W(f,n=>{n&&p("change",n)});function l(n){f.value=d.options[n].value}return(n,y)=>{const S=ve;return C(),L(_(xe),{"selected-index":_(u),onChange:l},{default:N(()=>[ne(_(ge),{class:"inline-flex select-none items-center justify-center rounded-md bg-stone-1 p-1 ring-1 ring-stone-2 dark-bg-stone-9 dark-ring-stone-8"},{default:N(()=>[(C(!0),re(R,null,ue(n.options,(g,s)=>(C(),L(_(he),{key:s,as:"template"},{default:N(({selected:k})=>[se("button",{class:oe(["w-full inline-flex items-center justify-center gap-1 break-keep border-size-0 rounded-md bg-inherit px-2 py-1.5 text-sm text-dark ring-stone-2 ring-inset dark-text-white focus-outline-none focus-ring-2 dark-ring-stone-8",{"cursor-default bg-white dark-bg-dark-9":k,"cursor-pointer opacity-50 hover-opacity-100":!k}])},[g.icon?(C(),L(S,{key:0,name:g.icon,class:"flex-shrink-0"},null,8,["name"])):ie("",!0),de(" "+ce(g.label),1)],2)]),_:2},1024))),128))]),_:1})]),_:1},8,["selected-index"])}}});export{ke as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HToggle-BoT9z-_d.js b/AIWebQuickDeploy/public/admin/assets/HToggle-BoT9z-_d.js deleted file mode 100644 index 7584e94..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HToggle-BoT9z-_d.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as o}from"./HToggle.vue_vue_type_script_setup_true_lang-CHjOk9yp.js";import"./index-6QRvoxq4.js";import"./use-resolve-button-type-BE1XPlJv.js";export{o as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HToggle-CrdaD-9B.js b/AIWebQuickDeploy/public/admin/assets/HToggle-CrdaD-9B.js new file mode 100644 index 0000000..2694900 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HToggle-CrdaD-9B.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as e}from"./HToggle.vue_vue_type_script_setup_true_lang-qXUln426.js";import"./index-BERX8Mlm.js";import"./use-resolve-button-type-DnRVrBaM.js";export{e as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HToggle.vue_vue_type_script_setup_true_lang-CHjOk9yp.js b/AIWebQuickDeploy/public/admin/assets/HToggle.vue_vue_type_script_setup_true_lang-CHjOk9yp.js deleted file mode 100644 index ba98c2c..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HToggle.vue_vue_type_script_setup_true_lang-CHjOk9yp.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{r as V,n as i,d as x,cq as D,W as M,cm as P,a as U,X as z,a1 as y,ck as A,cz as K,cj as L,cn as O,co as q,F,cr as h,as as H,at as R,g,z as k,w as G,e as w,A as Q,Q as I,i as W,j as X}from"./index-6QRvoxq4.js";import{s as J}from"./use-resolve-button-type-BE1XPlJv.js";function Y(a,l,t){let o=V(t==null?void 0:t.value),n=i(()=>a.value!==void 0);return[i(()=>n.value?a.value:o.value),function(s){return n.value||(o.value=s),l==null?void 0:l(s)}]}function Z(a){var l,t;let o=(l=a==null?void 0:a.form)!=null?l:a.closest("form");if(o){for(let n of o.elements)if(n!==a&&(n.tagName==="INPUT"&&n.type==="submit"||n.tagName==="BUTTON"&&n.type==="submit"||n.nodeName==="INPUT"&&n.type==="image")){n.click();return}(t=o.requestSubmit)==null||t.call(o)}}let ee=Symbol("GroupContext"),ae=x({name:"Switch",emits:{"update:modelValue":a=>!0},props:{as:{type:[Object,String],default:"button"},modelValue:{type:Boolean,default:void 0},defaultChecked:{type:Boolean,optional:!0},form:{type:String,optional:!0},name:{type:String,optional:!0},value:{type:String,optional:!0},id:{type:String,default:null},disabled:{type:Boolean,default:!1},tabIndex:{type:Number,default:0}},inheritAttrs:!1,setup(a,{emit:l,attrs:t,slots:o,expose:n}){var s;let C=(s=a.id)!=null?s:`headlessui-switch-${D()}`,r=M(ee,null),[d,m]=Y(i(()=>a.modelValue),e=>l("update:modelValue",e),i(()=>a.defaultChecked));function p(){m(!d.value)}let S=V(null),c=r===null?S:r.switchRef,$=J(i(()=>({as:a.as,type:t.type})),c);n({el:c,$el:c});function B(e){e.preventDefault(),p()}function N(e){e.key===h.Space?(e.preventDefault(),p()):e.key===h.Enter&&Z(e.currentTarget)}function T(e){e.preventDefault()}let f=i(()=>{var e,u;return(u=(e=P(c))==null?void 0:e.closest)==null?void 0:u.call(e,"form")});return U(()=>{z([f],()=>{if(!f.value||a.defaultChecked===void 0)return;function e(){m(a.defaultChecked)}return f.value.addEventListener("reset",e),()=>{var u;(u=f.value)==null||u.removeEventListener("reset",e)}},{immediate:!0})}),()=>{let{name:e,value:u,form:_,tabIndex:v,...b}=a,j={checked:d.value},E={id:C,ref:c,role:"switch",type:$.value,tabIndex:v===-1?0:v,"aria-checked":d.value,"aria-labelledby":r==null?void 0:r.labelledby.value,"aria-describedby":r==null?void 0:r.describedby.value,onClick:B,onKeyup:N,onKeypress:T};return y(F,[e!=null&&d.value!=null?y(A,K({features:L.Hidden,as:"input",type:"checkbox",hidden:!0,readOnly:!0,checked:d.value,form:_,disabled:b.disabled,name:e,value:u})):null,O({ourProps:E,theirProps:{...t,...q(b,["modelValue","defaultChecked"])},slot:j,attrs:t,slots:o,name:"Switch"})])}}});const le={class:"absolute inset-0 h-full w-full flex items-center justify-center"},oe=x({__name:"HToggle",props:H({disabled:{type:Boolean,default:!1},onIcon:{},offIcon:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup(a){const l=R(a,"modelValue");return(t,o)=>{const n=X;return g(),k(W(ae),{modelValue:l.value,"onUpdate:modelValue":o[0]||(o[0]=s=>l.value=s),disabled:t.disabled,class:I(["relative h-5 w-10 inline-flex flex-shrink-0 cursor-pointer border-2 border-transparent rounded-full p-0 vertical-middle disabled-cursor-not-allowed disabled-opacity-50 focus-outline-none focus-visible-ring-2 focus-visible-ring-offset-2 focus-visible-ring-offset-white dark-focus-visible-ring-offset-gray-900",[l.value?"bg-ui-primary":"bg-stone-3 dark-bg-stone-7"]])},{default:G(()=>[w("span",{class:I(["pointer-events-none relative inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out dark-bg-dark",[l.value?"translate-x-5":"translate-x-0"]])},[w("span",le,[l.value&&t.onIcon||!l.value&&t.offIcon?(g(),k(n,{key:0,name:l.value?t.onIcon:t.offIcon,class:"h-3 w-3 text-stone-7 dark-text-stone-3"},null,8,["name"])):Q("",!0)])],2)]),_:1},8,["modelValue","disabled","class"])}}});export{oe as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HToggle.vue_vue_type_script_setup_true_lang-qXUln426.js b/AIWebQuickDeploy/public/admin/assets/HToggle.vue_vue_type_script_setup_true_lang-qXUln426.js new file mode 100644 index 0000000..3deb50b --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HToggle.vue_vue_type_script_setup_true_lang-qXUln426.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{r as e,P as l,d as a,be as t,ap as n,bf as o,b as s,a0 as u,au as i,bd as r,bc as d,bs as f,bb as c,bh as v,V as p,bk as b,aS as m,aT as y,a2 as h,e as g,w as k,g as x,a6 as w,T as V,_ as I,i as S}from"./index-BERX8Mlm.js";import{s as T}from"./use-resolve-button-type-DnRVrBaM.js";let C=Symbol("GroupContext"),N=a({name:"Switch",emits:{"update:modelValue":e=>!0},props:{as:{type:[Object,String],default:"button"},modelValue:{type:Boolean,default:void 0},defaultChecked:{type:Boolean,optional:!0},form:{type:String,optional:!0},name:{type:String,optional:!0},value:{type:String,optional:!0},id:{type:String,default:null},disabled:{type:Boolean,default:!1},tabIndex:{type:Number,default:0}},inheritAttrs:!1,setup(a,{emit:m,attrs:y,slots:h,expose:g}){var k;let x=null!=(k=a.id)?k:`headlessui-switch-${t()}`,w=n(C,null),[V,I]=function(a,t,n){let o=e(null==n?void 0:n.value),s=l((()=>void 0!==a.value));return[l((()=>s.value?a.value:o.value)),function(e){return s.value||(o.value=e),null==t?void 0:t(e)}]}(l((()=>a.modelValue)),(e=>m("update:modelValue",e)),l((()=>a.defaultChecked)));function S(){I(!V.value)}let N=e(null),B=null===w?N:w.switchRef,P=T(l((()=>({as:a.as,type:y.type}))),B);function _(e){e.preventDefault(),S()}function j(e){e.key===b.Space?(e.preventDefault(),S()):e.key===b.Enter&&function(e){var l,a;let t=null!=(l=null==e?void 0:e.form)?l:e.closest("form");if(t){for(let l of t.elements)if(l!==e&&("INPUT"===l.tagName&&"submit"===l.type||"BUTTON"===l.tagName&&"submit"===l.type||"INPUT"===l.nodeName&&"image"===l.type))return void l.click();null==(a=t.requestSubmit)||a.call(t)}}(e.currentTarget)}function U(e){e.preventDefault()}g({el:B,$el:B});let D=l((()=>{var e,l;return null==(l=null==(e=o(B))?void 0:e.closest)?void 0:l.call(e,"form")}));return s((()=>{u([D],(()=>{if(D.value&&void 0!==a.defaultChecked)return D.value.addEventListener("reset",e),()=>{var l;null==(l=D.value)||l.removeEventListener("reset",e)};function e(){I(a.defaultChecked)}}),{immediate:!0})})),()=>{let{name:e,value:l,form:t,tabIndex:n,...o}=a,s={checked:V.value},u={id:x,ref:B,role:"switch",type:P.value,tabIndex:-1===n?0:n,"aria-checked":V.value,"aria-labelledby":null==w?void 0:w.labelledby.value,"aria-describedby":null==w?void 0:w.describedby.value,onClick:_,onKeyup:j,onKeypress:U};return i(p,[null!=e&&null!=V.value?i(d,f({features:c.Hidden,as:"input",type:"checkbox",hidden:!0,readOnly:!0,checked:V.value,form:t,disabled:o.disabled,name:e,value:l})):null,r({ourProps:u,theirProps:{...y,...v(o,["modelValue","defaultChecked"])},slot:s,attrs:y,slots:h,name:"Switch"})])}}});const B={class:"absolute inset-0 h-full w-full flex items-center justify-center"},P=a({__name:"HToggle",props:m({disabled:{type:Boolean,default:!1},onIcon:{},offIcon:{}},{modelValue:{type:Boolean},modelModifiers:{}}),emits:["update:modelValue"],setup(e){const l=y(e,"modelValue");return(e,a)=>{const t=I;return g(),h(S(N),{modelValue:l.value,"onUpdate:modelValue":a[0]||(a[0]=e=>l.value=e),disabled:e.disabled,class:w(["relative h-5 w-10 inline-flex flex-shrink-0 cursor-pointer border-2 border-transparent rounded-full p-0 vertical-middle disabled-cursor-not-allowed disabled-opacity-50 focus-outline-none focus-visible-ring-2 focus-visible-ring-offset-2 focus-visible-ring-offset-white dark-focus-visible-ring-offset-gray-900",[l.value?"bg-ui-primary":"bg-stone-3 dark-bg-stone-7"]])},{default:k((()=>[x("span",{class:w(["pointer-events-none relative inline-block h-4 w-4 transform rounded-full bg-white shadow ring-0 transition duration-200 ease-in-out dark-bg-dark",[l.value?"translate-x-5":"translate-x-0"]])},[x("span",B,[l.value&&e.onIcon||!l.value&&e.offIcon?(g(),h(t,{key:0,name:l.value?e.onIcon:e.offIcon,class:"h-3 w-3 text-stone-7 dark-text-stone-3"},null,8,["name"])):V("",!0)])],2)])),_:1},8,["modelValue","disabled","class"])}}});export{P as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HTooltip-BHWSsM_K.js b/AIWebQuickDeploy/public/admin/assets/HTooltip-BHWSsM_K.js new file mode 100644 index 0000000..d1bec63 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HTooltip-BHWSsM_K.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as t}from"./HTooltip.vue_vue_type_script_setup_true_lang-T8XkjmIi.js";import"./index-BERX8Mlm.js";export{t as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HTooltip-CW8ZlTRK.js b/AIWebQuickDeploy/public/admin/assets/HTooltip-CW8ZlTRK.js deleted file mode 100644 index 1a873f5..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HTooltip-CW8ZlTRK.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as m}from"./HTooltip.vue_vue_type_script_setup_true_lang-CxwyeEWK.js";import"./index-6QRvoxq4.js";export{m as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/HTooltip.vue_vue_type_script_setup_true_lang-CxwyeEWK.js b/AIWebQuickDeploy/public/admin/assets/HTooltip.vue_vue_type_script_setup_true_lang-CxwyeEWK.js deleted file mode 100644 index ded97e4..0000000 --- a/AIWebQuickDeploy/public/admin/assets/HTooltip.vue_vue_type_script_setup_true_lang-CxwyeEWK.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{d as r,p,g as o,z as l,w as s,P as t,ai as n,c as i,h as d,t as c}from"./index-6QRvoxq4.js";const m={key:1},g=r({__name:"HTooltip",props:{text:{default:""},enable:{type:Boolean,default:!0}},setup(u){return(e,f)=>{const a=p("VTooltip");return e.enable?(o(),l(a,n({key:0,"popper-triggers":["hover"]},e.$attrs),{popper:s(()=>[t(e.$slots,"text",{},()=>[d(c(e.text),1)])]),default:s(()=>[t(e.$slots,"default")]),_:3},16)):(o(),i("div",m,[t(e.$slots,"default")]))}}});export{g as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/HTooltip.vue_vue_type_script_setup_true_lang-T8XkjmIi.js b/AIWebQuickDeploy/public/admin/assets/HTooltip.vue_vue_type_script_setup_true_lang-T8XkjmIi.js new file mode 100644 index 0000000..b0a6a70 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/HTooltip.vue_vue_type_script_setup_true_lang-T8XkjmIi.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{d as t,Q as e,a2 as s,c as a,e as o,w as p,aj as l,h as r,t as d,R as n}from"./index-BERX8Mlm.js";const u={key:1},f=t({__name:"HTooltip",props:{text:{default:""},enable:{type:Boolean,default:!0}},setup:t=>(t,f)=>{const i=e("VTooltip");return t.enable?(o(),s(i,n({key:0,"popper-triggers":["hover"]},t.$attrs),{popper:p((()=>[l(t.$slots,"text",{},(()=>[r(d(t.text),1)]))])),default:p((()=>[l(t.$slots,"default")])),_:3},16)):(o(),a("div",u,[l(t.$slots,"default")]))}});export{f as _}; diff --git a/AIWebQuickDeploy/public/admin/assets/_...all_-e-47I_Lk.js b/AIWebQuickDeploy/public/admin/assets/_...all_-e-47I_Lk.js deleted file mode 100644 index 68df37a..0000000 --- a/AIWebQuickDeploy/public/admin/assets/_...all_-e-47I_Lk.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{d as i,u,r as _,o as f,a as d,c as x,b as o,e as t,w as p,f as m,_ as v,g as w,h as g,t as h,i as k,j as B,k as s}from"./index-6QRvoxq4.js";const N={class:"absolute left-[50%] top-[50%] flex flex-col items-center justify-between lg-flex-row -translate-x-50% -translate-y-50% lg-gap-12"},b={class:"flex flex-col gap-4"},S=t("h1",{class:"m-0 text-6xl font-sans"}," 404 ",-1),y=t("div",{class:"mx-0 text-xl text-stone-5"}," 抱歉,你访问的页面不存在 ",-1),I=i({__name:"[...all]",setup(C){const a=m(),l=u(),e=_({inter:Number.NaN,countdown:5});f(()=>{e.value.inter&&window.clearInterval(e.value.inter)}),d(()=>{e.value.inter=window.setInterval(()=>{e.value.countdown--,e.value.countdown===0&&(e.value.inter&&window.clearInterval(e.value.inter),n())},1e3)});function n(){a.push(l.settings.home.fullPath)}return(V,j)=>{const c=B,r=v;return w(),x("div",N,[o(c,{name:"404",class:"text-[300px] lg-text-[400px]"}),t("div",b,[S,y,t("div",null,[o(r,{onClick:n},{default:p(()=>[g(h(k(e).countdown)+" 秒后,返回首页 ",1)]),_:1})])])])}}});typeof s=="function"&&s(I);export{I as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/_...all_-xtcz4Joe.js b/AIWebQuickDeploy/public/admin/assets/_...all_-xtcz4Joe.js new file mode 100644 index 0000000..6553d4c --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/_...all_-xtcz4Joe.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{d as e,u as t,a,r as s,o as l,b as n,c as o,e as u,f as r,g as i,_ as c,w as x,h as f,t as d,i as v,j as w,k as p}from"./index-BERX8Mlm.js";const m={class:"absolute left-[50%] top-[50%] flex flex-col items-center justify-between lg-flex-row -translate-x-50% -translate-y-50% lg-gap-12"},g={class:"flex flex-col gap-4"},h=e({__name:"[...all]",setup(e){const p=t(),h=a(),b=s({inter:Number.NaN,countdown:5});function _(){p.push(h.settings.home.fullPath)}return l((()=>{b.value.inter&&window.clearInterval(b.value.inter)})),n((()=>{b.value.inter=window.setInterval((()=>{b.value.countdown--,0===b.value.countdown&&(b.value.inter&&window.clearInterval(b.value.inter),_())}),1e3)})),(e,t)=>{const a=c,s=w;return u(),o("div",m,[r(a,{name:"404",class:"text-[300px] lg-text-[400px]"}),i("div",g,[t[0]||(t[0]=i("h1",{class:"m-0 text-6xl font-sans"},"404",-1)),t[1]||(t[1]=i("div",{class:"mx-0 text-xl text-stone-5"},"抱歉,你访问的页面不存在",-1)),i("div",null,[r(s,{onClick:_},{default:x((()=>[f(d(v(b).countdown)+" 秒后,返回首页 ",1)])),_:1})])])])}}});"function"==typeof p&&p(h);export{h as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/accountLog-BnWEbieN.js b/AIWebQuickDeploy/public/admin/assets/accountLog-BnWEbieN.js new file mode 100644 index 0000000..0e7dfd9 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/accountLog-BnWEbieN.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as e}from"./index.vue_vue_type_script_setup_true_lang-mQp5T4Ar.js";import{_ as a}from"./index.vue_vue_type_script_setup_true_lang-DBlFcaHd.js";import{d as l,r as t,$ as r,b as u,Q as s,a1 as o,c as d,e as n,f as i,w as p,g as c,V as m,W as f,a2 as g,i as _,h as v,a5 as w,t as h,ae as y,k as b}from"./index-BERX8Mlm.js";import{R as x,k as C,U as k,i as z}from"./index-gPQwgooA.js";import{u as j}from"./utcFormatTime-BtFjiA-p.js";const I=l({__name:"accountLog",setup(l){const b=t(),I=t(0),T=t(!1),U=r({userId:"",rechargeType:"",packageId:"",page:1,size:15});r({model3Count:[{required:!0,message:"请填写赠送基础模型额度",trigger:"blur"}],model4Count:[{required:!0,message:"请填写赠送高级模型额度",trigger:"blur"}],drawMjCount:[{required:!0,message:"请填写赠送绘画积分额度",trigger:"blur"}]});const V=t(),q=t([]);async function M(){try{T.value=!0;const e=await y.queryUserAccountLog(U),{rows:a,count:l}=e.data;T.value=!1,I.value=l,q.value=a}catch(e){T.value=!1}}async function A(e){const a=await y.queryAllUser({size:30,keyword:e});V.value=a.data.rows}return u((()=>M())),(l,t)=>{const r=a,u=s("el-option"),y=s("el-select"),D=s("el-form-item"),Y=s("el-button"),F=s("el-form"),L=e,R=s("el-avatar"),S=s("el-table-column"),$=s("el-tag"),P=s("el-table"),Q=s("el-pagination"),W=s("el-row"),B=o("loading");return n(),d("div",null,[i(r,null,{title:p((()=>t[5]||(t[5]=[c("div",{class:"flex items-center gap-4"},"账户明细",-1)]))),_:1}),i(L,null,{default:p((()=>[i(F,{ref_key:"formRef",ref:b,inline:!0,model:U},{default:p((()=>[i(D,{label:"用户名称",prop:"userId"},{default:p((()=>[i(y,{modelValue:U.userId,"onUpdate:modelValue":t[0]||(t[0]=e=>U.userId=e),filterable:"",clearable:"",remote:"","reserve-keyword":"",placeholder:"昵称|手机号|邮箱[模糊搜索]","remote-show-suffix":"","remote-method":A,style:{width:"200px"}},{default:p((()=>[(n(!0),d(m,null,f(V.value,(e=>(n(),g(u,{key:e.id,label:e.username,value:e.id},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),i(D,{label:"充值类型",prop:"rechargeType"},{default:p((()=>[i(y,{modelValue:U.rechargeType,"onUpdate:modelValue":t[1]||(t[1]=e=>U.rechargeType=e),placeholder:"请选择充值类型",clearable:"",style:{width:"160px"}},{default:p((()=>[(n(!0),d(m,null,f(_(x),(e=>(n(),g(u,{key:e.value,label:e.label,value:e.value},null,8,["label","value"])))),128))])),_:1},8,["modelValue"])])),_:1}),i(D,null,{default:p((()=>[i(Y,{type:"primary",onClick:M},{default:p((()=>t[6]||(t[6]=[v(" 查询 ")]))),_:1}),i(Y,{onClick:t[2]||(t[2]=e=>{return null==(a=b.value)||a.resetFields(),void M();var a})},{default:p((()=>t[7]||(t[7]=[v(" 重置 ")]))),_:1})])),_:1})])),_:1},8,["model"])])),_:1}),i(L,{style:{width:"100%"}},{default:p((()=>[w((n(),g(P,{border:"",data:q.value,style:{width:"100%"},size:"large"},{default:p((()=>[i(S,{prop:"avatar",label:"用户头像",width:"120",fixed:""},{default:p((e=>[i(R,{src:e.row.avatar},null,8,["src"])])),_:1}),i(S,{prop:"username",label:"用户名称",width:"150",fixed:""}),i(S,{prop:"nickname",label:"用户昵称",width:"150"}),i(S,{prop:"userId",label:"用户ID",width:"80"}),i(S,{prop:"uid",label:"订单ID",width:"130"}),i(S,{prop:"email",label:"用户邮箱",width:"250",align:"left"}),i(S,{prop:"balanceInfo.useModel4Count",label:"充值类型",width:"160",align:"center"},{default:p((e=>[i($,{type:"success"},{default:p((()=>{var a,l;return[v(h((null==(a=e.row)?void 0:a.rechargeType)?_(C)[null==(l=e.row)?void 0:l.rechargeType]:"---"),1)]})),_:2},1024)])),_:1}),i(S,{prop:"model3Count",label:"基础模型额度",width:"120",align:"center"}),i(S,{prop:"model4Count",label:"高级模型额度",width:"120",align:"center"}),i(S,{prop:"drawMjCount",label:"绘画余额额度",width:"120",align:"center"}),i(S,{label:"额度有效期",width:"170",align:"center"},{default:p((e=>[i($,{type:"success"},{default:p((()=>{var a,l;return[v(h((null==(a=e.row)?void 0:a.days)<=0?"永久时效":`${null==(l=e.row)?void 0:l.days}天`),1)]})),_:2},1024)])),_:1}),i(S,{prop:"status",label:"用户状态",width:"120",align:"center"},{default:p((({row:e})=>[i($,{type:_(k)[e.status]},{default:p((()=>[v(h(_(z)[e.status]),1)])),_:2},1032,["type"])])),_:1}),i(S,{prop:"createdAt",label:"充值时间",width:"200",align:"center"},{default:p((e=>[v(h(_(j)(e.row.createdAt,"YYYY-MM-DD hh:mm:ss")),1)])),_:1})])),_:1},8,["data"])),[[B,T.value]]),i(W,{class:"mt-5 flex justify-end"},{default:p((()=>[i(Q,{"current-page":U.page,"onUpdate:currentPage":t[3]||(t[3]=e=>U.page=e),"page-size":U.size,"onUpdate:pageSize":t[4]||(t[4]=e=>U.size=e),class:"mr-5","page-sizes":[15,30,50,100],layout:"total, sizes, prev, pager, next, jumper",total:I.value,onSizeChange:M,onCurrentChange:M},null,8,["current-page","page-size","total"])])),_:1})])),_:1})])}}});"function"==typeof b&&b(I);export{I as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/accountLog-fHuxQkeO.js b/AIWebQuickDeploy/public/admin/assets/accountLog-fHuxQkeO.js deleted file mode 100644 index 4db4fd4..0000000 --- a/AIWebQuickDeploy/public/admin/assets/accountLog-fHuxQkeO.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as $}from"./index.vue_vue_type_script_setup_true_lang-c3O57XSg.js";import{_ as F}from"./index.vue_vue_type_script_setup_true_lang-BhIKqf2a.js";import{d as H,r as _,m as I,a as G,p as r,q as O,g as u,c as v,b as t,w as a,F as R,s as M,i as m,h as d,y as K,z as h,t as g,e as J,K as P,k as V}from"./index-6QRvoxq4.js";import{R as Q,l as W,U as X,j as Z}from"./index-BE-LteFu.js";import{u as ee}from"./utcformatTime-Bq4gDWNx.js";const te=J("div",{class:"flex items-center gap-4"},"账户明细",-1),ae=H({__name:"accountLog",setup(le){const C=_(),T=_(0),f=_(!1),n=I({userId:"",rechargeType:"",packageId:"",page:1,size:15});I({model3Count:[{required:!0,message:"请填写赠送基础模型额度",trigger:"blur"}],model4Count:[{required:!0,message:"请填写赠送高级模型额度",trigger:"blur"}],drawMjCount:[{required:!0,message:"请填写赠送绘画积分额度",trigger:"blur"}]});const A=_(),k=_([]);async function i(){try{f.value=!0;const s=await P.queryUserAccountLog(n),{rows:l,count:b}=s.data;f.value=!1,T.value=b,k.value=l}catch{f.value=!1}}async function D(s){const l=await P.queryAllUser({size:30,keyword:s});A.value=l.data.rows}function q(s){s==null||s.resetFields(),i()}return G(()=>i()),(s,l)=>{const b=F,U=r("el-option"),x=r("el-select"),w=r("el-form-item"),z=r("el-button"),Y=r("el-form"),S=$,E=r("el-avatar"),o=r("el-table-column"),y=r("el-tag"),j=r("el-table"),L=r("el-pagination"),B=r("el-row"),N=O("loading");return u(),v("div",null,[t(b,null,{title:a(()=>[te]),_:1}),t(S,null,{default:a(()=>[t(Y,{ref_key:"formRef",ref:C,inline:!0,model:n},{default:a(()=>[t(w,{label:"用户名称",prop:"userId"},{default:a(()=>[t(x,{modelValue:n.userId,"onUpdate:modelValue":l[0]||(l[0]=e=>n.userId=e),filterable:"",clearable:"",remote:"","reserve-keyword":"",placeholder:"昵称|手机号|邮箱[模糊搜索]","remote-show-suffix":"","remote-method":D,style:{width:"200px"}},{default:a(()=>[(u(!0),v(R,null,M(A.value,e=>(u(),h(U,{key:e.id,label:e.username,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(w,{label:"充值类型",prop:"rechargeType"},{default:a(()=>[t(x,{modelValue:n.rechargeType,"onUpdate:modelValue":l[1]||(l[1]=e=>n.rechargeType=e),placeholder:"请选择充值类型",clearable:"",style:{width:"160px"}},{default:a(()=>[(u(!0),v(R,null,M(m(Q),e=>(u(),h(U,{key:e.value,label:e.label,value:e.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(w,null,{default:a(()=>[t(z,{type:"primary",onClick:i},{default:a(()=>[d(" 查询 ")]),_:1}),t(z,{onClick:l[2]||(l[2]=e=>q(C.value))},{default:a(()=>[d(" 重置 ")]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),t(S,{style:{width:"100%"}},{default:a(()=>[K((u(),h(j,{border:"",data:k.value,style:{width:"100%"},size:"large"},{default:a(()=>[t(o,{prop:"avatar",label:"用户头像",width:"120",fixed:""},{default:a(e=>[t(E,{src:e.row.avatar},null,8,["src"])]),_:1}),t(o,{prop:"username",label:"用户名称",width:"150",fixed:""}),t(o,{prop:"userId",label:"用户ID",width:"80"}),t(o,{prop:"uid",label:"订单ID",width:"130"}),t(o,{prop:"email",label:"用户邮箱",width:"250",align:"left"}),t(o,{prop:"balanceInfo.useModel4Count",label:"充值类型",width:"160",align:"center"},{default:a(e=>[t(y,{type:"success"},{default:a(()=>{var c,p;return[d(g((c=e.row)!=null&&c.rechargeType?m(W)[(p=e.row)==null?void 0:p.rechargeType]:"---"),1)]}),_:2},1024)]),_:1}),t(o,{prop:"model3Count",label:"基础模型额度",width:"120",align:"center"}),t(o,{prop:"model4Count",label:"高级模型额度",width:"120",align:"center"}),t(o,{prop:"drawMjCount",label:"绘画余额额度",width:"120",align:"center"}),t(o,{label:"额度有效期",width:"170",align:"center"},{default:a(e=>[t(y,{type:"success"},{default:a(()=>{var c,p;return[d(g(((c=e.row)==null?void 0:c.days)<=0?"永久时效":`${(p=e.row)==null?void 0:p.days}天`),1)]}),_:2},1024)]),_:1}),t(o,{prop:"status",label:"用户状态",width:"120",align:"center"},{default:a(({row:e})=>[t(y,{type:m(X)[e.status]},{default:a(()=>[d(g(m(Z)[e.status]),1)]),_:2},1032,["type"])]),_:1}),t(o,{prop:"createdAt",label:"充值时间",width:"200",align:"center"},{default:a(e=>[d(g(m(ee)(e.row.createdAt,"YYYY-MM-DD hh:mm:ss")),1)]),_:1})]),_:1},8,["data"])),[[N,f.value]]),t(B,{class:"mt-5 flex justify-end"},{default:a(()=>[t(L,{"current-page":n.page,"onUpdate:currentPage":l[3]||(l[3]=e=>n.page=e),"page-size":n.size,"onUpdate:pageSize":l[4]||(l[4]=e=>n.size=e),class:"mr-5","page-sizes":[15,30,50,100],layout:"total, sizes, prev, pager, next, jumper",total:T.value,onSizeChange:i,onCurrentChange:i},null,8,["current-page","page-size","total"])]),_:1})]),_:1})])}}});typeof V=="function"&&V(ae);export{ae as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/ali-Mqm0cjbu.js b/AIWebQuickDeploy/public/admin/assets/ali-Mqm0cjbu.js deleted file mode 100644 index f93e714..0000000 --- a/AIWebQuickDeploy/public/admin/assets/ali-Mqm0cjbu.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as h}from"./index.vue_vue_type_script_setup_true_lang-BhIKqf2a.js";import{d as B,m as I,r as C,n as R,a as U,p as n,g as D,c as N,b as e,w as l,h as p,i as m,e as f,G as y,j,_ as q,k as V}from"./index-6QRvoxq4.js";import{a as x}from"./config-DBls5jtO.js";const $=f("div",{class:"flex items-center gap-4"},"阿里云OSS参数设置",-1),E=f("div",{class:"text-sm/6"},[f("div",null,[p(" 需前往阿里云申请对象存储服务,更多配置及申请详见"),f("a",{href:"https://oss.console.aliyun.com",target:"_blank"},"阿里云OSS"),p(" 。如果同时开启多个存储服务,腾讯云优先级高于阿里云。 ")])],-1),H=B({__name:"ali",setup(M){const a=I({aliOssStatus:"",aliOssAccessKeyId:"",aliOssAccessKeySecret:"",aliOssRegion:"",aliOssBucket:"",aliOssAcceleratedDomain:""}),_=C();async function O(){const o=await x.queryConfig({keys:["aliOssAccessKeySecret","aliOssRegion","aliOssBucket","aliOssAccessKeyId","aliOssStatus","aliOssAcceleratedDomain"]});Object.assign(a,o.data)}function S(){var o;(o=_.value)==null||o.validate(async s=>{if(s){try{await x.setConfig({settings:b(a)}),y.success("变更配置信息成功")}catch{}O()}else y.error("请填写完整信息")})}function b(o){return Object.keys(o).map(s=>({configKey:s,configVal:o[s]}))}const d=R(()=>[{required:Number(a.aliOssStatus)===1,message:"开启配置后请填写此项",trigger:"change"}]);return U(()=>{O()}),(o,s)=>{const g=j,A=q,w=h,k=n("el-switch"),c=n("el-form-item"),r=n("el-col"),u=n("el-row"),i=n("el-input"),v=n("el-form"),K=n("el-card");return D(),N("div",null,[e(w,null,{title:l(()=>[$]),content:l(()=>[E]),default:l(()=>[e(A,{outline:"",onClick:S},{default:l(()=>[e(g,{name:"i-ri:file-text-line"}),p(" 保存设置 ")]),_:1})]),_:1}),e(K,{style:{margin:"20px"}},{default:l(()=>[e(v,{ref_key:"formRef",ref:_,model:a,"label-width":"120px"},{default:l(()=>[e(u,null,{default:l(()=>[e(r,{xs:24,md:20,lg:15,xl:12},{default:l(()=>[e(c,{label:"服务启用状态",prop:"aliOssStatus"},{default:l(()=>[e(k,{modelValue:a.aliOssStatus,"onUpdate:modelValue":s[0]||(s[0]=t=>a.aliOssStatus=t),"active-value":"1","inactive-value":"0"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1}),e(u,null,{default:l(()=>[e(r,{xs:24,md:20,lg:15,xl:12},{default:l(()=>[e(c,{label:"accessKeyId",prop:"aliOssAccessKeyId",rules:m(d)},{default:l(()=>[e(i,{modelValue:a.aliOssAccessKeyId,"onUpdate:modelValue":s[1]||(s[1]=t=>a.aliOssAccessKeyId=t),placeholder:"请填写SecretId",clearable:"",type:"password","show-password":""},null,8,["modelValue"])]),_:1},8,["rules"])]),_:1})]),_:1}),e(u,null,{default:l(()=>[e(r,{xs:24,md:20,lg:15,xl:12},{default:l(()=>[e(c,{label:"keySecret",prop:"aliOssAccessKeySecret",rules:m(d)},{default:l(()=>[e(i,{modelValue:a.aliOssAccessKeySecret,"onUpdate:modelValue":s[2]||(s[2]=t=>a.aliOssAccessKeySecret=t),placeholder:"请填写SecretKey",clearable:"",type:"password","show-password":""},null,8,["modelValue"])]),_:1},8,["rules"])]),_:1})]),_:1}),e(u,null,{default:l(()=>[e(r,{xs:24,md:20,lg:15,xl:12},{default:l(()=>[e(c,{label:"存储桶名称",prop:"aliOssBucket",rules:m(d)},{default:l(()=>[e(i,{modelValue:a.aliOssBucket,"onUpdate:modelValue":s[3]||(s[3]=t=>a.aliOssBucket=t),placeholder:"请填写存储桶名称",clearable:""},null,8,["modelValue"])]),_:1},8,["rules"])]),_:1})]),_:1}),e(u,null,{default:l(()=>[e(r,{xs:24,md:20,lg:15,xl:12},{default:l(()=>[e(c,{label:"所属地域",prop:"aliOssRegion",rules:m(d)},{default:l(()=>[e(i,{modelValue:a.aliOssRegion,"onUpdate:modelValue":s[4]||(s[4]=t=>a.aliOssRegion=t),placeholder:"请填写所属地域(oss-cn-shanghai)",clearable:""},null,8,["modelValue"])]),_:1},8,["rules"])]),_:1})]),_:1}),e(u,null,{default:l(()=>[e(r,{xs:24,md:20,lg:15,xl:12},{default:l(()=>[e(c,{label:"全球加速域名",prop:"aliOssAcceleratedDomain"},{default:l(()=>[e(i,{modelValue:a.aliOssAcceleratedDomain,"onUpdate:modelValue":s[5]||(s[5]=t=>a.aliOssAcceleratedDomain=t),placeholder:"如您是国外服务器可开启全球加速域名得到更快响应速度、同理也会更高计费!",clearable:""},null,8,["modelValue"])]),_:1})]),_:1})]),_:1})]),_:1},8,["model"])]),_:1})])}}});typeof V=="function"&&V(H);export{H as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/ali-zgpDqU7S.js b/AIWebQuickDeploy/public/admin/assets/ali-zgpDqU7S.js new file mode 100644 index 0000000..3abb51c --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/ali-zgpDqU7S.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as e}from"./index.vue_vue_type_script_setup_true_lang-DBlFcaHd.js";import{d as l,$ as a,r as s,P as t,b as u,Q as c,c as o,e as d,f as i,w as r,j as n,h as m,_ as f,g as p,i as O,Y as _,k as g}from"./index-BERX8Mlm.js";import{a as y}from"./config-BrbFL53_.js";const S=l({__name:"ali",setup(l){const g=a({aliOssStatus:"",aliOssAccessKeyId:"",aliOssAccessKeySecret:"",aliOssRegion:"",aliOssBucket:"",aliOssAcceleratedDomain:""}),S=s();async function x(){const e=await y.queryConfig({keys:["aliOssAccessKeySecret","aliOssRegion","aliOssBucket","aliOssAccessKeyId","aliOssStatus","aliOssAcceleratedDomain"]});Object.assign(g,e.data)}function V(){var e;null==(e=S.value)||e.validate((async e=>{if(e){try{await y.setConfig({settings:(l=g,Object.keys(l).map((e=>({configKey:e,configVal:l[e]}))))}),_.success("变更配置信息成功")}catch(a){}x()}else _.error("请填写完整信息");var l}))}const b=t((()=>[{required:1===Number(g.aliOssStatus),message:"开启配置后请填写此项",trigger:"change"}]));return u((()=>{x()})),(l,a)=>{const s=f,t=n,u=e,_=c("el-switch"),y=c("el-form-item"),x=c("el-col"),h=c("el-row"),A=c("el-input"),v=c("el-form"),K=c("el-card");return d(),o("div",null,[i(u,null,{title:r((()=>a[6]||(a[6]=[p("div",{class:"flex items-center gap-4"},"阿里云OSS参数设置",-1)]))),content:r((()=>a[7]||(a[7]=[p("div",{class:"text-sm/6"},[p("div",null,[m(" 需前往阿里云申请对象存储服务,更多配置及申请详见"),p("a",{href:"https://oss.console.aliyun.com",target:"_blank"},"阿里云OSS"),m(" 。如果同时开启多个存储服务,服务优先级:本地存储 > S3存储 > 腾讯云COS > 阿里云OSS。 ")])],-1)]))),default:r((()=>[i(t,{outline:"",onClick:V},{default:r((()=>[i(s,{name:"i-ri:file-text-line"}),a[8]||(a[8]=m(" 保存设置 "))])),_:1})])),_:1}),i(K,{style:{margin:"20px"}},{default:r((()=>[i(v,{ref_key:"formRef",ref:S,model:g,"label-width":"120px"},{default:r((()=>[i(h,null,{default:r((()=>[i(x,{xs:24,md:20,lg:15,xl:12},{default:r((()=>[i(y,{label:"服务启用状态",prop:"aliOssStatus"},{default:r((()=>[i(_,{modelValue:g.aliOssStatus,"onUpdate:modelValue":a[0]||(a[0]=e=>g.aliOssStatus=e),"active-value":"1","inactive-value":"0"},null,8,["modelValue"])])),_:1})])),_:1})])),_:1}),i(h,null,{default:r((()=>[i(x,{xs:24,md:20,lg:15,xl:12},{default:r((()=>[i(y,{label:"accessKeyId",prop:"aliOssAccessKeyId",rules:O(b)},{default:r((()=>[i(A,{modelValue:g.aliOssAccessKeyId,"onUpdate:modelValue":a[1]||(a[1]=e=>g.aliOssAccessKeyId=e),placeholder:"请填写SecretId",clearable:"",type:"password","show-password":""},null,8,["modelValue"])])),_:1},8,["rules"])])),_:1})])),_:1}),i(h,null,{default:r((()=>[i(x,{xs:24,md:20,lg:15,xl:12},{default:r((()=>[i(y,{label:"keySecret",prop:"aliOssAccessKeySecret",rules:O(b)},{default:r((()=>[i(A,{modelValue:g.aliOssAccessKeySecret,"onUpdate:modelValue":a[2]||(a[2]=e=>g.aliOssAccessKeySecret=e),placeholder:"请填写SecretKey",clearable:"",type:"password","show-password":""},null,8,["modelValue"])])),_:1},8,["rules"])])),_:1})])),_:1}),i(h,null,{default:r((()=>[i(x,{xs:24,md:20,lg:15,xl:12},{default:r((()=>[i(y,{label:"存储桶名称",prop:"aliOssBucket",rules:O(b)},{default:r((()=>[i(A,{modelValue:g.aliOssBucket,"onUpdate:modelValue":a[3]||(a[3]=e=>g.aliOssBucket=e),placeholder:"请填写存储桶名称",clearable:""},null,8,["modelValue"])])),_:1},8,["rules"])])),_:1})])),_:1}),i(h,null,{default:r((()=>[i(x,{xs:24,md:20,lg:15,xl:12},{default:r((()=>[i(y,{label:"所属地域",prop:"aliOssRegion",rules:O(b)},{default:r((()=>[i(A,{modelValue:g.aliOssRegion,"onUpdate:modelValue":a[4]||(a[4]=e=>g.aliOssRegion=e),placeholder:"请填写所属地域(oss-cn-shanghai)",clearable:""},null,8,["modelValue"])])),_:1},8,["rules"])])),_:1})])),_:1}),i(h,null,{default:r((()=>[i(x,{xs:24,md:20,lg:15,xl:12},{default:r((()=>[i(y,{label:"全球加速域名",prop:"aliOssAcceleratedDomain"},{default:r((()=>[i(A,{modelValue:g.aliOssAcceleratedDomain,"onUpdate:modelValue":a[5]||(a[5]=e=>g.aliOssAcceleratedDomain=e),placeholder:"如您是国外服务器可开启全球加速域名得到更快响应速度、同理也会更高计费!",clearable:""},null,8,["modelValue"])])),_:1})])),_:1})])),_:1})])),_:1},8,["model"])])),_:1})])}}});"function"==typeof g&&g(S);export{S as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/apl-B4CMkyY2.js b/AIWebQuickDeploy/public/admin/assets/apl-CXdQSnD-.js similarity index 57% rename from AIWebQuickDeploy/public/admin/assets/apl-B4CMkyY2.js rename to AIWebQuickDeploy/public/admin/assets/apl-CXdQSnD-.js index 6426b02..235b610 100644 --- a/AIWebQuickDeploy/public/admin/assets/apl-B4CMkyY2.js +++ b/AIWebQuickDeploy/public/admin/assets/apl-CXdQSnD-.js @@ -5,4 +5,4 @@ * https://fantastic-admin.github.io */ -var l={"+":["conjugate","add"],"−":["negate","subtract"],"×":["signOf","multiply"],"÷":["reciprocal","divide"],"⌈":["ceiling","greaterOf"],"⌊":["floor","lesserOf"],"∣":["absolute","residue"],"⍳":["indexGenerate","indexOf"],"?":["roll","deal"],"⋆":["exponentiate","toThePowerOf"],"⍟":["naturalLog","logToTheBase"],"○":["piTimes","circularFuncs"],"!":["factorial","binomial"],"⌹":["matrixInverse","matrixDivide"],"<":[null,"lessThan"],"≤":[null,"lessThanOrEqual"],"=":[null,"equals"],">":[null,"greaterThan"],"≥":[null,"greaterThanOrEqual"],"≠":[null,"notEqual"],"≡":["depth","match"],"≢":[null,"notMatch"],"∈":["enlist","membership"],"⍷":[null,"find"],"∪":["unique","union"],"∩":[null,"intersection"],"∼":["not","without"],"∨":[null,"or"],"∧":[null,"and"],"⍱":[null,"nor"],"⍲":[null,"nand"],"⍴":["shapeOf","reshape"],",":["ravel","catenate"],"⍪":[null,"firstAxisCatenate"],"⌽":["reverse","rotate"],"⊖":["axis1Reverse","axis1Rotate"],"⍉":["transpose",null],"↑":["first","take"],"↓":[null,"drop"],"⊂":["enclose","partitionWithAxis"],"⊃":["diclose","pick"],"⌷":[null,"index"],"⍋":["gradeUp",null],"⍒":["gradeDown",null],"⊤":["encode",null],"⊥":["decode",null],"⍕":["format","formatByExample"],"⍎":["execute",null],"⊣":["stop","left"],"⊢":["pass","right"]},t=/[\.\/⌿⍀¨⍣]/,a=/⍬/,i=/[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/,u=/←/,o=/[⍝#].*$/,s=function(r){var n;return n=!1,function(e){return n=e,e===r?n==="\\":!0}};const f={name:"apl",startState:function(){return{prev:!1,func:!1,op:!1,string:!1,escape:!1}},token:function(r,n){var e;return r.eatSpace()?null:(e=r.next(),e==='"'||e==="'"?(r.eatWhile(s(e)),r.next(),n.prev=!0,"string"):/[\[{\(]/.test(e)?(n.prev=!1,null):/[\]}\)]/.test(e)?(n.prev=!0,null):a.test(e)?(n.prev=!1,"atom"):/[¯\d]/.test(e)?(n.func?(n.func=!1,n.prev=!1):n.prev=!0,r.eatWhile(/[\w\.]/),"number"):t.test(e)||u.test(e)?"operator":i.test(e)?(n.func=!0,n.prev=!1,l[e]?"variableName.function.standard":"variableName.function"):o.test(e)?(r.skipToEnd(),"comment"):e==="∘"&&r.peek()==="."?(r.next(),"variableName.function"):(r.eatWhile(/[\w\$_]/),n.prev=!0,"keyword"))}};export{f as apl}; +var e={"+":["conjugate","add"],"−":["negate","subtract"],"×":["signOf","multiply"],"÷":["reciprocal","divide"],"⌈":["ceiling","greaterOf"],"⌊":["floor","lesserOf"],"∣":["absolute","residue"],"⍳":["indexGenerate","indexOf"],"?":["roll","deal"],"⋆":["exponentiate","toThePowerOf"],"⍟":["naturalLog","logToTheBase"],"○":["piTimes","circularFuncs"],"!":["factorial","binomial"],"⌹":["matrixInverse","matrixDivide"],"<":[null,"lessThan"],"≤":[null,"lessThanOrEqual"],"=":[null,"equals"],">":[null,"greaterThan"],"≥":[null,"greaterThanOrEqual"],"≠":[null,"notEqual"],"≡":["depth","match"],"≢":[null,"notMatch"],"∈":["enlist","membership"],"⍷":[null,"find"],"∪":["unique","union"],"∩":[null,"intersection"],"∼":["not","without"],"∨":[null,"or"],"∧":[null,"and"],"⍱":[null,"nor"],"⍲":[null,"nand"],"⍴":["shapeOf","reshape"],",":["ravel","catenate"],"⍪":[null,"firstAxisCatenate"],"⌽":["reverse","rotate"],"⊖":["axis1Reverse","axis1Rotate"],"⍉":["transpose",null],"↑":["first","take"],"↓":[null,"drop"],"⊂":["enclose","partitionWithAxis"],"⊃":["diclose","pick"],"⌷":[null,"index"],"⍋":["gradeUp",null],"⍒":["gradeDown",null],"⊤":["encode",null],"⊥":["decode",null],"⍕":["format","formatByExample"],"⍎":["execute",null],"⊣":["stop","left"],"⊢":["pass","right"]},n=/[\.\/⌿⍀¨⍣]/,t=/⍬/,l=/[\+−×÷⌈⌊∣⍳\?⋆⍟○!⌹<≤=>≥≠≡≢∈⍷∪∩∼∨∧⍱⍲⍴,⍪⌽⊖⍉↑↓⊂⊃⌷⍋⍒⊤⊥⍕⍎⊣⊢]/,a=/←/,r=/[⍝#].*$/;const i={name:"apl",startState:function(){return{prev:!1,func:!1,op:!1,string:!1,escape:!1}},token:function(i,u){var o,s,c;return i.eatSpace()?null:'"'===(o=i.next())||"'"===o?(i.eatWhile((s=o,c=!1,function(e){return c=e,e!==s||"\\"===c})),i.next(),u.prev=!0,"string"):/[\[{\(]/.test(o)?(u.prev=!1,null):/[\]}\)]/.test(o)?(u.prev=!0,null):t.test(o)?(u.prev=!1,"atom"):/[¯\d]/.test(o)?(u.func?(u.func=!1,u.prev=!1):u.prev=!0,i.eatWhile(/[\w\.]/),"number"):n.test(o)||a.test(o)?"operator":l.test(o)?(u.func=!0,u.prev=!1,e[o]?"variableName.function.standard":"variableName.function"):r.test(o)?(i.skipToEnd(),"comment"):"∘"===o&&"."===i.peek()?(i.next(),"variableName.function"):(i.eatWhile(/[\w\$_]/),u.prev=!0,"keyword")}};export{i as apl}; diff --git a/AIWebQuickDeploy/public/admin/assets/app-CZBIwClE.js b/AIWebQuickDeploy/public/admin/assets/app-CZBIwClE.js deleted file mode 100644 index 5fa4bdd..0000000 --- a/AIWebQuickDeploy/public/admin/assets/app-CZBIwClE.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{I as t}from"./index-6QRvoxq4.js";const e={queryCats:p=>t.get("app/queryAppCats",{params:p}),deleteCats:p=>t.post("app/delAppCats",p),createCats:p=>t.post("app/createAppCats",p),updateCats:p=>t.post("app/updateAppCats",p),queryApp:p=>t.get("app/queryApp",{params:p}),deleteApp:p=>t.post("app/delApp",p),createApp:p=>t.post("app/createApp",p),updateApp:p=>t.post("app/updateApp",p)};export{e as A}; diff --git a/AIWebQuickDeploy/public/admin/assets/app-Cak_t3ob.js b/AIWebQuickDeploy/public/admin/assets/app-Cak_t3ob.js new file mode 100644 index 0000000..ba89ba0 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/app-Cak_t3ob.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{ac as p}from"./index-BERX8Mlm.js";const a={queryCats:a=>p.get("app/queryAppCats",{params:a}),deleteCats:a=>p.post("app/delAppCats",a),createCats:a=>p.post("app/createAppCats",a),updateCats:a=>p.post("app/updateAppCats",a),queryApp:a=>p.get("app/queryApp",{params:a}),deleteApp:a=>p.post("app/delApp",a),createApp:a=>p.post("app/createApp",a),updateApp:a=>p.post("app/updateApp",a)};export{a as A}; diff --git a/AIWebQuickDeploy/public/admin/assets/application-BreYJjWu.js b/AIWebQuickDeploy/public/admin/assets/application-BreYJjWu.js deleted file mode 100644 index e323392..0000000 --- a/AIWebQuickDeploy/public/admin/assets/application-BreYJjWu.js +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * 由 Fantastic-admin 提供技术支持 - * Powered by Fantastic-admin - * https://fantastic-admin.github.io - */ - -import{_ as Ie}from"./index.vue_vue_type_script_setup_true_lang-c3O57XSg.js";import{_ as Ae}from"./index.vue_vue_type_script_setup_true_lang-BhIKqf2a.js";import{d as xe,r as c,m as S,n as J,a as ke,p as i,q as he,g as r,c as U,b as t,w as a,h as _,F as j,s as B,i as n,v as De,x as Te,y as Ue,z as u,t as x,e as w,A as y,B as Pe,C as ze,D as Ce,E as Me,G as P,H as X,j as Ge,_ as Fe,k as Z}from"./index-6QRvoxq4.js";import{A as z}from"./app-CZBIwClE.js";import{u as qe}from"./utcformatTime-Bq4gDWNx.js";import{Q as Ne,M as $e}from"./index-BE-LteFu.js";const Se=w("div",{class:"flex items-center gap-4"},"应用配置",-1),je=w("div",{class:"text-sm/6"},[w("div",null," 应用一旦创建,可能会被多处使用,请保持规范命名分类,后续尽量变更而不是删除。 "),w("div",null," 可自行选择应用是否固定模型。GPTs 需单独在特殊模型中配置 gpts 模型,并自行搜索填写 gizmoID(例如:g-alKfVrz9K)。 ")],-1),Be={style:{maxWidth:"350px"}},Re={style:{maxHeight:"50px",cursor:"pointer"}},Le={style:{maxWidth:"350px"}},Ke={style:{maxHeight:"50px",cursor:"pointer"}},He=["src"],Oe={class:"mr-5 flex justify-end"},Ye=xe({__name:"application",setup(We){const R=c(),L=c(0),A=c(!1),C=c(!1),f=S({catId:"",name:"",status:"",role:"",page:1,size:10,isGPTs:0,gizmoID:"",isFixedModel:0,appModel:""}),K=c(`/api/upload/file?dir=${encodeURIComponent("system/app")}`),F=c(),k=c(0),h=c(!1),H=c(0),o=S({catId:"",name:"",preset:"",des:"",coverImg:"",demoData:"",order:100,status:0,isGPTs:0,gizmoID:"",isFixedModel:0,appModel:""}),E=S({catId:[{required:!0,message:"请选择App分类",trigger:"change"}],name:[{required:!0,message:"请填写App名称",trigger:"blur"}],preset:[{required:!1,message:"请填写App预设信息",trigger:"blur"}],des:[{required:!0,message:"请填写App描述",trigger:"blur"}],coverImg:[{required:!1,message:"请填写App封面图片地址",trigger:"blur"}],demoData:[{required:!1,message:"请填写App演示数据",trigger:"blur"}],isGPTs:[{required:!0,message:"是否GPTs",trigger:"blur"}],gizmoID:[{required:!1,message:"GPTs 的ID",trigger:"blur"}],order:[{required:!1,message:"请填写排序ID",trigger:"blur"}],status:[{required:!0,message:"请选择App状态",trigger:"change"}],isFixedModel:[{required:!0,message:"请选择App是否固定模型",trigger:"blur"}],appModel:[{required:!1,message:"请选择App使用的模型",trigger:"change"}]}),O=c([]),q=c([]),ee=J(()=>k.value?"更新应用":"新增应用"),le=J(()=>k.value?"确认更新":"确认新增");async function V(){try{C.value=!0;const s=await z.queryApp(f),{rows:l,count:d}=s.data;C.value=!1,L.value=d,O.value=l.sort((m,v)=>v.order-m.order)}catch{C.value=!1}}async function te(){const s=await z.queryCats({size:100}),{rows:l}=s.data;q.value=l}function ae(s){k.value=s.id,h.value=s.role==="user",H.value=s.status;const{name:l,status:d,des:m,order:v,coverImg:D,catId:T,preset:p,demoData:g,isGPTs:I,gizmoID:M,isFixedModel:G,appModel:N}=s;Me(()=>{Object.assign(o,{name:l,status:d,des:m,order:v,coverImg:D,catId:T,preset:p,demoData:g,isGPTs:I,gizmoID:M,isFixedModel:G,appModel:N})}),A.value=!0}function oe(s){k.value=0,s==null||s.resetFields()}async function se(s){await z.deleteApp({id:s.id}),P.success("删除分类成功"),V()}function ne(s){s==null||s.resetFields(),V()}const Y=(s,l)=>{console.log("response: ",s.data),o.coverImg=s.data},re=s=>{if(["image/png","image/jpeg","image/gif","image/webp"].includes(s.type)){if(s.size/1024>300)return P.error("当前限制文件最大不超过 300KB!"),!1}else return P.error("当前系统仅支持 PNG、JPEG、GIF、和 WebP 格式的图片!"),!1};async function de(){if(o.coverImg){const s=await pe(o.coverImg);ie(s,Y)}}function ie(s,l){const d=new FormData;d.append("file",s),X.post(K.value,d,{headers:{"Content-Type":"multipart/form-data"}}).then(m=>{l(m.data)}).catch(m=>{console.error("上传失败",m)})}async function pe(s){const l=await X.get(s,{responseType:"blob"});let d="downloaded_file";const m=l.headers["content-disposition"];if(m){const v=/filename="([^"]+)"/.exec(m);v!=null&&v[1]&&(d=v[1])}else d=ue(s);return new File([l.data],d,{type:l.data.type})}function ue(s){const d=new URL(s).pathname;return d.substring(d.lastIndexOf("/")+1)}function me(s){s==null||s.validate(async l=>{if(l){if(k.value){const d={id:k.value,...o};h.value&&Object.assign(d,{status:H.value}),await z.updateApp(d),P({type:"success",message:"更新应用成功!"})}else await z.createApp(o),P({type:"success",message:"创建新的应用成功!"});A.value=!1,V()}})}return ke(()=>{V(),te()}),(s,l)=>{const d=Ge,m=Fe,v=Ae,D=i("el-option"),T=i("el-select"),p=i("el-form-item"),g=i("el-input"),I=i("el-button"),M=i("el-form"),G=Ie,N=i("el-image"),b=i("el-table-column"),ce=i("el-tag"),W=i("el-tooltip"),fe=i("el-popconfirm"),ge=i("el-table"),_e=i("el-pagination"),ve=i("el-row"),$=i("el-switch"),Q=i("el-icon"),be=i("el-upload"),ye=i("el-dialog"),we=he("loading");return r(),U("div",null,[t(v,null,{title:a(()=>[Se]),content:a(()=>[je]),default:a(()=>[t(m,{outline:"",onClick:l[0]||(l[0]=e=>A.value=!0)},{default:a(()=>[t(d,{name:"ic:baseline-plus"}),_(" 新增应用 ")]),_:1})]),_:1}),t(G,null,{default:a(()=>[t(M,{ref_key:"formRef",ref:R,inline:!0,model:f},{default:a(()=>[t(p,{label:"App分类",prop:"catId"},{default:a(()=>[t(T,{modelValue:f.catId,"onUpdate:modelValue":l[1]||(l[1]=e=>f.catId=e),placeholder:"请选择App分类",clearable:"",style:{width:"160px"}},{default:a(()=>[(r(!0),U(j,null,B(n(q),e=>(r(),u(D,{key:e.id,label:e.name,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(p,{label:"App名称",prop:"name"},{default:a(()=>[t(g,{modelValue:f.name,"onUpdate:modelValue":l[2]||(l[2]=e=>f.name=e),placeholder:"App名称[模糊搜索]",clearable:"",onKeydown:De(Te(V,["prevent"]),["enter"])},null,8,["modelValue","onKeydown"])]),_:1}),t(p,null,{default:a(()=>[t(I,{type:"primary",onClick:V},{default:a(()=>[_(" 查询 ")]),_:1}),t(I,{onClick:l[3]||(l[3]=e=>ne(n(R)))},{default:a(()=>[_(" 重置 ")]),_:1})]),_:1})]),_:1},8,["model"])]),_:1}),t(G,{style:{width:"100%"}},{default:a(()=>[Ue((r(),u(ge,{border:"",data:n(O),style:{width:"100%"},size:"large"},{default:a(()=>[t(b,{prop:"coverImg",label:"应用封面",width:"100"},{default:a(e=>[t(N,{style:{height:"50px"},src:e.row.coverImg,fit:"fill"},null,8,["src"])]),_:1}),t(b,{prop:"catName",label:"应用分类",width:"100"}),t(b,{prop:"name",label:"应用名称",width:"120"}),t(b,{prop:"status",label:"应用状态",width:"100"},{default:a(e=>[t(ce,{type:e.row.status===1?"success":"danger"},{default:a(()=>[_(x(n(Ne)[e.row.status]),1)]),_:2},1032,["type"])]),_:1}),t(b,{prop:"order",label:"排序ID"}),_(" /> "),t(b,{prop:"preset",label:"预设信息",width:"400"},{default:a(e=>[t(W,{class:"box-item",effect:"dark",placement:"top-start"},{content:a(()=>[w("div",Be,x(e.row.preset),1)]),default:a(()=>[w("div",Re,x(e.row.preset),1)]),_:2},1024)]),_:1}),t(b,{prop:"des",label:"描述信息",width:"300"},{default:a(e=>[t(W,{class:"box-item",effect:"dark",placement:"top-start"},{content:a(()=>[w("div",Le,x(e.row.des),1)]),default:a(()=>[w("div",Ke,x(e.row.des),1)]),_:2},1024)]),_:1}),t(b,{prop:"createdAt",label:"创建时间",width:"120"},{default:a(e=>[_(x(n(qe)(e.row.createdAt,"YYYY-MM-DD")),1)]),_:1}),t(b,{label:"操作",width:"200"},{default:a(e=>[e.row.role==="system"||e.row.public?(r(),u(I,{key:0,link:"",type:"primary",size:"small",onClick:Ve=>ae(e.row)},{default:a(()=>[_(" 编辑 ")]),_:2},1032,["onClick"])):y("",!0),e.row.role==="system"?(r(),u(fe,{key:1,title:"确认删除此应用么?",width:"200","icon-color":"red",onConfirm:Ve=>se(e.row)},{reference:a(()=>[t(I,{link:"",type:"danger",size:"small"},{default:a(()=>[_(" 删除应用 ")]),_:1})]),_:2},1032,["onConfirm"])):y("",!0)]),_:1})]),_:1},8,["data"])),[[we,n(C)]]),t(ve,{class:"mt-5 flex justify-end"},{default:a(()=>[t(_e,{"current-page":f.page,"onUpdate:currentPage":l[4]||(l[4]=e=>f.page=e),"page-size":f.size,"onUpdate:pageSize":l[5]||(l[5]=e=>f.size=e),class:"mr-5","page-sizes":[10,20,30,50],layout:"total, sizes, prev, pager, next, jumper",total:n(L),onSizeChange:V,onCurrentChange:V},null,8,["current-page","page-size","total"])]),_:1})]),_:1}),t(ye,{modelValue:n(A),"onUpdate:modelValue":l[20]||(l[20]=e=>Ce(A)?A.value=e:null),"close-on-click-modal":!1,title:n(ee),width:"570",onClose:l[21]||(l[21]=e=>oe(n(F)))},{footer:a(()=>[w("span",Oe,[t(I,{onClick:l[18]||(l[18]=e=>A.value=!1)},{default:a(()=>[_("取消")]),_:1}),t(I,{type:"primary",onClick:l[19]||(l[19]=e=>me(n(F)))},{default:a(()=>[_(x(n(le)),1)]),_:1})])]),default:a(()=>[t(M,{ref_key:"formPackageRef",ref:F,"label-position":"right","label-width":"100px",model:o,rules:E},{default:a(()=>[t(p,{label:"App分类",prop:"catId"},{default:a(()=>[t(T,{modelValue:o.catId,"onUpdate:modelValue":l[6]||(l[6]=e=>o.catId=e),placeholder:"请选择App分类",clearable:"",style:{width:"100%"}},{default:a(()=>[(r(!0),U(j,null,B(n(q),e=>(r(),u(D,{key:e.id,label:e.name,value:e.id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),t(p,{label:"App名称",prop:"name"},{default:a(()=>[t(g,{modelValue:o.name,"onUpdate:modelValue":l[7]||(l[7]=e=>o.name=e),placeholder:"请填写App名称"},null,8,["modelValue"])]),_:1}),n(h)?y("",!0):(r(),u(p,{key:0,label:"App状态",prop:"status"},{default:a(()=>[t($,{modelValue:o.status,"onUpdate:modelValue":l[8]||(l[8]=e=>o.status=e),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})),t(p,{label:"App描述",prop:"des"},{default:a(()=>[t(g,{modelValue:o.des,"onUpdate:modelValue":l[9]||(l[9]=e=>o.des=e),type:"textarea",placeholder:"请填写App介绍信息、用于对外展示...",rows:4},null,8,["modelValue"])]),_:1}),n(h)?y("",!0):(r(),u(p,{key:1,label:"启用GPTs",prop:"isGPTs"},{default:a(()=>[t($,{modelValue:o.isGPTs,"onUpdate:modelValue":l[10]||(l[10]=e=>o.isGPTs=e),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})),Number(o.isGPTs)===1?(r(),u(p,{key:2,label:"gizmoID",prop:"gizmoID"},{default:a(()=>[t(g,{modelValue:o.gizmoID,"onUpdate:modelValue":l[11]||(l[11]=e=>o.gizmoID=e),placeholder:"请填写 GPTs 使用的 gizmoID"},null,8,["modelValue"])]),_:1})):y("",!0),Number(o.isGPTs)!==1?(r(),u(p,{key:3,label:"App预设",prop:"preset"},{default:a(()=>[t(g,{modelValue:o.preset,"onUpdate:modelValue":l[12]||(l[12]=e=>o.preset=e),type:"textarea",placeholder:"请填写App预设信息、用于给AI预设身份...",rows:4},null,8,["modelValue"])]),_:1})):y("",!0),!n(h)&&Number(o.isGPTs)!==1?(r(),u(p,{key:4,label:"固定模型",prop:"isFixedModel"},{default:a(()=>[t($,{modelValue:o.isFixedModel,"onUpdate:modelValue":l[13]||(l[13]=e=>o.isFixedModel=e),"active-value":1,"inactive-value":0},null,8,["modelValue"])]),_:1})):y("",!0),Number(o.isFixedModel)===1&&Number(o.isGPTs)!==1?(r(),u(p,{key:5,label:"使用模型",prop:"appModel"},{default:a(()=>[t(T,{modelValue:o.appModel,"onUpdate:modelValue":l[14]||(l[14]=e=>o.appModel=e),filterable:"","allow-create":"",placeholder:"请选择应用使用的模型",clearable:""},{default:a(()=>[(r(!0),U(j,null,B(n($e),e=>(r(),u(D,{key:e,label:e,value:e},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1})):y("",!0),t(p,{label:"示例内容",prop:"demoData"},{default:a(()=>[t(g,{modelValue:o.demoData,"onUpdate:modelValue":l[15]||(l[15]=e=>o.demoData=e),type:"textarea",placeholder:"请填写App的demo示例数据、每换行一次表示一个新的示例...",rows:4},null,8,["modelValue"])]),_:1}),t(p,{label:"应用图标",prop:"coverImg"},{default:a(()=>[t(g,{modelValue:o.coverImg,"onUpdate:modelValue":l[16]||(l[16]=e=>o.coverImg=e),placeholder:"请填写或上传应用图标",clearable:""},{append:a(()=>[t(be,{class:"avatar-uploader",action:n(K),"show-file-list":!1,"on-success":Y,"before-upload":re,style:{display:"flex","align-items":"center","justify-content":"center"}},{default:a(()=>[o.coverImg?(r(),U("img",{key:0,src:o.coverImg,style:{"max-width":"1.5rem","max-height":"1.5rem",margin:"5px 0","object-fit":"contain"}},null,8,He)):(r(),u(Q,{key:1,style:{width:"1rem"}},{default:a(()=>[t(n(Pe))]),_:1}))]),_:1},8,["action"]),o.coverImg?(r(),u(Q,{key:0,onClick:de,style:{"margin-left":"35px",width:"1rem"}},{default:a(()=>[t(n(ze))]),_:1})):y("",!0)]),_:1},8,["modelValue"])]),_:1}),t(p,{label:"排序ID",prop:"order"},{default:a(()=>[t(g,{modelValue:o.order,"onUpdate:modelValue":l[17]||(l[17]=e=>o.order=e),modelModifiers:{number:!0},placeholder:"请填写排序ID[数字越大越靠前]"},null,8,["modelValue"])]),_:1})]),_:1},8,["model","rules"])]),_:1},8,["modelValue","title"])])}}});typeof Z=="function"&&Z(Ye);export{Ye as default}; diff --git a/AIWebQuickDeploy/public/admin/assets/application-CRdbamYy.js b/AIWebQuickDeploy/public/admin/assets/application-CRdbamYy.js new file mode 100644 index 0000000..3729381 --- /dev/null +++ b/AIWebQuickDeploy/public/admin/assets/application-CRdbamYy.js @@ -0,0 +1,8 @@ + +/** + * 由 Fantastic-admin 提供技术支持 + * Powered by Fantastic-admin + * https://fantastic-admin.github.io + */ + +import{_ as e}from"./index.vue_vue_type_script_setup_true_lang-mQp5T4Ar.js";import{_ as t}from"./index.vue_vue_type_script_setup_true_lang-DBlFcaHd.js";import{N as n,l as r,m as o,n as i,p as a,q as s,s as l,v as c,E as u,x as d,y as f,z as p,A as h,B as m,C as g,D as v,F as y,G as b,H as E,I as _,J as S,K as T,L as I,M as x,O as N,d as O,r as A,P as C,Q as w,c as D,e as R,f as M,g as P,i as L,R as k,w as V,t as F,S as U,T as X,h as j,U as B,V as $,W as H,X as G,Y as q,Z as Y,$ as K,a0 as W,b as z,a1 as J,j as Q,_ as Z,a2 as ee,a3 as te,a4 as ne,a5 as re,a6 as oe,a7 as ie,a8 as ae,a9 as se,aa as le,k as ce}from"./index-BERX8Mlm.js";import{A as ue}from"./app-Cak_t3ob.js";import{A as de}from"./models-Bn8M3XEv.js";import{u as fe}from"./upload-DwmqW_vL.js";import{u as pe}from"./utcFormatTime-BtFjiA-p.js";import{Q as he}from"./index-gPQwgooA.js";const me=[];for(let zs=0;zs<256;++zs)me.push((zs+256).toString(16).slice(1));let ge;const ve=new Uint8Array(16);const ye={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function be(e,t,n){var r;if(ye.randomUUID&&!e)return ye.randomUUID();const o=(e=e||{}).random??(null==(r=e.rng)?void 0:r.call(e))??function(){if(!ge){if("undefined"==typeof crypto||!crypto.getRandomValues)throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");ge=crypto.getRandomValues.bind(crypto)}return ge(ve)}();if(o.length<16)throw new Error("Random bytes length must be >= 16");return o[6]=15&o[6]|64,o[8]=63&o[8]|128,function(e,t=0){return(me[e[t+0]]+me[e[t+1]]+me[e[t+2]]+me[e[t+3]]+"-"+me[e[t+4]]+me[e[t+5]]+"-"+me[e[t+6]]+me[e[t+7]]+"-"+me[e[t+8]]+me[e[t+9]]+"-"+me[e[t+10]]+me[e[t+11]]+me[e[t+12]]+me[e[t+13]]+me[e[t+14]]+me[e[t+15]]).toLowerCase()}(o)}var Ee={exports:{}},_e={exports:{}},Se={};const Te=Symbol(""),Ie=Symbol(""),xe=Symbol(""),Ne=Symbol(""),Oe=Symbol(""),Ae=Symbol(""),Ce=Symbol(""),we=Symbol(""),De=Symbol(""),Re=Symbol(""),Me=Symbol(""),Pe=Symbol(""),Le=Symbol(""),ke=Symbol(""),Ve=Symbol(""),Fe=Symbol(""),Ue=Symbol(""),Xe=Symbol(""),je=Symbol(""),Be=Symbol(""),$e=Symbol(""),He=Symbol(""),Ge=Symbol(""),qe=Symbol(""),Ye=Symbol(""),Ke=Symbol(""),We=Symbol(""),ze=Symbol(""),Je=Symbol(""),Qe=Symbol(""),Ze=Symbol(""),et=Symbol(""),tt=Symbol(""),nt=Symbol(""),rt=Symbol(""),ot=Symbol(""),it=Symbol(""),at=Symbol(""),st=Symbol(""),lt={[Te]:"Fragment",[Ie]:"Teleport",[xe]:"Suspense",[Ne]:"KeepAlive",[Oe]:"BaseTransition",[Ae]:"openBlock",[Ce]:"createBlock",[we]:"createElementBlock",[De]:"createVNode",[Re]:"createElementVNode",[Me]:"createCommentVNode",[Pe]:"createTextVNode",[Le]:"createStaticVNode",[ke]:"resolveComponent",[Ve]:"resolveDynamicComponent",[Fe]:"resolveDirective",[Ue]:"resolveFilter",[Xe]:"withDirectives",[je]:"renderList",[Be]:"renderSlot",[$e]:"createSlots",[He]:"toDisplayString",[Ge]:"mergeProps",[qe]:"normalizeClass",[Ye]:"normalizeStyle",[Ke]:"normalizeProps",[We]:"guardReactiveProps",[ze]:"toHandlers",[Je]:"camelize",[Qe]:"capitalize",[Ze]:"toHandlerKey",[et]:"setBlockTracking",[tt]:"pushScopeId",[nt]:"popScopeId",[rt]:"withCtx",[ot]:"unref",[it]:"isRef",[at]:"withMemo",[st]:"isMemoSame"};function ct(e){Object.getOwnPropertySymbols(e).forEach((t=>{lt[t]=e[t]}))}const ut={start:{line:1,column:1,offset:0},end:{line:1,column:1,offset:0},source:""};function dt(e,t=""){return{type:0,source:t,children:e,helpers:new Set,components:[],directives:[],hoists:[],imports:[],cached:[],temps:0,codegenNode:void 0,loc:ut}}function ft(e,t,n,r,o,i,a,s=!1,l=!1,c=!1,u=ut){return e&&(s?(e.helper(Ae),e.helper(It(e.inSSR,c))):e.helper(Tt(e.inSSR,c)),a&&e.helper(Xe)),{type:13,tag:t,props:n,children:r,patchFlag:o,dynamicProps:i,directives:a,isBlock:s,disableTracking:l,isComponent:c,loc:u}}function pt(e,t=ut){return{type:17,loc:t,elements:e}}function ht(e,t=ut){return{type:15,loc:t,properties:e}}function mt(e,t){return{type:16,loc:ut,key:o(e)?gt(e,!0):e,value:t}}function gt(e,t=!1,n=ut,r=0){return{type:4,loc:n,content:e,isStatic:t,constType:t?3:r}}function vt(e,t=ut){return{type:8,loc:t,children:e}}function yt(e,t=[],n=ut){return{type:14,loc:n,callee:e,arguments:t}}function bt(e,t=void 0,n=!1,r=!1,o=ut){return{type:18,params:e,returns:t,newline:n,isSlot:r,loc:o}}function Et(e,t,n,r=!0){return{type:19,test:e,consequent:t,alternate:n,newline:r,loc:ut}}function _t(e,t,n=!1,r=!1){return{type:20,index:e,value:t,needPauseTracking:n,inVOnce:r,needArraySpread:!1,loc:ut}}function St(e){return{type:21,body:e,loc:ut}}function Tt(e,t){return e||t?De:Re}function It(e,t){return e||t?Ce:we}function xt(e,{helper:t,removeHelper:n,inSSR:r}){e.isBlock||(e.isBlock=!0,n(Tt(r,e.isComponent)),t(Ae),t(It(r,e.isComponent)))}const Nt=new Uint8Array([123,123]),Ot=new Uint8Array([125,125]);function At(e){return e>=97&&e<=122||e>=65&&e<=90}function Ct(e){return 32===e||10===e||9===e||12===e||13===e}function wt(e){return 47===e||62===e||Ct(e)}function Dt(e){const t=new Uint8Array(e.length);for(let n=0;n`.sync modifier for v-bind has been removed. Use v-model with argument instead. \`v-bind:${e}.sync\` should be changed to \`v-model:${e}\`.`,link:"https://v3-migration.vuejs.org/breaking-changes/v-model.html"},COMPILER_V_BIND_OBJECT_ORDER:{message:'v-bind="obj" usage is now order sensitive and behaves like JavaScript object spread: it will now overwrite an existing non-mergeable attribute that appears before v-bind in the case of conflict. To retain 2.x behavior, move v-bind to make it the first attribute. You can also suppress this warning if the usage is intended.',link:"https://v3-migration.vuejs.org/breaking-changes/v-bind.html"},COMPILER_V_ON_NATIVE:{message:".native modifier for v-on has been removed as is no longer necessary.",link:"https://v3-migration.vuejs.org/breaking-changes/v-on-native-modifier-removed.html"},COMPILER_V_IF_V_FOR_PRECEDENCE:{message:"v-if / v-for precedence when used on the same element has changed in Vue 3: v-if now takes higher precedence and will no longer have access to v-for scope variables. It is best to avoid the ambiguity with