@@ -2,7 +2,9 @@ import Scf from '../scf';
2
2
import { TriggerManager } from './manager' ;
3
3
import { CapiCredentials , RegionType } from './../interface' ;
4
4
import BaseTrigger from './base' ;
5
- import { HttpTriggerInputsParams , TriggerInputs , CreateTriggerReq } from './interface' ;
5
+ import { HttpTriggerInputsParams , TriggerInputs , CreateTriggerReq , TriggerAction } from './interface' ;
6
+ import { caseForObject } from '../../utils' ;
7
+ import { getScfTriggerByName } from './utils' ;
6
8
7
9
export default class HttpTrigger extends BaseTrigger < HttpTriggerInputsParams > {
8
10
credentials : CapiCredentials ;
@@ -15,31 +17,33 @@ export default class HttpTrigger extends BaseTrigger<HttpTriggerInputsParams> {
15
17
}
16
18
17
19
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 } ` ;
20
+ return `http-${ triggerInputs ?. TriggerName } ` ;
25
21
}
26
22
27
- formatInputs ( { inputs } : { region : RegionType ; inputs : TriggerInputs < HttpTriggerInputsParams > } ) {
23
+ formatInputs ( { inputs, action = 'CreateTrigger' } : { region : RegionType ; inputs : TriggerInputs < HttpTriggerInputsParams > , action ?: TriggerAction } ) {
28
24
const { parameters } = inputs ;
25
+ const triggerName = parameters ?. name || 'url-trigger' ;
26
+ const { origins, headers, methods, exposeHeaders } = parameters ?. corsConfig || { }
29
27
const triggerInputs : CreateTriggerReq = {
30
- Action : 'CreateTrigger' ,
28
+ Action : action ,
31
29
FunctionName : inputs . functionName ,
32
30
Namespace : inputs . namespace ,
33
-
34
31
Type : 'http' ,
35
32
Qualifier : parameters ?. qualifier || '$DEFAULT' ,
36
- TriggerName : parameters ?. name || 'url-trigger' ,
33
+ TriggerName : triggerName ,
37
34
TriggerDesc : JSON . stringify ( {
38
35
AuthType : parameters ?. authType || 'NONE' ,
39
36
NetConfig : {
40
37
EnableIntranet : parameters ?. netConfig ?. enableIntranet ?? false ,
41
38
EnableExtranet : parameters ?. netConfig ?. enableExtranet ?? false ,
42
39
} ,
40
+ CorsConfig : parameters ?. corsConfig ? caseForObject ( {
41
+ ...parameters ?. corsConfig ,
42
+ origins : typeof origins === 'string' ? origins ?. split ( ',' ) : origins ,
43
+ methods : typeof methods === 'string' ? methods ?. split ( ',' ) : methods ,
44
+ headers : typeof headers === 'string' ? headers ?. split ( ',' ) : headers ,
45
+ exposeHeaders : typeof exposeHeaders === 'string' ? exposeHeaders ?. split ( ',' ) : exposeHeaders ,
46
+ } , 'upper' ) : undefined
43
47
} ) ,
44
48
Enable : 'OPEN' ,
45
49
} ;
@@ -61,12 +65,29 @@ export default class HttpTrigger extends BaseTrigger<HttpTriggerInputsParams> {
61
65
region : RegionType ;
62
66
inputs : TriggerInputs < HttpTriggerInputsParams > ;
63
67
} ) {
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 ;
68
+ // 查询当前触发器是否已存在
69
+ const existTrigger = await getScfTriggerByName ( { scf, region, inputs } ) ;
70
+ // 更新触发器
71
+ if ( existTrigger ) {
72
+ const { triggerInputs } = this . formatInputs ( { region, inputs, action : 'UpdateTrigger' } ) ;
73
+ console . log ( `${ triggerInputs . Type } trigger ${ triggerInputs . TriggerName } is exist` )
74
+ console . log ( `Updating ${ triggerInputs . Type } trigger ${ triggerInputs . TriggerName } ` ) ;
75
+ try {
76
+ // 更新触发器
77
+ await scf . request ( triggerInputs ) ;
78
+ // 更新成功后,查询最新的触发器信息
79
+ const trigger = await getScfTriggerByName ( { scf, region, inputs } ) ;
80
+ return trigger ;
81
+ } catch ( error ) {
82
+ return { }
83
+ }
84
+ } else { // 创建触发器
85
+ const { triggerInputs } = this . formatInputs ( { region, inputs } ) ;
86
+ console . log ( `Creating ${ triggerInputs . Type } trigger ${ triggerInputs . TriggerName } ` ) ;
87
+ const { TriggerInfo } = await scf . request ( triggerInputs ) ;
88
+ TriggerInfo . Qualifier = TriggerInfo . Qualifier || triggerInputs . Qualifier ;
89
+ return TriggerInfo ;
90
+ }
70
91
}
71
92
72
93
async delete ( {
0 commit comments