@@ -5,11 +5,39 @@ import { LogApiResource, LogList, Sid, LogFilters } from '../types';
55import { TwilioServerlessApiClient } from '../client' ;
66import { getPaginatedResource } from './utils/pagination' ;
77import { ClientApiError } from '../utils/error' ;
8+ import { OptionsOfJSONResponseBody } from 'got' ;
89
910const log = debug ( 'twilio-serverless-api:logs' ) ;
1011
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+
1139/**
12- * Calls the API to retrieve a list of all assets
40+ * Calls the API to retrieve a list of all logs
1341 *
1442 * @param {Sid } environmentSid environment in which to get logs
1543 * @param {Sid } serviceSid service to look for logs
@@ -24,7 +52,7 @@ export async function listLogResources(
2452 try {
2553 return getPaginatedResource < LogList , LogApiResource > (
2654 client ,
27- `Services/ ${ serviceSid } /Environments/ ${ environmentSid } /Logs`
55+ urlWithFilters ( environmentSid , serviceSid )
2856 ) ;
2957 } catch ( err ) {
3058 log ( '%O' , new ClientApiError ( err ) ) ;
@@ -33,7 +61,7 @@ export async function listLogResources(
3361}
3462
3563/**
36- * Calls the API to retrieve a list of all assets
64+ * Calls the API to retrieve one page of a list of logs
3765 *
3866 * @param {Sid } environmentSid environment in which to get logs
3967 * @param {Sid } serviceSid service to look for logs
@@ -46,28 +74,10 @@ export async function listOnePageLogResources(
4674 client : TwilioServerlessApiClient ,
4775 filters : LogFilters
4876) : Promise < LogApiResource [ ] > {
49- const pageSize = filters . pageSize || 50 ;
50- const { functionSid, startDate, endDate, pageToken } = filters ;
77+ const url = urlWithFilters ( environmentSid , serviceSid , filters ) ;
5178 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- }
6979 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 ;
7181 return content . logs as LogApiResource [ ] ;
7282 } catch ( err ) {
7383 log ( '%O' , new ClientApiError ( err ) ) ;
@@ -76,7 +86,41 @@ export async function listOnePageLogResources(
7686}
7787
7888/**
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
80124 *
81125 * @param {Sid } logSid SID of log to retrieve
82126 * @param {Sid } environmentSid environment in which to get logs
@@ -95,7 +139,7 @@ export async function getLog(
95139 'get' ,
96140 `Services/${ serviceSid } /Environments/${ environmentSid } /Logs/${ logSid } `
97141 ) ;
98- return ( resp . body as unknown ) as LogApiResource ;
142+ return resp . body as unknown as LogApiResource ;
99143 } catch ( err ) {
100144 log ( '%O' , new ClientApiError ( err ) ) ;
101145 throw err ;
0 commit comments