mirror of https://github.com/certd/certd
				
				
				
			perf: 支持阿里云API网关
							parent
							
								
									221e068bac
								
							
						
					
					
						commit
						9e1e4eeec2
					
				| 
						 | 
				
			
			@ -120,7 +120,7 @@
 | 
			
		|||
    "@vue/compiler-sfc": "^3.4.21",
 | 
			
		||||
    "@vue/eslint-config-typescript": "^13.0.0",
 | 
			
		||||
    "@vue/test-utils": "^2.4.6",
 | 
			
		||||
    "autoprefixer": "^10.4.20",
 | 
			
		||||
    "autoprefixer": "^10.4.21",
 | 
			
		||||
    "caller-path": "^4.0.0",
 | 
			
		||||
    "chai": "^5.1.0",
 | 
			
		||||
    "dependency-cruiser": "^16.2.3",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -54,6 +54,36 @@
 | 
			
		|||
      <div class="content unicode" style="display: block;">
 | 
			
		||||
          <ul class="icon_lists dib-box">
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
              <span class="icon iconfont"></span>
 | 
			
		||||
                <div class="name">social-foursquare</div>
 | 
			
		||||
                <div class="code-name">&#xe8fb;</div>
 | 
			
		||||
              </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
              <span class="icon iconfont"></span>
 | 
			
		||||
                <div class="name">ksyun-logo</div>
 | 
			
		||||
                <div class="code-name">&#xe65a;</div>
 | 
			
		||||
              </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
              <span class="icon iconfont"></span>
 | 
			
		||||
                <div class="name">雨-copy</div>
 | 
			
		||||
                <div class="code-name">&#xe608;</div>
 | 
			
		||||
              </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
              <span class="icon iconfont"></span>
 | 
			
		||||
                <div class="name">网宿</div>
 | 
			
		||||
                <div class="code-name">&#xe655;</div>
 | 
			
		||||
              </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
              <span class="icon iconfont"></span>
 | 
			
		||||
                <div class="name">ai客服</div>
 | 
			
		||||
                <div class="code-name">&#xe727;</div>
 | 
			
		||||
              </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
              <span class="icon iconfont"></span>
 | 
			
		||||
                <div class="name">cdn</div>
 | 
			
		||||
| 
						 | 
				
			
			@ -198,7 +228,7 @@
 | 
			
		|||
<pre><code class="language-css"
 | 
			
		||||
>@font-face {
 | 
			
		||||
  font-family: 'iconfont';
 | 
			
		||||
  src: url('iconfont.svg?t=1743267254898#iconfont') format('svg');
 | 
			
		||||
  src: url('iconfont.svg?t=1754884110189#iconfont') format('svg');
 | 
			
		||||
}
 | 
			
		||||
</code></pre>
 | 
			
		||||
          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
 | 
			
		||||
| 
						 | 
				
			
			@ -224,6 +254,51 @@
 | 
			
		|||
      <div class="content font-class">
 | 
			
		||||
        <ul class="icon_lists dib-box">
 | 
			
		||||
          
 | 
			
		||||
          <li class="dib">
 | 
			
		||||
            <span class="icon iconfont icon-four"></span>
 | 
			
		||||
            <div class="name">
 | 
			
		||||
              social-foursquare
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="code-name">.icon-four
 | 
			
		||||
            </div>
 | 
			
		||||
          </li>
 | 
			
		||||
          
 | 
			
		||||
          <li class="dib">
 | 
			
		||||
            <span class="icon iconfont icon-ksyun"></span>
 | 
			
		||||
            <div class="name">
 | 
			
		||||
              ksyun-logo
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="code-name">.icon-ksyun
 | 
			
		||||
            </div>
 | 
			
		||||
          </li>
 | 
			
		||||
          
 | 
			
		||||
          <li class="dib">
 | 
			
		||||
            <span class="icon iconfont icon-rainyun"></span>
 | 
			
		||||
            <div class="name">
 | 
			
		||||
              雨-copy
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="code-name">.icon-rainyun
 | 
			
		||||
            </div>
 | 
			
		||||
          </li>
 | 
			
		||||
          
 | 
			
		||||
          <li class="dib">
 | 
			
		||||
            <span class="icon iconfont icon-wangsu"></span>
 | 
			
		||||
            <div class="name">
 | 
			
		||||
              网宿
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="code-name">.icon-wangsu
 | 
			
		||||
            </div>
 | 
			
		||||
          </li>
 | 
			
		||||
          
 | 
			
		||||
          <li class="dib">
 | 
			
		||||
            <span class="icon iconfont icon-aikefu"></span>
 | 
			
		||||
            <div class="name">
 | 
			
		||||
              ai客服
 | 
			
		||||
            </div>
 | 
			
		||||
            <div class="code-name">.icon-aikefu
 | 
			
		||||
            </div>
 | 
			
		||||
          </li>
 | 
			
		||||
          
 | 
			
		||||
          <li class="dib">
 | 
			
		||||
            <span class="icon iconfont icon-cdn"></span>
 | 
			
		||||
            <div class="name">
 | 
			
		||||
