@@ -5,11 +5,39 @@ import { LogApiResource, LogList, Sid, LogFilters } from '../types';
5
5
import { TwilioServerlessApiClient } from '../client' ;
6
6
import { getPaginatedResource } from './utils/pagination' ;
7
7
import { ClientApiError } from '../utils/error' ;
8
+ import { OptionsOfJSONResponseBody } from 'got' ;
8
9
9
10
const log = debug ( 'twilio-serverless-api:logs' ) ;
10
11
12
+ function urlWithFilters (
13
+ environmentSid : Sid ,
14
+ serviceSid : Sid ,
15
+ filters : LogFilters = { }
16
+ ) : string {
17
+ const pageSize = filters . pageSize || 50 ;
18
+ const { functionSid, startDate, endDate, pageToken } = filters ;
19
+ let url = `Services/${ serviceSid } /Environments/${ environmentSid } /Logs?PageSize=${ pageSize } ` ;
20
+ if ( typeof functionSid !== 'undefined' ) {
21
+ url += `&FunctionSid=${ functionSid } ` ;
22
+ }
23
+ if ( typeof startDate !== 'undefined' ) {
24
+ url += `&StartDate=${
25
+ startDate instanceof Date ? startDate . toISOString ( ) : startDate
26
+ } `;
27
+ }
28
+ if ( typeof endDate !== 'undefined' ) {
29
+ url += `&EndDate=${
30
+ endDate instanceof Date ? endDate . toISOString ( ) : endDate
31
+ } `;
32
+ }
33
+ if ( typeof pageToken !== 'undefined' ) {
34
+ url += `&PageToken=${ pageToken } ` ;
35
+ }
36
+ return url ;
37
+ }
38
+
11
39
/**
12
- * Calls the API to retrieve a list of all assets
40
+ * Calls the API to retrieve a list of all logs
13
41
*
14
42
* @param {Sid } environmentSid environment in which to get logs
15
43
* @param {Sid } serviceSid service to look for logs
@@ -24,7 +52,7 @@ export async function listLogResources(
24
52
try {
25
53
return getPaginatedResource < LogList , LogApiResource > (
26
54
client ,
27
- `Services/ ${ serviceSid } /Environments/ ${ environmentSid } /Logs`
55
+ urlWithFilters ( environmentSid , serviceSid )
28
56
) ;
29
57
} catch ( err ) {
30
58
log ( '%O' , new ClientApiError ( err ) ) ;
@@ -33,7 +61,7 @@ export async function listLogResources(
33
61
}
34
62
35
63
/**
36
- * Calls the API to retrieve a list of all assets
64
+ * Calls the API to retrieve one page of a list of logs
37
65
*
38
66
* @param {Sid } environmentSid environment in which to get logs
39
67
* @param {Sid } serviceSid service to look for logs
@@ -46,28 +74,10 @@ export async function listOnePageLogResources(
46
74
client : TwilioServerlessApiClient ,
47
75
filters : LogFilters
48
76
) : Promise < LogApiResource [ ] > {
49
- const pageSize = filters . pageSize || 50 ;
50
- const { functionSid, startDate, endDate, pageToken } = filters ;
77
+ const url = urlWithFilters ( environmentSid , serviceSid , filters ) ;
51
78
try {
52
- let url = `Services/${ serviceSid } /Environments/${ environmentSid } /Logs?PageSize=${ pageSize } ` ;
53
- if ( typeof functionSid !== 'undefined' ) {
54
- url += `&FunctionSid=${ functionSid } ` ;
55
- }
56
- if ( typeof startDate !== 'undefined' ) {
57
- url += `&StartDate=${
58
- startDate instanceof Date ? startDate . toISOString ( ) : startDate
59
- } `;
60
- }
61
- if ( typeof endDate !== 'undefined' ) {
62
- url += `&EndDate=${
63
- endDate instanceof Date ? endDate . toISOString ( ) : endDate
64
- } `;
65
- }
66
- if ( typeof pageToken !== 'undefined' ) {
67
- url += `&PageToken=${ pageToken } ` ;
68
- }
69
79
const resp = await client . request ( 'get' , url ) ;
70
- const content = ( resp . body as unknown ) as LogList ;
80
+ const content = resp . body as unknown as LogList ;
71
81
return content . logs as LogApiResource [ ] ;
72
82
} catch ( err ) {
73
83
log ( '%O' , new ClientApiError ( err ) ) ;
@@ -76,7 +86,41 @@ export async function listOnePageLogResources(
76
86
}
77
87
78
88
/**
79
- * Calls the API to retrieve a list of all assets
89
+ * Calls the API to retrieve a paginated list of logs
90
+ *
91
+ * @param {Sid } environmentSid environment in which to get logs
92
+ * @param {Sid } serviceSid service to look for logs
93
+ * @param {TwilioServerlessApiClient } client API client
94
+ * @param {LogFilters } filters filters to apply to the request
95
+ * @param {string } nextPageUrl if you have a next page url, use it
96
+ * @returns {Promise<LogList> }
97
+ */
98
+ export async function listPaginatedLogs (
99
+ environmentSid : Sid ,
100
+ serviceSid : Sid ,
101
+ client : TwilioServerlessApiClient ,
102
+ filters : LogFilters = { } ,
103
+ nextPageUrl ?: string
104
+ ) : Promise < LogList > {
105
+ try {
106
+ const opts : OptionsOfJSONResponseBody = { responseType : 'json' } ;
107
+ let url = nextPageUrl ;
108
+ if ( typeof url === 'undefined' ) {
109
+ url = urlWithFilters ( environmentSid , serviceSid , filters ) ;
110
+ }
111
+ if ( url . startsWith ( 'http' ) ) {
112
+ opts . prefixUrl = '' ;
113
+ }
114
+ const resp = await client . request ( 'get' , url , opts ) ;
115
+ return resp . body as unknown as LogList ;
116
+ } catch ( err ) {
117
+ log ( '%O' , new ClientApiError ( err ) ) ;
118
+ throw err ;
119
+ }
120
+ }
121
+
122
+ /**
123
+ * Calls the API to retrieve a single log resource
80
124
*
81
125
* @param {Sid } logSid SID of log to retrieve
82
126
* @param {Sid } environmentSid environment in which to get logs
@@ -95,7 +139,7 @@ export async function getLog(
95
139
'get' ,
96
140
`Services/${ serviceSid } /Environments/${ environmentSid } /Logs/${ logSid } `
97
141
) ;
98
- return ( resp . body as unknown ) as LogApiResource ;
142
+ return resp . body as unknown as LogApiResource ;
99
143
} catch ( err ) {
100
144
log ( '%O' , new ClientApiError ( err ) ) ;
101
145
throw err ;
0 commit comments