Skip to content

Commit e72f616

Browse files
Serverlesstencentdarminzhou
and
darminzhou
authored
feat: 支持函数URL (#300)
Co-authored-by: darminzhou <[email protected]>
1 parent f7b7ef0 commit e72f616

File tree

3 files changed

+109
-0
lines changed

3 files changed

+109
-0
lines changed

src/modules/triggers/http.ts

+95
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import Scf from '../scf';
2+
import { TriggerManager } from './manager';
3+
import { CapiCredentials, RegionType } from './../interface';
4+
import BaseTrigger from './base';
5+
import { HttpTriggerInputsParams, TriggerInputs, CreateTriggerReq } from './interface';
6+
7+
export default class HttpTrigger extends BaseTrigger<HttpTriggerInputsParams> {
8+
credentials: CapiCredentials;
9+
region: RegionType;
10+
11+
constructor({ credentials, region }: { credentials: CapiCredentials; region: RegionType }) {
12+
super();
13+
this.credentials = credentials;
14+
this.region = region;
15+
}
16+
17+
getKey(triggerInputs: CreateTriggerReq) {
18+
const triggerDesc = JSON.parse(triggerInputs.TriggerDesc!);
19+
const tempDest = JSON.stringify({
20+
authType: triggerDesc?.AuthType,
21+
enableIntranet: triggerDesc?.NetConfig?.EnableIntranet,
22+
enableExtranet: triggerDesc?.NetConfig?.EnableExtranet,
23+
});
24+
return `http-${tempDest}-${triggerInputs.Qualifier}`;
25+
}
26+
27+
formatInputs({ inputs }: { region: RegionType; inputs: TriggerInputs<HttpTriggerInputsParams> }) {
28+
const { parameters } = inputs;
29+
const triggerInputs: CreateTriggerReq = {
30+
Action: 'CreateTrigger',
31+
FunctionName: inputs.functionName,
32+
Namespace: inputs.namespace,
33+
34+
Type: 'http',
35+
Qualifier: parameters?.qualifier || '$DEFAULT',
36+
TriggerName: parameters?.name || 'url-trigger',
37+
TriggerDesc: JSON.stringify({
38+
AuthType: parameters?.authType || 'NONE',
39+
NetConfig: {
40+
EnableIntranet: parameters?.netConfig?.enableIntranet ?? false,
41+
EnableExtranet: parameters?.netConfig?.enableExtranet ?? false,
42+
},
43+
}),
44+
Enable: 'OPEN',
45+
};
46+
47+
const triggerKey = this.getKey(triggerInputs);
48+
49+
return {
50+
triggerInputs,
51+
triggerKey,
52+
} as any;
53+
}
54+
55+
async create({
56+
scf,
57+
region,
58+
inputs,
59+
}: {
60+
scf: Scf | TriggerManager;
61+
region: RegionType;
62+
inputs: TriggerInputs<HttpTriggerInputsParams>;
63+
}) {
64+
const { triggerInputs } = this.formatInputs({ region, inputs });
65+
console.log(`Creating ${triggerInputs.Type} trigger ${triggerInputs.TriggerName}`);
66+
const { TriggerInfo } = await scf.request(triggerInputs);
67+
TriggerInfo.Qualifier = TriggerInfo.Qualifier || triggerInputs.Qualifier;
68+
69+
return TriggerInfo;
70+
}
71+
72+
async delete({
73+
scf,
74+
inputs,
75+
}: {
76+
scf: Scf | TriggerManager;
77+
inputs: TriggerInputs<HttpTriggerInputsParams>;
78+
}) {
79+
console.log(`Removing ${inputs.type} trigger ${inputs.triggerName}`);
80+
try {
81+
await scf.request({
82+
Action: 'DeleteTrigger',
83+
FunctionName: inputs.functionName,
84+
Namespace: inputs.namespace,
85+
Type: inputs.type,
86+
TriggerName: inputs.triggerName,
87+
Qualifier: inputs.qualifier,
88+
});
89+
return true;
90+
} catch (e) {
91+
console.log(e);
92+
return false;
93+
}
94+
}
95+
}

src/modules/triggers/index.ts

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import TimerTrigger from './timer';
22
import CosTrigger from './cos';
33
import ApigwTrigger from './apigw';
4+
import HttpTrigger from './http';
45
import CkafkaTrigger from './ckafka';
56
import CmqTrigger from './cmq';
67
import ClsTrigger from './cls';
@@ -12,6 +13,7 @@ import { CapiCredentials, RegionType } from '../interface';
1213
export { default as TimerTrigger } from './timer';
1314
export { default as CosTrigger } from './cos';
1415
export { default as ApigwTrigger } from './apigw';
16+
export { default as HttpTrigger } from './http';
1517
export { default as CkafkaTrigger } from './ckafka';
1618
export { default as CmqTrigger } from './cmq';
1719
export { default as ClsTrigger } from './cls';
@@ -21,6 +23,7 @@ const TRIGGER = {
2123
timer: TimerTrigger,
2224
cos: CosTrigger,
2325
apigw: ApigwTrigger,
26+
http: HttpTrigger,
2427
ckafka: CkafkaTrigger,
2528
cmq: CmqTrigger,
2629
cls: ClsTrigger,

src/modules/triggers/interface/index.ts

+11
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,17 @@ export interface CosTriggerInputsParams {
9191
enable?: boolean;
9292
}
9393

94+
/** 函数URL参数 */
95+
export interface HttpTriggerInputsParams {
96+
qualifier?: string;
97+
name?: string;
98+
authType?: 'CAM' | 'NONE';
99+
netConfig?: {
100+
enableIntranet?: boolean;
101+
enableExtranet?: boolean;
102+
};
103+
}
104+
94105
export interface MpsTriggerInputsParams {
95106
type?: string;
96107
qualifier?: string;

0 commit comments

Comments
 (0)