Full Code of liangbin77/certd for AI

v2 af54f48cec59 cached
2332 files
15.8 MB
4.3M tokens
7657 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (17,797K chars total). Download the full file to get everything.
Repository: liangbin77/certd
Branch: v2
Commit: af54f48cec59
Files: 2332
Total size: 15.8 MB

Directory structure:
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

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
> 感谢您支持certd,请按如下规范提交issue    
> 如果有条件,请尽量在[github上提交](https://github.com/certd/certd/issues)


## 一、问题描述
`请在此处简要描述你所遇到的问题,必要时请贴出相关截图辅助理解和定位`

### 复现步骤
`请描述复现问题的详细步骤`
`如果非示例页面的问题,最好能提供最小复现示例的代码、或者仓库链接`


### 报错截图
`请贴出报错日志截图`

### 效果截图
`请贴出效果截图`
#### 1. 期望效果

#### 2. 实际效果



================================================
FILE: .github/workflows/build-image-for-test.yml
================================================
name: build-image-for-test
on:
  push:
    branches: ['v2-dev']
    paths:
      - "build-dev.trigger"

#  schedule:
#    - # 国际时间 19:17 执行,北京时间3:17  ↙↙↙ 改成你想要每天自动执行的时间
#    - cron: '17 19 * * *'
permissions:
  contents: read
  packages: write

jobs:
  build-certd-image:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: v2-dev

      - name: get_certd_version
        id: get_certd_version
        uses: actions/github-script@v6
        with:
          result-encoding: string
          script: |
            const fs = require('fs');
            const path = require('path');
            const pnpmWorkspace = "./pnpm-workspace.yaml";
            fs.unlinkSync(pnpmWorkspace)
            const jsonFilePath = "./packages/ui/certd-server/package.json";
            const jsonContent = fs.readFileSync(jsonFilePath, 'utf-8');
            const pkg = JSON.parse(jsonContent)
            console.log("certd_version:",pkg.version);
            return pkg.version
#      - name: Use Node.js
#        uses: actions/setup-node@v4
#        with:
#          node-version: 18
#          cache: 'npm'
#        working-directory: ./packages/ui/certd-client
      - run: |
          npm install -g pnpm
          pnpm install
          npm run build
        working-directory: ./packages/ui/certd-client

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to aliyun container Registry
        uses: docker/login-action@v3
        with:
          registry: registry.cn-shenzhen.aliyuncs.com
          username: ${{ secrets.aliyun_cs_username }}
          password: ${{ secrets.aliyun_cs_password }}

      - name: Login to GitHub Packages
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.dockerhub_username }}
          password: ${{ secrets.dockerhub_password }}

#      - name: Build default platforms
#        uses: docker/build-push-action@v6
#        with:
#          platforms: linux/amd64,linux/arm64
#          push: true
#          context: ./packages/ui/
#          tags: |
#            registry.cn-shenzhen.aliyuncs.com/handsfree/certd-dev:latest
#            greper/certd-dev:latest
#            ghcr.io/${{ github.repository }}:dev-latest

      - name: Build armv7
        uses: docker/build-push-action@v6
        with:
          platforms: linux/arm/v7
          push: true
          context: ./packages/ui/
          tags: |
            registry.cn-shenzhen.aliyuncs.com/handsfree/certd:armv7
            registry.cn-shenzhen.aliyuncs.com/handsfree/certd:${{steps.get_certd_version.outputs.result}}-armv7
            greper/certd:armv7
            greper/certd:${{steps.get_certd_version.outputs.result}}-armv7

================================================
FILE: .github/workflows/build-image.yml
================================================
name: build-image
on:
  push:
    branches: ['v2-dev']
    paths:
      - "build.trigger"

#  schedule:
#    - # 国际时间 19:17 执行,北京时间3:17  ↙↙↙ 改成你想要每天自动执行的时间
#    - cron: '17 19 * * *'
permissions:
  contents: read
  packages: write

jobs:
  build-certd-image:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          lfs: true

      - name: get_certd_version
        id: get_certd_version
        uses: actions/github-script@v6
        with:
          result-encoding: string
          script: |
            const fs = require('fs');
            const path = require('path');
            const pnpmWorkspace = "./pnpm-workspace.yaml";
            fs.unlinkSync(pnpmWorkspace)
            const jsonFilePath = "./packages/ui/certd-server/package.json";
            const jsonContent = fs.readFileSync(jsonFilePath, 'utf-8');
            const pkg = JSON.parse(jsonContent)
            console.log("certd_version:",pkg.version);
            return pkg.version
#      - name: Use Node.js
#        uses: actions/setup-node@v4
#        with:
#          node-version: 18
#          cache: 'npm'
#        working-directory: ./packages/ui/certd-client
      - run: |
          npm install -g pnpm
          pnpm install
          npm run build
        working-directory: ./packages/ui/certd-client

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Login to aliyun container Registry
        uses: docker/login-action@v3
        with:
          registry: registry.cn-shenzhen.aliyuncs.com
          username: ${{ secrets.aliyun_cs_username }}
          password: ${{ secrets.aliyun_cs_password }}

      - name: Login to GitHub Packages
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
  
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.dockerhub_username }}
          password: ${{ secrets.dockerhub_password }}

      - name: Build default platforms
        uses: docker/build-push-action@v6
        with:
          platforms: linux/amd64,linux/arm64
          push: true
          context: ./packages/ui/
          tags: |
            registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
            registry.cn-shenzhen.aliyuncs.com/handsfree/certd:${{steps.get_certd_version.outputs.result}}
            greper/certd:latest
            greper/certd:${{steps.get_certd_version.outputs.result}}
            ghcr.io/${{ github.repository }}:latest
            ghcr.io/${{ github.repository }}:${{steps.get_certd_version.outputs.result}}
      - name: Build armv7
        uses: docker/build-push-action@v6
        with:
          platforms: linux/arm/v7
          push: true
          context: ./packages/ui/
          tags: |
            registry.cn-shenzhen.aliyuncs.com/handsfree/certd:armv7
            registry.cn-shenzhen.aliyuncs.com/handsfree/certd:${{steps.get_certd_version.outputs.result}}-armv7
            greper/certd:armv7
            greper/certd:${{steps.get_certd_version.outputs.result}}-armv7
            ghcr.io/${{ github.repository }}:armv7
            ghcr.io/${{ github.repository }}:${{steps.get_certd_version.outputs.result}}-armv7

#      - name: Build agent
#        uses: docker/build-push-action@v6
#        with:
#          platforms: linux/amd64,linux/arm64
#          push: true
#          context: ./packages/ui/agent/
#          tags: |
#            registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:latest
#            registry.cn-shenzhen.aliyuncs.com/handsfree/certd-agent:${{steps.get_certd_version.outputs.result}}
#            greper/certd-agent:latest
#            greper/certd-agent:${{steps.get_certd_version.outputs.result}}


================================================
FILE: .github/workflows/deploy-demo.yml
================================================
name: deploy-demo
on:
  push:
    branches: ['v2-dev']
    paths:
      - "deploy.trigger"
  workflow_run:
    workflows: [ "build-image" ]
    types:
      - completed

#  schedule:
#    - # 国际时间 19:17 执行,北京时间3:17  ↙↙↙ 改成你想要每天自动执行的时间
#    - cron: '17 19 * * *'
permissions:
  contents: read

jobs:
  deploy-certd-demo:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: v2-dev
      - name: get_certd_version
        id: get_certd_version
        uses: actions/github-script@v6
        with:
          result-encoding: string
          script: |
            const fs = require('fs');
            const path = require('path');
            const jsonFilePath = "./packages/ui/certd-server/package.json";
            const jsonContent = fs.readFileSync(jsonFilePath, 'utf-8');
            const pkg = JSON.parse(jsonContent)
            console.log("certd_version:",pkg.version);
            return pkg.version
      - uses: GuillaumeFalourd/wait-sleep-action@v1
        with:
          time: '10' # for 60 seconds
      - name: deploy-certd-demo
        uses: tyrrrz/action-http-request@master
        with:
          url: http://flow-openapi.aliyun.com/pipeline/webhook/lzCzlGrLCOHQaTMMt0mG
          method: POST
          headers: |
            Content-Type: application/json
          body: |
            {
              "CERTD_VERSION": "${{steps.get_certd_version.outputs.result}}"
            }
          retry-count: 3
          retry-delay: 5000

      - name: deploy-certd-doc
        uses: tyrrrz/action-http-request@master
        with:
          url: http://flow-openapi.aliyun.com/pipeline/webhook/IiSxLDp9aOhgDUxJPytv
          method: POST
          body: |
            {}
          headers: |
            Content-Type: application/json
          retry-count: 3
          retry-delay: 5000


================================================
FILE: .github/workflows/sync-to-gitee-dev.yml
================================================
name: sync-to-gitee-dev
on:
  push:
    branches: ['v2-dev']
#  schedule:
#    - # 国际时间 19:17 执行,北京时间3:17  ↙↙↙ 改成你想要每天自动执行的时间
#    - cron: '17 19 * * *'
permissions:
  contents: read

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout work repo            # 1. 检出当前仓库(certd-sync-work)
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          lfs: true
      - name: Set git user                  # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
        run: |
          git config --global user.name "xiaojunnuo"
          git config --global user.email "xiaojunnuo@qq.com"

      - name: Set git token                 # 3. 给git命令设置token,用于push到目标仓库
        uses: de-vri-es/setup-git-credentials@v2
        with:                              # token 格式为: username:password
          credentials: https://${{secrets.PUSH_TOKEN_GITEE}}@gitee.com

      - name: push to gitee               # 4. 执行同步
        run: |
          git remote add upstream https://gitee.com/certd/certd
          git push --set-upstream upstream v2-dev



================================================
FILE: .github/workflows/sync-to-gitee.yml
================================================
name: sync-to-gitee
on:
  push:
    branches: ['v2']
#  schedule:
#    - # 国际时间 19:17 执行,北京时间3:17  ↙↙↙ 改成你想要每天自动执行的时间
#    - cron: '17 19 * * *'
permissions:
  contents: read

jobs:
  sync:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout work repo            # 1. 检出当前仓库(certd-sync-work)
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          lfs: true
      - name: Set git user                  # 2. 给git命令设置用户名和邮箱,↙↙↙ 改成你的name和email
        run: |
          git config --global user.name "xiaojunnuo"
          git config --global user.email "xiaojunnuo@qq.com"

      - name: Set git token                 # 3. 给git命令设置token,用于push到目标仓库
        uses: de-vri-es/setup-git-credentials@v2
        with:                              # token 格式为: username:password
          credentials: https://${{secrets.PUSH_TOKEN_GITEE}}@gitee.com

      - name: push to gitee               # 4. 执行同步
        run: |
          git remote add upstream https://gitee.com/certd/certd
          git push --set-upstream upstream v2



================================================
FILE: .gitignore
================================================
./packages/core/lego
# IntelliJ project files
.vscode/
node_modules/
npm-debug.log
yarn-error.log
yarn.lock
package-lock.json
/.idea/
*/**/dist
*/**/pnpm-lock.yaml
*/**/stats.html
.idea
*.iml
out
gen
/test/*.private.*

/*.log
nohup.out

/packages/ui/*/.idea
/packages/ui/*/node_modules
/packages/*/node_modules
#/pnpm-lock.yaml


tsconfig.tsbuildinfo
test/**/*.js
/packages/ui/certd-server/data/db.sqlite
/packages/ui/certd-server/data/keys.yaml
/packages/pro/

test.js

================================================
FILE: .npmrc
================================================
link-workspace-packages=deep
prefer-workspace-packages=true


================================================
FILE: .prettierrc
================================================
{
  "printWidth": 160,
  "bracketSpacing": true,
  "singleQuote": true,
  "trailingComma": "es5",
  "arrowParens": "avoid"
}


================================================
FILE: CHANGELOG.md
================================================
# Change Log

All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [1.36.10](https://github.com/certd/certd/compare/v1.36.9...v1.36.10) (2025-07-18)

### Bug Fixes

* 企业微信通知改成text类型,因为markdown类型不支持@用户 ([747d266](https://github.com/certd/certd/commit/747d26674248082e678a3fd5ecc94712641a2716))
* api接口获取不到证书的bug ([05a33a0](https://github.com/certd/certd/commit/05a33a0ec9999e2802f6c7b23cc1c61a2b9e963d))

### Performance Improvements

* 部署到阿里云oss插件支持选择上传到阿里云cas中的证书 ([2ea2c8c](https://github.com/certd/certd/commit/2ea2c8c05fc40f79595f1bbde67c1413558bf684))
* 优化子域名托管的说明 ([b15f514](https://github.com/certd/certd/commit/b15f514018b728acb0922ee3f93c1f302eb5d471))
* 账号即将过期通知 ([e403450](https://github.com/certd/certd/commit/e40345095f31e2fb8e2333a6647466659133fa0c))
* 子域名托管重复域名不允许添加 ([ffc0c7b](https://github.com/certd/certd/commit/ffc0c7bb7b16d9904fd2d905d1c4e1d4854e92a9))

## [1.36.9](https://github.com/certd/certd/compare/v1.36.7...v1.36.9) (2025-07-15)

### Bug Fixes

* 修复ssh无法执行命令的bug ([9763cb0](https://github.com/certd/certd/commit/9763cb00e5d95b2fa5d1c2d3d4a8eecac71600e6))

## [1.36.7](https://github.com/certd/certd/compare/v1.36.6...v1.36.7) (2025-07-15)

### Bug Fixes

* 修复流水线列表页报length错误的bug ([9864792](https://github.com/certd/certd/commit/9864792bbfd149e770d6e1ffa809573694f99dd3))
* 修复流水线页面状态没有刷新的bug ([93e9498](https://github.com/certd/certd/commit/93e9498b410353f504e11e264db62468895d7290))
* 修复自定义证书检查时间重启之后不生效的bug ([38e867c](https://github.com/certd/certd/commit/38e867c917bbc68bd228bdd8064f3e7358d6413d))

### Performance Improvements

* 支持上传证书到各种对象存储,oss、cos、七牛、s3、minio等 ([1da8617](https://github.com/certd/certd/commit/1da8617a53a675776635bbc3bcb3c6d7dff83e27))
* 支持邮箱发送证书 ([95332d5](https://github.com/certd/certd/commit/95332d5db96cd54ddab6ab737332417a09169b39))

## [1.36.6](https://github.com/certd/certd/compare/v1.36.5...v1.36.6) (2025-07-14)

### Bug Fixes

* 修复某些页面翻译不全显示错误的bug ([0b3158f](https://github.com/certd/certd/commit/0b3158fdd5fe5bb0a98c4e65715dbc3de2c38047))
* 修复运行流水线后会闪烁一下的bug ([dfc9362](https://github.com/certd/certd/commit/dfc9362084082ee535b898f23b2609c1d946a6fd))

### Performance Improvements

* 部署plesk证书,支持删除未使用的证书 ([902d246](https://github.com/certd/certd/commit/902d246d1a7473ad90f604028c4eb09c8c67d99c))
* 通知和定时器的删除按钮显示为红色更显眼 ([61ba83c](https://github.com/certd/certd/commit/61ba83c77546c3d505d081e19a3d68c127662bf1))
* 优化流水线列表页面、详情页面性能,精简返回数据 ([609ac9c](https://github.com/certd/certd/commit/609ac9c9a2dde605eb09834ae59693c1cb238765))
* 支持自动选择校验方式申请证书 ([3f99432](https://github.com/certd/certd/commit/3f9943270cfb12946e38e6272bc5e8d95ad6ab9e))
* OpenAPI支持autoApply参数 ([42f4d14](https://github.com/certd/certd/commit/42f4d1477dc791520a874aed56035abcbc8c433b))

## [1.36.5](https://github.com/certd/certd/compare/v1.36.4...v1.36.5) (2025-07-11)

### Bug Fixes

* 某些插件找不到的bug ([4b3f4a8](https://github.com/certd/certd/commit/4b3f4a868a8b0800c5c59de9d0f47bddc079e7b3))

## [1.36.4](https://github.com/certd/certd/compare/v1.36.3...v1.36.4) (2025-07-10)

### Bug Fixes

* 修复查看证书对话框翻译错误的bug ([8626b6d](https://github.com/certd/certd/commit/8626b6d9f235c511766f2ae98e0a37f6cebb621c))
* 修复translation后分组编辑打不开的bug ([46a1b74](https://github.com/certd/certd/commit/46a1b7479923d2feb2dece202a5932b99981b2cd))
* 执行windows nginx命令时,改为return code判断是否执行成功 ([b37cffd](https://github.com/certd/certd/commit/b37cffd704cd08b8bdd68a6e284706eabe59e78d))

### Performance Improvements

* 优化证书进度条颜色 ([2af91db](https://github.com/certd/certd/commit/2af91dbf2ae36a4ed17c6788bc2a2a79a3bb29f8))
* 站点证书即将过期通知标题颜色优化为红色 ([80c5331](https://github.com/certd/certd/commit/80c5331a5d4c320323d9b9b800e4ea3b72577b33))
* 支持部署到阿里云vod ([98da4e1](https://github.com/certd/certd/commit/98da4e1791ed8bb21daf2a9914fda875d14633c9))
* 支持部署证书到网宿CDN ([c3da026](https://github.com/certd/certd/commit/c3da026b33106f5195959825a68cadbe49efef00))
* 重置管理员密码同时可以清除管理员的2FA设置 ([1ece091](https://github.com/certd/certd/commit/1ece0915f172d5f8b8adb866434e7efcc5c8c46d))
* output-selector from参数支持更丰富的过滤规则 ([87853a2](https://github.com/certd/certd/commit/87853a201535f3bfe8505c40f8f5229d82ffcc73))

## [1.36.3](https://github.com/certd/certd/compare/v1.36.2...v1.36.3) (2025-07-07)

### Bug Fixes

* 修复开放接口添加按钮文本显示问题 ([f93ba99](https://github.com/certd/certd/commit/f93ba9970c12680f38eba2a7abd4b72cf3f5b6a6))

### Performance Improvements

* 优化部署到腾讯TKE插件,支持Opaque类型选择,优化填写说明 ([1445325](https://github.com/certd/certd/commit/144532530a865b634e68539e4888e26f52f73492))

## [1.36.2](https://github.com/certd/certd/compare/v1.36.1...v1.36.2) (2025-07-06)

### Bug Fixes

* 修复notification编辑按钮无法打开对话框的bug ([0cea26c](https://github.com/certd/certd/commit/0cea26c6287f52adf273b4a525c37bea8555c68c))
* 优化更新飞牛os证书有效期,修复某些情况下部署证书后飞牛无法访问https的bug ([610c919](https://github.com/certd/certd/commit/610c919c72037becc0ed326f5d5b18c963dfcb3a))

### Performance Improvements

* 证书检查支持自定义dns服务器 ([c53bb7c](https://github.com/certd/certd/commit/c53bb7cf677faa32729709ae0c10359db5194d7a))

## [1.36.1](https://github.com/certd/certd/compare/v1.36.0...v1.36.1) (2025-07-02)

### Bug Fixes

* 修复通知和触发器无法编辑的bug ([a2e0951](https://github.com/certd/certd/commit/a2e09510426680eb425c0d7ad337f39d3f052054))

### Performance Improvements

* 支持部署到七牛云DCDN ([bde601b](https://github.com/certd/certd/commit/bde601bfffb4f7345d97e1e3b064520816d31555))

# [1.36.0](https://github.com/certd/certd/compare/v1.35.5...v1.36.0) (2025-07-01)

### Bug Fixes

* 支持自定义证书生成插件 ([481cc02](https://github.com/certd/certd/commit/481cc029fafaf280aa844cd3ca30f4653ec35d55))

### Features

* 支持模版创建流水线 ([2559f0e](https://github.com/certd/certd/commit/2559f0e822db095d1d26a7f1d517622dce22a5c2))

### Performance Improvements

* 阿里云waf cname站点选择支持翻页及域名查询 ([4cf9858](https://github.com/certd/certd/commit/4cf98584dacc5999752732f136246647a2f1f07d))
* 部署到ssh主机命令支持前置命令 ([991b741](https://github.com/certd/certd/commit/991b741cbe223b342f534157da63b71e81661f8e))
* 模版导入流水线 ([dcc8c56](https://github.com/certd/certd/commit/dcc8c569693432579709ce63656665a76bcf9a44))
* 添加用户资料编辑功能 ([7c0f43c](https://github.com/certd/certd/commit/7c0f43c8a3052f73afee3e93c9fcbc43c44ab690))
* 优化阿里云waf的日志信息 ([821c6d8](https://github.com/certd/certd/commit/821c6d807d4b3cc5092d09a6282b8cbafb9e7c9f))
* 优化中英文翻译与切换 ([acaa8b1](https://github.com/certd/certd/commit/acaa8b173183b4423584ee070e6e332e0ac0eb2d))
* 站点IP监控前先同步一下IP ([a080b60](https://github.com/certd/certd/commit/a080b606ab6e289d96b17ef7d2879b4603f889ba))
* 支持选择运行策略设置 ([60f055f](https://github.com/certd/certd/commit/60f055f293ce237c21cd9050333dad9609eceac1))

## [1.35.5](https://github.com/certd/certd/compare/v1.35.4...v1.35.5) (2025-06-20)

### Bug Fixes

* 腾讯云授权支持设置是否国际站,部署到EO插件支持国际站 ([5cd3968](https://github.com/certd/certd/commit/5cd3968929acef333cf30d3b20cf21cea6c82c5f))
* 修复邮箱包含.号校验失败的bug ([65dcae7](https://github.com/certd/certd/commit/65dcae79f8faa7a6cb425e10a0fdb6758b0719f3))

### Performance Improvements

* 首次打开任务日志查看页面,自动滚动到底部 ([43fee42](https://github.com/certd/certd/commit/43fee42198e8697185b427b1fa3eb79409603393))
* 支持批量修改通知和定时 ([e11b3be](https://github.com/certd/certd/commit/e11b3becfd4abe6547e84d09adc38ebd6e1c4b87))

## [1.35.4](https://github.com/certd/certd/compare/v1.35.3...v1.35.4) (2025-06-13)

### Performance Improvements

* 支持s3 access做测试 ([f00aeac](https://github.com/certd/certd/commit/f00aeacb8b5c81f0bafa4c1b76723dec2b6b7784))

## [1.35.3](https://github.com/certd/certd/compare/v1.35.2...v1.35.3) (2025-06-12)

### Bug Fixes

* 修复消息内容存在()<>等括号情况下无法发送tg通知的bug ([c937583](https://github.com/certd/certd/commit/c937583a50d8513d76adead3648f83eee2fcc6f9))
* 修复重试次数设置无效的bug ([e2099ac](https://github.com/certd/certd/commit/e2099ac9ca344bc70bfa4219002e9138708973ae))

### Performance Improvements

* 授权列表类型颜色优化 ([1e86338](https://github.com/certd/certd/commit/1e863382d3d1a8cc95a1abf51e75bf6eaea3244f))
* 支持雨云dns解析 ([8354348](https://github.com/certd/certd/commit/83543487e7418683bd79cfe3b9e0d792bdb977f7))
* 支持雨云dns解析以及雨云证书更新 ([43c7a19](https://github.com/certd/certd/commit/43c7a1984926f5d4647760cc134bb0aede3a7b7a))
* github 版本检查支持执行脚本 ([bad3504](https://github.com/certd/certd/commit/bad3504d4a15e6989b967b66aa9da8c6981f25bf))

## [1.35.2](https://github.com/certd/certd/compare/v1.35.1...v1.35.2) (2025-06-09)

### Bug Fixes

* 修复阿里云新加坡clb无法部署证书的bug ([c1fbc8c](https://github.com/certd/certd/commit/c1fbc8cd68ae020ef342e4e92f4d9b4869ca1ead))
* 修复阿里云新加坡clb无法部署证书的bug ([3e84e11](https://github.com/certd/certd/commit/3e84e116e863b54c6b4d7db160af372dacc5857f))
* 修复检查github release 插件无法保存最后版本的bug ([a92107c](https://github.com/certd/certd/commit/a92107cc47133883b099d5228b06373e84c8bb50))
* 修复站点监控定时器多次添加的bug ([9361679](https://github.com/certd/certd/commit/936167972fe83e519bc01a0dd961d9c0635d24ab))

### Performance Improvements

* 阿里云dns操作增加重试机制 ([424fd96](https://github.com/certd/certd/commit/424fd96615c05e949af8c837c261c1400bdffba2))
* 优化阿里云nlb支持部署扩展证书 ([9cbdfda](https://github.com/certd/certd/commit/9cbdfda829b231733d54c66c5024d46e6fc11af3))
* 子域名托管帮助链接优化为打开新窗口 ([7c0cdd1](https://github.com/certd/certd/commit/7c0cdd169e2f943e703e433677f2f437d4aa02ee))
* history增加触发类型显示 ([7f6070c](https://github.com/certd/certd/commit/7f6070c960ed7bf02add5ab36436de6573f2f1fa))

## [1.35.1](https://github.com/certd/certd/compare/v1.35.0...v1.35.1) (2025-06-07)

### Bug Fixes

* 某些证书提供商的证书确实commonName导致无法转换证书的问题 ([ac87bc5](https://github.com/certd/certd/commit/ac87bc57e957ea4679707bfd38d6840e26319bed))
* 修复站点监控通知渠道设置无效的bug ([a00453c](https://github.com/certd/certd/commit/a00453c83a58114ce2873dd6e6aaf313f1ce0f87))

### Performance Improvements

* 修改 HTTPS 服务器监听地址 ([e1cf64a](https://github.com/certd/certd/commit/e1cf64ae16d4abfe4299ff16d5088c30cf3c6365))
* 优化流水线页面,增加下次执行时间、查看证书显示 ([c820315](https://github.com/certd/certd/commit/c8203154094fae3d17198747f49f5f41ddf29a4e))
* 站点证书监控支持定时设置,重试次数设置 ([d3c2f8e](https://github.com/certd/certd/commit/d3c2f8eb436e670772d14a54acd6b541c5aa3978))
* 证书申请支持letencrypt profile选项 ([2eb0e54](https://github.com/certd/certd/commit/2eb0e54909d8ad36708e07c12fd598998159bc43))
* aliyun alb支持部署扩展证书 ([2a19b61](https://github.com/certd/certd/commit/2a19b61b7a78620c06396c2cc37cc77d738b6d12))

# [1.35.0](https://github.com/certd/certd/compare/v1.34.11...v1.35.0) (2025-06-05)

### Features

* 完善注释 ([6702ca1](https://github.com/certd/certd/commit/6702ca10a17f5d7dbff789b039f7269496f66b97))
* AWS 中国区 CloudFront 证书部署(IAM 证书) ([8a55bed](https://github.com/certd/certd/commit/8a55beda924b3be2a53b9ba80d9487cefa8bf887))
* **lego:** support for command options ([b84159f](https://github.com/certd/certd/commit/b84159f2f11531f058837c2e82d66499f3740f20))

## [1.34.11](https://github.com/certd/certd/compare/v1.34.10...v1.34.11) (2025-06-05)

### Bug Fixes

* 修复用户最大流水线数量校验的问题 ([919f70a](https://github.com/certd/certd/commit/919f70a5fd2842ca69f96f1659bb5a7ba3f73776))
* 修复中文域名使用cname方式校验无法通过的问题 ([f7d5baa](https://github.com/certd/certd/commit/f7d5baa6d04cb83c572b06e62f885890cfa0143a))
* 修复cv4pve sdk (proxmox插件连接失败时无法正常结束任务的bug) ([49f26b4](https://github.com/certd/certd/commit/49f26b4049a0549b0270395157e96e8f04a68bc4))
* 修复flexcdn部署证书的顶级CA名称显示 ([6467edb](https://github.com/certd/certd/commit/6467edb84324d7c80a85212675dbacedc459df83))
* 修复flexcdn证书commonNames错误的问题 ([ace363f](https://github.com/certd/certd/commit/ace363fa355436e769b27f71cc487d30d6441780))

### Performance Improvements

* 分组选择支持清空选项 ([03e2e99](https://github.com/certd/certd/commit/03e2e9949837b34eb3ea56d14a9e8a5dabc96063))
* 优化cname检查,当有冲突的cname记录时,给出提示 ([e639a8f](https://github.com/certd/certd/commit/e639a8f9f12640ffcca69f1a6a0324459924afbd))
* 增加下载日志按钮 ([6ff509d](https://github.com/certd/certd/commit/6ff509d263c0182645b4692c10b5fedb192db964))
* 站点监控支持批量导入域名和ip ([2d7729d](https://github.com/certd/certd/commit/2d7729dbe98f29088f5f317db2b52cc1ede223a6))
* 支持设置用户有效期 ([6ac3bc5](https://github.com/certd/certd/commit/6ac3bc564f407dad2cd0b0b0744e887387aa5da3))

## [1.34.10](https://github.com/certd/certd/compare/v1.34.9...v1.34.10) (2025-06-03)

### Bug Fixes

* **flexcdn:** fix cert upload and skipSslVerify required ([c48da5d](https://github.com/certd/certd/commit/c48da5dea7f0f0cdeae643b106b4a678acc3b14b))

### Performance Improvements

* 阿里云CLB支持部署到扩展域名 ([0e8339c](https://github.com/certd/certd/commit/0e8339c70190890d449099e1d26e5ed06ff135fb))
* 优化流水线名称过长时的显示 ([6a0cc1b](https://github.com/certd/certd/commit/6a0cc1b1f3ad508f9e4093b3b682b163f12389eb))
* 支持部署到飞牛OS ([ddfd0fb](https://github.com/certd/certd/commit/ddfd0fb81d6638352920261065f1ab8e27bdd564))
* 支持日志写入文件 ([37edbf5](https://github.com/certd/certd/commit/37edbf5824d6aaae68ea1ef7259c6f739d418d2c))

## [1.34.9](https://github.com/certd/certd/compare/v1.34.8...v1.34.9) (2025-05-30)

### Bug Fixes

* 修复Farcdn证书有效期错误的问题 ([1fe4c36](https://github.com/certd/certd/commit/1fe4c367f7128de9ba5e3395ae06bc81e63a7d5a))

### Performance Improvements

* 不止证书自动化,插件解锁无限可能 ([a9b302e](https://github.com/certd/certd/commit/a9b302e38d3328d75df8b2da3d8b914851e55e9c))
* 邮箱支持保存和选择 ([f7b0b44](https://github.com/certd/certd/commit/f7b0b44ef6044bec36510a6f0b06d8dca5bfce49))
* 支持github 新版本检查并发布通知 ([356703c](https://github.com/certd/certd/commit/356703c83ea18c6efb8931402e181280d7b7e696))

## [1.34.8](https://github.com/certd/certd/compare/v1.34.7...v1.34.8) (2025-05-28)

### Bug Fixes

* 更新 1panel API 版本支持v1/v2设置 ([e6195ad](https://github.com/certd/certd/commit/e6195ade3ec54b138825b8d6738f86eb8afdd720))
* 同步更新namesilo接口,修复无法创建和删除dns记录的问题 ([36b02c2](https://github.com/certd/certd/commit/36b02c2cec145c13d4ef29d49aba5b6b4f697df2))
* 修复阿里云 esa 证书获取站点列表错误的问题 ([0c2ea5d](https://github.com/certd/certd/commit/0c2ea5da4c836f8a0df132a3f22d399bd9ee1de9))
* 修复部署到华为cdn,子账号ak查询不到域名的bug ([ebb292a](https://github.com/certd/certd/commit/ebb292a2f7a425c1bc810f59468beb3f1d5bc3f0))
* 修复证书申请任务无法修改dns提供商类型的bug ([8802274](https://github.com/certd/certd/commit/88022747bebe2054223e0241d68d410771405e68))

### Performance Improvements

* 关闭腾讯云证书通知提醒 ([231a875](https://github.com/certd/certd/commit/231a875bb481420c39bf76ec9ff4e50954ab9fe4))
* 优化站点选择组件,切换选择时不刷新列表 ([3a14714](https://github.com/certd/certd/commit/3a147141b1a5d67c92a5ce88a5313eaa62859e03))
* 优化站点ip检查 ([a463711](https://github.com/certd/certd/commit/a463711b03a20120f2a298be15d71ca152d27f21))
* 站点监控支持监控IP ([9cc4c01](https://github.com/certd/certd/commit/9cc4c017ae646a18284e732769b82636feda01d3))
* 支持批量重新运行 ([8189982](https://github.com/certd/certd/commit/818998259ddc75e722196ac5c365038818539b9b))
* farcdn优化 ([a06ef07](https://github.com/certd/certd/commit/a06ef07178ed73c537e21c7d57e5e5144d2c056d))

## [1.34.7](https://github.com/certd/certd/compare/v1.34.6...v1.34.7) (2025-05-26)

### Performance Improvements

* 优化阿里云DCDN插件,支持多选 ([b091657](https://github.com/certd/certd/commit/b091657b5c537acf2442a2bfc345d0a77f5e2c50))
* 支持部署到farcdn ([e08cf57](https://github.com/certd/certd/commit/e08cf57b72128998f487ab6469868052fbce0dba))

## [1.34.6](https://github.com/certd/certd/compare/v1.34.5...v1.34.6) (2025-05-25)

### Bug Fixes

* 修复公共插件配置修改不生效的bug,优化系统设置参数注入时机 ([e1e510c](https://github.com/certd/certd/commit/e1e510ce1e37a5ae82478226b6987a83f22d1ecb))
* 修复又拍云 CDN 设置证书参数和强制 HTTPS 配置报错的bug ([7984b62](https://github.com/certd/certd/commit/7984b625ba6727132f205db8e25f790bce27b2f7))
* 修复lego模式下每次都重新申请证书的bug ([f807b8c](https://github.com/certd/certd/commit/f807b8cb465cc329fa034ecbef94e18ef394f870))
* 优化 RunnableError错误信息展示 ([36bc3ff](https://github.com/certd/certd/commit/36bc3ff22da93ba342c3c1103d7ee2bbcecf44f2))
* **cert:** 修正证书过期时间计算逻辑 ([a3086e6](https://github.com/certd/certd/commit/a3086e6a5bec8b07f5e1d21a2ca8bd969c75bd5c))

### Performance Improvements

* 二次认证页面中,添加动态验证码输入框的焦点控制,提升用户体验 ([bb22f06](https://github.com/certd/certd/commit/bb22f062ed4ab4b5b71938270fe4cc666af6b8e7))
* 添加阿里云 ESA证书部署插件 ([1db1ffd](https://github.com/certd/certd/commit/1db1ffde99ac7e4684fa606ebc4c327f829b3a26))
* 站点证书监控增加通知设置 ([3422a1a](https://github.com/certd/certd/commit/3422a1a59fd0d2c0f17fa9c7e8988ac527ecfdd9))

## [1.34.5](https://github.com/certd/certd/compare/v1.34.4...v1.34.5) (2025-05-19)

### Performance Improvements

* 1panel增加授权测试按钮 ([566b12f](https://github.com/certd/certd/commit/566b12f5d14ce10e8f5cf1807c58f7bf27f0d199))
* 优化钉钉通知标题颜色 ([a560999](https://github.com/certd/certd/commit/a560999d13eed18d08dd32ee530166569e3f8746))
* 优化飞书通知为卡片模式 ([a818a3d](https://github.com/certd/certd/commit/a818a3d293e22fb46979bc77055c05621a6fed81))
* 支持部署到宝塔aaWAF ([094565c](https://github.com/certd/certd/commit/094565ccd619ef671c6c11ce5fb7fd54a7a21d1c))
* aaWaf、cdnfly站点选择支持查询 ([8af3463](https://github.com/certd/certd/commit/8af3463668a40b9b99febb02e3b4e0d9d8d719b4))

## [1.34.4](https://github.com/certd/certd/compare/v1.34.3...v1.34.4) (2025-05-16)

### Bug Fixes

* 修复部署flexcdn问题 ([76b19a4](https://github.com/certd/certd/commit/76b19a4980f8edba5238543b82a7811e1003746c))
* 修复插件导入的bug ([677fec0](https://github.com/certd/certd/commit/677fec0a0b6fceb4966705e471bbfeeda91610c7))
* 修复导入在线插件不生效的bug ([fcf8309](https://github.com/certd/certd/commit/fcf8309c238208281ecb4575b2c3cfe50c11d783))
* 修复自建插件保存丢失部署策略的bug ([863e74d](https://github.com/certd/certd/commit/863e74dd2e3912f950ff5025b5ed0070aeb37035))

### Performance Improvements

* 调整小助手,仅在登录之后显示 ([aebb07c](https://github.com/certd/certd/commit/aebb07c5cc8b1f233b9d203ff017ac60e6971a85))

## [1.34.3](https://github.com/certd/certd/compare/v1.34.2...v1.34.3) (2025-05-15)

### Performance Improvements

* 宝塔插件、1panel 改成完全免费版 ([a53b6cd](https://github.com/certd/certd/commit/a53b6cd28ff2ce5662ada82379ea44a06b179b81))
* 添加 FlexCDN 更新证书插件 ([bf040d4](https://github.com/certd/certd/commit/bf040d4c428d29c06fbaca5e29100e0c583b2b0b))
* 小助手可以关闭 ([3e2101a](https://github.com/certd/certd/commit/3e2101aa5b56548614102e900d59819ce8c7e97c))
* 支持部署到maoyun cdn ([68f333f](https://github.com/certd/certd/commit/68f333fb87ce85eed27436ecb0f76351c0ccb0d1))
* 支持AI分析报错 ([aa96859](https://github.com/certd/certd/commit/aa96859798166426e485947a6590464de189de05))

## [1.34.2](https://github.com/certd/certd/compare/v1.34.1...v1.34.2) (2025-05-11)

### Bug Fixes

* 修复部署到又拍云强制https无效的bug ([2397097](https://github.com/certd/certd/commit/2397097e4ddcb6f593210598e8779ffd44ac3f8f))
* 修复刷新流水线页面后,日志不自动更新的bug ([0b2e28b](https://github.com/certd/certd/commit/0b2e28b62dd5eb6804c602083e65c87a9d1d72d2))

### Performance Improvements

* 集成智能问答机器人 ([9dd4905](https://github.com/certd/certd/commit/9dd49054d18ec436a5029444ca55a38adc682933))
* 支持设置网安备案号 ([d18e431](https://github.com/certd/certd/commit/d18e431e2f08e6b37704032c4ea6fbdd8e971442))
* http方式支持校验443端口 ([d75fcb7](https://github.com/certd/certd/commit/d75fcb7fec421a9a638eaa27fe9378c84b5e0f19))

## [1.34.1](https://github.com/certd/certd/compare/v1.34.0...v1.34.1) (2025-05-05)

### Bug Fixes

* 根据SOA记录判断子域名托管有缺陷,改回手动配置子域名托管记录的方式 ([1b280a2](https://github.com/certd/certd/commit/1b280a2940f9e2d919b0bf23b89cc185be1fa498))
* 修复宝塔授权测试按钮显示错误的bug ([048696e](https://github.com/certd/certd/commit/048696ee9386491bb68592fb3a47d1c900bb68bf))

### Performance Improvements

* 支持部署证书到火山dcdn ([5f85219](https://github.com/certd/certd/commit/5f852194953dc1b4e6336770f417507b8f5a33ad))
* 支持部署证书到unicloud ([a63d687](https://github.com/certd/certd/commit/a63d687f1c573159f0857693f37602b0e1e44072))

# [1.34.0](https://github.com/certd/certd/compare/v1.33.8...v1.34.0) (2025-04-28)

### Bug Fixes

* 修复二次认证登录进入错误账号的bug ([e3930e0](https://github.com/certd/certd/commit/e3930e07172dd7903cb0f6ff26e0e3e828ba3e77))

### Features

* 从yaml文件注册插件 ([deb3893](https://github.com/certd/certd/commit/deb38938204b29543f36d3266249958faaaa6b66))

### Performance Improvements

* 优化cdnfly插件,支持自动匹配域名部署 ([afd59e9](https://github.com/certd/certd/commit/afd59e9933b2650f41c5d47684c171b93b962065))

## [1.33.8](https://github.com/certd/certd/compare/v1.33.7...v1.33.8) (2025-04-26)

### Bug Fixes

* 服务器时间获取不准确的bug ([5d10cbf](https://github.com/certd/certd/commit/5d10cbf18daf94a90a7551641a3b13e3c5fec611))
* 修复复制流水线无效的bug ([3df20a9](https://github.com/certd/certd/commit/3df20a924f32970b052e2588ea20de095f0ea693))
* 修复http上传方式无法清除记录文件的bug ([72a7b51](https://github.com/certd/certd/commit/72a7b51d479602b2c54c6c3ac8d8a0dcb9664e73))
* 修复token过期后,疯狂打印token过期信息的bug ([50a5fa1](https://github.com/certd/certd/commit/50a5fa15bb240a125bbc91d2ce1ff3c835888a77))

### Performance Improvements

* 从域名的soa获取主域名,子域名托管无需额外配置 ([a586a92](https://github.com/certd/certd/commit/a586a92d5e32ea846ac37be52a7ad8c328d89966))
* 七牛oss支持删除过期备份 ([b7113bd](https://github.com/certd/certd/commit/b7113bda2378116d6c116dc583f563cce7cf9f00))
* 数据库备份支持oss ([308d460](https://github.com/certd/certd/commit/308d4600efe2002f199c33b4594d3071784e58ea))
* 支持阿里云中文域名申请 ([b3468cf](https://github.com/certd/certd/commit/b3468cf7f28228d7c9cf68de6b5a9bbeb67f2c6d))
* 支持反向代理增加contextPath路径 ([0088929](https://github.com/certd/certd/commit/0088929622160cc922995de9a563e8061686ff34))
* 支持中文域名 ([162ebfd](https://github.com/certd/certd/commit/162ebfd4e0c25727efb33952d3bbf7420a02e2c3))

## [1.33.7](https://github.com/certd/certd/compare/v1.33.6...v1.33.7) (2025-04-22)

### Performance Improvements

* 添加部署证书至火山 Live ([abea80e](https://github.com/certd/certd/commit/abea80e3ab9b1672aebe1c5d5e856693b29931a8))
* 优化首页插件列表展示 ([9b8f60b](https://github.com/certd/certd/commit/9b8f60b64b5f9a3db7dfa9b3dcbd9201984358d0))
* 证书申请支持51dns ([8638fc9](https://github.com/certd/certd/commit/8638fc91ff34fccaf12ff9874fd3fa9d2a8c18b7))
* 支持51dns ([96a0900](https://github.com/certd/certd/commit/96a0900edc95dcfd9acccf9d13592f12f5a09b3d))
* ssh PTY模式登录设置 ([8385bcc](https://github.com/certd/certd/commit/8385bcc2d7f2411a07748bb5c53f9eaf4d38d7cc))
* ssh伪终端模式优化,windows下不开启 ([42dfe93](https://github.com/certd/certd/commit/42dfe936b773b7bdd82ca3378363252ffffd7b71))

## [1.33.6](https://github.com/certd/certd/compare/v1.33.5...v1.33.6) (2025-04-20)

### Bug Fixes

* 上传商用证书,直接粘贴文本报错的问题;修复无法上传ec加密证书的bug ([5750bb7](https://github.com/certd/certd/commit/5750bb706779da274d8e7a87e71416cb64d2df79))
* 修复下载证书时提示token已过期的问题 ([0e07ae6](https://github.com/certd/certd/commit/0e07ae6ce84dcb9279d3c44060d621566afa593c))

### Performance Improvements

* 更新license时同时绑定url ([78367af](https://github.com/certd/certd/commit/78367af8307f801e778c76d49f0918c21ffe032f))
* 切换到不同的分组后再打开创建对话框,会自动选择分组 ([893dcd4](https://github.com/certd/certd/commit/893dcd4f2487891199ed3e5a3d47a79a75efc942))
* 新增部署到火山引擎ALB/CLB、上传到证书中心 ([c9a3e3d](https://github.com/certd/certd/commit/c9a3e3d9d26f964c7af7b56667936f1414fbf42a))
* 优化/api缓存为0 ([dc05cd4](https://github.com/certd/certd/commit/dc05cd481f186b13375192be965000e6b4b429a5))
* 优化华为cdn插件引用ccm证书 ([b565b4b](https://github.com/certd/certd/commit/b565b4b3b919b71b98ea2517670bc1ef00e00dc9))
* 优化证书流水线创建,支持选择分组 ([d613aa8](https://github.com/certd/certd/commit/d613aa8f3e85d8dc475ef1b62d49394ce7fd7d24))

## [1.33.5](https://github.com/certd/certd/compare/v1.33.4...v1.33.5) (2025-04-17)

### Performance Improvements

* 登录支持双重认证 ([48aef25](https://github.com/certd/certd/commit/48aef25b3f6499d674ca4e4ef16f4c62399fb735))
* 多重认证登录 ([0f82cf4](https://github.com/certd/certd/commit/0f82cf409bc60706ab07e4ca4f272b9a1ca7eecb))
* 优化部署到华为云CDN,支持先上传到ccm,再使用证书id部署,修复offline状态下导致部署报错的bug ([79df39a](https://github.com/certd/certd/commit/79df39acabab10ae7e1864dadcdc186bb007a3c5))

## [1.33.4](https://github.com/certd/certd/compare/v1.33.3...v1.33.4) (2025-04-15)

### Bug Fixes

* 补充类型断言 ([2143dff](https://github.com/certd/certd/commit/2143dff2ae96e6a78bef9f0498e36f8cd9e6941f))
* 修复腾讯云部署到任意资源插件,无法使用之前已上传的腾讯云证书问题 ([32c714d](https://github.com/certd/certd/commit/32c714d1b6e68c71a74a7452115040c87ac4bfdc))

### Performance Improvements

* 插件支持导入导出 ([cf8abb4](https://github.com/certd/certd/commit/cf8abb45282070c8ba91469f93fd379fabf1f74a))
* 支持上传证书到华为云CCM ([cfd3b66](https://github.com/certd/certd/commit/cfd3b66be9ebf53a26693057e70ed60c3f116be9))

## [1.33.3](https://github.com/certd/certd/compare/v1.33.2...v1.33.3) (2025-04-14)

### Bug Fixes

* 修复登录错误次数过多阻止再次登录逻辑 ([bf4d191](https://github.com/certd/certd/commit/bf4d191c8bd2f9209eb6768f662b9c77de99e998))

## [1.33.2](https://github.com/certd/certd/compare/v1.33.1...v1.33.2) (2025-04-12)

### Bug Fixes

* 修复某些情况下无法输出日志的bug ([70101bf](https://github.com/certd/certd/commit/70101bfa7ade65678d9202c804bbae2cb808b594))

### Performance Improvements

* 修复内置插件分页查询逻辑 ([a2710dd](https://github.com/certd/certd/commit/a2710ddc2525e4e637fd157f0180e6d3b801c8be))

## [1.33.1](https://github.com/certd/certd/compare/v1.33.0...v1.33.1) (2025-04-12)

### Bug Fixes

* 修复阿里云cdn证书部署失败问题,增加certname参数传入 ([965dc2c](https://github.com/certd/certd/commit/965dc2cb476f690af716f291c6b20ba98be0c8f0))
* 修复ssh插件报length空指针的bug ([9c4cbe1](https://github.com/certd/certd/commit/9c4cbe17a22b548611cf1fbefecc83a421788e42))

### Performance Improvements

* 镜像支持armv7 ([f78cbed](https://github.com/certd/certd/commit/f78cbed4d817859721fdafe7d348864848d0dfbf))

# [1.33.0](https://github.com/certd/certd/compare/v1.32.0...v1.33.0) (2025-04-11)

### Bug Fixes

* 升级mysql驱动,支持mysql8最新版本的认证 ([2f5ed3a](https://github.com/certd/certd/commit/2f5ed3aead97641f2c80d692a50226839016df0b))
* 修复eab授权,没有email绑定的bug ([2f1683b](https://github.com/certd/certd/commit/2f1683b26acebbfb7d6e2d751435be04a4e7cab4))

### Features

* 支持在线自定义插件,无需源码开发 ([d0d9d68](https://github.com/certd/certd/commit/d0d9d68fe6740f6ff49fe40b7c9917c5a2e4b442))
* **lego:** support set key type ([f3bf4fa](https://github.com/certd/certd/commit/f3bf4faee0be5bdbfdbcf70a502849ed4c8ed4c4))
* release image to ghcr ([9b536af](https://github.com/certd/certd/commit/9b536af9e656dc89e2a87078c129cad6f591e467))

### Performance Improvements

* 修复tab页缓存问题 ([64e5449](https://github.com/certd/certd/commit/64e5449ab3c6b219b0e89eddad14bfb6b71a0650))
* 隐藏运行策略选项 ([2951df0](https://github.com/certd/certd/commit/2951df0cd94c23e2efee84ff1b843055aac56cae))
* 增加手动上传证书功能说明 ([5d083a1](https://github.com/certd/certd/commit/5d083a153637caddbc6f44e915d9fb2d1ae87b33))

# [1.32.0](https://github.com/certd/certd/compare/v1.31.11...v1.32.0) (2025-04-04)

### Bug Fixes

* 创建cname记录移除域名两端的空格 ([903a413](https://github.com/certd/certd/commit/903a4131ab5f42c8286cd2150ed1032d486fda2f))
* 修复从本地dns获取记录报错的bug ([c39b1bf](https://github.com/certd/certd/commit/c39b1bf823ddc6216bed2049e4c87e6107def08a))

### Features

* 优化证书申请速度,修复某些情况下letsencrypt 校验失败的问题 ([857589b](https://github.com/certd/certd/commit/857589b365c6f709e0ae67914d2f50ce182e6dd6))

### Performance Improvements

* 优化华为dns解析记录创建和删除问题 ([0948c5b](https://github.com/certd/certd/commit/0948c5bc691d2ee6eb47c72a85da1b7453361878))
* 又拍云支持云存储 ([9339b78](https://github.com/certd/certd/commit/9339b78f801d193472c0af25749e8e7a27ffb7af))
* 又拍云支持云存储 ([8449f85](https://github.com/certd/certd/commit/8449f8580da90c1f6b5d02d07c3236ebaf6cf161))

## [1.31.11](https://github.com/certd/certd/compare/v1.31.10...v1.31.11) (2025-04-02)

### Bug Fixes

* 修复ssh支持键盘事件登录 ([8145808](https://github.com/certd/certd/commit/8145808c4370364377b4ffe3ae88ff465b49f20b))

### Performance Improvements

* 支持部署到京东云cdn ([6f17c70](https://github.com/certd/certd/commit/6f17c700b84965baa01b40fe2abaa0a91bcbaffd))
* 支持京东云dns申请证书 ([04d79f9](https://github.com/certd/certd/commit/04d79f9117670be504960b018fd49ae3bf7c1c11))

## [1.31.10](https://github.com/certd/certd/compare/v1.31.9...v1.31.10) (2025-03-29)

### Performance Improvements

*  tab增加图标显示 ([a03ae5a](https://github.com/certd/certd/commit/a03ae5a216a1df2c1d3da12ae18dcd0f089a92d3))
* 升级lego版本到4.22.2 ([4e15556](https://github.com/certd/certd/commit/4e15556e5e8100719497edb1729570d5a29668e1))
* 优化华为dns接口报错信息输出 ([bf30b7a](https://github.com/certd/certd/commit/bf30b7afaef623dd8126570344f1fcc2c06f1215))

## [1.31.9](https://github.com/certd/certd/compare/v1.31.8...v1.31.9) (2025-03-28)

### Bug Fixes

* 修复华为云dns接口请求出错的bug ([caa15b4](https://github.com/certd/certd/commit/caa15b47355363cbb8847f415ff12363cd53eeda))
* 修复某些情况下站点证书监控报undefined.includes的错误 ([0b6618f](https://github.com/certd/certd/commit/0b6618ff709322a0eeba78953c8c6e9d073d083a))
* 修复网站证书监控https port设置无效的bug ([cc8da0c](https://github.com/certd/certd/commit/cc8da0cf130f0c469371b59ac5bd04567f4a4414))

### Performance Improvements

* 站点监控保存时异步检查 ([993bc74](https://github.com/certd/certd/commit/993bc7432fce2d954e9897ed85b54f22150bfc7e))
* dns支持火山引擎 ([99ff879](https://github.com/certd/certd/commit/99ff879d93658c29ea493a4bde7e9e3f85996d64))

## [1.31.8](https://github.com/certd/certd/compare/v1.31.7...v1.31.8) (2025-03-26)

### Bug Fixes

* 修复编辑通知勾选默认,导致出现多个默认通知的bug ([6cd7bdd](https://github.com/certd/certd/commit/6cd7bddc37da8b0d7b9860fd9a26ddfe84c869a7))
* 修复网站监控无法设置端口的bug ([27a8a57](https://github.com/certd/certd/commit/27a8a57cf52b4bf83d628aa3049be1efaa74f29c))
* 修复lego模式无法创建流水线的bug ([687bb8a](https://github.com/certd/certd/commit/687bb8a2376d0de7b72739a174e4a9560581f866))

### Performance Improvements

* 优化通知格式 ([c3c5006](https://github.com/certd/certd/commit/c3c5006daa39c20624cb58864f2b92b230a38a7a))
* 优化scp上传 ([e51123a](https://github.com/certd/certd/commit/e51123a95131cc76d655937488caf08956a67020))
* 优化txt本地校验效率 ([fd507f2](https://github.com/certd/certd/commit/fd507f269253607e68c5c099c99e0de11636f229))
* 支持又拍云cdn ([fd0536b](https://github.com/certd/certd/commit/fd0536bd4b41f15b6b5d42e0b447f0dcbf73b8a8))
* 支持又拍云cdn ([57389a7](https://github.com/certd/certd/commit/57389a79a1a61c45d081712562f8b33c9633158e))

## [1.31.7](https://github.com/certd/certd/compare/v1.31.6...v1.31.7) (2025-03-24)

### Performance Improvements

* 增加服务器时间警告 ([d66ade4](https://github.com/certd/certd/commit/d66ade4e4783850b6c7625c6f164a5a0fc0aa509))
* 支持部署到lucky ([e18e399](https://github.com/certd/certd/commit/e18e399ce6529e8c7e36b56c5f674cfdbbd3d3d1))

## [1.31.6](https://github.com/certd/certd/compare/v1.31.5...v1.31.6) (2025-03-24)

### Bug Fixes

* 修复dns.la无法申请证书的bug ([90b045a](https://github.com/certd/certd/commit/90b045af6d1a4f46986e4b118885c1f050df067c))

### Performance Improvements

* 上传到主机支持scp方式 ([05b6159](https://github.com/certd/certd/commit/05b6159802b9e85b6a410361b60b5c28875b48e7))
* 优化图标 ([c56f48c](https://github.com/certd/certd/commit/c56f48c1e3c54c4e203fafb380d9091d75681b7e))

## [1.31.5](https://github.com/certd/certd/compare/v1.31.4...v1.31.5) (2025-03-22)

### Bug Fixes

* 修复通知选择器无法选择的bug ([f7b88f9](https://github.com/certd/certd/commit/f7b88f9e3b7d9d9122e4fd2003a20c555bd50c7d))
* 修复证书流水线创建失败的bug ([736fe03](https://github.com/certd/certd/commit/736fe038ebda56648bcc4c12884a700341d2c049))

## [1.31.4](https://github.com/certd/certd/compare/v1.31.3...v1.31.4) (2025-03-21)

### Bug Fixes

* 修复站点监控通知通过webhook发送失败的bug ([9be1ecc](https://github.com/certd/certd/commit/9be1ecc8aab3ea23dd0dc2dab3688f4edb90ef2c))
* 修复dns.la域名申请失败的bug ([1de8eee](https://github.com/certd/certd/commit/1de8eee6ea8307f3c11626af75303d3cc104bb95))

### Performance Improvements

* 宝塔支持doker站点证书部署 ([589a373](https://github.com/certd/certd/commit/589a373142ef7f50d64d3aa767a90b1f4b64da93))
* 保存调整后的列宽 ([873f2b6](https://github.com/certd/certd/commit/873f2b618b9d7320045baf69d6da83afe48a780f))
* 创建证书流水线时,支持更多参数展开 ([36aa7f8](https://github.com/certd/certd/commit/36aa7f82b078a053a102331b3c6f132fb9d492f9))
* 流水线页面可以鼠标按住左右拖动 ([d85a02f](https://github.com/certd/certd/commit/d85a02feeb3183c5abd6c1ea790d5923a32d7271))
* 流水线增加上传证书快捷方式 ([425bba6](https://github.com/certd/certd/commit/425bba67c539b734e2a85a83a4f9ecc9b2434fb4))
* 手动上传证书部署流水线 ([fbb66f3](https://github.com/certd/certd/commit/fbb66f3c4389489aa8a43b194d82bc8cf391607b))
* 优化选择任务时手机版展示效果 ([d01004d](https://github.com/certd/certd/commit/d01004d53071a75ac91ee21cc96bde9369f77ff3))
* 站点监控,手动测试也发通知 ([729b19c](https://github.com/certd/certd/commit/729b19c8da60d5efb5baef7cf8df0518e7f6b471))
* 站点证书监控支持模糊查询 ([0069c0e](https://github.com/certd/certd/commit/0069c0e3992946a8dd6410f299d4fc974ef0e76b))
* 支持飞书通知 ([b82e1dc](https://github.com/certd/certd/commit/b82e1dcd6217b09a7d7e21cd648bb31de320cadf))
* 支持手动上传证书并部署 ([a9fffa5](https://github.com/certd/certd/commit/a9fffa5180c83da27b35886aa2e858a92a2c5f94))

## [1.31.3](https://github.com/certd/certd/compare/v1.31.2...v1.31.3) (2025-03-13)

### Bug Fixes

* 修复阿里云fc获取不到列表的bug ([474b337](https://github.com/certd/certd/commit/474b3372d8ce98e6d45900bf8046bc0b3f220686))

### Performance Improvements

* 1panel支持 apikey方式授权 ([170b2af](https://github.com/certd/certd/commit/170b2afb0e3b125e4ed057f633fe895b5ac3ac22))
* 套餐支持3天7天等选项 ([0d71a8e](https://github.com/certd/certd/commit/0d71a8ee501a0e5bb69decf07e8729026e9d85bf))
* 证书仓库增加有效期显示 ([be87124](https://github.com/certd/certd/commit/be87124ada7a093f281ca29a45c86b4ea4644ead))
* 支持部署到天翼云CDN ([82a72e0](https://github.com/certd/certd/commit/82a72e0b497efa043d342ad0e33c083a2de79a05))
* 支持dns.la ([ee8af18](https://github.com/certd/certd/commit/ee8af18d0ac0af82544d6dda1e4b4c678b733041))
* cf授权支持配置http代理 ([27386ea](https://github.com/certd/certd/commit/27386ea04d3c1a5aebe3cfdd7ac48185eaa76629))

## [1.31.2](https://github.com/certd/certd/compare/v1.31.1...v1.31.2) (2025-03-12)

### Bug Fixes

* 修复cname记录查找bug ([95fb4e3](https://github.com/certd/certd/commit/95fb4e3e8be6ca13cc43b451f6141d62190ba453))

## [1.31.1](https://github.com/certd/certd/compare/v1.31.0...v1.31.1) (2025-03-11)

### Performance Improvements

* 一些手机端适配优化 ([5b8d5dd](https://github.com/certd/certd/commit/5b8d5dd97536456a9d5d1384216eac1093b2dc3d))

# [1.31.0](https://github.com/certd/certd/compare/v1.30.6...v1.31.0) (2025-03-10)

### Bug Fixes

* 修复CDN插件我爱云因更换接口导致部署失败的问题 ([5641c19](https://github.com/certd/certd/commit/5641c19502970f67af19709bddf8c781b1a25bdc))
* 修复CDN插件我爱云因更换接口导致部署失败的问题 ([0110dfd](https://github.com/certd/certd/commit/0110dfdb70b12dfb0a7a067717f3773ed75aae7c))
* 修复webhook headers value中带等号是解析错误的bug ([1fe3365](https://github.com/certd/certd/commit/1fe3365e10c464c4c60c82f424cf74fe35b883e0))
* ProxmoxUploadCert 增加强制部署证书 ([441b15e](https://github.com/certd/certd/commit/441b15ed2fe5a143a5bd5508613b3816ddbff596))

### Performance Improvements

* 历史记录查看详情,可以切换到对应的历史记录日志上去 ([082802e](https://github.com/certd/certd/commit/082802e1197156837800f814728ee0f6b300b18c))
* 流水线同一个阶段任务优化为并行执行 ([efa9c74](https://github.com/certd/certd/commit/efa9c748c5c07fc950af3db742ef9310f1ac9a4b))
* 升级midwayjs版本 ([057b0b4](https://github.com/certd/certd/commit/057b0b4565e19bb93195633f767b2942e8e40e59))
* 是否允许爬虫爬取增加ui设置选项 ([779db9d](https://github.com/certd/certd/commit/779db9da705d2dfef36fec21f52bd38af9fc5f2e))
* 通知支持钉钉群聊机器人 ([fc8bef5](https://github.com/certd/certd/commit/fc8bef5aae522d75d408d8c3aa74543269da5398))
* 易支付支持固定支付方式,适合没有收银台版本使用 ([81df96b](https://github.com/certd/certd/commit/81df96bf4542ce8d8ef4a428a4460dd554e4719a))
* 支持易盾RCDN部署 ([065713c](https://github.com/certd/certd/commit/065713cdb6953d16df08585c316c1a7a8eaec437))

## [1.30.6](https://github.com/certd/certd/compare/v1.30.5...v1.30.6) (2025-02-24)

### Performance Improvements

* 禁止爬虫爬取本网站 ([5164116](https://github.com/certd/certd/commit/5164116bde60dabac774cdf94f5317ff386e95ca))
* 上传到阿里云证书名称后缀增加毫秒时间戳 ([9f0ee21](https://github.com/certd/certd/commit/9f0ee219d02907ffe128a5cf10173397d934ccd7))
* 支持部署到阿里云FC3.0 ([bcaf54d](https://github.com/certd/certd/commit/bcaf54d4cb7bc469486aae6cdb127ae017eb3abb))
* 支持新版本LeCDN ([44d43f4](https://github.com/certd/certd/commit/44d43f45cb9094619df7494c2a64a51ba77ad116))

## [1.30.5](https://github.com/certd/certd/compare/v1.30.4...v1.30.5) (2025-02-14)

**Note:** Version bump only for package root

## [1.30.4](https://github.com/certd/certd/compare/v1.30.3...v1.30.4) (2025-02-14)

### Bug Fixes

* 适配最新版1panel密码编码方式 ([78044c0](https://github.com/certd/certd/commit/78044c062e20cdd04f08baef9fb6745bf25eddcf))

## [1.30.3](https://github.com/certd/certd/compare/v1.30.2...v1.30.3) (2025-02-13)

### Bug Fixes

* 修复腾讯云CLB多域名同证书部署报错的bug ([c3a5542](https://github.com/certd/certd/commit/c3a55429357e78f4b78c9592d3e5897db2d4d549))
* 修复新版本1panel密码需要加密,无法登录的问题 ([ada0b71](https://github.com/certd/certd/commit/ada0b7106e97e551783829e4e719f76793a7123d))

## [1.30.2](https://github.com/certd/certd/compare/v1.30.1...v1.30.2) (2025-02-09)

### Bug Fixes

* 当前置任务被删除时进行校验 ([c89686a](https://github.com/certd/certd/commit/c89686a2fda251484930f0ae715417b618c21690))
* 修复cloudflare删除解析记录报错的bug ([00c2da4](https://github.com/certd/certd/commit/00c2da444f84adb89f3f1226d03294d7c6e3e4f1))

### Performance Improvements

* 上传自定义证书 ([75a38d9](https://github.com/certd/certd/commit/75a38d95f305b4271d9106babe7cffc1c89ae8f3))

## [1.30.1](https://github.com/certd/certd/compare/v1.30.0...v1.30.1) (2025-01-20)

### Bug Fixes

* 修复部署到阿里云ALB、NLB插件加载混乱的bug ([6ab83b6](https://github.com/certd/certd/commit/6ab83b662a2c5e715b9cb7eb1244de2ebb7f47b0))
* 修复腾讯clb重复执行会报错的bug ([e95d29f](https://github.com/certd/certd/commit/e95d29f446d06eced315a3087fc9e105a30b20bd))
* 修复tg消息内容中存在.和*就会发送失败的bug ([ae5dfc3](https://github.com/certd/certd/commit/ae5dfc3bee950267123ae2fbd1c11e7ce36626ea))

### Performance Improvements

* 创建流水线时,默认成功时也发送通知 ([52ae690](https://github.com/certd/certd/commit/52ae6902d203ca56e0312692b50c55cb6ddd3e39))
* http方式校验,选择sftp时,支持修改文件访问权限比如777 ([15d6eaf](https://github.com/certd/certd/commit/15d6eaf5532ed25acd4f8d58c429353a2f44206c))

# [1.30.0](https://github.com/certd/certd/compare/v1.29.5...v1.30.0) (2025-01-19)

### Bug Fixes

* 修复查看任务日志偶发性无法自动滚动底部的bug ([7e482f7](https://github.com/certd/certd/commit/7e482f798c0142bce1866f84676cb40210f9638a))
* 修复namesilo ttl太短的问题 ([865f26d](https://github.com/certd/certd/commit/865f26d75c0d3dd4dc8b41448f8830068e45957c))

### Features

* 支持open api接口,根据域名获取证书 ([52a4fd3](https://github.com/certd/certd/commit/52a4fd33180e9b3f71b8dc9f7671d7cd8e448c3b))

### Performance Improvements

* 证书仓库 ([91e7f45](https://github.com/certd/certd/commit/91e7f45a1c5ea1e0ec0aa3236b80028f03a6d0aa))
* 支持部署到阿里云ALB ([653940a](https://github.com/certd/certd/commit/653940a0ca64fc380178c1b0b58ae0af64dfaf07))
* 支持部署到阿里云NLB、SLB ([c085bac](https://github.com/certd/certd/commit/c085bac5d877c4250a8a79e17eb8673b8e4fc89c))
* 支持部署到腾讯云直播 ([417d37b](https://github.com/certd/certd/commit/417d37b199b79a42f790f9edab8f178eedf8fbf7))
* 支持部署证书到proxmox ([d10795e](https://github.com/certd/certd/commit/d10795ecd97eb8cf2ffa46aabfdbfc6812636396))

## [1.29.5](https://github.com/certd/certd/compare/v1.29.4...v1.29.5) (2025-01-07)

### Bug Fixes

* 修复复制到本机插件,pfx格式复制时报错的bug ([f57116d](https://github.com/certd/certd/commit/f57116d2bebf33e47ad93e0b39c4efe8e4aea25c))
* 修复授权管理,点击了查看原文按钮后,无法修改值的bug ([85c99f7](https://github.com/certd/certd/commit/85c99f7f80761ac6efaf3255c03b933442db1686))

## [1.29.4](https://github.com/certd/certd/compare/v1.29.3...v1.29.4) (2025-01-06)

### Bug Fixes

* 修复站点监控域名校验无法通过的bug ([1cb4a53](https://github.com/certd/certd/commit/1cb4a539cc523721ffd4b22d40d0e3d2d68cd915))

### Performance Improvements

* 优化腾讯云CLB插件,支持非sni情况,sni情况支持填写多个域名 ([635b042](https://github.com/certd/certd/commit/635b042690637bff85e97e07c7aac4b87a8a124b))

## [1.29.3](https://github.com/certd/certd/compare/v1.29.2...v1.29.3) (2025-01-04)

### Bug Fixes

* 修复系统级授权无法查看密钥的bug ([8644348](https://github.com/certd/certd/commit/8644348fc41ae2e1672f946ca37e5d3a674e0218))

### Performance Improvements

* 优化站点证书检查页面,检查增加3次重试 ([e6dd7cd](https://github.com/certd/certd/commit/e6dd7cd54a3e23897031b5df6e0c3cdc0545d35a))
* 优化acme sdk ([54db744](https://github.com/certd/certd/commit/54db74428259de64d12230c2ab7353ae11197bbc))
* 支持http校验方式申请证书 ([405591c](https://github.com/certd/certd/commit/405591c5d08fa1a3b228ee3980199e7731cfec4a))
* http校验方式,支持七牛云oss、阿里云oss、腾讯云cos ([3f74d4d](https://github.com/certd/certd/commit/3f74d4d9e5f5d0e629b44cff1895b3f7a8fbcafc))

## [1.29.2](https://github.com/certd/certd/compare/v1.29.1...v1.29.2) (2024-12-25)

### Bug Fixes

* 修复套餐关闭状态下,仍然限制用户流水线数量的bug ([66fb9e5](https://github.com/certd/certd/commit/66fb9e5f49491f9c159363b48af14720a37673b1))

## [1.29.1](https://github.com/certd/certd/compare/v1.29.0...v1.29.1) (2024-12-25)

### Bug Fixes

* 免费套餐支持购买 ([f5ec987](https://github.com/certd/certd/commit/f5ec9870fd6af1f0c9099852bbdb4d07813ccce8))
* 修复某处金额转换丢失精度的bug ([d2d6f12](https://github.com/certd/certd/commit/d2d6f12218cbe7bd55f4ae082b93084be85f0a7b))
* 修复新版本小红点显示错误问题 ([fe4786e](https://github.com/certd/certd/commit/fe4786e168afe03a5243dd67971476c348339809))

### Performance Improvements

* 用户创建证书流水线没有购买套餐或者超限时提前报错 ([472f06c](https://github.com/certd/certd/commit/472f06c2d190d0ae48e8b53c18bc278437656a1c))
* 优化插件名称显示 ([26adf7d](https://github.com/certd/certd/commit/26adf7d437e674385f26a8f92fded6521a620671))

# [1.29.0](https://github.com/certd/certd/compare/v1.28.4...v1.29.0) (2024-12-24)

### Bug Fixes

* 修复手机模式下,查询框被文字遮盖的bug ([040788c](https://github.com/certd/certd/commit/040788c793642c3bb2a3ede87fe30fcf3be471bd))
* 修复左侧菜单收起时无法展开子菜单的bug ([0056223](https://github.com/certd/certd/commit/005622307e612717a5408aa1484717ef03003a22))

### Features

* 基础版不再限制流水线数量 ([cb27d4b](https://github.com/certd/certd/commit/cb27d4b4906b2782eaceb0a95bbdc5d0534370d2))
* 套餐购买支持易支付、支付宝支付 ([faa28f8](https://github.com/certd/certd/commit/faa28f88f954cba4c1dd29125562e5acd2fd99af))
* 用户套餐,用户支付功能 ([a019956](https://github.com/certd/certd/commit/a019956698acaf2c4beb620b5ad8c18918ead6a1))
* 站点证书监控 ([9c8c7a7](https://github.com/certd/certd/commit/9c8c7a781223f4217f45510db1e89495600e3cd5))
* 支持微信支付 ([45d6347](https://github.com/certd/certd/commit/45d6347f5b6199493b11aabdd74177f6dca2cea4))

### Performance Improvements

* 调整创建证书表单字段的顺序 ([d393521](https://github.com/certd/certd/commit/d3935219f2aa50d6662c5b5ebf7ee25ad696ab2b))
* 同一时间只允许一个套餐生效 ([8ebf95a](https://github.com/certd/certd/commit/8ebf95a222a900d1707716c7b1f3b39f8a6d8f94))
* 用户名支持修改 ([89c7f07](https://github.com/certd/certd/commit/89c7f070343e86453c84677ebe1669f9b266d871))
* 优化证书申请跳过的状态显示,成功通知现在在跳过时不会发送 ([67d762b](https://github.com/certd/certd/commit/67d762b6a520f1fa24719a124e5ae975a81f5f82))
* 站点证书监控通知发送,每天定时检查 ([bb4910f](https://github.com/certd/certd/commit/bb4910f4e57234e42b44505f4620ae7af66025c5))
* 支持一体证书 ([53c38cf](https://github.com/certd/certd/commit/53c38cf714a6f7486abbf1d71c9f48f56a790100))
* 支持plesk网站证书部署 ([eda45c1](https://github.com/certd/certd/commit/eda45c1528199648b3970505e87f492d398226cd))

## [1.28.4](https://github.com/certd/certd/compare/v1.28.3...v1.28.4) (2024-12-12)

### Bug Fixes

* 修复证书成功通知发送失败的bug ([0f5c690](https://github.com/certd/certd/commit/0f5c69040ba77340c909813220a26bc7ddada3ea))

### Performance Improvements

* 群晖支持6.x ([79f7ec4](https://github.com/certd/certd/commit/79f7ec4672f4fd5744cc45e4a6f104da943f4026))

## [1.28.3](https://github.com/certd/certd/compare/v1.28.2...v1.28.3) (2024-12-12)

### Bug Fixes

* 修复没有配置eab时,报order无法读取的问题 ([657a2ae](https://github.com/certd/certd/commit/657a2ae032e6f61ac27fbdd26c7bf169c041219e))
* 修复授权被删除后,无法清空的bug ([b45977c](https://github.com/certd/certd/commit/b45977c29a29084c11e496bec3415eaaebafdd74))
* mysql下access.setting字段改成text ([b7f5740](https://github.com/certd/certd/commit/b7f5740c57743914f754f3b4fdd94b59a2e8338c))

### Performance Improvements

* 点击版本红点按钮,跳转到升级帮助页面 ([454fbda](https://github.com/certd/certd/commit/454fbda581bbe22abca5b91e5086ea9d9d58a020))
* 通知标题优化 ([ff083ce](https://github.com/certd/certd/commit/ff083ce6848a8bee3c8248e4b881086ae1517c28))
* 支持腾讯虚拟机开关机([@wujingke](https://github.com/wujingke)) ([8039e8b](https://github.com/certd/certd/commit/8039e8baf83c82d03f1a6198cf61c372026b962b))
* 支持aws cloudfront ([0ae39f1](https://github.com/certd/certd/commit/0ae39f160a7c6b6696b3bf513d68aa28905810ad))

## [1.28.2](https://github.com/certd/certd/compare/v1.28.1...v1.28.2) (2024-12-09)

### Bug Fixes

* 修复创建流水线通知设置无效的bug ([498cf34](https://github.com/certd/certd/commit/498cf34999fddfa24ce088e2e678469fa669abb8))
* 修复流水线分组可以被所有人看见的bug ([a0e838d](https://github.com/certd/certd/commit/a0e838d1eec918e5dc92fe95dc72ac14facb930e))

### Performance Improvements

* 优化数据表索引 ([228fdf0](https://github.com/certd/certd/commit/228fdf0a0d28013f5dd156a97bbde80537e8e97e))
* 支持mysql ([7cde1fd](https://github.com/certd/certd/commit/7cde1fdc4a9ed851900d231a5460c8dbfbcd148e))

## [1.28.1](https://github.com/certd/certd/compare/v1.28.0...v1.28.1) (2024-12-08)

### Bug Fixes

* 修复cname排查方法 nslookup命令显示黑色的问题 ([3dfeeec](https://github.com/certd/certd/commit/3dfeeec899d7d0d7292695ce410f78548e076c03))

### Performance Improvements

* 通知选择器优化 ([2c0cbdd](https://github.com/certd/certd/commit/2c0cbdd29ecb74cc939b2ae7ee86b8d40f70ba31))
* 新增七牛云插件分组 ([49e7dc5](https://github.com/certd/certd/commit/49e7dc56e1a95fbdea3e30cdeb945b48415b69e3))
* 新增server酱3通知 ([6aa4872](https://github.com/certd/certd/commit/6aa487269c9f6862e188b37a0d6c73f79c937d94))
* 支持邀请奖励 ([618ec93](https://github.com/certd/certd/commit/618ec937866b24ebcf8164db43acb1ed66a5b329))
* 支持易发云短信 ([94fa77f](https://github.com/certd/certd/commit/94fa77fcd2b9bea294fb05736c0d8cdc81f56103))
* cname value优化 ([e8c9c2a](https://github.com/certd/certd/commit/e8c9c2a47d47048ae743b16f7bc932dbe18a89e9))
* favicon支持自定义 ([8b9c47d](https://github.com/certd/certd/commit/8b9c47daf194515006689a212ae9cf586bdf5993))

# [1.28.0](https://github.com/certd/certd/compare/v1.27.9...v1.28.0) (2024-11-30)

### Bug Fixes

* 修复自定义webhook contextType的bug ([7e5ea0c](https://github.com/certd/certd/commit/7e5ea0cee003acda952d922ca70592f1e8a2ed80))

### Features

* 手机号登录、邮箱验证码注册 ([7b55337](https://github.com/certd/certd/commit/7b55337c5edb470cca7aa62201eda8d274784004))

### Performance Improvements

* 部署到IIS插件 ([1534f45](https://github.com/certd/certd/commit/1534f4523633265d219d7b3a249a9ea1af99c512))
* 登录失败增加重试次数限制及冷却时间 ([954b6df](https://github.com/certd/certd/commit/954b6df3608695fe074130f8149a33e311d80cc4))
* 流水线支持批量修改分组,批量删除 ([a847e66](https://github.com/certd/certd/commit/a847e66c4fc843b98f1520b2b8072d3586ce8b81))
* 取消docker-compose的dns配置 ([87bbf6f](https://github.com/certd/certd/commit/87bbf6f14080b9fa287c250d7fc4d33279c83ff7))
* 首页新增修改密码提示 ([0772d3b](https://github.com/certd/certd/commit/0772d3b3fd24afdde4086d9f09ef19d037b431b4))
* 选项显示图标 ([aedc462](https://github.com/certd/certd/commit/aedc46213571a3bd93809b7af7fa17a08d546237))
* 优化七牛云cdn,获取域名列表可以选择 ([5a20242](https://github.com/certd/certd/commit/5a20242111d6bd255b25dac86fe1f062c8543096))
* 优化七牛云cdn部署,保持http2和forceHttp设置,当未开启https时,主动开启https ([196f7d9](https://github.com/certd/certd/commit/196f7d9dc23d7dd96b663c686542e85270b81aef))
* 优化证书申请成功通知发送方式 ([8002a56](https://github.com/certd/certd/commit/8002a56efc5998aa03db5711ae87f9eb4bc9e160))
* 支持短信验证码登录 ([387bcc5](https://github.com/certd/certd/commit/387bcc5fa418cdeea81a06da5e3f8cd6b43cd082))
* 支持威联通证书部署 ([0d8913e](https://github.com/certd/certd/commit/0d8913ea2f56fdebbcc9bb207eae59e8ddbb8cad))
* 自定义webhook显示详细的错误信息 ([3254afc](https://github.com/certd/certd/commit/3254afc75640eed3729d0fc02a818fefbe5c7fc3))

## [1.27.9](https://github.com/certd/certd/compare/v1.27.8...v1.27.9) (2024-11-26)

### Performance Improvements

* 通知支持自定义webhook、anpush、iyuu、server酱 ([cbccd9e](https://github.com/certd/certd/commit/cbccd9e3d0a4c24aba772af62734666d40b22c57))
* 通知支持vocechat、bark、telegram、discord、slack ([642f57f](https://github.com/certd/certd/commit/642f57ff6d7152a9e14f59c7fc0e32a6b1751fb7))

## [1.27.8](https://github.com/certd/certd/compare/v1.27.7...v1.27.8) (2024-11-25)

**Note:** Version bump only for package root

## [1.27.7](https://github.com/certd/certd/compare/v1.27.6...v1.27.7) (2024-11-25)

### Bug Fixes

* 修复关键字查询bug ([fab6660](https://github.com/certd/certd/commit/fab66606b35a540fac31fee902331ba1ffdebc16))
* 修复CNAME时子域名级数超出限制的问题 ([3af6d96](https://github.com/certd/certd/commit/3af6d96e6e353c9b2111cff81679b79c55195a0a))

### Performance Improvements

* 谷歌EAB绑定邮箱改成必填 ([81a8123](https://github.com/certd/certd/commit/81a8123725d7bf4bd6a32a64a066bd760b7b6a7f))
* 华为云密钥获取提示及访问链接 ([de43391](https://github.com/certd/certd/commit/de43391e4c12dc3ad976f8fa8787f4eb70a41e75))
* 通知管理 ([d9a00ee](https://github.com/certd/certd/commit/d9a00eeaf72735ced67c59d7983d84e3c730064a))
* 通知渠道支持测试按钮 ([b54ae27](https://github.com/certd/certd/commit/b54ae272ebc2d31b32b049d44e2299a6be7f153c))
* 优化插件开发,dnsProvider无需写http logger 变量 ([fcbb5e4](https://github.com/certd/certd/commit/fcbb5e46a112174150a62648319b8224fce3b7ed))
* 支持部署到阿里云WAF ([c96fcb7](https://github.com/certd/certd/commit/c96fcb7afced979435cffa73591275008033c90d))
* 支持企业微信群聊机器人通知 ([b805a29](https://github.com/certd/certd/commit/b805a2925984144a31575b8aaa622f0c30d41b56))

## [1.27.6](https://github.com/certd/certd/compare/v1.27.5...v1.27.6) (2024-11-19)

### Bug Fixes

* .env 读取 \r 问题 ([0e33dfa](https://github.com/certd/certd/commit/0e33dfa019a55ea76193c428ec756af386adeb9d))
* 修复vip试用secret报错的bug ([018dee6](https://github.com/certd/certd/commit/018dee6c383233560f078dfd30f6c2857a7e15ee))

### Performance Improvements

* 当步骤全部都禁用时,任务本身显示删除线 ([9ab9a6e](https://github.com/certd/certd/commit/9ab9a6e8b083e19793894f23e59f29c604ec98e5))

## [1.27.5](https://github.com/certd/certd/compare/v1.27.4...v1.27.5) (2024-11-18)

### Bug Fixes

* 修复1Panel面板本身证书更新导致判定执行失败的问题 ([2689e6d](https://github.com/certd/certd/commit/2689e6d6c03aba21da90d5d45232c6ba08696be1))
* 修复角色无法删除的bug ([66629a5](https://github.com/certd/certd/commit/66629a591aecc2d8364ea415c7afc3f9d0406562))
* 修复Cname情况下,无法使用DNS类型的bug ([26dad39](https://github.com/certd/certd/commit/26dad399d5768b3205da099ddc11809aef7d6224))

### Performance Improvements

* 日志查看自动滚动到底部 ([4a2f7eb](https://github.com/certd/certd/commit/4a2f7ebf87b7c027cebff7cb763f8f35f6d2aa36))
* 系统设置中的代理设置优化为可全局生效,环境变量中的https_proxy设置将无效 ([381a37f](https://github.com/certd/certd/commit/381a37fbaa6b61c887eda743897ae00afb825bdf))
* 新手导航在非编辑模式下不显示 ([18bfcc2](https://github.com/certd/certd/commit/18bfcc24ad0bde57bb04db8a4209861ec6b8ff1d))
* 优化腾讯云 cloudflare 重复解析记录时的返回值 ([90d1b68](https://github.com/certd/certd/commit/90d1b68bd6cf232fbe085234efe07d29b7690044))
* 支持namesilo ([80159ec](https://github.com/certd/certd/commit/80159ecca895103d0495f3217311199e66056572))
* 专业版试用,无需绑定账号 ([c7c4318](https://github.com/certd/certd/commit/c7c4318c11b65a76089787aa58939832d338a232))

## [1.27.4](https://github.com/certd/certd/compare/v1.27.3...v1.27.4) (2024-11-14)

### Bug Fixes

* 修复未设置pfx密码,导致jks转换报错的bug ([c3cfbd8](https://github.com/certd/certd/commit/c3cfbd8474155aed4379f91075de37d5d8c73ef0))

### Performance Improvements

* 公共cname服务支持关闭 ([f4ae512](https://github.com/certd/certd/commit/f4ae5125dc4cd97816976779cb3586b5ee78947e))

## [1.27.3](https://github.com/certd/certd/compare/v1.27.2...v1.27.3) (2024-11-13)

### Bug Fixes

* 修复偶发性cname一直验证超时的bug ([d2ce72e](https://github.com/certd/certd/commit/d2ce72e4aaacdf726ba8b91fcd71db40a27714ba))
* 修复邮件配置,忽略证书校验设置不生效的bug ([66a9690](https://github.com/certd/certd/commit/66a9690dc958732e1b3c672d965db502296446f9))
* 修复ipv6未开启情况下,请求带有ipv6地址域名报ETIMEDOUT的bug ([a9a0967](https://github.com/certd/certd/commit/a9a0967a6f1d0bd27e69f3ec52c31d90d470bc23))

### Performance Improvements

* 修复站点个性化,浏览器标题没有生效的bug ([bcfac02](https://github.com/certd/certd/commit/bcfac02c96ceaf23d1a0b05b48d8047da933beaf))
* 优化上传到主机插 路径选择,根据证书格式显示 ([8c3f86c](https://github.com/certd/certd/commit/8c3f86c6909ed91f48bb2880e78834e22f6f6a29))
* 支持jks ([889eaae](https://github.com/certd/certd/commit/889eaaea92818f628b922dae540c026630611707))
* ipv6支持 ([da6ac16](https://github.com/certd/certd/commit/da6ac1626b3574be2fabeeb18a1f10d60bdcbe49))

## [1.27.2](https://github.com/certd/certd/compare/v1.27.1...v1.27.2) (2024-11-08)

### Bug Fixes

* 修复某些容器管理ui无法识别端口列表的bug ([576e60a](https://github.com/certd/certd/commit/576e60a2b52315909e659d2a58cf98b130e69e6f))
* 修复删除腾讯云过期证书时间判断上的bug,导致已过期仍然没有删除证书 ([1ba1007](https://github.com/certd/certd/commit/1ba10072615015d91b81fc56a3b01dae6a2ae9d1))

### Performance Improvements

* 优化部署到阿里云CDN插件,支持多域名,更易用 ([80c500f](https://github.com/certd/certd/commit/80c500f618b169a1f64c57fe442242a4d0d9d833))
* 优化流水线页面切换回来不丢失查询条件 ([4dcf6e8](https://github.com/certd/certd/commit/4dcf6e87bc5f7657ce8a56c5331e8723a0fee8ee))
* 支持公共cname服务 ([3c919ee](https://github.com/certd/certd/commit/3c919ee5d1aef5d26cf3620a7c49d920786bc941))
* 执行历史支持点击查看流水线详情 ([8968639](https://github.com/certd/certd/commit/89686399f90058835435b92872fc236fac990148))
* 专业版7天试用 ([c58250e](https://github.com/certd/certd/commit/c58250e1f065a9bd8b4e82acc1df754504c0010c))

## [1.27.1](https://github.com/certd/certd/compare/v1.27.0...v1.27.1) (2024-11-04)

### Bug Fixes

* 修复头像没有更新的bug ([9b4a31f](https://github.com/certd/certd/commit/9b4a31fa6a32b9cab2e22bd141cf96ca29120445))

### Performance Improvements

* 禁止页面缓存,点击tab页签可以刷新数据 ([7ad4b55](https://github.com/certd/certd/commit/7ad4b55ee000c1dd0747832b11107f32b0ffb889))
* 优化时间选择器,自动填写分钟和秒钟 ([396dc34](https://github.com/certd/certd/commit/396dc34a841c7d016b033736afdba8366fb2d211))
* cname 域名映射记录可读性优化 ([b1117ed](https://github.com/certd/certd/commit/b1117ed54a3ef015752999324ff72b821ef5e4b9))

# [1.27.0](https://github.com/certd/certd/compare/v1.26.16...v1.27.0) (2024-10-31)

### Bug Fixes

* 修复历史记录不能按名称查询的bug ([6113c38](https://github.com/certd/certd/commit/6113c388b7fc58b11ca19ff05cc1286d096c8d28))
* pfx兼容windows server 2016 ([e5e468a](https://github.com/certd/certd/commit/e5e468a463f66d02f235de54b7c1e09ace5f1cb1))

### Features

* 首页全新改版 ([63ec5b5](https://github.com/certd/certd/commit/63ec5b5519c760a3330569c0da6dac157302a330))

### Performance Improvements

* 管理控制台数据统计 ([babd589](https://github.com/certd/certd/commit/babd5897ae013ff7c04ebfcbfac8a00d84dd627c))
* 增加向导 ([6d9ef26](https://github.com/certd/certd/commit/6d9ef26ecab71d752c2c55d75aed4fb5f6c05a39))
* lego 升级到 4.19.2 ([129bf53](https://github.com/certd/certd/commit/129bf53edc9bbb001fe49fbd7e239bd1d09cc128))

## [1.26.16](https://github.com/certd/certd/compare/v1.26.15...v1.26.16) (2024-10-30)

### Bug Fixes

* 修复lego No help topic for 错误 ([aaaf8d7](https://github.com/certd/certd/commit/aaaf8d7db34896cf8f2ff8f12eec1ab0cae58f0f))

### Performance Improvements

* 支持白山云cdn部署 ([b1b2cd0](https://github.com/certd/certd/commit/b1b2cd088b684eda764962abd61754c26a204d1c))
* 支持华为云cdn ([81a3fdb](https://github.com/certd/certd/commit/81a3fdbc29b71f380762008cc151493ec97458f9))

## [1.26.15](https://github.com/certd/certd/compare/v1.26.14...v1.26.15) (2024-10-28)

### Bug Fixes

* 顶部菜单变...的bug ([6dabad7](https://github.com/certd/certd/commit/6dabad76baba96be0f8af36a3fbfb9f5182aecf1))

### Performance Improvements

* 默认证书更新时间设置为35天,增加腾讯云删除过期证书插件,可以避免腾讯云过期证书邮件 ([51b6fed](https://github.com/certd/certd/commit/51b6fed468eaa6f28ce4497ce303ace1a52abb96))
* 授权加密支持解密查看 ([5575c83](https://github.com/certd/certd/commit/5575c839705f6987ad2bdcd33256b0962c6a9c6a))
* 重置管理员密码同时启用管理员账户,避免之前禁用了,重置密码还是登录不进去 ([f92d918](https://github.com/certd/certd/commit/f92d918a1e28e29b794ad4754661ea760c18af46))

## [1.26.14](https://github.com/certd/certd/compare/v1.26.13...v1.26.14) (2024-10-26)

### Bug Fixes

* 修复阿里云部署大杀器报插件_还未注册错误的bug ([abd2dcf](https://github.com/certd/certd/commit/abd2dcf2e85a545321bae6451406d081f773b132))
* 修复启动时自签证书无法保存的bug ([526c484](https://github.com/certd/certd/commit/526c48450bcd37b3ccded9b448f17de8140bdc6e))

### Performance Improvements

* 顶部菜单自定义 ([54d136c](https://github.com/certd/certd/commit/54d136cc6ae122f7c891b7a5c7232fe5de8e5cb5))
* 禁用readonly用户 ([d10d42e](https://github.com/certd/certd/commit/d10d42e20619bb55a50d636b8867ff33db4e3b4b))
* 限制其他用户流水线数量 ([315e437](https://github.com/certd/certd/commit/315e43746baf01682737f82e41579237a48409af))
* 用户管理优化头像上传 ([661293c](https://github.com/certd/certd/commit/661293c189a3abf3cdc953b5225192372f57930d))

## [1.26.13](https://github.com/certd/certd/compare/v1.26.12...v1.26.13) (2024-10-26)

### Bug Fixes

* 修复对话框全屏按钮与关闭按钮重叠的bug ([95df56c](https://github.com/certd/certd/commit/95df56cc5ca5e3eb843cd17cb7078cde47729f1e))
* deprecated的运行时不要报错,只报警告 ([bcbefaa](https://github.com/certd/certd/commit/bcbefaaa35cf6d0eec085b3a2c5bfc7c6a8de9e1))

### Performance Improvements

* 更新certd本身的证书文档说明 ([0c50ede](https://github.com/certd/certd/commit/0c50ede129337b82df54575cbd2f4c2a783a0732))
* 支持同时监听https端口,7002 ([d5a17f9](https://github.com/certd/certd/commit/d5a17f9e6afd63fda2df0981118480f25a1fac2e))

## [1.26.12](https://github.com/certd/certd/compare/v1.26.11...v1.26.12) (2024-10-25)

### Performance Improvements

* 部署到阿里云任意云资源,阿里云部署大杀器 ([4075be7](https://github.com/certd/certd/commit/4075be7849b140acb92bd8da8a9acbf4eef85180))
* 文件名特殊字符限制输入 ([c4164c6](https://github.com/certd/certd/commit/c4164c66e29f3ec799f98108a344806ca61e94ff))
* 新增部署到百度云CDN插件 ([f126f9f](https://github.com/certd/certd/commit/f126f9f932d37fa01fff1accc7bdd17d349f8db5))
* 新增部署到腾讯云CDN-v2,推荐使用 ([d782655](https://github.com/certd/certd/commit/d782655cb4dfbb74138178afbffeee76fc755115))
* 优化cron选择器,增加下次触发时间显示 ([5b148b7](https://github.com/certd/certd/commit/5b148b7ed960ca6f7f5b733b2eadd56eeecbd4c2))
* 支持部署到腾讯云COS ([a8a45d7](https://github.com/certd/certd/commit/a8a45d7f757820990e278533277a3deda5ba48f3))
* 支持配置公共ZeroSSL授权 ([a90d1e6](https://github.com/certd/certd/commit/a90d1e68ee9cbc3705223457b8a86f071b150968))

## [1.26.11](https://github.com/certd/certd/compare/v1.26.10...v1.26.11) (2024-10-23)

### Bug Fixes

* 申请证书没有使用到系统设置的http代理的bug ([3db216f](https://github.com/certd/certd/commit/3db216f515ba404cb4330fdab452971b22a50f08))
* 修复移动任务后出现空阶段的bug ([4ea3edd](https://github.com/certd/certd/commit/4ea3edd59e93ca4f5b2e43b20dd4ef33909caddb))
* 修复google证书*.xx.com与xx.com同时申请时报错的bug ([f8b99b8](https://github.com/certd/certd/commit/f8b99b81a23e7e9fd5e05ebd5caf355c41d67a90))
* 允许七牛云cdn插件输入.号开头的通配符域名 ([18ee87d](https://github.com/certd/certd/commit/18ee87daff6eafc2201b58e28d85aafd3cb7a5b9))

### Performance Improvements

* 申请证书启用新的反代地址 ([a705182](https://github.com/certd/certd/commit/a705182b85e51157883e48f23463263793bf3c12))
* 优化日志颜色 ([1291e98](https://github.com/certd/certd/commit/1291e98e821c5b1810aab7f0aebe3f5f5cd44a20))
* 优化证书申请速度和成功率,反代地址优化,google基本可以稳定请求。增加请求重试。 ([41d9c3a](https://github.com/certd/certd/commit/41d9c3ac8398def541e65351cbe920d4a927182d))
* 优化pfx密码密码输入框,让浏览器不自动填写密码 ([ffeede3](https://github.com/certd/certd/commit/ffeede38afa70c5ff6f2015516bead23d2c4df87))

## [1.26.10](https://github.com/certd/certd/compare/v1.26.9...v1.26.10) (2024-10-20)

### Bug Fixes

* 修复cname服务普通用户access访问权限问题 ([c1e3e2e](https://github.com/certd/certd/commit/c1e3e2ee1f923ee5806479dd5f178c3286a01ae0))

## [1.26.9](https://github.com/certd/certd/compare/v1.26.8...v1.26.9) (2024-10-19)

### Bug Fixes

* 修复普通用户无法校验cname配置的bug ([6285497](https://github.com/certd/certd/commit/62854978bf0bdbe749b42f8e40ab227ab31ec92f))
* 修复切换普通用户登录时,左侧菜单没有同步更新的bug ([12116a8](https://github.com/certd/certd/commit/12116a89f43cf8b98f16d2ea6073f6b72a643215))
* 修正邮箱设置跳转路由 ([17d8890](https://github.com/certd/certd/commit/17d88900a1f0e3af609b74597f5b1978230db32d))

### Performance Improvements

* 触发证书重新申请input变化对比规则优化,减少升级版本后触发申请证书的情况 ([c46a2a9](https://github.com/certd/certd/commit/c46a2a9a399c2a9a8bb59a48b9fb6e93227cce9b))
* 任务下所有步骤都跳过时,整个任务显示跳过 ([84fd3b2](https://github.com/certd/certd/commit/84fd3b250dd1161ea06c5582fdadece4b29c2e53))
* 授权配置去除前后空格 ([57d8d48](https://github.com/certd/certd/commit/57d8d48046fbf51c52b041d2dec03d51fb018587))
* 数据库备份插件,先压缩再备份 ([304ef49](https://github.com/certd/certd/commit/304ef494fd5787c996ad0dcb6edd2f517afce9e2))
* 优化菜单 ([1f4f157](https://github.com/certd/certd/commit/1f4f15757de1015cf7563f7022599eef58cc93d7))
* 增加文档站 https://certd.docmirror.cn ([6e2ac1c](https://github.com/certd/certd/commit/6e2ac1c089f6ddccb396f1f2738509c05333e1bb))

## [1.26.8](https://github.com/certd/certd/compare/v1.26.7...v1.26.8) (2024-10-15)

### Bug Fixes

* 修复无法设置角色的bug ([02fe704](https://github.com/certd/certd/commit/02fe704769edb25fea5ffd85a51a5530864b37b3))

### Performance Improvements

* 角色删除安全 ([28bb485](https://github.com/certd/certd/commit/28bb4856bee03569153f6471527c9b9f28cb3d14))
* 密钥备份 ([1c6028a](https://github.com/certd/certd/commit/1c6028abcf8849163462bb2f8441b6838357e09b))
* 证书直接查看 ([5dde5bd](https://github.com/certd/certd/commit/5dde5bd3f76db3959d411619d29bfb8064e3b307))
* sqlite数据库备份插件 ([77f1631](https://github.com/certd/certd/commit/77f163144f7dcfb0431475c55508fecfd6d969f8))

## [1.26.7](https://github.com/certd/certd/compare/v1.26.6...v1.26.7) (2024-10-14)

### Bug Fixes

* 修复siteInfo每次都要重新设置的bug ([36b26ae](https://github.com/certd/certd/commit/36b26ae9f5c7a53c1c2546fb79b2ea451b854abf))

## [1.26.6](https://github.com/certd/certd/compare/v1.26.5...v1.26.6) (2024-10-14)

### Bug Fixes

* 修复排序失效的bug ([1f0742e](https://github.com/certd/certd/commit/1f0742ef9f0caae0c7e713acf0fd3cebf5d63875))

## [1.26.5](https://github.com/certd/certd/compare/v1.26.4...v1.26.5) (2024-10-14)

### Bug Fixes

* 修复版本号获取错误的bug ([8851870](https://github.com/certd/certd/commit/8851870400df86e496198ad509061b8989fcc44f))

## [1.26.4](https://github.com/certd/certd/compare/v1.26.3...v1.26.4) (2024-10-14)

### Performance Improvements

* [comm] 支持插件管理 ([e8b617b](https://github.com/certd/certd/commit/e8b617b80ce882dd63006f0cfc719a80a1cc6acc))
* 新增代理设置功能 ([273ab61](https://github.com/certd/certd/commit/273ab6139f5807f4d7fe865cc353b97f51b9a668))
* EAB授权支持绑定邮箱,支持公共EAB设置 ([07043af](https://github.com/certd/certd/commit/07043aff0ca7fd29c56dd3c363002cb15d78b464))

## [1.26.3](https://github.com/certd/certd/compare/v1.26.2...v1.26.3) (2024-10-12)

### Performance Improvements

* 优化系统设置加载时机 ([7396253](https://github.com/certd/certd/commit/73962536d5a4769902d760d005f3f879465addcc))

## [1.26.2](https://github.com/certd/certd/compare/v1.26.1...v1.26.2) (2024-10-11)

### Bug Fixes

* 修复某些情况下bindUrl失败的bug ([91fc1cd](https://github.com/certd/certd/commit/91fc1cd7353be4a22be951239ed70b38baebc74e))

### Performance Improvements

* 邮箱设置改为系统设置,普通用户无需配置发件邮箱 ([4244569](https://github.com/certd/certd/commit/42445692117184a3293e63bef84a74cbb5984b0e))

## [1.26.1](https://github.com/certd/certd/compare/v1.26.0...v1.26.1) (2024-10-10)

**Note:** Version bump only for package root

# [1.26.0](https://github.com/certd/certd/compare/v1.25.9...v1.26.0) (2024-10-10)

### Bug Fixes

* 修复管理员编辑其他用户流水线任务时归属userid也被修改的bug ([e85c477](https://github.com/certd/certd/commit/e85c47744cf740b4af3b93dca7c2f0ccc818ec2f))
* 修复历史记录根据流水线名称查询报错的bug ([ce9a986](https://github.com/certd/certd/commit/ce9a9862f122fce2186e7727eaa4b251b59e6032))
* 修复某些代理情况下 报 400 The plain HTTP request was sent to HTTPS port use proxy 的bug ([a13203f](https://github.com/certd/certd/commit/a13203fb3f48c427d0d81a504912248dcc07df1a))

### Features

* 域名验证方法支持CNAME间接方式,此方式支持所有域名注册商,且无需提供Access授权,但是需要手动添加cname解析 ([f3d3508](https://github.com/certd/certd/commit/f3d35084ed44f9f33845f7045e520be5c27eed93))
* 站点个性化设置 ([11a9fe9](https://github.com/certd/certd/commit/11a9fe9014d96cba929e5a066e78f2af7ae59d14))

### Performance Improvements

* 并行任务名称改成添加任务,取消并行,可以在同一个阶段获取上一个task的输出 ([c5e5877](https://github.com/certd/certd/commit/c5e58770d1c5edc19c6f9ea1618f44b68e091f35))
* 调整静态资源到static目录 ([0584b36](https://github.com/certd/certd/commit/0584b3672b40f9042a2ed87e5627022606d046cd))
* 调整全部静态资源到static目录 ([a218890](https://github.com/certd/certd/commit/a21889080d6c7ffdf0af526a3a21f0b2d1c77288))
* 检查cname是否正确配置 ([b5d8935](https://github.com/certd/certd/commit/b5d8935159374fbe7fc7d4c48ae0ed9396861bdd))
* 七牛云cdn支持配置多个域名 ([88d745e](https://github.com/certd/certd/commit/88d745e29063a089864fb9c6705be7b8d4c2669a))
* 上传到主机插件支持注入环境变量 ([81fac73](https://github.com/certd/certd/commit/81fac736f9ccc8d1cda7ef4178752239cec20849))
* 优化宝塔网站部署插件远程获取数据的提示 ([2a3ca9f](https://github.com/certd/certd/commit/2a3ca9f552d96594ec6690a1c4c91f598451b9a1))
* 优化缩短首页缓存时间 ([49395e8](https://github.com/certd/certd/commit/49395e8cb65f4b30c0145329ed5de48be4ef3842))
* 域名输入增加校验提示,避免输入错误的域名 ([0c8e83e](https://github.com/certd/certd/commit/0c8e83e1254a9ce4d5a4e7888eb1710394a4b77c))
* cname校验配置增加未校验通过提示 ([77cc3c4](https://github.com/certd/certd/commit/77cc3c4a5cbd81f8233a8e0bb33fab0621c0905f))
* google eab授权支持自动获取,不过要配置代理 ([592791d](https://github.com/certd/certd/commit/592791d1356fc252fbb70d7f168567aee9585507))

## [1.25.9](https://github.com/certd/certd/compare/v1.25.8...v1.25.9) (2024-10-01)

### Bug Fixes

* 修复西部数码账户级别apikey不可用的bug ([f8f3e8b](https://github.com/certd/certd/commit/f8f3e8b43fd5d815887bcb53b95f46dc96424b79))

### Performance Improvements

* 增加等待插件 ([3ef0541](https://github.com/certd/certd/commit/3ef0541cc85ab6abf698ead3b258ae1ac156ef98))

## [1.25.8](https://github.com/certd/certd/compare/v1.25.7...v1.25.8) (2024-09-30)

### Bug Fixes

* 修复pfxPassword无效的bug ([251e450](https://github.com/certd/certd/commit/251e450fabfe62405bac13e39f2153736c081ef0))

### Performance Improvements

* 群晖获取deviceid优化 ([8d42273](https://github.com/certd/certd/commit/8d4227366548eb70f6bc04303829e6933168f906))

## [1.25.7](https://github.com/certd/certd/compare/v1.25.6...v1.25.7) (2024-09-29)

### Bug Fixes

* 修复某些地区被屏蔽无法激活专业版的bug ([7532a96](https://github.com/certd/certd/commit/7532a960851b84d4f2cc3dba02353c5235e1a364))

### Performance Improvements

* 上传到主机,支持socks代理 ([d91026d](https://github.com/certd/certd/commit/d91026dc4fbfe5fedc4ee8e43dc0d08f1cf88356))
* 支持上传到七牛云oss ([bf024bd](https://github.com/certd/certd/commit/bf024bdda8bc2a463475be5761acf0da7317a08a))

## [1.25.6](https://github.com/certd/certd/compare/v1.25.5...v1.25.6) (2024-09-29)

### Bug Fixes

* 修复中间证书复制错误的bug ([76e86ea](https://github.com/certd/certd/commit/76e86ea283ecbe4ec76cdc92b98457d0fef544ac))

### Performance Improvements

* 部署支持1Panel ([d047234](https://github.com/certd/certd/commit/d047234d98d31504f2e5a472b66e1b75806af26e))
* 增加使用教程 ([9d9c021](https://github.com/certd/certd/commit/9d9c0218195af5b9896cce7109b26a433480571d))

## [1.25.5](https://github.com/certd/certd/compare/v1.25.4...v1.25.5) (2024-09-26)

**Note:** Version bump only for package root

## [1.25.4](https://github.com/certd/certd/compare/v1.25.3...v1.25.4) (2024-09-25)

### Bug Fixes

* 修复启动报授权验证失败的bug ([3460d3d](https://github.com/certd/certd/commit/3460d3ddca222ea702816ab805909d489eff957f))

## [1.25.3](https://github.com/certd/certd/compare/v1.25.2...v1.25.3) (2024-09-24)

### Bug Fixes

* 修复upload to host trim错误 ([0f0ddb9](https://github.com/certd/certd/commit/0f0ddb9c5963fd643d6d203334efac471c43ec3b))

## [1.25.2](https://github.com/certd/certd/compare/v1.25.1...v1.25.2) (2024-09-24)

**Note:** Version bump only for package root

## [1.25.1](https://github.com/certd/certd/compare/v1.25.0...v1.25.1) (2024-09-24)

**Note:** Version bump only for package root

# [1.25.0](https://github.com/certd/certd/compare/v1.24.4...v1.25.0) (2024-09-24)

### Bug Fixes

* 修复首次创建任务运行时不自动设置当前运行情况的bug ([ecd83ee](https://github.com/certd/certd/commit/ecd83ee136abdd3df9ed2f21ec2ff0f24c0ed9d9))

### Features

* 账号绑定 ([e046640](https://github.com/certd/certd/commit/e0466409d0c021bb415abd94df448c8a0d4799e9))
* 支持中间证书 ([e86756e](https://github.com/certd/certd/commit/e86756e4c65a53dd23106d7ecbfe2fa987cc13f3))
* 支持vip转移 ([361e8fe](https://github.com/certd/certd/commit/361e8fe7ae5877e23fd5de31bc919bedd09c57f5))

### Performance Improvements

* 群晖支持OTP双重验证登录 ([8b8039f](https://github.com/certd/certd/commit/8b8039f42bbce10a4d0e737cdeeeef9bb17bee5a))
* 任务支持禁用 ([8ed16b3](https://github.com/certd/certd/commit/8ed16b3ea2dfe847357863a0bfa614e4fa5fc041))
* 优化收件邮箱输入 ([22ef28f](https://github.com/certd/certd/commit/22ef28f6338a78465bd52ccbad13e66e80263b2f))
* 优化主机登录失败提示 ([9de77b3](https://github.com/certd/certd/commit/9de77b327d39cff5ed6660ec53b58ba0eea18e5a))
* 增加重启certd插件 ([48238d9](https://github.com/certd/certd/commit/48238d929e6c4afa1d428e4d35b9159d37a47ae0))
* 证书支持旧版RSA,pkcs1 ([3d9c3ec](https://github.com/certd/certd/commit/3d9c3ecb3eb604b2458154f608bde0f01915d116))
* 支持阿里云ACK证书部署 ([d331fea](https://github.com/certd/certd/commit/d331fea47789122650e057ec7c9e85ee8e66f09b))
* 支持七牛云 ([8ecc2f9](https://github.com/certd/certd/commit/8ecc2f9446a9ebd11b9bfbffbb6cf7812a043495))
* 支持k8s ingress secret ([e5a5d0a](https://github.com/certd/certd/commit/e5a5d0a607bb6b4e1a1f7a1a419bada5f2dee59f))
* http请求增加默认超时时间 ([664bd86](https://github.com/certd/certd/commit/664bd863e5b4895aabe2384277c0c65f5902fdb2))
* plugins增加图标 ([a8da658](https://github.com/certd/certd/commit/a8da658a9723342b4f43a579f7805bfef0648efb))

## [1.24.4](https://github.com/certd/certd/compare/v1.24.3...v1.24.4) (2024-09-09)

### Bug Fixes

* 修复腾讯云cdn证书部署后会自动关闭hsts,http2.0等配置的bug ([7908ab7](https://github.com/certd/certd/commit/7908ab79da624c94fa05849925b15e480e3317c4))
* 修复腾讯云tke证书部署报错的bug ([653f409](https://github.com/certd/certd/commit/653f409d91a441850d6381f89a8dd390831f0d5e))

### Performance Improvements

* 插件选择支持搜索 ([d1498a7](https://github.com/certd/certd/commit/d1498a71601b74d38343b1d070eadd03705dd9d5))
* 前置任务步骤增加错误提示 ([ae3daa9](https://github.com/certd/certd/commit/ae3daa9bcf4fc363825aad9b77f5d3879aeeff70))
* 群晖部署教程 ([0f0af2f](https://github.com/certd/certd/commit/0f0af2f309390f388e7a272cea3a1dd30c01977d))
* 支持群晖 ([5c270b6](https://github.com/certd/certd/commit/5c270b6b9d45a2152f9fdb3c07bd98b7c803cb8e))

## [1.24.3](https://github.com/certd/certd/compare/v1.24.2...v1.24.3) (2024-09-06)

### Performance Improvements

* 支持多吉云cdn证书部署 ([65ef685](https://github.com/certd/certd/commit/65ef6857296784ca765926e09eafcb6fc8b6ecde))

## [1.24.2](https://github.com/certd/certd/compare/v1.24.1...v1.24.2) (2024-09-06)

### Bug Fixes

* 修复复制流水线出现的各种问题 ([6314e8d](https://github.com/certd/certd/commit/6314e8d7eb58cd52e2a7bd3b5ffb9112b0b69577))
* 修复windows下无法执行第二条命令的bug ([71ac8aa](https://github.com/certd/certd/commit/71ac8aae4aa694e1a23761e9761c9fba30b43a21))

### Performance Improvements

* 阶段、任务、步骤全面支持拖动排序 ([bd73a16](https://github.com/certd/certd/commit/bd73a163cd0497f062bd424ddc6bc9bbc95f81ea))
* 任务配置不需要的字段可以自动隐藏 ([192d9dc](https://github.com/certd/certd/commit/192d9dc7e36737d684c769f255f407c28b1152ac))
* 任务支持拖动排序 ([1e9b563](https://github.com/certd/certd/commit/1e9b5638aa36a8ce70019a9c750230ba41938327))
* 西部数据支持用户级的apikey ([1c17b41](https://github.com/certd/certd/commit/1c17b41e160944b073e1849e6f9467c3659a4bfc))
* 修复windows下无法执行第二条命令的bug ([d5bfcdb](https://github.com/certd/certd/commit/d5bfcdb6de1dcc1702155442e2e00237d0bbb6e5))
* 优化跳过处理逻辑 ([b80210f](https://github.com/certd/certd/commit/b80210f24bf5db1c958d06ab27c9e5d3db452eda))
* 支持阿里云oss ([87a2673](https://github.com/certd/certd/commit/87a2673e8c33dff6eda1b836d92ecc121564ed78))
* 支持西部数码DNS ([c59cab1](https://github.com/certd/certd/commit/c59cab1aaeb19f86df8e3e0d8127cbd0a9ef77f3))
* 支持pfx、der ([fbeaed2](https://github.com/certd/certd/commit/fbeaed203519f59b6d9396c4e8953353ccb5e723))
* client 请求超时时间延长为10s ([ff46771](https://github.com/certd/certd/commit/ff46771d8dd43e71c1ca70e3ba783945750342cc))

## [1.24.1](https://github.com/certd/certd/compare/v1.24.0...v1.24.1) (2024-09-02)

### Bug Fixes

* 激活仅限管理员 ([1c17970](https://github.com/certd/certd/commit/1c17970b981f0987c506744ee6b2283fd5e40493))
* 修复在没有勾选使用代理的情况下,仍然会使用代理的bug ([0f66794](https://github.com/certd/certd/commit/0f6679425f6a736bb0128527dd99c085fac17d84))

### Performance Improvements

* 部署插件支持宝塔、易盾云等 ([ee61709](https://github.com/certd/certd/commit/ee617095efa1171548cf52fd45f0f98a368555a3))
* 授权配置支持加密 ([42a56b5](https://github.com/certd/certd/commit/42a56b581d754c3e5f9838179d19ab0d004ef2eb))
* 优化内存占用 ([db61033](https://github.com/certd/certd/commit/db6103363364440b650bc10bb334834e4a9470c7))
* 支持阿里云 DCDN ([98b77f8](https://github.com/certd/certd/commit/98b77f80843834616fb26f83b4c42245326abd06))
* 支持已跳过的步骤重新运行 ([ea775ad](https://github.com/certd/certd/commit/ea775adae18d57a04470cfba6b9460d761d74035))
* 支持cdnfly ([724a850](https://github.com/certd/certd/commit/724a85028b4a7146c9e3b4df4497dcf2a7bf7c67))
* 支持ftp上传 ([b9bddbf](https://github.com/certd/certd/commit/b9bddbfabb5664365f1232e9432532187c98006c))

# [1.24.0](https://github.com/certd/certd/compare/v1.23.1...v1.24.0) (2024-08-25)

### Bug Fixes

* 部署到腾讯云cdn选择证书任务步骤限制只能选证书 ([3345c14](https://github.com/certd/certd/commit/3345c145b802170f75a098a35d0c4b8312efcd17))
* 修复成功后跳过之后丢失腾讯云证书id的bug ([37eb762](https://github.com/certd/certd/commit/37eb762afe25c5896b75dee25f32809f8426e7b7))
* 修复创建流水线后立即运行时报no id错误的bug ([17ead54](https://github.com/certd/certd/commit/17ead547aab25333603980304aa3aad3db1f73d5))
* 修复使用代理的情况下申请证书失败的bug ([95122e2](https://github.com/certd/certd/commit/95122e28609333f4df55c266e5434897954c0fb3))
* 修复执行日志没有清理的bug ([22a3363](https://github.com/certd/certd/commit/22a336370a88a7df2a23c967043bae153da71ed5))
* 修复重置密码参数配置后无效的bug ([e358a88](https://github.com/certd/certd/commit/e358a8869696578687306e4cd0dcda53f898fe13))
* 修复ssh无法连接成功,无法执行命令的bug ([41b9837](https://github.com/certd/certd/commit/41b9837582323fb400ef8525ce65e8b37ad4b36f))

### Features

* 支持ECC类型 ([a7424e0](https://github.com/certd/certd/commit/a7424e02f5c7e02ac1688791040785920ce67473))
* 支持google证书申请(需要使用代理) ([a593056](https://github.com/certd/certd/commit/a593056e79e99dd6a74f75b5eab621af7248cfbe))

### Performance Improvements

* 更新k8s底层api库 ([746bb9d](https://github.com/certd/certd/commit/746bb9d385e2f397daef4976eca1d4782a2f5ebd))
* 优化成功后跳过的提示 ([7b451bb](https://github.com/certd/certd/commit/7b451bbf6e6337507f4627b5a845f5bd96ab4f7b))
* 优化证书申请成功率 ([968c469](https://github.com/certd/certd/commit/968c4690a07f69c08dcb3d3a494da4e319627345))
* 优化dnspod的token id 说明 ([790bf11](https://github.com/certd/certd/commit/790bf11af06d6264ef74bc1bb919661f0354239a))
* email proxy ([453f1ba](https://github.com/certd/certd/commit/453f1baa0b9eb0f648aa1b71ccf5a95b202ce13f))

## [1.23.1](https://github.com/certd/certd/compare/v1.23.0...v1.23.1) (2024-08-06)

### Bug Fixes

* 修复模糊查询无效的bug ([9355917](https://github.com/certd/certd/commit/93559174c780173f0daec7cdbd1f72f8d5c504d5))

### Performance Improvements

* 优化插件字段的default value ([24c7be2](https://github.com/certd/certd/commit/24c7be2c9cb39c14f7a97b674127c88033280b02))
* 优化默认值设置 ([1af19f0](https://github.com/certd/certd/commit/1af19f0ac053fe109782882964533636b5969d6b))

# [1.23.0](https://github.com/certd/certd/compare/v1.22.9...v1.23.0) (2024-08-05)

### Bug Fixes

* 修复环境变量多个下划线不生效的bug ([7ec2218](https://github.com/certd/certd/commit/7ec2218c9fee5bee2bf0aa31f3e3a4301575f247))

### Features

* use node 20 ([e8ed972](https://github.com/certd/certd/commit/e8ed97206bf28e83f942db2ef4ea07fa76fd3567))

## [1.22.9](https://github.com/certd/certd/compare/v1.22.8...v1.22.9) (2024-08-05)

### Performance Improvements

* 优化定时任务 ([87e440e](https://github.com/certd/certd/commit/87e440ee2a8b10dc571ce619f28bc83c1e5eb147))

## [1.22.8](https://github.com/certd/certd/compare/v1.22.7...v1.22.8) (2024-08-05)

### Performance Improvements

* 修复删除历史记录没有删除log的bug,新增history管理页面,演示站点启动时不自动启动非管理员用户的定时任务 ([f78ae93](https://github.com/certd/certd/commit/f78ae93eedfe214008c3d071ca3d77c962137a64))
* 优化pipeline删除时,删除其他history ([b425203](https://github.com/certd/certd/commit/b4252033d56a9ad950f3e204ff021497c3978015))

## [1.22.7](https://github.com/certd/certd/compare/v1.22.6...v1.22.7) (2024-08-04)

### Bug Fixes

* 修复保存配置报id不能为空的bug ([367f807](https://github.com/certd/certd/commit/367f80731396003416665c22853dfbc09c2c03a0))

## [1.22.6](https://github.com/certd/certd/compare/v1.22.5...v1.22.6) (2024-08-03)

### Bug Fixes

* 修复在相同的cron时偶尔无法触发定时任务的bug ([680941a](https://github.com/certd/certd/commit/680941af119619006b592e3ab6fb112cb5556a8b))
* 修复pg下pipeline title 类型问题 ([a9717b9](https://github.com/certd/certd/commit/a9717b9a0df7b5a64d4fe03314fecad4f59774cc))

### Performance Improvements

* 流水线支持名称模糊查询 ([59897c4](https://github.com/certd/certd/commit/59897c4ceae992ebe2972ca9e8f9196616ffdfd7))
* 腾讯云clb支持更多大区选择 ([e4f4570](https://github.com/certd/certd/commit/e4f4570b29f26c60f1ee9660a4c507cbeaba3d7e))
* 优化前置任务输出为空的提示 ([6ed1e18](https://github.com/certd/certd/commit/6ed1e18c7d9c46d964ecc6abc90f3908297b7632))

## [1.22.5](https://github.com/certd/certd/compare/v1.22.4...v1.22.5) (2024-07-26)

### Bug Fixes

* 修复用户管理无法添加用户的bug ([e7e89b8](https://github.com/certd/certd/commit/e7e89b8de7386e84c0d6b8e217e2034909657d68))

## [1.22.4](https://github.com/certd/certd/compare/v1.22.3...v1.22.4) (2024-07-26)

### Performance Improvements

* 证书申请支持反向代理,letsencrypt无法访问时的备用方案 ([b7b5df0](https://github.com/certd/certd/commit/b7b5df0587e0f7ea288c1b2af6f87211f207395f))
* 支持arm64 ([fa14f87](https://github.com/certd/certd/commit/fa14f87a8093ef3addc5e5f3315ce1bfc9982782))

## [1.22.3](https://github.com/certd/certd/compare/v1.22.2...v1.22.3) (2024-07-25)

### Bug Fixes

* lege 无执行权限问题 ([338eb3b](https://github.com/certd/certd/commit/338eb3bdfeb461e9b3bc7eee97b97a59f5642ffe))

## [1.22.2](https://github.com/certd/certd/compare/v1.22.1...v1.22.2) (2024-07-23)

### Bug Fixes

* 修复创建流水线时,无法根据dns类型默认正确的dns授权的bug ([a2c43b5](https://github.com/certd/certd/commit/a2c43b50a6069ed48958fd142844a8568c2af452))

## [1.22.1](https://github.com/certd/certd/compare/v1.22.0...v1.22.1) (2024-07-20)

### Performance Improvements

* 创建证书任务可以选择lege插件 ([affef13](https://github.com/certd/certd/commit/affef130378030c517250c58a4e787b0fc85d7d1))
* 创建证书任务增加定时任务和邮件通知输入 ([427620d](https://github.com/certd/certd/commit/427620d34f3b8ad6933005faf1878908441a2453))
* 支持配置启动后自动触发一次任务 ([a5a0c1f](https://github.com/certd/certd/commit/a5a0c1f6e7a3f05e581005e491d5b102ee854412))

# [1.22.0](https://github.com/certd/certd/compare/v1.21.2...v1.22.0) (2024-07-19)

### Features

* 升级midway,支持esm ([485e603](https://github.com/certd/certd/commit/485e603b5165c28bc08694997726eaf2a585ebe7))
* 支持lego,海量DNS提供商 ([0bc6d0a](https://github.com/certd/certd/commit/0bc6d0a211920fb0084d705e1db67ee1e7262c44))
* 支持postgresql ([3b19bfb](https://github.com/certd/certd/commit/3b19bfb4291e89064b3b407a80dae092d54747d5))

### Performance Improvements

* 优化一些小细节 ([b168852](https://github.com/certd/certd/commit/b1688525dbbbfd67e0ab1cf5b4ddfbe9d394f370))
* 增加备案号设置 ([bd3d959](https://github.com/certd/certd/commit/bd3d959944db63a5690b55ee150e1007133868b9))
* 自动生成jwtkey,无需手动配置 ([390e485](https://github.com/certd/certd/commit/390e4853a570390a97df6a3b3882579f9547eeb4))

## [1.21.2](https://github.com/certd/certd/compare/v1.21.1...v1.21.2) (2024-07-08)

### Performance Improvements

* 申请证书时可以选择跳过本地dns校验 ([fe91d94](https://github.com/certd/certd/commit/fe91d94090d22ed0a3ea753ba74dfaa1bf057c17))

## [1.21.1](https://github.com/certd/certd/compare/v1.21.0...v1.21.1) (2024-07-08)

### Performance Improvements

* 上传到主机,支持设置不mkdirs ([5ba9831](https://github.com/certd/certd/commit/5ba9831ed1aa6ec6057df246f1035b36b9c41d2e))
* 说明优化,默认值优化 ([970c7fd](https://github.com/certd/certd/commit/970c7fd8a0f557770e973d8462ee5684ef742810))

# [1.21.0](https://github.com/certd/certd/compare/v1.20.17...v1.21.0) (2024-07-03)

### Features

* 支持zero ssl ([eade2c2](https://github.com/certd/certd/commit/eade2c2b681569f03e9cd466e7d5bcd6703ed492))

## [1.20.17](https://github.com/certd/certd/compare/v1.20.16...v1.20.17) (2024-07-03)

### Performance Improvements

* 创建dns解析后,强制等待60s ([f47b35f](https://github.com/certd/certd/commit/f47b35f6d5bd7d675005c3e286b7e9a029201f8b))
* 文件上传提示由cert.crt改为cert.pem ([a09b0e4](https://github.com/certd/certd/commit/a09b0e48c176f3ed763791bd50322c29729f7c1c))
* 优化cname verify ([eba333d](https://github.com/certd/certd/commit/eba333de7a5b5ef4b0b7eaa904f578720102fa61))

## [1.20.16](https://github.com/certd/certd/compare/v1.20.15...v1.20.16) (2024-07-01)

### Bug Fixes

* 修复配置了cdn cname后申请失败的bug ([4a5fa76](https://github.com/certd/certd/commit/4a5fa767edc347d03d29a467e86c9a4d70b0220c))

## [1.20.15](https://github.com/certd/certd/compare/v1.20.14...v1.20.15) (2024-06-28)

### Bug Fixes

* 修复无法强制取消任务的bug ([9cc01db](https://github.com/certd/certd/commit/9cc01db1d569a5c45bb3e731f35d85df324a8e62))

### Performance Improvements

* 腾讯云dns provider 支持腾讯云的accessId ([e0eb3a4](https://github.com/certd/certd/commit/e0eb3a441384d474fe2923c69b25318264bdc9df))
* 支持windows文件上传 ([7f61cab](https://github.com/certd/certd/commit/7f61cab101fa13b4e88234e9ad47434e6130fed2))

## [1.20.14](https://github.com/certd/certd/compare/v1.20.13...v1.20.14) (2024-06-23)

### Bug Fixes

* 修复修改密码功能异常问题 ([f740ff5](https://github.com/certd/certd/commit/f740ff517f521dce361284c2c54bccc68aee0ea2))

## [1.20.13](https://github.com/certd/certd/compare/v1.20.12...v1.20.13) (2024-06-18)

### Bug Fixes

* 日志高度越界 ([c4c9adb](https://github.com/certd/certd/commit/c4c9adb8bfd513f57252e523794e3799a9b220f8))
* 修复邮箱设置页面SMTP拼写错误的问题 ([b98f1c0](https://github.com/certd/certd/commit/b98f1c0dd0bc6c6b4f814c578692afdf6d90b88d))
* 修复logo问题 ([7e483e6](https://github.com/certd/certd/commit/7e483e60913d509b113148c735fe13ba1d72dddf))

### Performance Improvements

* 增加警告,修复一些样式错乱问题 ([fd54c2f](https://github.com/certd/certd/commit/fd54c2ffac492222e85ff2f5f49a9ee5cfc73588))
* ssh登录支持openssh格式私钥、支持私钥密码 ([5c2c508](https://github.com/certd/certd/commit/5c2c50839a9076004f9034d754ac6deb531acdfb))

## [1.20.12](https://github.com/certd/certd/compare/v1.20.10...v1.20.12) (2024-06-17)

### Bug Fixes

* 修复aliyun域名超过100个找不到域名的bug ([5b1494b](https://github.com/certd/certd/commit/5b1494b3ce93d1026dc56ee741342fbb8bf7be24))

### Performance Improvements

* 增加系统设置,可以关闭自助注册功能 ([20feace](https://github.com/certd/certd/commit/20feacea12d43386540db6a600f391d786be4014))
* 增加cloudflare access token说明 ([934e6e2](https://github.com/certd/certd/commit/934e6e2bd05387cd50ffab95f230933543954098))
* 支持重置管理员密码,忘记密码的补救方案 ([732cbc5](https://github.com/certd/certd/commit/732cbc5e927b526850724594830392b2f10c6705))
* 支持cloudflare域名 ([fbb9a47](https://github.com/certd/certd/commit/fbb9a47e8f7bb805289b9ee64bd46ffee0f01c06))

## [1.20.10](https://github.com/certd/certd/compare/v1.20.9...v1.20.10) (2024-05-30)

### Bug Fixes

* 增加权限相关helper说明 ([83e4083](https://github.com/certd/certd/commit/83e40836ebff10bec60efe8933183e1ba1c22bf9))
* 增加权限相关helper说明 ([4304c94](https://github.com/certd/certd/commit/4304c9443ad9248f63dd6d8c512d8d6f32f90d37))

### Performance Improvements

* 上传到主机插件支持复制到本机路径 ([92446c3](https://github.com/certd/certd/commit/92446c339936f98f08f654b8971a7393d8435224))
* 优化文件下载包名 ([d9eb927](https://github.com/certd/certd/commit/d9eb927b0a1445feab08b1958aa9ea80637a5ae6))
* 增加任务复制功能 ([39ad759](https://github.com/certd/certd/commit/39ad7597fa0e19cc1f7631bbd6fea0a9e05a62c9))

## [1.20.9](https://github.com/certd/certd/compare/v1.20.8...v1.20.9) (2024-03-22)

**Note:** Version bump only for package root

## [1.20.8](https://github.com/certd/certd/compare/v1.20.7...v1.20.8) (2024-03-22)

**Note:** Version bump only for package root

## [1.20.7](https://github.com/certd/certd/compare/v1.20.6...v1.20.7) (2024-03-22)

**Note:** Version bump only for package root

## [1.20.6](https://github.com/certd/certd/compare/v1.20.5...v1.20.6) (2024-03-21)

### Bug Fixes

* 调整按钮图标到居中位置 ([836d18f](https://github.com/certd/certd/commit/836d18f07e22d00faf2f213bc3301a6672b5bafc))

### Performance Improvements

* 插件贡献文档及示例 ([72fb20a](https://github.com/certd/certd/commit/72fb20abf3ba5bdd862575d2907703a52fd7eb17))

## [1.20.5](https://github.com/certd/certd/compare/v1.20.2...v1.20.5) (2024-03-11)

### Bug Fixes

* 修复腾讯云cdn部署无法选择端点的bug ([154409b](https://github.com/certd/certd/commit/154409b1dfee3ea1caae740ad9c1f99a6e7a9814))

## [1.20.2](https://github.com/certd/certd/compare/v1.2.1...v1.20.2) (2024-02-28)

### Bug Fixes

* 临时修复阿里云domainlist接口返回域名列表不全的问题,后续还需要增加翻页查询 ([849c145](https://github.com/certd/certd/commit/849c145926984762bd9dbec87bd91cd047fc0855))

## [1.2.1](https://github.com/certd/certd/compare/v1.2.0...v1.2.1) (2023-12-12)

### Bug Fixes

* 修复邮箱设置无效的bug ([aaa3224](https://github.com/certd/certd/commit/aaa322464d0f65e924d1850995540d396ee24d25))

**Note:** Version bump only for package root

# [1.2.0](https://github.com/certd/certd/compare/v1.1.6...v1.2.0) (2023-10-27)

* 🔱: [client] sync upgrade with 2 commits [trident-sync] ([aa3207f](https://github.com/certd/certd/commit/aa3207fca5f15f7c3da789989d99c8ae7d1c4551))

### BREAKING CHANGES

* search支持自定义布局,search.layout、search.collapse转移到 search.container之下。如果想使用原来的search组件,请配置search.is=fs-search-v1

## [1.1.6](https://github.com/certd/certd/compare/v1.1.5...v1.1.6) (2023-07-10)

### Bug Fixes

* 修复上传证书到腾讯云失败的bug ([e950322](https://github.com/certd/certd/commit/e950322232e19d1263b8552eefa5b0150fd7864e))

## [1.1.5](https://github.com/certd/certd/compare/v1.1.4...v1.1.5) (2023-07-03)

**Note:** Version bump only for package root

## [1.1.4](https://github.com/certd/certd/compare/v1.1.3...v1.1.4) (2023-07-03)

### Bug Fixes

* 成功图标转动的问题 ([f87eee3](https://github.com/certd/certd/commit/f87eee3b9ff1ef9874e79a81fe0ed7104cb9ee8c))

### Performance Improvements

* cancel task ([bc65c0a](https://github.com/certd/certd/commit/bc65c0a786360c087fe95cad93ec6a87804cc5ee))
* flush log ([891a43a](https://github.com/certd/certd/commit/891a43ae6716ff98ed06643f7da2e35199ee195c))
* flush logger ([91be682](https://github.com/certd/certd/commit/91be6826b902e0f302b1a6cbdb1d24e15914c18d))
* timeout ([3eeb1f7](https://github.com/certd/certd/commit/3eeb1f77aa2922f3545f3d2067f561d95621d54f))

## [1.1.3](https://github.com/certd/certd/compare/v1.1.2...v1.1.3) (2023-07-03)

**Note:** Version bump only for package root

## [1.1.2](https://github.com/certd/certd/compare/v1.1.1...v1.1.2) (2023-07-03)

**Note:** Version bump only for package root

## [1.1.1](https://github.com/certd/certd/compare/v1.1.0...v1.1.1) (2023-06-28)

**Note:** Version bump only for package root

# [1.1.0](https://github.com/certd/certd/compare/v1.0.6...v1.1.0) (2023-06-28)

### Bug Fixes

* 修复access选择类型trigger ([2851a33](https://github.com/certd/certd/commit/2851a33eb2510f038fadb55da29512597a4ba512))

### Features

* 权限控制 ([27a4c81](https://github.com/certd/certd/commit/27a4c81c6d70e70abb3892c3ea58d4719988808a))
* 邮件通知 ([937e3fa](https://github.com/certd/certd/commit/937e3fac19cd03b8aa91db8ba03fda7fcfbacea2))
* cert download ([5a51c14](https://github.com/certd/certd/commit/5a51c14de521cb8075a80d2ae41a16e6d5281259))
* config  merge ([fdc25dc](https://github.com/certd/certd/commit/fdc25dc0d795555cffacc4572648ec158988fbbb))
* save files ([99522fb](https://github.com/certd/certd/commit/99522fb49adb42c1dfdf7bec3dd52d641158285b))
* save files ([671d273](https://github.com/certd/certd/commit/671d273e2f9136d16896536b0ca127cf372f1619))

## [1.0.6](https://github.com/certd/certd/compare/v1.0.5...v1.0.6) (2023-05-25)

**Note:** Version bump only for package root

## [1.0.5](https://github.com/certd/certd/compare/v1.0.4...v1.0.5) (2023-05-25)

**Note:** Version bump only for package root

## [1.0.4](https://github.com/certd/certd/compare/v1.0.3...v1.0.4) (2023-05-25)

**Note:** Version bump only for package root

## [1.0.3](https://github.com/certd/certd/compare/v1.0.2...v1.0.3) (2023-05-25)

**Note:** Version bump only for package root

## [1.0.2](https://github.com/certd/certd/compare/v1.0.1...v1.0.2) (2023-05-24)

**Note:** Version bump only for package root

## [1.0.1](https://github.com/certd/certd/compare/v1.0.0...v1.0.1) (2023-05-24)

**Note:** Version bump only for package root


================================================
FILE: LICENSE
================================================
                    GNU AFFERO GENERAL PUBLIC LICENSE
                       Version 3, 19 November 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

  A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate.  Many developers of free software are heartened and
encouraged by the resulting cooperation.  However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

  The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community.  It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server.  Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

  An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals.  This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU Affero General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Remote Network Interaction; Use with the GNU General Public License.

  Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software.  This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time.  Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published
    by the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source.  For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code.  There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.


================================================
FILE: LICENSE.md
================================================

                    Certd Open Source License
                  

- This project is licensed under the **GNU Affero General Public License (AGPL)** with the following additional terms.  
- 本项目遵循 GNU Affero General Public License(AGPL),并附加以下条款。

## 1. License Terms ( 许可证条款 )

1. **Freedom to Use** (自由使用)
   - You are free to use, copy, modify, and distribute the source code of this project for personal or organizational use, provided that you comply with the terms of this license.
   - 您可以自由使用、复制、修改和分发本项目的源代码,前提是您遵循本许可证的条款。

2. **Modification for Personal Use** (个人使用的修改)
   - Individuals and companies are allowed to modify the project according to their needs for non-commercial purposes. However, modifications to the logo, copyright information, or any code related to licensing are strictly prohibited.
   - 个人和公司允许根据自身需求对本项目进行修改以供非商业用途。但任何对logo、版权信息或与许可相关代码的修改都是严格禁止的。

3. **Commercial Authorization** (商业授权)
   - If you wish to make any form of monetary gain from this project, you must first obtain commercial authorization from the original author. Users should contact the author directly to negotiate the relevant licensing terms.
   - 如果您希望从本项目获得任何形式的经济收益,您必须首先从原作者处获得商业授权,用户应直接与作者联系,以协商相关许可条款。
 
4. **Retention of Rights** (保留权利)
   - All rights, title, and interest in the project remain with the original author.
   - 本项目的所有权利、标题和利益仍归原作者所有。

## 2. As a contributor ( 作为贡献者 )
   - you should agree that your contributed code:
   - 您应同意您贡献的代码:
     1. - The original author can adjust the open-source agreement to be more strict or relaxed.
        - 原作者可以调整开源协议以使其更严格或更宽松。
     2. - Can be used for commercial purposes.
        - 可用于商业用途。


================================================
FILE: README.md
================================================
# Certd

[English](./README_en.md) | [中文](./README.md)

Certd® 是一个免费的全自动证书管理系统,让你的网站证书永不过期。   
后缀d取自linux守护进程的命名风格,意为证书守护进程
   

>首创流水线申请部署证书模式,已被多个项目“借鉴”,被抄也是一种成功。

> 关于证书续期:
>* 实际上没有办法不改变证书文件本身情况下直接续期或者续签。
>* 我们所说的续期,其实就是按照全套流程重新申请一份新证书,然后重新部署上去。
>* 免费证书过期时间90天,以后可能还会缩短,所以自动化部署必不可少


> 流水线数量现已调整为无限制,欢迎大家使用


## 一、特性
本项目不仅支持证书申请过程自动化,还可以自动化部署更新证书,让你的证书永不过期。     

* 全自动申请证书(支持所有注册商注册的域名,支持DNS-01、HTTP-01、CNAME代理等多种域名验证方式)
* 全自动部署更新证书(目前支持部署到主机、阿里云、腾讯云等70+部署插件)
* 支持通配符域名/泛域名,支持多个域名打到一个证书上,支持pem、pfx、der、jks等多种证书格式
* 邮件通知、webhook通知、企微、钉钉、飞书、anpush等多种通知方式
* 私有化部署,数据保存本地,安装简单快捷,镜像由Github Actions构建,过程公开透明
* 授权加密,站点隐藏,2FA,密码防爆破等多重安全保障
* 支持SQLite,PostgreSQL、MySQL多种数据库
* 开放接口支持
* 站点证书监控
* 多用户管理
* 多语言支持(中英双语切换)
* 各版本向下兼容,一键无忧升级


  ![](./docs/images/intro/intro.svg)


## 二、在线体验

官方Demo地址,自助注册后体验    

https://certd.handfree.work/

> 注意数据将不定期清理,不定期停止定时任务,生产使用请自行部署    
> 包含敏感信息,务必自己本地部署进行生产使用

![首页](./docs/images/start/home.png)

## 三、使用教程

仅需3步,让你的证书永不过期

### 1. 创建证书流水线
![演示](packages/ui/certd-client/public/static/doc/images/1-add.png)

> 添加成功后,就可以直接运行流水线申请证书了

### 2. 添加部署任务
当然我们一般需要把证书部署到应用上,certd支持海量的部署插件,您可以根据自身实际情况进行选择,比如部署到Nginx、阿里云、腾讯云、K8S、CDN、宝塔、1Panel等等

此处演示部署证书到主机的nginx上    
![演示](packages/ui/certd-client/public/static/doc/images/5-1-add-host.png)

如果目前的部署插件都无法满足,您也可以手动下载,然后自行部署   
![演示](packages/ui/certd-client/public/static/doc/images/13-3-download.png)

### 3. 定时运行
![演示](packages/ui/certd-client/public/static/doc/images/12-1-log-success.png)


↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓      
-------> [点我查看详细使用步骤演示](./step.md)   <--------      
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑     

更多教程请访问官方文档 [certd.docmirror.cn](https://certd.docmirror.cn/guide/)



## 四、私有化部署

由于证书、授权信息等属于高度敏感数据,请务必私有化部署,保障数据安全    

您可以根据实际情况从如下方式中选择一种方式进行私有化部署:

1. 【推荐】[Docker方式部署 ](https://certd.docmirror.cn/guide/install/docker/)
2. 【推荐】[宝塔面板方式部署 ](https://certd.docmirror.cn/guide/install/docker/)
3. 【推荐】[1Panel面板方式部署](https://certd.docmirror.cn/guide/install/1panel/)
4. 【推荐】[雨云一键部署](https://app.rainyun.com/apps/rca/store/6646/?ref=NzExMDQ2_) : 首充翻倍,每月仅需2.2元    
[<img src="https://rainyun-apps.cn-nb1.rains3.com/materials/deploy-on-rainyun-cn.svg">](https://app.rainyun.com/apps/rca/store/6646/?ref=NzExMDQ2_)
5. 【不推荐】[源码方式部署 ](https://certd.docmirror.cn/guide/install/source/)

#### Docker镜像说明:
* 国内镜像地址:
  * `registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest`
  * `registry.cn-shenzhen.aliyuncs.com/handsfree/certd:armv7`、`[version]-armv7`
* DockerHub地址:
  * `https://hub.docker.com/r/greper/certd`
  * `greper/certd:latest`
  * `greper/certd:armv7`、`greper/certd:[version]-armv7`
* GitHub Packages地址:
  * `ghcr.io/certd/certd:latest`
  * `ghcr.io/certd/certd:armv7`、`ghcr.io/certd/certd:[version]-armv7`

* 镜像构建通过`Actions`自动执行,过程公开透明,请放心使用
  * [点我查看镜像构建日志](https://github.com/certd/certd/actions/workflows/build-image.yml) 

![](./docs/images/action/action-build.jpg)

> 注意:
> * 本应用存储的证书、授权信息等属于高度敏感数据,请做好安全防护
> * 请务必使用HTTPS协议访问本应用,避免被中间人攻击
> * 请务必使用web应用防火墙防护本应用,防止XSS、SQL注入等攻击
> * 请务必做好服务器本身的安全防护,防止数据库泄露
> * 请务必做好数据备份,避免数据丢失
> * [更多安全生产建议点我](https://certd.docmirror.cn/guide/feature/safe/)


## 五、生态
 
###  1.  客户端工具 SSL-Assistant
`SSL Assistant` 是一个运行于主机上的证书部署管理助手客户端。    
支持自动扫描主机`Nginx`配置,然后从`Certd`拉取证书并部署。     
在不想暴露ssh主机密码情况下,该工具非常好用。

开源地址: https://github.com/Youngxj/SSL-Assistant


## 六、更多帮助
请访问官方文档:[https://certd.docmirror.cn/](https://certd.docmirror.cn/guide/)

* 升级方法:[升级方法](https://certd.docmirror.cn/guide/install/upgrade/)
* 常见问题:[忘记密码](https://certd.docmirror.cn/guide/use/forgotpasswd/)
* 多数据库:[多数据库配置](https://certd.docmirror.cn/guide/install/database/)
* 站点安全:[站点安全特性](https://certd.docmirror.cn/guide/feature/safe/)
* 更新日志:[CHANGELOG](./CHANGELOG.md)


## 七、联系作者
如有疑问,欢迎加入群聊(请备注certd)

| 加群 | 微信群 | QQ群 |
|---------|-------|-------|
| 二维码 | <img height="230" src="./docs/guide/contact/images/wx.png"> | <img height="230" src="./docs/guide/contact/images/qq.png"> |

也可以加作者好友

| 加作者好友 | 微信 QQ                                                       |
|---------|-------------------------------------------------------------|
| 二维码 | <img height="230" src="./docs/guide/contact/images/me.png"> |


## 八、捐赠
************************
支持开源,为爱发电,我已入驻爱发电   
https://afdian.com/a/greper

发电权益:
1. 可加入发电专属群,可以获得作者一对一技术支持
2. 您的需求我们将优先实现,并且将作为专业版功能提供
3. 一年期专业版激活码

专业版特权对比

| 功能      | 免费版                                   | 专业版                            |
|---------|---------------------------------------|--------------------------------|
| 免费证书申请  | 免费无限制                                 | 免费无限制                          |
| 域名数量 | 无限制                                   | 无限制                            |
| 证书流水线条数 | 无限制                                   | 无限制                            |
| 站点证书监控  | 限制1条                                  | 无限制                            |
| 自动部署插件  | 阿里云CDN、腾讯云、七牛CDN、主机部署、宝塔、1Panel等大部分插件 | 群晖                             |
| 通知      | 邮件通知、自定义webhook                       | 邮件免配置、企微、钉钉、飞书、anpush、server酱等 |


************************

## 九、贡献代码

1. 本地开发请参考 [贡献插件向导](https://certd.docmirror.cn/guide/development/)
2. 作为贡献者,代表您同意您贡献的代码如下许可:
   1. 可以调整开源协议以使其更严格或更宽松。
   2. 可以用于商业用途。

感谢以下贡献者做出的贡献。

<a href="https://github.com/certd/certd/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=certd/certd" />
</a>

## 十、 开源许可
* 本项目遵循 GNU Affero General Public License(AGPL)开源协议。   
* 允许个人和公司内部自由使用、复制、修改和分发本项目,未获得商业授权情况下禁止任何形式的商业用途 
* 未获得商业授权情况下,禁止任何对logo、版权信息及授权许可相关代码的修改。
* 如需商业授权,请联系作者。


## 十一、我的其他项目(求Star)

| 项目名称 | stars  | 项目描述  | 
| --------- |--------- |----------- |
| [fast-crud](https://gitee.com/fast-crud/fast-crud/)     | <img alt="GitHub stars" src="https://img.shields.io/github/stars/fast-crud/fast-crud?logo=github"/>   | 基于vue3的crud快速开发框架                 |  
| [dev-sidecar](https://github.com/docmirror/dev-sidecar/) | <img alt="GitHub stars" src="https://img.shields.io/github/stars/docmirror/dev-sidecar?logo=github"/> | 直连访问github工具,无需FQ,解决github无法访问的问题 |


================================================
FILE: README_en.md
================================================
# Certd

[English](./README_en.md) | [中文](./README.md)

Certd® is a free, fully automated certificate management system that ensures your website certificates never expire. The suffix 'd' is inspired by the naming convention of Linux daemons, representing a certificate daemon.

> We pioneered the pipeline-based certificate application and deployment model, which has been "referenced" by multiple projects. Being copied is also a form of success.

> Regarding certificate renewal:
>* In fact, it's impossible to renew or reissue a certificate without modifying the certificate file itself.
>* What we refer to as renewal is essentially applying for a new certificate following the full process and redeploying it.
>* Free certificates expire in 90 days, which may be shortened in the future. Therefore, automated deployment is essential.

> The number of pipelines is now unlimited. Welcome to use it.

## 1. Features
This project not only supports automated certificate application but also automated certificate deployment and updates, ensuring your certificates never expire.

* Fully automated certificate application (supports domains registered with all registrars and multiple domain verification methods such as DNS-01, HTTP-01, and CNAME proxy).
* Fully automated certificate deployment and updates (currently supports deployment to over 70 plugins, including hosts, Alibaba Cloud, Tencent Cloud, etc.).
* Supports wildcard domains/pan-domains, allows multiple domains in a single certificate, and supports various certificate formats such as pem, pfx, der, and jks.
* Multiple notification methods, including email, webhook, WeChat Work, DingTalk, Lark, and anpush.
* On-premises deployment, local data storage, simple and quick installation. Images are built by Github Actions, with a transparent process.
* Multiple security measures, including authorization encryption, site hiding, 2FA, and password brute-force protection.
* Supports multiple databases such as SQLite, PostgreSQL, and MySQL.
* Open API support.
* Site certificate monitoring.
* Multi-user management.
* Multi-language support (Chinese and English switching).
* Downward compatibility across all versions, with one-click worry-free upgrades.

  ![](./docs/images/intro/intro.svg)

## 2. Online Experience
Visit the official demo site and register to experience it.

https://certd.handfree.work/

> Note: Data will be cleaned up irregularly, and scheduled tasks may be stopped. For production use, please deploy it yourself.
> The content contains sensitive information. Make sure to deploy it locally for production use.

![Home Page](./docs/images/start/home.png)

## 3. Usage Tutorial
Just 3 steps to ensure your certificates never expire.

### 1. Create a Certificate Pipeline
![Demonstration](packages/ui/certd-client/public/static/doc/images/1-add.png)

> After successful addition, you can directly run the pipeline to apply for a certificate.

### 2. Add a Deployment Task
Normally, we need to deploy certificates to applications. Certd supports a wide range of deployment plugins. You can choose based on your needs, such as deploying to Nginx, Alibaba Cloud, Tencent Cloud, K8S, CDN, Baota, 1Panel, etc.

Here's a demonstration of deploying certificates to a host's Nginx:
![Demonstration](packages/ui/certd-client/public/static/doc/images/5-1-add-host.png)

If the current deployment plugins don't meet your needs, you can also download them manually and deploy them yourself.
![Demonstration](packages/ui/certd-client/public/static/doc/images/13-3-download.png)

### 3. Run Scheduled Tasks
![Demonstration](packages/ui/certd-client/public/static/doc/images/12-1-log-success.png)

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
-------> [Click here to view detailed usage steps](./step.md) <--------
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

For more tutorials, please visit the official documentation [certd.docmirror.cn](https://certd.docmirror.cn/guide/).

## 4. On-Premises Deployment
Since certificates, authorization information, and other data are highly sensitive, please make sure to deploy them on-premises to ensure data security.

You can choose one of the following deployment methods based on your needs:

1. 【Recommended】[Docker Deployment](https://certd.docmirror.cn/guide/install/docker/)
2. 【Recommended】[BT Panel Deployment](https://certd.docmirror.cn/guide/install/docker/)
3. 【Recommended】[1Panel Deployment](https://certd.docmirror.cn/guide/install/1panel/)
4. 【Recommended】[Rainyun One-Click Deployment](https://app.rainyun.com/apps/rca/store/6646/?ref=NzExMDQ2_): Double your first recharge, only $2.2 per month.
[<img src="https://rainyun-apps.cn-nb1.rains3.com/materials/deploy-on-rainyun-cn.svg">](https://app.rainyun.com/apps/rca/store/6646/?ref=NzExMDQ2_)
5. 【Not Recommended】[Source Code Deployment](https://certd.docmirror.cn/guide/install/source/)

#### Docker Image Information:
* Domestic Image Addresses:
  * `registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest`
  * `registry.cn-shenzhen.aliyuncs.com/handsfree/certd:armv7`, `[version]-armv7`
* DockerHub Addresses:
  * `https://hub.docker.com/r/greper/certd`
  * `greper/certd:latest`
  * `greper/certd:armv7`, `greper/certd:[version]-armv7`
* GitHub Packages Addresses:
  * `ghcr.io/certd/certd:latest`
  * `ghcr.io/certd/certd:armv7`, `ghcr.io/certd/certd:[version]-armv7`

* Images are built automatically by `Actions`, with a transparent process. Please use them with confidence.
  * [Click here to view image build logs](https://github.com/certd/certd/actions/workflows/build-image.yml)

![](./docs/images/action/action-build.jpg)

> Note:
> * The certificates, authorization information, and other data stored in this application are highly sensitive. Please take appropriate security measures.
> * Make sure to use the HTTPS protocol to access this application to avoid man-in-the-middle attacks.
> * Make sure to use a web application firewall to protect this application from attacks such as XSS and SQL injection.
> * Make sure to secure the server itself to prevent database leakage.
> * Make sure to back up your data to avoid data loss.
> * [Click here for more production safety suggestions](https://certd.docmirror.cn/guide/feature/safe/)

## 5. Ecosystem

### 1. Client Tool: SSL-Assistant
`SSL Assistant` is a certificate deployment and management assistant client that runs on hosts. It supports automatic scanning of the host's `Nginx` configuration and pulling certificates from `Certd` for deployment. This tool is very useful when you don't want to expose your SSH host password.

Open-source Address: https://github.com/Youngxj/SSL-Assistant

## 6. More Help
Please visit the official documentation: [https://certd.docmirror.cn/](https://certd.docmirror.cn/guide/).

* Upgrade Method: [Upgrade Guide](https://certd.docmirror.cn/guide/install/upgrade/)
* Common Issues: [Forgot Password](https://certd.docmirror.cn/guide/use/forgotpasswd/)
* Multi-Database: [Multi-Database Configuration](https://certd.docmirror.cn/guide/install/database/)
* Site Security: [Site Security Features](https://certd.docmirror.cn/guide/feature/safe/)
* Changelog: [CHANGELOG](./CHANGELOG.md)

## 7. Contact the Author
If you have any questions, feel free to join the group chat (please mention 'certd' in your message).

| Join Group | WeChat Group | QQ Group |
|---------|-------|-------|
| QR Code | <img height="230" src="./docs/guide/contact/images/wx.png"> | <img height="230" src="./docs/guide/contact/images/qq.png"> |

You can also add the author as a friend.

| Add Author as Friend | WeChat QQ |
|---------|-------|-------|
| QR Code | <img height="230" src="./docs/guide/contact/images/me.png"> |

## 8. Donation
************************
Support open-source projects and contribute with love. I've joined Afdian.
https://afdian.com/a/greper

Benefits of Contribution:
1. Join the exclusive contributor group and get one-on-one technical support from the author.
2. Your requests will be prioritized and implemented as professional edition features.
3. Receive a one-year professional edition activation code.

Comparison of Professional Edition Privileges:

| Feature | Free Edition | Professional Edition |
|---------|---------------------------------------|--------------------------------|
| Free Certificate Application | Unlimited for free | Unlimited for free |
| Number of Domains | Unlimited | Unlimited |
| Number of Certificate Pipelines | Unlimited | Unlimited |
| Site Certificate Monitoring | Limited to 1 | Unlimited |
| Automatic Deployment Plugins | Most plugins such as Alibaba Cloud CDN, Tencent Cloud, QiNiu CDN, Host Deployment, Baota, 1Panel | Synology |
| Notifications | Email, Custom Webhook | Email without configuration, WeChat Work, DingTalk, Lark, anpush, ServerChan, etc. |

************************

## 9. Contribute Code

1. For local development, please refer to the [Plugin Contribution Guide](https://certd.docmirror.cn/guide/development/).
2. As a contributor, you agree that your contributed code is subject to the following license:
   1. The open-source license can be adjusted to be more or less restrictive.
   2. It can be used for commercial purposes.

Thank you to the following contributors.

<a href="https://github.com/certd/certd/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=certd/certd" />
</a>

## 10. Open-Source License
* This project follows the GNU Affero General Public License (AGPL).
* Individuals and companies are allowed to use, copy, modify, and distribute this project freely for internal use. Any form of commercial use is prohibited without obtaining commercial authorization.
* Without commercial authorization, any modification of the logo, copyright information, and license-related code is prohibited.
* For commercial authorization, please contact the author.

## 11. My Other Projects (Please Star)

| Project Name | Stars | Project Description |
|----------------|---------------|--------------|
| [fast-crud](https://gitee.com/fast-crud/fast-crud/) | <img alt="GitHub stars" src="https://img.shields.io/github/stars/fast-crud/fast-crud?logo=github"/> | A fast CRUD development framework based on Vue3. |
| [dev-sidecar](https://github.com/docmirror/dev-sidecar/) | <img alt="GitHub stars" src="https://img.shields.io/github/stars/docmirror/dev-sidecar?logo=github"/> | A tool to access GitHub directly without a VPN, solving the problem of inaccessible GitHub. |


================================================
FILE: build-dev.trigger
================================================
2


================================================
FILE: build.trigger
================================================
23:09


================================================
FILE: deploy.js
================================================
import http from 'axios'
import fs from 'fs'
//读取 packages/core/pipline/package.json的版本号
import {default as packageJson} from './packages/core/pipeline/package.json' assert { type: "json" };

const certdVersion = packageJson.version
console.log("certdVersion", certdVersion)

// 同步npmmirror的包
async function getPackages(directoryPath) {
    return new Promise((resolve, reject) => {
        // 读取目录下的文件和目录列表
        fs.readdir(directoryPath, {withFileTypes: true}, (err, files) => {
            if (err) {
                console.log('无法读取目录:', err);
                reject(err)
                return;
            }

            // 过滤仅保留目录
            const directories = files
                .filter(file => file.isDirectory())
                .map(directory => directory.name);

            console.log('目录列表:', directories);
            resolve(directories)
        });
    })

}

async function getAllPackages() {
    const base = await getPackages("./packages/core")
    const plugins = await getPackages("./packages/plugins")
    const libs = await getPackages("./packages/libs")

    return base.concat(plugins).concat(libs)
}

async function sync() {
    const packages = await getAllPackages()
    for (const pkg of packages) {
        await http({
            url: `http://registry-direct.npmmirror.com/@certd/${pkg}/sync?sync_upstream=true`,
            method: 'PUT',
            headers: {
                "Content-Type": "application/json"
            },
            data: {}
        })
        console.log(`sync success:${pkg}`)
        await sleep(30*1000)
    }
}

// curl -X PUT https://registry-direct.npmmirror.com/@certd/plugin-cert/sync?sync_upstream=true

const certdImageBuild = "http://flow-openapi.aliyun.com/pipeline/webhook/4zgFk3i4RZEMGuQzlOcI"
const certdImageRun = "http://flow-openapi.aliyun.com/pipeline/webhook/lzCzlGrLCOHQaTMMt0mG"
const webhooks = [certdImageBuild,certdImageRun]

async function sleep(time) {
    return new Promise(resolve => {
        setTimeout(resolve, time)
    })
}

async function triggerBuild() {
    await sleep(60000)
    for (const webhook of webhooks) {
        await http({
            url: webhook,
            method: 'POST',
            headers: {
                "Content-Type": "application/json"
            },
            data: {
                'CERTD_VERSION': certdVersion
            }
        })
        console.log(`webhook success:${webhook}`)
        await sleep(30*60*1000)
    }

}

async function start() {
    // await build()
    console.log("等待60秒")
    await sleep(100* 1000)
    await sync()
    await sleep(100 * 1000)
    await triggerBuild()
}

start()


/**
 * 打包前 修改 lerna
 * nodemodules里面搜索如下
 * return childProcess.exec("git", ["add", "--", ...files], execOpts);
 *
 * ('git', ['add', '--', ...files]
 * ('git', ['add', '.']
 */


================================================
FILE: deploy.trigger
================================================
5


================================================
FILE: docker/run/docker-compose.yaml
================================================
version: '3.3' # 兼容旧版docker-compose
services:
  certd:
    # 镜像                                                  #  ↓↓↓↓↓ ---- 镜像版本号,建议改成固定版本号,例如:certd:1.29.0
    image: registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest
    # image: ghcr.io/certd/certd:latest                    #   --------- 如果 报镜像not found,可以尝试其他镜像源
    # image: greper/certd:latest
    container_name: certd # 容器名
    restart: unless-stopped # 自动重启
    volumes:
      #   ↓↓↓↓↓ -------------------------------------------------------- 数据库以及证书存储路径,默认存在宿主机的/data/certd/目录下,【您需要定时备份此目录,以保障数据容灾】
      #                                                                  只要修改冒号前面的,冒号后面的/app/data不要动
      - /data/certd:/app/data
    ports: # 端口映射
      #  ↓↓↓↓ ---------------------------------------------------------- 如果端口有冲突,可以修改第一个7001为其他不冲突的端口号,第二个7001不要动
      - "7001:7001"
      #  ↓↓↓↓ ---------------------------------------------------------- https端口,可以根据实际情况,是否暴露该端口
      - "7002:7002"
    #↓↓↓↓ -------------------------------------------------------------- 如果出现getaddrinfo EAI_AGAIN 或 getaddrinfo ENOTFOUND 错误,可以尝试设置dns
#    dns:
#      - 223.5.5.5      # 阿里云公共dns
#      - 223.6.6.6
#       # ↓↓↓↓ --------------------------------------------------------- 如果你服务器在腾讯云,可以用这个替换上面阿里云的公共dns
#      - 119.29.29.29  # 腾讯云公共dns
#      - 182.254.116.116
#       # ↓↓↓↓ --------------------------------------------------------- 如果你服务器部署在国外,可以用这个替换上面阿里云的公共dns
#      - 8.8.8.8       # 谷歌公共dns
#      - 8.8.4.4
#    extra_hosts:
#        # ↓↓↓↓ -------------------------------------------------------- 这里可以配置自定义hosts,外网域名可以指向本地局域网ip地址
#      - "localdomain.com:192.168.1.3"
#        #         ↓↓↓↓ ------------------------------------------------ 直接使用主机的网络,如果网络问题实在找不到原因,可以尝试打开此参数
#    network_mode: host
    labels:
      com.centurylinklabs.watchtower.enable: "true"
#    ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把下面networks的注释放开
#    networks:
#      - ip6net
    environment:
#             ↓↓↓↓ ----------------------------------------------------- 使用上海东八时区
#      - TZ=Asia/Shanghai
#     设置环境变量即可自定义certd配置
#     配置项见: packages/ui/certd-server/src/config/config.default.ts
#     配置规则: certd_ + 配置项, 点号用_代替
#                                    #↓↓↓↓ ----------------------------- 如果忘记管理员密码,可以设置为true,重启之后,管理员密码将改成123456,然后请及时修改回false
      - certd_system_resetAdminPasswd=false

#     默认使用sqlite文件数据库,如果需要使用其他数据库,请设置以下环境变量
#     注意: 选定使用一种数据库之后,不支持更换数据库。
#     数据库迁移方法:1、使用新数据库重新部署一套,然后将旧数据同步过去,注意flyway_history表的数据不要同步
#                                    #↓↓↓↓ ----------------------------- 使用postgresql数据库,需要提前创建数据库
#      - certd_flyway_scriptDir=./db/migration-pg                        # 升级脚本目录
#      - certd_typeorm_dataSource_default_type=postgres                  # 数据库类型
#      - certd_typeorm_dataSource_default_host=localhost                 # 数据库地址
#      - certd_typeorm_dataSource_default_port=5433                      # 数据库端口
#      - certd_typeorm_dataSource_default_username=postgres              # 用户名
#      - certd_typeorm_dataSource_default_password=yourpasswd            # 密码
#      - certd_typeorm_dataSource_default_database=certd                 # 数据库名

#                                    #↓↓↓↓ ----------------------------- 使用mysql数据库,需要提前创建数据库 charset=utf8mb4, collation=utf8mb4_bin
#      - certd_flyway_scriptDir=./db/migration-mysql                     # 升级脚本目录
#      - certd_typeorm_dataSource_default_type=mysql                     # 数据库类型, 或者 mariadb
#      - certd_typeorm_dataSource_default_host=localhost                 # 数据库地址
#      - certd_typeorm_dataSource_default_port=3306                      # 数据库端口
#      - certd_typeorm_dataSource_default_username=root                  # 用户名
#      - certd_typeorm_dataSource_default_password=yourpasswd            # 密码
#      - certd_typeorm_dataSource_default_database=certd                 # 数据库名

#         ↓↓↓↓ ---------------------------------------------------------  自动升级,上面certd的版本号要保持为latest
#  certd-updater:  # 添加 Watchtower 服务
#    image: containrrr/watchtower:latest
#    container_name: certd-updater
#    restart: unless-stopped
#    volumes:
#      - /var/run/docker.sock:/var/run/docker.sock
#    # 配置 自动更新
#    environment:
#      - WATCHTOWER_CLEANUP=true            # 自动清理旧版本容器
#      - WATCHTOWER_INCLUDE_STOPPED=false   # 不更新已停止的容器
#      - WATCHTOWER_LABEL_ENABLE=true       # 根据容器标签进行更新
#      - WATCHTOWER_POLL_INTERVAL=600       # 每 10 分钟检查一次更新


#    ↓↓↓↓ -------------------------------------------------------------- 启用ipv6网络,还需要把上面networks的注释放开
#networks:
#  ip6net:
#    enable_ipv6: true
#    ipam:
#      config:
#        - subnet: 2001:db8::/64


================================================
FILE: docs/.gitignore
================================================
.vitepress/cache
dist

================================================
FILE: docs/.vitepress/config.ts
================================================
import {defineConfig} from "vitepress";
// Import lightbox plugin
import lightbox from "vitepress-plugin-lightbox";

// https://vitepress.dev/reference/site-config
export default defineConfig({
    title: "Certd",
    titleTemplate: "开源SSL证书管理工具,证书自动化申请部署,让你的网站证书永不过期",
    description: "Certd帮助文档,Certd是一款开源免费的全自动SSL证书管理工具;证书自动化申请部署流水线;自动证书申请、更新、续期;通配符证书,泛域名证书申请;证书自动化部署到阿里云、腾讯云、主机、群晖、宝塔。",
    markdown: {
        config: (md) => {
            // Use lightbox plugin
            md.use(lightbox, {});
        }
    },
    sitemap: {
        hostname: 'https://certd.docmirror.cn'
    },
    head: [
        // [
        //     'meta',
        //     {
        //         name: 'viewport',
        //         content:
        //           'width=device-width,initial-scale=1,minimfast-cum-scale=1.0,maximum-scale=1.0,user-scalable=no',
        //     },
        // ],
        ["meta", {
            name: "keywords",
            content: "证书自动申请、证书自动更新、证书自动续期、证书自动续签、证书管理工具、Certd、SSL证书自动部署、证书自动化,https证书,pfx证书,der证书,TLS证书,nginx证书自动续签自动部署,SSL平台,证书管理平台,证书流水线"
        }],
        // ["meta", { name: "google-site-verification",content: "V5XLTSnXoT15uQotwpxJoQolUo2d5UbSL-TacsyOsC0"}],
        //<meta name="baidu-site-verification" content="codeva-MiWN8Y07Ua" />
        // ["meta", {name: "baidu-site-verification",content: "codeva-MiWN8Y07Ua"}],
        ["link", {rel: "icon", href: "/static/logo/logo.svg"}]
    ],
    themeConfig: {
        logo: "/static/logo/logo.svg",
        search: {
            provider: "local",
            options: {
                detailedView: true,
                translations: {
                    button: {
                        buttonText: "搜索文档",
                        buttonAriaLabel: "搜索文档"
                    },
                    modal: {
                        noResultsText: "无法找到相关结果",
                        resetButtonTitle: "清除查询条件",
                        footer: {
                            selectText: "选择",
                            closeText: "关闭",
                            navigateText: "切换"
                        }
                    }
                }
            }
        },
        // https://vitepress.dev/reference/default-theme-config
        nav: [
            {text: "首页", link: "/"},
            {text: "指南", link: "/guide/"},
            {text: "Demo体验", link: "https://certd.handfree.work"}
        ],
        sidebar: {
            "/guide/": [
                {
                    text: "入门",
                    items: [
                        {text: "简介", link: "/guide/"},
                        {text: "快速开始", link: "/guide/start.md"},
                        {
                            text: "私有化部署",
                            items: [
                                {text: "docker部署", link: "/guide/install/docker/"},
                                {text: "宝塔面板部署", link: "/guide/install/baota/"},
                                {text: "1Panel部署", link: "/guide/install/1panel/"},
                                {text: "群晖部署", link: "/guide/use/synology/"},
                                {text: "源码部署", link: "/guide/install/source/"}
                            ]
                        },
                        {text: "演示教程", link: "/guide/tutorial.md"},
                        {text: "版本升级", link: "/guide/install/upgrade.md"}
                    ]
                },
                {
                    text: "特性",
                    items: [
                        {text: "CNAME代理校验", link: "/guide/feature/cname/index.md"},
                        {text: "多数据库支持", link: "/guide/install/database.md"},
                        {text: "开放接口", link: "/guide/open/index.md"},
                        {
                            text: "站点安全",  link: "/guide/feature/safe/"
                        },
                        {
                            text: "插件列表", items: [
                                {text: "授权提供商", link: "/guide/plugins/access.md"},
                                {text: "DNS提供商", link: "/guide/plugins/dns-provider.md"},
                                {text: "任务插件", link: "/guide/plugins/deploy.md"},
                                {text: "通知插件", link: "/guide/plugins/notification.md"},
                            ]
                        },
                    ]
                },
                {
                    text: "常见问题",
                    items: [
                        {text: "QA", link: "/guide/qa/use.md"},
                        {text: "常见报错处理", link: "/guide/qa/"},
                        {text: "群晖证书部署", link: "/guide/use/synology/"},
                        {text: "腾讯云密钥获取", link: "/guide/use/tencent/"},
                        {text: "连接windows主机", link: "/guide/use/host/windows.md"},
                        {text: "Google EAB获取", link: "/guide/use/google/"},
                        {text: "阿里云相关", link: "/guide/use/aliyun/"},
                        {text: "忘记密码", link: "/guide/use/forgotpasswd/"},
                        {text: "数据备份", link: "/guide/use/backup/"},
                        {text: "Certd本身的证书更新", link: "/guide/use/https/index.md"},
                        {text: "js脚本插件使用", link: "/guide/use/custom-script/index.md"},
                        {text: "邮箱配置", link: "/guide/use/email/index.md"},
                        {text: "IPv6支持", link: "/guide/use/setting/ipv6.md"},
                        {text: "ESXi", link: "/guide/use/ESXi/index.md"},
                    ]
                },
                {
                    text: "商业版配置", link: "/guide/use/comm/", items: [
                        {text: "支付宝配置", link: "/guide/use/comm/payments/alipay.md"},
                        {text: "微信支付配置", link: "/guide/use/comm/payments/wxpay.md"},
                        {text: "彩虹易支付配置", link: "/guide/use/comm/payments/yizhifu.md"},
                    ]
                },
                {
                    text: "其他",
                    items: [
                        {text: "贡献代码", link: "/guide/development/index.md"},
                        {text: "更新日志", link: "/guide/changelogs/CHANGELOG.md"},
                        {text: "镜像说明", link: "/guide/image.md"},
                        {text: "联系我们", link: "/guide/contact/"},
                        {text: "捐赠", link: "/guide/donate/"},
                        {text: "开源协议", link: "/guide/license/"},
                        {text: "我的其他开源项目", link: "/guide/link/"},
                    ]
                }
            ],
        },

        socialLinks: [
            {icon: "github", link: "https://github.com/certd/certd"}
        ],
        footer: {
            message: "Certd帮助文档 |  <a href='https://beian.miit.gov.cn/' target='_blank'>粤ICP备14088435号</a> ",
            copyright: "Copyright © 2021-present <a href='https://handfree.work/' target='_blank'>handfree.work</a> "
        }
    }
});


================================================
FILE: docs/.vitepress/theme/Layout.vue
================================================
<script setup>
import DefaultTheme from "vitepress/theme";
import { onMounted } from "vue";
import { useRouter } from "vitepress";
import mediumZoom from "medium-zoom";

const { Layout } = DefaultTheme;
const router = useRouter();

// Setup medium zoom with the desired options
const setupMediumZoom = () => {
  mediumZoom("[data-zoomable]", {
    background: "transparent",
  });
};

// Apply medium zoom on load
onMounted(setupMediumZoom);

// Subscribe to route changes to re-apply medium zoom effect
router.onAfterRouteChanged = setupMediumZoom;
</script>

<template>
  <Layout />
</template>

<style>
.medium-zoom-overlay {
  backdrop-filter: blur(5rem);
}

.medium-zoom-overlay,
.medium-zoom-image--opened {
  z-index: 999;
}
</style>

================================================
FILE: docs/.vitepress/theme/index.ts
================================================
// https://vitepress.dev/guide/custom-theme
// import { h } from 'vue'
import type { Theme } from 'vitepress'
import DefaultTheme from 'vitepress/theme'
import './style.css'
import Layout from './Layout.vue'

import { registerAnalytics, siteIds, trackPageview } from './plugins/baidutongji'
import { inBrowser } from "vitepress";


export default {
  extends: DefaultTheme,
  Layout,
  // Layout: () => {
  //   return h(DefaultTheme.Layout, null, {
  //     // https://vitepress.dev/guide/extending-default-theme#layout-slots
  //   })
  // },
  enhanceApp({ app, router, siteData }) {
    // ...
    if (inBrowser) {
      registerAnalytics(siteIds)

      window.addEventListener('hashchange', () => {
        const { href: url } = window.location
        trackPageview(siteIds, url)
      })

      router.onAfterRouteChanged = (to) => {
        trackPageview(siteIds, to)
      }
    }
  }
} satisfies Theme


================================================
FILE: docs/.vitepress/theme/plugins/baidutongji.ts
================================================
import { inBrowser } from 'vitepress'

/**
 * 统计站点的 ID 列表
 */
export const siteIds = 'a6ce877a899ae44292e4f854a53d688e'

declare global {
  interface Window {
    _hmt: any
  }
}

/**
 * 注册统计
 */
export function registerAnalytics(siteId: string) {
  if (!inBrowser)
    return
  if (document.querySelector(`#analytics-plugin-${siteId}`))
    return
  window._hmt = window._hmt ? window._hmt : []
  const script = document.createElement('script')
  script.id = `analytics-${siteId}`
  script.async = true
  script.src = `https://hm.baidu.com/hm.js?${siteId}`
  document.querySelector('head')?.appendChild(script)
}

/**
 * 上报 PV 数据
 * @param siteId - 站点 ID
 * @param pageUrl - 页面 URL
 */
export function trackPageview(siteId: string, pageUrl: string) {
  if (!inBrowser)
    return
  if (!pageUrl || typeof pageUrl !== 'string')
    pageUrl = '/'

  if (pageUrl.startsWith('http')) {
    const urlFragment = pageUrl.split('/')
    const origin = `${urlFragment[0]}//${urlFragment[2]}`
    pageUrl = pageUrl.replace(origin, '')
  }

  window._hmt.push(['_setAccount', siteId])
  window._hmt.push(['_trackPageview', pageUrl])
}


================================================
FILE: docs/.vitepress/theme/style.css
================================================
/**
 * Customize default theme styling by overriding CSS variables:
 * https://github.com/vuejs/vitepress/blob/main/src/client/theme-default/styles/vars.css
 */

/**
 * Colors
 *
 * Each colors have exact same color scale system with 3 levels of solid
 * colors with different brightness, and 1 soft color.
 * 
 * - `XXX-1`: The most solid color used mainly for colored text. It must
 *   satisfy the contrast ratio against when used on top of `XXX-soft`.
 *
 * - `XXX-2`: The color used mainly for hover state of the button.
 *
 * - `XXX-3`: The color for solid background, such as bg color of the button.
 *   It must satisfy the contrast ratio with pure white (#ffffff) text on
 *   top of it.
 *
 * - `XXX-soft`: The color used for subtle background such as custom container
 *   or badges. It must satisfy the contrast ratio when putting `XXX-1` colors
 *   on top of it.
 *
 *   The soft color must be semi transparent alpha channel. This is crucial
 *   because it allows adding multiple "soft" colors on top of each other
 *   to create a accent, such as when having inline code block inside
 *   custom containers.
 *
 * - `default`: The color used purely for subtle indication without any
 *   special meanings attached to it such as bg color for menu hover state.
 *
 * - `brand`: Used for primary brand colors, such as link text, button with
 *   brand theme, etc.
 *
 * - `tip`: Used to indicate useful information. The default theme uses the
 *   brand color for this by default.
 *
 * - `warning`: Used to indicate warning to the users. Used in custom
 *   container, badges, etc.
 *
 * - `danger`: Used to show error, or dangerous message to the users. Used
 *   in custom container, badges, etc.
 * -------------------------------------------------------------------------- */

 :root {
  --vp-c-default-1: var(--vp-c-gray-1);
  --vp-c-default-2: var(--vp-c-gray-2);
  --vp-c-default-3: var(--vp-c-gray-3);
  --vp-c-default-soft: var(--vp-c-gray-soft);

  --vp-c-brand-1: var(--vp-c-indigo-1);
  --vp-c-brand-2: var(--vp-c-indigo-2);
  --vp-c-brand-3: var(--vp-c-indigo-3);
  --vp-c-brand-soft: var(--vp-c-indigo-soft);

  --vp-c-tip-1: var(--vp-c-brand-1);
  --vp-c-tip-2: var(--vp-c-brand-2);
  --vp-c-tip-3: var(--vp-c-brand-3);
  --vp-c-tip-soft: var(--vp-c-brand-soft);

  --vp-c-warning-1: var(--vp-c-yellow-1);
  --vp-c-warning-2: var(--vp-c-yellow-2);
  --vp-c-warning-3: var(--vp-c-yellow-3);
  --vp-c-warning-soft: var(--vp-c-yellow-soft);

  --vp-c-danger-1: var(--vp-c-red-1);
  --vp-c-danger-2: var(--vp-c-red-2);
  --vp-c-danger-3: var(--vp-c-red-3);
  --vp-c-danger-soft: var(--vp-c-red-soft);
}

/**
 * Component: Button
 * -------------------------------------------------------------------------- */

:root {
  --vp-button-brand-border: transparent;
  --vp-button-brand-text: var(--vp-c-white);
  --vp-button-brand-bg: var(--vp-c-brand-3);
  --vp-button-brand-hover-border: transparent;
  --vp-button-brand-hover-text: var(--vp-c-white);
  --vp-button-brand-hover-bg: var(--vp-c-brand-2);
  --vp-button-brand-active-border: transparent;
  --vp-button-brand-active-text: var(--vp-c-white);
  --vp-button-brand-active-bg: var(--vp-c-brand-1);
}

/**
 * Component: Home
 * -------------------------------------------------------------------------- */

:root {
  --vp-home-hero-name-color: transparent;
  --vp-home-hero-name-background: -webkit-linear-gradient(
    120deg,
    #bd34fe 30%,
    #41d1ff
  );

  --vp-home-hero-image-background-image: linear-gradient(
    -45deg,
    #bd34fe 50%,
    #47caff 50%
  );
  --vp-home-hero-image-filter: blur(44px);
}

@media (min-width: 640px) {
  :root {
    --vp-home-hero-image-filter: blur(56px);
  }
}

@media (min-width: 960px) {
  :root {
    --vp-home-hero-image-filter: blur(68px);
  }
}

/**
 * Component: Custom Block
 * -------------------------------------------------------------------------- */

:root {
  --vp-custom-block-tip-border: transparent;
  --vp-custom-block-tip-text: var(--vp-c-text-1);
  --vp-custom-block-tip-bg: var(--vp-c-brand-soft);
  --vp-custom-block-tip-code-bg: var(--vp-c-brand-soft);
}

/**
 * Component: Algolia
 * -------------------------------------------------------------------------- */

.DocSearch {
  --docsearch-primary-color: var(--vp-c-brand-1) !important;
}



================================================
FILE: docs/guide/changelogs/CHANGELOG.md
================================================
# Change Log

All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.

## [1.36.10](https://github.com/certd/certd/compare/v1.36.9...v1.36.10) (2025-07-18)

### Bug Fixes

* 企业微信通知改成text类型,因为markdown类型不支持@用户 ([747d266](https://github.com/certd/certd/commit/747d26674248082e678a3fd5ecc94712641a2716))
* api接口获取不到证书的bug ([05a33a0](https://github.com/certd/certd/commit/05a33a0ec9999e2802f6c7b23cc1c61a2b9e963d))

### Performance Improvements

* 部署到阿里云oss插件支持选择上传到阿里云cas中的证书 ([2ea2c8c](https://github.com/certd/certd/commit/2ea2c8c05fc40f79595f1bbde67c1413558bf684))
* 优化子域名托管的说明 ([b15f514](https://github.com/certd/certd/commit/b15f514018b728acb0922ee3f93c1f302eb5d471))
* 账号即将过期通知 ([e403450](https://github.com/certd/certd/commit/e40345095f31e2fb8e2333a6647466659133fa0c))
* 子域名托管重复域名不允许添加 ([ffc0c7b](https://github.com/certd/certd/commit/ffc0c7bb7b16d9904fd2d905d1c4e1d4854e92a9))

## [1.36.9](https://github.com/certd/certd/compare/v1.36.7...v1.36.9) (2025-07-15)

### Bug Fixes

* 修复ssh无法执行命令的bug ([9763cb0](https://github.com/certd/certd/commit/9763cb00e5d95b2fa5d1c2d3d4a8eecac71600e6))

## [1.36.7](https://github.com/certd/certd/compare/v1.36.6...v1.36.7) (2025-07-15)

### Bug Fixes

* 修复流水线列表页报length错误的bug ([9864792](https://github.com/certd/certd/commit/9864792bbfd149e770d6e1ffa809573694f99dd3))
* 修复流水线页面状态没有刷新的bug ([93e9498](https://github.com/certd/certd/commit/93e9498b410353f504e11e264db62468895d7290))
* 修复自定义证书检查时间重启之后不生效的bug ([38e867c](https://github.com/certd/certd/commit/38e867c917bbc68bd228bdd8064f3e7358d6413d))

### Performance Improvements

* 支持上传证书到各种对象存储,oss、cos、七牛、s3、minio等 ([1da8617](https://github.com/certd/certd/commit/1da8617a53a675776635bbc3bcb3c6d7dff83e27))
* 支持邮箱发送证书 ([95332d5](https://github.com/certd/certd/commit/95332d5db96cd54ddab6ab737332417a09169b39))

## [1.36.6](https://github.com/certd/certd/compare/v1.36.5...v1.36.6) (2025-07-14)

### Bug Fixes

* 修复某些页面翻译不全显示错误的bug ([0b3158f](https://github.com/certd/certd/commit/0b3158fdd5fe5bb0a98c4e65715dbc3de2c38047))
* 修复运行流水线后会闪烁一下的bug ([dfc9362](https://github.com/certd/certd/commit/dfc9362084082ee535b898f23b2609c1d946a6fd))

### Performance Improvements

* 部署plesk证书,支持删除未使用的证书 ([902d246](https://github.com/certd/certd/commit/902d246d1a7473ad90f604028c4eb09c8c67d99c))
* 通知和定时器的删除按钮显示为红色更显眼 ([61ba83c](https://github.com/certd/certd/commit/61ba83c77546c3d505d081e19a3d68c127662bf1))
* 优化流水线列表页面、详情页面性能,精简返回数据 ([609ac9c](https://github.com/certd/certd/commit/609ac9c9a2dde605eb09834ae59693c1cb238765))
* 支持自动选择校验方式申请证书 ([3f99432](https://github.com/certd/certd/commit/3f9943270cfb12946e38e6272bc5e8d95ad6ab9e))
* OpenAPI支持autoApply参数 ([42f4d14](https://github.com/certd/certd/commit/42f4d1477dc791520a874aed56035abcbc8c433b))

## [1.36.5](https://github.com/certd/certd/compare/v1.36.4...v1.36.5) (2025-07-11)

### Bug Fixes

* 某些插件找不到的bug ([4b3f4a8](https://github.com/certd/certd/commit/4b3f4a868a8b0800c5c59de9d0f47bddc079e7b3))

## [1.36.4](https://github.com/certd/certd/compare/v1.36.3...v1.36.4) (2025-07-10)

### Bug Fixes

* 修复查看证书对话框翻译错误的bug ([8626b6d](https://github.com/certd/certd/commit/8626b6d9f235c511766f2ae98e0a37f6cebb621c))
* 修复translation后分组编辑打不开的bug ([46a1b74](https://github.com/certd/certd/commit/46a1b7479923d2feb2dece202a5932b99981b2cd))
* 执行windows nginx命令时,改为return code判断是否执行成功 ([b37cffd](https://github.com/certd/certd/commit/b37cffd704cd08b8bdd68a6e284706eabe59e78d))

### Performance Improvements

* 优化证书进度条颜色 ([2af91db](https://github.com/certd/certd/commit/2af91dbf2ae36a4ed17c6788bc2a2a79a3bb29f8))
* 站点证书即将过期通知标题颜色优化为红色 ([80c5331](https://github.com/certd/certd/commit/80c5331a5d4c320323d9b9b800e4ea3b72577b33))
* 支持部署到阿里云vod ([98da4e1](https://github.com/certd/certd/commit/98da4e1791ed8bb21daf2a9914fda875d14633c9))
* 支持部署证书到网宿CDN ([c3da026](https://github.com/certd/certd/commit/c3da026b33106f5195959825a68cadbe49efef00))
* 重置管理员密码同时可以清除管理员的2FA设置 ([1ece091](https://github.com/certd/certd/commit/1ece0915f172d5f8b8adb866434e7efcc5c8c46d))
* output-selector from参数支持更丰富的过滤规则 ([87853a2](https://github.com/certd/certd/commit/87853a201535f3bfe8505c40f8f5229d82ffcc73))

## [1.36.3](https://github.com/certd/certd/compare/v1.36.2...v1.36.3) (2025-07-07)

### Bug Fixes

* 修复开放接口添加按钮文本显示问题 ([f93ba99](https://github.com/certd/certd/commit/f93ba9970c12680f38eba2a7abd4b72cf3f5b6a6))

### Performance Improvements

* 优化部署到腾讯TKE插件,支持Opaque类型选择,优化填写说明 ([1445325](https://github.com/certd/certd/commit/144532530a865b634e68539e4888e26f52f73492))

## [1.36.2](https://github.com/certd/certd/compare/v1.36.1...v1.36.2) (2025-07-06)

### Bug Fixes

* 修复notification编辑按钮无法打开对话框的bug ([0cea26c](https://github.com/certd/certd/commit/0cea26c6287f52adf273b4a525c37bea8555c68c))
* 优化更新飞牛os证书有效期,修复某些情况下部署证书后飞牛无法访问https的bug ([610c919](https://github.com/certd/certd/commit/610c919c72037becc0ed326f5d5b18c963dfcb3a))

### Performance Improvements

* 证书检查支持自定义dns服务器 ([c53bb7c](https://github.com/certd/certd/commit/c53bb7cf677faa32729709ae0c10359db5194d7a))

## [1.36.1](https://github.com/certd/certd/compare/v1.36.0...v1.36.1) (2025-07-02)

### Bug Fixes

* 修复通知和触发器无法编辑的bug ([a2e0951](https://github.com/certd/certd/commit/a2e09510426680eb425c0d7ad337f39d3f052054))

### Performance Improvements

* 支持部署到七牛云DCDN ([bde601b](https://github.com/certd/certd/commit/bde601bfffb4f7345d97e1e3b064520816d31555))

# [1.36.0](https://github.com/certd/certd/compare/v1.35.5...v1.36.0) (2025-07-01)

### Bug Fixes

* 支持自定义证书生成插件 ([481cc02](https://github.com/certd/certd/commit/481cc029fafaf280aa844cd3ca30f4653ec35d55))

### Features

* 支持模版创建流水线 ([2559f0e](https://github.com/certd/certd/commit/2559f0e822db095d1d26a7f1d517622dce22a5c2))

### Performance Improvements

* 阿里云waf cname站点选择支持翻页及域名查询 ([4cf9858](https://github.com/certd/certd/commit/4cf98584dacc5999752732f136246647a2f1f07d))
* 部署到ssh主机命令支持前置命令 ([991b741](https://github.com/certd/certd/commit/991b741cbe223b342f534157da63b71e81661f8e))
* 模版导入流水线 ([dcc8c56](https://github.com/certd/certd/commit/dcc8c569693432579709ce63656665a76bcf9a44))
* 添加用户资料编辑功能 ([7c0f43c](https://github.com/certd/certd/commit/7c0f43c8a3052f73afee3e93c9fcbc43c44ab690))
* 优化阿里云waf的日志信息 ([821c6d8](https://github.com/certd/certd/commit/821c6d807d4b3cc5092d09a6282b8cbafb9e7c9f))
* 优化中英文翻译与切换 ([acaa8b1](https://github.com/certd/certd/commit/acaa8b173183b4423584ee070e6e332e0ac0eb2d))
* 站点IP监控前先同步一下IP ([a080b60](https://github.com/certd/certd/commit/a080b606ab6e289d96b17ef7d2879b4603f889ba))
* 支持选择运行策略设置 ([60f055f](https://github.com/certd/certd/commit/60f055f293ce237c21cd9050333dad9609eceac1))

## [1.35.5](https://github.com/certd/certd/compare/v1.35.4...v1.35.5) (2025-06-20)

### Bug Fixes

* 腾讯云授权支持设置是否国际站,部署到EO插件支持国际站 ([5cd3968](https://github.com/certd/certd/commit/5cd3968929acef333cf30d3b20cf21cea6c82c5f))
* 修复邮箱包含.号校验失败的bug ([65dcae7](https://github.com/certd/certd/commit/65dcae79f8faa7a6cb425e10a0fdb6758b0719f3))

### Performance Improvements

* 首次打开任务日志查看页面,自动滚动到底部 ([43fee42](https://github.com/certd/certd/commit/43fee42198e8697185b427b1fa3eb79409603393))
* 支持批量修改通知和定时 ([e11b3be](https://github.com/certd/certd/commit/e11b3becfd4abe6547e84d09adc38ebd6e1c4b87))

## [1.35.4](https://github.com/certd/certd/compare/v1.35.3...v1.35.4) (2025-06-13)

### Performance Improvements

* 支持s3 access做测试 ([f00aeac](https://github.com/certd/certd/commit/f00aeacb8b5c81f0bafa4c1b76723dec2b6b7784))

## [1.35.3](https://github.com/certd/certd/compare/v1.35.2...v1.35.3) (2025-06-12)

### Bug Fixes

* 修复消息内容存在()<>等括号情况下无法发送tg通知的bug ([c937583](https://github.com/certd/certd/commit/c937583a50d8513d76adead3648f83eee2fcc6f9))
* 修复重试次数设置无效的bug ([e2099ac](https://github.com/certd/certd/commit/e2099ac9ca344bc70bfa4219002e9138708973ae))

### Performance Improvements

* 授权列表类型颜色优化 ([1e86338](https://github.com/certd/certd/commit/1e863382d3d1a8cc95a1abf51e75bf6eaea3244f))
* 支持雨云dns解析 ([8354348](https://github.com/certd/certd/commit/83543487e7418683bd79cfe3b9e0d792bdb977f7))
* 支持雨云dns解析以及雨云证书更新 ([43c7a19](https://github.com/certd/certd/commit/43c7a1984926f5d4647760cc134bb0aede3a7b7a))
* github 版本检查支持执行脚本 ([bad3504](https://github.com/certd/certd/commit/bad3504d4a15e6989b967b66aa9da8c6981f25bf))

## [1.35.2](https://github.com/certd/certd/compare/v1.35.1...v1.35.2) (2025-06-09)

### Bug Fixes

* 修复阿里云新加坡clb无法部署证书的bug ([c1fbc8c](https://github.com/certd/certd/commit/c1fbc8cd68ae020ef342e4e92f4d9b4869ca1ead))
* 修复阿里云新加坡clb无法部署证书的bug ([3e84e11](https://github.com/certd/certd/commit/3e84e116e863b54c6b4d7db160af372dacc5857f))
* 修复检查github release 插件无法保存最后版本的bug ([a92107c](https://github.com/certd/certd/commit/a92107cc47133883b099d5228b06373e84c8bb50))
* 修复站点监控定时器多次添加的bug ([9361679](https://github.com/certd/certd/commit/936167972fe83e519bc01a0dd961d9c0635d24ab))

### Performance Improvements

* 阿里云dns操作增加重试机制 ([424fd96](https://github.com/certd/certd/commit/424fd96615c05e949af8c837c261c1400bdffba2))
* 优化阿里云nlb支持部署扩展证书 ([9cbdfda](https://github.com/certd/certd/commit/9cbdfda829b231733d54c66c5024d46e6fc11af3))
* 子域名托管帮助链接优化为打开新窗口 ([7c0cdd1](https://github.com/certd/certd/commit/7c0cdd169e2f943e703e433677f2f437d4aa02ee))
* history增加触发类型显示 ([7f6070c](https://github.com/certd/certd/commit/7f6070c960ed7bf02add5ab36436de6573f2f1fa))

## [1.35.1](https://github.com/certd/certd/compare/v1.35.0...v1.35.1) (2025-06-07)

### Bug Fixes

* 某些证书提供商的证书确实commonName导致无法转换证书的问题 ([ac87bc5](https://github.com/certd/certd/commit/ac87bc57e957ea4679707bfd38d6840e26319bed))
* 修复站点监控通知渠道设置无效的bug ([a00453c](https://github.com/certd/certd/commit/a00453c83a58114ce2873dd6e6aaf313f1ce0f87))

### Performance Improvements

* 修改 HTTPS 服务器监听地址 ([e1cf64a](https://github.com/certd/certd/commit/e1cf64ae16d4abfe4299ff16d5088c30cf3c6365))
* 优化流水线页面,增加下次执行时间、查看证书显示 ([c820315](https://github.com/certd/certd/commit/c8203154094fae3d17198747f49f5f41ddf29a4e))
* 站点证书监控支持定时设置,重试次数设置 ([d3c2f8e](https://github.com/certd/certd/commit/d3c2f8eb436e670772d14a54acd6b541c5aa3978))
* 证书申请支持letencrypt profile选项 ([2eb0e54](https://github.com/certd/certd/commit/2eb0e54909d8ad36708e07c12fd598998159bc43))
* aliyun alb支持部署扩展证书 ([2a19b61](https://github.com/certd/certd/commit/2a19b61b7a78620c06396c2cc37cc77d738b6d12))

# [1.35.0](https://github.com/certd/certd/compare/v1.34.11...v1.35.0) (2025-06-05)

### Features

* 完善注释 ([6702ca1](https://github.com/certd/certd/commit/6702ca10a17f5d7dbff789b039f7269496f66b97))
* AWS 中国区 CloudFront 证书部署(IAM 证书) ([8a55bed](https://github.com/certd/certd/commit/8a55beda924b3be2a53b9ba80d9487cefa8bf887))
* **lego:** support for command options ([b84159f](https://github.com/certd/certd/commit/b84159f2f11531f058837c2e82d66499f3740f20))

## [1.34.11](https://github.com/certd/certd/compare/v1.34.10...v1.34.11) (2025-06-05)

### Bug Fixes

* 修复用户最大流水线数量校验的问题 ([919f70a](https://github.com/certd/certd/commit/919f70a5fd2842ca69f96f1659bb5a7ba3f73776))
* 修复中文域名使用cname方式校验无法通过的问题 ([f7d5baa](https://github.com/certd/certd/commit/f7d5baa6d04cb83c572b06e62f885890cfa0143a))
* 修复cv4pve sdk (proxmox插件连接失败时无法正常结束任务的bug) ([49f26b4](https://github.com/certd/certd/commit/49f26b4049a0549b0270395157e96e8f04a68bc4))
* 修复flexcdn部署证书的顶级CA名称显示 ([6467edb](https://github.com/certd/certd/commit/6467edb84324d7c80a85212675dbacedc459df83))
* 修复flexcdn证书commonNames错误的问题 ([ace363f](https://github.com/certd/certd/commit/ace363fa355436e769b27f71cc487d30d6441780))

### Performance Improvements

* 分组选择支持清空选项 ([03e2e99](https://github.com/certd/certd/commit/03e2e9949837b34eb3ea56d14a9e8a5dabc96063))
* 优化cname检查,当有冲突的cname记录时,给出提示 ([e639a8f](https://github.com/certd/certd/commit/e639a8f9f12640ffcca69f1a6a0324459924afbd))
* 增加下载日志按钮 ([6ff509d](https://github.com/certd/certd/commit/6ff509d263c0182645b4692c10b5fedb192db964))
* 站点监控支持批量导入域名和ip ([2d7729d](https://github.com/certd/certd/commit/2d7729dbe98f29088f5f317db2b52cc1ede223a6))
* 支持设置用户有效期 ([6ac3bc5](https://github.com/certd/certd/commit/6ac3bc564f407dad2cd0b0b0744e887387aa5da3))

## [1.34.10](https://github.com/certd/certd/compare/v1.34.9...v1.34.10) (2025-06-03)

### Bug Fixes

* **flexcdn:** fix cert upload and skipSslVerify required ([c48da5d](https://github.com/certd/certd/commit/c48da5dea7f0f0cdeae643b106b4a678acc3b14b))

### Performance Improvements

* 阿里云CLB支持部署到扩展域名 ([0e8339c](https://github.com/certd/certd/commit/0e8339c70190890d449099e1d26e5ed06ff135fb))
* 优化流水线名称过长时的显示 ([6a0cc1b](https://github.com/certd/certd/commit/6a0cc1b1f3ad508f9e4093b3b682b163f12389eb))
* 支持部署到飞牛OS ([ddfd0fb](https://github.com/certd/certd/commit/ddfd0fb81d6638352920261065f1ab8e27bdd564))
* 支持日志写入文件 ([37edbf5](https://github.com/certd/certd/commit/37edbf5824d6aaae68ea1ef7259c6f739d418d2c))

## [1.34.9](https://github.com/certd/certd/compare/v1.34.8...v1.34.9) (2025-05-30)

### Bug Fixes

* 修复Farcdn证书有效期错误的问题 ([1fe4c36](https://github.com/certd/certd/commit/1fe4c367f7128de9ba5e3395ae06bc81e63a7d5a))

### Performance Improvements

* 不止证书自动化,插件解锁无限可能 ([a9b302e](https://github.com/certd/certd/commit/a9b302e38d3328d75df8b2da3d8b914851e55e9c))
* 邮箱支持保存和选择 ([f7b0b44](https://github.com/certd/certd/commit/f7b0b44ef6044bec36510a6f0b06d8dca5bfce49))
* 支持github 新版本检查并发布通知 ([356703c](https://github.com/certd/certd/commit/356703c83ea18c6efb8931402e181280d7b7e696))

## [1.34.8](https://github.com/certd/certd/compare/v1.34.7...v1.34.8) (2025-05-28)

### Bug Fixes

* 更新 1panel API 版本支持v1/v2设置 ([e6195ad](https://github.com/certd/certd/commit/e6195ade3ec54b138825b8d6738f86eb8afdd720))
* 同步更新namesilo接口,修复无法创建和删除dns记录的问题 ([36b02c2](https://github.com/certd/certd/commit/36b02c2cec145c13d4ef29d49aba5b6b4f697df2))
* 修复阿里云 esa 证书获取站点列表错误的问题 ([0c2ea5d](https://github.com/certd/certd/commit/0c2ea5da4c836f8a0df132a3f22d399bd9ee1de9))
* 修复部署到华为cdn,子账号ak查询不到域名的bug ([ebb292a](https://github.com/certd/certd/commit/ebb292a2f7a425c1bc810f59468beb3f1d5bc3f0))
* 修复证书申请任务无法修改dns提供商类型的bug ([8802274](https://github.com/certd/certd/commit/88022747bebe2054223e0241d68d410771405e68))

### Performance Improvements

* 关闭腾讯云证书通知提醒 ([231a875](https://github.com/certd/certd/commit/231a875bb481420c39bf76ec9ff4e50954ab9fe4))
* 优化站点选择组件,切换选择时不刷新列表 ([3a14714](https://github.com/certd/certd/commit/3a147141b1a5d67c92a5ce88a5313eaa62859e03))
* 优化站点ip检查 ([a463711](https://github.com/certd/certd/commit/a463711b03a20120f2a298be15d71ca152d27f21))
* 站点监控支持监控IP ([9cc4c01](https://github.com/certd/certd/commit/9cc4c017ae646a18284e732769b82636feda01d3))
* 支持批量重新运行 ([8189982](https://github.com/certd/certd/commit/818998259ddc75e722196ac5c365038818539b9b))
* farcdn优化 ([a06ef07](https://github.com/certd/certd/commit/a06ef07178ed73c537e21c7d57e5e5144d2c056d))

## [1.34.7](https://github.com/certd/certd/compare/v1.34.6...v1.34.7) (2025-05-26)

### Performance Improvements

* 优化阿里云DCDN插件,支持多选 ([b091657](https://github.com/certd/certd/commit/b091657b5c537acf2442a2bfc345d0a77f5e2c50))
* 支持部署到farcdn ([e08cf57](https://github.com/certd/certd/commit/e08cf57b72128998f487ab6469868052fbce0dba))

## [1.34.6](https://github.com/certd/certd/compare/v1.34.5...v1.34.6) (2025-05-25)

### Bug Fixes

* 修复公共插件配置修改不生效的bug,优化系统设置参数注入时机 ([e1e510c](https://github.com/certd/certd/commit/e1e510ce1e37a5ae82478226b6987a83f22d1ecb))
* 修复又拍云 CDN 设置证书参数和强制 HTTPS 配置报错的bug ([7984b62](https://github.com/certd/certd/commit/7984b625ba6727132f205db8e25f790bce27b2f7))
* 修复lego模式下每次都重新申请证书的bug ([f807b8c](https://github.com/certd/certd/commit/f807b8cb465cc329fa034ecbef94e18ef394f870))
* 优化 RunnableError错误信息展示 ([36bc3ff](https://github.com/certd/certd/commit/36bc3ff22da93ba342c3c1103d7ee2bbcecf44f2))
* **cert:** 修正证书过期时间计算逻辑 ([a3086e6](https://github.com/certd/certd/commit/a3086e6a5bec8b07f5e1d21a2ca8bd969c75bd5c))

### Performance Improvements

* 二次认证页面中,添加动态验证码输入框的焦点控制,提升用户体验 ([bb22f06](https://github.com/certd/certd/commit/bb22f062ed4ab4b5b71938270fe4cc666af6b8e7))
* 添加阿里云 ESA证书部署插件 ([1db1ffd](https://github.com/certd/certd/commit/1db1ffde99ac7e4684fa606ebc4c327f829b3a26))
* 站点证书监控增加通知设置 ([3422a1a](https://github.com/certd/certd/commit/3422a1a59fd0d2c0f17fa9c7e8988ac527ecfdd9))

## [1.34.5](https://github.com/certd/certd/compare/v1.34.4...v1.34.5) (2025-05-19)

### Performance Improvements

* 1panel增加授权测试按钮 ([566b12f](https://github.com/certd/certd/commit/566b12f5d14ce10e8f5cf1807c58f7bf27f0d199))
* 优化钉钉通知标题颜色 ([a560999](https://github.com/certd/certd/commit/a560999d13eed18d08dd32ee530166569e3f8746))
* 优化飞书通知为卡片模式 ([a818a3d](https://github.com/certd/certd/commit/a818a3d293e22fb46979bc77055c05621a6fed81))
* 支持部署到宝塔aaWAF ([094565c](https://github.com/certd/certd/commit/094565ccd619ef671c6c11ce5fb7fd54a7a21d1c))
* aaWaf、cdnfly站点选择支持查询 ([8af3463](https://github.com/certd/certd/commit/8af3463668a40b9b99febb02e3b4e0d9d8d719b4))

## [1.34.4](https://github.com/certd/certd/compare/v1.34.3...v1.34.4) (2025-05-16)

### Bug Fixes

* 修复部署flexcdn问题 ([76b19a4](https://github.com/certd/certd/commit/76b19a4980f8edba5238543b82a7811e1003746c))
* 修复插件导入的bug ([677fec0](https://github.com/certd/certd/commit/677fec0a0b6fceb4966705e471bbfeeda91610c7))
* 修复导入在线插件不生效的bug ([fcf8309](https://github.com/certd/certd/commit/fcf8309c238208281ecb4575b2c3cfe50c11d783))
* 修复自建插件保存丢失部署策略的bug ([863e74d](https://github.com/certd/certd/commit/863e74dd2e3912f950ff5025b5ed0070aeb37035))

### Performance Improvements

* 调整小助手,仅在登录之后显示 ([aebb07c](https://github.com/certd/certd/commit/aebb07c5cc8b1f233b9d203ff017ac60e6971a85))

## [1.34.3](https://github.com/certd/certd/compare/v1.34.2...v1.34.3) (2025-05-15)

### Performance Improvements

* 宝塔插件、1panel 改成完全免费版 ([a53b6cd](https://github.com/certd/certd/commit/a53b6cd28ff2ce5662ada82379ea44a06b179b81))
* 添加 FlexCDN 更新证书插件 ([bf040d4](https://github.com/certd/certd/commit/bf040d4c428d29c06fbaca5e29100e0c583b2b0b))
* 小助手可以关闭 ([3e2101a](https://github.com/certd/certd/commit/3e2101aa5b56548614102e900d59819ce8c7e97c))
* 支持部署到maoyun cdn ([68f333f](https://github.com/certd/certd/commit/68f333fb87ce85eed27436ecb0f76351c0ccb0d1))
* 支持AI分析报错 ([aa96859](https://github.com/certd/certd/commit/aa96859798166426e485947a6590464de189de05))

## [1.34.2](https://github.com/certd/certd/compare/v1.34.1...v1.34.2) (2025-05-11)

### Bug Fixes

* 修复部署到又拍云强制https无效的bug ([2397097](https://github.com/certd/certd/commit/2397097e4ddcb6f593210598e8779ffd44ac3f8f))
* 修复刷新流水线页面后,日志不自动更新的bug ([0b2e28b](https://github.com/certd/certd/commit/0b2e28b62dd5eb6804c602083e65c87a9d1d72d2))

### Performance Improvements

* 集成智能问答机器人 ([9dd4905](https://github.com/certd/certd/commit/9dd49054d18ec436a5029444ca55a38adc682933))
* 支持设置网安备案号 ([d18e431](https://github.com/certd/certd/commit/d18e431e2f08e6b37704032c4ea6fbdd8e971442))
* http方式支持校验443端口 ([d75fcb7](https://github.com/certd/certd/commit/d75fcb7fec421a9a638eaa27fe9378c84b5e0f19))

## [1.34.1](https://github.com/certd/certd/compare/v1.34.0...v1.34.1) (2025-05-05)

### Bug Fixes

* 根据SOA记录判断子域名托管有缺陷,改回手动配置子域名托管记录的方式 ([1b280a2](https://github.com/certd/certd/commit/1b280a2940f9e2d919b0bf23b89cc185be1fa498))
* 修复宝塔授权测试按钮显示错误的bug ([048696e](https://github.com/certd/certd/commit/048696ee9386491bb68592fb3a47d1c900bb68bf))

### Performance Improvements

* 支持部署证书到火山dcdn ([5f85219](https://github.com/certd/certd/commit/5f852194953dc1b4e6336770f417507b8f5a33ad))
* 支持部署证书到unicloud ([a63d687](https://github.com/certd/certd/commit/a63d687f1c573159f0857693f37602b0e1e44072))

# [1.34.0](https://github.com/certd/certd/compare/v1.33.8...v1.34.0) (2025-04-28)

### Bug Fixes

* 修复二次认证登录进入错误账号的bug ([e3930e0](https://github.com/certd/certd/commit/e3930e07172dd7903cb0f6ff26e0e3e828ba3e77))

### Features

* 从yaml文件注册插件 ([deb3893](https://github.com/certd/certd/commit/deb38938204b29543f36d3266249958faaaa6b66))

### Performance Improvements

* 优化cdnfly插件,支持自动匹配域名部署 ([afd59e9](https://github.com/certd/certd/commit/afd59e9933b2650f41c5d47684c171b93b962065))

## [1.33.8](https://github.com/certd/certd/compare/v1.33.7...v1.33.8) (2025-04-26)

### Bug Fixes

* 服务器时间获取不准确的bug ([5d10cbf](https://github.com/certd/certd/commit/5d10cbf18daf94a90a7551641a3b13e3c5fec611))
* 修复复制流水线无效的bug ([3df20a9](https://github.com/certd/certd/commit/3df20a924f32970b052e2588ea20de095f0ea693))
* 修复http上传方式无法清除记录文件的bug ([72a7b51](https://github.com/certd/certd/commit/72a7b51d479602b2c54c6c3ac8d8a0dcb9664e73))
* 修复token过期后,疯狂打印token过期信息的bug ([50a5fa1](https://github.com/certd/certd/commit/50a5fa15bb240a125bbc91d2ce1ff3c835888a77))

### Performance Improvements

* 从域名的soa获取主域名,子域名托管无需额外配置 ([a586a92](https://github.com/certd/certd/commit/a586a92d5e32ea846ac37be52a7ad8c328d89966))
* 七牛oss支持删除过期备份 ([b7113bd](https://github.com/certd/certd/commit/b7113bda2378116d6c116dc583f563cce7cf9f00))
* 数据库备份支持oss ([308d460](https://github.com/certd/certd/commit/308d4600efe2002f199c33b4594d3071784e58ea))
* 支持阿里云中文域名申请 ([b3468cf](https://github.com/certd/certd/commit/b3468cf7f28228d7c9cf68de6b5a9bbeb67f2c6d))
* 支持反向代理增加contextPath路径 ([0088929](https://github.com/certd/certd/commit/0088929622160cc922995de9a563e8061686ff34))
* 支持中文域名 ([162ebfd](https://github.com/certd/certd/commit/162ebfd4e0c25727efb33952d3bbf7420a02e2c3))

## [1.33.7](https://github.com/certd/certd/compare/v1.33.6...v1.33.7) (2025-04-22)

### Performance Improvements

* 添加部署证书至火山 Live ([abea80e](https://github.com/certd/certd/commit/abea80e3ab9b1672aebe1c5d5e856693b29931a8))
* 优化首页插件列表展示 ([9b8f60b](https://github.com/certd/certd/commit/9b8f60b64b5f9a3db7dfa9b3dcbd9201984358d0))
* 证书申请支持51dns ([8638fc9](https://github.com/certd/certd/commit/8638fc91ff34fccaf12ff9874fd3fa9d2a8c18b7))
* 支持51dns ([96a0900](https://github.com/certd/certd/commit/96a0900edc95dcfd9acccf9d13592f12f5a09b3d))
* ssh PTY模式登录设置 ([8385bcc](https://github.com/certd/certd/commit/8385bcc2d7f2411a07748bb5c53f9eaf4d38d7cc))
* ssh伪终端模式优化,windows下不开启 ([42dfe93](https://github.com/certd/certd/commit/42dfe936b773b7bdd82ca3378363252ffffd7b71))

## [1.33.6](https://github.com/certd/certd/compare/v1.33.5...v1.33.6) (2025-04-20)

### Bug Fixes

* 上传商用证书,直接粘贴文本报错的问题;修复无法上传ec加密证书的bug ([5750bb7](https://github.com/certd/certd/commit/5750bb706779da274d8e7a87e71416cb64d2df79))
* 修复下载证书时提示token已过期的问题 ([0e07ae6](https://github.com/certd/certd/commit/0e07ae6ce84dcb9279d3c44060d621566afa593c))

### Performance Improvements

* 更新license时同时绑定url ([78367af](https://github.com/certd/certd/commit/78367af8307f801e778c76d49f0918c21ffe032f))
* 切换到不同的分组后再打开创建对话框,会自动选择分组 ([893dcd4](https://github.com/certd/certd/commit/893dcd4f2487891199ed3e5a3d47a79a75efc942))
* 新增部署到火山引擎ALB/CLB、上传到证书中心 ([c9a3e3d](https://github.com/certd/certd/commit/c9a3e3d9d26f964c7af7b56667936f1414fbf42a))
* 优化/api缓存为0 ([dc05cd4](https://github.com/certd/certd/commit/dc05cd481f186b13375192be965000e6b4b429a5))
* 优化华为cdn插件引用ccm证书 ([b565b4b](https://github.com/certd/certd/commit/b565b4b3b919b71b98ea2517670bc1ef00e00dc9))
* 优化证书流水线创建,支持选择分组 ([d613aa8](https://github.com/certd/certd/commit/d613aa8f3e85d8dc475ef1b62d49394ce7fd7d24))

## [1.33.5](https://github.com/certd/certd/compare/v1.33.4...v1.33.5) (2025-04-17)

### Performance Improvements

* 登录支持双重认证 ([48aef25](https://github.com/certd/certd/commit/48aef25b3f6499d674ca4e4ef16f4c62399fb735))
* 多重认证登录 ([0f82cf4](https://github.com/certd/certd/commit/0f82cf409bc60706ab07e4ca4f272b9a1ca7eecb))
* 优化部署到华为云CDN,支持先上传到ccm,再使用证书id部署,修复offline状态下导致部署报错的bug ([79df39a](https://github.com/certd/certd/commit/79df39acabab10ae7e1864dadcdc186bb007a3c5))

## [1.33.4](https://github.com/certd/certd/compare/v1.33.3...v1.33.4) (2025-04-15)

### Bug Fixes

* 补充类型断言 ([2143dff](https://github.com/certd/certd/commit/2143dff2ae96e6a78bef9f0498e36f8cd9e6941f))
* 修复腾讯云部署到任意资源插件,无法使用之前已上传的腾讯云证书问题 ([32c714d](https://github.com/certd/certd/commit/32c714d1b6e68c71a74a7452115040c87ac4bfdc))

### Performance Improvements

* 插件支持导入导出 ([cf8abb4](https://github.com/certd/certd/commit/cf8abb45282070c8ba91469f93fd379fabf1f74a))
* 支持上传证书到华为云CCM ([cfd3b66](https://github.com/certd/certd/com
Download .txt
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
Download .txt
Showing preview only (727K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (7657 symbols across 1009 files)

FILE: deploy.js
  function getPackages (line 10) | async function getPackages(directoryPath) {
  function getAllPackages (line 32) | async function getAllPackages() {
  function sync (line 40) | async function sync() {
  function sleep (line 62) | async function sleep(time) {
  function triggerBuild (line 68) | async function triggerBuild() {
  function start (line 87) | async function start() {

FILE: docs/.vitepress/theme/index.ts
  method enhanceApp (line 20) | enhanceApp({ app, router, siteData }) {

FILE: docs/.vitepress/theme/plugins/baidutongji.ts
  type Window (line 9) | interface Window {
  function registerAnalytics (line 17) | function registerAnalytics(siteId: string) {
  function trackPageview (line 35) | function trackPageview(siteId: string, pageUrl: string) {

FILE: packages/core/acme-client/examples/api.js
  function log (line 7) | function log(m) {
  function challengeCreateFn (line 20) | async function challengeCreateFn(authz, challenge, keyAuthorization) {
  function challengeRemoveFn (line 35) | async function challengeRemoveFn(authz, challenge, keyAuthorization) {

FILE: packages/core/acme-client/examples/auto.js
  function log (line 8) | function log(m) {
  function challengeCreateFn (line 21) | async function challengeCreateFn(authz, challenge, keyAuthorization) {
  function challengeRemoveFn (line 58) | async function challengeRemoveFn(authz, challenge, keyAuthorization) {

FILE: packages/core/acme-client/examples/dns-01/dns-01.js
  constant HTTPS_SERVER_PORT (line 15) | const HTTPS_SERVER_PORT = 443;
  constant WILDCARD_DOMAIN (line 16) | const WILDCARD_DOMAIN = 'example.com';
  function log (line 18) | function log(m) {

FILE: packages/core/acme-client/examples/http-01/http-01.js
  constant HTTP_SERVER_PORT (line 12) | const HTTP_SERVER_PORT = 80;
  constant HTTPS_SERVER_PORT (line 13) | const HTTPS_SERVER_PORT = 443;
  constant VALID_DOMAINS (line 14) | const VALID_DOMAINS = ['example.com', 'example.org'];
  constant FALLBACK_KEY (line 15) | const FALLBACK_KEY = fs.readFileSync(path.join(__dirname, '..', 'fallbac...
  constant FALLBACK_CERT (line 16) | const FALLBACK_CERT = fs.readFileSync(path.join(__dirname, '..', 'fallba...
  function log (line 22) | function log(m) {
  function getCertOnDemand (line 30) | async function getCertOnDemand(client, servername, attempt = 0) {

FILE: packages/core/acme-client/examples/tls-alpn-01/tls-alpn-01.js
  constant HTTPS_SERVER_PORT (line 11) | const HTTPS_SERVER_PORT = 4443;
  constant ALPN_RESPONDER_PORT (line 12) | const ALPN_RESPONDER_PORT = 4444;
  constant VALID_DOMAINS (line 13) | const VALID_DOMAINS = ['example.com', 'example.org'];
  constant FALLBACK_KEY (line 14) | const FALLBACK_KEY = fs.readFileSync(path.join(__dirname, '..', 'fallbac...
  constant FALLBACK_CERT (line 15) | const FALLBACK_CERT = fs.readFileSync(path.join(__dirname, '..', 'fallba...
  function log (line 21) | function log(m) {
  function getCertOnDemand (line 29) | async function getCertOnDemand(client, servername, attempt = 0) {

FILE: packages/core/acme-client/src/api.js
  class AcmeApi (line 13) | class AcmeApi {
    method constructor (line 14) | constructor(httpClient, accountUrl = null) {
    method getLocationFromHeader (line 19) | getLocationFromHeader(resp) {
    method getAccountUrl (line 42) | getAccountUrl() {
    method apiRequest (line 63) | async apiRequest(url, payload = null, validStatusCodes = [], { include...
    method apiResourceRequest (line 87) | async apiResourceRequest(resource, payload = null, validStatusCodes = ...
    method getTermsOfServiceUrl (line 100) | async getTermsOfServiceUrl() {
    method createAccount (line 113) | async createAccount(data) {
    method updateAccount (line 136) | updateAccount(data) {
    method updateAccountKey (line 149) | updateAccountKey(data) {
    method createOrder (line 162) | createOrder(data) {
    method getOrder (line 175) | getOrder(url) {
    method finalizeOrder (line 189) | finalizeOrder(url, data) {
    method getAuthorization (line 202) | getAuthorization(url) {
    method updateAuthorization (line 216) | updateAuthorization(url, data) {
    method completeChallenge (line 230) | completeChallenge(url, data) {
    method revokeCert (line 243) | revokeCert(data) {

FILE: packages/core/acme-client/src/auto.js
  function deactivateAuth (line 110) | async function deactivateAuth(e) {
  function runAllPromise (line 211) | async function runAllPromise(tasks) {
  function runPromisePa (line 219) | async function runPromisePa(tasks, waitTime = 8000) {

FILE: packages/core/acme-client/src/axios.js
  function isRetryableError (line 46) | function isRetryableError(error) {
  function validateStatus (line 55) | function validateStatus(response) {

FILE: packages/core/acme-client/src/client.js
  class AcmeClient (line 92) | class AcmeClient {
    method constructor (line 94) | constructor(opts) {
    method getTermsOfServiceUrl (line 126) | getTermsOfServiceUrl() {
    method getAccountUrl (line 147) | getAccountUrl() {
    method createAccount (line 175) | async createAccount(data = {}) {
    method updateAccount (line 212) | async updateAccount(data = {}) {
    method updateAccountKey (line 251) | async updateAccountKey(newAccountKey, data = {}) {
    method createOrder (line 299) | async createOrder(data) {
    method getOrder (line 327) | async getOrder(order) {
    method finalizeOrder (line 356) | async finalizeOrder(order, csr) {
    method getAuthorizations (line 392) | async getAuthorizations(order) {
    method deactivateAuthorization (line 417) | async deactivateAuthorization(authz) {
    method getChallengeKeyAuthorization (line 447) | async getChallengeKeyAuthorization(challenge) {
    method verifyChallenge (line 486) | async verifyChallenge(authz, challenge) {
    method completeChallenge (line 524) | async completeChallenge(challenge) {
    method waitForValidStatus (line 559) | async waitForValidStatus(item,d) {
    method getCertificate (line 615) | async getCertificate(order, preferredChain = null) {
    method revokeCertificate (line 663) | async revokeCertificate(cert, data = {}) {
    method auto (line 719) | auto(opts) {

FILE: packages/core/acme-client/src/crypto/forge.js
  function forgeObjectFromPem (line 24) | function forgeObjectFromPem(input) {
  function parseDomains (line 64) | function parseDomains(obj) {
  function createPrivateKey (line 115) | async function createPrivateKey(size = 2048) {
  function getCsrValueTagClass (line 279) | function getCsrValueTagClass(shortName) {
  function createCsrSubject (line 298) | function createCsrSubject(subjectObj) {
  function formatCsrAltNames (line 318) | function formatCsrAltNames(altNames) {

FILE: packages/core/acme-client/src/crypto/index.js
  function getKeyInfo (line 33) | function getKeyInfo(keyPem) {
  function createPrivateRsaKey (line 70) | async function createPrivateRsaKey(modulusLength = 2048, encodingType = ...
  function getJwk (line 157) | function getJwk(keyPem) {
  function getWebCryptoKeyPair (line 178) | async function getWebCryptoKeyPair(keyPem) {
  function splitPemChain (line 216) | function splitPemChain(chainPem) {
  function parseDomains (line 255) | function parseDomains(input) {
  function getCsrAsn1CharStringType (line 344) | function getCsrAsn1CharStringType(field) {
  function createCsrSubject (line 365) | function createCsrSubject(input) {
  function createSubjectAltNameExtension (line 386) | function createSubjectAltNameExtension(altNames) {

FILE: packages/core/acme-client/src/error.js
  class CancelError (line 1) | class CancelError extends Error {
    method constructor (line 2) | constructor(message) {

FILE: packages/core/acme-client/src/http.js
  class HttpClient (line 21) | class HttpClient {
    method constructor (line 22) | constructor(directoryUrl, accountKey, externalAccountBinding = {}, url...
    method request (line 45) | async request(url, method, opts = {}) {
    method getDirectory (line 83) | async getDirectory() {
    method getJwk (line 112) | getJwk() {
    method getNonce (line 128) | async getNonce() {
    method getResourceUrl (line 146) | async getResourceUrl(resource) {
    method getMetaField (line 163) | async getMetaField(field) {
    method prepareSignedBody (line 185) | prepareSignedBody(alg, url, payload = null, { nonce = null, kid = null...
    method createSignedHmacBody (line 221) | createSignedHmacBody(hmacKey, url, payload = null, { nonce = null, kid...
    method createSignedBody (line 244) | createSignedBody(url, payload = null, { nonce = null, kid = null } = {...
    method signedRequest (line 292) | async signedRequest(url, payload, { kid = null, nonce = null, includeE...

FILE: packages/core/acme-client/src/util.js
  class Backoff (line 22) | class Backoff {
    method constructor (line 23) | constructor({ min = 100, max = 10000 } = {}) {
    method duration (line 35) | duration() {
  function retryPromise (line 51) | async function retryPromise(fn, attempts, backoff) {
  function retry (line 83) | function retry(fn, { attempts = 5, min = 5000, max = 30000 } = {}) {
  function parseLinkHeader (line 99) | function parseLinkHeader(header, rel = 'alternate') {
  function parseRetryAfterHeader (line 119) | function parseRetryAfterHeader(header) {
  function findCertificateChainForIssuer (line 151) | function findCertificateChainForIssuer(chains, issuer) {
  function formatResponseError (line 197) | function formatResponseError(resp) {
  function resolveDomainBySoaRecord (line 219) | async function resolveDomainBySoaRecord(recordName) {
  function getAuthoritativeDnsResolver (line 244) | async function getAuthoritativeDnsResolver(recordName) {
  function retrieveTlsAlpnCertificate (line 289) | async function retrieveTlsAlpnCertificate(host, port, timeout = 30000) {

FILE: packages/core/acme-client/src/verify.js
  function verifyHttpChallenge (line 26) | async function verifyHttpChallenge(authz, challenge, keyAuthorization, s...
  function walkDnsChallengeRecord (line 75) | async function walkDnsChallengeRecord(recordName, resolver = dns,deep = ...
  function walkTxtRecord (line 115) | async function walkTxtRecord(recordName,deep = 0) {
  function verifyDnsChallenge (line 168) | async function verifyDnsChallenge(authz, challenge, keyAuthorization, pr...
  function verifyTlsAlpnChallenge (line 194) | async function verifyTlsAlpnChallenge(authz, challenge, keyAuthorization) {

FILE: packages/core/acme-client/src/wait.js
  function wait (line 1) | async function wait(ms) {

FILE: packages/core/acme-client/test/10-logger.spec.js
  function customLoggerFn (line 11) | function customLoggerFn(msg) {

FILE: packages/core/acme-client/test/challtestsrv.js
  function request (line 15) | async function request(apiPath, data = {}) {
  function addHttp01ChallengeResponse (line 46) | async function addHttp01ChallengeResponse(token, content) {
  function addHttps01ChallengeResponse (line 50) | async function addHttps01ChallengeResponse(token, content, targetHostnam...
  function addDns01ChallengeResponse (line 58) | async function addDns01ChallengeResponse(host, value) {
  function addTlsAlpn01ChallengeResponse (line 62) | async function addTlsAlpn01ChallengeResponse(host, content) {
  function assertHttpChallengeCreateFn (line 75) | async function assertHttpChallengeCreateFn(authz, challenge, keyAuthoriz...
  function assertHttpsChallengeCreateFn (line 80) | async function assertHttpsChallengeCreateFn(authz, challenge, keyAuthori...
  function assertDnsChallengeCreateFn (line 85) | async function assertDnsChallengeCreateFn(authz, challenge, keyAuthoriza...
  function assertTlsAlpnChallengeCreateFn (line 90) | async function assertTlsAlpnChallengeCreateFn(authz, challenge, keyAutho...
  function challengeCreateFn (line 95) | async function challengeCreateFn(authz, challenge, keyAuthorization) {

FILE: packages/core/acme-client/test/get-cert-issuers.js
  function getPebbleCertIssuers (line 14) | async function getPebbleCertIssuers() {

FILE: packages/core/acme-client/test/retry.js
  function apiRequest (line 6) | async function apiRequest() {
  function waitForValidStatus (line 13) | async function waitForValidStatus() {

FILE: packages/core/acme-client/types/index.d.ts
  type PrivateKeyBuffer (line 10) | type PrivateKeyBuffer = Buffer;
  type PublicKeyBuffer (line 11) | type PublicKeyBuffer = Buffer;
  type CertificateBuffer (line 12) | type CertificateBuffer = Buffer;
  type CsrBuffer (line 13) | type CsrBuffer = Buffer;
  type PrivateKeyString (line 15) | type PrivateKeyString = string;
  type PublicKeyString (line 16) | type PublicKeyString = string;
  type CertificateString (line 17) | type CertificateString = string;
  type CsrString (line 18) | type CsrString = string;
  type Order (line 24) | interface Order extends rfc8555.Order {
  type Authorization (line 28) | interface Authorization extends rfc8555.Authorization {
  type UrlMapping (line 32) | type UrlMapping={
  type ClientOptions (line 41) | interface ClientOptions {
  type ClientExternalAccountBindingOptions (line 54) | interface ClientExternalAccountBindingOptions {
  type ClientAutoOptions (line 59) | interface ClientAutoOptions {
  class Client (line 72) | class Client {
  type CertificateDomains (line 120) | interface CertificateDomains {
  type CertificateIssuer (line 125) | interface CertificateIssuer {
  type CertificateInfo (line 129) | interface CertificateInfo {
  type CsrOptions (line 136) | interface CsrOptions {
  type RsaPublicJwk (line 148) | interface RsaPublicJwk {
  type EcdsaPublicJwk (line 154) | interface EcdsaPublicJwk {
  type CryptoInterface (line 161) | interface CryptoInterface {
  type CryptoLegacyInterface (line 179) | interface CryptoLegacyInterface {

FILE: packages/core/acme-client/types/rfc8555.d.ts
  type Account (line 9) | interface Account {
  type AccountCreateRequest (line 17) | interface AccountCreateRequest {
  type AccountUpdateRequest (line 24) | interface AccountUpdateRequest {
  type Order (line 37) | interface Order {
  type OrderCreateRequest (line 49) | interface OrderCreateRequest {
  type Authorization (line 61) | interface Authorization {
  type Identifier (line 69) | interface Identifier {
  type ChallengeAbstract (line 82) | interface ChallengeAbstract {
  type HttpChallenge (line 90) | interface HttpChallenge extends ChallengeAbstract {
  type DnsChallenge (line 95) | interface DnsChallenge extends ChallengeAbstract {
  type Challenge (line 100) | type Challenge = HttpChallenge | DnsChallenge;
  type CertificateRevocationReason (line 108) | enum CertificateRevocationReason {
  type CertificateRevocationRequest (line 121) | interface CertificateRevocationRequest {

FILE: packages/core/basic/src/utils/util.amount.ts
  method toCent (line 2) | toCent(amount: number): number {
  method toYuan (line 6) | toYuan(amount: number): number {

FILE: packages/core/basic/src/utils/util.cache.ts
  class LocalCache (line 10) | class LocalCache<V = any> {
    method constructor (line 12) | constructor(opts: { clearInterval?: number } = {}) {
    method get (line 19) | get(key: string): V | undefined {
    method set (line 34) | set(key: string, value: V, ttl = 300000) {
    method clear (line 42) | clear() {
    method clearExpires (line 46) | clearExpires() {

FILE: packages/core/basic/src/utils/util.domain.ts
  function match (line 2) | function match(targetDomains: string | string[], inDomains: string[]) {

FILE: packages/core/basic/src/utils/util.env.ts
  function isDev (line 1) | function isDev() {

FILE: packages/core/basic/src/utils/util.file.ts
  function getFileRootDir (line 2) | function getFileRootDir(rootDir?: string) {

FILE: packages/core/basic/src/utils/util.hash.ts
  function md5 (line 3) | function md5(data: string, digest: BinaryToTextEncoding = "hex") {
  function sha256 (line 6) | function sha256(data: string, digest: BinaryToTextEncoding = "hex") {
  function hmacSha256 (line 10) | function hmacSha256(data: string, digest: BinaryToTextEncoding = "base64...
  function base64 (line 14) | function base64(data: string) {
  function base64Decode (line 17) | function base64Decode(data: string) {

FILE: packages/core/basic/src/utils/util.lock.ts
  class Locker (line 3) | class Locker {
    method execute (line 6) | async execute(lockStr: string, callback: any) {
    method lock (line 20) | async lock(str: string) {
    method unlock (line 38) | unlock(str: string) {
    method isLocked (line 42) | isLocked(str: string) {

FILE: packages/core/basic/src/utils/util.log.ts
  function customAppender (line 9) | function customAppender(layout: any, timezoneOffset: any) {
  function resetLogConfigure (line 22) | function resetLogConfigure() {
  function resetLogFilePath (line 42) | function resetLogFilePath(filePath: string) {
  function buildLogger (line 46) | function buildLogger(write: (text: string) => void) {
  type ILogger (line 75) | type ILogger = Logger;

FILE: packages/core/basic/src/utils/util.merge.ts
  function isUnMergeable (line 2) | function isUnMergeable(srcValue: any) {
  function isUnCloneable (line 5) | function isUnCloneable(value: any) {
  function merge (line 8) | function merge(target: any, ...sources: any) {
  function cloneDeep (line 41) | function cloneDeep(target: any) {
  class UnMergeable (line 53) | class UnMergeable {
    method setCloneable (line 56) | setCloneable(cloneable: any) {

FILE: packages/core/basic/src/utils/util.options.ts
  function groupByDomain (line 3) | function groupByDomain(options: any[], inDomains: string[]) {
  function buildGroupOptions (line 19) | function buildGroupOptions(options: any[], inDomains: string[]) {

FILE: packages/core/basic/src/utils/util.promise.ts
  function TimeoutPromise (line 3) | function TimeoutPromise(callback: () => Promise<void>, ms = 30 * 1000) {
  function safePromise (line 17) | function safePromise<T>(callback: (resolve: (ret: T) => void, reject: (r...
  function promisify (line 28) | function promisify(func: any) {

FILE: packages/core/basic/src/utils/util.request.ts
  class HttpError (line 11) | class HttpError extends Error {
    method constructor (line 18) | constructor(error: any) {
  function setGlobalProxy (line 75) | function setGlobalProxy(opts: { httpProxy?: string; httpsProxy?: string ...
  function getGlobalAgents (line 80) | function getGlobalAgents() {
  function createAxiosService (line 87) | function createAxiosService({ logger }: { logger: Logger }) {
  type HttpClientResponse (line 229) | type HttpClientResponse<R> = any;
  type HttpRequestConfig (line 230) | type HttpRequestConfig<D = any> = {
  type HttpClient (line 239) | type HttpClient = {
  type CreateAgentOptions (line 246) | type CreateAgentOptions = {
  function createAgent (line 250) | function createAgent(opts: CreateAgentOptions = {}) {
  function download (line 290) | async function download(req: { http: HttpClient; config: HttpRequestConf...
  function getCookie (line 331) | function getCookie(response: any, name: string) {

FILE: packages/core/basic/src/utils/util.sp.ts
  type ExecOption (line 6) | type ExecOption = {
  function exec (line 13) | async function exec(opts: ExecOption): Promise<string> {
  type SpawnOption (line 50) | type SpawnOption = {
  function isWindows (line 59) | function isWindows() {
  function convert (line 62) | function convert(buffer: any) {
  function spawn (line 76) | async function spawn(opts: SpawnOption): Promise<string> {

FILE: packages/core/basic/src/utils/util.string.ts
  method maxLength (line 2) | maxLength(str?: string, length = 100) {

FILE: packages/core/pipeline/fix-esm-import-paths.js
  function resolveImportPath (line 16) | function resolveImportPath(sourceFile, importPath, options) {
  function replace (line 44) | function replace(filePath, outFilePath, options) {
  function run (line 65) | async function run(srcDir, options = defaultOptions) {
  constant DEBUG (line 90) | const DEBUG = false;

FILE: packages/core/pipeline/src/access/api.ts
  type AccessRequestHandleReqInput (line 7) | type AccessRequestHandleReqInput<T = any> = {
  type AccessRequestHandleReq (line 13) | type AccessRequestHandleReq<T = any> = PluginRequestHandleReq<AccessRequ...
  type AccessInputDefine (line 15) | type AccessInputDefine = FormItemProps & {
  type AccessDefine (line 20) | type AccessDefine = Registrable & {
  type IAccessService (line 26) | interface IAccessService {
  type IAccess (line 31) | interface IAccess {
  type AccessContext (line 36) | type AccessContext = {
  method setCtx (line 46) | setCtx(ctx: AccessContext) {
  method onRequest (line 50) | async onRequest(req: AccessRequestHandleReq) {

FILE: packages/core/pipeline/src/access/decorator.ts
  constant ACCESS_CLASS_KEY (line 9) | const ACCESS_CLASS_KEY = "pipeline:access";
  constant ACCESS_INPUT_KEY (line 10) | const ACCESS_INPUT_KEY = "pipeline:access:input";
  function IsAccess (line 12) | function IsAccess(define: AccessDefine): ClassDecorator {
  function AccessInput (line 36) | function AccessInput(input?: AccessInputDefine): PropertyDecorator {
  function newAccess (line 44) | async function newAccess(type: string, input: any, accessService: IAcces...

FILE: packages/core/pipeline/src/context/index.ts
  type UserContext (line 3) | type UserContext = IContext;
  type PipelineContext (line 4) | type PipelineContext = IContext;
  type PageSearch (line 6) | type PageSearch = {
  type PageRes (line 15) | type PageRes = {
  class Pager (line 22) | class Pager {
    method constructor (line 25) | constructor(req: PageSearch) {
    method getOffset (line 30) | getOffset() {
    method setOffset (line 34) | setOffset(offset: number) {

FILE: packages/core/pipeline/src/core/context.ts
  constant CONTEXT_VERSION_KEY (line 3) | const CONTEXT_VERSION_KEY = "contextVersion";
  type IContext (line 4) | interface IContext {
  class ContextFactory (line 14) | class ContextFactory {
    method constructor (line 18) | constructor(storage: IStorage) {
    method getContext (line 23) | getContext(scope: string, namespace: string): IContext {
    method getMemoryContext (line 27) | getMemoryContext(scope: string, namespace: string): IContext {
  class StorageContext (line 32) | class StorageContext implements IContext {
    method constructor (line 39) | constructor(scope: string, namespace: string, storage: IStorage) {
    method initVersion (line 45) | async initVersion() {
    method updateVersion (line 51) | async updateVersion() {
    method get (line 59) | async get(key: string) {
    method set (line 63) | async set(key: string, value: string) {
    method getInt (line 68) | async getInt(key: string): Promise<number> {
    method getObj (line 75) | async getObj<T = any>(key: string): Promise<T | null> {
    method setObj (line 84) | async setObj<T = any>(key: string, value: T) {

FILE: packages/core/pipeline/src/core/exceptions.ts
  class CancelError (line 3) | class CancelError extends Error {
    method constructor (line 4) | constructor(message: string) {
  class RunnableError (line 9) | class RunnableError extends Error {
    method constructor (line 11) | constructor(message: string, errors: ResultError[]) {

FILE: packages/core/pipeline/src/core/executor.ts
  type SysInfo (line 17) | type SysInfo = {
  type ExecutorOptions (line 22) | type ExecutorOptions = {
  class Executor (line 39) | class Executor {
    method constructor (line 54) | constructor(options: ExecutorOptions) {
    method init (line 66) | async init() {
    method cancel (line 77) | async cancel() {
    method run (line 83) | async run(runtimeId: any = 0, triggerType: string) {
    method runWithHistory (line 126) | async runWithHistory(runnable: Runnable, runnableType: string, run: ()...
    method runStages (line 173) | private async runStages(pipeline: Pipeline) {
    method runStage (line 184) | async runStage(stage: Stage) {
    method compositionResultType (line 231) | compositionResultType(resList: ResultType[]): ResultType {
    method runTask (line 260) | private async runTask(task: Task) {
    method runStep (line 273) | private async runStep(step: Step) {
    method notification (line 417) | async notification(when: NotificationWhen, error?: any) {
    method clearLastStatus (line 496) | clearLastStatus(stepId: string) {

FILE: packages/core/pipeline/src/core/file-store.ts
  type FileStoreOptions (line 7) | type FileStoreOptions = {
  type IFileStore (line 13) | interface IFileStore {
  class FileStore (line 19) | class FileStore {
    method constructor (line 25) | constructor(options?: FileStoreOptions) {
    method readFile (line 31) | readFile(filePath: string) {
    method writeFile (line 38) | writeFile(filename: string, file: Buffer) {
    method buildFilePath (line 46) | protected buildFilePath(filename: string) {
    method deleteByParent (line 54) | deleteByParent(scope: string, parent: string) {

FILE: packages/core/pipeline/src/core/run-history.ts
  type HistoryStatus (line 5) | type HistoryStatus = {
  type RunTrigger (line 10) | type RunTrigger = {
  function NewRunHistory (line 14) | function NewRunHistory(obj: any) {
  class RunHistory (line 20) | class RunHistory {
    method constructor (line 31) | constructor(runtimeId: any, trigger: RunTrigger, pipeline: Pipeline) {
    method start (line 37) | start(runnable: Runnable): HistoryResult {
    method success (line 54) | success(runnable: Runnable) {
    method skip (line 65) | skip(runnable: Runnable) {
    method disabled (line 76) | disabled(runnable: Runnable) {
    method error (line 87) | error(runnable: Runnable, e: Error) {
    method cancel (line 100) | cancel(runnable: Runnable) {
    method log (line 113) | log(runnable: Runnable, text: string) {
    method logError (line 118) | logError(runnable: Runnable, e: Error) {
    method finally (line 129) | finally(runnable: Runnable) {
  class RunnableCollection (line 134) | class RunnableCollection {
    method constructor (line 138) | constructor(pipeline?: Pipeline) {
    method initPipelineRunnableType (line 147) | static initPipelineRunnableType(pipeline: Pipeline) {
    method each (line 164) | static each<T extends Runnable>(list: T[], exec: (item: Runnable) => v...
    method toMap (line 179) | public toMap(pipeline: Pipeline) {
    method get (line 188) | get(id: string): Runnable | undefined {
    method clear (line 192) | clear() {
    method clearById (line 201) | clearById(id: string) {
    method add (line 213) | add(runnable: Runnable) {

FILE: packages/core/pipeline/src/core/storage.ts
  type IStorage (line 5) | interface IStorage {
  class FileStorage (line 11) | class FileStorage implements IStorage {
    method constructor (line 13) | constructor(rootDir?: string) {
    method remove (line 17) | async remove(scope: string, namespace: string, version: string, key: s...
    method writeFile (line 29) | writeFile(filePath: string, value: string) {
    method readFile (line 38) | readFile(filePath: string) {
    method get (line 45) | async get(scope: string, namespace: string, version: string, key: stri...
    method set (line 50) | async set(scope: string, namespace: string, version: string, key: stri...
    method buildPath (line 55) | private buildPath(scope: string, namespace?: string, version?: string,...
  class MemoryStorage (line 68) | class MemoryStorage implements IStorage {
    method get (line 80) | async get(scope: string, namespace: string, version: string, key: stri...
    method set (line 96) | async set(scope: string, namespace: string, version: string, key: stri...
    method remove (line 114) | async remove(scope: string, namespace = "", version = "", key = "") {

FILE: packages/core/pipeline/src/decorator/utils.ts
  function attachProperty (line 4) | function attachProperty(target: any, propertyKey: string | symbol) {
  function getClassProperties (line 13) | function getClassProperties(target: any) {
  function target (line 23) | function target(target: any, propertyKey?: string | symbol) {
  function inject (line 33) | function inject(define: any, instance: any, context: any, preHandler?: (...

FILE: packages/core/pipeline/src/dt/fast-crud.ts
  type ColProps (line 4) | type ColProps = {
  type FormItemProps (line 9) | type FormItemProps = {
  type FormItemHelperProps (line 50) | type FormItemHelperProps = {
  type ComponentProps (line 75) | type ComponentProps = {

FILE: packages/core/pipeline/src/dt/pipeline.ts
  type RunStrategy (line 1) | enum RunStrategy {
  type ConcurrencyStrategy (line 6) | enum ConcurrencyStrategy {
  type NextStrategy (line 11) | enum NextStrategy {
  type HandlerType (line 16) | enum HandlerType {
  type EventHandler (line 22) | type EventHandler = {
  type RunnableStrategy (line 29) | type RunnableStrategy = {
  type Step (line 35) | type Step = Runnable & {
  type Task (line 41) | type Task = Runnable & {
  type Stage (line 45) | type Stage = Runnable & {
  type Trigger (line 52) | type Trigger = {
  type FileItem (line 61) | type FileItem = {
  type Runnable (line 66) | type Runnable = {
  type EmailOptions (line 79) | type EmailOptions = {
  type NotificationWhen (line 82) | type NotificationWhen = "error" | "success" | "turnToSuccess" | "start";
  type NotificationType (line 83) | type NotificationType = "email" | "other";
  type Notification (line 84) | type Notification = {
  type Pipeline (line 92) | type Pipeline = Runnable & {
  type Context (line 100) | type Context = {
  type Log (line 104) | type Log = {
  type ResultError (line 111) | type ResultError = {
  type ResultType (line 117) | enum ResultType {
  type HistoryResultGroup (line 127) | type HistoryResultGroup = {
  type HistoryResult (line 133) | type HistoryResult = {
  type RunnableMap (line 150) | type RunnableMap = {

FILE: packages/core/pipeline/src/notification/api.ts
  type NotificationBody (line 8) | type NotificationBody = {
  type NotificationRequestHandleReqInput (line 20) | type NotificationRequestHandleReqInput<T = any> = {
  type NotificationRequestHandleReq (line 26) | type NotificationRequestHandleReq<T = any> = PluginRequestHandleReq<Noti...
  type NotificationInputDefine (line 28) | type NotificationInputDefine = FormItemProps & {
  type NotificationDefine (line 33) | type NotificationDefine = Registrable & {
  type NotificationInstanceConfig (line 40) | type NotificationInstanceConfig = {
  type NotificationSendReq (line 50) | type NotificationSendReq = {
  type INotificationService (line 58) | interface INotificationService {
  type INotification (line 64) | interface INotification {
  type NotificationContext (line 69) | type NotificationContext = {
  method doSend (line 82) | async doSend(body: NotificationBody) {
  method onInstance (line 88) | async onInstance() {}
  method setCtx (line 89) | setCtx(ctx: NotificationContext) {
  method onRequest (line 98) | async onRequest(req: NotificationRequestHandleReq) {
  method onTestRequest (line 117) | async onTestRequest() {

FILE: packages/core/pipeline/src/notification/decorator.ts
  constant NOTIFICATION_CLASS_KEY (line 9) | const NOTIFICATION_CLASS_KEY = "pipeline:notification";
  constant NOTIFICATION_INPUT_KEY (line 10) | const NOTIFICATION_INPUT_KEY = "pipeline:notification:input";
  function IsNotification (line 12) | function IsNotification(define: NotificationDefine): ClassDecorator {
  function NotificationInput (line 36) | function NotificationInput(input?: NotificationInputDefine): PropertyDec...
  function newNotification (line 44) | async function newNotification(type: string, input: any, ctx: Notificati...
  function sendNotification (line 63) | async function sendNotification(opts: { config: NotificationInstanceConf...

FILE: packages/core/pipeline/src/plugin/api.ts
  type PluginRequestHandleReq (line 15) | type PluginRequestHandleReq<T = any> = {
  type UserInfo (line 22) | type UserInfo = {
  type ContextScope (line 26) | enum ContextScope {
  type TaskOutputDefine (line 32) | type TaskOutputDefine = {
  type TaskInputDefine (line 38) | type TaskInputDefine = {
  type PluginDefine (line 43) | type PluginDefine = Registrable & {
  type ITaskPlugin (line 68) | type ITaskPlugin = {
  type TaskResult (line 75) | type TaskResult = {
  type TaskInstanceContext (line 81) | type TaskInstanceContext = {
  method clearLastStatus (line 136) | clearLastStatus() {
  method getFiles (line 140) | getFiles() {
  method checkSignal (line 144) | checkSignal() {
  method setCtx (line 150) | setCtx(ctx: TaskInstanceContext) {
  method getAccess (line 167) | async getAccess<T = any>(accessId: string | number, isCommon = false) {
  method registerSecret (line 199) | registerSecret(value: string) {
  method randomFileId (line 207) | randomFileId() {
  method saveFile (line 210) | saveFile(filename: string, file: Buffer) {
  method extendsFiles (line 220) | extendsFiles() {
  method pipeline (line 227) | get pipeline() {
  method step (line 231) | get step() {
  method onInstance (line 235) | async onInstance(): Promise<void> {
  method appendTimeSuffix (line 241) | appendTimeSuffix(name?: string) {
  method buildCertName (line 248) | buildCertName(domain: string) {
  method onRequest (line 253) | async onRequest(req: PluginRequestHandleReq<any>) {
  method isAdmin (line 272) | isAdmin() {
  method getStepFromPipeline (line 276) | getStepFromPipeline(stepId: string) {
  method getStepIdFromRefInput (line 287) | getStepIdFromRefInput(ref = ".") {
  type OutputVO (line 292) | type OutputVO = {

FILE: packages/core/pipeline/src/plugin/decorator.ts
  constant PLUGIN_CLASS_KEY (line 7) | const PLUGIN_CLASS_KEY = "pipeline:plugin";
  function IsTaskPlugin (line 9) | function IsTaskPlugin(define: PluginDefine): ClassDecorator {
  constant PLUGIN_INPUT_KEY (line 68) | const PLUGIN_INPUT_KEY = "pipeline:plugin:input";
  function TaskInput (line 70) | function TaskInput(input?: TaskInputDefine): PropertyDecorator {
  constant PLUGIN_OUTPUT_KEY (line 78) | const PLUGIN_OUTPUT_KEY = "pipeline:plugin:output";
  function TaskOutput (line 79) | function TaskOutput(output?: TaskOutputDefine): PropertyDecorator {
  constant PLUGIN_DOWNLOAD_KEY (line 86) | const PLUGIN_DOWNLOAD_KEY = "pipeline:plugin:download";
  function TaskDownload (line 87) | function TaskDownload(output?: TaskOutputDefine): PropertyDecorator {

FILE: packages/core/pipeline/src/plugin/group.ts
  class PluginGroup (line 3) | class PluginGroup {
    method constructor (line 11) | constructor(key: string, title: string, order = 0, icon = "") {

FILE: packages/core/pipeline/src/registry/registry.ts
  type Registrable (line 3) | type Registrable = {
  type TargetGetter (line 11) | type TargetGetter<T> = () => Promise<T>;
  type RegistryItem (line 12) | type RegistryItem<T> = {
  type OnRegisterContext (line 17) | type OnRegisterContext<T> = {
  type OnRegister (line 22) | type OnRegister<T> = (ctx: OnRegisterContext<T>) => void;
  class Registry (line 23) | class Registry<T = any> {
    method constructor (line 31) | constructor(type: string, onRegister?: OnRegister<T>) {
    method register (line 36) | register(key: string, value: RegistryItem<T>) {
    method unRegister (line 51) | unRegister(key: string) {
    method get (line 56) | get(name: string): RegistryItem<T> {
    method getStorage (line 68) | getStorage() {
    method getDefineList (line 72) | getDefineList() {
    method getDefine (line 93) | getDefine(key: string) {
  function createRegistry (line 102) | function createRegistry<T>(type: string, onRegister?: OnRegister<T>): Re...

FILE: packages/core/pipeline/src/service/cname.ts
  type CnameProvider (line 3) | type CnameProvider = {
  type CnameRecord (line 12) | type CnameRecord = {
  type ICnameProxyService (line 22) | type ICnameProxyService = {

FILE: packages/core/pipeline/src/service/config.ts
  type PluginConfig (line 1) | type PluginConfig = {
  type IPluginConfigService (line 10) | type IPluginConfigService = {

FILE: packages/core/pipeline/src/service/email.ts
  type EmailSend (line 1) | type EmailSend = {
  type IEmailService (line 9) | interface IEmailService {

FILE: packages/core/pipeline/src/service/emit.ts
  type PipelineEventListener (line 4) | type PipelineEventListener = (...args: any[]) => Promise<void>;
  type PipelineEvent (line 5) | type PipelineEvent<T> = {
  class PipelineEmitter (line 10) | class PipelineEmitter {
    method constructor (line 12) | constructor() {
    method on (line 15) | on(event: string, listener: PipelineEventListener) {
    method emit (line 21) | async emit<T>(name: string, event: PipelineEvent<T>) {
    method off (line 33) | off(event: string, listener: PipelineEventListener) {
    method once (line 38) | once(event: string, listener: PipelineEventListener) {
  type TaskEmitterCreateReq (line 49) | type TaskEmitterCreateReq = {
  type TaskEmitter (line 54) | type TaskEmitter = {
  function taskEmitterCreate (line 58) | function taskEmitterCreate(req: TaskEmitterCreateReq) {

FILE: packages/core/pipeline/src/service/index.ts
  type IServiceGetter (line 6) | type IServiceGetter = {

FILE: packages/core/pipeline/src/service/url.ts
  type IUrlService (line 1) | interface IUrlService {

FILE: packages/core/pipeline/test/pipeline/access-service-test.ts
  class AccessServiceTest (line 4) | class AccessServiceTest implements IAccessService {
    method getById (line 5) | async getById(id: any): Promise<IAccess> {

FILE: packages/core/pipeline/test/pipeline/pipeline.define.ts
  function generateId (line 4) | function generateId() {

FILE: packages/core/pipeline/test/pipeline/pipeline.test.ts
  function onChanged (line 10) | async function onChanged(history: RunHistory) {

FILE: packages/libs/lib-huawei/fix-esm-import-paths.js
  function resolveImportPath (line 16) | function resolveImportPath(sourceFile, importPath, options) {
  function replace (line 44) | function replace(filePath, outFilePath, options) {
  function run (line 65) | async function run(srcDir, options = defaultOptions) {
  constant DEBUG (line 90) | const DEBUG = false;

FILE: packages/libs/lib-huawei/src/lib/APIGW-javascript-sdk-2.0.5/signer.js
  function urlEncode (line 200) | function urlEncode(str) {
  function HttpRequest (line 249) | function HttpRequest(method, url, headers, body) {
  function findHeader (line 316) | function findHeader(r, header) {
  function CanonicalRequest (line 334) | function CanonicalRequest(r, signedHeaders) {
  function CanonicalURI (line 355) | function CanonicalURI(r) {
  function CanonicalQueryString (line 370) | function CanonicalQueryString(r) {
  function CanonicalHeaders (line 392) | function CanonicalHeaders(r, signedHeaders) {
  function SignedHeaders (line 405) | function SignedHeaders(r) {
  function RequestPayload (line 414) | function RequestPayload(r) {
  function StringToSign (line 419) | function StringToSign(canonicalRequest, t) {
  function SignStringToSign (line 425) | function SignStringToSign(stringToSign, signingKey) {
  function AuthHeaderValue (line 431) | function AuthHeaderValue(signature, Key, signedHeaders) {
  function twoChar (line 435) | function twoChar(s) {
  function getTime (line 443) | function getTime() {
  function Signer (line 458) | function Signer() {

FILE: packages/libs/lib-huawei/src/lib/client.d.ts
  type ApiRequestOptions (line 2) | type ApiRequestOptions = {
  class HuaweiYunClient (line 8) | class HuaweiYunClient {

FILE: packages/libs/lib-huawei/src/lib/client.js
  class HuaweiYunClient (line 3) | class HuaweiYunClient {
    method constructor (line 6) | constructor(access, logger) {
    method request (line 10) | async request(options) {

FILE: packages/libs/lib-huawei/src/lib/signer.d.ts
  class SigHttpRequest (line 1) | class SigHttpRequest {
  class Signer (line 10) | class Signer {

FILE: packages/libs/lib-huawei/src/lib/signer.js
  function hmacsha256 (line 2) | function hmacsha256(keyByte, message) {
  function HexEncodeSHA256Hash (line 9) | function HexEncodeSHA256Hash(body) {
  function urlEncode (line 151) | function urlEncode(str) {
  function findHeader (line 207) | function findHeader(r, header) {
  function CanonicalRequest (line 224) | function CanonicalRequest(r, signedHeaders) {
  function CanonicalURI (line 242) | function CanonicalURI(r) {
  function CanonicalQueryString (line 256) | function CanonicalQueryString(r) {
  function CanonicalHeaders (line 278) | function CanonicalHeaders(r, signedHeaders) {
  function SignedHeaders (line 290) | function SignedHeaders(r) {
  function RequestPayload (line 298) | function RequestPayload(r) {
  function StringToSign (line 302) | function StringToSign(canonicalRequest, t) {
  function SignStringToSign (line 307) | function SignStringToSign(stringToSign, signingKey) {
  function AuthHeaderValue (line 312) | function AuthHeaderValue(signature, Key, signedHeaders) {
  function twoChar (line 321) | function twoChar(s) {
  function getTime (line 329) | function getTime() {
  class SigHttpRequest (line 341) | class SigHttpRequest {
    method constructor (line 348) | constructor(method, url, headers, body) {
  class Signer (line 422) | class Signer {
    method constructor (line 425) | constructor(Key, Secret) {
    method Sign (line 429) | Sign(r) {

FILE: packages/libs/lib-iframe/fix-esm-import-paths.js
  function resolveImportPath (line 16) | function resolveImportPath(sourceFile, importPath, options) {
  function replace (line 44) | function replace(filePath, outFilePath, options) {
  function run (line 65) | async function run(srcDir, options = defaultOptions) {
  constant DEBUG (line 90) | const DEBUG = false;

FILE: packages/libs/lib-iframe/src/lib/iframe.client.ts
  type IframeMessageData (line 3) | type IframeMessageData<T> = {
  type IframeMessageReq (line 12) | type IframeMessageReq<T = any, R = any> = {
  class IframeException (line 17) | class IframeException extends Error {
    method constructor (line 19) | constructor(data: IframeMessageData<any>) {
  class IframeClient (line 25) | class IframeClient {
    method constructor (line 32) | constructor(iframe?: HTMLIFrameElement, onError?: (e: any) => void) {
    method isInFrame (line 64) | isInFrame() {
    method register (line 68) | register<T = any>(action: string, handler: (data: IframeMessageData<T>...
    method send (line 72) | async send<R = any, T = any>(action: string, data?: T, replyId?: strin...
    method doSend (line 83) | async doSend<R = any, T = any>(action: string, data?: T, replyId?: str...

FILE: packages/libs/lib-jdcloud/src/lib/config.js
  method constructor (line 15) | constructor (options = {}) {
  method extractCredentials (line 35) | extractCredentials (options) {
  method getCredentials (line 43) | getCredentials () {
  method update (line 64) | update (options, allowUnknownKeys = false) {

FILE: packages/libs/lib-jdcloud/src/lib/credentials.js
  method constructor (line 4) | constructor () {

FILE: packages/libs/lib-jdcloud/src/lib/request.js
  method constructor (line 5) | constructor (
  method buildPath (line 57) | buildPath (path, pathParams) {
  method buildQuery (line 71) | buildQuery (queryParams) {
  method search (line 82) | search () {
  method digitizationArray (line 91) | digitizationArray (key, obj) {
  method buildHeaders (line 113) | buildHeaders (headerParams) {
  method isJsonMime (line 137) | isJsonMime (contentType) {
  method jsonPreferredMime (line 148) | jsonPreferredMime (contentTypes) {

FILE: packages/libs/lib-jdcloud/src/lib/service.js
  method constructor (line 5) | constructor (serviceId, config = {}) {
  method init (line 10) | init (config) {
  method makeRequest (line 27) | makeRequest (
  method buildCollectionParam (line 90) | buildCollectionParam (param, collectionFormat) {
  method buildFilterParam (line 119) | buildFilterParam (param, key) {
  method buildTagFilterParam (line 147) | buildTagFilterParam (param = [], key) {
  method buildSortParam (line 176) | buildSortParam (param = [], key) {
  method buildArrayParam (line 196) | buildArrayParam (param = [], key) {
  method paramToString (line 214) | paramToString (param) {
  method hasService (line 225) | static hasService (id) {

FILE: packages/libs/lib-jdcloud/src/lib/signers/request_signer.js
  method constructor (line 2) | constructor (request) {
  method setServiceClientId (line 6) | setServiceClientId (id) {
  method getServiceClientId (line 10) | getServiceClientId () {

FILE: packages/libs/lib-jdcloud/src/lib/signers/v2.js
  method constructor (line 23) | constructor (request, serviceName, options = {}) {
  method addAuthorization (line 34) | addAuthorization (credentials, date) {
  method addHeaders (line 44) | addHeaders (credentials, datetime) {
  method signedHeaders (line 53) | signedHeaders () {
  method credentialString (line 67) | credentialString (datetime) {
  method signature (line 75) | signature (credentials, datetime) {
  method stringToSign (line 86) | stringToSign (datetime) {
  method canonicalString (line 97) | canonicalString () {
  method canonicalHeaders (line 117) | canonicalHeaders () {
  method canonicalHeaderValues (line 148) | canonicalHeaderValues (values) {
  method authorization (line 152) | authorization (credentials, datetime) {
  method hexEncodedHash (line 168) | hexEncodedHash (string) {
  method hexEncodedBodyHash (line 172) | hexEncodedBodyHash () {
  method isSignableHeader (line 184) | isSignableHeader (key) {

FILE: packages/libs/lib-jdcloud/src/lib/util.js
  method getDate (line 78) | getDate () {

FILE: packages/libs/lib-jdcloud/src/repo/ag/v1/ag.js
  class AG (line 36) | class AG extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeScalingActivities (line 69) | describeScalingActivities (opts, regionId = this.config.regionId, call...
    method describeAsAlarms (line 203) | describeAsAlarms (opts, regionId = this.config.regionId, callback) {
    method createAsAlarm (line 344) | createAsAlarm (opts, regionId = this.config.regionId, callback) {
    method updateAsAlarm (line 554) | updateAsAlarm (opts, regionId = this.config.regionId, callback) {
    method deleteAsAlarm (line 698) | deleteAsAlarm (opts, regionId = this.config.regionId, callback) {
    method disableAsAlarm (line 811) | disableAsAlarm (opts, regionId = this.config.regionId, callback) {
    method enableAsAlarm (line 925) | enableAsAlarm (opts, regionId = this.config.regionId, callback) {
    method describeAsCrons (line 1053) | describeAsCrons (opts, regionId = this.config.regionId, callback) {
    method createAsCron (line 1225) | createAsCron (opts, regionId = this.config.regionId, callback) {
    method updateAsCron (line 1453) | updateAsCron (opts, regionId = this.config.regionId, callback) {
    method deleteAsCron (line 1607) | deleteAsCron (opts, regionId = this.config.regionId, callback) {
    method disableAsCron (line 1720) | disableAsCron (opts, regionId = this.config.regionId, callback) {
    method enableAsCron (line 1834) | enableAsCron (opts, regionId = this.config.regionId, callback) {
    method enableAutoScaling (line 1947) | enableAutoScaling (opts, regionId = this.config.regionId, callback) {
    method disableAutoScaling (line 2064) | disableAutoScaling (opts, regionId = this.config.regionId, callback) {
    method updateAutoScaling (line 2176) | updateAutoScaling (opts, regionId = this.config.regionId, callback) {
    method modifyInstancesManaged (line 2297) | modifyInstancesManaged (opts, regionId = this.config.regionId, callbac...
    method modifyInstancesProtected (line 2421) | modifyInstancesProtected (opts, regionId = this.config.regionId, callb...
    method describeAsRules (line 2559) | describeAsRules (opts, regionId = this.config.regionId, callback) {
    method createAsRule (line 2695) | createAsRule (opts, regionId = this.config.regionId, callback) {
    method updateAsRule (line 2848) | updateAsRule (opts, regionId = this.config.regionId, callback) {
    method deleteAsRule (line 2980) | deleteAsRule (opts, regionId = this.config.regionId, callback) {
    method executeAsRule (line 3094) | executeAsRule (opts, regionId = this.config.regionId, callback) {
    method describeAgs (line 3214) | describeAgs (opts, regionId = this.config.regionId, callback) {
    method createAg (line 3332) | createAg (opts, regionId = this.config.regionId, callback) {
    method describeAg (line 3473) | describeAg (opts, regionId = this.config.regionId, callback) {
    method updateAg (line 3585) | updateAg (opts, regionId = this.config.regionId, callback) {
    method deleteAg (line 3702) | deleteAg (opts, regionId = this.config.regionId, callback) {
    method abandonInstances (line 3813) | abandonInstances (opts, regionId = this.config.regionId, callback) {
    method setInstanceTemplate (line 3928) | setInstanceTemplate (opts, regionId = this.config.regionId, callback) {
    method describeQuotas (line 4055) | describeQuotas (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/ams/v1/ams.js
  method constructor (line 37) | constructor (options = {}) {
  method describeStreamsInput (line 58) | describeStreamsInput (opts, callback) {
  method describeAuthenticate (line 168) | describeAuthenticate (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/antipro/v1/antipro.js
  class ANTIPRO (line 36) | class ANTIPRO extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeAttackLogs (line 64) | describeAttackLogs (opts, callback) {
    method describeAttackStatistics (line 189) | describeAttackStatistics (opts, callback) {
    method describeAttackTypeCount (line 305) | describeAttackTypeCount (opts, callback) {
    method describeAttackSource (line 419) | describeAttackSource (opts, callback) {
    method describeIpMonitorFlow (line 529) | describeIpMonitorFlow (opts, callback) {
    method describeInstances (line 645) | describeInstances (opts, regionId = this.config.regionId, callback) {
    method createInstance (line 760) | createInstance (opts, regionId = this.config.regionId, callback) {
    method describeInstance (line 889) | describeInstance (opts, regionId = this.config.regionId, callback) {
    method modifyInstance (line 1001) | modifyInstance (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceName (line 1129) | modifyInstanceName (opts, regionId = this.config.regionId, callback) {
    method addProtectedIp (line 1257) | addProtectedIp (opts, regionId = this.config.regionId, callback) {
    method deleteProtectedIp (line 1379) | deleteProtectedIp (opts, regionId = this.config.regionId, callback) {
    method describeProtectedIpList (line 1505) | describeProtectedIpList (opts, callback) {
    method describeProtectionRule (line 1620) | describeProtectionRule (opts, regionId = this.config.regionId, callbac...
    method describeGeoAreas (line 1732) | describeGeoAreas (opts, callback) {
    method modifyProtectionRule (line 1827) | modifyProtectionRule (opts, regionId = this.config.regionId, callback) {
    method checkInstanceName (line 1953) | checkInstanceName (opts, callback) {
    method describeProtectionOutline (line 2053) | describeProtectionOutline (opts, callback) {
    method describeInstanceAclCnt (line 2146) | describeInstanceAclCnt (opts, regionId = this.config.regionId, callbac...
    method enableInstanceAcl (line 2257) | enableInstanceAcl (opts, regionId = this.config.regionId, callback) {
    method disableInstanceAcl (line 2368) | disableInstanceAcl (opts, regionId = this.config.regionId, callback) {
    method describeInstanceAclEnable (line 2480) | describeInstanceAclEnable (opts, regionId = this.config.regionId, call...
    method describeAcls (line 2599) | describeAcls (opts, regionId = this.config.regionId, callback) {
    method createAcl (line 2718) | createAcl (opts, regionId = this.config.regionId, callback) {
    method modifyAcl (line 2839) | modifyAcl (opts, regionId = this.config.regionId, callback) {
    method deleteAcl (line 2966) | deleteAcl (opts, regionId = this.config.regionId, callback) {
    method modifyAclPriority (line 3084) | modifyAclPriority (opts, regionId = this.config.regionId, callback) {
    method enableAcl (line 3217) | enableAcl (opts, regionId = this.config.regionId, callback) {
    method disableAcl (line 3336) | disableAcl (opts, regionId = this.config.regionId, callback) {
    method describeIpSets (line 3459) | describeIpSets (opts, regionId = this.config.regionId, callback) {
    method createIpSet (line 3577) | createIpSet (opts, regionId = this.config.regionId, callback) {
    method describeIpSet (line 3698) | describeIpSet (opts, regionId = this.config.regionId, callback) {
    method modifyIpSet (line 3816) | modifyIpSet (opts, regionId = this.config.regionId, callback) {
    method deleteIpSet (line 3943) | deleteIpSet (opts, regionId = this.config.regionId, callback) {
    method describePortSets (line 4065) | describePortSets (opts, regionId = this.config.regionId, callback) {
    method createPortSet (line 4183) | createPortSet (opts, regionId = this.config.regionId, callback) {
    method describePortSet (line 4304) | describePortSet (opts, regionId = this.config.regionId, callback) {
    method modifyPortSet (line 4422) | modifyPortSet (opts, regionId = this.config.regionId, callback) {
    method deletePortSet (line 4549) | deletePortSet (opts, regionId = this.config.regionId, callback) {
    method describeElasticIpResources (line 4670) | describeElasticIpResources (opts, regionId = this.config.regionId, cal...
    method describeCpsIpResources (line 4784) | describeCpsIpResources (opts, regionId = this.config.regionId, callbac...
    method describeCcsIpResources (line 4898) | describeCcsIpResources (opts, regionId = this.config.regionId, callbac...
    method describeWafIpResources (line 5012) | describeWafIpResources (opts, regionId = this.config.regionId, callbac...
    method describeOperationRecords (line 5129) | describeOperationRecords (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/apigateway/v1/apigateway.js
  method constructor (line 37) | constructor (options = {}) {
  method queryAccessAuths (line 62) | queryAccessAuths (opts, regionId = this.config.regionId, callback) {
  method createAccessAuth (line 173) | createAccessAuth (opts, regionId = this.config.regionId, callback) {
  method checkAuthExist (line 282) | checkAuthExist (opts, regionId = this.config.regionId, callback) {
  method queryAccessAuth (line 404) | queryAccessAuth (opts, regionId = this.config.regionId, callback) {
  method updateAccessAuth (line 516) | updateAccessAuth (opts, regionId = this.config.regionId, callback) {
  method deleteAccessAuth (line 631) | deleteAccessAuth (opts, regionId = this.config.regionId, callback) {
  method queryBindGroupAuth (line 742) | queryBindGroupAuth (opts, regionId = this.config.regionId, callback) {
  method bindGroupAuth (line 854) | bindGroupAuth (opts, regionId = this.config.regionId, callback) {
  method queryAuthGroupList (line 974) | queryAuthGroupList (opts, regionId = this.config.regionId, callback) {
  method authorizedApiGroupList (line 1090) | authorizedApiGroupList (opts, regionId = this.config.regionId, callback) {
  method queryAccessKeys (line 1206) | queryAccessKeys (opts, regionId = this.config.regionId, callback) {
  method createAccessKey (line 1319) | createAccessKey (opts, regionId = this.config.regionId, callback) {
  method checkKeyExist (line 1433) | checkKeyExist (opts, regionId = this.config.regionId, callback) {
  method queryAccessKey (line 1555) | queryAccessKey (opts, regionId = this.config.regionId, callback) {
  method updateAccessKey (line 1669) | updateAccessKey (opts, regionId = this.config.regionId, callback) {
  method deleteAccessKey (line 1790) | deleteAccessKey (opts, regionId = this.config.regionId, callback) {
  method queryBindGroupKey (line 1901) | queryBindGroupKey (opts, regionId = this.config.regionId, callback) {
  method bindGroupKey (line 2013) | bindGroupKey (opts, regionId = this.config.regionId, callback) {
  method queryKeyGroupList (line 2133) | queryKeyGroupList (opts, regionId = this.config.regionId, callback) {
  method queryApis (line 2255) | queryApis (opts, regionId = this.config.regionId, callback) {
  method createApis (line 2381) | createApis (opts, regionId = this.config.regionId, callback) {
  method checkApiNameExist (line 2504) | checkApiNameExist (opts, regionId = this.config.regionId, callback) {
  method queryApi (line 2634) | queryApi (opts, regionId = this.config.regionId, callback) {
  method updateApi (line 2761) | updateApi (opts, regionId = this.config.regionId, callback) {
  method deleteApi (line 2889) | deleteApi (opts, regionId = this.config.regionId, callback) {
  method updateApiByName (line 3014) | updateApiByName (opts, regionId = this.config.regionId, callback) {
  method deleteApiByName (line 3142) | deleteApiByName (opts, regionId = this.config.regionId, callback) {
  method describeApiGroups (line 3274) | describeApiGroups (opts, regionId = this.config.regionId, callback) {
  method createApiGroup (line 3399) | createApiGroup (opts, regionId = this.config.regionId, callback) {
  method checkGroupNameExist (line 3545) | checkGroupNameExist (opts, regionId = this.config.regionId, callback) {
  method describeApiGroup (line 3659) | describeApiGroup (opts, regionId = this.config.regionId, callback) {
  method modifyApiGroupAttribute (line 3779) | modifyApiGroupAttribute (opts, regionId = this.config.regionId, callback) {
  method deleteApiGroup (line 3920) | deleteApiGroup (opts, regionId = this.config.regionId, callback) {
  method describeIsDeployApiGroups (line 4033) | describeIsDeployApiGroups (opts, regionId = this.config.regionId, callba...
  method createBackendConfig (line 4153) | createBackendConfig (opts, regionId = this.config.regionId, callback) {
  method describeBackendConfigs (line 4337) | describeBackendConfigs (opts, regionId = this.config.regionId, callback) {
  method describeBackendConfig (line 4462) | describeBackendConfig (opts, regionId = this.config.regionId, callback) {
  method updateBackendConfig (line 4593) | updateBackendConfig (opts, regionId = this.config.regionId, callback) {
  method deleteBackendConfig (line 4774) | deleteBackendConfig (opts, regionId = this.config.regionId, callback) {
  method describeDeployments (line 4893) | describeDeployments (opts, regionId = this.config.regionId, callback) {
  method deploy (line 5012) | deploy (opts, regionId = this.config.regionId, callback) {
  method describeDeployment (line 5162) | describeDeployment (opts, regionId = this.config.regionId, callback) {
  method offline (line 5279) | offline (opts, regionId = this.config.regionId, callback) {
  method batchOffline (line 5399) | batchOffline (opts, regionId = this.config.regionId, callback) {
  method queryKeys (line 5519) | queryKeys (opts, regionId = this.config.regionId, callback) {
  method createKey (line 5640) | createKey (opts, regionId = this.config.regionId, callback) {
  method resetKey (line 5751) | resetKey (opts, regionId = this.config.regionId, callback) {
  method updateKey (line 5866) | updateKey (opts, regionId = this.config.regionId, callback) {
  method queryKeyInfo (line 5986) | queryKeyInfo (opts, regionId = this.config.regionId, callback) {
  method queryRateLimitPolicies (line 6101) | queryRateLimitPolicies (opts, regionId = this.config.regionId, callback) {
  method createRateLimitPolicy (line 6212) | createRateLimitPolicy (opts, regionId = this.config.regionId, callback) {
  method checkPolicyName (line 6323) | checkPolicyName (opts, regionId = this.config.regionId, callback) {
  method queryRateLimitPolicy (line 6437) | queryRateLimitPolicy (opts, regionId = this.config.regionId, callback) {
  method updateRateLimitPolicy (line 6549) | updateRateLimitPolicy (opts, regionId = this.config.regionId, callback) {
  method deleteRateLimitPolicy (line 6667) | deleteRateLimitPolicy (opts, regionId = this.config.regionId, callback) {
  method queryBindGroupPolicy (line 6778) | queryBindGroupPolicy (opts, regionId = this.config.regionId, callback) {
  method bindGroupPolicy (line 6890) | bindGroupPolicy (opts, regionId = this.config.regionId, callback) {
  method queryPolicyGroupList (line 7010) | queryPolicyGroupList (opts, regionId = this.config.regionId, callback) {
  method describeRevisions (line 7128) | describeRevisions (opts, regionId = this.config.regionId, callback) {
  method createRevision (line 7249) | createRevision (opts, regionId = this.config.regionId, callback) {
  method getRevisionIds (line 7370) | getRevisionIds (opts, regionId = this.config.regionId, callback) {
  method checkRevisionExist (line 7482) | checkRevisionExist (opts, regionId = this.config.regionId, callback) {
  method queryRevision (line 7610) | queryRevision (opts, regionId = this.config.regionId, callback) {
  method modifyRevision (line 7736) | modifyRevision (opts, regionId = this.config.regionId, callback) {
  method deleteRevision (line 7858) | deleteRevision (opts, regionId = this.config.regionId, callback) {
  method querySubscriptionKeys (line 7981) | querySubscriptionKeys (opts, regionId = this.config.regionId, callback) {
  method createSubscriptionKey (line 8093) | createSubscriptionKey (opts, regionId = this.config.regionId, callback) {
  method querySubscriptionKey (line 8204) | querySubscriptionKey (opts, regionId = this.config.regionId, callback) {
  method updateSubscriptionKey (line 8320) | updateSubscriptionKey (opts, regionId = this.config.regionId, callback) {
  method deleteSubscriptionKey (line 8441) | deleteSubscriptionKey (opts, regionId = this.config.regionId, callback) {
  method queryUcAccessKeys (line 8559) | queryUcAccessKeys (opts, regionId = this.config.regionId, callback) {
  method checkPin (line 8669) | checkPin (opts, regionId = this.config.regionId, callback) {
  method queryUserDomains (line 8785) | queryUserDomains (opts, regionId = this.config.regionId, callback) {
  method createUserDomain (line 8909) | createUserDomain (opts, regionId = this.config.regionId, callback) {
  method deleteUserDomain (line 9034) | deleteUserDomain (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/asset/v1/asset.js
  class ASSET (line 36) | class ASSET extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeAccountAmount (line 60) | describeAccountAmount (opts, regionId = this.config.regionId, callback) {
    method modifyBalanceWarningInfo (line 164) | modifyBalanceWarningInfo (opts, regionId = this.config.regionId, callb...

FILE: packages/libs/lib-jdcloud/src/repo/assistant/v1/assistant.js
  class ASSISTANT (line 36) | class ASSISTANT extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method createCommand (line 78) | createCommand (opts, regionId = this.config.regionId, callback) {
    method describeCommands (line 242) | describeCommands (opts, regionId = this.config.regionId, callback) {
    method deleteCommands (line 376) | deleteCommands (opts, regionId = this.config.regionId, callback) {
    method invokeCommand (line 510) | invokeCommand (opts, regionId = this.config.regionId, callback) {
    method describeInvocations (line 674) | describeInvocations (opts, regionId = this.config.regionId, callback) {
    method addLogConfig (line 812) | addLogConfig (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/autotaskpolicy/v1/autotaskpolicy.js
  class AUTOTASKPOLICY (line 36) | class AUTOTASKPOLICY extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method createPolicy (line 73) | createPolicy (opts, regionId = this.config.regionId, callback) {
    method modifyPolicy (line 188) | modifyPolicy (opts, regionId = this.config.regionId, callback) {
    method describePolicy (line 309) | describePolicy (opts, regionId = this.config.regionId, callback) {
    method deletePolicy (line 420) | deletePolicy (opts, regionId = this.config.regionId, callback) {
    method describePolicies (line 540) | describePolicies (opts, regionId = this.config.regionId, callback) {
    method copyPolicy (line 653) | copyPolicy (opts, regionId = this.config.regionId, callback) {
    method enablePolicy (line 772) | enablePolicy (opts, regionId = this.config.regionId, callback) {
    method disablePolicy (line 883) | disablePolicy (opts, regionId = this.config.regionId, callback) {
    method associateExecResource (line 996) | associateExecResource (opts, regionId = this.config.regionId, callback) {
    method disassociateExecResource (line 1117) | disassociateExecResource (opts, regionId = this.config.regionId, callb...

FILE: packages/libs/lib-jdcloud/src/repo/baseanti/v1/baseanti.js
  class BASEANTI (line 36) | class BASEANTI extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeAttackLogs (line 63) | describeAttackLogs (opts, callback) {
    method describeAttackStatistics (line 184) | describeAttackStatistics (opts, callback) {
    method describeAttackTypeCount (line 296) | describeAttackTypeCount (opts, callback) {
    method describeIpMonitorFlow (line 409) | describeIpMonitorFlow (opts, callback) {
    method describeIpResources (line 521) | describeIpResources (opts, regionId = this.config.regionId, callback) {
    method describeElasticIpResources (line 634) | describeElasticIpResources (opts, regionId = this.config.regionId, cal...
    method describeCpsIpResources (line 753) | describeCpsIpResources (opts, regionId = this.config.regionId, callbac...
    method describeCcsIpResources (line 871) | describeCcsIpResources (opts, regionId = this.config.regionId, callbac...
    method describeWafIpResources (line 989) | describeWafIpResources (opts, regionId = this.config.regionId, callbac...
    method describeIpResourceInfo (line 1103) | describeIpResourceInfo (opts, regionId = this.config.regionId, callbac...
    method describeIpSafetyInfo (line 1219) | describeIpSafetyInfo (opts, regionId = this.config.regionId, callback) {
    method setCleanThreshold (line 1333) | setCleanThreshold (opts, regionId = this.config.regionId, callback) {
    method setIpCleanThreshold (line 1460) | setIpCleanThreshold (opts, regionId = this.config.regionId, callback) {
    method describeIpCleanThresholdRange (line 1585) | describeIpCleanThresholdRange (
    method describeIpResourceProtectInfo (line 1705) | describeIpResourceProtectInfo (
    method describeIpResourceFlow (line 1829) | describeIpResourceFlow (opts, regionId = this.config.regionId, callbac...

FILE: packages/libs/lib-jdcloud/src/repo/bastion/v1/bastion.js
  class BASTION (line 36) | class BASTION extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeBastions (line 64) | describeBastions (opts, regionId = this.config.regionId, callback) {
    method describeBastion (line 176) | describeBastion (opts, regionId = this.config.regionId, callback) {
    method updateBastionDesc (line 288) | updateBastionDesc (opts, regionId = this.config.regionId, callback) {
    method describeSign (line 409) | describeSign (opts, regionId = this.config.regionId, callback) {
    method describeInstance (line 526) | describeInstance (opts, regionId = this.config.regionId, callback) {
    method deleteInstance (line 646) | deleteInstance (opts, regionId = this.config.regionId, callback) {
    method setInstanceZeroEnable (line 767) | setInstanceZeroEnable (opts, regionId = this.config.regionId, callback) {
    method setInstancePublicAccess (line 897) | setInstancePublicAccess (opts, regionId = this.config.regionId, callba...
    method createInstance (line 1027) | createInstance (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceSpec (line 1147) | modifyInstanceSpec (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceExpireOrStart (line 1272) | modifyInstanceExpireOrStart (opts, regionId = this.config.regionId, ca...
    method describeSourceId (line 1392) | describeSourceId (opts, regionId = this.config.regionId, callback) {
    method describePins (line 1511) | describePins (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/bgw/v1/bgw.js
  class BGW (line 36) | class BGW extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method modifyAdminStatus (line 57) | modifyAdminStatus (opts, regionId = this.config.regionId, callback) {
    method describeConnections (line 184) | describeConnections (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/billing/v1/billing.js
  class BILLING (line 36) | class BILLING extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method queryBillSummary (line 69) | queryBillSummary (opts, regionId = this.config.regionId, callback) {
    method queryBillDetail (line 222) | queryBillDetail (opts, regionId = this.config.regionId, callback) {
    method describeBillSummarys (line 377) | describeBillSummarys (opts, regionId = this.config.regionId, callback) {
    method describeBillDetails (line 530) | describeBillDetails (opts, regionId = this.config.regionId, callback) {
    method describeFormulaSummaryList (line 680) | describeFormulaSummaryList (opts, regionId = this.config.regionId, cal...
    method querySplitItemDaySummary (line 824) | querySplitItemDaySummary (opts, regionId = this.config.regionId, callb...
    method querySplitItemMonthSummary (line 976) | querySplitItemMonthSummary (opts, regionId = this.config.regionId, cal...
    method queryBillDaySummary (line 1128) | queryBillDaySummary (opts, regionId = this.config.regionId, callback) {
    method calculateTotalPrice (line 1291) | calculateTotalPrice (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/bri/v1/bri.js
  class BRI (line 36) | class BRI extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeBWList (line 63) | describeBWList (opts, regionId = this.config.regionId, callback) {
    method setBWList (line 178) | setBWList (opts, regionId = this.config.regionId, callback) {
    method delBWList (line 291) | delBWList (opts, regionId = this.config.regionId, callback) {
    method creditScore (line 403) | creditScore (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/captcha/v1/captcha.js
  class CAPTCHA (line 36) | class CAPTCHA extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method getSessionId (line 64) | getSessionId (opts, callback) {
    method verifyToken (line 192) | verifyToken (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/cdn/v1/cdn.js
  class CDN (line 36) | class CDN extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method queryDomainsLog (line 60) | queryDomainsLog (opts, callback) {
    method queryDomainsLogForJd (line 172) | queryDomainsLogForJd (opts, callback) {
    method queryDomainLog (line 289) | queryDomainLog (opts, callback) {
    method queryOnlineBillingType (line 406) | queryOnlineBillingType (opts, callback) {
    method setOnlineBillingType (line 497) | setOnlineBillingType (opts, callback) {
    method setAuthConfig (line 600) | setAuthConfig (opts, callback) {
    method setSourceAuthConfig (line 726) | setSourceAuthConfig (opts, callback) {
    method queryBand (line 846) | queryBand (opts, callback) {
    method queryBandWithArea (line 962) | queryBandWithArea (opts, callback) {
    method queryDomainConfigStatus (line 1073) | queryDomainConfigStatus (opts, callback) {
    method queryAreaIspList (line 1179) | queryAreaIspList (opts, callback) {
    method queryAreaIspListV2 (line 1279) | queryAreaIspListV2 (opts, callback) {
    method queryForbiddenInfoList (line 1375) | queryForbiddenInfoList (opts, callback) {
    method createForbiddenInfo (line 1485) | createForbiddenInfo (opts, callback) {
    method deleteForbiddenInfo (line 1606) | deleteForbiddenInfo (opts, callback) {
    method queryUnForbiddenStatus (line 1722) | queryUnForbiddenStatus (opts, callback) {
    method queryForbiddenInfoListCommon (line 1834) | queryForbiddenInfoListCommon (opts, callback) {
    method createForbiddenInfoCommon (line 1948) | createForbiddenInfoCommon (opts, callback) {
    method deleteForbiddenInfoCommon (line 2069) | deleteForbiddenInfoCommon (opts, callback) {
    method previewCertificate (line 2186) | previewCertificate (opts, callback) {
    method queryDefaultHttpHeaderKey (line 2289) | queryDefaultHttpHeaderKey (opts, callback) {
    method queryIpBlackList (line 2384) | queryIpBlackList (opts, callback) {
    method setIpBlackList (line 2484) | setIpBlackList (opts, callback) {
    method operateIpBlackList (line 2590) | operateIpBlackList (opts, callback) {
    method queryCustomErrorPage (line 2695) | queryCustomErrorPage (opts, callback) {
    method setCustomErrorPage (line 2794) | setCustomErrorPage (opts, callback) {
    method createCacheRule (line 2901) | createCacheRule (opts, callback) {
    method updateCacheRule (line 3017) | updateCacheRule (opts, callback) {
    method deleteCacheRule (line 3132) | deleteCacheRule (opts, callback) {
    method setCacheRules (line 3235) | setCacheRules (opts, callback) {
    method queryHttpHeader (line 3340) | queryHttpHeader (opts, callback) {
    method setHttpHeader (line 3445) | setHttpHeader (opts, callback) {
    method deleteHttpHeader (line 3559) | deleteHttpHeader (opts, callback) {
    method setVideoDraft (line 3668) | setVideoDraft (opts, callback) {
    method setRange (line 3771) | setRange (opts, callback) {
    method setIgnoreQueryString (line 3874) | setIgnoreQueryString (opts, callback) {
    method setFilterArgs (line 3978) | setFilterArgs (opts, callback) {
    method queryFilterArgs (line 4086) | queryFilterArgs (opts, callback) {
    method queryUserAgent (line 4188) | queryUserAgent (opts, callback) {
    method setUserAgentConfig (line 4288) | setUserAgentConfig (opts, callback) {
    method queryAccesskeyConfig (line 4396) | queryAccesskeyConfig (opts, callback) {
    method setAccesskeyConfig (line 4497) | setAccesskeyConfig (opts, callback) {
    method setRefer (line 4609) | setRefer (opts, callback) {
    method queryMonitor (line 4730) | queryMonitor (opts, callback) {
    method setMonitor (line 4832) | setMonitor (opts, callback) {
    method stopMonitor (line 4943) | stopMonitor (opts, callback) {
    method setSource (line 5050) | setSource (opts, callback) {
    method operateShareCache (line 5174) | operateShareCache (opts, callback) {
    method setHttpType (line 5285) | setHttpType (opts, callback) {
    method queryFollowRedirect (line 5410) | queryFollowRedirect (opts, callback) {
    method setFollowRedirect (line 5509) | setFollowRedirect (opts, callback) {
    method queryFollowSourceProtocol (line 5613) | queryFollowSourceProtocol (opts, callback) {
    method setFollowSourceProtocol (line 5713) | setFollowSourceProtocol (opts, callback) {
    method setDomainConfig (line 5822) | setDomainConfig (opts, callback) {
    method queryDomainAllConfigClassify (line 5940) | queryDomainAllConfigClassify (opts, callback) {
    method executeDomainCopy (line 6041) | executeDomainCopy (opts, callback) {
    method queryExtraCacheTime (line 6144) | queryExtraCacheTime (opts, callback) {
    method setExtraCacheTime (line 6244) | setExtraCacheTime (opts, callback) {
    method deleteExtraCacheTime (line 6350) | deleteExtraCacheTime (opts, callback) {
    method batchSetExtraCacheTime (line 6453) | batchSetExtraCacheTime (opts, callback) {
    method setGzip (line 6557) | setGzip (opts, callback) {
    method configBackSourceRule (line 6664) | configBackSourceRule (opts, callback) {
    method queryBackSourceRule (line 6772) | queryBackSourceRule (opts, callback) {
    method configUrlRule (line 6872) | configUrlRule (opts, callback) {
    method queryUrlRule (line 6980) | queryUrlRule (opts, callback) {
    method configHttp2 (line 7079) | configHttp2 (opts, callback) {
    method queryHttp2 (line 7183) | queryHttp2 (opts, callback) {
    method configBackSourcePath (line 7282) | configBackSourcePath (opts, callback) {
    method queryBackSourcePath (line 7386) | queryBackSourcePath (opts, callback) {
    method setAccelerateRegion (line 7485) | setAccelerateRegion (opts, callback) {
    method configBackSourceRules (line 7589) | configBackSourceRules (opts, callback) {
    method queryBackSourceRules (line 7697) | queryBackSourceRules (opts, callback) {
    method configBackSourceOss (line 7801) | configBackSourceOss (opts, callback) {
    method queryBackSourceOss (line 7922) | queryBackSourceOss (opts, callback) {
    method speedLimit (line 8021) | speedLimit (opts, callback) {
    method batchIpBlackList (line 8127) | batchIpBlackList (opts, callback) {
    method configBackSourceIpVersion (line 8238) | configBackSourceIpVersion (opts, callback) {
    method queryBackSourceIpVersion (line 8344) | queryBackSourceIpVersion (opts, callback) {
    method queryDomainGroupList (line 8450) | queryDomainGroupList (opts, callback) {
    method queryDomainGroupDetail (line 8560) | queryDomainGroupDetail (opts, callback) {
    method queryDomainsNotInGroup (line 8658) | queryDomainsNotInGroup (opts, callback) {
    method updateDomainGroup (line 8753) | updateDomainGroup (opts, callback) {
    method createDomainGroup (line 8867) | createDomainGroup (opts, callback) {
    method batchDeleteDomainGroup (line 8971) | batchDeleteDomainGroup (opts, callback) {
    method getDomainList (line 9082) | getDomainList (opts, callback) {
    method getDomainListByFilter (line 9209) | getDomainListByFilter (opts, callback) {
    method getDomainDetail (line 9367) | getDomainDetail (opts, callback) {
    method createDomain (line 9482) | createDomain (opts, callback) {
    method deleteDomain (line 9635) | deleteDomain (opts, callback) {
    method queryDomainCnameTag (line 9734) | queryDomainCnameTag (opts, callback) {
    method startDomain (line 9834) | startDomain (opts, callback) {
    method stopDomain (line 9933) | stopDomain (opts, callback) {
    method queryOssBuckets (line 10033) | queryOssBuckets (opts, callback) {
    method batchCreate (line 10140) | batchCreate (opts, callback) {
    method queryDomainConfig (line 10302) | queryDomainConfig (opts, callback) {
    method generateDomainTxt (line 10401) | generateDomainTxt (opts, callback) {
    method domainTxtValidate (line 10502) | domainTxtValidate (opts, callback) {
    method queryDomainTempInstList (line 10615) | queryDomainTempInstList (opts, callback) {
    method queryDomainTempProKeys (line 10715) | queryDomainTempProKeys (opts, callback) {
    method modifyDomainTempInst (line 10809) | modifyDomainTempInst (opts, callback) {
    method queryDomainTempInst (line 10917) | queryDomainTempInst (opts, callback) {
    method delDomainTempInstance (line 11015) | delDomainTempInstance (opts, callback) {
    method checkWhetherIpBelongToJCloud (line 11114) | checkWhetherIpBelongToJCloud (opts, callback) {
    method queryServiceIp (line 11210) | queryServiceIp (opts, callback) {
    method setLiveDomainBackSource (line 11310) | setLiveDomainBackSource (opts, callback) {
    method setLiveDomainIpBlackList (line 11429) | setLiveDomainIpBlackList (opts, callback) {
    method setLiveDomainRefer (line 11538) | setLiveDomainRefer (opts, callback) {
    method operateLiveDomainIpBlackList (line 11656) | operateLiveDomainIpBlackList (opts, callback) {
    method setLiveDomainBackSourceHost (line 11759) | setLiveDomainBackSourceHost (opts, callback) {
    method setLiveDomainAccessKey (line 11864) | setLiveDomainAccessKey (opts, callback) {
    method setProtocolConvert (line 11979) | setProtocolConvert (opts, callback) {
    method deleteForbiddenStream (line 12100) | deleteForbiddenStream (opts, callback) {
    method queryPushDomainORAppOrStream (line 12206) | queryPushDomainORAppOrStream (opts, callback) {
    method queryLiveDomainIpBlackWhiteList (line 12316) | queryLiveDomainIpBlackWhiteList (opts, callback) {
    method batchCreateLiveDomain (line 12423) | batchCreateLiveDomain (opts, callback) {
    method queryLiveDomainDetail (line 12604) | queryLiveDomainDetail (opts, callback) {
    method queryLiveDomainApps (line 12704) | queryLiveDomainApps (opts, callback) {
    method createLiveDomainPrefecthTask (line 12804) | createLiveDomainPrefecthTask (opts, callback) {
    method queryLivePrefetchTask (line 12906) | queryLivePrefetchTask (opts, callback) {
    method queryPinCanIPType (line 13001) | queryPinCanIPType (opts, callback) {
    method batCreatePrefetchTask (line 13093) | batCreatePrefetchTask (opts, callback) {
    method updatePrefetchTask (line 13191) | updatePrefetchTask (opts, callback) {
    method queryPrefetchTask (line 13308) | queryPrefetchTask (opts, callback) {
    method stopPrefetchTask (line 13429) | stopPrefetchTask (opts, callback) {
    method operatePurgeTask (line 13531) | operatePurgeTask (opts, callback) {
    method queryPurgeTask (line 13639) | queryPurgeTask (opts, callback) {
    method queryCdnUserQuota (line 13764) | queryCdnUserQuota (opts, callback) {
    method queryRefreshTaskByIds (line 13857) | queryRefreshTaskByIds (opts, callback) {
    method setRefreshLimit (line 13958) | setRefreshLimit (opts, callback) {
    method queryRefreshLimit (line 14072) | queryRefreshLimit (opts, callback) {
    method queryRefreshTaskById (line 14174) | queryRefreshTaskById (opts, callback) {
    method createRefreshTaskForCallback (line 14275) | createRefreshTaskForCallback (opts, callback) {
    method createRefreshTaskForCallbackV2 (line 14376) | createRefreshTaskForCallbackV2 (opts, callback) {
    method queryRefreshTask (line 14485) | queryRefreshTask (opts, callback) {
    method createRefreshTask (line 14609) | createRefreshTask (opts, callback) {
    method queryNetProtectionRules (line 14716) | queryNetProtectionRules (opts, callback) {
    method setNetProtectionRules (line 14815) | setNetProtectionRules (opts, callback) {
    method queryNetProtectionRulesSwitch (line 14946) | queryNetProtectionRulesSwitch (opts, callback) {
    method setNetProtectionRulesSwitch (line 15037) | setNetProtectionRulesSwitch (opts, callback) {
    method queryGeoAreas (line 15132) | queryGeoAreas (opts, callback) {
    method queryAttackTypeCount (line 15225) | queryAttackTypeCount (opts, callback) {
    method queryDdosGraph (line 15326) | queryDdosGraph (opts, callback) {
    method searchAttackLog (line 15433) | searchAttackLog (opts, callback) {
    method getAllUpperNodeIpList (line 15543) | getAllUpperNodeIpList (opts, callback) {
    method configServiceNotice (line 15641) | configServiceNotice (opts, callback) {
    method queryServiceNotice (line 15759) | queryServiceNotice (opts, callback) {
    method getSslCertList (line 15860) | getSslCertList (opts, callback) {
    method getSslCertDetail (line 15961) | getSslCertDetail (opts, callback) {
    method uploadCert (line 16064) | uploadCert (opts, callback) {
    method queryMixStatisticsData (line 16197) | queryMixStatisticsData (opts, callback) {
    method queryMixStatisticsWithAreaData (line 16331) | queryMixStatisticsWithAreaData (opts, callback) {
    method queryMixTrafficGroupSum (line 16463) | queryMixTrafficGroupSum (opts, callback) {
    method queryStatisticsData (line 16600) | queryStatisticsData (opts, callback) {
    method queryStatisticsDataGroupByArea (line 16745) | queryStatisticsDataGroupByArea (opts, callback) {
    method queryStatisticsDataGroupSum (line 16895) | queryStatisticsDataGroupSum (opts, callback) {
    method queryLiveStatisticsData (line 17043) | queryLiveStatisticsData (opts, callback) {
    method queryLiveStatisticsAreaDataGroupBy (line 17195) | queryLiveStatisticsAreaDataGroupBy (opts, callback) {
    method queryLiveTrafficGroupSum (line 17350) | queryLiveTrafficGroupSum (opts, callback) {
    method queryStatisticsTopIp (line 17496) | queryStatisticsTopIp (opts, callback) {
    method queryStatisticsTopUrl (line 17615) | queryStatisticsTopUrl (opts, callback) {
    method queryDirBandwidth (line 17732) | queryDirBandwidth (opts, callback) {
    method queryDirStatsData (line 17848) | queryDirStatsData (opts, callback) {
    method queryCustomizedDirBandWidth (line 17960) | queryCustomizedDirBandWidth (opts, callback) {
    method queryStreamInfo (line 18074) | queryStreamInfo (opts, callback) {
    method queryAvgBandwidthForPCdn (line 18197) | queryAvgBandwidthForPCdn (opts, callback) {
    method queryDeviceStatusForPCdn (line 18327) | queryDeviceStatusForPCdn (opts, callback) {
    method queryJDBoxStatisticsData (line 18438) | queryJDBoxStatisticsData (opts, callback) {
    method queryJDBoxStatisticsDataWithGroup (line 18569) | queryJDBoxStatisticsDataWithGroup (opts, callback) {
    method queryJBoxAvgBandwidth (line 18698) | queryJBoxAvgBandwidth (opts, callback) {
    method queryWafSwitch (line 18824) | queryWafSwitch (opts, callback) {
    method setWafSwitch (line 18923) | setWafSwitch (opts, callback) {
    method queryWafWhiteRuleSwitch (line 19026) | queryWafWhiteRuleSwitch (opts, callback) {
    method setWafWhiteRuleSwitch (line 19125) | setWafWhiteRuleSwitch (opts, callback) {
    method querywafWhiteRules (line 19232) | querywafWhiteRules (opts, callback) {
    method createWafWhiteRule (line 19351) | createWafWhiteRule (opts, callback) {
    method updateWafWhiteRule (line 19467) | updateWafWhiteRule (opts, callback) {
    method enableWafWhiteRules (line 19586) | enableWafWhiteRules (opts, callback) {
    method disableWafWhiteRules (line 19693) | disableWafWhiteRules (opts, callback) {
    method deleteWafWhiteRules (line 19800) | deleteWafWhiteRules (opts, callback) {
    method queryWafBlackRuleSwitch (line 19913) | queryWafBlackRuleSwitch (opts, callback) {
    method setWafBlackRuleSwitch (line 20012) | setWafBlackRuleSwitch (opts, callback) {
    method querywafBlackRules (line 20119) | querywafBlackRules (opts, callback) {
    method createWafBlackRule (line 20239) | createWafBlackRule (opts, callback) {
    method updateWafBlackRule (line 20359) | updateWafBlackRule (opts, callback) {
    method enableWafBlackRules (line 20481) | enableWafBlackRules (opts, callback) {
    method disableWafBlackRules (line 20588) | disableWafBlackRules (opts, callback) {
    method deleteWafBlackRules (line 20695) | deleteWafBlackRules (opts, callback) {
    method queryCCProtectSwitch (line 20808) | queryCCProtectSwitch (opts, callback) {
    method setCCProtectSwitch (line 20907) | setCCProtectSwitch (opts, callback) {
    method queryCCProtectRules (line 21013) | queryCCProtectRules (opts, callback) {
    method createCCProtectRule (line 21125) | createCCProtectRule (opts, callback) {
    method updateCCProtectRule (line 21245) | updateCCProtectRule (opts, callback) {
    method enableCCProtectRule (line 21366) | enableCCProtectRule (opts, callback) {
    method disableCCProtectRule (line 21469) | disableCCProtectRule (opts, callback) {
    method deleteCCProtectRule (line 21572) | deleteCCProtectRule (opts, callback) {
    method queryWebProtectSwitch (line 21677) | queryWebProtectSwitch (opts, callback) {
    method setWebProtectSwitch (line 21776) | setWebProtectSwitch (opts, callback) {
    method queryWebProtectSettings (line 21881) | queryWebProtectSettings (opts, callback) {
    method updateWebProtectSettings (line 21982) | updateWebProtectSettings (opts, callback) {
    method queryWafRegions (line 22092) | queryWafRegions (opts, callback) {
    method queryIpBlackSettingStatus (line 22193) | queryIpBlackSettingStatus (opts, callback) {
    method wafQueryPvForAreaAndIp (line 22294) | wafQueryPvForAreaAndIp (opts, callback) {
    method wafQueryPv (line 22400) | wafQueryPv (opts, callback) {
    method wafQueryAttackDetails (line 22509) | wafQueryAttackDetails (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/censor/v1/censor.js
  class CENSOR (line 36) | class CENSOR extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method asyncAudioScan (line 60) | asyncAudioScan (opts, callback) {
    method audioResults (line 168) | audioResults (opts, callback) {
    method asyncAudioScanV2 (line 279) | asyncAudioScanV2 (opts, callback) {
    method audioCallbackV2 (line 406) | audioCallbackV2 (opts, callback) {
    method audioResultsV2 (line 507) | audioResultsV2 (opts, callback) {
    method deleteCensorLib (line 609) | deleteCensorLib (opts, regionId = this.config.regionId, callback) {
    method deleteCensorLibItems (line 722) | deleteCensorLibItems (opts, regionId = this.config.regionId, callback) {
    method imageScan (line 844) | imageScan (opts, callback) {
    method asyncImageScan (line 950) | asyncImageScan (opts, callback) {
    method imageResults (line 1058) | imageResults (opts, callback) {
    method imageScanV2 (line 1168) | imageScanV2 (opts, callback) {
    method deleteLimit (line 1273) | deleteLimit (opts, regionId = this.config.regionId, callback) {
    method textScan (line 1387) | textScan (opts, callback) {
    method innerTextScan (line 1490) | innerTextScan (opts, callback) {
    method textScanV2 (line 1592) | textScanV2 (opts, callback) {
    method textResultsV2 (line 1698) | textResultsV2 (opts, callback) {
    method asyncVideoScan (line 1803) | asyncVideoScan (opts, callback) {
    method videoResults (line 1917) | videoResults (opts, callback) {
    method asyncVideoScanV2 (line 2028) | asyncVideoScanV2 (opts, callback) {
    method videoCallbackV2 (line 2155) | videoCallbackV2 (opts, callback) {
    method videoResultsV2 (line 2256) | videoResultsV2 (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/clickhouse/v1/clickhouse.js
  class CLICKHOUSE (line 36) | class CLICKHOUSE extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeAccounts (line 62) | describeAccounts (opts, regionId = this.config.regionId, callback) {
    method createAccount (line 182) | createAccount (opts, regionId = this.config.regionId, callback) {
    method deleteAccount (line 318) | deleteAccount (opts, regionId = this.config.regionId, callback) {
    method modifyPrivilege (line 436) | modifyPrivilege (opts, regionId = this.config.regionId, callback) {
    method resetPassword (line 558) | resetPassword (opts, regionId = this.config.regionId, callback) {
    method azs (line 678) | azs (opts, regionId = this.config.regionId, callback) {
    method orderableInstanceType (line 782) | orderableInstanceType (opts, regionId = this.config.regionId, callback) {
    method createInstance (line 888) | createInstance (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceSpec (line 1008) | modifyInstanceSpec (opts, regionId = this.config.regionId, callback) {
    method describeInstanceAttributes (line 1132) | describeInstanceAttributes (opts, regionId = this.config.regionId, cal...
    method deleteInstance (line 1242) | deleteInstance (opts, regionId = this.config.regionId, callback) {
    method describeInstances (line 1363) | describeInstances (opts, regionId = this.config.regionId, callback) {
    method describeNodeClasses (line 1481) | describeNodeClasses (opts, regionId = this.config.regionId, callback) {
    method describeDefaultConfig (line 1601) | describeDefaultConfig (opts, regionId = this.config.regionId, callback) {
    method describePodMap (line 1714) | describePodMap (opts, regionId = this.config.regionId, callback) {
    method describeDomainNames (line 1829) | describeDomainNames (opts, regionId = this.config.regionId, callback) {
    method deleteInstanceByForce (line 1940) | deleteInstanceByForce (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceName (line 2060) | modifyInstanceName (opts, regionId = this.config.regionId, callback) {
    method upgradeEngineVersion (line 2180) | upgradeEngineVersion (opts, regionId = this.config.regionId, callback) {
    method disableInternetAccess (line 2300) | disableInternetAccess (opts, regionId = this.config.regionId, callback) {
    method enableInternetAccess (line 2420) | enableInternetAccess (opts, regionId = this.config.regionId, callback) {
    method describeNodes (line 2550) | describeNodes (opts, regionId = this.config.regionId, callback) {
    method describeProgress (line 2673) | describeProgress (opts, regionId = this.config.regionId, callback) {
    method selectDetailList (line 2787) | selectDetailList (opts, regionId = this.config.regionId, callback) {
    method internalDescribeInstance (line 2901) | internalDescribeInstance (opts, regionId = this.config.regionId, callb...
    method enableCloudDiskCapacity (line 3012) | enableCloudDiskCapacity (opts, regionId = this.config.regionId, callba...
    method disableCloudDiskCapacity (line 3129) | disableCloudDiskCapacity (opts, regionId = this.config.regionId, callb...
    method detachNetwork (line 3245) | detachNetwork (opts, regionId = this.config.regionId, callback) {
    method attachNetwork (line 3356) | attachNetwork (opts, regionId = this.config.regionId, callback) {
    method describeAuditResult (line 3475) | describeAuditResult (opts, regionId = this.config.regionId, callback) {
    method describeSlowlogResult (line 3610) | describeSlowlogResult (opts, regionId = this.config.regionId, callback) {
    method describeParameters (line 3740) | describeParameters (opts, regionId = this.config.regionId, callback) {
    method modifyParameters (line 3851) | modifyParameters (opts, regionId = this.config.regionId, callback) {
    method describeExposeType (line 3966) | describeExposeType (opts, regionId = this.config.regionId, callback) {
    method describeWhiteList (line 4077) | describeWhiteList (opts, regionId = this.config.regionId, callback) {
    method modifyWhiteList (line 4189) | modifyWhiteList (opts, regionId = this.config.regionId, callback) {
    method deleteWhiteListGroup (line 4317) | deleteWhiteListGroup (opts, regionId = this.config.regionId, callback) {
    method addWhiteListGroup (line 4436) | addWhiteListGroup (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/cloudauth/v1/cloudauth.js
  class CLOUDAUTH (line 36) | class CLOUDAUTH extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method personalAuth (line 56) | personalAuth (opts, callback) {
    method personalMobile (line 158) | personalMobile (opts, callback) {
    method personalBankcard3Detail (line 266) | personalBankcard3Detail (opts, callback) {
    method personalBankcard3Other (line 368) | personalBankcard3Other (opts, callback) {
    method personalBankcard4Detail (line 470) | personalBankcard4Detail (opts, callback) {
    method personalBankcard4Other (line 572) | personalBankcard4Other (opts, callback) {
    method companyTransfer (line 674) | companyTransfer (opts, callback) {
    method checkCompanyTransfer (line 776) | checkCompanyTransfer (opts, callback) {
    method queryCompanyTransfer (line 878) | queryCompanyTransfer (opts, callback) {
    method checkCompanyInfo (line 980) | checkCompanyInfo (opts, callback) {
    method checkLegalPerson (line 1082) | checkLegalPerson (opts, callback) {
    method checkLegalPersonDetail (line 1184) | checkLegalPersonDetail (opts, callback) {
    method checkCompanyInfo3 (line 1286) | checkCompanyInfo3 (opts, callback) {
    method queryCityList (line 1392) | queryCityList (opts, callback) {
    method companyTransferSimple (line 1493) | companyTransferSimple (opts, callback) {
    method queryProvinceList (line 1598) | queryProvinceList (opts, callback) {
    method queryBankList (line 1693) | queryBankList (opts, callback) {
    method queryBankBranchList (line 1790) | queryBankBranchList (opts, callback) {
    method iDCard (line 1899) | iDCard (opts, callback) {
    method bankCardOCR (line 2001) | bankCardOCR (opts, callback) {
    method businessOCR (line 2103) | businessOCR (opts, callback) {
    method getAliveUrl (line 2207) | getAliveUrl (opts, callback) {
    method getAliveResult (line 2315) | getAliveResult (opts, callback) {
    method getAliveUrlNew (line 2423) | getAliveUrlNew (opts, callback) {
    method getAliveResultNew (line 2543) | getAliveResultNew (opts, callback) {
    method oneClick (line 2650) | oneClick (opts, callback) {
    method addressInfo (line 2770) | addressInfo (opts, callback) {
    method addressDetail (line 2884) | addressDetail (opts, callback) {
    method mobileStatus (line 3000) | mobileStatus (opts, callback) {
    method describeApplyStatus (line 3103) | describeApplyStatus (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/clouddnsservice/v1/clouddnsservice.js
  method constructor (line 37) | constructor (options = {}) {
  method getActionLog (line 66) | getActionLog (opts, regionId = this.config.regionId, callback) {
  method getDomains (line 220) | getDomains (opts, regionId = this.config.regionId, callback) {
  method addDomain (line 355) | addDomain (opts, regionId = this.config.regionId, callback) {
  method delDomain (line 491) | delDomain (opts, regionId = this.config.regionId, callback) {
  method updateDomain (line 604) | updateDomain (opts, regionId = this.config.regionId, callback) {
  method getDomainQueryCount (line 730) | getDomainQueryCount (opts, regionId = this.config.regionId, callback) {
  method getDomainQueryTraffic (line 870) | getDomainQueryTraffic (opts, regionId = this.config.regionId, callback) {
  method searchRR (line 1012) | searchRR (opts, regionId = this.config.regionId, callback) {
  method getViewTree (line 1134) | getViewTree (opts, regionId = this.config.regionId, callback) {
  method addRR (line 1265) | addRR (opts, regionId = this.config.regionId, callback) {
  method updateRR (line 1385) | updateRR (opts, regionId = this.config.regionId, callback) {
  method operateRR (line 1506) | operateRR (opts, regionId = this.config.regionId, callback) {
  method batchSetDnsResolve (line 1631) | batchSetDnsResolve (opts, regionId = this.config.regionId, callback) {
  method addUserView (line 1739) | addUserView (opts, regionId = this.config.regionId, callback) {
  method delUserView (line 1852) | delUserView (opts, regionId = this.config.regionId, callback) {
  method getUserView (line 1973) | getUserView (opts, regionId = this.config.regionId, callback) {
  method addUserViewIP (line 2112) | addUserViewIP (opts, regionId = this.config.regionId, callback) {
  method delUserViewIP (line 2225) | delUserViewIP (opts, regionId = this.config.regionId, callback) {
  method getUserViewIP (line 2346) | getUserViewIP (opts, regionId = this.config.regionId, callback) {
  method getMonitor (line 2492) | getMonitor (opts, regionId = this.config.regionId, callback) {
  method addMonitor (line 2612) | addMonitor (opts, regionId = this.config.regionId, callback) {
  method getTargets (line 2733) | getTargets (opts, regionId = this.config.regionId, callback) {
  method addMonitorTarget (line 2853) | addMonitorTarget (opts, regionId = this.config.regionId, callback) {
  method operateMonitor (line 2978) | operateMonitor (opts, regionId = this.config.regionId, callback) {
  method updateMonitor (line 3104) | updateMonitor (opts, regionId = this.config.regionId, callback) {
  method getMonitorAlarmInfo (line 3230) | getMonitorAlarmInfo (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/cloudsign/v1/cloudsign.js
  class CLOUDSIGN (line 36) | class CLOUDSIGN extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeContractList (line 59) | describeContractList (opts, callback) {
    method signContract (line 166) | signContract (opts, callback) {
    method downloadContracts (line 271) | downloadContracts (opts, callback) {
    method verifyContract (line 373) | verifyContract (opts, callback) {
    method deleteContract (line 486) | deleteContract (opts, callback) {
    method describeContractList (line 588) | describeContractList (opts, callback) {
    method signContract (line 698) | signContract (opts, callback) {
    method verifyContract (line 804) | verifyContract (opts, callback) {
    method downloadContracts (line 922) | downloadContracts (opts, callback) {
    method deleteContract (line 1031) | deleteContract (opts, callback) {
    method saveEvidence (line 1134) | saveEvidence (opts, callback) {
    method saveMultiEvidence (line 1253) | saveMultiEvidence (opts, callback) {
    method getEvidence (line 1382) | getEvidence (opts, callback) {
    method getMultiEvidence (line 1501) | getMultiEvidence (opts, callback) {
    method getSaveReport (line 1624) | getSaveReport (opts, callback) {
    method describeApplyStatus (line 1732) | describeApplyStatus (opts, callback) {
    method enableContractSave (line 1822) | enableContractSave (opts, callback) {
    method disableContractSave (line 1913) | disableContractSave (opts, callback) {
    method setKmsKeyId (line 2005) | setKmsKeyId (opts, callback) {
    method applyCert (line 2104) | applyCert (opts, callback) {
    method renewCert (line 2209) | renewCert (opts, callback) {
    method updateCert (line 2314) | updateCert (opts, callback) {
    method revokeCert (line 2418) | revokeCert (opts, callback) {
    method describeCertList (line 2527) | describeCertList (opts, callback) {
    method describeStampList (line 2645) | describeStampList (opts, callback) {
    method uploadStamp (line 2746) | uploadStamp (opts, callback) {
    method downloadStamps (line 2844) | downloadStamps (opts, callback) {
    method downloadStampsNew (line 2946) | downloadStampsNew (opts, callback) {
    method deleteStamp (line 3044) | deleteStamp (opts, callback) {
    method editStamp (line 3146) | editStamp (opts, callback) {
    method describeStampHistoryList (line 3250) | describeStampHistoryList (opts, callback) {
    method describeTemplateList (line 3363) | describeTemplateList (opts, callback) {
    method uploadTemplate (line 3470) | uploadTemplate (opts, callback) {
    method downloadTemplates (line 3568) | downloadTemplates (opts, callback) {
    method downloadTemplatesNew (line 3670) | downloadTemplatesNew (opts, callback) {
    method deleteTemplate (line 3768) | deleteTemplate (opts, callback) {
    method paddingTemplate (line 3868) | paddingTemplate (opts, callback) {
    method describeStampList (line 3981) | describeStampList (opts, callback) {
    method uploadStamp (line 4082) | uploadStamp (opts, callback) {
    method downloadStamps (line 4185) | downloadStamps (opts, callback) {
    method deleteStamp (line 4283) | deleteStamp (opts, callback) {
    method describeTemplateList (line 4388) | describeTemplateList (opts, callback) {
    method uploadTemplate (line 4495) | uploadTemplate (opts, callback) {
    method downloadTemplates (line 4598) | downloadTemplates (opts, callback) {
    method paddingTemplate (line 4698) | paddingTemplate (opts, callback) {
    method deleteTemplate (line 4805) | deleteTemplate (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/compile/v1/compile.js
  method constructor (line 37) | constructor (options = {}) {
  method createDemo (line 56) | createDemo (opts, regionId = this.config.regionId, callback) {
  method getJobs (line 167) | getJobs (opts, regionId = this.config.regionId, callback) {
  method createJob (line 281) | createJob (opts, regionId = this.config.regionId, callback) {
  method deleteJobs (line 390) | deleteJobs (opts, regionId = this.config.regionId, callback) {
  method getJob (line 495) | getJob (opts, regionId = this.config.regionId, callback) {
  method updateJob (line 609) | updateJob (opts, regionId = this.config.regionId, callback) {
  method deleteJob (line 724) | deleteJob (opts, regionId = this.config.regionId, callback) {
  method startJob (line 838) | startJob (opts, regionId = this.config.regionId, callback) {
  method getBuildLog (line 959) | getBuildLog (opts, regionId = this.config.regionId, callback) {
  method getBuildStatus (line 1083) | getBuildStatus (opts, regionId = this.config.regionId, callback) {
  method getExternalLink (line 1203) | getExternalLink (opts, regionId = this.config.regionId, callback) {
  method stopBuild (line 1325) | stopBuild (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/containerregistry/v1/containerregistry.js
  method constructor (line 37) | constructor (options = {}) {
  method getAuthorizationToken (line 64) | getAuthorizationToken (opts, regionId = this.config.regionId, callback) {
  method describeAuthorizationTokens (line 189) | describeAuthorizationTokens (opts, regionId = this.config.regionId, call...
  method releaseAuthorizationToken (line 309) | releaseAuthorizationToken (opts, regionId = this.config.regionId, callba...
  method describeImages (line 439) | describeImages (opts, regionId = this.config.regionId, callback) {
  method deleteImage (line 558) | deleteImage (opts, regionId = this.config.regionId, callback) {
  method describeQuotas (line 686) | describeQuotas (opts, regionId = this.config.regionId, callback) {
  method describeRegistries (line 792) | describeRegistries (opts, regionId = this.config.regionId, callback) {
  method createRegistry (line 901) | createRegistry (opts, regionId = this.config.regionId, callback) {
  method describeRegistry (line 1019) | describeRegistry (opts, regionId = this.config.regionId, callback) {
  method deleteRegistry (line 1130) | deleteRegistry (opts, regionId = this.config.regionId, callback) {
  method checkRegistryName (line 1243) | checkRegistryName (opts, regionId = this.config.regionId, callback) {
  method createRepository (line 1365) | createRepository (opts, regionId = this.config.regionId, callback) {
  method describeRepositories (line 1494) | describeRepositories (opts, regionId = this.config.regionId, callback) {
  method deleteRepository (line 1613) | deleteRepository (opts, regionId = this.config.regionId, callback) {
  method checkRepositoryName (line 1736) | checkRepositoryName (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/cp/v1/cp.js
  class CP (line 36) | class CP extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method createPartner (line 62) | createPartner (opts, callback) {
    method usercpcheck (line 177) | usercpcheck (opts, callback) {
    method setUserGrace (line 279) | setUserGrace (opts, callback) {
    method getUserGrace (line 377) | getUserGrace (opts, callback) {
    method partnerToken (line 479) | partnerToken (opts, callback) {
    method partnerStsToken (line 592) | partnerStsToken (opts, callback) {
    method checkUser (line 701) | checkUser (opts, callback) {
    method sendVerificationCode (line 809) | sendVerificationCode (opts, callback) {
    method createUser (line 928) | createUser (opts, callback) {
    method listPartnerUsers (line 1046) | listPartnerUsers (opts, callback) {
    method createUserAuth (line 1179) | createUserAuth (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/cps/v1/cps.js
  class CPS (line 36) | class CPS extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeAliasIps (line 66) | describeAliasIps (opts, regionId = this.config.regionId, callback) {
    method createAliasIp (line 190) | createAliasIp (opts, regionId = this.config.regionId, callback) {
    method deleteAliasIp (line 310) | deleteAliasIp (opts, regionId = this.config.regionId, callback) {
    method describeCerts (line 433) | describeCerts (opts, regionId = this.config.regionId, callback) {
    method createCert (line 551) | createCert (opts, regionId = this.config.regionId, callback) {
    method describeCert (line 668) | describeCert (opts, regionId = this.config.regionId, callback) {
    method removeCert (line 779) | removeCert (opts, regionId = this.config.regionId, callback) {
    method modifyCert (line 895) | modifyCert (opts, regionId = this.config.regionId, callback) {
    method describeElasticIps (line 1024) | describeElasticIps (opts, regionId = this.config.regionId, callback) {
    method applyElasticIps (line 1154) | applyElasticIps (opts, regionId = this.config.regionId, callback) {
    method describeElasticIp (line 1271) | describeElasticIp (opts, regionId = this.config.regionId, callback) {
    method modifyElasticIpBandwidth (line 1387) | modifyElasticIpBandwidth (opts, regionId = this.config.regionId, callb...
    method describeElasticIpName (line 1510) | describeElasticIpName (opts, regionId = this.config.regionId, callback) {
    method describeDeviceTypes (line 1621) | describeDeviceTypes (opts, regionId = this.config.regionId, callback) {
    method describeOS (line 1729) | describeOS (opts, regionId = this.config.regionId, callback) {
    method describeDeviceRaids (line 1846) | describeDeviceRaids (opts, regionId = this.config.regionId, callback) {
    method describeInstance (line 1962) | describeInstance (opts, regionId = this.config.regionId, callback) {
    method describeInstances (line 2091) | describeInstances (opts, regionId = this.config.regionId, callback) {
    method createInstances (line 2249) | createInstances (opts, regionId = this.config.regionId, callback) {
    method describeInstanceName (line 2366) | describeInstanceName (opts, regionId = this.config.regionId, callback) {
    method assignIpv6Address (line 2482) | assignIpv6Address (opts, regionId = this.config.regionId, callback) {
    method modifyInstance (line 2611) | modifyInstance (opts, regionId = this.config.regionId, callback) {
    method describeInstanceRaid (line 2732) | describeInstanceRaid (opts, regionId = this.config.regionId, callback) {
    method describeInstanceStatus (line 2846) | describeInstanceStatus (opts, regionId = this.config.regionId, callbac...
    method restartInstance (line 2960) | restartInstance (opts, regionId = this.config.regionId, callback) {
    method stopInstance (line 3078) | stopInstance (opts, regionId = this.config.regionId, callback) {
    method startInstance (line 3196) | startInstance (opts, regionId = this.config.regionId, callback) {
    method restartInstances (line 3314) | restartInstances (opts, regionId = this.config.regionId, callback) {
    method stopInstances (line 3428) | stopInstances (opts, regionId = this.config.regionId, callback) {
    method startInstances (line 3542) | startInstances (opts, regionId = this.config.regionId, callback) {
    method reinstallInstance (line 3659) | reinstallInstance (opts, regionId = this.config.regionId, callback) {
    method modifyBandwidth (line 3789) | modifyBandwidth (opts, regionId = this.config.regionId, callback) {
    method associateElasticIp (line 3919) | associateElasticIp (opts, regionId = this.config.regionId, callback) {
    method disassociateElasticIp (line 4053) | disassociateElasticIp (opts, regionId = this.config.regionId, callback) {
    method resetPassword (line 4181) | resetPassword (opts, regionId = this.config.regionId, callback) {
    method describeAvailablePrivateIp (line 4305) | describeAvailablePrivateIp (opts, regionId = this.config.regionId, cal...
    method describeInstanceMonitorInfo (line 4447) | describeInstanceMonitorInfo (opts, regionId = this.config.regionId, ca...
    method describeEventLogs (line 4570) | describeEventLogs (opts, regionId = this.config.regionId, callback) {
    method describeIpv6Address (line 4687) | describeIpv6Address (opts, regionId = this.config.regionId, callback) {
    method describeIpv6Addresses (line 4809) | describeIpv6Addresses (opts, regionId = this.config.regionId, callback) {
    method assignIpv6AddressesBandwidth (line 4933) | assignIpv6AddressesBandwidth (
    method modifyIpv6AddressBandwidth (line 5059) | modifyIpv6AddressBandwidth (opts, regionId = this.config.regionId, cal...
    method describeIpv6Gateways (line 5189) | describeIpv6Gateways (opts, regionId = this.config.regionId, callback) {
    method describeIpv6Gateway (line 5303) | describeIpv6Gateway (opts, regionId = this.config.regionId, callback) {
    method modifyIpv6Gateway (line 5418) | modifyIpv6Gateway (opts, regionId = this.config.regionId, callback) {
    method describeKeypairs (line 5543) | describeKeypairs (opts, regionId = this.config.regionId, callback) {
    method createKeypairs (line 5667) | createKeypairs (opts, regionId = this.config.regionId, callback) {
    method importKeypairs (line 5794) | importKeypairs (opts, regionId = this.config.regionId, callback) {
    method describeKeypair (line 5919) | describeKeypair (opts, regionId = this.config.regionId, callback) {
    method deleteKeypairs (line 6030) | deleteKeypairs (opts, regionId = this.config.regionId, callback) {
    method describeListeners (line 6149) | describeListeners (opts, regionId = this.config.regionId, callback) {
    method createListener (line 6269) | createListener (opts, regionId = this.config.regionId, callback) {
    method modifyListener (line 6403) | modifyListener (opts, regionId = this.config.regionId, callback) {
    method describeListener (line 6581) | describeListener (opts, regionId = this.config.regionId, callback) {
    method deleteListener (line 6692) | deleteListener (opts, regionId = this.config.regionId, callback) {
    method startListener (line 6806) | startListener (opts, regionId = this.config.regionId, callback) {
    method stopListener (line 6924) | stopListener (opts, regionId = this.config.regionId, callback) {
    method describeLoadBalancers (line 7049) | describeLoadBalancers (opts, regionId = this.config.regionId, callback) {
    method createLoadBalancer (line 7175) | createLoadBalancer (opts, regionId = this.config.regionId, callback) {
    method modifyLoadBalancer (line 7294) | modifyLoadBalancer (opts, regionId = this.config.regionId, callback) {
    method describeLoadBalancer (line 7412) | describeLoadBalancer (opts, regionId = this.config.regionId, callback) {
    method startLoadBalancer (line 7526) | startLoadBalancer (opts, regionId = this.config.regionId, callback) {
    method stopLoadBalancer (line 7644) | stopLoadBalancer (opts, regionId = this.config.regionId, callback) {
    method associateElasticIpLB (line 7763) | associateElasticIpLB (opts, regionId = this.config.regionId, callback) {
    method disassociateElasticIpLB (line 7890) | disassociateElasticIpLB (opts, regionId = this.config.regionId, callba...
    method describeSlbsName (line 8013) | describeSlbsName (opts, regionId = this.config.regionId, callback) {
    method describeRegiones (line 8123) | describeRegiones (opts, callback) {
    method describeCPSLBRegions (line 8217) | describeCPSLBRegions (opts, callback) {
    method describeRouteTable (line 8310) | describeRouteTable (opts, regionId = this.config.regionId, callback) {
    method describeRouteTables (line 8429) | describeRouteTables (opts, regionId = this.config.regionId, callback) {
    method describeSecondaryCidrs (line 8546) | describeSecondaryCidrs (opts, regionId = this.config.regionId, callbac...
    method createSecondaryCidr (line 8662) | createSecondaryCidr (opts, regionId = this.config.regionId, callback) {
    method deleteSecondaryCidr (line 8788) | deleteSecondaryCidr (opts, regionId = this.config.regionId, callback) {
    method describeServers (line 8910) | describeServers (opts, regionId = this.config.regionId, callback) {
    method addServers (line 9035) | addServers (opts, regionId = this.config.regionId, callback) {
    method modifyServer (line 9159) | modifyServer (opts, regionId = this.config.regionId, callback) {
    method removeServer (line 9281) | removeServer (opts, regionId = this.config.regionId, callback) {
    method describeServerGroups (line 9406) | describeServerGroups (opts, regionId = this.config.regionId, callback) {
    method createServerGroup (line 9526) | createServerGroup (opts, regionId = this.config.regionId, callback) {
    method describeServerGroup (line 9643) | describeServerGroup (opts, regionId = this.config.regionId, callback) {
    method modifyServerGroup (line 9757) | modifyServerGroup (opts, regionId = this.config.regionId, callback) {
    method deleteServerGroup (line 9872) | deleteServerGroup (opts, regionId = this.config.regionId, callback) {
    method describeBasicSubnet (line 9983) | describeBasicSubnet (opts, regionId = this.config.regionId, callback) {
    method describeSubnets (line 10105) | describeSubnets (opts, regionId = this.config.regionId, callback) {
    method createSubnet (line 10228) | createSubnet (opts, regionId = this.config.regionId, callback) {
    method assignIpv6Cidr (line 10350) | assignIpv6Cidr (opts, regionId = this.config.regionId, callback) {
    method describeSubnet (line 10468) | describeSubnet (opts, regionId = this.config.regionId, callback) {
    method modifySubnet (line 10581) | modifySubnet (opts, regionId = this.config.regionId, callback) {
    method deleteSubnet (line 10702) | deleteSubnet (opts, regionId = this.config.regionId, callback) {
    method describeVpc (line 10816) | describeVpc (opts, regionId = this.config.regionId, callback) {
    method modifyVpc (line 10930) | modifyVpc (opts, regionId = this.config.regionId, callback) {
    method deleteVpc (line 11052) | deleteVpc (opts, regionId = this.config.regionId, callback) {
    method describeVpcs (line 11173) | describeVpcs (opts, regionId = this.config.regionId, callback) {
    method createVpc (line 11290) | createVpc (opts, regionId = this.config.regionId, callback) {
    method assignIpv6Gateway (line 11411) | assignIpv6Gateway (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/cr/v1/cr.js
  method constructor (line 37) | constructor (options = {}) {
  method getAuthorizationToken (line 64) | getAuthorizationToken (opts, regionId = this.config.regionId, callback) {
  method describeAuthorizationTokens (line 189) | describeAuthorizationTokens (opts, regionId = this.config.regionId, call...
  method releaseAuthorizationToken (line 309) | releaseAuthorizationToken (opts, regionId = this.config.regionId, callba...
  method describeImages (line 439) | describeImages (opts, regionId = this.config.regionId, callback) {
  method deleteImage (line 558) | deleteImage (opts, regionId = this.config.regionId, callback) {
  method describeQuotas (line 686) | describeQuotas (opts, regionId = this.config.regionId, callback) {
  method describeRegistries (line 792) | describeRegistries (opts, regionId = this.config.regionId, callback) {
  method createRegistry (line 901) | createRegistry (opts, regionId = this.config.regionId, callback) {
  method describeRegistry (line 1019) | describeRegistry (opts, regionId = this.config.regionId, callback) {
  method deleteRegistry (line 1130) | deleteRegistry (opts, regionId = this.config.regionId, callback) {
  method checkRegistryName (line 1243) | checkRegistryName (opts, regionId = this.config.regionId, callback) {
  method createRepository (line 1365) | createRepository (opts, regionId = this.config.regionId, callback) {
  method describeRepositories (line 1493) | describeRepositories (opts, regionId = this.config.regionId, callback) {
  method deleteRepository (line 1608) | deleteRepository (opts, regionId = this.config.regionId, callback) {
  method checkRepositoryName (line 1728) | checkRepositoryName (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/datastar/v1/datastar.js
  method constructor (line 37) | constructor (options = {}) {
  method getLargeScreenData (line 64) | getLargeScreenData (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/dbaudit/v1/dbaudit.js
  class DBAUDIT (line 36) | class DBAUDIT extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeAgentList (line 60) | describeAgentList (opts, regionId = this.config.regionId, callback) {
    method installAgent (line 171) | installAgent (opts, regionId = this.config.regionId, callback) {
    method setAuditConfig (line 284) | setAuditConfig (opts, regionId = this.config.regionId, callback) {
    method describeAgentDatabases (line 401) | describeAgentDatabases (opts, regionId = this.config.regionId, callbac...
    method modyfyAgentLimits (line 523) | modyfyAgentLimits (opts, regionId = this.config.regionId, callback) {
    method uninstallAgent (line 643) | uninstallAgent (opts, regionId = this.config.regionId, callback) {
    method modyfyAuditNetCards (line 755) | modyfyAuditNetCards (opts, regionId = this.config.regionId, callback) {
    method deleteAuditFromAgent (line 876) | deleteAuditFromAgent (opts, regionId = this.config.regionId, callback) {
    method describeDatabases (line 995) | describeDatabases (opts, regionId = this.config.regionId, callback) {
    method addDatabase (line 1106) | addDatabase (opts, regionId = this.config.regionId, callback) {
    method enableAuditResponse (line 1226) | enableAuditResponse (opts, regionId = this.config.regionId, callback) {
    method disableAuditResponse (line 1344) | disableAuditResponse (opts, regionId = this.config.regionId, callback) {
    method describeDatabase (line 1463) | describeDatabase (opts, regionId = this.config.regionId, callback) {
    method updateDatabase (line 1581) | updateDatabase (opts, regionId = this.config.regionId, callback) {
    method deleteDatabase (line 1707) | deleteDatabase (opts, regionId = this.config.regionId, callback) {
    method describeInstanceList (line 1833) | describeInstanceList (opts, regionId = this.config.regionId, callback) {
    method describeInstance (line 1947) | describeInstance (opts, regionId = this.config.regionId, callback) {
    method modifyInstance (line 2059) | modifyInstance (opts, regionId = this.config.regionId, callback) {
    method describeIpWhiteList (line 2178) | describeIpWhiteList (opts, regionId = this.config.regionId, callback) {
    method addIpWhiteItem (line 2289) | addIpWhiteItem (opts, regionId = this.config.regionId, callback) {
    method deleteIpWhiteItem (line 2409) | deleteIpWhiteItem (opts, regionId = this.config.regionId, callback) {
    method describeAuditLogList (line 2537) | describeAuditLogList (opts, regionId = this.config.regionId, callback) {
    method describeAuditLog (line 2667) | describeAuditLog (opts, regionId = this.config.regionId, callback) {
    method describeMaskRuleList (line 2788) | describeMaskRuleList (opts, regionId = this.config.regionId, callback) {
    method addMaskRule (line 2912) | addMaskRule (opts, regionId = this.config.regionId, callback) {
    method modifyMask (line 3040) | modifyMask (opts, regionId = this.config.regionId, callback) {
    method deleteMask (line 3173) | deleteMask (opts, regionId = this.config.regionId, callback) {
    method describeTaskList (line 3300) | describeTaskList (opts, regionId = this.config.regionId, callback) {
    method createTask (line 3410) | createTask (opts, regionId = this.config.regionId, callback) {
    method startTask (line 3524) | startTask (opts, regionId = this.config.regionId, callback) {
    method stopTask (line 3644) | stopTask (opts, regionId = this.config.regionId, callback) {
    method describeReportList (line 3768) | describeReportList (opts, regionId = this.config.regionId, callback) {
    method modifyTask (line 3893) | modifyTask (opts, regionId = this.config.regionId, callback) {
    method deleteTask (line 4013) | deleteTask (opts, regionId = this.config.regionId, callback) {
    method downloadReport (line 4132) | downloadReport (opts, regionId = this.config.regionId, callback) {
    method deleteReport (line 4249) | deleteReport (opts, regionId = this.config.regionId, callback) {
    method describeRuleGroups (line 4368) | describeRuleGroups (opts, regionId = this.config.regionId, callback) {
    method addRuleGroup (line 4484) | addRuleGroup (opts, regionId = this.config.regionId, callback) {
    method describeRuleGroupRules (line 4610) | describeRuleGroupRules (opts, regionId = this.config.regionId, callbac...
    method addRule (line 4732) | addRule (opts, regionId = this.config.regionId, callback) {
    method deleteRuleGroup (line 4862) | deleteRuleGroup (opts, regionId = this.config.regionId, callback) {
    method describeRule (line 4985) | describeRule (opts, regionId = this.config.regionId, callback) {
    method modifyRule (line 5114) | modifyRule (opts, regionId = this.config.regionId, callback) {
    method deleteRule (line 5251) | deleteRule (opts, regionId = this.config.regionId, callback) {
    method enableRuleGroup (line 5378) | enableRuleGroup (opts, regionId = this.config.regionId, callback) {
    method disableRuleGroup (line 5500) | disableRuleGroup (opts, regionId = this.config.regionId, callback) {
    method deployRuleGroup (line 5622) | deployRuleGroup (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/dbs/v2/dbs.js
  class DBS (line 36) | class DBS extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method agentRegister (line 69) | agentRegister (opts, regionId = this.config.regionId, callback) {
    method agentTasks (line 202) | agentTasks (opts, regionId = this.config.regionId, callback) {
    method agentPlans (line 325) | agentPlans (opts, regionId = this.config.regionId, callback) {
    method reportTask (line 451) | reportTask (opts, regionId = this.config.regionId, callback) {
    method modifyTask (line 601) | modifyTask (opts, regionId = this.config.regionId, callback) {
    method backupFile (line 753) | backupFile (opts, regionId = this.config.regionId, callback) {
    method reportPrecheck (line 962) | reportPrecheck (opts, regionId = this.config.regionId, callback) {
    method describeAgents (line 1119) | describeAgents (opts, regionId = this.config.regionId, callback) {
    method describeAgentAttributes (line 1231) | describeAgentAttributes (opts, regionId = this.config.regionId, callba...
    method describeBackupPlans (line 1348) | describeBackupPlans (opts, regionId = this.config.regionId, callback) {
    method createBackupPlan (line 1463) | createBackupPlan (opts, regionId = this.config.regionId, callback) {
    method describeBackupPlanAttributes (line 1593) | describeBackupPlanAttributes (
    method deleteBackupPlan (line 1707) | deleteBackupPlan (opts, regionId = this.config.regionId, callback) {
    method describePreCheck (line 1820) | describePreCheck (opts, regionId = this.config.regionId, callback) {
    method initBackupPlan (line 1939) | initBackupPlan (opts, regionId = this.config.regionId, callback) {
    method createLogicalBackup (line 2120) | createLogicalBackup (opts, regionId = this.config.regionId, callback) {
    method createPhysicalBackup (line 2231) | createPhysicalBackup (opts, regionId = this.config.regionId, callback) {
    method describeBinlogBackups (line 2346) | describeBinlogBackups (opts, regionId = this.config.regionId, callback) {
    method describeLogicalBackups (line 2466) | describeLogicalBackups (opts, regionId = this.config.regionId, callbac...
    method describePhysicalBackups (line 2586) | describePhysicalBackups (opts, regionId = this.config.regionId, callba...
    method getShouldDelBackups (line 2704) | getShouldDelBackups (opts, regionId = this.config.regionId, callback) {
    method updateShouldDelBackups (line 2826) | updateShouldDelBackups (opts, regionId = this.config.regionId, callbac...
    method getLastBackupBinlog (line 2947) | getLastBackupBinlog (opts, regionId = this.config.regionId, callback) {
    method describeRestoreTasks (line 3061) | describeRestoreTasks (opts, regionId = this.config.regionId, callback) {
    method restoreLogicalBackup (line 3180) | restoreLogicalBackup (opts, regionId = this.config.regionId, callback) {
    method restorePhysicalBackup (line 3324) | restorePhysicalBackup (opts, regionId = this.config.regionId, callback) {
    method restoreToTime (line 3468) | restoreToTime (opts, regionId = this.config.regionId, callback) {
    method deleteBackup (line 3610) | deleteBackup (opts, regionId = this.config.regionId, callback) {
    method modifyBackupObjects (line 3728) | modifyBackupObjects (opts, regionId = this.config.regionId, callback) {
    method modifyBackupPolicy (line 3851) | modifyBackupPolicy (opts, regionId = this.config.regionId, callback) {
    method modifySourceEndpoint (line 3992) | modifySourceEndpoint (opts, regionId = this.config.regionId, callback) {
    method startBackupPlan (line 4115) | startBackupPlan (opts, regionId = this.config.regionId, callback) {
    method stopBackupPlan (line 4226) | stopBackupPlan (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/dcap/v1/dcap.js
  class DCAP (line 36) | class DCAP extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeLevelList (line 56) | describeLevelList (opts, callback) {
    method modifyLevel (line 148) | modifyLevel (opts, callback) {
    method describeCategoryList (line 255) | describeCategoryList (opts, callback) {
    method addCategory (line 346) | addCategory (opts, callback) {
    method modifyCategory (line 448) | modifyCategory (opts, callback) {
    method deleteCategory (line 555) | deleteCategory (opts, callback) {
    method describeDataTypeList (line 657) | describeDataTypeList (opts, callback) {
    method createDataType (line 772) | createDataType (opts, callback) {
    method modifyDataType (line 881) | modifyDataType (opts, callback) {
    method deleteDataType (line 995) | deleteDataType (opts, callback) {
    method describeDataSourceList (line 1106) | describeDataSourceList (opts, regionId = this.config.regionId, callbac...
    method createDataSource (line 1228) | createDataSource (opts, regionId = this.config.regionId, callback) {
    method describeDataSource (line 1342) | describeDataSource (opts, regionId = this.config.regionId, callback) {
    method updateDataSourceName (line 1453) | updateDataSourceName (opts, regionId = this.config.regionId, callback) {
    method deleteDataSource (line 1572) | deleteDataSource (opts, regionId = this.config.regionId, callback) {
    method setDataSourceKms (line 1683) | setDataSourceKms (opts, regionId = this.config.regionId, callback) {
    method generateDataSourceDDL (line 1803) | generateDataSourceDDL (opts, regionId = this.config.regionId, callback) {
    method describeDataSourceTableList (line 1917) | describeDataSourceTableList (opts, regionId = this.config.regionId, ca...
    method createDataSourceTable (line 2044) | createDataSourceTable (opts, regionId = this.config.regionId, callback) {
    method describeDataSourceTableFieldList (line 2168) | describeDataSourceTableFieldList (
    method createDataSourceTableField (line 2306) | createDataSourceTableField (opts, regionId = this.config.regionId, cal...
    method deleteDataSourceTable (line 2432) | deleteDataSourceTable (opts, regionId = this.config.regionId, callback) {
    method describeDataSourceTableField (line 2551) | describeDataSourceTableField (
    method modifyDataSourceTableField (line 2680) | modifyDataSourceTableField (opts, regionId = this.config.regionId, cal...
    method deleteDataSourceTableField (line 2813) | deleteDataSourceTableField (opts, regionId = this.config.regionId, cal...
    method modifyDataSourceTableFieldTag (line 2939) | modifyDataSourceTableFieldTag (
    method describeInstanceList (line 3075) | describeInstanceList (opts, regionId = this.config.regionId, callback) {
    method createInstance (line 3197) | createInstance (opts, regionId = this.config.regionId, callback) {
    method describeInstance (line 3311) | describeInstance (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceName (line 3422) | modifyInstanceName (opts, regionId = this.config.regionId, callback) {
    method deleteInstance (line 3541) | deleteInstance (opts, regionId = this.config.regionId, callback) {
    method setInstanceAccessKey (line 3653) | setInstanceAccessKey (opts, regionId = this.config.regionId, callback) {
    method setInstanceByPassMode (line 3781) | setInstanceByPassMode (opts, regionId = this.config.regionId, callback) {
    method describeInstanceConfig (line 3903) | describeInstanceConfig (opts, regionId = this.config.regionId, callbac...
    method describeAppList (line 4033) | describeAppList (opts, regionId = this.config.regionId, callback) {
    method describeIpWhiteList (line 4161) | describeIpWhiteList (opts, regionId = this.config.regionId, callback) {
    method addIpWhiteItem (line 4272) | addIpWhiteItem (opts, regionId = this.config.regionId, callback) {
    method deleteIpWhiteItem (line 4392) | deleteIpWhiteItem (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/deploy/v1/deploy.js
  method constructor (line 37) | constructor (options = {}) {
  method describeApps (line 63) | describeApps (opts, regionId = this.config.regionId, callback) {
  method describeApp (line 174) | describeApp (opts, regionId = this.config.regionId, callback) {
  method createDeploy (line 298) | createDeploy (opts, regionId = this.config.regionId, callback) {
  method describeDeploy (line 456) | describeDeploy (opts, regionId = this.config.regionId, callback) {
  method describeGroups (line 573) | describeGroups (opts, regionId = this.config.regionId, callback) {
  method describeGroup (line 684) | describeGroup (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/detection/v2/detection.js
  method constructor (line 37) | constructor (options = {}) {
  method describeAgentStatus (line 57) | describeAgentStatus (opts, callback) {
  method describeMetricDataAm (line 153) | describeMetricDataAm (opts, callback) {
  method createProbeTask (line 265) | createProbeTask (opts, callback) {
  method deleteProbeTask (line 381) | deleteProbeTask (opts, callback) {
  method describeProbeTask (line 501) | describeProbeTask (opts, callback) {
  method updateProbeTask (line 606) | updateProbeTask (opts, callback) {
  method describeProbeHistory (line 729) | describeProbeHistory (opts, callback) {
  method discribeProbes (line 841) | discribeProbes (opts, callback) {
  method probeTaskEnable (line 942) | probeTaskEnable (opts, callback) {
  method describeProbeTasks (line 1055) | describeProbeTasks (opts, callback) {
  method getSiteMonitor (line 1182) | getSiteMonitor (opts, callback) {
  method createSiteMonitor (line 1323) | createSiteMonitor (opts, callback) {
  method updateSiteMonitor (line 1532) | updateSiteMonitor (opts, callback) {
  method deleteSiteMonitor (line 1718) | deleteSiteMonitor (opts, callback) {
  method enableSiteMonitor (line 1811) | enableSiteMonitor (opts, callback) {
  method validateSiteMonitorAddress (line 1907) | validateSiteMonitorAddress (opts, callback) {
  method getSiteMonitorDataPoints (line 2006) | getSiteMonitorDataPoints (opts, callback) {
  method getSiteMonitorSource (line 2107) | getSiteMonitorSource (opts, callback) {
  method testSiteMonitor (line 2224) | testSiteMonitor (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/detection/v3/detection.js
  class DETECTION (line 36) | class DETECTION extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method queryTasks (line 68) | queryTasks (opts, callback) {
    method queryNetworkMonitorResults (line 209) | queryNetworkMonitorResults (opts, callback) {
    method queryProtocolMonitorResults (line 353) | queryProtocolMonitorResults (opts, callback) {
    method queryProtocolAvgMetrics (line 494) | queryProtocolAvgMetrics (opts, callback) {
    method queryNetworkAvgMetrics (line 619) | queryNetworkAvgMetrics (opts, callback) {
    method querySuccessRateMetric (line 744) | querySuccessRateMetric (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/dh/v1/dh.js
  class DH (line 36) | class DH extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeDedicatedHosts (line 69) | describeDedicatedHosts (opts, regionId = this.config.regionId, callbac...
    method allocDedicatedHosts (line 192) | allocDedicatedHosts (opts, regionId = this.config.regionId, callback) {
    method releaseDedicatedHost (line 328) | releaseDedicatedHost (opts, regionId = this.config.regionId, callback) {
    method modifyDedicatedHostAttribute (line 443) | modifyDedicatedHostAttribute (
    method describeDedicatedHostType (line 575) | describeDedicatedHostType (opts, regionId = this.config.regionId, call...
    method describeDedicatedPools (line 687) | describeDedicatedPools (opts, regionId = this.config.regionId, callbac...
    method allocDedicatedPool (line 809) | allocDedicatedPool (opts, regionId = this.config.regionId, callback) {
    method modifyDedicatedPoolAttribute (line 934) | modifyDedicatedPoolAttribute (
    method releaseDedicatedPool (line 1060) | releaseDedicatedPool (opts, regionId = this.config.regionId, callback) {
    method describeQuotas (line 1173) | describeQuotas (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/disk/v1/disk.js
  class DISK (line 36) | class DISK extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeDisks (line 78) | describeDisks (opts, regionId = this.config.regionId, callback) {
    method createDisks (line 209) | createDisks (opts, regionId = this.config.regionId, callback) {
    method describeDisk (line 345) | describeDisk (opts, regionId = this.config.regionId, callback) {
    method modifyDiskAttribute (line 457) | modifyDiskAttribute (opts, regionId = this.config.regionId, callback) {
    method deleteDisk (line 578) | deleteDisk (opts, regionId = this.config.regionId, callback) {
    method restoreDisk (line 695) | restoreDisk (opts, regionId = this.config.regionId, callback) {
    method extendDisk (line 818) | extendDisk (opts, regionId = this.config.regionId, callback) {
    method describeVolumesIgnoreServiceCode (line 958) | describeVolumesIgnoreServiceCode (
    method recoverDisk (line 1079) | recoverDisk (opts, regionId = this.config.regionId, callback) {
    method describeQuota (line 1191) | describeQuota (opts, regionId = this.config.regionId, callback) {
    method describeSnapshots (line 1312) | describeSnapshots (opts, regionId = this.config.regionId, callback) {
    method createSnapshot (line 1433) | createSnapshot (opts, regionId = this.config.regionId, callback) {
    method deleteSnapshots (line 1560) | deleteSnapshots (opts, regionId = this.config.regionId, callback) {
    method describeSnapshot (line 1668) | describeSnapshot (opts, regionId = this.config.regionId, callback) {
    method modifySnapshotAttribute (line 1781) | modifySnapshotAttribute (opts, regionId = this.config.regionId, callba...
    method deleteSnapshot (line 1904) | deleteSnapshot (opts, regionId = this.config.regionId, callback) {
    method describeSnapshotsCapacity (line 2014) | describeSnapshotsCapacity (opts, regionId = this.config.regionId, call...
    method describeSnapshotChain (line 2119) | describeSnapshotChain (opts, regionId = this.config.regionId, callback) {
    method createSnapshotPolicy (line 2246) | createSnapshotPolicy (opts, regionId = this.config.regionId, callback) {
    method updateSnapshotPolicy (line 2419) | updateSnapshotPolicy (opts, regionId = this.config.regionId, callback) {
    method deleteSnapshotPolicy (line 2579) | deleteSnapshotPolicy (opts, regionId = this.config.regionId, callback) {
    method describeSnapshotPolicies (line 2696) | describeSnapshotPolicies (opts, regionId = this.config.regionId, callb...
    method describeSnapPolices (line 2825) | describeSnapPolices (opts, regionId = this.config.regionId, callback) {
    method applySnapshotPolicies (line 2942) | applySnapshotPolicies (opts, regionId = this.config.regionId, callback) {
    method describeSnapshotPolicyDiskRelations (line 3055) | describeSnapshotPolicyDiskRelations (
    method describeSoldout (line 3179) | describeSoldout (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/dms/v1/dms.js
  class DMS (line 36) | class DMS extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method dmsConsoleCheck (line 55) | dmsConsoleCheck (opts, callback) {
    method generalCreateEvent (line 160) | generalCreateEvent (opts, regionId = this.config.regionId, callback) {
    method generalAlterEvent (line 317) | generalAlterEvent (opts, regionId = this.config.regionId, callback) {
    method generalDropEvent (line 466) | generalDropEvent (opts, regionId = this.config.regionId, callback) {
    method eventInfo (line 593) | eventInfo (opts, regionId = this.config.regionId, callback) {
    method createImportFileTask (line 710) | createImportFileTask (opts, regionId = this.config.regionId, callback) {
    method uploadImportFileTask (line 830) | uploadImportFileTask (opts, regionId = this.config.regionId, callback) {
    method createDataFlow (line 955) | createDataFlow (opts, regionId = this.config.regionId, callback) {
    method createStructureFlow (line 1099) | createStructureFlow (opts, regionId = this.config.regionId, callback) {
    method createExportFlow (line 1240) | createExportFlow (opts, regionId = this.config.regionId, callback) {
    method startFlow (line 1392) | startFlow (opts, regionId = this.config.regionId, callback) {
    method generalCreateFunction (line 1511) | generalCreateFunction (opts, regionId = this.config.regionId, callback) {
    method generalAlterFunction (line 1665) | generalAlterFunction (opts, regionId = this.config.regionId, callback) {
    method generalDropFunction (line 1817) | generalDropFunction (opts, regionId = this.config.regionId, callback) {
    method functionList (line 1933) | functionList (opts, regionId = this.config.regionId, callback) {
    method functionInfo (line 2061) | functionInfo (opts, regionId = this.config.regionId, callback) {
    method functionInvoke (line 2179) | functionInvoke (opts, regionId = this.config.regionId, callback) {
    method generalCreateTableSql (line 2302) | generalCreateTableSql (opts, regionId = this.config.regionId, callback) {
    method generalAlterTableSql (line 2433) | generalAlterTableSql (opts, regionId = this.config.regionId, callback) {
    method historySql (line 2559) | historySql (opts, regionId = this.config.regionId, callback) {
    method historyImportData (line 2677) | historyImportData (opts, regionId = this.config.regionId, callback) {
    method queryInstance (line 2805) | queryInstance (opts, regionId = this.config.regionId, callback) {
    method open (line 2933) | open (opts, regionId = this.config.regionId, callback) {
    method login (line 3044) | login (opts, regionId = this.config.regionId, callback) {
    method logout (line 3167) | logout (opts, regionId = this.config.regionId, callback) {
    method queryTypeInstance (line 3278) | queryTypeInstance (opts, regionId = this.config.regionId, callback) {
    method checkInstance (line 3385) | checkInstance (opts, regionId = this.config.regionId, callback) {
    method tableInfo (line 3498) | tableInfo (opts, regionId = this.config.regionId, callback) {
    method databaseList (line 3612) | databaseList (opts, regionId = this.config.regionId, callback) {
    method tableList (line 3721) | tableList (opts, regionId = this.config.regionId, callback) {
    method sqlTableInfo (line 3834) | sqlTableInfo (opts, regionId = this.config.regionId, callback) {
    method getDmsDomain (line 3947) | getDmsDomain (opts, regionId = this.config.regionId, callback) {
    method getDmsDomains (line 4049) | getDmsDomains (opts, callback) {
    method queryOperationType (line 4142) | queryOperationType (opts, regionId = this.config.regionId, callback) {
    method queryOperationLog (line 4255) | queryOperationLog (opts, regionId = this.config.regionId, callback) {
    method operationDetail (line 4387) | operationDetail (opts, regionId = this.config.regionId, callback) {
    method queryPersonalSqls (line 4501) | queryPersonalSqls (opts, regionId = this.config.regionId, callback) {
    method addPersonalSql (line 4617) | addPersonalSql (opts, regionId = this.config.regionId, callback) {
    method deletePersonalSql (line 4730) | deletePersonalSql (opts, regionId = this.config.regionId, callback) {
    method updatePersonalSql (line 4839) | updatePersonalSql (opts, regionId = this.config.regionId, callback) {
    method generalCreateProcedure (line 4962) | generalCreateProcedure (opts, regionId = this.config.regionId, callbac...
    method generalAlterProcedure (line 5111) | generalAlterProcedure (opts, regionId = this.config.regionId, callback) {
    method generalDropProcedure (line 5260) | generalDropProcedure (opts, regionId = this.config.regionId, callback) {
    method procedureList (line 5376) | procedureList (opts, regionId = this.config.regionId, callback) {
    method procedureInfo (line 5501) | procedureInfo (opts, regionId = this.config.regionId, callback) {
    method procedureInvoke (line 5618) | procedureInvoke (opts, regionId = this.config.regionId, callback) {
    method programList (line 5741) | programList (opts, regionId = this.config.regionId, callback) {
    method exeProgram (line 5856) | exeProgram (opts, regionId = this.config.regionId, callback) {
    method consoleExplain (line 5972) | consoleExplain (opts, regionId = this.config.regionId, callback) {
    method consoleSql (line 6088) | consoleSql (opts, regionId = this.config.regionId, callback) {
    method consoleGeneralData (line 6205) | consoleGeneralData (opts, regionId = this.config.regionId, callback) {
    method formatSql (line 6323) | formatSql (opts, regionId = this.config.regionId, callback) {
    method createTableBatch (line 6436) | createTableBatch (opts, regionId = this.config.regionId, callback) {
    method getCreateTableBatchSql (line 6552) | getCreateTableBatchSql (opts, regionId = this.config.regionId, callbac...
    method createOnlineSqlTask (line 6670) | createOnlineSqlTask (opts, regionId = this.config.regionId, callback) {
    method startOnlineSqlTask (line 6789) | startOnlineSqlTask (opts, regionId = this.config.regionId, callback) {
    method suspendOnlineSqlTask (line 6896) | suspendOnlineSqlTask (opts, regionId = this.config.regionId, callback) {
    method restartOnlineSqlTask (line 7003) | restartOnlineSqlTask (opts, regionId = this.config.regionId, callback) {
    method onlineSqlTaskQuery (line 7125) | onlineSqlTaskQuery (opts, regionId = this.config.regionId, callback) {
    method onlineSubSqlTaskQuery (line 7233) | onlineSubSqlTaskQuery (opts, regionId = this.config.regionId, callback) {
    method onlineProxySubTaskQuery (line 7342) | onlineProxySubTaskQuery (opts, regionId = this.config.regionId, callba...
    method generalCreateTrigger (line 7459) | generalCreateTrigger (opts, regionId = this.config.regionId, callback) {
    method generalAlterTrigger (line 7592) | generalAlterTrigger (opts, regionId = this.config.regionId, callback) {
    method generalDropTrigger (line 7726) | generalDropTrigger (opts, regionId = this.config.regionId, callback) {
    method triggerList (line 7842) | triggerList (opts, regionId = this.config.regionId, callback) {
    method triggerInfo (line 7963) | triggerInfo (opts, regionId = this.config.regionId, callback) {
    method queryUserList (line 8083) | queryUserList (opts, callback) {
    method queryUserNotSync (line 8201) | queryUserNotSync (opts, callback) {
    method syncSubUser (line 8305) | syncSubUser (opts, callback) {
    method updateUserInfo (line 8406) | updateUserInfo (opts, callback) {
    method enableUser (line 8510) | enableUser (opts, callback) {
    method deleteUser (line 8608) | deleteUser (opts, callback) {
    method getUserInfo (line 8711) | getUserInfo (opts, callback) {
    method queryPrivilegeList (line 8811) | queryPrivilegeList (opts, callback) {
    method queryPrivilegeSelfList (line 8932) | queryPrivilegeSelfList (opts, callback) {
    method releasePrivilege (line 9042) | releasePrivilege (opts, callback) {
    method authPrivilege (line 9140) | authPrivilege (opts, callback) {
    method modifyPrivilegeExpireDate (line 9249) | modifyPrivilegeExpireDate (opts, callback) {
    method generalCreateView (line 9356) | generalCreateView (opts, regionId = this.config.regionId, callback) {
    method generalAlterView (line 9493) | generalAlterView (opts, regionId = this.config.regionId, callback) {
    method generalDropView (line 9627) | generalDropView (opts, regionId = this.config.regionId, callback) {
    method viewInfo (line 9749) | viewInfo (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/domain/v1/domain.js
  class DOMAIN (line 36) | class DOMAIN extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method checkDomain (line 57) | checkDomain (opts, regionId = this.config.regionId, callback) {
    method queryWhoisInfo (line 170) | queryWhoisInfo (opts, regionId = this.config.regionId, callback) {
    method domainInfo (line 283) | domainInfo (opts, regionId = this.config.regionId, callback) {
    method createDomain (line 400) | createDomain (opts, regionId = this.config.regionId, callback) {
    method renewDomain (line 533) | renewDomain (opts, regionId = this.config.regionId, callback) {
    method transferinDomainState (line 655) | transferinDomainState (opts, regionId = this.config.regionId, callback) {
    method transferinDomain (line 772) | transferinDomain (opts, regionId = this.config.regionId, callback) {
    method modifyDns (line 902) | modifyDns (opts, regionId = this.config.regionId, callback) {
    method domainTemplateAssigned (line 1019) | domainTemplateAssigned (opts, regionId = this.config.regionId, callbac...
    method domainLock (line 1140) | domainLock (opts, regionId = this.config.regionId, callback) {
    method domainUnLock (line 1253) | domainUnLock (opts, regionId = this.config.regionId, callback) {
    method getDomainTransferOutPassWord (line 1367) | getDomainTransferOutPassWord (
    method createTemplate (line 1501) | createTemplate (opts, regionId = this.config.regionId, callback) {
    method queryTemplateInfo (line 1660) | queryTemplateInfo (opts, regionId = this.config.regionId, callback) {
    method modifyTemplateInfo (line 1784) | modifyTemplateInfo (opts, regionId = this.config.regionId, callback) {
    method deleteTemplate (line 1935) | deleteTemplate (opts, regionId = this.config.regionId, callback) {
    method certificateTemplateState (line 2047) | certificateTemplateState (opts, regionId = this.config.regionId, callb...
    method certificateTemplate (line 2181) | certificateTemplate (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/domainservice/v2/domainservice.js
  method constructor (line 37) | constructor (options = {}) {
  method describeActionLog (line 66) | describeActionLog (opts, regionId = this.config.regionId, callback) {
  method describeDomains (line 221) | describeDomains (opts, regionId = this.config.regionId, callback) {
  method createDomain (line 359) | createDomain (opts, regionId = this.config.regionId, callback) {
  method modifyDomain (line 496) | modifyDomain (opts, regionId = this.config.regionId, callback) {
  method deleteDomain (line 615) | deleteDomain (opts, regionId = this.config.regionId, callback) {
  method describeDomainQueryCount (line 730) | describeDomainQueryCount (opts, regionId = this.config.regionId, callbac...
  method describeDomainQueryTraffic (line 870) | describeDomainQueryTraffic (opts, regionId = this.config.regionId, callb...
  method describeResourceRecord (line 1013) | describeResourceRecord (opts, regionId = this.config.regionId, callback) {
  method createResourceRecord (line 1134) | createResourceRecord (opts, regionId = this.config.regionId, callback) {
  method modifyResourceRecord (line 1255) | modifyResourceRecord (opts, regionId = this.config.regionId, callback) {
  method deleteResourceRecord (line 1381) | deleteResourceRecord (opts, regionId = this.config.regionId, callback) {
  method modifyResourceRecordStatus (line 1499) | modifyResourceRecordStatus (opts, regionId = this.config.regionId, callb...
  method describeViewTree (line 1630) | describeViewTree (opts, regionId = this.config.regionId, callback) {
  method batchSetResourceRecords (line 1763) | batchSetResourceRecords (opts, regionId = this.config.regionId, callback) {
  method describeUserView (line 1885) | describeUserView (opts, regionId = this.config.regionId, callback) {
  method createUserView (line 2024) | createUserView (opts, regionId = this.config.regionId, callback) {
  method deleteUserView (line 2144) | deleteUserView (opts, regionId = this.config.regionId, callback) {
  method describeUserViewIP (line 2271) | describeUserViewIP (opts, regionId = this.config.regionId, callback) {
  method createUserViewIP (line 2409) | createUserViewIP (opts, regionId = this.config.regionId, callback) {
  method deleteUserViewIP (line 2529) | deleteUserViewIP (opts, regionId = this.config.regionId, callback) {
  method describeMonitor (line 2655) | describeMonitor (opts, regionId = this.config.regionId, callback) {
  method createMonitor (line 2775) | createMonitor (opts, regionId = this.config.regionId, callback) {
  method modifyMonitor (line 2895) | modifyMonitor (opts, regionId = this.config.regionId, callback) {
  method describeMonitorTarget (line 3016) | describeMonitorTarget (opts, regionId = this.config.regionId, callback) {
  method createMonitorTarget (line 3136) | createMonitorTarget (opts, regionId = this.config.regionId, callback) {
  method modifyMonitorStatus (line 3261) | modifyMonitorStatus (opts, regionId = this.config.regionId, callback) {
  method deleteMonitor (line 3390) | deleteMonitor (opts, regionId = this.config.regionId, callback) {
  method describeMonitorAlarm (line 3513) | describeMonitorAlarm (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/dts/v2/dts.js
  class DTS (line 36) | class DTS extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method batchOperateTasks (line 59) | batchOperateTasks (opts, regionId = this.config.regionId, callback) {
    method describeTransmissionTasks (line 176) | describeTransmissionTasks (opts, regionId = this.config.regionId, call...
    method createTransmissionTask (line 299) | createTransmissionTask (opts, regionId = this.config.regionId, callbac...
    method describeTransmissionTaskAttributes (line 449) | describeTransmissionTaskAttributes (
    method deleteTransmissionTask (line 563) | deleteTransmissionTask (opts, regionId = this.config.regionId, callbac...
    method describePreCheckResult (line 675) | describePreCheckResult (opts, regionId = this.config.regionId, callbac...
    method preCheckTransmissionTask (line 785) | preCheckTransmissionTask (opts, regionId = this.config.regionId, callb...
    method skipPreCheckItem (line 899) | skipPreCheckItem (opts, regionId = this.config.regionId, callback) {
    method configureTransmissionTask (line 1026) | configureTransmissionTask (opts, regionId = this.config.regionId, call...
    method startTransmissionTask (line 1193) | startTransmissionTask (opts, regionId = this.config.regionId, callback) {
    method stopTransmissionTask (line 1304) | stopTransmissionTask (opts, regionId = this.config.regionId, callback) {
    method suspendTransmissionTask (line 1415) | suspendTransmissionTask (opts, regionId = this.config.regionId, callba...
    method resumeTransmissionTask (line 1526) | resumeTransmissionTask (opts, regionId = this.config.regionId, callbac...
    method modifyTransmissionTaskName (line 1638) | modifyTransmissionTaskName (opts, regionId = this.config.regionId, cal...
    method describeTransmissionObject (line 1753) | describeTransmissionObject (opts, regionId = this.config.regionId, cal...
    method describeTransmissionLog (line 1865) | describeTransmissionLog (opts, regionId = this.config.regionId, callba...
    method connectivityTest (line 1977) | connectivityTest (opts, regionId = this.config.regionId, callback) {
    method listCloudInstances (line 2098) | listCloudInstances (opts, regionId = this.config.regionId, callback) {
    method getCloudInstance (line 2214) | getCloudInstance (opts, regionId = this.config.regionId, callback) {
    method listSchemas (line 2337) | listSchemas (opts, regionId = this.config.regionId, callback) {
    method listTables (line 2467) | listTables (opts, regionId = this.config.regionId, callback) {
    method listTopics (line 2598) | listTopics (opts, regionId = this.config.regionId, callback) {
    method getTable (line 2727) | getTable (opts, regionId = this.config.regionId, callback) {
    method listInstanceClasses (line 2865) | listInstanceClasses (opts, regionId = this.config.regionId, callback) {
    method listTaskProgress (line 2980) | listTaskProgress (opts, regionId = this.config.regionId, callback) {
    method getTaskProgress (line 3092) | getTaskProgress (opts, regionId = this.config.regionId, callback) {
    method listProcesses (line 3207) | listProcesses (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/edcps/v1/edcps.js
  class EDCPS (line 36) | class EDCPS extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeAliasIps (line 66) | describeAliasIps (opts, regionId = this.config.regionId, callback) {
    method createAliasIp (line 190) | createAliasIp (opts, regionId = this.config.regionId, callback) {
    method deleteAliasIp (line 310) | deleteAliasIp (opts, regionId = this.config.regionId, callback) {
    method describeBandwidthPackages (line 433) | describeBandwidthPackages (opts, regionId = this.config.regionId, call...
    method applyBandwidthPackages (line 551) | applyBandwidthPackages (opts, regionId = this.config.regionId, callbac...
    method describeBandwidthPackage (line 674) | describeBandwidthPackage (opts, regionId = this.config.regionId, callb...
    method modifyBandwidthPackage (line 793) | modifyBandwidthPackage (opts, regionId = this.config.regionId, callbac...
    method deleteBandwidthPackage (line 918) | deleteBandwidthPackage (opts, regionId = this.config.regionId, callbac...
    method modifyBandwidthPackageBandwidth (line 1041) | modifyBandwidthPackageBandwidth (
    method addBandwidthPackageIp (line 1182) | addBandwidthPackageIp (opts, regionId = this.config.regionId, callback) {
    method removeBandwidthPackageIp (line 1308) | removeBandwidthPackageIp (opts, regionId = this.config.regionId, callb...
    method describeBandwidthPackageStock (line 1435) | describeBandwidthPackageStock (
    method describeElasticIps (line 1558) | describeElasticIps (opts, regionId = this.config.regionId, callback) {
    method applyElasticIps (line 1691) | applyElasticIps (opts, regionId = this.config.regionId, callback) {
    method describeElasticIp (line 1808) | describeElasticIp (opts, regionId = this.config.regionId, callback) {
    method deleteelasticIp (line 1923) | deleteelasticIp (opts, regionId = this.config.regionId, callback) {
    method modifyElasticIpBandwidth (line 2043) | modifyElasticIpBandwidth (opts, regionId = this.config.regionId, callb...
    method describeElasticIpStock (line 2174) | describeElasticIpStock (opts, regionId = this.config.regionId, callbac...
    method describeDeviceTypes (line 2278) | describeDeviceTypes (opts, regionId = this.config.regionId, callback) {
    method describeOS (line 2386) | describeOS (opts, regionId = this.config.regionId, callback) {
    method describeDeviceRaids (line 2503) | describeDeviceRaids (opts, regionId = this.config.regionId, callback) {
    method describeDeviceStock (line 2619) | describeDeviceStock (opts, regionId = this.config.regionId, callback) {
    method describeInstance (line 2726) | describeInstance (opts, regionId = this.config.regionId, callback) {
    method deleteInstance (line 2842) | deleteInstance (opts, regionId = this.config.regionId, callback) {
    method describeInstances (line 2975) | describeInstances (opts, regionId = this.config.regionId, callback) {
    method createInstances (line 3139) | createInstances (opts, regionId = this.config.regionId, callback) {
    method describeInstanceName (line 3256) | describeInstanceName (opts, regionId = this.config.regionId, callback) {
    method modifyInstance (line 3370) | modifyInstance (opts, regionId = this.config.regionId, callback) {
    method describeInstanceRaid (line 3491) | describeInstanceRaid (opts, regionId = this.config.regionId, callback) {
    method describeInstanceStatus (line 3605) | describeInstanceStatus (opts, regionId = this.config.regionId, callbac...
    method restartInstance (line 3719) | restartInstance (opts, regionId = this.config.regionId, callback) {
    method stopInstance (line 3837) | stopInstance (opts, regionId = this.config.regionId, callback) {
    method startInstance (line 3955) | startInstance (opts, regionId = this.config.regionId, callback) {
    method reinstallInstance (line 4076) | reinstallInstance (opts, regionId = this.config.regionId, callback) {
    method associateElasticIp (line 4206) | associateElasticIp (opts, regionId = this.config.regionId, callback) {
    method disassociateElasticIp (line 4340) | disassociateElasticIp (opts, regionId = this.config.regionId, callback) {
    method resetPassword (line 4468) | resetPassword (opts, regionId = this.config.regionId, callback) {
    method describeAvailablePrivateIp (line 4592) | describeAvailablePrivateIp (opts, regionId = this.config.regionId, cal...
    method describeKeypairs (line 4718) | describeKeypairs (opts, regionId = this.config.regionId, callback) {
    method createKeypairs (line 4842) | createKeypairs (opts, regionId = this.config.regionId, callback) {
    method importKeypairs (line 4969) | importKeypairs (opts, regionId = this.config.regionId, callback) {
    method describeKeypair (line 5094) | describeKeypair (opts, regionId = this.config.regionId, callback) {
    method deleteKeypairs (line 5205) | deleteKeypairs (opts, regionId = this.config.regionId, callback) {
    method describeLineTypes (line 5315) | describeLineTypes (opts, regionId = this.config.regionId, callback) {
    method describeEdCPSRegions (line 5417) | describeEdCPSRegions (opts, callback) {
    method describeSecondaryCidrs (line 5510) | describeSecondaryCidrs (opts, regionId = this.config.regionId, callbac...
    method createSecondaryCidr (line 5626) | createSecondaryCidr (opts, regionId = this.config.regionId, callback) {
    method deleteSecondaryCidr (line 5752) | deleteSecondaryCidr (opts, regionId = this.config.regionId, callback) {
    method describeSubnets (line 5875) | describeSubnets (opts, regionId = this.config.regionId, callback) {
    method createSubnet (line 5998) | createSubnet (opts, regionId = this.config.regionId, callback) {
    method describeSubnet (line 6115) | describeSubnet (opts, regionId = this.config.regionId, callback) {
    method modifySubnet (line 6228) | modifySubnet (opts, regionId = this.config.regionId, callback) {
    method deleteSubnet (line 6349) | deleteSubnet (opts, regionId = this.config.regionId, callback) {
    method describeVpc (line 6463) | describeVpc (opts, regionId = this.config.regionId, callback) {
    method modifyVpc (line 6577) | modifyVpc (opts, regionId = this.config.regionId, callback) {
    method deleteVpc (line 6699) | deleteVpc (opts, regionId = this.config.regionId, callback) {
    method describeVpcs (line 6820) | describeVpcs (opts, regionId = this.config.regionId, callback) {
    method createVpc (line 6937) | createVpc (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/eid/v1/eid.js
  class EID (line 36) | class EID extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method eidScore (line 56) | eidScore (opts, callback) {
    method vttok (line 151) | vttok (opts, callback) {
    method device (line 246) | device (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/elite/v1/elite.js
  method constructor (line 37) | constructor (options = {}) {
  method jdxQueryDeliveryInfo (line 59) | jdxQueryDeliveryInfo (opts, regionId = this.config.regionId, callback) {
  method jdxReportOrder (line 173) | jdxReportOrder (opts, regionId = this.config.regionId, callback) {
  method jdxCreateOrder (line 289) | jdxCreateOrder (opts, regionId = this.config.regionId, callback) {
  method jdxQueryPrice (line 405) | jdxQueryPrice (opts, regionId = this.config.regionId, callback) {
  method jdxQueryProduct (line 522) | jdxQueryProduct (opts, regionId = this.config.regionId, callback) {
  method listSaleService (line 650) | listSaleService (opts, regionId = this.config.regionId, callback) {
  method getSaleServiceByDeliverNumber (line 785) | getSaleServiceByDeliverNumber (
  method confirmSaleServiceDelivery (line 903) | confirmSaleServiceDelivery (opts, regionId = this.config.regionId, callb...
  method getStoreService (line 1027) | getStoreService (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/es/v1/es.js
  method constructor (line 37) | constructor (options = {}) {
  method disableDicts (line 57) | disableDicts (opts, regionId = this.config.regionId, callback) {
  method describeInstances (line 179) | describeInstances (opts, regionId = this.config.regionId, callback) {
  method createInstance (line 296) | createInstance (opts, regionId = this.config.regionId, callback) {
  method describeInstance (line 413) | describeInstance (opts, regionId = this.config.regionId, callback) {
  method deleteInstance (line 525) | deleteInstance (opts, regionId = this.config.regionId, callback) {
  method modifyInstanceSpec (line 645) | modifyInstanceSpec (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/fc/v1/fc.js
  class FC (line 36) | class FC extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeFunctions (line 64) | describeFunctions (opts, regionId = this.config.regionId, callback) {
    method createFunction (line 185) | createFunction (opts, regionId = this.config.regionId, callback) {
    method describeFunction (line 310) | describeFunction (opts, regionId = this.config.regionId, callback) {
    method updateFunction (line 437) | updateFunction (opts, regionId = this.config.regionId, callback) {
    method deleteFunction (line 584) | deleteFunction (opts, regionId = this.config.regionId, callback) {
    method describeFunctionCode (line 707) | describeFunctionCode (opts, regionId = this.config.regionId, callback) {
    method describeRuntimes (line 825) | describeRuntimes (opts, regionId = this.config.regionId, callback) {
    method invokeFunction (line 937) | invokeFunction (opts, regionId = this.config.regionId, callback) {
    method describeInstanceTypes (line 1065) | describeInstanceTypes (opts, regionId = this.config.regionId, callback) {
    method describeServices (line 1183) | describeServices (opts, regionId = this.config.regionId, callback) {
    method createService (line 1296) | createService (opts, regionId = this.config.regionId, callback) {
    method describeService (line 1414) | describeService (opts, regionId = this.config.regionId, callback) {
    method updateService (line 1527) | updateService (opts, regionId = this.config.regionId, callback) {
    method deleteService (line 1645) | deleteService (opts, regionId = this.config.regionId, callback) {
    method describeTriggers (line 1759) | describeTriggers (opts, regionId = this.config.regionId, callback) {
    method createTrigger (line 1887) | createTrigger (opts, regionId = this.config.regionId, callback) {
    method describeTrigger (line 2016) | describeTrigger (opts, regionId = this.config.regionId, callback) {
    method updateTrigger (line 2144) | updateTrigger (opts, regionId = this.config.regionId, callback) {
    method deleteTrigger (line 2279) | deleteTrigger (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/flowlog/v1/flowlog.js
  class FLOWLOG (line 36) | class FLOWLOG extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeFlowLogs (line 66) | describeFlowLogs (opts, regionId = this.config.regionId, callback) {
    method createFlowLog (line 194) | createFlowLog (opts, regionId = this.config.regionId, callback) {
    method describeFlowLog (line 350) | describeFlowLog (opts, regionId = this.config.regionId, callback) {
    method modifyFlowLog (line 463) | modifyFlowLog (opts, regionId = this.config.regionId, callback) {
    method deleteFlowLog (line 583) | deleteFlowLog (opts, regionId = this.config.regionId, callback) {
    method startFlowLog (line 693) | startFlowLog (opts, regionId = this.config.regionId, callback) {
    method stopFlowLog (line 804) | stopFlowLog (opts, regionId = this.config.regionId, callback) {
    method addCollectResources (line 916) | addCollectResources (opts, regionId = this.config.regionId, callback) {
    method removeCollectResources (line 1031) | removeCollectResources (opts, regionId = this.config.regionId, callbac...
    method describeCollectResources (line 1157) | describeCollectResources (opts, regionId = this.config.regionId, callb...
    method describeQuota (line 1281) | describeQuota (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/function/v1/function.js
  method constructor (line 37) | constructor (options = {}) {
  method listAlias (line 57) | listAlias (opts, regionId = this.config.regionId, callback) {
  method createAlias (line 171) | createAlias (opts, regionId = this.config.regionId, callback) {
  method getAlias (line 298) | getAlias (opts, regionId = this.config.regionId, callback) {
  method updateAlias (line 418) | updateAlias (opts, regionId = this.config.regionId, callback) {
  method deleteAlias (line 552) | deleteAlias (opts, regionId = this.config.regionId, callback) {
  method listFunction (line 674) | listFunction (opts, regionId = this.config.regionId, callback) {
  method createFunction (line 806) | createFunction (opts, regionId = this.config.regionId, callback) {
  method getFunction (line 950) | getFunction (opts, regionId = this.config.regionId, callback) {
  method updateFunction (line 1073) | updateFunction (opts, regionId = this.config.regionId, callback) {
  method deleteFunction (line 1220) | deleteFunction (opts, regionId = this.config.regionId, callback) {
  method invoke (line 1333) | invoke (opts, regionId = this.config.regionId, callback) {
  method asyncInvoke (line 1460) | asyncInvoke (opts, regionId = this.config.regionId, callback) {
  method getTrigger (line 1588) | getTrigger (opts, regionId = this.config.regionId, callback) {
  method listVersion (line 1713) | listVersion (opts, regionId = this.config.regionId, callback) {
  method createVersion (line 1825) | createVersion (opts, regionId = this.config.regionId, callback) {
  method getVersion (line 1941) | getVersion (opts, regionId = this.config.regionId, callback) {
  method deleteVersion (line 2058) | deleteVersion (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/gcs/v1/gcs.js
  class GCS (line 36) | class GCS extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeArts (line 62) | describeArts (opts, callback) {
    method describeArt (line 161) | describeArt (opts, callback) {
    method modifyInstance (line 265) | modifyInstance (opts, regionId = this.config.regionId, callback) {
    method createInstances (line 394) | createInstances (opts, regionId = this.config.regionId, callback) {
    method describeInstances (line 524) | describeInstances (opts, regionId = this.config.regionId, callback) {
    method describeInstance (line 656) | describeInstance (opts, regionId = this.config.regionId, callback) {
    method deleteInstance (line 766) | deleteInstance (opts, regionId = this.config.regionId, callback) {
    method startInstance (line 879) | startInstance (opts, regionId = this.config.regionId, callback) {
    method stopInstance (line 1000) | stopInstance (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceSpec (line 1124) | modifyInstanceSpec (opts, regionId = this.config.regionId, callback) {
    method stopInstanceTimer (line 1253) | stopInstanceTimer (opts, regionId = this.config.regionId, callback) {
    method stopInstanceTimerCancle (line 1381) | stopInstanceTimerCancle (opts, regionId = this.config.regionId, callba...
    method modifyInstanceSecret (line 1503) | modifyInstanceSecret (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceImage (line 1640) | modifyInstanceImage (opts, regionId = this.config.regionId, callback) {
    method describeOrderInfos (line 1769) | describeOrderInfos (opts, regionId = this.config.regionId, callback) {
    method describeRegions (line 1887) | describeRegions (opts, callback) {
    method describeStock (line 1983) | describeStock (opts, regionId = this.config.regionId, callback) {
    method modifyNetDisk (line 2093) | modifyNetDisk (opts, regionId = this.config.regionId, callback) {
    method describeNetDisk (line 2215) | describeNetDisk (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/httpdns/v1/httpdns.js
  method constructor (line 37) | constructor (options = {}) {
  method getAccountId (line 56) | getAccountId (opts, regionId = this.config.regionId, callback) {
  method createAccount (line 159) | createAccount (opts, regionId = this.config.regionId, callback) {
  method getAccountInfo (line 263) | getAccountInfo (opts, regionId = this.config.regionId, callback) {
  method operateKey (line 367) | operateKey (opts, regionId = this.config.regionId, callback) {
  method getDomains (line 480) | getDomains (opts, regionId = this.config.regionId, callback) {
  method addDomains (line 605) | addDomains (opts, regionId = this.config.regionId, callback) {
  method delDomains (line 718) | delDomains (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/hufu/v1/hufu.js
  class HUFU (line 36) | class HUFU extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method deploy (line 63) | deploy (opts, callback) {
    method describeDeployment (line 201) | describeDeployment (opts, callback) {
    method encrypt (line 306) | encrypt (opts, callback) {
    method isEncryptData (line 402) | isEncryptData (opts, callback) {
    method queryAccessLog (line 507) | queryAccessLog (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/iam/v1/iam.js
  class IAM (line 36) | class IAM extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method enableSubUserAccessKey (line 57) | enableSubUserAccessKey (opts, callback) {
    method disableSubUserAccessKey (line 164) | disableSubUserAccessKey (opts, callback) {
    method deleteSubUserAccessKey (line 271) | deleteSubUserAccessKey (opts, callback) {
    method createGroup (line 378) | createGroup (opts, callback) {
    method describeGroup (line 480) | describeGroup (opts, callback) {
    method updateGroup (line 579) | updateGroup (opts, callback) {
    method deleteGroup (line 686) | deleteGroup (opts, callback) {
    method describeGroupSubUsers (line 788) | describeGroupSubUsers (opts, callback) {
    method describeGroups (line 897) | describeGroups (opts, callback) {
    method describeAttachedGroupPolicies (line 1002) | describeAttachedGroupPolicies (opts, callback) {
    method describeAttachedGroupPoliciesScope (line 1104) | describeAttachedGroupPoliciesScope (opts, callback) {
    method detachGroupPolicy (line 1219) | detachGroupPolicy (opts, callback) {
    method attachGroupPolicy (line 1337) | attachGroupPolicy (opts, callback) {
    method removeSubUserFromGroup (line 1451) | removeSubUserFromGroup (opts, callback) {
    method addSubUserToGroup (line 1558) | addSubUserToGroup (opts, callback) {
    method createVirtualMFADevice (line 1666) | createVirtualMFADevice (opts, callback) {
    method describeVirtualMFA (line 1762) | describeVirtualMFA (opts, callback) {
    method bindMFADevice (line 1858) | bindMFADevice (opts, callback) {
    method bindMFADeviceByOneCode (line 1983) | bindMFADeviceByOneCode (opts, callback) {
    method unbindMFADevice (line 2093) | unbindMFADevice (opts, callback) {
    method addOrganizationUserRelation (line 2188) | addOrganizationUserRelation (opts, callback) {
    method createPermission (line 2305) | createPermission (opts, regionId = this.config.regionId, callback) {
    method describePermissionDetail (line 2425) | describePermissionDetail (opts, regionId = this.config.regionId, callb...
    method updatePermission (line 2536) | updatePermission (opts, regionId = this.config.regionId, callback) {
    method describePermissions (line 2666) | describePermissions (opts, regionId = this.config.regionId, callback) {
    method describeSubUserPermissions (line 2801) | describeSubUserPermissions (opts, regionId = this.config.regionId, cal...
    method addPermissionsToSubUser (line 2928) | addPermissionsToSubUser (opts, regionId = this.config.regionId, callba...
    method removePermissionOfSubUser (line 3054) | removePermissionOfSubUser (opts, regionId = this.config.regionId, call...
    method createPolicy (line 3172) | createPolicy (opts, callback) {
    method describePolicy (line 3275) | describePolicy (opts, callback) {
    method updatePolicy (line 3374) | updatePolicy (opts, callback) {
    method deletePolicy (line 3481) | deletePolicy (opts, callback) {
    method updatePolicyDescription (line 3580) | updatePolicyDescription (opts, callback) {
    method describePolicies (line 3699) | describePolicies (opts, callback) {
    method createRole (line 3808) | createRole (opts, callback) {
    method copyRole (line 3910) | copyRole (opts, callback) {
    method describeRole (line 4012) | describeRole (opts, callback) {
    method deleteRole (line 4110) | deleteRole (opts, callback) {
    method updateAssumeRolePolicy (line 4209) | updateAssumeRolePolicy (opts, callback) {
    method describeRoles (line 4328) | describeRoles (opts, callback) {
    method attachRolePolicy (line 4437) | attachRolePolicy (opts, callback) {
    method detachRolePolicy (line 4553) | detachRolePolicy (opts, callback) {
    method describeRolePolicies (line 4674) | describeRolePolicies (opts, callback) {
    method describeRolePoliciesScope (line 4793) | describeRolePoliciesScope (opts, callback) {
    method createSubUser (line 4908) | createSubUser (opts, callback) {
    method describeSubUser (line 5016) | describeSubUser (opts, callback) {
    method updateSubUser (line 5116) | updateSubUser (opts, callback) {
    method deleteSubUser (line 5229) | deleteSubUser (opts, callback) {
    method describeSubUsers (line 5337) | describeSubUsers (opts, callback) {
    method describeSubUserGroups (line 5457) | describeSubUserGroups (opts, callback) {
    method describeAttachedSubUserPolicies (line 5557) | describeAttachedSubUserPolicies (opts, callback) {
    method describeAttachedSubUserPoliciesScope (line 5659) | describeAttachedSubUserPoliciesScope (opts, callback) {
    method detachSubUserPolicy (line 5774) | detachSubUserPolicy (opts, callback) {
    method attachSubUserPolicy (line 5892) | attachSubUserPolicy (opts, callback) {
    method createSubUserInner (line 6008) | createSubUserInner (opts, callback) {
    method describeUserAccessKeys (line 6118) | describeUserAccessKeys (opts, regionId = this.config.regionId, callbac...
    method createUserAccessKey (line 6221) | createUserAccessKey (opts, regionId = this.config.regionId, callback) {
    method enabledUserAccessKey (line 6326) | enabledUserAccessKey (opts, regionId = this.config.regionId, callback) {
    method disabledUserAccessKey (line 6438) | disabledUserAccessKey (opts, regionId = this.config.regionId, callback) {
    method deleteUserAccessKey (line 6550) | deleteUserAccessKey (opts, regionId = this.config.regionId, callback) {
    method describeUserPin (line 6662) | describeUserPin (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/ias/v1/ias.js
  method constructor (line 37) | constructor (options = {}) {
  method apps (line 69) | apps (opts, regionId = this.config.regionId, callback) {
  method appDetail (line 293) | appDetail (opts, regionId = this.config.regionId, callback) {
  method state (line 403) | state (opts, regionId = this.config.regionId, callback) {
  method createApp (line 546) | createApp (opts, regionId = this.config.regionId, callback) {
  method getApp (line 736) | getApp (opts, regionId = this.config.regionId, callback) {
  method updateApp (line 887) | updateApp (opts, regionId = this.config.regionId, callback) {
  method deleteApp (line 1062) | deleteApp (opts, regionId = this.config.regionId, callback) {
  method getApps (line 1172) | getApps (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/industrydata/v1/industrydata.js
  method constructor (line 37) | constructor (options = {}) {
  method getLargeScreenData (line 64) | getLargeScreenData (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/instancevoucher/v1/instancevoucher.js
  class INSTANCEVOUCHER (line 36) | class INSTANCEVOUCHER extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeInstanceVoucherTypes (line 64) | describeInstanceVoucherTypes (
    method describeQuotas (line 183) | describeQuotas (opts, regionId = this.config.regionId, callback) {
    method describeInstanceVouchers (line 300) | describeInstanceVouchers (opts, regionId = this.config.regionId, callb...
    method createInstanceVoucher (line 413) | createInstanceVoucher (opts, regionId = this.config.regionId, callback) {
    method describeInstanceVoucher (line 537) | describeInstanceVoucher (opts, regionId = this.config.regionId, callba...
    method deleteInstanceVoucher (line 651) | deleteInstanceVoucher (opts, regionId = this.config.regionId, callback) {
    method modifyInstanceVoucherAttribute (line 768) | modifyInstanceVoucherAttribute (

FILE: packages/libs/lib-jdcloud/src/repo/invoice/v2/invoice.js
  class INVOICE (line 36) | class INVOICE extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method describeAddresses (line 57) | describeAddresses (opts, regionId = this.config.regionId, callback) {
    method describeChildrenArea (line 165) | describeChildrenArea (opts, regionId = this.config.regionId, callback) {
    method describeAddress (line 296) | describeAddress (opts, regionId = this.config.regionId, callback) {
    method modifyAddress (line 428) | modifyAddress (opts, regionId = this.config.regionId, callback) {
    method deleteAddress (line 593) | deleteAddress (opts, regionId = this.config.regionId, callback) {
    method createAddress (line 724) | createAddress (opts, regionId = this.config.regionId, callback) {
    method describeInvoiceOrderList (line 886) | describeInvoiceOrderList (opts, regionId = this.config.regionId, callb...
    method createInvoiceAgent (line 1027) | createInvoiceAgent (opts, regionId = this.config.regionId, callback) {
    method editInvoiceTemplate (line 1173) | editInvoiceTemplate (opts, regionId = this.config.regionId, callback) {
    method decribeInvoicedChildOrders (line 1312) | decribeInvoicedChildOrders (opts, regionId = this.config.regionId, cal...
    method describeInvoices (line 1433) | describeInvoices (opts, regionId = this.config.regionId, callback) {
    method describeInvoice (line 1590) | describeInvoice (opts, regionId = this.config.regionId, callback) {
    method billDetail (line 1723) | billDetail (opts, regionId = this.config.regionId, callback) {
    method getCompanyCreditInfo (line 1838) | getCompanyCreditInfo (opts, regionId = this.config.regionId, callback) {
    method getOrderRelateInvoice (line 1952) | getOrderRelateInvoice (opts, regionId = this.config.regionId, callback) {
    method getOrderRelateInfo (line 2067) | getOrderRelateInfo (opts, regionId = this.config.regionId, callback) {
    method createInvoice (line 2189) | createInvoice (opts, regionId = this.config.regionId, callback) {
    method refundInvoice (line 2330) | refundInvoice (opts, regionId = this.config.regionId, callback) {
    method artificialRefund (line 2462) | artificialRefund (opts, regionId = this.config.regionId, callback) {
    method cancelInvoice (line 2574) | cancelInvoice (opts, regionId = this.config.regionId, callback) {
    method describeInvoiceUrl (line 2691) | describeInvoiceUrl (opts, regionId = this.config.regionId, callback) {
    method describeInvoiceOrders (line 2817) | describeInvoiceOrders (opts, regionId = this.config.regionId, callback) {
    method invoiceOweList (line 2943) | invoiceOweList (opts, regionId = this.config.regionId, callback) {
    method deductOweFee (line 3058) | deductOweFee (opts, regionId = this.config.regionId, callback) {
    method getTaxInfo (line 3166) | getTaxInfo (opts, regionId = this.config.regionId, callback) {
    method getInvoicePreview (line 3287) | getInvoicePreview (opts, regionId = this.config.regionId, callback) {
    method calculateInvoicePrice (line 3420) | calculateInvoicePrice (opts, regionId = this.config.regionId, callback) {
    method describeMonthDetail (line 3532) | describeMonthDetail (opts, regionId = this.config.regionId, callback) {
    method describeInvoiceTemplate (line 3647) | describeInvoiceTemplate (opts, regionId = this.config.regionId, callba...
    method createInvoiceTemplate (line 3765) | createInvoiceTemplate (opts, regionId = this.config.regionId, callback) {
    method modifyInvoiceTemplate (line 3914) | modifyInvoiceTemplate (opts, regionId = this.config.regionId, callback) {
    method deleteInvoiceTemplate (line 4052) | deleteInvoiceTemplate (opts, regionId = this.config.regionId, callback) {
    method checkInvoiceOwedInfo (line 4157) | checkInvoiceOwedInfo (opts, regionId = this.config.regionId, callback) {
    method batchUpdateInvoiceRefundOrder (line 4268) | batchUpdateInvoiceRefundOrder (
    method refundOwedInvoice (line 4380) | refundOwedInvoice (opts, regionId = this.config.regionId, callback) {
    method describeOrderInvoice (line 4492) | describeOrderInvoice (opts, regionId = this.config.regionId, callback) {
    method updateInvoiceRefundAmount (line 4610) | updateInvoiceRefundAmount (opts, regionId = this.config.regionId, call...

FILE: packages/libs/lib-jdcloud/src/repo/iotcard/v1/iotcard.js
  method constructor (line 37) | constructor (options = {}) {
  method gprsStatus (line 59) | gprsStatus (opts, regionId = this.config.regionId, callback) {
  method onOffStatus (line 174) | onOffStatus (opts, regionId = this.config.regionId, callback) {
  method lifeStatus (line 289) | lifeStatus (opts, regionId = this.config.regionId, callback) {
  method gprsRealtimeInfo (line 404) | gprsRealtimeInfo (opts, regionId = this.config.regionId, callback) {
  method openIotCard (line 519) | openIotCard (opts, regionId = this.config.regionId, callback) {
  method closeIotCard (line 629) | closeIotCard (opts, regionId = this.config.regionId, callback) {
  method openIotFlow (line 739) | openIotFlow (opts, regionId = this.config.regionId, callback) {
  method closeIotFlow (line 849) | closeIotFlow (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/iotcloudgateway/v1/iotcloudgateway.js
  method constructor (line 37) | constructor (options = {}) {
  method describeInstances (line 59) | describeInstances (opts, regionId = this.config.regionId, callback) {
  method describeInstance (line 169) | describeInstance (opts, regionId = this.config.regionId, callback) {
  method queryInstanceExposeDomain (line 282) | queryInstanceExposeDomain (opts, regionId = this.config.regionId, callba...
  method queryInstanceStatus (line 394) | queryInstanceStatus (opts, regionId = this.config.regionId, callback) {
  method deviceControl (line 506) | deviceControl (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/iotcore/v2/iotcore.js
  class IOTCORE (line 36) | class IOTCORE extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method registerDevice (line 58) | registerDevice (opts, regionId = this.config.regionId, callback) {
    method downloadDeviceCertificate (line 180) | downloadDeviceCertificate (opts, regionId = this.config.regionId, call...
    method deleteDevice (line 300) | deleteDevice (opts, regionId = this.config.regionId, callback) {
    method describeDevice (line 420) | describeDevice (opts, regionId = this.config.regionId, callback) {
    method describeThingTypeList (line 547) | describeThingTypeList (opts, regionId = this.config.regionId, callback) {
    method describeThingType (line 674) | describeThingType (opts, regionId = this.config.regionId, callback) {
    method describeThingModel (line 790) | describeThingModel (opts, regionId = this.config.regionId, callback) {
    method setDeviceProperty (line 916) | setDeviceProperty (opts, regionId = this.config.regionId, callback) {
    method invokeFunction (line 1040) | invokeFunction (opts, regionId = this.config.regionId, callback) {
    method describeEventList (line 1164) | describeEventList (opts, regionId = this.config.regionId, callback) {
    method describeFunctionList (line 1294) | describeFunctionList (opts, regionId = this.config.regionId, callback) {
    method describeProperty (line 1421) | describeProperty (opts, regionId = this.config.regionId, callback) {
    method describePropertySnapshot (line 1541) | describePropertySnapshot (opts, regionId = this.config.regionId, callb...
    method createDeviceTopo (line 1668) | createDeviceTopo (opts, regionId = this.config.regionId, callback) {
    method describeDeviceTopo (line 1792) | describeDeviceTopo (opts, regionId = this.config.regionId, callback) {
    method updateDeviceTopo (line 1913) | updateDeviceTopo (opts, regionId = this.config.regionId, callback) {
    method deleteDeviceTopo (line 2034) | deleteDeviceTopo (opts, regionId = this.config.regionId, callback) {
    method invokeThingTopic (line 2160) | invokeThingTopic (opts, regionId = this.config.regionId, callback) {
    method describeThingShadow (line 2305) | describeThingShadow (opts, regionId = this.config.regionId, callback) {
    method updateThingShadow (line 2437) | updateThingShadow (opts, regionId = this.config.regionId, callback) {
    method invokeThingService (line 2572) | invokeThingService (opts, regionId = this.config.regionId, callback) {
    method addDeviceLinks (line 2712) | addDeviceLinks (opts, regionId = this.config.regionId, callback) {
    method queryDevicePage (line 2853) | queryDevicePage (opts, regionId = this.config.regionId, callback) {
    method updateDevice (line 3005) | updateDevice (opts, regionId = this.config.regionId, callback) {
    method addDevice (line 3142) | addDevice (opts, regionId = this.config.regionId, callback) {
    method queryDeviceDetail (line 3287) | queryDeviceDetail (opts, regionId = this.config.regionId, callback) {
    method removeDevice (line 3411) | removeDevice (opts, regionId = this.config.regionId, callback) {
    method getDeviceGroup (line 3543) | getDeviceGroup (opts, regionId = this.config.regionId, callback) {
    method getDeviceGroupList (line 3670) | getDeviceGroupList (opts, regionId = this.config.regionId, callback) {
    method findDeviceGroupLinkPage (line 3803) | findDeviceGroupLinkPage (opts, regionId = this.config.regionId, callba...
    method elevatorOperatingStatus (line 3964) | elevatorOperatingStatus (opts, regionId = this.config.regionId, callba...
    method collectorReadMessage (line 4179) | collectorReadMessage (opts, regionId = this.config.regionId, callback) {
    method readHoldingRegisters (line 4309) | readHoldingRegisters (opts, regionId = this.config.regionId, callback) {
    method collectorWriteMessage (line 4550) | collectorWriteMessage (opts, regionId = this.config.regionId, callback) {
    method updateLooDevice (line 4688) | updateLooDevice (opts, regionId = this.config.regionId, callback) {
    method addLooDevice (line 4834) | addLooDevice (opts, regionId = this.config.regionId, callback) {
    method loongrayQueryPage (line 4996) | loongrayQueryPage (opts, regionId = this.config.regionId, callback) {
    method queryAdminStatistics (line 5161) | queryAdminStatistics (opts, regionId = this.config.regionId, callback) {
    method removeLoongrayDevice (line 5288) | removeLoongrayDevice (opts, regionId = this.config.regionId, callback) {
    method describeProductWithAdmin (line 5423) | describeProductWithAdmin (opts, regionId = this.config.regionId, callb...
    method updateProductWithAdmin (line 5543) | updateProductWithAdmin (opts, regionId = this.config.regionId, callbac...
    method deleteProductWithAdmin (line 5673) | deleteProductWithAdmin (opts, regionId = this.config.regionId, callbac...
    method listProductsWithAdmin (line 5798) | listProductsWithAdmin (opts, regionId = this.config.regionId, callback) {
    method createAdminProduct (line 5925) | createAdminProduct (opts, regionId = this.config.regionId, callback) {
    method listProducts (line 6081) | listProducts (opts, regionId = this.config.regionId, callback) {
    method createProduct (line 6207) | createProduct (opts, regionId = this.config.regionId, callback) {
    method describeProduct (line 6359) | describeProduct (opts, regionId = this.config.regionId, callback) {
    method updateProduct (line 6479) | updateProduct (opts, regionId = this.config.regionId, callback) {
    method deleteProduct (line 6609) | deleteProduct (opts, regionId = this.config.regionId, callback) {
    method listProductAbilities (line 6733) | listProductAbilities (opts, regionId = this.config.regionId, callback) {
    method importThingModel (line 6858) | importThingModel (opts, regionId = this.config.regionId, callback) {
    method exportThingModel (line 6985) | exportThingModel (opts, regionId = this.config.regionId, callback) {
    method describeProductTopics (line 7108) | describeProductTopics (opts, regionId = this.config.regionId, callback) {
    method createProductTopic (line 7242) | createProductTopic (opts, regionId = this.config.regionId, callback) {
    method describeProductTopic (line 7391) | describeProductTopic (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/iotedge/v2/iotedge.js
  method constructor (line 37) | constructor (options = {}) {
  method deployApp (line 72) | deployApp (opts, regionId = this.config.regionId, callback) {
  method describeDeployApp (line 296) | describeDeployApp (opts, regionId = this.config.regionId, callback) {
  method describeDeployDetails (line 468) | describeDeployDetails (opts, regionId = this.config.regionId, callback) {
  method unInstallApp (line 620) | unInstallApp (opts, regionId = this.config.regionId, callback) {
  method setAppStatus (line 774) | setAppStatus (opts, regionId = this.config.regionId, callback) {
  method describeConfig (line 935) | describeConfig (opts, regionId = this.config.regionId, callback) {
  method deleteEdgeWithCore (line 1083) | deleteEdgeWithCore (opts, regionId = this.config.regionId, callback) {
  method addEdgeWithCore (line 1205) | addEdgeWithCore (opts, regionId = this.config.regionId, callback) {
  method addSubDeviceWithCore (line 1360) | addSubDeviceWithCore (opts, regionId = this.config.regionId, callback) {
  method delSubDeviceWithCore (line 1489) | delSubDeviceWithCore (opts, regionId = this.config.regionId, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/iothub/v1/iothub.js
  method constructor (line 37) | constructor (options = {}) {
  method deleteDevice (line 56) | deleteDevice (opts, callback) {
  method queryDeviceOnlineInfos (line 154) | queryDeviceOnlineInfos (opts, callback) {
  method deviceActivate (line 251) | deviceActivate (opts, callback) {
  method devicesEnroll (line 352) | devicesEnroll (opts, callback) {
  method queryDeviceCommands (line 452) | queryDeviceCommands (opts, callback) {
  method deviceCommand (line 553) | deviceCommand (opts, callback) {
  method queryDeviceStates (line 657) | queryDeviceStates (opts, callback) {
  method deviceState (line 758) | deviceState (opts, callback) {
  method checkDeviceId (line 861) | checkDeviceId (opts, callback) {
  method moduleEnrollment (line 965) | moduleEnrollment (opts, callback) {
  method moduleState (line 1079) | moduleState (opts, callback) {
  method getOMPrivateURL (line 1184) | getOMPrivateURL (opts, callback) {
  method omEnrollbyFile (line 1289) | omEnrollbyFile (opts, callback) {
  method omEnroll (line 1400) | omEnroll (opts, callback) {

FILE: packages/libs/lib-jdcloud/src/repo/iotlink/v1/iotlink.js
  class IOTLINK (line 36) | class IOTLINK extends Service {
    method constructor (line 37) | constructor (options = {}) {
    method ordinaryRealNameClear (line 59) | ordinaryRealNameClear (opts, regionId = this.config.regionId, callback) {
    method cardBindStatus (line 175) | cardBindStatus (opts, regionId = this.config.regionId, callback) {
    method getOnlineStatus (line 290) | getOnlineStatus (opts, regionId = this.config.regionId, callback) {
    method queryValidPeriodForNB (line 405) | queryValidPeriodForNB (opts, regionId = this.config.regionId, callback) {
    method queryDayHistoryTraffic (line 521) | queryDayHistoryTraffic (opts, regionId = this.config.regionId, callbac...
    method simRealNameReg (line 637) | simRealNameReg (opts, regionId = this.config.regionId, callback) {
    method queryTrafficByDate (line 753) | queryTrafficByDate (opts, regionId = this.config.regionId, callback) {
    method speedLimitAction (line 869) | speedLimitAction (opts, regionId = this.config.regionId, callback) {
    method cardInfo (line 985) | cardInfo (opts, regionId = this.config.regionId, callback) {
    method realNameQueryIot (line 1100) | realNameQueryIot (opts, regionId = this.config.regionId, callback) {
    method gprsStatusByIMSI (line 1215) | gprsStatusByIMSI (opts, regionId = this.config.regionId, callback) {
    method onOffStatusByIMSI (line 1330) | onOffStatusByIMSI (opts, regionId = this.config.regionId, callback) {
    method lifeStatusByIMSI (line 1445) | lifeStatusByIMSI (opts, regionId = this.config.regionId, callback) {
    method gprsRealtimeInfoByIMSI (line 1560) | gprsRealtimeInfoByIMSI (opts, regionId = this.config.regionId, callbac...
    method gprsStatus (line 1675) | gprsStatus (opts, regionId = this.config.regionId, callback) {
    method
Copy disabled (too large) Download .json
Condensed preview — 2332 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (18,103K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 273,
    "preview": "> 感谢您支持certd,请按如下规范提交issue    \n> 如果有条件,请尽量在[github上提交](https://github.com/certd/certd/issues)\n\n\n## 一、问题描述\n`请在此处简要描述你所遇到的"
  },
  {
    "path": ".github/workflows/build-image-for-test.yml",
    "chars": 3073,
    "preview": "name: build-image-for-test\non:\n  push:\n    branches: ['v2-dev']\n    paths:\n      - \"build-dev.trigger\"\n\n#  schedule:\n#  "
  },
  {
    "path": ".github/workflows/build-image.yml",
    "chars": 3966,
    "preview": "name: build-image\non:\n  push:\n    branches: ['v2-dev']\n    paths:\n      - \"build.trigger\"\n\n#  schedule:\n#    - # 国际时间 19"
  },
  {
    "path": ".github/workflows/deploy-demo.yml",
    "chars": 1908,
    "preview": "name: deploy-demo\non:\n  push:\n    branches: ['v2-dev']\n    paths:\n      - \"deploy.trigger\"\n  workflow_run:\n    workflows"
  },
  {
    "path": ".github/workflows/sync-to-gitee-dev.yml",
    "chars": 1067,
    "preview": "name: sync-to-gitee-dev\non:\n  push:\n    branches: ['v2-dev']\n#  schedule:\n#    - # 国际时间 19:17 执行,北京时间3:17  ↙↙↙ 改成你想要每天自动"
  },
  {
    "path": ".github/workflows/sync-to-gitee.yml",
    "chars": 1055,
    "preview": "name: sync-to-gitee\non:\n  push:\n    branches: ['v2']\n#  schedule:\n#    - # 国际时间 19:17 执行,北京时间3:17  ↙↙↙ 改成你想要每天自动执行的时间\n# "
  },
  {
    "path": ".gitignore",
    "chars": 469,
    "preview": "./packages/core/lego\n# IntelliJ project files\n.vscode/\nnode_modules/\nnpm-debug.log\nyarn-error.log\nyarn.lock\npackage-lock"
  },
  {
    "path": ".npmrc",
    "chars": 60,
    "preview": "link-workspace-packages=deep\nprefer-workspace-packages=true\n"
  },
  {
    "path": ".prettierrc",
    "chars": 125,
    "preview": "{\n  \"printWidth\": 160,\n  \"bracketSpacing\": true,\n  \"singleQuote\": true,\n  \"trailingComma\": \"es5\",\n  \"arrowParens\": \"avoi"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 86718,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "LICENSE",
    "chars": 34523,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "LICENSE.md",
    "chars": 1659,
    "preview": "\n                    Certd Open Source License\n                  \n\n- This project is licensed under the **GNU Affero Gen"
  },
  {
    "path": "README.md",
    "chars": 5972,
    "preview": "# Certd\n\n[English](./README_en.md) | [中文](./README.md)\n\nCertd® 是一个免费的全自动证书管理系统,让你的网站证书永不过期。   \n后缀d取自linux守护进程的命名风格,意为证书守"
  },
  {
    "path": "README_en.md",
    "chars": 10448,
    "preview": "# Certd\n\n[English](./README_en.md) | [中文](./README.md)\n\nCertd® is a free, fully automated certificate management system "
  },
  {
    "path": "build-dev.trigger",
    "chars": 2,
    "preview": "2\n"
  },
  {
    "path": "build.trigger",
    "chars": 6,
    "preview": "23:09\n"
  },
  {
    "path": "deploy.js",
    "chars": 2827,
    "preview": "import http from 'axios'\nimport fs from 'fs'\n//读取 packages/core/pipline/package.json的版本号\nimport {default as packageJson}"
  },
  {
    "path": "deploy.trigger",
    "chars": 2,
    "preview": "5\n"
  },
  {
    "path": "docker/run/docker-compose.yaml",
    "chars": 4688,
    "preview": "version: '3.3' # 兼容旧版docker-compose\nservices:\n  certd:\n    # 镜像                                                  #  ↓↓↓↓"
  },
  {
    "path": "docs/.gitignore",
    "chars": 21,
    "preview": ".vitepress/cache\ndist"
  },
  {
    "path": "docs/.vitepress/config.ts",
    "chars": 6881,
    "preview": "import {defineConfig} from \"vitepress\";\n// Import lightbox plugin\nimport lightbox from \"vitepress-plugin-lightbox\";\n\n// "
  },
  {
    "path": "docs/.vitepress/theme/Layout.vue",
    "chars": 740,
    "preview": "<script setup>\nimport DefaultTheme from \"vitepress/theme\";\nimport { onMounted } from \"vue\";\nimport { useRouter } from \"v"
  },
  {
    "path": "docs/.vitepress/theme/index.ts",
    "chars": 913,
    "preview": "// https://vitepress.dev/guide/custom-theme\n// import { h } from 'vue'\nimport type { Theme } from 'vitepress'\nimport Def"
  },
  {
    "path": "docs/.vitepress/theme/plugins/baidutongji.ts",
    "chars": 1125,
    "preview": "import { inBrowser } from 'vitepress'\n\n/**\n * 统计站点的 ID 列表\n */\nexport const siteIds = 'a6ce877a899ae44292e4f854a53d688e'\n"
  },
  {
    "path": "docs/.vitepress/theme/style.css",
    "chars": 4287,
    "preview": "/**\n * Customize default theme styling by overriding CSS variables:\n * https://github.com/vuejs/vitepress/blob/main/src/"
  },
  {
    "path": "docs/guide/changelogs/CHANGELOG.md",
    "chars": 86718,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "docs/guide/contact/index.md",
    "chars": 415,
    "preview": "# 联系我们\n\n## 1. 交流群\n如有疑问,欢迎加入群聊(请备注certd)\n如有疑问,欢迎加入群聊(请备注certd)\n\n| 加群 | 微信群 | QQ群 |\n|---------|-------|-------|\n| 二维码 | <i"
  },
  {
    "path": "docs/guide/development/demo/access.md",
    "chars": 1496,
    "preview": "\n# 授权插件Demo\n\n```ts\nimport { AccessInput, BaseAccess, IsAccess } from '@certd/pipeline';\nimport { isDev } from '../../uti"
  },
  {
    "path": "docs/guide/development/index.md",
    "chars": 1822,
    "preview": "# 本地开发\n欢迎贡献插件\n\n建议nodejs版本 `20.x` 及以上\n\n## 一、本地调试运行\n\n### 克隆代码\n```shell\n\n# 克隆代码\ngit clone https://github.com/certd/certd --"
  },
  {
    "path": "docs/guide/donate/index.md",
    "chars": 716,
    "preview": "# 捐赠\n************************\n支持开源,为爱发电,我已入驻爱发电   \nhttps://afdian.com/a/greper\n\n## 发电权益:\n1. 可加入发电专属群,可以获得作者一对一技术支持\n2. 您的"
  },
  {
    "path": "docs/guide/feature/cname/index.md",
    "chars": 1144,
    "preview": "# CNAME代理校验方式\n\n通过CNAME代理校验方式,可以给`Certd`不支持的域名服务商的域名申请证书。\n\n## 1. 前言\n* 申请证书是需要`校验域名所有权`的。\n* `DNS校验方式`需要开发适配DNS服务商的接口\n* 目前`"
  },
  {
    "path": "docs/guide/feature/safe/hidden/index.md",
    "chars": 397,
    "preview": "# 站点隐藏\n\n* 一般来说Certd设置好之后,很少需要访问。\n* 所以我们`平时`可以把`站点访问关闭`,需要的时候再打开,减少站点被攻击的风险    \n\n## 1、开启站点隐藏\n`系统管理->系统设置->安全设置->站点隐藏 `  \n"
  },
  {
    "path": "docs/guide/feature/safe/index.md",
    "chars": 900,
    "preview": "# 安全特性\n\nCertd 存储了证书以及授权等敏感数据,所以需要严格保障安全。      \n我们提供了以下安全特性,以及安全生产建议(请遵照建议进行生产部署以保障数据安全)\n\n## 一、站点安全特性\n\n### 1、 授权数据加密存储【默认"
  },
  {
    "path": "docs/guide/image.md",
    "chars": 588,
    "preview": "# 镜像说明\n## 国内镜像地址:\n\n* `registry.cn-shenzhen.aliyuncs.com/handsfree/certd:latest`  \n* `registry.cn-shenzhen.aliyuncs.com/h"
  },
  {
    "path": "docs/guide/index.md",
    "chars": 667,
    "preview": "# Certd\n\nCertd 是一款开源、免费、全自动申请和部署更新SSL证书的工具。       \n后缀d取自linux守护进程的命名风格,意为证书守护进程。\n\n关键字:证书自动申请、证书自动更新、证书自动续期、证书自动续签、证书管理工具"
  },
  {
    "path": "docs/guide/install/1panel/index.md",
    "chars": 818,
    "preview": "# 部署到1Panel面板\n\n\n## 一、安装1Panel\n\nhttps://1panel.cn/docs/installation/online_installation/\n\n## 二、部署certd\n\n\n1. 打开`docker-com"
  },
  {
    "path": "docs/guide/install/baota/index.md",
    "chars": 1264,
    "preview": "# 部署到宝塔面板\n\n\n## 一、安装\n宝塔面板支持两种方式安装Certd,请选择其中一种方式\n\n### 1、安装宝塔面板\n\n* 安装宝塔面板,前往 [宝塔面板](https://www.bt.cn/u/CL3JHS) 官网,选择`9.2."
  },
  {
    "path": "docs/guide/install/database.md",
    "chars": 2053,
    "preview": "# 切换数据库\n\ncertd支持如下几种数据库:\n1. sqlite3 (默认)\n2. mysql \n3. postgresql\n   \n您可以按如下两种方式切换数据库\n\n\n## 一、全新安装\n::: tip   \n以下按照`docker-"
  },
  {
    "path": "docs/guide/install/docker/index.md",
    "chars": 1670,
    "preview": "# Docker方式部署\n\n## 一、安装\n\n### 1. 环境准备\n\n1.1  准备一台云服务器\n\n* 【阿里云】云服务器2核2G,新老用户同享,99元/年,续费同价!【 [立即购买](https://www.aliyun.com/ben"
  },
  {
    "path": "docs/guide/install/source/index.md",
    "chars": 966,
    "preview": "# 源码部署\n如果没有开发基础、没有运维基础、没有`git`和`nodejs`基础,强烈不推荐此方式\n\n## 一、源码安装\n\n### 环境要求\n- nodejs 20 及以上\n### 源码启动\n```shell\n# 克隆代码\ngit clo"
  },
  {
    "path": "docs/guide/install/upgrade.md",
    "chars": 1518,
    "preview": "# 版本升级\n\n## 升级方法\n根据不同部署方式查看升级方法\n\n1. [Docker方式部署升级](./docker/#二、升级)\n2. [宝塔面板方式部署升级](./baota/#三、如何升级)\n3. [1Panel面板方式部署升级](."
  },
  {
    "path": "docs/guide/license/index.md",
    "chars": 154,
    "preview": "# 开源协议\n\n* 本项目遵循 GNU Affero General Public License(AGPL)开源协议。\n* 允许个人和公司使用、复制、修改和分发本项目,禁止任何形式的商业用途\n* 未获得商业授权情况下,禁止任何对logo、"
  },
  {
    "path": "docs/guide/link/index.md",
    "chars": 1036,
    "preview": "# 我的其他项目\n\n| 项目名称                                                    | stars                                             "
  },
  {
    "path": "docs/guide/open/index.md",
    "chars": 720,
    "preview": "# 开放接口\n被动方式对第三方提供证书, 支持根据域名或证书id获取证书。\n\n## 获取keyId和KeySecret\n\n![](./images/1.png)\n\n## 接口文档\n\nhttps://apifox.com/apidoc/sha"
  },
  {
    "path": "docs/guide/plugins/access.md",
    "chars": 1517,
    "preview": "# 授权列表\n\n| 序号 | 名称 | 说明 |\n|-----|-----|-----|\n| 1.| **阿里云授权** |  | \n| 2.| **EAB授权** | ZeroSSL证书申请需要EAB授权 | \n| 3.| **googl"
  },
  {
    "path": "docs/guide/plugins/deploy.md",
    "chars": 4294,
    "preview": "# 任务插件\n共 `70` 款任务插件    \n## 1. 证书申请\n\n| 序号 | 名称 | 说明 |\n|-----|-----|-----|\n| 1.| **证书申请(JS版)** | 免费通配符域名证书申请,支持多个域名打到同一个证书"
  },
  {
    "path": "docs/guide/plugins/dns-provider.md",
    "chars": 435,
    "preview": "# DNS提供商\n\n| 序号 | 名称 | 说明 |\n|-----|-----|-----|\n| 1.| **阿里云** | 阿里云DNS解析提供商 | \n| 2.| **腾讯云** | 腾讯云域名DNS解析提供者 | \n| 3.| **华"
  },
  {
    "path": "docs/guide/plugins/notification.md",
    "chars": 666,
    "preview": "# 通知插件\n\n| 序号 | 名称 | 说明 |\n|-----|-----|-----|\n| 1.| **企业微信通知** | 企业微信群聊机器人通知 | \n| 2.| **电子邮件** | 电子邮件通知 | \n| 3.| **爱语飞飞微信"
  },
  {
    "path": "docs/guide/qa/index.md",
    "chars": 1406,
    "preview": "# 常见报错解决\n\n## 1. getaddrinfo ENOTFOUND错误\n如果出现`getaddrinfo ENOTFOUND`/`getaddrinfo EAI_AGAIN`错误,可以尝试在`docker-compose.yaml`"
  },
  {
    "path": "docs/guide/qa/use.md",
    "chars": 160,
    "preview": "# 使用问题\n\n\n## 1. 是否支持IP证书\n\n因为ACME协议不支持IP证书,所以certd目前也不支持IP证书\n\n\n## 2. 建议设置多长时间运行一次流水线\n建议每天运行一次,检查证书过期时间    \n当证书没过期时,自动跳过部署\n"
  },
  {
    "path": "docs/guide/start.md",
    "chars": 465,
    "preview": "# 快速开始\n本章节介绍如何快速开始使用`Certd`\n\n## 一、 demo在线体验\n\n官方DEMO地址,自助注册后体验\n\nhttps://certd.handsfree.work/\n\n> 注意数据将不定期清理,不定期停止定时任务,生产使"
  },
  {
    "path": "docs/guide/tutorial.md",
    "chars": 244,
    "preview": "\n# 演示教程\n教程演示从创建证书申请任务到自动部署证书全流程\n\n`申请证书->部署证书->设置定时执行->设置邮件通知`\n\n可以从如下两处查看演示流程\n\n## 1. 系统顶部使用教程菜单\n点击`使用教程`可以学习如何自动申请和部署证书\n\n"
  },
  {
    "path": "docs/guide/use/ESXi/index.md",
    "chars": 218,
    "preview": "# 部署证书到ESXi\n\n使用`部署证书到主机插件`即可\n\n\n## 开启ssh\n登陆ESXi Web后台,点击 主机 -> 操作 -> 服务 -> 启用 Secure Shell(SSH)打开SSH\n\n## 添加部署到主机任务\n\n![img"
  },
  {
    "path": "docs/guide/use/aliyun/index.md",
    "chars": 424,
    "preview": "# 阿里云相关\n\n\n## 阿里云客户端请求超时配置\n\n配置环境变量\n```shell\nALIYUN_CLIENT_CONNECT_TIMEOUT=10000 # 连接超时,单位毫秒\nALIYUN_CLIENT_READ_TIMEOUT=10"
  },
  {
    "path": "docs/guide/use/backup/index.md",
    "chars": 577,
    "preview": "# 数据库备份\n* 两种备份方法:  1、手动备份  2、自动备份\n* 本文仅限sqlite数据库。\n## 一、手动备份\n数据库文件根据不同的部署方式保存的位置不一样,您可以手动复制出来进行备份\n\n* docker: 默认保存在`/data"
  },
  {
    "path": "docs/guide/use/cert/index.md",
    "chars": 116,
    "preview": "# 证书申请失败情况\n\n\n## DNS记录问题\n\n1. DNS 不要设置CAA记录,删除即可\n\n2. DNSSEC相关报错,DNSSEC管理中删除即可\n\n3. DNS 有其他平台申请过的_acme-challenge记录,删除即可\n"
  },
  {
    "path": "docs/guide/use/cf/cf.md",
    "chars": 226,
    "preview": "# Cloudflare \n\n\n## CF Token申请\n\n### 申请地址:\nhttps://dash.cloudflare.com/profile/api-tokens\n\n### 权限设置:\n需要设置权限和资源范围  \n权限包括:Zo"
  },
  {
    "path": "docs/guide/use/comm/index.md",
    "chars": 145,
    "preview": "# 商业版文档\n\n![](./images/index.png)\n\n## 支付方式配置\n\n* [支付宝支付配置](./payments/alipay.md)\n* [微信支付配置](./payments/wxpay.md)\n* [彩虹易支付配"
  },
  {
    "path": "docs/guide/use/comm/payments/alipay.md",
    "chars": 412,
    "preview": "# 支付宝配置\n\n## 配置步骤\n\n1. 创建应用,获取APPID\n   * 登录支付宝开放平台,进入开发者中心,创建网页应用,获取应用的AppId(左上角复制)\n   * 开发者中心:https://open.alipay.com/dev"
  },
  {
    "path": "docs/guide/use/comm/payments/wxpay.md",
    "chars": 454,
    "preview": "# 微信支付配置\n\n## 配置步骤\n\n1. 开通Native支付\n   * 登录微信支付平台\n   * 进入产品中心: https://pay.weixin.qq.com/index.php/extend/product/lists?tid"
  },
  {
    "path": "docs/guide/use/comm/payments/yizhifu.md",
    "chars": 315,
    "preview": "# 彩虹易支付配置\n\n彩虹易支付是一款非常流行的php聚合支付系统。\n\n## 配置步骤\n\n1. 获取商户ID、商户密钥\n\n   * 登录彩虹易支付平台\n   * 进入用户中心:https://xxxxxx.com/user/userinfo"
  },
  {
    "path": "docs/guide/use/custom-script/index.md",
    "chars": 1550,
    "preview": "# 自定义脚本插件\n\n## 1. 介绍\n\n自定义脚本插件是一个通用的插件,可以通过编写脚本来实现各种功能,例如:调用第三方API、执行系统命令、发送邮件等。\n\n## 2. 使用示例\n```js\n\n// 如果需要引用第三方库,必须使用impo"
  },
  {
    "path": "docs/guide/use/email/index.md",
    "chars": 280,
    "preview": "# 邮箱配置\n\n\n## 腾讯企业邮箱配置\n1. 开启smtp\n![](./images/qq-3.png)\n2. 获取授权码作为密码\n![](./images/qq-1.png)\n![](./images/qq-2.png)\n3. 填写域名"
  },
  {
    "path": "docs/guide/use/forgotpasswd/index.md",
    "chars": 485,
    "preview": "# 忘记管理员密码\n解决方法如下:\n\n## 1. 修改环境变量\n修改docker-compose.yaml文件,将环境变量`certd_system_resetAdminPasswd`改为`true`\n```yaml\nservices:\n "
  },
  {
    "path": "docs/guide/use/google/index.md",
    "chars": 1260,
    "preview": "# google证书申请教程\n\n## 1、启用API\n打开如下链接,启用 API\n\nhttps://console.cloud.google.com/apis/library/publicca.googleapis.com\n\n打开该链接后点"
  },
  {
    "path": "docs/guide/use/host/windows.md",
    "chars": 1062,
    "preview": "# 连接windows主机\n\n远程主机基于ssh协议,通过ssh连接远程主机,执行命令。\n\n## windows开启OpenSSH Server\n### 1. 安装OpenSSH Server    \n\n* 下载安装包安装: https:/"
  },
  {
    "path": "docs/guide/use/https/index.md",
    "chars": 524,
    "preview": "# Certd本身的https证书配置\n\n## 一、启用https\n\n`Certd`默认启用https,监听7002端口    \n如果你想关闭https,或者修改端口,可以在环境变量中配置\n```shell\nCERTD_HTTPS_ENAB"
  },
  {
    "path": "docs/guide/use/pretask/index.md",
    "chars": 171,
    "preview": "# 带输出的前置任务\n\n前置任务输出可以在后续任务中使用\n\n比如上传证书到阿里云,会返回阿里云的CertId,之后其他阿里云的部署任务可以选择复用这个证书\n\n## 复用证书\n\n![img.png](images/pretask1.png)\n"
  },
  {
    "path": "docs/guide/use/rerun/index.md",
    "chars": 50,
    "preview": "# 如何强制重新执行任务\n\n## 强制重新执行任务\n\n![](./images/rerun.png)"
  },
  {
    "path": "docs/guide/use/setting/ipv6.md",
    "chars": 336,
    "preview": "# IPv6支持\n\n## 启用IPv6\n在`docker-compose.yaml`中启用IPv6支持,放开如下注释:\n```yaml\n#    #↓↓↓↓ -----------------------------------------"
  },
  {
    "path": "docs/guide/use/synology/index.md",
    "chars": 791,
    "preview": "# 群晖部署和证书更新\n\n支持群晖`6.x`、`7.x`\n\n## 一、群晖部署Certd\n\n以下是群晖`7.x`的部署`certd`步骤。   \n群晖`6.x`请参考[docker部署](./../../install/docker/)\n\n"
  },
  {
    "path": "docs/guide/use/tencent/index.md",
    "chars": 748,
    "preview": "# 腾讯云\n\n## 腾讯云API密钥设置\n\n腾讯云其他部署需要API密钥,需要在腾讯云控制台进行设置   \n打开 https://console.cloud.tencent.com/cam/capi   \n然后按如下方式获取腾讯云的API密"
  },
  {
    "path": "docs/index.md",
    "chars": 806,
    "preview": "---\n# https://vitepress.dev/reference/default-theme-home-page\nlayout: home\n\nhero:\n  name: \"Certd\"\n  text: \"开源、免费、全自动的证书管"
  },
  {
    "path": "docs/public/robots.txt",
    "chars": 23,
    "preview": "User-agent: *\nAllow: /\n"
  },
  {
    "path": "index.ts",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "init.sh",
    "chars": 391,
    "preview": "\ncurrent_pwd=$(pwd)\n\necho \"开始设置git配置\"\n\nread -p \"请输入username:\" username\ngit config  user.name $username\n\nread -p \"请输入emai"
  },
  {
    "path": "lerna.json",
    "chars": 242,
    "preview": "{\n  \"$schema\": \"node_modules/lerna/schemas/lerna-schema.json\",\n  \"useWorkspaces\": true,\n  \"command\": {\n    \"bootstrap\": "
  },
  {
    "path": "package.json",
    "chars": 2194,
    "preview": "{\n  \"name\": \"root\",\n  \"version\": \"1.20.4\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"devDependencies\": {\n    \"@lerna-lit"
  },
  {
    "path": "packages/core/acme-client/.editorconfig",
    "chars": 151,
    "preview": "#\n# http://editorconfig.org\n#\n\nroot = true\n\n[*]\nindent_style = space\nindent_size = 4\ntrim_trailing_whitespace = true\n\n[{"
  },
  {
    "path": "packages/core/acme-client/.eslintrc",
    "chars": 553,
    "preview": "{\n  \"extends\": [\n    \"plugin:prettier/recommended\",\n    \"prettier\"\n  ],\n  \"plugins\": [\n    \"eslint-plugin-import\"\n  ],\n "
  },
  {
    "path": "packages/core/acme-client/.github/scripts/tests-install-coredns.sh",
    "chars": 1339,
    "preview": "#!/bin/bash\n#\n# Install CoreDNS for testing.\n#\nset -euo pipefail\n\n# Download and install\nwget -nv \"https://github.com/co"
  },
  {
    "path": "packages/core/acme-client/.github/scripts/tests-install-cts.sh",
    "chars": 535,
    "preview": "#!/bin/bash\n#\n# Install Pebble Challenge Test Server for testing.\n#\nset -euo pipefail\n\n# Download and install\nwget -nv \""
  },
  {
    "path": "packages/core/acme-client/.github/scripts/tests-install-pebble.sh",
    "chars": 1318,
    "preview": "#!/bin/bash\n#\n# Install Pebble for testing.\n#\nset -euo pipefail\n\nCONFIG_NAME=\"pebble-config.json\"\n\n# Use Pebble EAB conf"
  },
  {
    "path": "packages/core/acme-client/.github/scripts/tests-wait-for-ca.sh",
    "chars": 668,
    "preview": "#!/bin/bash\n#\n# Wait for ACME server to accept connections.\n#\nset -euo pipefail\n\nMAX_ATTEMPTS=15\nATTEMPT=0\n\n# Loop until"
  },
  {
    "path": "packages/core/acme-client/.github/workflows/tests.yml",
    "chars": 2415,
    "preview": "name: test\non: [push, pull_request]\n\njobs:\n  test:\n    name: node=${{matrix.node}} eab=${{matrix.eab}}\n    runs-on: ubun"
  },
  {
    "path": "packages/core/acme-client/.gitignore",
    "chars": 70,
    "preview": ".actrc\n.vscode/\nnode_modules/\nnpm-debug.log\npackage-lock.json\n/.idea/\n"
  },
  {
    "path": "packages/core/acme-client/.prettierrc",
    "chars": 125,
    "preview": "{\n  \"printWidth\": 220,\n  \"bracketSpacing\": true,\n  \"singleQuote\": false,\n  \"trailingComma\": \"es5\",\n  \"arrowParens\": \"avo"
  },
  {
    "path": "packages/core/acme-client/CHANGELOG.md",
    "chars": 34719,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "packages/core/acme-client/LICENSE",
    "chars": 1077,
    "preview": "MIT License\n\nCopyright (c) 2017-2024 Labrador CMS AS\n\nPermission is hereby granted, free of charge, to any person obtain"
  },
  {
    "path": "packages/core/acme-client/README.md",
    "chars": 8687,
    "preview": "# acme-client [![test](https://github.com/publishlab/node-acme-client/actions/workflows/tests.yml/badge.svg)](https://gi"
  },
  {
    "path": "packages/core/acme-client/build.md",
    "chars": 6,
    "preview": "20:55\n"
  },
  {
    "path": "packages/core/acme-client/docs/client.md",
    "chars": 17342,
    "preview": "## Classes\n\n<dl>\n<dt><a href=\"#AcmeClient\">AcmeClient</a></dt>\n<dd><p>AcmeClient</p>\n</dd>\n</dl>\n\n## Objects\n\n<dl>\n<dt><"
  },
  {
    "path": "packages/core/acme-client/docs/crypto.md",
    "chars": 10901,
    "preview": "## Objects\n\n<dl>\n<dt><a href=\"#crypto\">crypto</a> : <code>object</code></dt>\n<dd><p>Native Node.js crypto interface</p>\n"
  },
  {
    "path": "packages/core/acme-client/docs/forge.md",
    "chars": 8625,
    "preview": "## Objects\n\n<dl>\n<dt><a href=\"#forge\">forge</a> : <code>object</code></dt>\n<dd><p>Legacy node-forge crypto interface</p>"
  },
  {
    "path": "packages/core/acme-client/docs/upgrade-v5.md",
    "chars": 5159,
    "preview": "# Upgrading to v5 of `acme-client`\n\nThis document outlines the breaking changes introduced in v5 of `acme-client`, why t"
  },
  {
    "path": "packages/core/acme-client/examples/README.md",
    "chars": 1393,
    "preview": "# Disclaimer\n\nThese examples should not be used as is for any production environment, as they are just proof of concepts"
  },
  {
    "path": "packages/core/acme-client/examples/api.js",
    "chars": 4350,
    "preview": "/**\n * Example of acme.Client API\n */\n\nconst acme = require('./../');\n\nfunction log(m) {\n    process.stdout.write(`${m}\\"
  },
  {
    "path": "packages/core/acme-client/examples/auto.js",
    "chars": 3284,
    "preview": "/**\n * Example of acme.Client.auto()\n */\n\n// const fs = require('fs').promises;\nconst acme = require('./../');\n\nfunction"
  },
  {
    "path": "packages/core/acme-client/examples/dns-01/README.md",
    "chars": 1631,
    "preview": "# dns-01\n\nThe greatest benefit of `dns-01` is that it is the only challenge type that can be used to issue ACME wildcard"
  },
  {
    "path": "packages/core/acme-client/examples/dns-01/dns-01.js",
    "chars": 2644,
    "preview": "/**\n * Example using dns-01 challenge to generate certificates\n *\n * NOTE: This example is incomplete as the DNS challen"
  },
  {
    "path": "packages/core/acme-client/examples/fallback.crt",
    "chars": 1115,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIDCTCCAfGgAwIBAgIUGwI6ZLE3HN7oRZ9BvWLde0Tsu7EwDQYJKoZIhvcNAQEL\nBQAwFDESMBAGA1UEAwwJbG9jYWx"
  },
  {
    "path": "packages/core/acme-client/examples/fallback.key",
    "chars": 1704,
    "preview": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDhzvNKJjo4Sn3F\nhkdjjYVR84tESbTc2y1mF30jEUV"
  },
  {
    "path": "packages/core/acme-client/examples/http-01/README.md",
    "chars": 1383,
    "preview": "# http-01\n\nThe `http-01` challenge type is the simplest to implement and should likely be your default choice, unless yo"
  },
  {
    "path": "packages/core/acme-client/examples/http-01/http-01.js",
    "chars": 5149,
    "preview": "/**\n * Example using http-01 challenge to generate certificates on-demand\n */\n\nconst fs = require('fs');\nconst path = re"
  },
  {
    "path": "packages/core/acme-client/examples/tls-alpn-01/README.md",
    "chars": 3109,
    "preview": "# tls-alpn-01\n\nResponding to `tls-alpn-01` challenges using Node.js is a bit more involved than the other two challenge "
  },
  {
    "path": "packages/core/acme-client/examples/tls-alpn-01/haproxy.cfg",
    "chars": 507,
    "preview": "##\n# HTTPS listener\n# - Send to ALPN responder port 4444 if protocol is acme-tls/1\n# - Default to HTTPS backend port 444"
  },
  {
    "path": "packages/core/acme-client/examples/tls-alpn-01/nginx.conf",
    "chars": 338,
    "preview": "##\n# HTTPS server\n# - Send to ALPN responder port 4444 if protocol is acme-tls/1\n# - Default to HTTPS backend port 4443\n"
  },
  {
    "path": "packages/core/acme-client/examples/tls-alpn-01/tls-alpn-01.js",
    "chars": 5482,
    "preview": "/**\n * Example using tls-alpn-01 challenge to generate certificates on-demand\n */\n\nconst fs = require('fs');\nconst path "
  },
  {
    "path": "packages/core/acme-client/package.json",
    "chars": 2195,
    "preview": "{\n    \"name\": \"@certd/acme-client\",\n    \"description\": \"Simple and unopinionated ACME client\",\n    \"private\": false,\n   "
  },
  {
    "path": "packages/core/acme-client/src/api.js",
    "chars": 6978,
    "preview": "/**\n * ACME API client\n */\nimport  * as util  from './util.js';\n\n/**\n * AcmeApi\n *\n * @class\n * @param {HttpClient} http"
  },
  {
    "path": "packages/core/acme-client/src/auto.js",
    "chars": 9839,
    "preview": "/**\n * ACME auto helper\n */\nimport { readCsrDomains } from \"./crypto/index.js\";\nimport { log } from \"./logger.js\";\nimpor"
  },
  {
    "path": "packages/core/acme-client/src/axios.js",
    "chars": 4501,
    "preview": "/**\n * Axios instance\n */\nimport axios from 'axios';\nimport { parseRetryAfterHeader } from './util.js';\nimport { log } f"
  },
  {
    "path": "packages/core/acme-client/src/client.js",
    "chars": 22466,
    "preview": "/**\n * ACME client\n *\n * @namespace Client\n */\nimport { createHash } from 'crypto';\nimport  { getPemBodyAsB64u } from '."
  },
  {
    "path": "packages/core/acme-client/src/crypto/forge.js",
    "chars": 12635,
    "preview": "/**\n * Legacy node-forge crypto interface\n *\n * DEPRECATION WARNING: This crypto interface is deprecated and will be rem"
  },
  {
    "path": "packages/core/acme-client/src/crypto/index.js",
    "chars": 17906,
    "preview": "/**\n * Native Node.js crypto interface\n *\n * @namespace crypto\n */\nimport  net from 'net';\nimport { promisify } from 'ut"
  },
  {
    "path": "packages/core/acme-client/src/error.js",
    "chars": 138,
    "preview": "export class CancelError extends Error {\n    constructor(message) {\n        super(message);\n        this.name = 'CancelE"
  },
  {
    "path": "packages/core/acme-client/src/http.js",
    "chars": 10211,
    "preview": "/**\n * ACME HTTP client\n */\nimport { createHmac, createSign, constants } from 'crypto';\nconst { RSA_PKCS1_PADDING } = co"
  },
  {
    "path": "packages/core/acme-client/src/index.js",
    "chars": 1039,
    "preview": "/**\n * acme-client\n */\nimport AcmeClinet  from './client.js'\nexport const Client = AcmeClinet\n\n/**\n * Directory URLs\n */"
  },
  {
    "path": "packages/core/acme-client/src/logger.js",
    "chars": 378,
    "preview": "/**\n * ACME logger\n */\n\nimport debugg from 'debug'\nconst debug = debugg('acme-client');\n\nlet logger = () => {};\n\n/**\n * "
  },
  {
    "path": "packages/core/acme-client/src/util.js",
    "chars": 10022,
    "preview": "/**\n * Utility methods\n */\n\nimport tls from 'tls';\nimport dnsSdk from 'dns';\nimport { readCertificateInfo, splitPemChain"
  },
  {
    "path": "packages/core/acme-client/src/verify.js",
    "chars": 7233,
    "preview": "/**\n * ACME challenge verification\n */\n\nimport dnsSdk from \"dns\"\nimport https from 'https'\nimport {log} from './logger.j"
  },
  {
    "path": "packages/core/acme-client/src/wait.js",
    "chars": 114,
    "preview": "export async function wait(ms) {\n    return new Promise((resolve) => {\n        setTimeout(resolve, ms);\n    });\n}\n"
  },
  {
    "path": "packages/core/acme-client/test/00-pebble.spec.js",
    "chars": 8087,
    "preview": "/**\n * Pebble Challenge Test Server tests\n */\n\nconst dns = require('dns').promises;\nconst { randomUUID: uuid } = require"
  },
  {
    "path": "packages/core/acme-client/test/10-http.spec.js",
    "chars": 3690,
    "preview": "/**\n * HTTP client tests\n */\n\nconst { randomUUID: uuid } = require('crypto');\nconst { assert } = require('chai');\nconst "
  },
  {
    "path": "packages/core/acme-client/test/10-logger.spec.js",
    "chars": 648,
    "preview": "/**\n * Logger tests\n */\n\nconst { assert } = require('chai');\nconst logger = require('./../src/logger');\n\ndescribe('logge"
  },
  {
    "path": "packages/core/acme-client/test/10-util.spec.js",
    "chars": 5057,
    "preview": "/**\n * Utility method tests\n */\n\nconst dns = require('dns').promises;\nconst fs = require('fs').promises;\nconst path = re"
  },
  {
    "path": "packages/core/acme-client/test/10-verify.spec.js",
    "chars": 5227,
    "preview": "/**\n * Challenge verification tests\n */\n\nconst { randomUUID: uuid } = require('crypto');\nconst { assert } = require('cha"
  },
  {
    "path": "packages/core/acme-client/test/20-crypto-legacy.spec.js",
    "chars": 9095,
    "preview": "/**\n * Legacy crypto tests\n */\n\nconst fs = require('fs').promises;\nconst path = require('path');\nconst { assert } = requ"
  },
  {
    "path": "packages/core/acme-client/test/20-crypto.spec.js",
    "chars": 14858,
    "preview": "/**\n * Crypto tests\n */\n\nconst fs = require('fs').promises;\nconst path = require('path');\nconst { assert } = require('ch"
  },
  {
    "path": "packages/core/acme-client/test/50-client.spec.js",
    "chars": 21753,
    "preview": "/**\n * ACME client tests\n */\n\nconst { randomUUID: uuid } = require('crypto');\nconst { assert } = require('chai');\nconst "
  },
  {
    "path": "packages/core/acme-client/test/70-auto.spec.js",
    "chars": 16135,
    "preview": "/**\n * ACME client.auto tests\n */\n\nconst { randomUUID: uuid } = require('crypto');\nconst { assert } = require('chai');\nc"
  },
  {
    "path": "packages/core/acme-client/test/challtestsrv.js",
    "chars": 3763,
    "preview": "/**\n * Pebble Challenge Test Server integration\n */\n\nconst { assert } = require('chai');\nconst axios = require('./../src"
  },
  {
    "path": "packages/core/acme-client/test/fixtures/certificate.crt",
    "chars": 1862,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIFMjCCAxoCCQCVordquLnq8TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJB\nVTETMBEGA1UECBMKU29tZS1TdGF"
  },
  {
    "path": "packages/core/acme-client/test/fixtures/letsencrypt.crt",
    "chars": 1383,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIDzzCCA1WgAwIBAgISA0ghDoSv5DpT3Pd3lqwjbVDDMAoGCCqGSM49BAMDMDIx\nCzAJBgNVBAYTAlVTMRYwFAYDVQQ"
  },
  {
    "path": "packages/core/acme-client/test/fixtures/private.key",
    "chars": 1675,
    "preview": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAo0nBEFBeo2XnR1kx0jV00W9EszE5Ei/zuJKLXXwTeUGMhy9h\nCqPFWQnTOD5PQUcja98p96L"
  },
  {
    "path": "packages/core/acme-client/test/fixtures/san-certificate.crt",
    "chars": 1058,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIC3zCCAcegAwIBAgIJAPZkD9qD+FX8MA0GCSqGSIb3DQEBBQUAMBYxFDASBgNV\nBAMMC2V4YW1wbGUuY29tMB4XDTE"
  },
  {
    "path": "packages/core/acme-client/test/get-cert-issuers.js",
    "chars": 1009,
    "preview": "/**\n * Get ACME certificate issuers\n */\n\nconst acme = require('./../');\nconst util = require('./../src/util');\n\nconst pe"
  },
  {
    "path": "packages/core/acme-client/test/retry.js",
    "chars": 1550,
    "preview": "const { assert } = require('chai');\nconst Promise = require('bluebird');\nconst util = require('../src/util');\n\nlet count"
  },
  {
    "path": "packages/core/acme-client/test/setup.js",
    "chars": 1200,
    "preview": "/**\n * Setup testing\n */\n\nconst fs = require('fs');\nconst chai = require('chai');\nconst chaiAsPromised = require('chai-a"
  },
  {
    "path": "packages/core/acme-client/test/soa.spec.mjs",
    "chars": 290,
    "preview": "import {assert} from 'chai'\nimport {resolveDomainBySoaRecord} from \"../src/util.js\"\ndescribe('dns', () => {\n    it('reso"
  },
  {
    "path": "packages/core/acme-client/test/spec.js",
    "chars": 3800,
    "preview": "/**\n * Assertions\n */\n\nconst { assert } = require('chai');\n\nconst spec = {};\nmodule.exports = spec;\n\n/**\n * ACME\n */\n\nsp"
  },
  {
    "path": "packages/core/acme-client/types/index.d.ts",
    "chars": 7171,
    "preview": "/**\n * acme-client type definitions\n */\n\nimport { AxiosInstance } from 'axios';\nimport * as rfc8555 from './rfc8555';\nim"
  },
  {
    "path": "packages/core/acme-client/types/index.test-d.ts",
    "chars": 2063,
    "preview": "/**\n * acme-client type definition tests\n */\n\nimport * as acme from 'acme-client';\n\n(async () => {\n    /* Client */\n    "
  },
  {
    "path": "packages/core/acme-client/types/rfc8555.d.ts",
    "chars": 2760,
    "preview": "/**\n * Account\n *\n * https://datatracker.ietf.org/doc/html/rfc8555#section-7.1.2\n * https://datatracker.ietf.org/doc/htm"
  },
  {
    "path": "packages/core/basic/.eslintrc",
    "chars": 547,
    "preview": "{\n  \"parser\": \"@typescript-eslint/parser\",\n  \"plugins\": [\n    \"@typescript-eslint\"\n  ],\n  \"extends\": [\n    \"plugin:@type"
  },
  {
    "path": "packages/core/basic/.gitignore",
    "chars": 303,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
  },
  {
    "path": "packages/core/basic/.npmignore",
    "chars": 33,
    "preview": "node_modules\nsrc\ndist/**/*.spec.*"
  },
  {
    "path": "packages/core/basic/.npmrc",
    "chars": 60,
    "preview": "link-workspace-packages=deep\nprefer-workspace-packages=true\n"
  },
  {
    "path": "packages/core/basic/.prettierrc",
    "chars": 125,
    "preview": "{\n  \"printWidth\": 220,\n  \"bracketSpacing\": true,\n  \"singleQuote\": false,\n  \"trailingComma\": \"es5\",\n  \"arrowParens\": \"avo"
  },
  {
    "path": "packages/core/basic/CHANGELOG.md",
    "chars": 16454,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "packages/core/basic/LICENSE",
    "chars": 34523,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "packages/core/basic/build.md",
    "chars": 6,
    "preview": "23:02\n"
  },
  {
    "path": "packages/core/basic/package.json",
    "chars": 1397,
    "preview": "{\n  \"name\": \"@certd/basic\",\n  \"private\": false,\n  \"version\": \"1.36.10\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.js\","
  },
  {
    "path": "packages/core/basic/readme.md",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "packages/core/basic/src/index.ts",
    "chars": 70,
    "preview": "export * from './utils/index.js';\nexport * from './utils/util.id.js';\n"
  },
  {
    "path": "packages/core/basic/src/utils/index.ts",
    "chars": 1611,
    "preview": "export * from \"./util.request.js\";\nexport * from \"./util.env.js\";\nexport * from \"./util.log.js\";\nexport * from \"./util.f"
  },
  {
    "path": "packages/core/basic/src/utils/util.amount.ts",
    "chars": 211,
    "preview": "export const amountUtils = {\n  toCent(amount: number): number {\n    return parseInt((amount * 100).toFixed(0));\n  },\n\n  "
  },
  {
    "path": "packages/core/basic/src/utils/util.cache.ts",
    "chars": 1039,
    "preview": "// LRUCache\n\nimport { LRUCache } from \"lru-cache\";\n\nexport const cache = new LRUCache<string, any>({\n  max: 1000,\n  ttl:"
  },
  {
    "path": "packages/core/basic/src/utils/util.domain.ts",
    "chars": 1188,
    "preview": "//域名是否匹配,支持通配符\nfunction match(targetDomains: string | string[], inDomains: string[]) {\n  if (!targetDomains || targetDom"
  },
  {
    "path": "packages/core/basic/src/utils/util.env.ts",
    "chars": 168,
    "preview": "export function isDev() {\n  const nodeEnv = process.env.NODE_ENV || '';\n  return nodeEnv === 'development' || nodeEnv.in"
  },
  {
    "path": "packages/core/basic/src/utils/util.file.ts",
    "chars": 360,
    "preview": "import fs from 'fs';\nfunction getFileRootDir(rootDir?: string) {\n  if (rootDir == null) {\n    const userHome = process.e"
  },
  {
    "path": "packages/core/basic/src/utils/util.hash.ts",
    "chars": 753,
    "preview": "import crypto, { BinaryToTextEncoding } from \"crypto\";\n\nfunction md5(data: string, digest: BinaryToTextEncoding = \"hex\")"
  },
  {
    "path": "packages/core/basic/src/utils/util.id.ts",
    "chars": 215,
    "preview": "import { customAlphabet } from \"nanoid\";\n\nexport const randomNumber = customAlphabet(\"1234567890\", 4);\nexport const simp"
  },
  {
    "path": "packages/core/basic/src/utils/util.lock.ts",
    "chars": 978,
    "preview": "import { logger, utils } from './index.js';\n\nexport class Locker {\n  locked: Record<string, any> = {};\n\n  async execute("
  },
  {
    "path": "packages/core/basic/src/utils/util.log.ts",
    "chars": 2120,
    "preview": "import log4js, { LoggingEvent, Logger } from \"log4js\";\n\nconst OutputAppender = {\n  configure: (config: any, layouts: any"
  },
  {
    "path": "packages/core/basic/src/utils/util.merge.ts",
    "chars": 1304,
    "preview": "import * as _ from 'lodash-es';\nfunction isUnMergeable(srcValue: any) {\n  return srcValue != null && srcValue instanceof"
  },
  {
    "path": "packages/core/basic/src/utils/util.mitter.ts",
    "chars": 55,
    "preview": "import mitt from 'mitt';\nexport const mitter = mitt();\n"
  },
  {
    "path": "packages/core/basic/src/utils/util.options.ts",
    "chars": 1149,
    "preview": "import { domainUtils } from \"./util.domain.js\";\n\nfunction groupByDomain(options: any[], inDomains: string[]) {\n  const m"
  },
  {
    "path": "packages/core/basic/src/utils/util.promise.ts",
    "chars": 1104,
    "preview": "import { logger } from \"./util.log.js\";\n\nexport function TimeoutPromise(callback: () => Promise<void>, ms = 30 * 1000) {"
  },
  {
    "path": "packages/core/basic/src/utils/util.request.ts",
    "chars": 9903,
    "preview": "import axios, { AxiosHeaders, AxiosRequestConfig } from \"axios\";\nimport { ILogger, logger } from \"./util.log.js\";\nimport"
  },
  {
    "path": "packages/core/basic/src/utils/util.sleep.ts",
    "chars": 145,
    "preview": "export default function (timeout: number) {\n  return new Promise(resolve => {\n    setTimeout(() => {\n      resolve({});\n"
  },
  {
    "path": "packages/core/basic/src/utils/util.sp.ts",
    "chars": 2834,
    "preview": "//转换为import\nimport childProcess from 'child_process';\nimport { safePromise } from './util.promise.js';\nimport { ILogger,"
  },
  {
    "path": "packages/core/basic/src/utils/util.string.ts",
    "chars": 186,
    "preview": "export const stringUtils = {\n  maxLength(str?: string, length = 100) {\n    if (str) {\n      return str.length > length ?"
  },
  {
    "path": "packages/core/basic/tsconfig.json",
    "chars": 930,
    "preview": "{\n  \"compileOnSave\": true,\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\""
  },
  {
    "path": "packages/core/pipeline/.eslintrc",
    "chars": 547,
    "preview": "{\n  \"parser\": \"@typescript-eslint/parser\",\n  \"plugins\": [\n    \"@typescript-eslint\"\n  ],\n  \"extends\": [\n    \"plugin:@type"
  },
  {
    "path": "packages/core/pipeline/.gitignore",
    "chars": 313,
    "preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndis"
  },
  {
    "path": "packages/core/pipeline/.mocharc.json",
    "chars": 56,
    "preview": "{\n  \"extension\": [\"ts\"],\n  \"spec\": \"src/**/*.spec.ts\"\n}\n"
  },
  {
    "path": "packages/core/pipeline/.npmignore",
    "chars": 33,
    "preview": "node_modules\nsrc\ndist/**/*.spec.*"
  },
  {
    "path": "packages/core/pipeline/.npmrc",
    "chars": 60,
    "preview": "link-workspace-packages=deep\nprefer-workspace-packages=true\n"
  },
  {
    "path": "packages/core/pipeline/.prettierrc",
    "chars": 125,
    "preview": "{\n  \"printWidth\": 220,\n  \"bracketSpacing\": true,\n  \"singleQuote\": false,\n  \"trailingComma\": \"es5\",\n  \"arrowParens\": \"avo"
  },
  {
    "path": "packages/core/pipeline/CHANGELOG.md",
    "chars": 32882,
    "preview": "# Change Log\n\nAll notable changes to this project will be documented in this file.\nSee [Conventional Commits](https://co"
  },
  {
    "path": "packages/core/pipeline/LICENSE",
    "chars": 34523,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "packages/core/pipeline/README.md",
    "chars": 1377,
    "preview": "# Vue 3 + TypeScript + Vite\n\nThis template should help get you started developing with Vue 3 and TypeScript in Vite. The"
  },
  {
    "path": "packages/core/pipeline/build.md",
    "chars": 6,
    "preview": "02:40\n"
  },
  {
    "path": "packages/core/pipeline/fix-esm-import-paths.js",
    "chars": 2842,
    "preview": "import * as fs from \"fs\";\nimport * as path from \"path\";\n\n// https://gist.github.com/lovasoa/8691344\nasync function* walk"
  },
  {
    "path": "packages/core/pipeline/package.json",
    "chars": 1453,
    "preview": "{\n  \"name\": \"@certd/pipeline\",\n  \"private\": false,\n  \"version\": \"1.36.10\",\n  \"type\": \"module\",\n  \"main\": \"./dist/index.j"
  },
  {
    "path": "packages/core/pipeline/src/access/api.ts",
    "chars": 1615,
    "preview": "import { Registrable } from \"../registry/index.js\";\nimport { FormItemProps } from \"../dt/index.js\";\nimport { HttpClient,"
  },
  {
    "path": "packages/core/pipeline/src/access/decorator.ts",
    "chars": 2005,
    "preview": "// src/decorator/memoryCache.decorator.ts\nimport { AccessContext, AccessDefine, AccessInputDefine, IAccessService } from"
  },
  {
    "path": "packages/core/pipeline/src/access/index.ts",
    "chars": 89,
    "preview": "export * from \"./api.js\";\nexport * from \"./registry.js\";\nexport * from \"./decorator.js\";\n"
  },
  {
    "path": "packages/core/pipeline/src/access/registry.ts",
    "chars": 126,
    "preview": "import { createRegistry } from \"../registry/index.js\";\n\n// @ts-ignore\nexport const accessRegistry = createRegistry(\"acce"
  },
  {
    "path": "packages/core/pipeline/src/context/index.ts",
    "chars": 721,
    "preview": "import { IContext } from \"../core/index.js\";\n\nexport type UserContext = IContext;\nexport type PipelineContext = IContext"
  },
  {
    "path": "packages/core/pipeline/src/core/context.ts",
    "chars": 2400,
    "preview": "import { IStorage, MemoryStorage } from \"./storage.js\";\n\nconst CONTEXT_VERSION_KEY = \"contextVersion\";\nexport interface "
  },
  {
    "path": "packages/core/pipeline/src/core/exceptions.ts",
    "chars": 329,
    "preview": "import type { ResultError } from \"../dt/index.js\";\n\nexport class CancelError extends Error {\n  constructor(message: stri"
  },
  {
    "path": "packages/core/pipeline/src/core/executor.ts",
    "chars": 16538,
    "preview": "import { ConcurrencyStrategy, NotificationWhen, Pipeline, ResultType, Runnable, RunStrategy, Stage, Step, Task, ResultEr"
  },
  {
    "path": "packages/core/pipeline/src/core/file-store.ts",
    "chars": 1603,
    "preview": "import { fileUtils } from \"@certd/basic\";\nimport dayjs from \"dayjs\";\nimport path from \"path\";\nimport fs from \"fs\";\nimpor"
  },
  {
    "path": "packages/core/pipeline/src/core/index.ts",
    "chars": 191,
    "preview": "export * from \"./executor.js\";\nexport * from \"./run-history.js\";\nexport * from \"./context.js\";\nexport * from \"./storage."
  },
  {
    "path": "packages/core/pipeline/src/core/run-history.ts",
    "chars": 5506,
    "preview": "import { HistoryResult, Pipeline, ResultType, Runnable, RunnableMap, Stage, Step, Task } from \"../dt/index.js\";\nimport *"
  },
  {
    "path": "packages/core/pipeline/src/core/storage.ts",
    "chars": 4008,
    "preview": "import fs from \"fs\";\nimport path from \"path\";\nimport { fileUtils } from \"@certd/basic\";\n\nexport interface IStorage {\n  g"
  },
  {
    "path": "packages/core/pipeline/src/decorator/index.ts",
    "chars": 28,
    "preview": "export * from \"./utils.js\";\n"
  },
  {
    "path": "packages/core/pipeline/src/decorator/utils.ts",
    "chars": 1316,
    "preview": "import * as _ from \"lodash-es\";\n\nconst propertyMap: any = {};\nfunction attachProperty(target: any, propertyKey: string |"
  }
]

// ... and 2132 more files (download for full content)

About this extraction

This page contains the full source code of the liangbin77/certd GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2332 files (15.8 MB), approximately 4.3M tokens, and a symbol index with 7657 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!