gitextract_oxfbws1h/ ├── .github/ │ ├── ISSUE_TEMPLATE.md │ └── workflows/ │ ├── build-image-for-test.yml │ ├── build-image.yml │ ├── deploy-demo.yml │ ├── sync-to-gitee-dev.yml │ └── sync-to-gitee.yml ├── .gitignore ├── .npmrc ├── .prettierrc ├── CHANGELOG.md ├── LICENSE ├── LICENSE.md ├── README.md ├── README_en.md ├── build-dev.trigger ├── build.trigger ├── deploy.js ├── deploy.trigger ├── docker/ │ └── run/ │ └── docker-compose.yaml ├── docs/ │ ├── .gitignore │ ├── .vitepress/ │ │ ├── config.ts │ │ └── theme/ │ │ ├── Layout.vue │ │ ├── index.ts │ │ ├── plugins/ │ │ │ └── baidutongji.ts │ │ └── style.css │ ├── guide/ │ │ ├── changelogs/ │ │ │ └── CHANGELOG.md │ │ ├── contact/ │ │ │ └── index.md │ │ ├── development/ │ │ │ ├── demo/ │ │ │ │ └── access.md │ │ │ └── index.md │ │ ├── donate/ │ │ │ └── index.md │ │ ├── feature/ │ │ │ ├── cname/ │ │ │ │ └── index.md │ │ │ └── safe/ │ │ │ ├── hidden/ │ │ │ │ └── index.md │ │ │ └── index.md │ │ ├── image.md │ │ ├── index.md │ │ ├── install/ │ │ │ ├── 1panel/ │ │ │ │ └── index.md │ │ │ ├── baota/ │ │ │ │ └── index.md │ │ │ ├── database.md │ │ │ ├── docker/ │ │ │ │ └── index.md │ │ │ ├── source/ │ │ │ │ └── index.md │ │ │ └── upgrade.md │ │ ├── license/ │ │ │ └── index.md │ │ ├── link/ │ │ │ └── index.md │ │ ├── open/ │ │ │ └── index.md │ │ ├── plugins/ │ │ │ ├── access.md │ │ │ ├── deploy.md │ │ │ ├── dns-provider.md │ │ │ └── notification.md │ │ ├── qa/ │ │ │ ├── index.md │ │ │ └── use.md │ │ ├── start.md │ │ ├── tutorial.md │ │ └── use/ │ │ ├── ESXi/ │ │ │ └── index.md │ │ ├── aliyun/ │ │ │ └── index.md │ │ ├── backup/ │ │ │ └── index.md │ │ ├── cert/ │ │ │ └── index.md │ │ ├── cf/ │ │ │ └── cf.md │ │ ├── comm/ │ │ │ ├── index.md │ │ │ └── payments/ │ │ │ ├── alipay.md │ │ │ ├── wxpay.md │ │ │ └── yizhifu.md │ │ ├── custom-script/ │ │ │ └── index.md │ │ ├── email/ │ │ │ └── index.md │ │ ├── forgotpasswd/ │ │ │ └── index.md │ │ ├── google/ │ │ │ └── index.md │ │ ├── host/ │ │ │ └── windows.md │ │ ├── https/ │ │ │ └── index.md │ │ ├── pretask/ │ │ │ └── index.md │ │ ├── rerun/ │ │ │ └── index.md │ │ ├── setting/ │ │ │ └── ipv6.md │ │ ├── synology/ │ │ │ └── index.md │ │ └── tencent/ │ │ └── index.md │ ├── index.md │ └── public/ │ └── robots.txt ├── index.ts ├── init.sh ├── lerna.json ├── package.json ├── packages/ │ ├── core/ │ │ ├── acme-client/ │ │ │ ├── .editorconfig │ │ │ ├── .eslintrc │ │ │ ├── .github/ │ │ │ │ ├── scripts/ │ │ │ │ │ ├── tests-install-coredns.sh │ │ │ │ │ ├── tests-install-cts.sh │ │ │ │ │ ├── tests-install-pebble.sh │ │ │ │ │ └── tests-wait-for-ca.sh │ │ │ │ └── workflows/ │ │ │ │ └── tests.yml │ │ │ ├── .gitignore │ │ │ ├── .prettierrc │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── build.md │ │ │ ├── docs/ │ │ │ │ ├── client.md │ │ │ │ ├── crypto.md │ │ │ │ ├── forge.md │ │ │ │ └── upgrade-v5.md │ │ │ ├── examples/ │ │ │ │ ├── README.md │ │ │ │ ├── api.js │ │ │ │ ├── auto.js │ │ │ │ ├── dns-01/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── dns-01.js │ │ │ │ ├── fallback.crt │ │ │ │ ├── fallback.key │ │ │ │ ├── http-01/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── http-01.js │ │ │ │ └── tls-alpn-01/ │ │ │ │ ├── README.md │ │ │ │ ├── haproxy.cfg │ │ │ │ ├── nginx.conf │ │ │ │ └── tls-alpn-01.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── api.js │ │ │ │ ├── auto.js │ │ │ │ ├── axios.js │ │ │ │ ├── client.js │ │ │ │ ├── crypto/ │ │ │ │ │ ├── forge.js │ │ │ │ │ └── index.js │ │ │ │ ├── error.js │ │ │ │ ├── http.js │ │ │ │ ├── index.js │ │ │ │ ├── logger.js │ │ │ │ ├── util.js │ │ │ │ ├── verify.js │ │ │ │ └── wait.js │ │ │ ├── test/ │ │ │ │ ├── 00-pebble.spec.js │ │ │ │ ├── 10-http.spec.js │ │ │ │ ├── 10-logger.spec.js │ │ │ │ ├── 10-util.spec.js │ │ │ │ ├── 10-verify.spec.js │ │ │ │ ├── 20-crypto-legacy.spec.js │ │ │ │ ├── 20-crypto.spec.js │ │ │ │ ├── 50-client.spec.js │ │ │ │ ├── 70-auto.spec.js │ │ │ │ ├── challtestsrv.js │ │ │ │ ├── fixtures/ │ │ │ │ │ ├── certificate.crt │ │ │ │ │ ├── letsencrypt.crt │ │ │ │ │ ├── private.key │ │ │ │ │ └── san-certificate.crt │ │ │ │ ├── get-cert-issuers.js │ │ │ │ ├── retry.js │ │ │ │ ├── setup.js │ │ │ │ ├── soa.spec.mjs │ │ │ │ └── spec.js │ │ │ └── types/ │ │ │ ├── index.d.ts │ │ │ ├── index.test-d.ts │ │ │ └── rfc8555.d.ts │ │ ├── basic/ │ │ │ ├── .eslintrc │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .npmrc │ │ │ ├── .prettierrc │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── build.md │ │ │ ├── package.json │ │ │ ├── readme.md │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── utils/ │ │ │ │ ├── index.ts │ │ │ │ ├── util.amount.ts │ │ │ │ ├── util.cache.ts │ │ │ │ ├── util.domain.ts │ │ │ │ ├── util.env.ts │ │ │ │ ├── util.file.ts │ │ │ │ ├── util.hash.ts │ │ │ │ ├── util.id.ts │ │ │ │ ├── util.lock.ts │ │ │ │ ├── util.log.ts │ │ │ │ ├── util.merge.ts │ │ │ │ ├── util.mitter.ts │ │ │ │ ├── util.options.ts │ │ │ │ ├── util.promise.ts │ │ │ │ ├── util.request.ts │ │ │ │ ├── util.sleep.ts │ │ │ │ ├── util.sp.ts │ │ │ │ └── util.string.ts │ │ │ └── tsconfig.json │ │ └── pipeline/ │ │ ├── .eslintrc │ │ ├── .gitignore │ │ ├── .mocharc.json │ │ ├── .npmignore │ │ ├── .npmrc │ │ ├── .prettierrc │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build.md │ │ ├── fix-esm-import-paths.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── access/ │ │ │ │ ├── api.ts │ │ │ │ ├── decorator.ts │ │ │ │ ├── index.ts │ │ │ │ └── registry.ts │ │ │ ├── context/ │ │ │ │ └── index.ts │ │ │ ├── core/ │ │ │ │ ├── context.ts │ │ │ │ ├── exceptions.ts │ │ │ │ ├── executor.ts │ │ │ │ ├── file-store.ts │ │ │ │ ├── index.ts │ │ │ │ ├── run-history.ts │ │ │ │ └── storage.ts │ │ │ ├── decorator/ │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ ├── dt/ │ │ │ │ ├── fast-crud.ts │ │ │ │ ├── index.ts │ │ │ │ └── pipeline.ts │ │ │ ├── index.ts │ │ │ ├── notification/ │ │ │ │ ├── api.ts │ │ │ │ ├── decorator.ts │ │ │ │ ├── index.ts │ │ │ │ └── registry.ts │ │ │ ├── plugin/ │ │ │ │ ├── api.ts │ │ │ │ ├── decorator.ts │ │ │ │ ├── group.ts │ │ │ │ ├── index.ts │ │ │ │ └── registry.ts │ │ │ ├── registry/ │ │ │ │ ├── index.ts │ │ │ │ └── registry.ts │ │ │ └── service/ │ │ │ ├── cname.ts │ │ │ ├── config.ts │ │ │ ├── email.ts │ │ │ ├── emit.ts │ │ │ ├── index.ts │ │ │ └── url.ts │ │ ├── test/ │ │ │ ├── cert.fake.test.ts │ │ │ ├── index.test.ts │ │ │ └── pipeline/ │ │ │ ├── .gitignore │ │ │ ├── access-service-test.ts │ │ │ ├── init.test.ts │ │ │ ├── pipeline.define.ts │ │ │ └── pipeline.test.ts │ │ └── tsconfig.json │ ├── libs/ │ │ ├── lib-huawei/ │ │ │ ├── .eslintrc │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .prettierrc │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── fix-esm-import-paths.js │ │ │ ├── package.json │ │ │ ├── rollup.config.js │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── lib/ │ │ │ │ ├── APIGW-javascript-sdk-2.0.5/ │ │ │ │ │ ├── licenses/ │ │ │ │ │ │ ├── license-crypto-js │ │ │ │ │ │ └── license-node │ │ │ │ │ ├── node_demo.js │ │ │ │ │ └── signer.js │ │ │ │ ├── client.d.ts │ │ │ │ ├── client.js │ │ │ │ ├── signer.d.ts │ │ │ │ └── signer.js │ │ │ └── tsconfig.json │ │ ├── lib-iframe/ │ │ │ ├── .eslintrc │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .prettierrc │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── fix-esm-import-paths.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── lib/ │ │ │ │ └── iframe.client.ts │ │ │ └── tsconfig.json │ │ ├── lib-jdcloud/ │ │ │ ├── .eslintrc │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .travis.yml │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── rollup.config.js │ │ │ ├── src/ │ │ │ │ ├── global.js │ │ │ │ ├── index.ts │ │ │ │ ├── jdcloud.js │ │ │ │ ├── lib/ │ │ │ │ │ ├── browser.js │ │ │ │ │ ├── browser_loader.js │ │ │ │ │ ├── common.js │ │ │ │ │ ├── config.js │ │ │ │ │ ├── core.js │ │ │ │ │ ├── credentials.js │ │ │ │ │ ├── jc.js │ │ │ │ │ ├── node_loader.js │ │ │ │ │ ├── request.js │ │ │ │ │ ├── service.js │ │ │ │ │ ├── signers/ │ │ │ │ │ │ ├── request_signer.js │ │ │ │ │ │ ├── v2.js │ │ │ │ │ │ └── v2_credentials.js │ │ │ │ │ └── util.js │ │ │ │ ├── repo/ │ │ │ │ │ ├── ag/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── ag.js │ │ │ │ │ ├── ams/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── ams.js │ │ │ │ │ ├── antipro/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── antipro.js │ │ │ │ │ ├── apigateway/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── apigateway.js │ │ │ │ │ ├── asset/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── asset.js │ │ │ │ │ ├── assistant/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── assistant.js │ │ │ │ │ ├── autotaskpolicy/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── autotaskpolicy.js │ │ │ │ │ ├── baseanti/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── baseanti.js │ │ │ │ │ ├── bastion/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── bastion.js │ │ │ │ │ ├── bgw/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── bgw.js │ │ │ │ │ ├── billing/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── billing.js │ │ │ │ │ ├── bri/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── bri.js │ │ │ │ │ ├── captcha/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── captcha.js │ │ │ │ │ ├── cdn/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── cdn.js │ │ │ │ │ ├── censor/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── censor.js │ │ │ │ │ ├── clickhouse/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── clickhouse.js │ │ │ │ │ ├── cloudauth/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── cloudauth.js │ │ │ │ │ ├── clouddnsservice/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── clouddnsservice.js │ │ │ │ │ ├── cloudsign/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── cloudsign.js │ │ │ │ │ ├── compile/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── compile.js │ │ │ │ │ ├── containerregistry/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── containerregistry.js │ │ │ │ │ ├── cp/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── cp.js │ │ │ │ │ ├── cps/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── cps.js │ │ │ │ │ ├── cr/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── cr.js │ │ │ │ │ ├── datastar/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── datastar.js │ │ │ │ │ ├── dbaudit/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── dbaudit.js │ │ │ │ │ ├── dbs/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── dbs.js │ │ │ │ │ ├── dcap/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── dcap.js │ │ │ │ │ ├── deploy/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── deploy.js │ │ │ │ │ ├── detection/ │ │ │ │ │ │ ├── v2/ │ │ │ │ │ │ │ └── detection.js │ │ │ │ │ │ └── v3/ │ │ │ │ │ │ └── detection.js │ │ │ │ │ ├── dh/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── dh.js │ │ │ │ │ ├── disk/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── disk.js │ │ │ │ │ ├── dms/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── dms.js │ │ │ │ │ ├── domain/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── domain.js │ │ │ │ │ ├── domainservice/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── domainservice.js │ │ │ │ │ ├── dts/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── dts.js │ │ │ │ │ ├── edcps/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── edcps.js │ │ │ │ │ ├── eid/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── eid.js │ │ │ │ │ ├── elite/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── elite.js │ │ │ │ │ ├── es/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── es.js │ │ │ │ │ ├── fc/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── fc.js │ │ │ │ │ ├── flowlog/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── flowlog.js │ │ │ │ │ ├── function/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── function.js │ │ │ │ │ ├── gcs/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── gcs.js │ │ │ │ │ ├── httpdns/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── httpdns.js │ │ │ │ │ ├── hufu/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── hufu.js │ │ │ │ │ ├── iam/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── iam.js │ │ │ │ │ ├── ias/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── ias.js │ │ │ │ │ ├── industrydata/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── industrydata.js │ │ │ │ │ ├── instancevoucher/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── instancevoucher.js │ │ │ │ │ ├── invoice/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── invoice.js │ │ │ │ │ ├── iotcard/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── iotcard.js │ │ │ │ │ ├── iotcloudgateway/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── iotcloudgateway.js │ │ │ │ │ ├── iotcore/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── iotcore.js │ │ │ │ │ ├── iotedge/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── iotedge.js │ │ │ │ │ ├── iothub/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── iothub.js │ │ │ │ │ ├── iotlink/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── iotlink.js │ │ │ │ │ ├── ipanti/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── ipanti.js │ │ │ │ │ ├── iv/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── iv.js │ │ │ │ │ ├── jcq/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── jcq.js │ │ │ │ │ ├── jdccs/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── jdccs.js │ │ │ │ │ ├── jdfusion/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── jdfusion.js │ │ │ │ │ ├── jdro/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── jdro.js │ │ │ │ │ ├── jdw/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── jdw.js │ │ │ │ │ ├── jdworkspace/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── jdworkspace.js │ │ │ │ │ ├── jke/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── jke.js │ │ │ │ │ ├── jmr/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── jmr.js │ │ │ │ │ ├── kafka/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── kafka.js │ │ │ │ │ ├── kms/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── kms.js │ │ │ │ │ ├── kubernetes/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── kubernetes.js │ │ │ │ │ ├── lavm/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── lavm.js │ │ │ │ │ ├── lb/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── lb.js │ │ │ │ │ ├── live/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── live.js │ │ │ │ │ ├── mongodb/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── mongodb.js │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ ├── v1/ │ │ │ │ │ │ │ └── monitor.js │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── monitor.js │ │ │ │ │ ├── monitorcm/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── monitorcm.js │ │ │ │ │ ├── mps/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── mps.js │ │ │ │ │ ├── nativecontainer/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── nativecontainer.js │ │ │ │ │ ├── nc/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── nc.js │ │ │ │ │ ├── openjrtc/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── openjrtc.js │ │ │ │ │ ├── oss/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── oss.js │ │ │ │ │ ├── ossopenapi/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── ossopenapi.js │ │ │ │ │ ├── partner/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── partner.js │ │ │ │ │ ├── pipeline/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── pipeline.js │ │ │ │ │ ├── pod/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── pod.js │ │ │ │ │ ├── portal/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── portal.js │ │ │ │ │ ├── privatezone/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── privatezone.js │ │ │ │ │ ├── quota/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── quota.js │ │ │ │ │ ├── rds/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── rds.js │ │ │ │ │ ├── rdts/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── rdts.js │ │ │ │ │ ├── redis/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── redis.js │ │ │ │ │ ├── refund/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── refund.js │ │ │ │ │ ├── reservedinstance/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── reservedinstance.js │ │ │ │ │ ├── resourcetag/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── resourcetag.js │ │ │ │ │ ├── rms/ │ │ │ │ │ │ ├── v1/ │ │ │ │ │ │ │ └── rms.js │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── rms.js │ │ │ │ │ ├── smartdba/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── smartdba.js │ │ │ │ │ ├── sms/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── sms.js │ │ │ │ │ ├── sop/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── sop.js │ │ │ │ │ ├── ssl/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── ssl.js │ │ │ │ │ ├── starshield/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── starshield.js │ │ │ │ │ ├── streambus/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── streambus.js │ │ │ │ │ ├── streamcomputer/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── streamcomputer.js │ │ │ │ │ ├── sts/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── sts.js │ │ │ │ │ ├── tidb/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── tidb.js │ │ │ │ │ ├── user/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── user.js │ │ │ │ │ ├── userpool/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── userpool.js │ │ │ │ │ ├── vm/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── vm.js │ │ │ │ │ ├── vod/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── vod.js │ │ │ │ │ ├── vpc/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── vpc.js │ │ │ │ │ ├── waf/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── waf.js │ │ │ │ │ ├── xdata/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── xdata.js │ │ │ │ │ ├── ydsms/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── ydsms.js │ │ │ │ │ ├── yunding/ │ │ │ │ │ │ └── v2/ │ │ │ │ │ │ └── yunding.js │ │ │ │ │ ├── yundingdatapush/ │ │ │ │ │ │ └── v1/ │ │ │ │ │ │ └── yundingdatapush.js │ │ │ │ │ └── zfs/ │ │ │ │ │ └── v1/ │ │ │ │ │ └── zfs.js │ │ │ │ └── services/ │ │ │ │ ├── .gitkeep │ │ │ │ ├── ag.js │ │ │ │ ├── all.js │ │ │ │ ├── ams.js │ │ │ │ ├── antipro.js │ │ │ │ ├── apigateway.js │ │ │ │ ├── asset.js │ │ │ │ ├── assistant.js │ │ │ │ ├── autotaskpolicy.js │ │ │ │ ├── baseanti.js │ │ │ │ ├── bastion.js │ │ │ │ ├── bgw.js │ │ │ │ ├── billing.js │ │ │ │ ├── bri.js │ │ │ │ ├── captcha.js │ │ │ │ ├── cdn.js │ │ │ │ ├── censor.js │ │ │ │ ├── clickhouse.js │ │ │ │ ├── cloudauth.js │ │ │ │ ├── clouddnsservice.js │ │ │ │ ├── cloudsign.js │ │ │ │ ├── compile.js │ │ │ │ ├── containerregistry.js │ │ │ │ ├── cp.js │ │ │ │ ├── cps.js │ │ │ │ ├── cr.js │ │ │ │ ├── datastar.js │ │ │ │ ├── dbaudit.js │ │ │ │ ├── dbs.js │ │ │ │ ├── dcap.js │ │ │ │ ├── deploy.js │ │ │ │ ├── detection.js │ │ │ │ ├── dh.js │ │ │ │ ├── disk.js │ │ │ │ ├── dms.js │ │ │ │ ├── domain.js │ │ │ │ ├── domainservice.js │ │ │ │ ├── dts.js │ │ │ │ ├── edcps.js │ │ │ │ ├── eid.js │ │ │ │ ├── elite.js │ │ │ │ ├── es.js │ │ │ │ ├── fc.js │ │ │ │ ├── flowlog.js │ │ │ │ ├── function.js │ │ │ │ ├── gcs.js │ │ │ │ ├── httpdns.js │ │ │ │ ├── hufu.js │ │ │ │ ├── iam.js │ │ │ │ ├── ias.js │ │ │ │ ├── industrydata.js │ │ │ │ ├── instancevoucher.js │ │ │ │ ├── invoice.js │ │ │ │ ├── iotcard.js │ │ │ │ ├── iotcloudgateway.js │ │ │ │ ├── iotcore.js │ │ │ │ ├── iotedge.js │ │ │ │ ├── iothub.js │ │ │ │ ├── iotlink.js │ │ │ │ ├── ipanti.js │ │ │ │ ├── iv.js │ │ │ │ ├── jcq.js │ │ │ │ ├── jdccs.js │ │ │ │ ├── jdfusion.js │ │ │ │ ├── jdro.js │ │ │ │ ├── jdw.js │ │ │ │ ├── jdworkspace.js │ │ │ │ ├── jke.js │ │ │ │ ├── jmr.js │ │ │ │ ├── kafka.js │ │ │ │ ├── kms.js │ │ │ │ ├── kubernetes.js │ │ │ │ ├── lavm.js │ │ │ │ ├── lb.js │ │ │ │ ├── live.js │ │ │ │ ├── logs.js │ │ │ │ ├── mongodb.js │ │ │ │ ├── monitor.js │ │ │ │ ├── monitorcm.js │ │ │ │ ├── mps.js │ │ │ │ ├── nativecontainer.js │ │ │ │ ├── nc.js │ │ │ │ ├── openjrtc.js │ │ │ │ ├── order.js │ │ │ │ ├── oss.js │ │ │ │ ├── ossopenapi.js │ │ │ │ ├── partner.js │ │ │ │ ├── pipeline.js │ │ │ │ ├── pod.js │ │ │ │ ├── portal.js │ │ │ │ ├── privatezone.js │ │ │ │ ├── quota.js │ │ │ │ ├── rds.js │ │ │ │ ├── rdts.js │ │ │ │ ├── redis.js │ │ │ │ ├── refund.js │ │ │ │ ├── renewal.js │ │ │ │ ├── reservedinstance.js │ │ │ │ ├── resourcetag.js │ │ │ │ ├── rms.js │ │ │ │ ├── smartdba.js │ │ │ │ ├── sms.js │ │ │ │ ├── sop.js │ │ │ │ ├── ssl.js │ │ │ │ ├── starshield.js │ │ │ │ ├── streambus.js │ │ │ │ ├── streamcomputer.js │ │ │ │ ├── sts.js │ │ │ │ ├── tidb.js │ │ │ │ ├── user.js │ │ │ │ ├── userpool.js │ │ │ │ ├── vm.js │ │ │ │ ├── vod.js │ │ │ │ ├── vpc.js │ │ │ │ ├── vqd.js │ │ │ │ ├── waf.js │ │ │ │ ├── xdata.js │ │ │ │ ├── ydsms.js │ │ │ │ ├── yunding.js │ │ │ │ ├── yundingdatapush.js │ │ │ │ └── zfs.js │ │ │ ├── test/ │ │ │ │ ├── callStyle.spec.js │ │ │ │ ├── config/ │ │ │ │ │ └── default.yml │ │ │ │ ├── config.spec.js │ │ │ │ └── services/ │ │ │ │ ├── monitor.spec.js │ │ │ │ ├── nc.spec.js │ │ │ │ ├── oss.spec.js │ │ │ │ └── vm.spec.js │ │ │ └── tsconfig.json │ │ ├── lib-k8s/ │ │ │ ├── .eslintrc │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .prettierrc │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── fix-esm-import-paths.js │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── index.ts │ │ │ │ └── lib/ │ │ │ │ └── k8s.client.ts │ │ │ └── tsconfig.json │ │ ├── lib-server/ │ │ │ ├── .dockerignore │ │ │ ├── .editorconfig │ │ │ ├── .eslintrc.json │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .prettierrc │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── README_zhCN.md │ │ │ ├── jest.config.js │ │ │ ├── ormconfig.json │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── basic/ │ │ │ │ │ ├── base-controller.ts │ │ │ │ │ ├── base-service.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── crud-controller.ts │ │ │ │ │ ├── enum-item.ts │ │ │ │ │ ├── exception/ │ │ │ │ │ │ ├── auth-exception.ts │ │ │ │ │ │ ├── base-exception.ts │ │ │ │ │ │ ├── code-error-exception.ts │ │ │ │ │ │ ├── common-exception.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── login-error-exception.ts │ │ │ │ │ │ ├── not-found-exception.ts │ │ │ │ │ │ ├── param-exception.ts │ │ │ │ │ │ ├── permission-exception.ts │ │ │ │ │ │ ├── preview-exception.ts │ │ │ │ │ │ ├── site-off-exception.ts │ │ │ │ │ │ ├── validation-exception.ts │ │ │ │ │ │ └── vip-exception.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── result.ts │ │ │ │ ├── configuration.ts │ │ │ │ ├── index.ts │ │ │ │ ├── system/ │ │ │ │ │ ├── basic/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── service/ │ │ │ │ │ │ ├── encryptor.ts │ │ │ │ │ │ ├── file-service.ts │ │ │ │ │ │ └── plus-service.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── settings/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── sys-settings.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── service/ │ │ │ │ │ ├── models.ts │ │ │ │ │ └── sys-settings-service.ts │ │ │ │ └── user/ │ │ │ │ ├── access/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── service/ │ │ │ │ │ ├── access-getter.ts │ │ │ │ │ ├── access-service.ts │ │ │ │ │ ├── access-sys-getter.ts │ │ │ │ │ └── encrypt-service.ts │ │ │ │ └── index.ts │ │ │ ├── test.md │ │ │ └── tsconfig.json │ │ └── midway-flyway-js/ │ │ ├── .dockerignore │ │ ├── .editorconfig │ │ ├── .eslintrc.json │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .prettierrc │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── README_zhCN.md │ │ ├── jest.config.js │ │ ├── ormconfig.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── configuration.ts │ │ │ ├── entity.ts │ │ │ ├── flyway.ts │ │ │ └── index.ts │ │ ├── test/ │ │ │ ├── db/ │ │ │ │ ├── baseline/ │ │ │ │ │ ├── v0__baseline.sql │ │ │ │ │ └── v1__init.sql │ │ │ │ ├── blank/ │ │ │ │ │ └── v1__blank.sql │ │ │ │ ├── hash-check/ │ │ │ │ │ ├── v1__init.sql │ │ │ │ │ ├── v2__add_user.sql │ │ │ │ │ └── v3__add_role.sql │ │ │ │ ├── migration/ │ │ │ │ │ ├── v1__init.sql │ │ │ │ │ ├── v2__add_user.sql │ │ │ │ │ └── v3__add_role.sql │ │ │ │ ├── semicolon/ │ │ │ │ │ └── v1__init.sql │ │ │ │ └── split/ │ │ │ │ └── split.sql │ │ │ ├── flyway.test.js │ │ │ └── flyway.test.ts │ │ ├── test.md │ │ └── tsconfig.json │ ├── plugins/ │ │ ├── plugin-cert/ │ │ │ ├── .eslintrc │ │ │ ├── .gitignore │ │ │ ├── .mocharc.json │ │ │ ├── .npmignore │ │ │ ├── .npmrc │ │ │ ├── .prettierrc │ │ │ ├── CHANGELOG.md │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── package.json │ │ │ ├── src/ │ │ │ │ ├── access/ │ │ │ │ │ ├── eab-access.ts │ │ │ │ │ ├── google-access.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── dns-provider/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── decorator.ts │ │ │ │ │ ├── domain-parser.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── registry.ts │ │ │ │ ├── index.ts │ │ │ │ ├── libs/ │ │ │ │ │ └── google.ts │ │ │ │ └── plugin/ │ │ │ │ ├── cert-plugin/ │ │ │ │ │ ├── acme.ts │ │ │ │ │ ├── base-convert.ts │ │ │ │ │ ├── base.ts │ │ │ │ │ ├── cert-reader.ts │ │ │ │ │ ├── convert.ts │ │ │ │ │ ├── custom/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── lego/ │ │ │ │ │ ├── dns.ts │ │ │ │ │ └── index.ts │ │ │ │ └── index.ts │ │ │ ├── test/ │ │ │ │ └── cert-plugin.test.mjs │ │ │ └── tsconfig.json │ │ └── plugin-lib/ │ │ ├── .eslintrc │ │ ├── .gitignore │ │ ├── .mocharc.json │ │ ├── .npmignore │ │ ├── .npmrc │ │ ├── .prettierrc │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── aliyun/ │ │ │ │ ├── access/ │ │ │ │ │ ├── alioss-access.ts │ │ │ │ │ ├── aliyun-access.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ └── lib/ │ │ │ │ ├── base-client.ts │ │ │ │ ├── index.ts │ │ │ │ ├── oss-client.ts │ │ │ │ └── ssl-client.ts │ │ │ ├── common/ │ │ │ │ ├── index.ts │ │ │ │ └── util.ts │ │ │ ├── ctyun/ │ │ │ │ ├── access/ │ │ │ │ │ └── ctyun-access.ts │ │ │ │ └── index.ts │ │ │ ├── ftp/ │ │ │ │ ├── access.ts │ │ │ │ ├── client.ts │ │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── oss/ │ │ │ │ ├── api.ts │ │ │ │ ├── factory.ts │ │ │ │ ├── impls/ │ │ │ │ │ ├── alioss.ts │ │ │ │ │ ├── ftp.ts │ │ │ │ │ ├── qiniuoss.ts │ │ │ │ │ ├── s3.ts │ │ │ │ │ ├── sftp.ts │ │ │ │ │ ├── ssh.ts │ │ │ │ │ └── tencentcos.ts │ │ │ │ └── index.ts │ │ │ ├── qiniu/ │ │ │ │ ├── access-oss.ts │ │ │ │ ├── access.ts │ │ │ │ ├── index.ts │ │ │ │ └── lib/ │ │ │ │ └── sdk.ts │ │ │ ├── s3/ │ │ │ │ ├── access.ts │ │ │ │ └── index.ts │ │ │ ├── ssh/ │ │ │ │ ├── index.ts │ │ │ │ ├── sftp-access.ts │ │ │ │ ├── ssh-access.ts │ │ │ │ └── ssh.ts │ │ │ └── tencent/ │ │ │ ├── access-cos.ts │ │ │ ├── access.ts │ │ │ ├── index.ts │ │ │ └── lib/ │ │ │ ├── cos-client.ts │ │ │ ├── index.ts │ │ │ └── ssl-client.ts │ │ └── tsconfig.json │ └── ui/ │ ├── .dockerignore │ ├── Dockerfile │ ├── agent/ │ │ └── Dockerfile │ ├── certd-client/ │ │ ├── .browserslistrc │ │ ├── .eslintignore │ │ ├── .eslintrc.js │ │ ├── .github/ │ │ │ ├── ISSUE_TEMPLATE.md │ │ │ └── workflows/ │ │ │ └── sync-to-gitee.yml │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .npmrc │ │ ├── .prettierrc │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build/ │ │ │ ├── modify-vars.ts │ │ │ ├── tailwind-config/ │ │ │ │ ├── index.mjs │ │ │ │ ├── plugins/ │ │ │ │ │ └── entry.mjs │ │ │ │ └── postcss.config.mjs │ │ │ ├── theme-colors.ts │ │ │ └── theme-plugin.ts │ │ ├── index.html │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── public/ │ │ │ ├── site-import-template.csv │ │ │ └── static/ │ │ │ ├── icons/ │ │ │ │ ├── demo.css │ │ │ │ ├── demo_index.html │ │ │ │ ├── iconfont.css │ │ │ │ ├── iconfont.js │ │ │ │ └── iconfont.json │ │ │ └── index.css │ │ ├── src/ │ │ │ ├── App.vue │ │ │ ├── api/ │ │ │ │ ├── service.ts │ │ │ │ └── tools.ts │ │ │ ├── components/ │ │ │ │ ├── ai/ │ │ │ │ │ └── index.vue │ │ │ │ ├── code-editor/ │ │ │ │ │ ├── async-import.ts │ │ │ │ │ ├── import-works.ts │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── validators.ts │ │ │ │ │ ├── workers.ts │ │ │ │ │ └── yaml.worker.ts │ │ │ │ ├── container.vue │ │ │ │ ├── cron-editor/ │ │ │ │ │ ├── index.vue │ │ │ │ │ └── utils.ts │ │ │ │ ├── editable.vue │ │ │ │ ├── email-selector/ │ │ │ │ │ ├── api.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── expires-time-text.vue │ │ │ │ ├── file-input.vue │ │ │ │ ├── fold-box.vue │ │ │ │ ├── highlight/ │ │ │ │ │ ├── index.vue │ │ │ │ │ └── libs/ │ │ │ │ │ └── htmlFormat.js │ │ │ │ ├── highlight-styles/ │ │ │ │ │ ├── agate.css │ │ │ │ │ ├── androidstudio.css │ │ │ │ │ ├── arduino-light.css │ │ │ │ │ ├── arta.css │ │ │ │ │ ├── ascetic.css │ │ │ │ │ ├── atelier-cave-dark.css │ │ │ │ │ ├── atelier-cave-light.css │ │ │ │ │ ├── atelier-dune-dark.css │ │ │ │ │ ├── atelier-dune-light.css │ │ │ │ │ ├── atelier-estuary-dark.css │ │ │ │ │ ├── atelier-estuary-light.css │ │ │ │ │ ├── atelier-forest-dark.css │ │ │ │ │ ├── atelier-forest-light.css │ │ │ │ │ ├── atelier-heath-dark.css │ │ │ │ │ ├── atelier-heath-light.css │ │ │ │ │ ├── atelier-lakeside-dark.css │ │ │ │ │ ├── atelier-lakeside-light.css │ │ │ │ │ ├── atelier-plateau-dark.css │ │ │ │ │ ├── atelier-plateau-light.css │ │ │ │ │ ├── atelier-savanna-dark.css │ │ │ │ │ ├── atelier-savanna-light.css │ │ │ │ │ ├── atelier-seaside-dark.css │ │ │ │ │ ├── atelier-seaside-light.css │ │ │ │ │ ├── atelier-sulphurpool-dark.css │ │ │ │ │ ├── atelier-sulphurpool-light.css │ │ │ │ │ ├── atom-one-dark.css │ │ │ │ │ ├── atom-one-light.css │ │ │ │ │ ├── brown-paper.css │ │ │ │ │ ├── codepen-embed.css │ │ │ │ │ ├── color-brewer.css │ │ │ │ │ ├── darcula.css │ │ │ │ │ ├── dark.css │ │ │ │ │ ├── darkula.css │ │ │ │ │ ├── default.css │ │ │ │ │ ├── docco.css │ │ │ │ │ ├── dracula.css │ │ │ │ │ ├── far.css │ │ │ │ │ ├── foundation.css │ │ │ │ │ ├── github-gist.css │ │ │ │ │ ├── github.css │ │ │ │ │ ├── googlecode.css │ │ │ │ │ ├── grayscale.css │ │ │ │ │ ├── gruvbox-dark.css │ │ │ │ │ ├── gruvbox-light.css │ │ │ │ │ ├── hopscotch.css │ │ │ │ │ ├── hybrid.css │ │ │ │ │ ├── idea.css │ │ │ │ │ ├── ir-black.css │ │ │ │ │ ├── kimbie.dark.css │ │ │ │ │ ├── kimbie.light.css │ │ │ │ │ ├── magula.css │ │ │ │ │ ├── mono-blue.css │ │ │ │ │ ├── monokai-sublime.css │ │ │ │ │ ├── monokai.css │ │ │ │ │ ├── obsidian.css │ │ │ │ │ ├── ocean.css │ │ │ │ │ ├── paraiso-dark.css │ │ │ │ │ ├── paraiso-light.css │ │ │ │ │ ├── pojoaque.css │ │ │ │ │ ├── purebasic.css │ │ │ │ │ ├── qtcreator_dark.css │ │ │ │ │ ├── qtcreator_light.css │ │ │ │ │ ├── railscasts.css │ │ │ │ │ ├── rainbow.css │ │ │ │ │ ├── routeros.css │ │ │ │ │ ├── school-book.css │ │ │ │ │ ├── solarized-dark.css │ │ │ │ │ ├── solarized-light.css │ │ │ │ │ ├── sunburst.css │ │ │ │ │ ├── tomorrow-night-blue.css │ │ │ │ │ ├── tomorrow-night-bright.css │ │ │ │ │ ├── tomorrow-night-eighties.css │ │ │ │ │ ├── tomorrow-night.css │ │ │ │ │ ├── tomorrow.css │ │ │ │ │ ├── vs.css │ │ │ │ │ ├── vs2015.css │ │ │ │ │ ├── xcode.css │ │ │ │ │ ├── xt256.css │ │ │ │ │ └── zenburn.css │ │ │ │ ├── icon-select.vue │ │ │ │ ├── index.ts │ │ │ │ ├── loading-button.vue │ │ │ │ ├── pem-input.vue │ │ │ │ ├── plugins/ │ │ │ │ │ ├── cert/ │ │ │ │ │ │ ├── dns-provider-selector/ │ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── domains-verify-plan-editor/ │ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ │ ├── cname-record-info.vue │ │ │ │ │ │ │ ├── cname-tip.vue │ │ │ │ │ │ │ ├── cname-verify-plan.vue │ │ │ │ │ │ │ ├── http-verify-plan.vue │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ ├── type.ts │ │ │ │ │ │ │ └── validator.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── api-test.vue │ │ │ │ │ │ ├── cert-domains-getter.vue │ │ │ │ │ │ ├── input-password.vue │ │ │ │ │ │ ├── output-selector/ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── remote-input.vue │ │ │ │ │ │ └── remote-select.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── lib/ │ │ │ │ │ │ ├── dicts.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── synology/ │ │ │ │ │ └── device-id-getter.vue │ │ │ │ ├── tutorial/ │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── simple-steps.vue │ │ │ │ │ └── tutorial-steps.vue │ │ │ │ ├── valid-time-format.vue │ │ │ │ └── vip-button/ │ │ │ │ ├── api.ts │ │ │ │ ├── directive.ts │ │ │ │ ├── index.vue │ │ │ │ └── install.ts │ │ │ ├── constants/ │ │ │ │ └── index.ts │ │ │ ├── layout/ │ │ │ │ ├── components/ │ │ │ │ │ ├── footer/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── locale/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── index.less │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── index1.tsx │ │ │ │ │ ├── source-link/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── theme/ │ │ │ │ │ │ ├── color-picker.vue │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── mode-set.vue │ │ │ │ │ └── user-info/ │ │ │ │ │ └── index.vue │ │ │ │ ├── layout-basic.vue │ │ │ │ ├── layout-framework.vue │ │ │ │ ├── layout-outside.vue │ │ │ │ └── layout-pass.vue │ │ │ ├── locales/ │ │ │ │ ├── antdv.ts │ │ │ │ ├── i18n.ts │ │ │ │ ├── index.ts │ │ │ │ ├── langs/ │ │ │ │ │ ├── en-US/ │ │ │ │ │ │ ├── authentication.ts │ │ │ │ │ │ ├── certd.ts │ │ │ │ │ │ ├── common.ts │ │ │ │ │ │ ├── guide.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── preferences.ts │ │ │ │ │ │ ├── tutorial.ts │ │ │ │ │ │ ├── ui.ts │ │ │ │ │ │ └── vip.ts │ │ │ │ │ └── zh-CN/ │ │ │ │ │ ├── authentication.ts │ │ │ │ │ ├── certd.ts │ │ │ │ │ ├── common.ts │ │ │ │ │ ├── guide.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── preferences.ts │ │ │ │ │ ├── tutorial.ts │ │ │ │ │ ├── ui.ts │ │ │ │ │ └── vip.ts │ │ │ │ └── typing.ts │ │ │ ├── main.ts │ │ │ ├── mock/ │ │ │ │ ├── base.ts │ │ │ │ ├── common/ │ │ │ │ │ ├── cascader-data.ts │ │ │ │ │ ├── mock.dict.ts │ │ │ │ │ ├── pca-data-little.ts │ │ │ │ │ └── pcas-data.ts │ │ │ │ └── index.ts │ │ │ ├── plugin/ │ │ │ │ ├── antdv-async/ │ │ │ │ │ ├── index-bak.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── fast-crud/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── iconfont/ │ │ │ │ │ ├── iconfont.js │ │ │ │ │ └── index.ts │ │ │ │ ├── iconify/ │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── permission/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── directive/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── permission.ts │ │ │ │ │ ├── errors.ts │ │ │ │ │ ├── hook.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── store.permission.ts │ │ │ │ │ ├── use-crud-permission.ts │ │ │ │ │ └── util.permission.ts │ │ │ │ └── validator/ │ │ │ │ ├── __tests__/ │ │ │ │ │ └── validator.spec.ts │ │ │ │ └── index.ts │ │ │ ├── router/ │ │ │ │ ├── access.ts │ │ │ │ ├── guard.ts │ │ │ │ ├── index.ts │ │ │ │ ├── resolve.ts │ │ │ │ └── source/ │ │ │ │ ├── framework.ts │ │ │ │ ├── header.ts │ │ │ │ ├── modules/ │ │ │ │ │ ├── about.tsx │ │ │ │ │ ├── certd.ts │ │ │ │ │ └── sys.ts │ │ │ │ └── outside.ts │ │ │ ├── shims-vue.d.ts │ │ │ ├── store/ │ │ │ │ ├── plugin/ │ │ │ │ │ ├── api.plugin.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── settings/ │ │ │ │ │ ├── api.basic.ts │ │ │ │ │ └── index.ts │ │ │ │ └── user/ │ │ │ │ ├── api.user.ts │ │ │ │ └── index.ts │ │ │ ├── style/ │ │ │ │ ├── antdv4.less │ │ │ │ ├── certd.less │ │ │ │ ├── common.less │ │ │ │ ├── fix-windicss.less │ │ │ │ ├── scroll.less │ │ │ │ ├── tailwind.less │ │ │ │ └── transition.less │ │ │ ├── style.css │ │ │ ├── types/ │ │ │ │ └── global.d.ts │ │ │ ├── use/ │ │ │ │ ├── use-modal.ts │ │ │ │ └── use-refrence.tsx │ │ │ ├── utils/ │ │ │ │ ├── index.ts │ │ │ │ ├── util.amount.ts │ │ │ │ ├── util.cache.ts │ │ │ │ ├── util.common.ts │ │ │ │ ├── util.env.ts │ │ │ │ ├── util.hash.ts │ │ │ │ ├── util.mitt.ts │ │ │ │ ├── util.router.ts │ │ │ │ ├── util.site.ts │ │ │ │ ├── util.storage.ts │ │ │ │ └── util.tree.ts │ │ │ ├── vben/ │ │ │ │ ├── access/ │ │ │ │ │ ├── access-control.vue │ │ │ │ │ ├── accessible.ts │ │ │ │ │ ├── directive.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── use-access.ts │ │ │ │ ├── common-ui/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── api-component/ │ │ │ │ │ │ │ ├── api-component.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── captcha/ │ │ │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ │ │ └── useCaptchaPoints.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── point-selection-captcha/ │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ └── point-selection-captcha-card.vue │ │ │ │ │ │ │ ├── slider-captcha/ │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ ├── slider-captcha-action.vue │ │ │ │ │ │ │ │ ├── slider-captcha-bar.vue │ │ │ │ │ │ │ │ └── slider-captcha-content.vue │ │ │ │ │ │ │ ├── slider-rotate-captcha/ │ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── col-page/ │ │ │ │ │ │ │ ├── col-page.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── count-to/ │ │ │ │ │ │ │ ├── count-to.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── ellipsis-text/ │ │ │ │ │ │ │ ├── ellipsis-text.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── icon-picker/ │ │ │ │ │ │ │ ├── icon-picker.vue │ │ │ │ │ │ │ ├── icons.ts │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── json-viewer/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ ├── style.scss │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── loading/ │ │ │ │ │ │ │ ├── directive.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── loading.vue │ │ │ │ │ │ │ └── spinner.vue │ │ │ │ │ │ ├── page/ │ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ │ └── page.test.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── page.vue │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── resize/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── resize.vue │ │ │ │ │ │ └── tippy/ │ │ │ │ │ │ ├── directive.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ui/ │ │ │ │ │ ├── about/ │ │ │ │ │ │ ├── about.ts │ │ │ │ │ │ ├── about.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── authentication/ │ │ │ │ │ │ ├── auth-title.vue │ │ │ │ │ │ ├── code-login.vue │ │ │ │ │ │ ├── forget-password.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── login-expired-modal.vue │ │ │ │ │ │ ├── login.vue │ │ │ │ │ │ ├── qrcode-login.vue │ │ │ │ │ │ ├── register.vue │ │ │ │ │ │ ├── third-party-login.vue │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── analysis/ │ │ │ │ │ │ │ ├── analysis-chart-card.vue │ │ │ │ │ │ │ ├── analysis-charts-tabs.vue │ │ │ │ │ │ │ ├── analysis-overview.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── typing.ts │ │ │ │ │ │ └── workbench/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── workbench-header.vue │ │ │ │ │ │ ├── workbench-project.vue │ │ │ │ │ │ ├── workbench-quick-nav.vue │ │ │ │ │ │ ├── workbench-todo.vue │ │ │ │ │ │ └── workbench-trends.vue │ │ │ │ │ ├── fallback/ │ │ │ │ │ │ ├── fallback.ts │ │ │ │ │ │ ├── fallback.vue │ │ │ │ │ │ ├── icons/ │ │ │ │ │ │ │ ├── icon-403.vue │ │ │ │ │ │ │ ├── icon-404.vue │ │ │ │ │ │ │ ├── icon-500.vue │ │ │ │ │ │ │ ├── icon-coming-soon.vue │ │ │ │ │ │ │ └── icon-offline.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── composables/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── use-sortable.test.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── use-is-mobile.ts │ │ │ │ │ ├── use-layout-style.ts │ │ │ │ │ ├── use-namespace.ts │ │ │ │ │ ├── use-priority-value.ts │ │ │ │ │ ├── use-scroll-lock.ts │ │ │ │ │ ├── use-simple-locale/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── messages.ts │ │ │ │ │ └── use-sortable.ts │ │ │ │ ├── constants/ │ │ │ │ │ ├── core.ts │ │ │ │ │ ├── globals.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── vben.ts │ │ │ │ ├── design/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── global.css │ │ │ │ │ │ ├── nprogress.css │ │ │ │ │ │ ├── transition.css │ │ │ │ │ │ └── ui.css │ │ │ │ │ ├── design-tokens/ │ │ │ │ │ │ ├── dark.css │ │ │ │ │ │ ├── default.css │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── scss-bem/ │ │ │ │ │ ├── bem.scss │ │ │ │ │ └── constants.scss │ │ │ │ ├── form-ui/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ └── form-actions.vue │ │ │ │ │ ├── config.ts │ │ │ │ │ ├── form-api.ts │ │ │ │ │ ├── form-render/ │ │ │ │ │ │ ├── context.ts │ │ │ │ │ │ ├── dependencies.ts │ │ │ │ │ │ ├── expandable.ts │ │ │ │ │ │ ├── form-field.vue │ │ │ │ │ │ ├── form-label.vue │ │ │ │ │ │ ├── form.vue │ │ │ │ │ │ ├── helper.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── use-form-context.ts │ │ │ │ │ ├── use-vben-form.ts │ │ │ │ │ ├── vben-form.vue │ │ │ │ │ └── vben-use-form.vue │ │ │ │ ├── hooks/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── use-app-config.ts │ │ │ │ │ ├── use-content-maximize.ts │ │ │ │ │ ├── use-design-tokens.ts │ │ │ │ │ ├── use-hover-toggle.ts │ │ │ │ │ ├── use-pagination.ts │ │ │ │ │ ├── use-refresh.ts │ │ │ │ │ ├── use-tabs.ts │ │ │ │ │ └── use-watermark.ts │ │ │ │ ├── icons/ │ │ │ │ │ ├── create-icon.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── lucide.ts │ │ │ │ ├── index.ts │ │ │ │ ├── layout-ui/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── layout-content.vue │ │ │ │ │ │ ├── layout-footer.vue │ │ │ │ │ │ ├── layout-header.vue │ │ │ │ │ │ ├── layout-sidebar.vue │ │ │ │ │ │ ├── layout-tabbar.vue │ │ │ │ │ │ └── widgets/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── sidebar-collapse-button.vue │ │ │ │ │ │ └── sidebar-fixed-button.vue │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ └── use-layout.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── vben-layout.ts │ │ │ │ │ └── vben-layout.vue │ │ │ │ ├── layouts/ │ │ │ │ │ ├── basic/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── content/ │ │ │ │ │ │ │ ├── content-spinner.vue │ │ │ │ │ │ │ ├── content.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── use-content-spinner.ts │ │ │ │ │ │ ├── copyright/ │ │ │ │ │ │ │ ├── copyright.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── footer/ │ │ │ │ │ │ │ ├── footer.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── header/ │ │ │ │ │ │ │ ├── header.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── layout.vue │ │ │ │ │ │ ├── menu/ │ │ │ │ │ │ │ ├── extra-menu.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── menu.vue │ │ │ │ │ │ │ ├── mixed-menu.vue │ │ │ │ │ │ │ ├── use-extra-menu.ts │ │ │ │ │ │ │ ├── use-mixed-menu.ts │ │ │ │ │ │ │ └── use-navigation.ts │ │ │ │ │ │ └── tabbar/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── tabbar.vue │ │ │ │ │ │ └── use-tabbar.ts │ │ │ │ │ ├── iframe/ │ │ │ │ │ │ ├── iframe-router-view.vue │ │ │ │ │ │ ├── iframe-view.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── widgets/ │ │ │ │ │ ├── breadcrumb.vue │ │ │ │ │ ├── check-updates/ │ │ │ │ │ │ ├── check-updates.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── color-toggle.vue │ │ │ │ │ ├── global-search/ │ │ │ │ │ │ ├── global-search.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── search-panel.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── language-toggle.vue │ │ │ │ │ ├── layout-toggle.vue │ │ │ │ │ ├── lock-screen/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── lock-screen-modal.vue │ │ │ │ │ │ └── lock-screen.vue │ │ │ │ │ ├── notification/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── notification.vue │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── preferences/ │ │ │ │ │ │ ├── blocks/ │ │ │ │ │ │ │ ├── block.vue │ │ │ │ │ │ │ ├── general/ │ │ │ │ │ │ │ │ ├── animation.vue │ │ │ │ │ │ │ │ └── general.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── input-item.vue │ │ │ │ │ │ │ ├── layout/ │ │ │ │ │ │ │ │ ├── breadcrumb.vue │ │ │ │ │ │ │ │ ├── content.vue │ │ │ │ │ │ │ │ ├── copyright.vue │ │ │ │ │ │ │ │ ├── footer.vue │ │ │ │ │ │ │ │ ├── header.vue │ │ │ │ │ │ │ │ ├── layout.vue │ │ │ │ │ │ │ │ ├── navigation.vue │ │ │ │ │ │ │ │ ├── sidebar.vue │ │ │ │ │ │ │ │ ├── tabbar.vue │ │ │ │ │ │ │ │ └── widget.vue │ │ │ │ │ │ │ ├── number-field-item.vue │ │ │ │ │ │ │ ├── select-item.vue │ │ │ │ │ │ │ ├── shortcut-keys/ │ │ │ │ │ │ │ │ └── global.vue │ │ │ │ │ │ │ ├── switch-item.vue │ │ │ │ │ │ │ ├── theme/ │ │ │ │ │ │ │ │ ├── builtin.vue │ │ │ │ │ │ │ │ ├── color-mode.vue │ │ │ │ │ │ │ │ ├── radius.vue │ │ │ │ │ │ │ │ └── theme.vue │ │ │ │ │ │ │ └── toggle-item.vue │ │ │ │ │ │ ├── icons/ │ │ │ │ │ │ │ ├── content-compact.vue │ │ │ │ │ │ │ ├── full-content.vue │ │ │ │ │ │ │ ├── header-mixed-nav.vue │ │ │ │ │ │ │ ├── header-nav.vue │ │ │ │ │ │ │ ├── header-sidebar-nav.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── mixed-nav.vue │ │ │ │ │ │ │ ├── setting.vue │ │ │ │ │ │ │ ├── sidebar-mixed-nav.vue │ │ │ │ │ │ │ └── sidebar-nav.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── preferences-button.vue │ │ │ │ │ │ ├── preferences-drawer.vue │ │ │ │ │ │ ├── preferences.vue │ │ │ │ │ │ └── use-open-preferences.ts │ │ │ │ │ ├── theme-toggle/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── theme-button.vue │ │ │ │ │ │ └── theme-toggle.vue │ │ │ │ │ └── user-dropdown/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── user-dropdown.vue │ │ │ │ ├── menu-ui/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── collapse-transition.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── menu-badge-dot.vue │ │ │ │ │ │ ├── menu-badge.vue │ │ │ │ │ │ ├── menu-item.vue │ │ │ │ │ │ ├── menu.vue │ │ │ │ │ │ ├── normal-menu/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── normal-menu.ts │ │ │ │ │ │ │ └── normal-menu.vue │ │ │ │ │ │ ├── sub-menu-content.vue │ │ │ │ │ │ └── sub-menu.vue │ │ │ │ │ ├── hooks/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── use-menu-context.ts │ │ │ │ │ │ └── use-menu.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── menu.vue │ │ │ │ │ ├── sub-menu.vue │ │ │ │ │ ├── types.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── index.ts │ │ │ │ ├── popup-ui/ │ │ │ │ │ ├── drawer/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── drawer-api.test.ts │ │ │ │ │ │ ├── drawer-api.ts │ │ │ │ │ │ ├── drawer.ts │ │ │ │ │ │ ├── drawer.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── use-drawer.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── modal/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ └── modal-api.test.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── modal-api.ts │ │ │ │ │ ├── modal.ts │ │ │ │ │ ├── modal.vue │ │ │ │ │ ├── use-modal-draggable.ts │ │ │ │ │ └── use-modal.ts │ │ │ │ ├── preferences/ │ │ │ │ │ ├── config.ts │ │ │ │ │ ├── constants.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── preferences.ts │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── update-css-variables.ts │ │ │ │ │ └── use-preferences.ts │ │ │ │ ├── shadcn-ui/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── avatar/ │ │ │ │ │ │ │ ├── avatar.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── back-top/ │ │ │ │ │ │ │ ├── back-top.vue │ │ │ │ │ │ │ ├── backtop.ts │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── use-backtop.ts │ │ │ │ │ │ ├── breadcrumb/ │ │ │ │ │ │ │ ├── breadcrumb-background.vue │ │ │ │ │ │ │ ├── breadcrumb-view.vue │ │ │ │ │ │ │ ├── breadcrumb.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── button/ │ │ │ │ │ │ │ ├── button-group.vue │ │ │ │ │ │ │ ├── button.ts │ │ │ │ │ │ │ ├── button.vue │ │ │ │ │ │ │ ├── check-button-group.vue │ │ │ │ │ │ │ ├── icon-button.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── checkbox/ │ │ │ │ │ │ │ ├── checkbox.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── context-menu/ │ │ │ │ │ │ │ ├── context-menu.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interface.ts │ │ │ │ │ │ ├── count-to-animator/ │ │ │ │ │ │ │ ├── count-to-animator.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── dropdown-menu/ │ │ │ │ │ │ │ ├── dropdown-menu.vue │ │ │ │ │ │ │ ├── dropdown-radio-menu.vue │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── interface.ts │ │ │ │ │ │ ├── expandable-arrow/ │ │ │ │ │ │ │ ├── expandable-arrow.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── full-screen/ │ │ │ │ │ │ │ ├── full-screen.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── hover-card/ │ │ │ │ │ │ │ ├── hover-card.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── icon/ │ │ │ │ │ │ │ ├── icon.vue │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── input-password/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── input-password.vue │ │ │ │ │ │ │ └── password-strength.vue │ │ │ │ │ │ ├── logo/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── logo.vue │ │ │ │ │ │ ├── pin-input/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── input.vue │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── popover/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── popover.vue │ │ │ │ │ │ ├── render-content/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── render-content.vue │ │ │ │ │ │ ├── scrollbar/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── scrollbar.vue │ │ │ │ │ │ ├── segmented/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── segmented.vue │ │ │ │ │ │ │ ├── tabs-indicator.vue │ │ │ │ │ │ │ └── types.ts │ │ │ │ │ │ ├── select/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── select.vue │ │ │ │ │ │ ├── spine-text/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ └── spine-text.vue │ │ │ │ │ │ ├── spinner/ │ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ │ ├── loading.vue │ │ │ │ │ │ │ └── spinner.vue │ │ │ │ │ │ └── tooltip/ │ │ │ │ │ │ ├── help-tooltip.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── tooltip.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ └── ui/ │ │ │ │ │ ├── accordion/ │ │ │ │ │ │ ├── Accordion.vue │ │ │ │ │ │ ├── AccordionContent.vue │ │ │ │ │ │ ├── AccordionItem.vue │ │ │ │ │ │ ├── AccordionTrigger.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── avatar/ │ │ │ │ │ │ ├── Avatar.vue │ │ │ │ │ │ ├── AvatarFallback.vue │ │ │ │ │ │ ├── AvatarImage.vue │ │ │ │ │ │ ├── avatar.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── badge/ │ │ │ │ │ │ ├── Badge.vue │ │ │ │ │ │ ├── badge.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── breadcrumb/ │ │ │ │ │ │ ├── Breadcrumb.vue │ │ │ │ │ │ ├── BreadcrumbEllipsis.vue │ │ │ │ │ │ ├── BreadcrumbItem.vue │ │ │ │ │ │ ├── BreadcrumbLink.vue │ │ │ │ │ │ ├── BreadcrumbList.vue │ │ │ │ │ │ ├── BreadcrumbPage.vue │ │ │ │ │ │ ├── BreadcrumbSeparator.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── button/ │ │ │ │ │ │ ├── Button.vue │ │ │ │ │ │ ├── button.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── card/ │ │ │ │ │ │ ├── Card.vue │ │ │ │ │ │ ├── CardContent.vue │ │ │ │ │ │ ├── CardDescription.vue │ │ │ │ │ │ ├── CardFooter.vue │ │ │ │ │ │ ├── CardHeader.vue │ │ │ │ │ │ ├── CardTitle.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── checkbox/ │ │ │ │ │ │ ├── Checkbox.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── context-menu/ │ │ │ │ │ │ ├── ContextMenu.vue │ │ │ │ │ │ ├── ContextMenuCheckboxItem.vue │ │ │ │ │ │ ├── ContextMenuContent.vue │ │ │ │ │ │ ├── ContextMenuGroup.vue │ │ │ │ │ │ ├── ContextMenuItem.vue │ │ │ │ │ │ ├── ContextMenuLabel.vue │ │ │ │ │ │ ├── ContextMenuPortal.vue │ │ │ │ │ │ ├── ContextMenuRadioGroup.vue │ │ │ │ │ │ ├── ContextMenuRadioItem.vue │ │ │ │ │ │ ├── ContextMenuSeparator.vue │ │ │ │ │ │ ├── ContextMenuShortcut.vue │ │ │ │ │ │ ├── ContextMenuSub.vue │ │ │ │ │ │ ├── ContextMenuSubContent.vue │ │ │ │ │ │ ├── ContextMenuSubTrigger.vue │ │ │ │ │ │ ├── ContextMenuTrigger.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dialog/ │ │ │ │ │ │ ├── Dialog.vue │ │ │ │ │ │ ├── DialogClose.vue │ │ │ │ │ │ ├── DialogContent.vue │ │ │ │ │ │ ├── DialogDescription.vue │ │ │ │ │ │ ├── DialogFooter.vue │ │ │ │ │ │ ├── DialogHeader.vue │ │ │ │ │ │ ├── DialogOverlay.vue │ │ │ │ │ │ ├── DialogScrollContent.vue │ │ │ │ │ │ ├── DialogTitle.vue │ │ │ │ │ │ ├── DialogTrigger.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dropdown-menu/ │ │ │ │ │ │ ├── DropdownMenu.vue │ │ │ │ │ │ ├── DropdownMenuCheckboxItem.vue │ │ │ │ │ │ ├── DropdownMenuContent.vue │ │ │ │ │ │ ├── DropdownMenuGroup.vue │ │ │ │ │ │ ├── DropdownMenuItem.vue │ │ │ │ │ │ ├── DropdownMenuLabel.vue │ │ │ │ │ │ ├── DropdownMenuRadioGroup.vue │ │ │ │ │ │ ├── DropdownMenuRadioItem.vue │ │ │ │ │ │ ├── DropdownMenuSeparator.vue │ │ │ │ │ │ ├── DropdownMenuShortcut.vue │ │ │ │ │ │ ├── DropdownMenuSub.vue │ │ │ │ │ │ ├── DropdownMenuSubContent.vue │ │ │ │ │ │ ├── DropdownMenuSubTrigger.vue │ │ │ │ │ │ ├── DropdownMenuTrigger.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── form/ │ │ │ │ │ │ ├── FormControl.vue │ │ │ │ │ │ ├── FormDescription.vue │ │ │ │ │ │ ├── FormItem.vue │ │ │ │ │ │ ├── FormLabel.vue │ │ │ │ │ │ ├── FormMessage.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── injectionKeys.ts │ │ │ │ │ │ └── useFormField.ts │ │ │ │ │ ├── hover-card/ │ │ │ │ │ │ ├── HoverCard.vue │ │ │ │ │ │ ├── HoverCardContent.vue │ │ │ │ │ │ ├── HoverCardTrigger.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── input/ │ │ │ │ │ │ ├── Input.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── label/ │ │ │ │ │ │ ├── Label.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── number-field/ │ │ │ │ │ │ ├── NumberField.vue │ │ │ │ │ │ ├── NumberFieldContent.vue │ │ │ │ │ │ ├── NumberFieldDecrement.vue │ │ │ │ │ │ ├── NumberFieldIncrement.vue │ │ │ │ │ │ ├── NumberFieldInput.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── pagination/ │ │ │ │ │ │ ├── PaginationEllipsis.vue │ │ │ │ │ │ ├── PaginationFirst.vue │ │ │ │ │ │ ├── PaginationLast.vue │ │ │ │ │ │ ├── PaginationNext.vue │ │ │ │ │ │ ├── PaginationPrev.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── pin-input/ │ │ │ │ │ │ ├── PinInput.vue │ │ │ │ │ │ ├── PinInputGroup.vue │ │ │ │ │ │ ├── PinInputInput.vue │ │ │ │ │ │ ├── PinInputSeparator.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── popover/ │ │ │ │ │ │ ├── Popover.vue │ │ │ │ │ │ ├── PopoverContent.vue │ │ │ │ │ │ ├── PopoverTrigger.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── radio-group/ │ │ │ │ │ │ ├── RadioGroup.vue │ │ │ │ │ │ ├── RadioGroupItem.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── resizable/ │ │ │ │ │ │ ├── ResizableHandle.vue │ │ │ │ │ │ ├── ResizablePanelGroup.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── scroll-area/ │ │ │ │ │ │ ├── ScrollArea.vue │ │ │ │ │ │ ├── ScrollBar.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── select/ │ │ │ │ │ │ ├── Select.vue │ │ │ │ │ │ ├── SelectContent.vue │ │ │ │ │ │ ├── SelectGroup.vue │ │ │ │ │ │ ├── SelectItem.vue │ │ │ │ │ │ ├── SelectItemText.vue │ │ │ │ │ │ ├── SelectLabel.vue │ │ │ │ │ │ ├── SelectScrollDownButton.vue │ │ │ │ │ │ ├── SelectScrollUpButton.vue │ │ │ │ │ │ ├── SelectSeparator.vue │ │ │ │ │ │ ├── SelectTrigger.vue │ │ │ │ │ │ ├── SelectValue.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── separator/ │ │ │ │ │ │ ├── Separator.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── sheet/ │ │ │ │ │ │ ├── Sheet.vue │ │ │ │ │ │ ├── SheetClose.vue │ │ │ │ │ │ ├── SheetContent.vue │ │ │ │ │ │ ├── SheetDescription.vue │ │ │ │ │ │ ├── SheetFooter.vue │ │ │ │ │ │ ├── SheetHeader.vue │ │ │ │ │ │ ├── SheetOverlay.vue │ │ │ │ │ │ ├── SheetTitle.vue │ │ │ │ │ │ ├── SheetTrigger.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── sheet.ts │ │ │ │ │ ├── switch/ │ │ │ │ │ │ ├── Switch.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ ├── Tabs.vue │ │ │ │ │ │ ├── TabsContent.vue │ │ │ │ │ │ ├── TabsList.vue │ │ │ │ │ │ ├── TabsTrigger.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── textarea/ │ │ │ │ │ │ ├── Textarea.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── toggle/ │ │ │ │ │ │ ├── Toggle.vue │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── toggle.ts │ │ │ │ │ ├── toggle-group/ │ │ │ │ │ │ ├── ToggleGroup.vue │ │ │ │ │ │ ├── ToggleGroupItem.vue │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── tooltip/ │ │ │ │ │ ├── Tooltip.vue │ │ │ │ │ ├── TooltipContent.vue │ │ │ │ │ ├── TooltipProvider.vue │ │ │ │ │ ├── TooltipTrigger.vue │ │ │ │ │ └── index.ts │ │ │ │ ├── shared/ │ │ │ │ │ ├── cache/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── storage-manager.test.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── storage-manager.ts │ │ │ │ │ │ └── types.ts │ │ │ │ │ ├── color/ │ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ │ └── convert.test.ts │ │ │ │ │ │ ├── color.ts │ │ │ │ │ │ ├── convert.ts │ │ │ │ │ │ ├── generator.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── constants/ │ │ │ │ │ │ ├── globals.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── vben.ts │ │ │ │ │ ├── global-state.ts │ │ │ │ │ ├── store.ts │ │ │ │ │ └── utils/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── diff.test.ts │ │ │ │ │ │ ├── dom.test.ts │ │ │ │ │ │ ├── inference.test.ts │ │ │ │ │ │ ├── letter.test.ts │ │ │ │ │ │ ├── state-handler.test.ts │ │ │ │ │ │ ├── tree.test.ts │ │ │ │ │ │ ├── unique.test.ts │ │ │ │ │ │ ├── update-css-variables.test.ts │ │ │ │ │ │ ├── util.test.ts │ │ │ │ │ │ └── window.test.ts │ │ │ │ │ ├── cn.ts │ │ │ │ │ ├── date.ts │ │ │ │ │ ├── diff.ts │ │ │ │ │ ├── dom.ts │ │ │ │ │ ├── download.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── inference.ts │ │ │ │ │ ├── letter.ts │ │ │ │ │ ├── merge.ts │ │ │ │ │ ├── nprogress.ts │ │ │ │ │ ├── state-handler.ts │ │ │ │ │ ├── to.ts │ │ │ │ │ ├── tree.ts │ │ │ │ │ ├── unique.ts │ │ │ │ │ ├── update-css-variables.ts │ │ │ │ │ ├── util.ts │ │ │ │ │ └── window.ts │ │ │ │ ├── stores/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── modules/ │ │ │ │ │ │ ├── access.test.ts │ │ │ │ │ │ ├── access.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── lock.test.ts │ │ │ │ │ │ ├── lock.ts │ │ │ │ │ │ ├── tabbar.test.ts │ │ │ │ │ │ ├── tabbar.ts │ │ │ │ │ │ ├── user.test.ts │ │ │ │ │ │ └── user.ts │ │ │ │ │ └── setup.ts │ │ │ │ ├── styles/ │ │ │ │ │ ├── antd/ │ │ │ │ │ │ └── index.css │ │ │ │ │ ├── ele/ │ │ │ │ │ │ └── index.css │ │ │ │ │ ├── global/ │ │ │ │ │ │ └── index.scss │ │ │ │ │ ├── index.ts │ │ │ │ │ └── naive/ │ │ │ │ │ └── index.css │ │ │ │ ├── tabs-ui/ │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ │ └── tabs.vue │ │ │ │ │ │ ├── tabs-chrome/ │ │ │ │ │ │ │ └── tabs.vue │ │ │ │ │ │ └── widgets/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── tool-more.vue │ │ │ │ │ │ └── tool-screen.vue │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── tabs-view.vue │ │ │ │ │ ├── types.ts │ │ │ │ │ ├── use-tabs-drag.ts │ │ │ │ │ └── use-tabs-view-scroll.ts │ │ │ │ ├── types/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── user.ts │ │ │ │ ├── typings/ │ │ │ │ │ ├── app.d.ts │ │ │ │ │ ├── basic.d.ts │ │ │ │ │ ├── helper.d.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── menu-record.ts │ │ │ │ │ ├── tabs.ts │ │ │ │ │ └── vue-router.d.ts │ │ │ │ └── utils/ │ │ │ │ ├── helpers/ │ │ │ │ │ ├── __tests__/ │ │ │ │ │ │ ├── find-menu-by-path.test.ts │ │ │ │ │ │ ├── generate-menus.test.ts │ │ │ │ │ │ ├── generate-routes-frontend.test.ts │ │ │ │ │ │ └── merge-route-modules.test.ts │ │ │ │ │ ├── find-menu-by-path.ts │ │ │ │ │ ├── generate-menus.ts │ │ │ │ │ ├── generate-routes-backend.ts │ │ │ │ │ ├── generate-routes-frontend.ts │ │ │ │ │ ├── get-popup-container.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── merge-route-modules.ts │ │ │ │ │ ├── reset-routes.ts │ │ │ │ │ └── unmount-global-loading.ts │ │ │ │ └── index.ts │ │ │ └── views/ │ │ │ ├── certd/ │ │ │ │ ├── access/ │ │ │ │ │ ├── access-selector/ │ │ │ │ │ │ ├── access/ │ │ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── secret-plain-getter.vue │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── common.tsx │ │ │ │ │ ├── crud.tsx │ │ │ │ │ └── index.vue │ │ │ │ ├── cert/ │ │ │ │ │ └── domain/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── crud.tsx │ │ │ │ │ └── index.vue │ │ │ │ ├── cname/ │ │ │ │ │ └── record/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── crud.tsx │ │ │ │ │ └── index.vue │ │ │ │ ├── history/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── crud.tsx │ │ │ │ │ └── index.vue │ │ │ │ ├── mine/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── change-password-button.vue │ │ │ │ │ ├── security/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── use.tsx │ │ │ │ │ └── user-profile.vue │ │ │ │ ├── monitor/ │ │ │ │ │ ├── cert/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── site/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── crud.tsx │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── ip/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── use.tsx │ │ │ │ │ ├── setting/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ └── index.vue │ │ │ │ │ └── use.tsx │ │ │ │ ├── notification/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── common.tsx │ │ │ │ │ ├── crud.tsx │ │ │ │ │ ├── index.vue │ │ │ │ │ └── notification-selector/ │ │ │ │ │ ├── index.vue │ │ │ │ │ └── modal/ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ └── index.vue │ │ │ │ ├── open/ │ │ │ │ │ └── openkey/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── crud.tsx │ │ │ │ │ └── index.vue │ │ │ │ ├── payment/ │ │ │ │ │ ├── api.ts │ │ │ │ │ └── return.vue │ │ │ │ ├── pipeline/ │ │ │ │ │ ├── api.history.ts │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── cert-upload/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── use.tsx │ │ │ │ │ ├── cert-view.vue │ │ │ │ │ ├── certd-form/ │ │ │ │ │ │ └── use.tsx │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── change-group.vue │ │ │ │ │ │ ├── change-notification.vue │ │ │ │ │ │ └── change-trigger.vue │ │ │ │ │ ├── crud.tsx │ │ │ │ │ ├── dash-roll.readme │ │ │ │ │ ├── detail.vue │ │ │ │ │ ├── group/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ │ ├── group-selector.vue │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ ├── pipeline/ │ │ │ │ │ │ ├── component/ │ │ │ │ │ │ │ ├── history-timeline-item.vue │ │ │ │ │ │ │ ├── notification-form/ │ │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ │ └── pi-notification-form-email.vue │ │ │ │ │ │ │ ├── shortcut/ │ │ │ │ │ │ │ │ ├── task-shortcut.vue │ │ │ │ │ │ │ │ └── task-shortcuts.vue │ │ │ │ │ │ │ ├── status-show.vue │ │ │ │ │ │ │ ├── step-form/ │ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ │ ├── task-form/ │ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ │ ├── task-view/ │ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ │ └── trigger-form/ │ │ │ │ │ │ │ └── index.vue │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── plugin/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── type.ts │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ └── util.status.ts │ │ │ │ │ ├── sub-domain/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── template/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ │ ├── edit.vue │ │ │ │ │ │ ├── form.vue │ │ │ │ │ │ ├── import/ │ │ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ │ └── table.vue │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── use.tsx │ │ │ │ │ │ └── utils.ts │ │ │ │ │ ├── use.tsx │ │ │ │ │ └── utils.ts │ │ │ │ ├── suite/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── buy.vue │ │ │ │ │ ├── mine/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ └── user-suite-status.vue │ │ │ │ │ ├── order-modal.vue │ │ │ │ │ ├── pay-return.vue │ │ │ │ │ └── product-info.vue │ │ │ │ └── trade/ │ │ │ │ ├── api.ts │ │ │ │ ├── crud.tsx │ │ │ │ └── index.vue │ │ │ ├── framework/ │ │ │ │ ├── error/ │ │ │ │ │ ├── 403.vue │ │ │ │ │ └── 404.vue │ │ │ │ ├── home/ │ │ │ │ │ ├── content/ │ │ │ │ │ │ └── index.vue │ │ │ │ │ ├── dashboard/ │ │ │ │ │ │ ├── api.ts │ │ │ │ │ │ ├── charts/ │ │ │ │ │ │ │ ├── d.ts │ │ │ │ │ │ │ ├── day-count.vue │ │ │ │ │ │ │ ├── expiring-list.vue │ │ │ │ │ │ │ └── pie-count.vue │ │ │ │ │ │ ├── index.vue │ │ │ │ │ │ ├── statistic-card.vue │ │ │ │ │ │ └── suite-card.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── login/ │ │ │ │ │ ├── image-code.vue │ │ │ │ │ ├── index.vue │ │ │ │ │ └── sms-code.vue │ │ │ │ └── register/ │ │ │ │ ├── email-code.vue │ │ │ │ └── index.vue │ │ │ └── sys/ │ │ │ ├── access/ │ │ │ │ └── index.vue │ │ │ ├── account/ │ │ │ │ ├── api.ts │ │ │ │ └── index.vue │ │ │ ├── authority/ │ │ │ │ ├── permission/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── crud.tsx │ │ │ │ │ ├── fs-permission-tree.vue │ │ │ │ │ └── index.vue │ │ │ │ ├── role/ │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── crud.tsx │ │ │ │ │ └── index.vue │ │ │ │ └── user/ │ │ │ │ ├── api.ts │ │ │ │ ├── crud.tsx │ │ │ │ └── index.vue │ │ │ ├── cname/ │ │ │ │ └── provider/ │ │ │ │ ├── api.ts │ │ │ │ ├── crud.tsx │ │ │ │ └── index.vue │ │ │ ├── console/ │ │ │ │ ├── api.ts │ │ │ │ └── index.vue │ │ │ ├── plugin/ │ │ │ │ ├── api.ts │ │ │ │ ├── components/ │ │ │ │ │ └── plugin-input.vue │ │ │ │ ├── config.vue │ │ │ │ ├── crud.tsx │ │ │ │ ├── demo/ │ │ │ │ │ ├── access.yaml │ │ │ │ │ ├── plugin.yaml │ │ │ │ │ └── sdk.yaml │ │ │ │ ├── edit.vue │ │ │ │ └── index.vue │ │ │ ├── settings/ │ │ │ │ ├── api.ts │ │ │ │ ├── email/ │ │ │ │ │ ├── api.email.ts │ │ │ │ │ └── index.vue │ │ │ │ ├── header-menus/ │ │ │ │ │ ├── crud.tsx │ │ │ │ │ └── index.vue │ │ │ │ ├── index.vue │ │ │ │ └── tabs/ │ │ │ │ ├── base.vue │ │ │ │ ├── payment.vue │ │ │ │ ├── register.vue │ │ │ │ └── safe.vue │ │ │ ├── site/ │ │ │ │ ├── api.ts │ │ │ │ └── index.vue │ │ │ └── suite/ │ │ │ ├── product/ │ │ │ │ ├── api.ts │ │ │ │ ├── crud.tsx │ │ │ │ ├── duration-price-value.vue │ │ │ │ ├── duration-value.vue │ │ │ │ ├── index.vue │ │ │ │ ├── price-edit.vue │ │ │ │ ├── price-input.vue │ │ │ │ ├── suite-value-edit.vue │ │ │ │ └── suite-value.vue │ │ │ ├── setting/ │ │ │ │ ├── index.vue │ │ │ │ └── suite-duration-selector.vue │ │ │ ├── trade/ │ │ │ │ ├── api.ts │ │ │ │ ├── crud.tsx │ │ │ │ └── index.vue │ │ │ └── user-suite/ │ │ │ ├── api.ts │ │ │ ├── crud.tsx │ │ │ └── index.vue │ │ ├── tailwind.config.mjs │ │ ├── tests/ │ │ │ └── unit/ │ │ │ └── example.spec.ts │ │ ├── tsconfig.json │ │ └── vite.config.ts │ ├── certd-server/ │ │ ├── .dockerignore │ │ ├── .editorconfig │ │ ├── .eslintrc │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── .mocharc.json │ │ ├── .npmrc │ │ ├── .prettierrc │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── README.zh-CN.md │ │ ├── app.js │ │ ├── before-build.js │ │ ├── bootstrap.js │ │ ├── db/ │ │ │ ├── migration/ │ │ │ │ ├── v00001__init.sql │ │ │ │ ├── v00002__for_pre.sql │ │ │ │ ├── v10000__certd.sql │ │ │ │ ├── v10001__certdv2.sql │ │ │ │ ├── v10002__settings.sql │ │ │ │ ├── v10003__role_user.sql │ │ │ │ ├── v10004__settings.sql │ │ │ │ ├── v10005__password2.sql │ │ │ │ ├── v10006__pipeline_title.sql │ │ │ │ ├── v10007__access_text.sql │ │ │ │ ├── v10008__access_encrypt.sql │ │ │ │ ├── v10009__cname.sql │ │ │ │ ├── v10010__plugin.sql │ │ │ │ ├── v10011__cname_provider_user_id.sql │ │ │ │ ├── v10012__disabled_readonly_user.sql │ │ │ │ ├── v10013__notification.sql │ │ │ │ ├── v10014__notification_default.sql │ │ │ │ ├── v10015__pipeline_group.sql │ │ │ │ ├── v10016__index.sql │ │ │ │ ├── v10017__field_type.sql │ │ │ │ ├── v10018__suite.sql │ │ │ │ ├── v10019__text_too_short.sql │ │ │ │ ├── v10020__open.sql │ │ │ │ ├── v10021__plugin.sql │ │ │ │ ├── v10022__plugin.sql │ │ │ │ ├── v10023__site_ip.sql │ │ │ │ ├── v10024__cname_error.sql │ │ │ │ ├── v10025__history_trigger_type.sql │ │ │ │ ├── v10026__template.sql │ │ │ │ └── v10027__auto.sql │ │ │ ├── migration-mysql/ │ │ │ │ ├── v00001__init.sql │ │ │ │ ├── v00002__for_pre.sql │ │ │ │ ├── v10000__certd.sql │ │ │ │ ├── v10001__certdv2.sql │ │ │ │ ├── v10002__settings.sql │ │ │ │ ├── v10003__role_user.sql │ │ │ │ ├── v10004__settings.sql │ │ │ │ ├── v10005__password2.sql │ │ │ │ ├── v10006__pipeline_title.sql │ │ │ │ ├── v10007__access_text.sql │ │ │ │ ├── v10008__access_encrypt.sql │ │ │ │ ├── v10009__cname.sql │ │ │ │ ├── v10010__plugin.sql │ │ │ │ ├── v10011__cname_provider_user_id.sql │ │ │ │ ├── v10012__disabled_readonly_user.sql │ │ │ │ ├── v10013__notification.sql │ │ │ │ ├── v10014__notification_default.sql │ │ │ │ ├── v10015__pipeline_group.sql │ │ │ │ ├── v10016__index.sql │ │ │ │ ├── v10017__field_type.sql │ │ │ │ ├── v10018__suite.sql │ │ │ │ ├── v10019__text_too_short.sql │ │ │ │ ├── v10020__open.sql │ │ │ │ ├── v10021__plugin.sql │ │ │ │ ├── v10022__plugin.sql │ │ │ │ ├── v10023__site_ip.sql │ │ │ │ ├── v10024__cname_error.sql │ │ │ │ ├── v10025__history_trigger_type.sql │ │ │ │ ├── v10026__template.sql │ │ │ │ └── v10027__auto.sql │ │ │ ├── migration-pg/ │ │ │ │ ├── v00001__init.sql │ │ │ │ ├── v00002__for_pre.sql │ │ │ │ ├── v10000__certd.sql │ │ │ │ ├── v10001__certdv2.sql │ │ │ │ ├── v10002__settings.sql │ │ │ │ ├── v10003__role_user.sql │ │ │ │ ├── v10004__settings.sql │ │ │ │ ├── v10005__password2.sql │ │ │ │ ├── v10006__pipeline_title.sql │ │ │ │ ├── v10007__access_text.sql │ │ │ │ ├── v10008__access_encrypt.sql │ │ │ │ ├── v10009__cname.sql │ │ │ │ ├── v10010__plugin.sql │ │ │ │ ├── v10011__cname_provider_user_id.sql │ │ │ │ ├── v10012__disabled_readonly_user.sql │ │ │ │ ├── v10013__notification.sql │ │ │ │ ├── v10014__notification_default.sql │ │ │ │ ├── v10015__pipeline_group.sql │ │ │ │ ├── v10016__index.sql │ │ │ │ ├── v10017__field_type.sql │ │ │ │ ├── v10018__suite.sql │ │ │ │ ├── v10019__text_too_short.sql │ │ │ │ ├── v10020__open.sql │ │ │ │ ├── v10021__plugin.sql │ │ │ │ ├── v10022__plugin.sql │ │ │ │ ├── v10023__site_ip.sql │ │ │ │ ├── v10024__cname_error.sql │ │ │ │ ├── v10025__history_trigger_type.sql │ │ │ │ ├── v10026__template.sql │ │ │ │ └── v10027__auto.sql │ │ │ ├── readme.md │ │ │ └── transform.js │ │ ├── export-plugin-md.js │ │ ├── export-plugin-yaml.js │ │ ├── f.yaml │ │ ├── jest.config.js │ │ ├── metadata/ │ │ │ ├── access_51dns.yaml │ │ │ ├── access_CacheFly.yaml │ │ │ ├── access_Gcore.yaml │ │ │ ├── access_aws.yaml │ │ │ ├── access_cloudflare.yaml │ │ │ ├── access_demo.yaml │ │ │ ├── access_dnsla.yaml │ │ │ ├── access_dnspod.yaml │ │ │ ├── access_dogecloud.yaml │ │ │ ├── access_huawei.yaml │ │ │ ├── access_jdcloud.yaml │ │ │ ├── access_namesilo.yaml │ │ │ ├── access_proxmox.yaml │ │ │ ├── access_upyun.yaml │ │ │ ├── access_volcengine.yaml │ │ │ ├── access_west.yaml │ │ │ ├── access_woai.yaml │ │ │ ├── deploy_AliyunDeployCertToALB.yaml │ │ │ ├── deploy_AliyunDeployCertToFC.yaml │ │ │ ├── deploy_AliyunDeployCertToNLB.yaml │ │ │ ├── deploy_AliyunDeployCertToSLB.yaml │ │ │ ├── deploy_AliyunDeployCertToWaf.yaml │ │ │ ├── deploy_AwsDeployToCloudFront.yaml │ │ │ ├── deploy_AwsUploadToACM.yaml │ │ │ ├── deploy_CacheFly.yaml │ │ │ ├── deploy_CopyToLocal.yaml │ │ │ ├── deploy_CustomScript.yaml │ │ │ ├── deploy_DBBackupPlugin.yaml │ │ │ ├── deploy_DemoTest.yaml │ │ │ ├── deploy_DeployCertToAliyunCDN.yaml │ │ │ ├── deploy_DeployCertToAliyunDCDN.yaml │ │ │ ├── deploy_DeployCertToAliyunOSS.yaml │ │ │ ├── deploy_DeployCertToTencentAll.yaml │ │ │ ├── deploy_DeployCertToTencentCDN.yaml │ │ │ ├── deploy_DeployCertToTencentCLB.yaml │ │ │ ├── deploy_DeployCertToTencentCosPlugin.yaml │ │ │ ├── deploy_DeployCertToTencentEO.yaml │ │ │ ├── deploy_DeployCertToTencentTKEIngress.yaml │ │ │ ├── deploy_DogeCloudDeployToCDN.yaml │ │ │ ├── deploy_Gcoreflush.yaml │ │ │ ├── deploy_Gcoreupload.yaml │ │ │ ├── deploy_HauweiDeployCertToCDN.yaml │ │ │ ├── deploy_HauweiUploadToCCM.yaml │ │ │ ├── deploy_JDCloudDeployToCDN.yaml │ │ │ ├── deploy_JDCloudUpdateCert.yaml │ │ │ ├── deploy_JDCloudUploadCert.yaml │ │ │ ├── deploy_ProxmoxUploadCert.yaml │ │ │ ├── deploy_QiniuCertUpload.yaml │ │ │ ├── deploy_QiniuDeployCertToCDN.yaml │ │ │ ├── deploy_QnapDeploy.yaml │ │ │ ├── deploy_RestartCertd.yaml │ │ │ ├── deploy_TencentActionInstancesPlugin.yaml │ │ │ ├── deploy_TencentDeleteExpiringCert.yaml │ │ │ ├── deploy_TencentDeployCertToCDNv2.yaml │ │ │ ├── deploy_TencentDeployCertToLive.yaml │ │ │ ├── deploy_UploadCertToTencent.yaml │ │ │ ├── deploy_UpyunDeployToCdn.yaml │ │ │ ├── deploy_VolcengineDeployToALB.yaml │ │ │ ├── deploy_VolcengineDeployToCDN.yaml │ │ │ ├── deploy_VolcengineDeployToCLB.yaml │ │ │ ├── deploy_VolcengineDeployToLive.yaml │ │ │ ├── deploy_VolcengineDeployToVOD.yaml │ │ │ ├── deploy_VolcengineUploadToCertCenter.yaml │ │ │ ├── deploy_WaitPlugin.yaml │ │ │ ├── deploy_WoaiCDN.yaml │ │ │ ├── deploy_hostShellExecute.yaml │ │ │ ├── deploy_uploadCertToAliyun.yaml │ │ │ ├── deploy_uploadCertToHost.yaml │ │ │ ├── dnsProvider_51dns.yaml │ │ │ ├── dnsProvider_aliyun.yaml │ │ │ ├── dnsProvider_cloudflare.yaml │ │ │ ├── dnsProvider_demo.yaml │ │ │ ├── dnsProvider_dnsla.yaml │ │ │ ├── dnsProvider_dnspod.yaml │ │ │ ├── dnsProvider_huawei.yaml │ │ │ ├── dnsProvider_jdcloud.yaml │ │ │ ├── dnsProvider_namesilo.yaml │ │ │ ├── dnsProvider_tencent.yaml │ │ │ ├── dnsProvider_volcengine.yaml │ │ │ ├── dnsProvider_west.yaml │ │ │ ├── notification_anpush.yaml │ │ │ ├── notification_bark.yaml │ │ │ ├── notification_dingtalk.yaml │ │ │ ├── notification_discord.yaml │ │ │ ├── notification_email.yaml │ │ │ ├── notification_feishu.yaml │ │ │ ├── notification_iyuu.yaml │ │ │ ├── notification_qywx.yaml │ │ │ ├── notification_serverchan.yaml │ │ │ ├── notification_serverchan3.yaml │ │ │ ├── notification_slack.yaml │ │ │ ├── notification_telegram.yaml │ │ │ ├── notification_vocechat.yaml │ │ │ └── notification_webhook.yaml │ │ ├── package.json │ │ ├── plugin-doc-gen.mjs │ │ ├── public/ │ │ │ ├── .gitignore │ │ │ └── index.html │ │ ├── src/ │ │ │ ├── config/ │ │ │ │ ├── config.default.ts │ │ │ │ └── loader.ts │ │ │ ├── configuration.ts │ │ │ ├── controller/ │ │ │ │ ├── basic/ │ │ │ │ │ ├── app-controller.ts │ │ │ │ │ ├── code-controller.ts │ │ │ │ │ ├── file-controller.ts │ │ │ │ │ ├── home-controller.ts │ │ │ │ │ ├── root-controller.ts │ │ │ │ │ ├── settings-controller.ts │ │ │ │ │ └── unhidden-controller.ts │ │ │ │ ├── openapi/ │ │ │ │ │ ├── base-open-controller.ts │ │ │ │ │ └── v1/ │ │ │ │ │ └── cert-controller.ts │ │ │ │ ├── sys/ │ │ │ │ │ ├── access/ │ │ │ │ │ │ └── access-controller.ts │ │ │ │ │ ├── account/ │ │ │ │ │ │ └── account-controller.ts │ │ │ │ │ ├── authority/ │ │ │ │ │ │ ├── permission-controller.ts │ │ │ │ │ │ ├── role-controller.ts │ │ │ │ │ │ └── user-controller.ts │ │ │ │ │ ├── cname/ │ │ │ │ │ │ └── cname-provider-controller.ts │ │ │ │ │ ├── console/ │ │ │ │ │ │ └── statistic-controller.ts │ │ │ │ │ ├── plugin/ │ │ │ │ │ │ └── plugin-controller.ts │ │ │ │ │ ├── plus/ │ │ │ │ │ │ └── plus-controller.ts │ │ │ │ │ └── settings/ │ │ │ │ │ ├── sys-safe-settings-controller.ts │ │ │ │ │ └── sys-settings-controller.ts │ │ │ │ └── user/ │ │ │ │ ├── cert/ │ │ │ │ │ └── domain-controller.ts │ │ │ │ ├── cname/ │ │ │ │ │ ├── cname-provider-controller.ts │ │ │ │ │ └── cname-record-controller.ts │ │ │ │ ├── dashboard/ │ │ │ │ │ └── statistic-controller.ts │ │ │ │ ├── login/ │ │ │ │ │ ├── login-controller.ts │ │ │ │ │ └── register-controller.ts │ │ │ │ ├── mine/ │ │ │ │ │ ├── email-controller.ts │ │ │ │ │ ├── mine-controller.ts │ │ │ │ │ ├── setting-two-factor-controller.ts │ │ │ │ │ └── user-settings-controller.ts │ │ │ │ ├── monitor/ │ │ │ │ │ ├── cert-info-controller.ts │ │ │ │ │ ├── site-info-controller.ts │ │ │ │ │ └── site-ip-controller.ts │ │ │ │ ├── open/ │ │ │ │ │ └── open-key-controller.ts │ │ │ │ └── pipeline/ │ │ │ │ ├── access-controller.ts │ │ │ │ ├── cert-controller.ts │ │ │ │ ├── dns-provider-controller.ts │ │ │ │ ├── handle-controller.ts │ │ │ │ ├── history-controller.ts │ │ │ │ ├── notification-controller.ts │ │ │ │ ├── pipeline-controller.ts │ │ │ │ ├── pipeline-group-controller.ts │ │ │ │ ├── plugin-controller.ts │ │ │ │ ├── sub-domain-controller.ts │ │ │ │ └── template-controller.ts │ │ │ ├── filter/ │ │ │ │ ├── default.filter.ts │ │ │ │ └── notfound.filter.ts │ │ │ ├── middleware/ │ │ │ │ ├── authority.ts │ │ │ │ ├── global-exception.ts │ │ │ │ ├── hidden.ts │ │ │ │ ├── preview.ts │ │ │ │ └── reset-passwd/ │ │ │ │ └── middleware.ts │ │ │ ├── modules/ │ │ │ │ ├── auto/ │ │ │ │ │ ├── auto-a-init-site.ts │ │ │ │ │ ├── auto-b-load-plugins.ts │ │ │ │ │ ├── auto-c-register-cron.ts │ │ │ │ │ ├── auto-d-mitter-register.ts │ │ │ │ │ ├── auto-e-pipeline-emitter-register.ts │ │ │ │ │ ├── auto-z.ts │ │ │ │ │ └── https/ │ │ │ │ │ ├── self-certificate.ts │ │ │ │ │ └── server.ts │ │ │ │ ├── basic/ │ │ │ │ │ ├── service/ │ │ │ │ │ │ ├── code-service.ts │ │ │ │ │ │ └── email-service.ts │ │ │ │ │ └── sms/ │ │ │ │ │ ├── aliyun-sms.ts │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── factory.ts │ │ │ │ │ └── yfy-sms.ts │ │ │ │ ├── cert/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── domain.ts │ │ │ │ │ └── service/ │ │ │ │ │ └── domain-service.ts │ │ │ │ ├── cname/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ ├── cname-provider.ts │ │ │ │ │ │ └── cname-record.ts │ │ │ │ │ └── service/ │ │ │ │ │ ├── cname-provider-service.ts │ │ │ │ │ ├── cname-record-service.ts │ │ │ │ │ └── common-provider.ts │ │ │ │ ├── cron/ │ │ │ │ │ ├── configuration.ts │ │ │ │ │ ├── cron.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── db/ │ │ │ │ │ ├── d.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── mysql.ts │ │ │ │ │ ├── postgresql.ts │ │ │ │ │ └── sqlite.ts │ │ │ │ ├── login/ │ │ │ │ │ └── service/ │ │ │ │ │ └── login-service.ts │ │ │ │ ├── mine/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── user-settings.ts │ │ │ │ │ └── service/ │ │ │ │ │ ├── models.ts │ │ │ │ │ ├── two-factor-service.ts │ │ │ │ │ └── user-settings-service.ts │ │ │ │ ├── monitor/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ ├── cert-info.ts │ │ │ │ │ │ ├── site-info.ts │ │ │ │ │ │ └── site-ip.ts │ │ │ │ │ ├── facade/ │ │ │ │ │ │ └── cert-info-facade.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── service/ │ │ │ │ │ ├── cert-info-service.ts │ │ │ │ │ ├── dns-custom.ts │ │ │ │ │ ├── site-info-service.ts │ │ │ │ │ ├── site-ip-service.ts │ │ │ │ │ └── site-tester.ts │ │ │ │ ├── open/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── open-key.ts │ │ │ │ │ └── service/ │ │ │ │ │ └── open-key-service.ts │ │ │ │ ├── pipeline/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ ├── history-log.ts │ │ │ │ │ │ ├── history.ts │ │ │ │ │ │ ├── notification.ts │ │ │ │ │ │ ├── pipeline-group.ts │ │ │ │ │ │ ├── pipeline.ts │ │ │ │ │ │ ├── storage.ts │ │ │ │ │ │ ├── sub-domain.ts │ │ │ │ │ │ ├── template.ts │ │ │ │ │ │ └── vo/ │ │ │ │ │ │ ├── history-detail.ts │ │ │ │ │ │ └── pipeline-detail.ts │ │ │ │ │ └── service/ │ │ │ │ │ ├── builtin-plugin-service.ts │ │ │ │ │ ├── db-storage.ts │ │ │ │ │ ├── dns-provider-service.ts │ │ │ │ │ ├── getter/ │ │ │ │ │ │ ├── cname-proxy-service.ts │ │ │ │ │ │ ├── domain-verifier-getter.ts │ │ │ │ │ │ ├── notification-getter.ts │ │ │ │ │ │ ├── sub-domain-getter.ts │ │ │ │ │ │ └── task-service-getter.ts │ │ │ │ │ ├── history-log-service.ts │ │ │ │ │ ├── history-service.ts │ │ │ │ │ ├── notification-service.ts │ │ │ │ │ ├── pipeline-group-service.ts │ │ │ │ │ ├── pipeline-service.ts │ │ │ │ │ ├── storage-service.ts │ │ │ │ │ ├── sub-domain-service.ts │ │ │ │ │ ├── template-service.ts │ │ │ │ │ └── url-service.ts │ │ │ │ ├── plugin/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ └── plugin.ts │ │ │ │ │ └── service/ │ │ │ │ │ ├── default-plugin.ts │ │ │ │ │ ├── plugin-config-getter.ts │ │ │ │ │ ├── plugin-config-service.ts │ │ │ │ │ └── plugin-service.ts │ │ │ │ ├── suite/ │ │ │ │ │ └── service/ │ │ │ │ │ └── my-count-service.ts │ │ │ │ └── sys/ │ │ │ │ ├── authority/ │ │ │ │ │ ├── entity/ │ │ │ │ │ │ ├── permission.ts │ │ │ │ │ │ ├── role-permission.ts │ │ │ │ │ │ ├── role.ts │ │ │ │ │ │ ├── user-role.ts │ │ │ │ │ │ └── user.ts │ │ │ │ │ ├── enums/ │ │ │ │ │ │ └── ResourceTypeEnum.ts │ │ │ │ │ └── service/ │ │ │ │ │ ├── auth-service.ts │ │ │ │ │ ├── permission-service.ts │ │ │ │ │ ├── role-permission-service.ts │ │ │ │ │ ├── role-service.ts │ │ │ │ │ ├── user-role-service.ts │ │ │ │ │ └── user-service.ts │ │ │ │ └── settings/ │ │ │ │ ├── fix.ts │ │ │ │ └── safe-service.ts │ │ │ ├── plugins/ │ │ │ │ ├── index.ts │ │ │ │ ├── plugin-51dns/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── dns-provider.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-aliyun/ │ │ │ │ │ ├── dns-provider/ │ │ │ │ │ │ ├── aliyun-dns-provider.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin/ │ │ │ │ │ │ ├── deploy-to-alb/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-cdn/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-dcdn/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-esa/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-fc/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-nlb/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-oss/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-slb/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-vod/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── deploy-to-waf/ │ │ │ │ │ │ │ └── index.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── upload-to-aliyun/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── utils/ │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-aws/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── libs/ │ │ │ │ │ │ └── aws-acm-client.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin-deploy-to-cloudfront.ts │ │ │ │ │ └── plugin-upload-to-acm.ts │ │ │ │ ├── plugin-aws-cn/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── libs/ │ │ │ │ │ │ └── aws-iam-client.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-deploy-to-cloudfront.ts │ │ │ │ ├── plugin-cachefly/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-deploy-to-cdn.ts │ │ │ │ ├── plugin-cloudflare/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── dns-provider.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-demo/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── dns-provider.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-test.ts │ │ │ │ ├── plugin-dnsla/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── dns-provider.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-doge/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── lib/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── deploy-to-cdn/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-farcdn/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-refresh-cert.ts │ │ │ │ ├── plugin-flex/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-refresh-cert.ts │ │ │ │ ├── plugin-fnos/ │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-gcore/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin-flush.ts │ │ │ │ │ └── plugin-upload.ts │ │ │ │ ├── plugin-github/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-check-release.ts │ │ │ │ ├── plugin-host/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin/ │ │ │ │ │ ├── copy-to-local/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── host-shell-execute/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin-upload-to-oss.ts │ │ │ │ │ └── upload-to-host/ │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-huawei/ │ │ │ │ │ ├── access/ │ │ │ │ │ │ ├── huawei-access.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dns-provider/ │ │ │ │ │ │ ├── huawei-dns-provider.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── deploy-to-cdn/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── upload-to-ccm/ │ │ │ │ │ ├── ccm-client.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-jdcloud/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── dns-provider.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin-deploy-to-cdn.ts │ │ │ │ │ ├── plugin-update-cert.ts │ │ │ │ │ └── plugin-upload-cert.ts │ │ │ │ ├── plugin-namesilo/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── dns-provider.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-notification/ │ │ │ │ │ ├── anpush/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── bark/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dingtalk/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── discord/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── email/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── feishu/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── iyuu/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── qywx/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── serverchan/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── serverchan3/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── slack/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── telegram/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── vocechat/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── webhook/ │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-other/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugin-db-backup.ts │ │ │ │ │ ├── plugin-deploy-to-mail.ts │ │ │ │ │ ├── plugin-restart.ts │ │ │ │ │ ├── plugin-script.ts │ │ │ │ │ └── plugin-wait.ts │ │ │ │ ├── plugin-proxmox/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-upload.ts │ │ │ │ ├── plugin-qiniu/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin/ │ │ │ │ │ ├── deploy-to-cdn/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── upload-cert/ │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-qnap/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-qnap.ts │ │ │ │ ├── plugin-rainyun/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── dns-provider.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-refresh-cert.ts │ │ │ │ ├── plugin-tencent/ │ │ │ │ │ ├── access/ │ │ │ │ │ │ ├── dnspod-access.ts │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dns-provider/ │ │ │ │ │ │ ├── dnspod-dns-provider.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── tencent-dns-provider.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin/ │ │ │ │ │ ├── delete-expiring-cert/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── deploy-to-all/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── deploy-to-cdn/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── deploy-to-cdn-v2/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── deploy-to-clb/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── deploy-to-cos/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── deploy-to-eo/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── deploy-to-live/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── deploy-to-tke-ingress/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── start-instances/ │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── upload-to-tencent/ │ │ │ │ │ └── index.ts │ │ │ │ ├── plugin-upyun/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── client.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-depoy-to-cdn.ts │ │ │ │ ├── plugin-volcengine/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── cdn-client.ts │ │ │ │ │ ├── dns-client.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── plugins/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── plugin-deploy-to-alb.ts │ │ │ │ │ │ ├── plugin-deploy-to-cdn.ts │ │ │ │ │ │ ├── plugin-deploy-to-clb.ts │ │ │ │ │ │ ├── plugin-deploy-to-dcdn.ts │ │ │ │ │ │ ├── plugin-deploy-to-live.ts │ │ │ │ │ │ ├── plugin-deploy-to-vod.ts │ │ │ │ │ │ └── plugin-upload-to-cert-center.ts │ │ │ │ │ ├── ve-client.ts │ │ │ │ │ └── volcengine-dns-provider.ts │ │ │ │ ├── plugin-wangsu/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── lib/ │ │ │ │ │ │ ├── auth/ │ │ │ │ │ │ │ └── AkSkAuth.ts │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ └── Constant.ts │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ └── ApiAuthException.ts │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── model/ │ │ │ │ │ │ │ ├── AkSkConfig.ts │ │ │ │ │ │ │ └── HttpRequestMsg.ts │ │ │ │ │ │ └── util/ │ │ │ │ │ │ ├── CryptoUtils.ts │ │ │ │ │ │ └── HttpUtils.ts │ │ │ │ │ └── plugins/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── plugin-refresh-cert.ts │ │ │ │ ├── plugin-west/ │ │ │ │ │ ├── access.ts │ │ │ │ │ ├── dns-provider.ts │ │ │ │ │ └── index.ts │ │ │ │ └── plugin-woai/ │ │ │ │ ├── access.ts │ │ │ │ ├── index.ts │ │ │ │ └── plugins/ │ │ │ │ ├── index.ts │ │ │ │ └── plugin-deploy-to-cdn.ts │ │ │ └── utils/ │ │ │ ├── env.ts │ │ │ ├── http.ts │ │ │ ├── random.ts │ │ │ └── version.ts │ │ ├── test/ │ │ │ ├── controller/ │ │ │ │ ├── api.test.ts │ │ │ │ └── home.test.ts │ │ │ └── plugins/ │ │ │ └── 51dns.test.mjs │ │ ├── tools/ │ │ │ └── lego/ │ │ │ └── readme.md │ │ └── tsconfig.json │ └── docker-compose.yaml ├── pnpm-workspace.yaml ├── publish-check.js ├── start.sh ├── step.md ├── test/ │ └── docker/ │ ├── Dockerfile │ └── docker-compose.yaml └── tsconfig.json