From 3d2a5e9e265f96f87f80bbb452e620e36810bf2d Mon Sep 17 00:00:00 2001 From: darminzhou Date: Tue, 11 Jun 2024 16:12:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=87=BD=E6=95=B0URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/modules/triggers/http.ts | 95 +++++++++++++++++++++++++ src/modules/triggers/index.ts | 3 + src/modules/triggers/interface/index.ts | 11 +++ 3 files changed, 109 insertions(+) create mode 100644 src/modules/triggers/http.ts diff --git a/src/modules/triggers/http.ts b/src/modules/triggers/http.ts new file mode 100644 index 0000000..dc20dfb --- /dev/null +++ b/src/modules/triggers/http.ts @@ -0,0 +1,95 @@ +import Scf from '../scf'; +import { TriggerManager } from './manager'; +import { CapiCredentials, RegionType } from './../interface'; +import BaseTrigger from './base'; +import { HttpTriggerInputsParams, TriggerInputs, CreateTriggerReq } from './interface'; + +export default class HttpTrigger extends BaseTrigger { + credentials: CapiCredentials; + region: RegionType; + + constructor({ credentials, region }: { credentials: CapiCredentials; region: RegionType }) { + super(); + this.credentials = credentials; + this.region = region; + } + + getKey(triggerInputs: CreateTriggerReq) { + const triggerDesc = JSON.parse(triggerInputs.TriggerDesc!); + const tempDest = JSON.stringify({ + authType: triggerDesc?.AuthType, + enableIntranet: triggerDesc?.NetConfig?.EnableIntranet, + enableExtranet: triggerDesc?.NetConfig?.EnableExtranet, + }); + return `http-${tempDest}-${triggerInputs.Qualifier}`; + } + + formatInputs({ inputs }: { region: RegionType; inputs: TriggerInputs }) { + const { parameters } = inputs; + const triggerInputs: CreateTriggerReq = { + Action: 'CreateTrigger', + FunctionName: inputs.functionName, + Namespace: inputs.namespace, + + Type: 'http', + Qualifier: parameters?.qualifier || '$DEFAULT', + TriggerName: parameters?.name || 'url-trigger', + TriggerDesc: JSON.stringify({ + AuthType: parameters?.authType || 'NONE', + NetConfig: { + EnableIntranet: parameters?.netConfig?.enableIntranet ?? false, + EnableExtranet: parameters?.netConfig?.enableExtranet ?? false, + }, + }), + Enable: 'OPEN', + }; + + const triggerKey = this.getKey(triggerInputs); + + return { + triggerInputs, + triggerKey, + } as any; + } + + async create({ + scf, + region, + inputs, + }: { + scf: Scf | TriggerManager; + region: RegionType; + inputs: TriggerInputs; + }) { + const { triggerInputs } = this.formatInputs({ region, inputs }); + console.log(`Creating ${triggerInputs.Type} trigger ${triggerInputs.TriggerName}`); + const { TriggerInfo } = await scf.request(triggerInputs); + TriggerInfo.Qualifier = TriggerInfo.Qualifier || triggerInputs.Qualifier; + + return TriggerInfo; + } + + async delete({ + scf, + inputs, + }: { + scf: Scf | TriggerManager; + inputs: TriggerInputs; + }) { + console.log(`Removing ${inputs.type} trigger ${inputs.triggerName}`); + try { + await scf.request({ + Action: 'DeleteTrigger', + FunctionName: inputs.functionName, + Namespace: inputs.namespace, + Type: inputs.type, + TriggerName: inputs.triggerName, + Qualifier: inputs.qualifier, + }); + return true; + } catch (e) { + console.log(e); + return false; + } + } +} diff --git a/src/modules/triggers/index.ts b/src/modules/triggers/index.ts index 78b67b0..45c0735 100644 --- a/src/modules/triggers/index.ts +++ b/src/modules/triggers/index.ts @@ -1,6 +1,7 @@ import TimerTrigger from './timer'; import CosTrigger from './cos'; import ApigwTrigger from './apigw'; +import HttpTrigger from './http'; import CkafkaTrigger from './ckafka'; import CmqTrigger from './cmq'; import ClsTrigger from './cls'; @@ -12,6 +13,7 @@ import { CapiCredentials, RegionType } from '../interface'; export { default as TimerTrigger } from './timer'; export { default as CosTrigger } from './cos'; export { default as ApigwTrigger } from './apigw'; +export { default as HttpTrigger } from './http'; export { default as CkafkaTrigger } from './ckafka'; export { default as CmqTrigger } from './cmq'; export { default as ClsTrigger } from './cls'; @@ -21,6 +23,7 @@ const TRIGGER = { timer: TimerTrigger, cos: CosTrigger, apigw: ApigwTrigger, + http: HttpTrigger, ckafka: CkafkaTrigger, cmq: CmqTrigger, cls: ClsTrigger, diff --git a/src/modules/triggers/interface/index.ts b/src/modules/triggers/interface/index.ts index 0b7c65d..3717e08 100644 --- a/src/modules/triggers/interface/index.ts +++ b/src/modules/triggers/interface/index.ts @@ -91,6 +91,17 @@ export interface CosTriggerInputsParams { enable?: boolean; } +/** 函数URL参数 */ +export interface HttpTriggerInputsParams { + qualifier?: string; + name?: string; + authType?: 'CAM' | 'NONE'; + netConfig?: { + enableIntranet?: boolean; + enableExtranet?: boolean; + }; +} + export interface MpsTriggerInputsParams { type?: string; qualifier?: string;