💾 Archived View for gmi.noulin.net › gitRepositories › git-off › file › src › node_modules › aws-sdk… captured on 2024-09-29 at 00:45:23. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
response.js (6474B)
1 var AWS = require('./core'); 2 var inherit = AWS.util.inherit; 3 var jmespath = require('jmespath'); 4 5 /** 6 * This class encapsulates the response information 7 * from a service request operation sent through {AWS.Request}. 8 * The response object has two main properties for getting information 9 * back from a request: 10 * 11 * ## The `data` property 12 * 13 * The `response.data` property contains the serialized object data 14 * retrieved from the service request. For instance, for an 15 * Amazon DynamoDB `listTables` method call, the response data might 16 * look like: 17 * 18 * ``` 19 * > resp.data 20 * { TableNames: 21 * [ 'table1', 'table2', ... ] } 22 * ``` 23 * 24 * The `data` property can be null if an error occurs (see below). 25 * 26 * ## The `error` property 27 * 28 * In the event of a service error (or transfer error), the 29 * `response.error` property will be filled with the given 30 * error data in the form: 31 * 32 * ``` 33 * { code: 'SHORT_UNIQUE_ERROR_CODE', 34 * message: 'Some human readable error message' } 35 * ``` 36 * 37 * In the case of an error, the `data` property will be `null`. 38 * Note that if you handle events that can be in a failure state, 39 * you should always check whether `response.error` is set 40 * before attempting to access the `response.data` property. 41 * 42 * @!attribute data 43 * @readonly 44 * @!group Data Properties 45 * @note Inside of a {AWS.Request~httpData} event, this 46 * property contains a single raw packet instead of the 47 * full de-serialized service response. 48 * @return [Object] the de-serialized response data 49 * from the service. 50 * 51 * @!attribute error 52 * An structure containing information about a service 53 * or networking error. 54 * @readonly 55 * @!group Data Properties 56 * @note This attribute is only filled if a service or 57 * networking error occurs. 58 * @return [Error] 59 * * code [String] a unique short code representing the 60 * error that was emitted. 61 * * message [String] a longer human readable error message 62 * * retryable [Boolean] whether the error message is 63 * retryable. 64 * * statusCode [Numeric] in the case of a request that reached the service, 65 * this value contains the response status code. 66 * * time [Date] the date time object when the error occurred. 67 * * hostname [String] set when a networking error occurs to easily 68 * identify the endpoint of the request. 69 * * region [String] set when a networking error occurs to easily 70 * identify the region of the request. 71 * 72 * @!attribute requestId 73 * @readonly 74 * @!group Data Properties 75 * @return [String] the unique request ID associated with the response. 76 * Log this value when debugging requests for AWS support. 77 * 78 * @!attribute retryCount 79 * @readonly 80 * @!group Operation Properties 81 * @return [Integer] the number of retries that were 82 * attempted before the request was completed. 83 * 84 * @!attribute redirectCount 85 * @readonly 86 * @!group Operation Properties 87 * @return [Integer] the number of redirects that were 88 * followed before the request was completed. 89 * 90 * @!attribute httpResponse 91 * @readonly 92 * @!group HTTP Properties 93 * @return [AWS.HttpResponse] the raw HTTP response object 94 * containing the response headers and body information 95 * from the server. 96 * 97 * @see AWS.Request 98 */ 99 AWS.Response = inherit({ 100 101 /** 102 * @api private 103 */ 104 constructor: function Response(request) { 105 this.request = request; 106 this.data = null; 107 this.error = null; 108 this.retryCount = 0; 109 this.redirectCount = 0; 110 this.httpResponse = new AWS.HttpResponse(); 111 if (request) { 112 this.maxRetries = request.service.numRetries(); 113 this.maxRedirects = request.service.config.maxRedirects; 114 } 115 }, 116 117 /** 118 * Creates a new request for the next page of response data, calling the 119 * callback with the page data if a callback is provided. 120 * 121 * @callback callback function(err, data) 122 * Called when a page of data is returned from the next request. 123 * 124 * @param err [Error] an error object, if an error occurred in the request 125 * @param data [Object] the next page of data, or null, if there are no 126 * more pages left. 127 * @return [AWS.Request] the request object for the next page of data 128 * @return [null] if no callback is provided and there are no pages left 129 * to retrieve. 130 * @since v1.4.0 131 */ 132 nextPage: function nextPage(callback) { 133 var config; 134 var service = this.request.service; 135 var operation = this.request.operation; 136 try { 137 config = service.paginationConfig(operation, true); 138 } catch (e) { this.error = e; } 139 140 if (!this.hasNextPage()) { 141 if (callback) callback(this.error, null); 142 else if (this.error) throw this.error; 143 return null; 144 } 145 146 var params = AWS.util.copy(this.request.params); 147 if (!this.nextPageTokens) { 148 return callback ? callback(null, null) : null; 149 } else { 150 var inputTokens = config.inputToken; 151 if (typeof inputTokens === 'string') inputTokens = [inputTokens]; 152 for (var i = 0; i < inputTokens.length; i++) { 153 params[inputTokens[i]] = this.nextPageTokens[i]; 154 } 155 return service.makeRequest(this.request.operation, params, callback); 156 } 157 }, 158 159 /** 160 * @return [Boolean] whether more pages of data can be returned by further 161 * requests 162 * @since v1.4.0 163 */ 164 hasNextPage: function hasNextPage() { 165 this.cacheNextPageTokens(); 166 if (this.nextPageTokens) return true; 167 if (this.nextPageTokens === undefined) return undefined; 168 else return false; 169 }, 170 171 /** 172 * @api private 173 */ 174 cacheNextPageTokens: function cacheNextPageTokens() { 175 if (Object.prototype.hasOwnProperty.call(this, 'nextPageTokens')) return this.nextPageTokens; 176 this.nextPageTokens = undefined; 177 178 var config = this.request.service.paginationConfig(this.request.operation); 179 if (!config) return this.nextPageTokens; 180 181 this.nextPageTokens = null; 182 if (config.moreResults) { 183 if (!jmespath.search(this.data, config.moreResults)) { 184 return this.nextPageTokens; 185 } 186 } 187 188 var exprs = config.outputToken; 189 if (typeof exprs === 'string') exprs = [exprs]; 190 AWS.util.arrayEach.call(this, exprs, function (expr) { 191 var output = jmespath.search(this.data, expr); 192 if (output) { 193 this.nextPageTokens = this.nextPageTokens || []; 194 this.nextPageTokens.push(output); 195 } 196 }); 197 198 return this.nextPageTokens; 199 } 200 201 });