| 
						 | 
				
			
			@ -440,6 +515,46 @@
 | 
			
		|||
      <div class="content symbol">
 | 
			
		||||
          <ul class="icon_lists dib-box">
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
                <svg class="icon svg-icon" aria-hidden="true">
 | 
			
		||||
                  <use xlink:href="#icon-four"></use>
 | 
			
		||||
                </svg>
 | 
			
		||||
                <div class="name">social-foursquare</div>
 | 
			
		||||
                <div class="code-name">#icon-four</div>
 | 
			
		||||
            </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
                <svg class="icon svg-icon" aria-hidden="true">
 | 
			
		||||
                  <use xlink:href="#icon-ksyun"></use>
 | 
			
		||||
                </svg>
 | 
			
		||||
                <div class="name">ksyun-logo</div>
 | 
			
		||||
                <div class="code-name">#icon-ksyun</div>
 | 
			
		||||
            </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
                <svg class="icon svg-icon" aria-hidden="true">
 | 
			
		||||
                  <use xlink:href="#icon-rainyun"></use>
 | 
			
		||||
                </svg>
 | 
			
		||||
                <div class="name">雨-copy</div>
 | 
			
		||||
                <div class="code-name">#icon-rainyun</div>
 | 
			
		||||
            </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
                <svg class="icon svg-icon" aria-hidden="true">
 | 
			
		||||
                  <use xlink:href="#icon-wangsu"></use>
 | 
			
		||||
                </svg>
 | 
			
		||||
                <div class="name">网宿</div>
 | 
			
		||||
                <div class="code-name">#icon-wangsu</div>
 | 
			
		||||
            </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
                <svg class="icon svg-icon" aria-hidden="true">
 | 
			
		||||
                  <use xlink:href="#icon-aikefu"></use>
 | 
			
		||||
                </svg>
 | 
			
		||||
                <div class="name">ai客服</div>
 | 
			
		||||
                <div class="code-name">#icon-aikefu</div>
 | 
			
		||||
            </li>
 | 
			
		||||
          
 | 
			
		||||
            <li class="dib">
 | 
			
		||||
                <svg class="icon svg-icon" aria-hidden="true">
 | 
			
		||||
                  <use xlink:href="#icon-cdn"></use>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
