@@ -22,16 +22,47 @@ export const threatFeed: CliSubcommand = {
22
22
throw new AuthError ( "User must be authenticated to run this command. To log in, run the command `socket login` and enter your API key." )
23
23
}
24
24
const spinner = ora ( `Looking up the threat feed \n` ) . start ( )
25
- await fetchThreatFeed ( spinner , apiKey )
25
+ await fetchThreatFeed ( input , spinner , apiKey )
26
26
}
27
27
}
28
28
}
29
29
30
+ const threatFeedFlags = {
31
+ perPage : {
32
+ type : 'number' ,
33
+ shortFlag : 'pp' ,
34
+ default : 30 ,
35
+ description : 'Number of items per page'
36
+ } ,
37
+ page : {
38
+ type : 'string' ,
39
+ shortFlag : 'p' ,
40
+ default : '1' ,
41
+ description : 'Page token'
42
+ } ,
43
+ direction : {
44
+ type : 'string' ,
45
+ shortFlag : 'd' ,
46
+ default : 'desc' ,
47
+ description : 'Order asc or desc by the createdAt attribute.'
48
+ } ,
49
+ filter : {
50
+ type : 'string' ,
51
+ shortFlag : 'f' ,
52
+ default : 'mal' ,
53
+ description : 'Filter what type of threats to return'
54
+ }
55
+ }
56
+
30
57
// Internal functions
31
58
32
59
type CommandContext = {
33
60
outputJson : boolean
34
61
outputMarkdown : boolean
62
+ per_page : number
63
+ page : string
64
+ direction : string
65
+ filter : string
35
66
}
36
67
37
68
function setupCommand (
@@ -41,6 +72,7 @@ function setupCommand(
41
72
importMeta : ImportMeta
42
73
) : CommandContext | undefined {
43
74
const flags : { [ key : string ] : any } = {
75
+ ...threatFeedFlags ,
44
76
...outputFlags
45
77
}
46
78
@@ -66,21 +98,36 @@ function setupCommand(
66
98
const {
67
99
json : outputJson ,
68
100
markdown : outputMarkdown ,
101
+ perPage : per_page ,
102
+ page,
103
+ direction,
104
+ filter
69
105
} = cli . flags
70
106
71
107
return < CommandContext > {
72
108
outputJson,
73
- outputMarkdown
109
+ outputMarkdown,
110
+ per_page,
111
+ page,
112
+ direction,
113
+ filter
74
114
}
75
115
}
76
116
77
117
async function fetchThreatFeed (
118
+ { per_page, page, direction, filter } : CommandContext ,
78
119
spinner : Ora ,
79
120
apiKey : string
80
121
) : Promise < void > {
81
- const response = await queryAPI ( `threat-feed` , apiKey )
122
+ const formattedQueryParams = formatQueryParams ( { per_page, page, direction, filter } ) . join ( '&' )
123
+
124
+ const response = await queryAPI ( `threat-feed?${ formattedQueryParams } ` , apiKey )
82
125
const data = await response . json ( ) ;
83
126
84
127
spinner . stop ( )
85
128
console . log ( data )
86
129
}
130
+
131
+ const formatQueryParams = ( params : any ) => {
132
+ return Object . entries ( params ) . map ( entry => `${ entry [ 0 ] } =${ entry [ 1 ] } ` )
133
+ }
0 commit comments