@font-face {
 | 
			
		||||
  font-family: "iconfont"; /* Project id 4688792 */
 | 
			
		||||
  src: url('iconfont.svg?t=1743267254898#iconfont') format('svg');
 | 
			
		||||
  src: url('iconfont.svg?t=1754884110189#iconfont') format('svg');
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.iconfont {
 | 
			
		||||
| 
						 | 
				
			
			@ -11,6 +11,26 @@
 | 
			
		|||
  -moz-osx-font-smoothing: grayscale;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-four:before {
 | 
			
		||||
  content: "\e8fb";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-ksyun:before {
 | 
			
		||||
  content: "\e65a";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-rainyun:before {
 | 
			
		||||
  content: "\e608";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-wangsu:before {
 | 
			
		||||
  content: "\e655";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-aikefu:before {
 | 
			
		||||
  content: "\e727";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.icon-cdn:before {
 | 
			
		||||
  content: "\e6e4";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
				
			
			@ -5,6 +5,41 @@
 | 
			
		|||
  "css_prefix_text": "icon-",
 | 
			
		||||
  "description": "",
 | 
			
		||||
  "glyphs": [
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "544964",
 | 
			
		||||
      "name": "social-foursquare",
 | 
			
		||||
      "font_class": "four",
 | 
			
		||||
      "unicode": "e8fb",
 | 
			
		||||
      "unicode_decimal": 59643
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "8567079",
 | 
			
		||||
      "name": "ksyun-logo",
 | 
			
		||||
      "font_class": "ksyun",
 | 
			
		||||
      "unicode": "e65a",
 | 
			
		||||
      "unicode_decimal": 58970
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "42174864",
 | 
			
		||||
      "name": "雨-copy",
 | 
			
		||||
      "font_class": "rainyun",
 | 
			
		||||
      "unicode": "e608",
 | 
			
		||||
      "unicode_decimal": 58888
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "14065547",
 | 
			
		||||
      "name": "网宿",
 | 
			
		||||
      "font_class": "wangsu",
 | 
			
		||||
      "unicode": "e655",
 | 
			
		||||
      "unicode_decimal": 58965
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "41324539",
 | 
			
		||||
      "name": "ai客服",
 | 
			
		||||
      "font_class": "aikefu",
 | 
			
		||||
      "unicode": "e727",
 | 
			
		||||
      "unicode_decimal": 59175
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
      "icon_id": "13592652",
 | 
			
		||||
      "name": "cdn",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
		 Before Width: | Height: | Size: 49 KiB After Width: | Height: | Size: 77 KiB  | 
| 
						 | 
				
			
			@ -91,6 +91,7 @@
 | 
			
		|||
    "jsonwebtoken": "^9.0.0",
 | 
			
		||||
    "jszip": "^3.10.1",
 | 
			
		||||
    "koa-send": "^5.0.1",
 | 
			
		||||
    "ksyun-sdk-node": "^1.2.4",
 | 
			
		||||
    "kubernetes-client": "^9.0.0",
 | 
			
		||||
    "lodash-es": "^4.17.21",
 | 
			
		||||
    "log4js": "^6.7.1",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,228 @@
 | 
			
		|||
import {AbstractTaskPlugin, IsTaskPlugin, pluginGroups, RunStrategy, TaskInput} from '@certd/pipeline';
 | 
			
		||||
import {AliyunAccess, createCertDomainGetterInputDefine, createRemoteSelectInputDefine} from "@certd/plugin-lib";
 | 
			
		||||
import {CertApplyPluginNames, CertInfo} from '@certd/plugin-cert';
 | 
			
		||||
import {optionsUtils} from "@certd/basic/dist/utils/util.options.js";
 | 
			
		||||
 | 
			
		||||
@IsTaskPlugin({
 | 
			
		||||
  name: 'DeployCertToAliyunApiGateway',
 | 
			
		||||
  title: '阿里云-部署证书至API网关',
 | 
			
		||||
  icon: 'svg:icon-aliyun',
 | 
			
		||||
  group: pluginGroups.aliyun.key,
 | 
			
		||||
  desc: '自动部署域名证书至阿里云API网关(APIGateway)',
 | 
			
		||||
  default: {
 | 
			
		||||
    strategy: {
 | 
			
		||||
      runStrategy: RunStrategy.SkipWhenSucceed,
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
})
 | 
			
		||||
export class DeployCertToAliyunApiGateway extends AbstractTaskPlugin {
 | 
			
		||||
  @TaskInput({
 | 
			
		||||
    title: '域名证书',
 | 
			
		||||
    helper: '请选择前置任务输出的域名证书',
 | 
			
		||||
    component: {
 | 
			
		||||
      name: 'output-selector',
 | 
			
		||||
      from: [...CertApplyPluginNames],
 | 
			
		||||
    },
 | 
			
		||||
    required: true,
 | 
			
		||||
  })
 | 
			
		||||
  cert!: CertInfo;
 | 
			
		||||
 | 
			
		||||
  @TaskInput(createCertDomainGetterInputDefine({ props: { required: false } }))
 | 
			
		||||
  certDomains!: string[];
 | 
			
		||||
 | 
			
		||||
  @TaskInput({
 | 
			
		||||
    title: 'Access授权',
 | 
			
		||||
    helper: '阿里云授权AccessKeyId、AccessKeySecret',
 | 
			
		||||
    component: {
 | 
			
		||||
      name: 'access-selector',
 | 
			
		||||
      type: 'aliyun',
 | 
			
		||||
    },
 | 
			
		||||
    required: true,
 | 
			
		||||
  })
 | 
			
		||||
  accessId!: string;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  @TaskInput({
 | 
			
		||||
    title: '证书名称',
 | 
			
		||||
    helper: '上传后将以此名称作为前缀备注',
 | 
			
		||||
  })
 | 
			
		||||
  certName!: string;
 | 
			
		||||
 | 
			
		||||
  @TaskInput(
 | 
			
		||||
    createRemoteSelectInputDefine({
 | 
			
		||||
      title: '区域',
 | 
			
		||||
      helper: '请选择区域',
 | 
			
		||||
      action: DeployCertToAliyunApiGateway.prototype.onGetRegionList.name,
 | 
			
		||||
      watches: ['certDomains', 'accessId'],
 | 
			
		||||
      required: true,
 | 
			
		||||
      component:{
 | 
			
		||||
        name:"remote-auto-complete"
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
  regionEndpoint!: string;
 | 
			
		||||
 | 
			
		||||
  @TaskInput(
 | 
			
		||||
    createRemoteSelectInputDefine({
 | 
			
		||||
      title: 'API分组',
 | 
			
		||||
      helper: '请选择API分组',
 | 
			
		||||
      action: DeployCertToAliyunApiGateway.prototype.onGetGroupList.name,
 | 
			
		||||
      watches: ['regionEndpoint', 'accessId'],
 | 
			
		||||
      required: true,
 | 
			
		||||
      component:{
 | 
			
		||||
        name:"remote-auto-complete"
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
  groupId!: string;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  @TaskInput(
 | 
			
		||||
    createRemoteSelectInputDefine({
 | 
			
		||||
      title: '绑定域名',
 | 
			
		||||
      helper: '在API分组上配置的绑定域名',
 | 
			
		||||
      action: DeployCertToAliyunApiGateway.prototype.onGetDomainList.name,
 | 
			
		||||
      watches: ['groupId','regionEndpoint',  'accessId'],
 | 
			
		||||
      required: true,
 | 
			
		||||
    })
 | 
			
		||||
  )
 | 
			
		||||
  customDomains!: string[];
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  async onInstance() {}
 | 
			
		||||
  async execute(): Promise<void> {
 | 
			
		||||
    this.logger.info('开始部署证书到阿里云Api网关');
 | 
			
		||||
    if(!this.customDomains){
 | 
			
		||||
      throw new Error('您还未选择域名');
 | 
			
		||||
    }
 | 
			
		||||
    const access = await this.getAccess<AliyunAccess>(this.accessId);
 | 
			
		||||
    const client = access.getClient(this.regionEndpoint)
 | 
			
		||||
 | 
			
		||||
    for (const domainName of this.customDomains ) {
 | 
			
		||||
      this.logger.info(`[${domainName}]开始部署`)
 | 
			
		||||
      await this.updateCert(client, domainName);
 | 
			
		||||
      this.logger.info(`[${domainName}]部署成功`)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.logger.info('部署完成');
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  async updateCert(client: any, domainName: string) {
 | 
			
		||||
   const ret = await client.doRequest({
 | 
			
		||||
      // 接口名称
 | 
			
		||||
      action: "SetDomainCertificate",
 | 
			
		||||
      // 接口版本
 | 
			
		||||
      version: "2016-07-14",
 | 
			
		||||
      data:{
 | 
			
		||||
        query:{
 | 
			
		||||
          GroupId: this.groupId,
 | 
			
		||||
          DomainName: domainName,
 | 
			
		||||
          CertificateName: this.buildCertName(domainName),
 | 
			
		||||
          CertificateBody: this.cert.crt,
 | 
			
		||||
          CertificatePrivateKey: this.cert.key
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
    this.logger.info(`设置${domainName}证书成功:`, ret.RequestId);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  async onGetGroupList(data: any) {
 | 
			
		||||
    if (!this.accessId) {
 | 
			
		||||
      throw new Error('请选择Access授权');
 | 
			
		||||
    }
 | 
			
		||||
    if (!this.regionEndpoint) {
 | 
			
		||||
      throw new Error('请选择区域');
 | 
			
		||||
    }
 | 
			
		||||
    const access = await this.getAccess<AliyunAccess>(this.accessId);
 | 
			
		||||
    const client = access.getClient(this.regionEndpoint)
 | 
			
		||||
    const res =await client.doRequest({
 | 
			
		||||
      // 接口名称
 | 
			
		||||
      action: "DescribeApiGroups",
 | 
			
		||||
      // 接口版本
 | 
			
		||||
      version: "2016-07-14",
 | 
			
		||||
      data:{}
 | 
			
		||||
    })
 | 
			
		||||
    const list = res?.ApiGroupAttributes?.ApiGroupAttribute;
 | 
			
		||||
    if (!list || list.length === 0) {
 | 
			
		||||
      throw new Error('没有数据,您可以手动输入API网关ID');
 | 
			
		||||
    }
 | 
			
		||||
    return list.map((item: any) => {
 | 
			
		||||
      return {
 | 
			
		||||
        value: item.GroupId,
 | 
			
		||||
        label: `${item.GroupName}<${item.GroupId}>`,
 | 
			
		||||
      };
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  async onGetDomainList(data: any) {
 | 
			
		||||
    if (!this.accessId) {
 | 
			
		||||
      throw new Error('请选择Access授权');
 | 
			
		||||
    }
 | 
			
		||||
    if (!this.regionEndpoint) {
 | 
			
		||||
      throw new Error('请选择区域');
 | 
			
		||||
    }
 | 
			
		||||
    if (!this.groupId) {
 | 
			
		||||
      throw new Error('请选择分组');
 | 
			
		||||
    }
 | 
			
		||||
    const access = await this.getAccess<AliyunAccess>(this.accessId);
 | 
			
		||||
 | 
			
		||||
    const client = access.getClient(this.regionEndpoint)
 | 
			
		||||
 | 
			
		||||
      const res =await client.doRequest({
 | 
			
		||||
        // 接口名称
 | 
			
		||||
        action: "DescribeApiGroup",
 | 
			
		||||
        // 接口版本
 | 
			
		||||
        version: "2016-07-14",
 | 
			
		||||
        data:{
 | 
			
		||||
          query:{
 | 
			
		||||
            GroupId: this.groupId
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      })
 | 
			
		||||
    const list = res?.CustomDomains?.DomainItem;
 | 
			
		||||
    if (!list || list.length === 0) {
 | 
			
		||||
      throw new Error('没有数据,您可以手动输入');
 | 
			
		||||
    }
 | 
			
		||||
    const options = list.map((item: any) => {
 | 
			
		||||
      return {
 | 
			
		||||
        value: item.DomainName,
 | 
			
		||||
        label: `${item.DomainName}<${item.CertificateName}>`,
 | 
			
		||||
        domain: item.DomainName,
 | 
			
		||||
      };
 | 
			
		||||
    });
 | 
			
		||||
    return optionsUtils.buildGroupOptions(options, this.certDomains);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  async onGetRegionList(data: any) {
 | 
			
		||||
    if (!this.accessId) {
 | 
			
		||||
      throw new Error('请选择Access授权');
 | 
			
		||||
    }
 | 
			
		||||
    const access = await this.getAccess<AliyunAccess>(this.accessId);
 | 
			
		||||
 | 
			
		||||
    const client = access.getClient("apigateway.cn-hangzhou.aliyuncs.com")
 | 
			
		||||
 | 
			
		||||
    const res =await client.doRequest({
 | 
			
		||||
      // 接口名称
 | 
			
		||||
      action: "DescribeRegions",
 | 
			
		||||
      // 接口版本
 | 
			
		||||
      version: "2016-07-14",
 | 
			
		||||
      data:{}
 | 
			
		||||
    })
 | 
			
		||||
    const list = res.Regions.Region ;
 | 
			
		||||
    if (!list || list.length === 0) {
 | 
			
		||||
      throw new Error('没有数据,您可以手动输入');
 | 
			
		||||
    }
 | 
			
		||||
    return list.map((item: any) => {
 | 
			
		||||
      return {
 | 
			
		||||
        value: item.RegionEndpoint,
 | 
			
		||||
        label: item.LocalName,
 | 
			
		||||
        endpoint: item.RegionEndpoint,
 | 
			
		||||
        regionId: item.RegionId
 | 
			
		||||
      };
 | 
			
		||||
    });
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
new DeployCertToAliyunApiGateway();
 | 
			
		||||
| 
						 | 
				
			
			@ -79,10 +79,10 @@ export class DeployCertToAliyunDCDN extends AbstractTaskPlugin {
 | 
			
		|||
      this.domainName = [this.domainName];
 | 
			
		||||
    }
 | 
			
		||||
    for (const domainName of this.domainName ) {
 | 
			
		||||
      this.logger.info(`[${this.domainName}]开始部署`)
 | 
			
		||||
      this.logger.info(`[${domainName}]开始部署`)
 | 
			
		||||
      const params = await this.buildParams(domainName);
 | 
			
		||||
      await this.doRequest(client, params);
 | 
			
		||||
      this.logger.info(`[${this.domainName}]部署成功`)
 | 
			
		||||
      this.logger.info(`[${domainName}]部署成功`)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    this.logger.info('部署完成');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,3 +9,4 @@ export * from './deploy-to-slb/index.js';
 | 
			
		|||
export * from './deploy-to-fc/index.js';
 | 
			
		||||
export * from './deploy-to-esa/index.js';
 | 
			
		||||
export * from './deploy-to-vod/index.js';
 | 
			
		||||
export * from './deploy-to-apigateway/index.js';
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										107
									
								
								pnpm-lock.yaml
								
								
								
								
							
							
						
						
									
										107
									
								
								pnpm-lock.yaml
								
								
								
								
							| 
						 | 
				
			
			@ -49,7 +49,7 @@ importers:
 | 
			
		|||
  packages/core/acme-client:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../basic
 | 
			
		||||
      '@peculiar/x509':
 | 
			
		||||
        specifier: ^1.11.0
 | 
			
		||||
| 
						 | 
				
			
			@ -210,10 +210,10 @@ importers:
 | 
			
		|||
  packages/core/pipeline:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../basic
 | 
			
		||||
      '@certd/plus-core':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../pro/plus-core
 | 
			
		||||
      dayjs:
 | 
			
		||||
        specifier: ^1.11.7
 | 
			
		||||
| 
						 | 
				
			
			@ -418,7 +418,7 @@ importers:
 | 
			
		|||
  packages/libs/lib-k8s:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/basic
 | 
			
		||||
      '@kubernetes/client-node':
 | 
			
		||||
        specifier: 0.21.0
 | 
			
		||||
| 
						 | 
				
			
			@ -458,16 +458,16 @@ importers:
 | 
			
		|||
  packages/libs/lib-server:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@certd/acme-client':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/acme-client
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/basic
 | 
			
		||||
      '@certd/pipeline':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/pipeline
 | 
			
		||||
      '@certd/plus-core':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../pro/plus-core
 | 
			
		||||
      '@midwayjs/cache':
 | 
			
		||||
        specifier: ~3.14.0
 | 
			
		||||
| 
						 | 
				
			
			@ -610,16 +610,16 @@ importers:
 | 
			
		|||
  packages/plugins/plugin-cert:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@certd/acme-client':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/acme-client
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/basic
 | 
			
		||||
      '@certd/pipeline':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/pipeline
 | 
			
		||||
      '@certd/plugin-lib':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../plugin-lib
 | 
			
		||||
      '@google-cloud/publicca':
 | 
			
		||||
        specifier: ^1.3.0
 | 
			
		||||
| 
						 | 
				
			
			@ -701,10 +701,10 @@ importers:
 | 
			
		|||
        specifier: ^3.787.0
 | 
			
		||||
        version: 3.810.0(aws-crt@1.26.2)
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/basic
 | 
			
		||||
      '@certd/pipeline':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/pipeline
 | 
			
		||||
      '@kubernetes/client-node':
 | 
			
		||||
        specifier: 0.21.0
 | 
			
		||||
| 
						 | 
				
			
			@ -792,19 +792,19 @@ importers:
 | 
			
		|||
  packages/pro/commercial-core:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/basic
 | 
			
		||||
      '@certd/lib-server':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../libs/lib-server
 | 
			
		||||
      '@certd/pipeline':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/pipeline
 | 
			
		||||
      '@certd/plugin-plus':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../plugin-plus
 | 
			
		||||
      '@certd/plus-core':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../plus-core
 | 
			
		||||
      '@midwayjs/core':
 | 
			
		||||
        specifier: ~3.20.3
 | 
			
		||||
| 
						 | 
				
			
			@ -889,22 +889,22 @@ importers:
 | 
			
		|||
        specifier: ^1.0.2
 | 
			
		||||
        version: 1.0.3
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/basic
 | 
			
		||||
      '@certd/lib-k8s':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../libs/lib-k8s
 | 
			
		||||
      '@certd/pipeline':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/pipeline
 | 
			
		||||
      '@certd/plugin-cert':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../plugins/plugin-cert
 | 
			
		||||
      '@certd/plugin-lib':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../plugins/plugin-lib
 | 
			
		||||
      '@certd/plus-core':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../plus-core
 | 
			
		||||
      ali-oss:
 | 
			
		||||
        specifier: ^6.21.0
 | 
			
		||||
| 
						 | 
				
			
			@ -1007,7 +1007,7 @@ importers:
 | 
			
		|||
  packages/pro/plus-core:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/basic
 | 
			
		||||
      dayjs:
 | 
			
		||||
        specifier: ^1.11.7
 | 
			
		||||
| 
						 | 
				
			
			@ -1297,10 +1297,10 @@ importers:
 | 
			
		|||
        version: 0.1.3(zod@3.24.4)
 | 
			
		||||
    devDependencies:
 | 
			
		||||
      '@certd/lib-iframe':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../libs/lib-iframe
 | 
			
		||||
      '@certd/pipeline':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/pipeline
 | 
			
		||||
      '@rollup/plugin-commonjs':
 | 
			
		||||
        specifier: ^25.0.7
 | 
			
		||||
| 
						 | 
				
			
			@ -1348,7 +1348,7 @@ importers:
 | 
			
		|||
        specifier: ^2.4.6
 | 
			
		||||
        version: 2.4.6
 | 
			
		||||
      autoprefixer:
 | 
			
		||||
        specifier: ^10.4.20
 | 
			
		||||
        specifier: ^10.4.21
 | 
			
		||||
        version: 10.4.21(postcss@8.5.6)
 | 
			
		||||
      caller-path:
 | 
			
		||||
        specifier: ^4.0.0
 | 
			
		||||
| 
						 | 
				
			
			@ -1390,7 +1390,7 @@ importers:
 | 
			
		|||
        specifier: ^12.2.0
 | 
			
		||||
        version: 12.3.0(less@4.3.0)
 | 
			
		||||
      postcss:
 | 
			
		||||
        specifier: ^8.5.6
 | 
			
		||||
        specifier: ^8.4.35
 | 
			
		||||
        version: 8.5.6
 | 
			
		||||
      prettier:
 | 
			
		||||
        specifier: 3.3.3
 | 
			
		||||
| 
						 | 
				
			
			@ -1414,7 +1414,7 @@ importers:
 | 
			
		|||
        specifier: ^6.0.4
 | 
			
		||||
        version: 6.0.4(stylelint@15.11.0(typescript@5.8.3))
 | 
			
		||||
      tailwindcss:
 | 
			
		||||
        specifier: ^3.4.17
 | 
			
		||||
        specifier: ^3.4.14
 | 
			
		||||
        version: 3.4.17(ts-node@10.9.2(@types/node@18.19.100)(typescript@5.8.3))
 | 
			
		||||
      terser:
 | 
			
		||||
        specifier: ^5.29.2
 | 
			
		||||
| 
						 | 
				
			
			@ -1432,7 +1432,7 @@ importers:
 | 
			
		|||
        specifier: ^1.4.2
 | 
			
		||||
        version: 1.5.5(vue@3.5.14(typescript@5.8.3))
 | 
			
		||||
      vite:
 | 
			
		||||
        specifier: ^5.4.19
 | 
			
		||||
        specifier: ^5.3.1
 | 
			
		||||
        version: 5.4.19(@types/node@18.19.100)(less@4.3.0)(terser@5.39.1)
 | 
			
		||||
      vite-plugin-compression:
 | 
			
		||||
        specifier: ^0.5.1
 | 
			
		||||
| 
						 | 
				
			
			@ -1483,46 +1483,46 @@ importers:
 | 
			
		|||
        specifier: ^3.705.0
 | 
			
		||||
        version: 3.810.0(aws-crt@1.26.2)
 | 
			
		||||
      '@certd/acme-client':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/acme-client
 | 
			
		||||
      '@certd/basic':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/basic
 | 
			
		||||
      '@certd/commercial-core':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../pro/commercial-core
 | 
			
		||||
      '@certd/cv4pve-api-javascript':
 | 
			
		||||
        specifier: ^8.4.1
 | 
			
		||||
        version: 8.4.1
 | 
			
		||||
      '@certd/jdcloud':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../libs/lib-jdcloud
 | 
			
		||||
      '@certd/lib-huawei':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../libs/lib-huawei
 | 
			
		||||
      '@certd/lib-k8s':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../libs/lib-k8s
 | 
			
		||||
      '@certd/lib-server':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../libs/lib-server
 | 
			
		||||
      '@certd/midway-flyway-js':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../libs/midway-flyway-js
 | 
			
		||||
      '@certd/pipeline':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../core/pipeline
 | 
			
		||||
      '@certd/plugin-cert':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../plugins/plugin-cert
 | 
			
		||||
      '@certd/plugin-lib':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../plugins/plugin-lib
 | 
			
		||||
      '@certd/plugin-plus':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../pro/plugin-plus
 | 
			
		||||
      '@certd/plus-core':
 | 
			
		||||
        specifier: ^1.36.10
 | 
			
		||||
        specifier: ^1.36.15
 | 
			
		||||
        version: link:../../pro/plus-core
 | 
			
		||||
      '@huaweicloud/huaweicloud-sdk-cdn':
 | 
			
		||||
        specifier: ^3.1.120
 | 
			
		||||
| 
						 | 
				
			
			@ -1629,6 +1629,9 @@ importers:
 | 
			
		|||
      koa-send:
 | 
			
		||||
        specifier: ^5.0.1
 | 
			
		||||
        version: 5.0.1
 | 
			
		||||
      ksyun-sdk-node:
 | 
			
		||||
        specifier: ^1.2.4
 | 
			
		||||
        version: 1.2.4(encoding@0.1.13)
 | 
			
		||||
      kubernetes-client:
 | 
			
		||||
        specifier: ^9.0.0
 | 
			
		||||
        version: 9.0.0
 | 
			
		||||
| 
						 | 
				
			
			@ -9186,6 +9189,9 @@ packages:
 | 
			
		|||
  kolorist@1.8.0:
 | 
			
		||||
    resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
 | 
			
		||||
 | 
			
		||||
  ksyun-sdk-node@1.2.4:
 | 
			
		||||
    resolution: {integrity: sha512-W/c1nhnZskadPP7ObmizMh+jJeHXWka0HkS8lcZfLWxwEH83B8iMFF0DrtSaDCjQRuBpgzwDLGbbp+U1D1rXlQ==}
 | 
			
		||||
 | 
			
		||||
  kubernetes-client@9.0.0:
 | 
			
		||||
    resolution: {integrity: sha512-Qy8o42dZVHB9P+cIiKdWpQbz/65l/qW1fDYvlzzeSLftmL1Ne3HEiM+0TmKAwNuRW0pTJN2tRWhcccToclxJ8g==}
 | 
			
		||||
    engines: {node: '>=10.13.0'}
 | 
			
		||||
| 
						 | 
				
			
			@ -23512,6 +23518,17 @@ snapshots:
 | 
			
		|||
 | 
			
		||||
  kolorist@1.8.0: {}
 | 
			
		||||
 | 
			
		||||
  ksyun-sdk-node@1.2.4(encoding@0.1.13):
 | 
			
		||||
    dependencies:
 | 
			
		||||
      abort-controller: 3.0.0
 | 
			
		||||
      core-js: 3.42.0
 | 
			
		||||
      crypto-js: 4.2.0
 | 
			
		||||
      dayjs: 1.11.13
 | 
			
		||||
      node-fetch: 2.7.0(encoding@0.1.13)
 | 
			
		||||
      qs: 6.14.0
 | 
			
		||||
    transitivePeerDependencies:
 | 
			
		||||
      - encoding
 | 
			
		||||
 | 
			
		||||
  kubernetes-client@9.0.0:
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@kubernetes/client-node': 0.10.2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue