deepv-code 1.0.182 → 1.0.183

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/bundle/dvcode.js +635 -635
  2. package/package.json +1 -1
  3. package/bundle/assets/help/README.md +0 -113
  4. package/bundle/assets/sounds/README.md +0 -74
  5. package/bundle/node_modules/undici/LICENSE +0 -21
  6. package/bundle/node_modules/undici/README.md +0 -472
  7. package/bundle/node_modules/undici/docs/docs/api/Agent.md +0 -83
  8. package/bundle/node_modules/undici/docs/docs/api/BalancedPool.md +0 -99
  9. package/bundle/node_modules/undici/docs/docs/api/CacheStorage.md +0 -30
  10. package/bundle/node_modules/undici/docs/docs/api/CacheStore.md +0 -151
  11. package/bundle/node_modules/undici/docs/docs/api/Client.md +0 -281
  12. package/bundle/node_modules/undici/docs/docs/api/ClientStats.md +0 -27
  13. package/bundle/node_modules/undici/docs/docs/api/Connector.md +0 -115
  14. package/bundle/node_modules/undici/docs/docs/api/ContentType.md +0 -57
  15. package/bundle/node_modules/undici/docs/docs/api/Cookies.md +0 -101
  16. package/bundle/node_modules/undici/docs/docs/api/Debug.md +0 -62
  17. package/bundle/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +0 -204
  18. package/bundle/node_modules/undici/docs/docs/api/Dispatcher.md +0 -1200
  19. package/bundle/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +0 -159
  20. package/bundle/node_modules/undici/docs/docs/api/Errors.md +0 -49
  21. package/bundle/node_modules/undici/docs/docs/api/EventSource.md +0 -45
  22. package/bundle/node_modules/undici/docs/docs/api/Fetch.md +0 -52
  23. package/bundle/node_modules/undici/docs/docs/api/H2CClient.md +0 -262
  24. package/bundle/node_modules/undici/docs/docs/api/MockAgent.md +0 -603
  25. package/bundle/node_modules/undici/docs/docs/api/MockCallHistory.md +0 -197
  26. package/bundle/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +0 -43
  27. package/bundle/node_modules/undici/docs/docs/api/MockClient.md +0 -77
  28. package/bundle/node_modules/undici/docs/docs/api/MockErrors.md +0 -12
  29. package/bundle/node_modules/undici/docs/docs/api/MockPool.md +0 -548
  30. package/bundle/node_modules/undici/docs/docs/api/Pool.md +0 -84
  31. package/bundle/node_modules/undici/docs/docs/api/PoolStats.md +0 -35
  32. package/bundle/node_modules/undici/docs/docs/api/ProxyAgent.md +0 -227
  33. package/bundle/node_modules/undici/docs/docs/api/RedirectHandler.md +0 -96
  34. package/bundle/node_modules/undici/docs/docs/api/RetryAgent.md +0 -45
  35. package/bundle/node_modules/undici/docs/docs/api/RetryHandler.md +0 -117
  36. package/bundle/node_modules/undici/docs/docs/api/Util.md +0 -25
  37. package/bundle/node_modules/undici/docs/docs/api/WebSocket.md +0 -85
  38. package/bundle/node_modules/undici/docs/docs/api/api-lifecycle.md +0 -91
  39. package/bundle/node_modules/undici/docs/docs/best-practices/client-certificate.md +0 -64
  40. package/bundle/node_modules/undici/docs/docs/best-practices/mocking-request.md +0 -190
  41. package/bundle/node_modules/undici/docs/docs/best-practices/proxy.md +0 -127
  42. package/bundle/node_modules/undici/docs/docs/best-practices/writing-tests.md +0 -20
  43. package/bundle/node_modules/undici/index-fetch.js +0 -35
  44. package/bundle/node_modules/undici/index.d.ts +0 -3
  45. package/bundle/node_modules/undici/index.js +0 -183
  46. package/bundle/node_modules/undici/lib/api/abort-signal.js +0 -59
  47. package/bundle/node_modules/undici/lib/api/api-connect.js +0 -110
  48. package/bundle/node_modules/undici/lib/api/api-pipeline.js +0 -252
  49. package/bundle/node_modules/undici/lib/api/api-request.js +0 -199
  50. package/bundle/node_modules/undici/lib/api/api-stream.js +0 -209
  51. package/bundle/node_modules/undici/lib/api/api-upgrade.js +0 -110
  52. package/bundle/node_modules/undici/lib/api/index.js +0 -7
  53. package/bundle/node_modules/undici/lib/api/readable.js +0 -558
  54. package/bundle/node_modules/undici/lib/api/util.js +0 -95
  55. package/bundle/node_modules/undici/lib/cache/memory-cache-store.js +0 -234
  56. package/bundle/node_modules/undici/lib/cache/sqlite-cache-store.js +0 -461
  57. package/bundle/node_modules/undici/lib/core/connect.js +0 -164
  58. package/bundle/node_modules/undici/lib/core/constants.js +0 -143
  59. package/bundle/node_modules/undici/lib/core/diagnostics.js +0 -196
  60. package/bundle/node_modules/undici/lib/core/errors.js +0 -244
  61. package/bundle/node_modules/undici/lib/core/request.js +0 -397
  62. package/bundle/node_modules/undici/lib/core/symbols.js +0 -68
  63. package/bundle/node_modules/undici/lib/core/tree.js +0 -160
  64. package/bundle/node_modules/undici/lib/core/util.js +0 -988
  65. package/bundle/node_modules/undici/lib/dispatcher/agent.js +0 -135
  66. package/bundle/node_modules/undici/lib/dispatcher/balanced-pool.js +0 -206
  67. package/bundle/node_modules/undici/lib/dispatcher/client-h1.js +0 -1615
  68. package/bundle/node_modules/undici/lib/dispatcher/client-h2.js +0 -798
  69. package/bundle/node_modules/undici/lib/dispatcher/client.js +0 -614
  70. package/bundle/node_modules/undici/lib/dispatcher/dispatcher-base.js +0 -161
  71. package/bundle/node_modules/undici/lib/dispatcher/dispatcher.js +0 -48
  72. package/bundle/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +0 -151
  73. package/bundle/node_modules/undici/lib/dispatcher/fixed-queue.js +0 -159
  74. package/bundle/node_modules/undici/lib/dispatcher/h2c-client.js +0 -122
  75. package/bundle/node_modules/undici/lib/dispatcher/pool-base.js +0 -191
  76. package/bundle/node_modules/undici/lib/dispatcher/pool.js +0 -118
  77. package/bundle/node_modules/undici/lib/dispatcher/proxy-agent.js +0 -275
  78. package/bundle/node_modules/undici/lib/dispatcher/retry-agent.js +0 -35
  79. package/bundle/node_modules/undici/lib/global.js +0 -32
  80. package/bundle/node_modules/undici/lib/handler/cache-handler.js +0 -448
  81. package/bundle/node_modules/undici/lib/handler/cache-revalidation-handler.js +0 -124
  82. package/bundle/node_modules/undici/lib/handler/decorator-handler.js +0 -67
  83. package/bundle/node_modules/undici/lib/handler/redirect-handler.js +0 -227
  84. package/bundle/node_modules/undici/lib/handler/retry-handler.js +0 -342
  85. package/bundle/node_modules/undici/lib/handler/unwrap-handler.js +0 -96
  86. package/bundle/node_modules/undici/lib/handler/wrap-handler.js +0 -95
  87. package/bundle/node_modules/undici/lib/interceptor/cache.js +0 -372
  88. package/bundle/node_modules/undici/lib/interceptor/dns.js +0 -432
  89. package/bundle/node_modules/undici/lib/interceptor/dump.js +0 -111
  90. package/bundle/node_modules/undici/lib/interceptor/redirect.js +0 -21
  91. package/bundle/node_modules/undici/lib/interceptor/response-error.js +0 -95
  92. package/bundle/node_modules/undici/lib/interceptor/retry.js +0 -19
  93. package/bundle/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  94. package/bundle/node_modules/undici/lib/llhttp/constants.d.ts +0 -97
  95. package/bundle/node_modules/undici/lib/llhttp/constants.js +0 -498
  96. package/bundle/node_modules/undici/lib/llhttp/constants.js.map +0 -1
  97. package/bundle/node_modules/undici/lib/llhttp/llhttp-wasm.js +0 -15
  98. package/bundle/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +0 -15
  99. package/bundle/node_modules/undici/lib/llhttp/utils.d.ts +0 -2
  100. package/bundle/node_modules/undici/lib/llhttp/utils.js +0 -15
  101. package/bundle/node_modules/undici/lib/llhttp/utils.js.map +0 -1
  102. package/bundle/node_modules/undici/lib/mock/mock-agent.js +0 -224
  103. package/bundle/node_modules/undici/lib/mock/mock-call-history.js +0 -248
  104. package/bundle/node_modules/undici/lib/mock/mock-client.js +0 -64
  105. package/bundle/node_modules/undici/lib/mock/mock-errors.js +0 -19
  106. package/bundle/node_modules/undici/lib/mock/mock-interceptor.js +0 -209
  107. package/bundle/node_modules/undici/lib/mock/mock-pool.js +0 -64
  108. package/bundle/node_modules/undici/lib/mock/mock-symbols.js +0 -31
  109. package/bundle/node_modules/undici/lib/mock/mock-utils.js +0 -433
  110. package/bundle/node_modules/undici/lib/mock/pending-interceptors-formatter.js +0 -43
  111. package/bundle/node_modules/undici/lib/util/cache.js +0 -368
  112. package/bundle/node_modules/undici/lib/util/date.js +0 -259
  113. package/bundle/node_modules/undici/lib/util/stats.js +0 -32
  114. package/bundle/node_modules/undici/lib/util/timers.js +0 -423
  115. package/bundle/node_modules/undici/lib/web/cache/cache.js +0 -862
  116. package/bundle/node_modules/undici/lib/web/cache/cachestorage.js +0 -152
  117. package/bundle/node_modules/undici/lib/web/cache/util.js +0 -45
  118. package/bundle/node_modules/undici/lib/web/cookies/constants.js +0 -12
  119. package/bundle/node_modules/undici/lib/web/cookies/index.js +0 -199
  120. package/bundle/node_modules/undici/lib/web/cookies/parse.js +0 -322
  121. package/bundle/node_modules/undici/lib/web/cookies/util.js +0 -282
  122. package/bundle/node_modules/undici/lib/web/eventsource/eventsource-stream.js +0 -399
  123. package/bundle/node_modules/undici/lib/web/eventsource/eventsource.js +0 -484
  124. package/bundle/node_modules/undici/lib/web/eventsource/util.js +0 -37
  125. package/bundle/node_modules/undici/lib/web/fetch/LICENSE +0 -21
  126. package/bundle/node_modules/undici/lib/web/fetch/body.js +0 -532
  127. package/bundle/node_modules/undici/lib/web/fetch/constants.js +0 -131
  128. package/bundle/node_modules/undici/lib/web/fetch/data-url.js +0 -744
  129. package/bundle/node_modules/undici/lib/web/fetch/dispatcher-weakref.js +0 -46
  130. package/bundle/node_modules/undici/lib/web/fetch/formdata-parser.js +0 -501
  131. package/bundle/node_modules/undici/lib/web/fetch/formdata.js +0 -263
  132. package/bundle/node_modules/undici/lib/web/fetch/global.js +0 -40
  133. package/bundle/node_modules/undici/lib/web/fetch/headers.js +0 -719
  134. package/bundle/node_modules/undici/lib/web/fetch/index.js +0 -2258
  135. package/bundle/node_modules/undici/lib/web/fetch/request.js +0 -1099
  136. package/bundle/node_modules/undici/lib/web/fetch/response.js +0 -636
  137. package/bundle/node_modules/undici/lib/web/fetch/util.js +0 -1782
  138. package/bundle/node_modules/undici/lib/web/fetch/webidl.js +0 -740
  139. package/bundle/node_modules/undici/lib/web/websocket/connection.js +0 -325
  140. package/bundle/node_modules/undici/lib/web/websocket/constants.js +0 -126
  141. package/bundle/node_modules/undici/lib/web/websocket/events.js +0 -331
  142. package/bundle/node_modules/undici/lib/web/websocket/frame.js +0 -138
  143. package/bundle/node_modules/undici/lib/web/websocket/permessage-deflate.js +0 -70
  144. package/bundle/node_modules/undici/lib/web/websocket/receiver.js +0 -454
  145. package/bundle/node_modules/undici/lib/web/websocket/sender.js +0 -109
  146. package/bundle/node_modules/undici/lib/web/websocket/stream/websocketerror.js +0 -83
  147. package/bundle/node_modules/undici/lib/web/websocket/stream/websocketstream.js +0 -485
  148. package/bundle/node_modules/undici/lib/web/websocket/util.js +0 -338
  149. package/bundle/node_modules/undici/lib/web/websocket/websocket.js +0 -686
  150. package/bundle/node_modules/undici/package.json +0 -149
  151. package/bundle/node_modules/undici/scripts/strip-comments.js +0 -10
  152. package/bundle/node_modules/undici/types/README.md +0 -6
  153. package/bundle/node_modules/undici/types/agent.d.ts +0 -35
  154. package/bundle/node_modules/undici/types/api.d.ts +0 -43
  155. package/bundle/node_modules/undici/types/balanced-pool.d.ts +0 -29
  156. package/bundle/node_modules/undici/types/cache-interceptor.d.ts +0 -172
  157. package/bundle/node_modules/undici/types/cache.d.ts +0 -36
  158. package/bundle/node_modules/undici/types/client-stats.d.ts +0 -15
  159. package/bundle/node_modules/undici/types/client.d.ts +0 -110
  160. package/bundle/node_modules/undici/types/connector.d.ts +0 -34
  161. package/bundle/node_modules/undici/types/content-type.d.ts +0 -21
  162. package/bundle/node_modules/undici/types/cookies.d.ts +0 -30
  163. package/bundle/node_modules/undici/types/diagnostics-channel.d.ts +0 -66
  164. package/bundle/node_modules/undici/types/dispatcher.d.ts +0 -281
  165. package/bundle/node_modules/undici/types/env-http-proxy-agent.d.ts +0 -21
  166. package/bundle/node_modules/undici/types/errors.d.ts +0 -171
  167. package/bundle/node_modules/undici/types/eventsource.d.ts +0 -61
  168. package/bundle/node_modules/undici/types/fetch.d.ts +0 -210
  169. package/bundle/node_modules/undici/types/formdata.d.ts +0 -108
  170. package/bundle/node_modules/undici/types/global-dispatcher.d.ts +0 -9
  171. package/bundle/node_modules/undici/types/global-origin.d.ts +0 -7
  172. package/bundle/node_modules/undici/types/h2c-client.d.ts +0 -75
  173. package/bundle/node_modules/undici/types/handlers.d.ts +0 -15
  174. package/bundle/node_modules/undici/types/header.d.ts +0 -160
  175. package/bundle/node_modules/undici/types/index.d.ts +0 -75
  176. package/bundle/node_modules/undici/types/interceptors.d.ts +0 -34
  177. package/bundle/node_modules/undici/types/mock-agent.d.ts +0 -68
  178. package/bundle/node_modules/undici/types/mock-call-history.d.ts +0 -111
  179. package/bundle/node_modules/undici/types/mock-client.d.ts +0 -25
  180. package/bundle/node_modules/undici/types/mock-errors.d.ts +0 -12
  181. package/bundle/node_modules/undici/types/mock-interceptor.d.ts +0 -93
  182. package/bundle/node_modules/undici/types/mock-pool.d.ts +0 -25
  183. package/bundle/node_modules/undici/types/patch.d.ts +0 -29
  184. package/bundle/node_modules/undici/types/pool-stats.d.ts +0 -19
  185. package/bundle/node_modules/undici/types/pool.d.ts +0 -41
  186. package/bundle/node_modules/undici/types/proxy-agent.d.ts +0 -29
  187. package/bundle/node_modules/undici/types/readable.d.ts +0 -68
  188. package/bundle/node_modules/undici/types/retry-agent.d.ts +0 -8
  189. package/bundle/node_modules/undici/types/retry-handler.d.ts +0 -116
  190. package/bundle/node_modules/undici/types/util.d.ts +0 -18
  191. package/bundle/node_modules/undici/types/utility.d.ts +0 -7
  192. package/bundle/node_modules/undici/types/webidl.d.ts +0 -266
  193. package/bundle/node_modules/undici/types/websocket.d.ts +0 -184
@@ -1,432 +0,0 @@
1
- 'use strict'
2
- const { isIP } = require('node:net')
3
- const { lookup } = require('node:dns')
4
- const DecoratorHandler = require('../handler/decorator-handler')
5
- const { InvalidArgumentError, InformationalError } = require('../core/errors')
6
- const maxInt = Math.pow(2, 31) - 1
7
-
8
- class DNSInstance {
9
- #maxTTL = 0
10
- #maxItems = 0
11
- #records = new Map()
12
- dualStack = true
13
- affinity = null
14
- lookup = null
15
- pick = null
16
-
17
- constructor (opts) {
18
- this.#maxTTL = opts.maxTTL
19
- this.#maxItems = opts.maxItems
20
- this.dualStack = opts.dualStack
21
- this.affinity = opts.affinity
22
- this.lookup = opts.lookup ?? this.#defaultLookup
23
- this.pick = opts.pick ?? this.#defaultPick
24
- }
25
-
26
- get full () {
27
- return this.#records.size === this.#maxItems
28
- }
29
-
30
- runLookup (origin, opts, cb) {
31
- const ips = this.#records.get(origin.hostname)
32
-
33
- // If full, we just return the origin
34
- if (ips == null && this.full) {
35
- cb(null, origin)
36
- return
37
- }
38
-
39
- const newOpts = {
40
- affinity: this.affinity,
41
- dualStack: this.dualStack,
42
- lookup: this.lookup,
43
- pick: this.pick,
44
- ...opts.dns,
45
- maxTTL: this.#maxTTL,
46
- maxItems: this.#maxItems
47
- }
48
-
49
- // If no IPs we lookup
50
- if (ips == null) {
51
- this.lookup(origin, newOpts, (err, addresses) => {
52
- if (err || addresses == null || addresses.length === 0) {
53
- cb(err ?? new InformationalError('No DNS entries found'))
54
- return
55
- }
56
-
57
- this.setRecords(origin, addresses)
58
- const records = this.#records.get(origin.hostname)
59
-
60
- const ip = this.pick(
61
- origin,
62
- records,
63
- newOpts.affinity
64
- )
65
-
66
- let port
67
- if (typeof ip.port === 'number') {
68
- port = `:${ip.port}`
69
- } else if (origin.port !== '') {
70
- port = `:${origin.port}`
71
- } else {
72
- port = ''
73
- }
74
-
75
- cb(
76
- null,
77
- new URL(`${origin.protocol}//${
78
- ip.family === 6 ? `[${ip.address}]` : ip.address
79
- }${port}`)
80
- )
81
- })
82
- } else {
83
- // If there's IPs we pick
84
- const ip = this.pick(
85
- origin,
86
- ips,
87
- newOpts.affinity
88
- )
89
-
90
- // If no IPs we lookup - deleting old records
91
- if (ip == null) {
92
- this.#records.delete(origin.hostname)
93
- this.runLookup(origin, opts, cb)
94
- return
95
- }
96
-
97
- let port
98
- if (typeof ip.port === 'number') {
99
- port = `:${ip.port}`
100
- } else if (origin.port !== '') {
101
- port = `:${origin.port}`
102
- } else {
103
- port = ''
104
- }
105
-
106
- cb(
107
- null,
108
- new URL(`${origin.protocol}//${
109
- ip.family === 6 ? `[${ip.address}]` : ip.address
110
- }${port}`)
111
- )
112
- }
113
- }
114
-
115
- #defaultLookup (origin, opts, cb) {
116
- lookup(
117
- origin.hostname,
118
- {
119
- all: true,
120
- family: this.dualStack === false ? this.affinity : 0,
121
- order: 'ipv4first'
122
- },
123
- (err, addresses) => {
124
- if (err) {
125
- return cb(err)
126
- }
127
-
128
- const results = new Map()
129
-
130
- for (const addr of addresses) {
131
- // On linux we found duplicates, we attempt to remove them with
132
- // the latest record
133
- results.set(`${addr.address}:${addr.family}`, addr)
134
- }
135
-
136
- cb(null, results.values())
137
- }
138
- )
139
- }
140
-
141
- #defaultPick (origin, hostnameRecords, affinity) {
142
- let ip = null
143
- const { records, offset } = hostnameRecords
144
-
145
- let family
146
- if (this.dualStack) {
147
- if (affinity == null) {
148
- // Balance between ip families
149
- if (offset == null || offset === maxInt) {
150
- hostnameRecords.offset = 0
151
- affinity = 4
152
- } else {
153
- hostnameRecords.offset++
154
- affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4
155
- }
156
- }
157
-
158
- if (records[affinity] != null && records[affinity].ips.length > 0) {
159
- family = records[affinity]
160
- } else {
161
- family = records[affinity === 4 ? 6 : 4]
162
- }
163
- } else {
164
- family = records[affinity]
165
- }
166
-
167
- // If no IPs we return null
168
- if (family == null || family.ips.length === 0) {
169
- return ip
170
- }
171
-
172
- if (family.offset == null || family.offset === maxInt) {
173
- family.offset = 0
174
- } else {
175
- family.offset++
176
- }
177
-
178
- const position = family.offset % family.ips.length
179
- ip = family.ips[position] ?? null
180
-
181
- if (ip == null) {
182
- return ip
183
- }
184
-
185
- if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms
186
- // We delete expired records
187
- // It is possible that they have different TTL, so we manage them individually
188
- family.ips.splice(position, 1)
189
- return this.pick(origin, hostnameRecords, affinity)
190
- }
191
-
192
- return ip
193
- }
194
-
195
- pickFamily (origin, ipFamily) {
196
- const records = this.#records.get(origin.hostname)?.records
197
- if (!records) {
198
- return null
199
- }
200
-
201
- const family = records[ipFamily]
202
- if (!family) {
203
- return null
204
- }
205
-
206
- if (family.offset == null || family.offset === maxInt) {
207
- family.offset = 0
208
- } else {
209
- family.offset++
210
- }
211
-
212
- const position = family.offset % family.ips.length
213
- const ip = family.ips[position] ?? null
214
- if (ip == null) {
215
- return ip
216
- }
217
-
218
- if (Date.now() - ip.timestamp > ip.ttl) { // record TTL is already in ms
219
- // We delete expired records
220
- // It is possible that they have different TTL, so we manage them individually
221
- family.ips.splice(position, 1)
222
- }
223
-
224
- return ip
225
- }
226
-
227
- setRecords (origin, addresses) {
228
- const timestamp = Date.now()
229
- const records = { records: { 4: null, 6: null } }
230
- for (const record of addresses) {
231
- record.timestamp = timestamp
232
- if (typeof record.ttl === 'number') {
233
- // The record TTL is expected to be in ms
234
- record.ttl = Math.min(record.ttl, this.#maxTTL)
235
- } else {
236
- record.ttl = this.#maxTTL
237
- }
238
-
239
- const familyRecords = records.records[record.family] ?? { ips: [] }
240
-
241
- familyRecords.ips.push(record)
242
- records.records[record.family] = familyRecords
243
- }
244
-
245
- this.#records.set(origin.hostname, records)
246
- }
247
-
248
- deleteRecords (origin) {
249
- this.#records.delete(origin.hostname)
250
- }
251
-
252
- getHandler (meta, opts) {
253
- return new DNSDispatchHandler(this, meta, opts)
254
- }
255
- }
256
-
257
- class DNSDispatchHandler extends DecoratorHandler {
258
- #state = null
259
- #opts = null
260
- #dispatch = null
261
- #origin = null
262
- #controller = null
263
- #newOrigin = null
264
- #firstTry = true
265
-
266
- constructor (state, { origin, handler, dispatch, newOrigin }, opts) {
267
- super(handler)
268
- this.#origin = origin
269
- this.#newOrigin = newOrigin
270
- this.#opts = { ...opts }
271
- this.#state = state
272
- this.#dispatch = dispatch
273
- }
274
-
275
- onResponseError (controller, err) {
276
- switch (err.code) {
277
- case 'ETIMEDOUT':
278
- case 'ECONNREFUSED': {
279
- if (this.#state.dualStack) {
280
- if (!this.#firstTry) {
281
- super.onResponseError(controller, err)
282
- return
283
- }
284
- this.#firstTry = false
285
-
286
- // Pick an ip address from the other family
287
- const otherFamily = this.#newOrigin.hostname[0] === '[' ? 4 : 6
288
- const ip = this.#state.pickFamily(this.#origin, otherFamily)
289
- if (ip == null) {
290
- super.onResponseError(controller, err)
291
- return
292
- }
293
-
294
- let port
295
- if (typeof ip.port === 'number') {
296
- port = `:${ip.port}`
297
- } else if (this.#origin.port !== '') {
298
- port = `:${this.#origin.port}`
299
- } else {
300
- port = ''
301
- }
302
-
303
- const dispatchOpts = {
304
- ...this.#opts,
305
- origin: `${this.#origin.protocol}//${
306
- ip.family === 6 ? `[${ip.address}]` : ip.address
307
- }${port}`
308
- }
309
- this.#dispatch(dispatchOpts, this)
310
- return
311
- }
312
-
313
- // if dual-stack disabled, we error out
314
- super.onResponseError(controller, err)
315
- break
316
- }
317
- case 'ENOTFOUND':
318
- this.#state.deleteRecords(this.#origin)
319
- super.onResponseError(controller, err)
320
- break
321
- default:
322
- super.onResponseError(controller, err)
323
- break
324
- }
325
- }
326
- }
327
-
328
- module.exports = interceptorOpts => {
329
- if (
330
- interceptorOpts?.maxTTL != null &&
331
- (typeof interceptorOpts?.maxTTL !== 'number' || interceptorOpts?.maxTTL < 0)
332
- ) {
333
- throw new InvalidArgumentError('Invalid maxTTL. Must be a positive number')
334
- }
335
-
336
- if (
337
- interceptorOpts?.maxItems != null &&
338
- (typeof interceptorOpts?.maxItems !== 'number' ||
339
- interceptorOpts?.maxItems < 1)
340
- ) {
341
- throw new InvalidArgumentError(
342
- 'Invalid maxItems. Must be a positive number and greater than zero'
343
- )
344
- }
345
-
346
- if (
347
- interceptorOpts?.affinity != null &&
348
- interceptorOpts?.affinity !== 4 &&
349
- interceptorOpts?.affinity !== 6
350
- ) {
351
- throw new InvalidArgumentError('Invalid affinity. Must be either 4 or 6')
352
- }
353
-
354
- if (
355
- interceptorOpts?.dualStack != null &&
356
- typeof interceptorOpts?.dualStack !== 'boolean'
357
- ) {
358
- throw new InvalidArgumentError('Invalid dualStack. Must be a boolean')
359
- }
360
-
361
- if (
362
- interceptorOpts?.lookup != null &&
363
- typeof interceptorOpts?.lookup !== 'function'
364
- ) {
365
- throw new InvalidArgumentError('Invalid lookup. Must be a function')
366
- }
367
-
368
- if (
369
- interceptorOpts?.pick != null &&
370
- typeof interceptorOpts?.pick !== 'function'
371
- ) {
372
- throw new InvalidArgumentError('Invalid pick. Must be a function')
373
- }
374
-
375
- const dualStack = interceptorOpts?.dualStack ?? true
376
- let affinity
377
- if (dualStack) {
378
- affinity = interceptorOpts?.affinity ?? null
379
- } else {
380
- affinity = interceptorOpts?.affinity ?? 4
381
- }
382
-
383
- const opts = {
384
- maxTTL: interceptorOpts?.maxTTL ?? 10e3, // Expressed in ms
385
- lookup: interceptorOpts?.lookup ?? null,
386
- pick: interceptorOpts?.pick ?? null,
387
- dualStack,
388
- affinity,
389
- maxItems: interceptorOpts?.maxItems ?? Infinity
390
- }
391
-
392
- const instance = new DNSInstance(opts)
393
-
394
- return dispatch => {
395
- return function dnsInterceptor (origDispatchOpts, handler) {
396
- const origin =
397
- origDispatchOpts.origin.constructor === URL
398
- ? origDispatchOpts.origin
399
- : new URL(origDispatchOpts.origin)
400
-
401
- if (isIP(origin.hostname) !== 0) {
402
- return dispatch(origDispatchOpts, handler)
403
- }
404
-
405
- instance.runLookup(origin, origDispatchOpts, (err, newOrigin) => {
406
- if (err) {
407
- return handler.onResponseError(null, err)
408
- }
409
-
410
- const dispatchOpts = {
411
- ...origDispatchOpts,
412
- servername: origin.hostname, // For SNI on TLS
413
- origin: newOrigin.origin,
414
- headers: {
415
- host: origin.host,
416
- ...origDispatchOpts.headers
417
- }
418
- }
419
-
420
- dispatch(
421
- dispatchOpts,
422
- instance.getHandler(
423
- { origin, dispatch, handler, newOrigin },
424
- origDispatchOpts
425
- )
426
- )
427
- })
428
-
429
- return true
430
- }
431
- }
432
- }
@@ -1,111 +0,0 @@
1
- 'use strict'
2
-
3
- const { InvalidArgumentError, RequestAbortedError } = require('../core/errors')
4
- const DecoratorHandler = require('../handler/decorator-handler')
5
-
6
- class DumpHandler extends DecoratorHandler {
7
- #maxSize = 1024 * 1024
8
- #dumped = false
9
- #size = 0
10
- #controller = null
11
- aborted = false
12
- reason = false
13
-
14
- constructor ({ maxSize, signal }, handler) {
15
- if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) {
16
- throw new InvalidArgumentError('maxSize must be a number greater than 0')
17
- }
18
-
19
- super(handler)
20
-
21
- this.#maxSize = maxSize ?? this.#maxSize
22
- // this.#handler = handler
23
- }
24
-
25
- #abort (reason) {
26
- this.aborted = true
27
- this.reason = reason
28
- }
29
-
30
- onRequestStart (controller, context) {
31
- controller.abort = this.#abort.bind(this)
32
- this.#controller = controller
33
-
34
- return super.onRequestStart(controller, context)
35
- }
36
-
37
- onResponseStart (controller, statusCode, headers, statusMessage) {
38
- const contentLength = headers['content-length']
39
-
40
- if (contentLength != null && contentLength > this.#maxSize) {
41
- throw new RequestAbortedError(
42
- `Response size (${contentLength}) larger than maxSize (${
43
- this.#maxSize
44
- })`
45
- )
46
- }
47
-
48
- if (this.aborted === true) {
49
- return true
50
- }
51
-
52
- return super.onResponseStart(controller, statusCode, headers, statusMessage)
53
- }
54
-
55
- onResponseError (controller, err) {
56
- if (this.#dumped) {
57
- return
58
- }
59
-
60
- err = this.#controller.reason ?? err
61
-
62
- super.onResponseError(controller, err)
63
- }
64
-
65
- onResponseData (controller, chunk) {
66
- this.#size = this.#size + chunk.length
67
-
68
- if (this.#size >= this.#maxSize) {
69
- this.#dumped = true
70
-
71
- if (this.aborted === true) {
72
- super.onResponseError(controller, this.reason)
73
- } else {
74
- super.onResponseEnd(controller, {})
75
- }
76
- }
77
-
78
- return true
79
- }
80
-
81
- onResponseEnd (controller, trailers) {
82
- if (this.#dumped) {
83
- return
84
- }
85
-
86
- if (this.#controller.aborted === true) {
87
- super.onResponseError(controller, this.reason)
88
- return
89
- }
90
-
91
- super.onResponseEnd(controller, trailers)
92
- }
93
- }
94
-
95
- function createDumpInterceptor (
96
- { maxSize: defaultMaxSize } = {
97
- maxSize: 1024 * 1024
98
- }
99
- ) {
100
- return dispatch => {
101
- return function Intercept (opts, handler) {
102
- const { dumpMaxSize = defaultMaxSize } = opts
103
-
104
- const dumpHandler = new DumpHandler({ maxSize: dumpMaxSize, signal: opts.signal }, handler)
105
-
106
- return dispatch(opts, dumpHandler)
107
- }
108
- }
109
- }
110
-
111
- module.exports = createDumpInterceptor
@@ -1,21 +0,0 @@
1
- 'use strict'
2
-
3
- const RedirectHandler = require('../handler/redirect-handler')
4
-
5
- function createRedirectInterceptor ({ maxRedirections: defaultMaxRedirections } = {}) {
6
- return (dispatch) => {
7
- return function Intercept (opts, handler) {
8
- const { maxRedirections = defaultMaxRedirections, ...rest } = opts
9
-
10
- if (maxRedirections == null || maxRedirections === 0) {
11
- return dispatch(opts, handler)
12
- }
13
-
14
- const dispatchOpts = { ...rest, maxRedirections: 0 } // Stop sub dispatcher from also redirecting.
15
- const redirectHandler = new RedirectHandler(dispatch, maxRedirections, dispatchOpts, handler)
16
- return dispatch(dispatchOpts, redirectHandler)
17
- }
18
- }
19
- }
20
-
21
- module.exports = createRedirectInterceptor
@@ -1,95 +0,0 @@
1
- 'use strict'
2
-
3
- // const { parseHeaders } = require('../core/util')
4
- const DecoratorHandler = require('../handler/decorator-handler')
5
- const { ResponseError } = require('../core/errors')
6
-
7
- class ResponseErrorHandler extends DecoratorHandler {
8
- #statusCode
9
- #contentType
10
- #decoder
11
- #headers
12
- #body
13
-
14
- constructor (_opts, { handler }) {
15
- super(handler)
16
- }
17
-
18
- #checkContentType (contentType) {
19
- return (this.#contentType ?? '').indexOf(contentType) === 0
20
- }
21
-
22
- onRequestStart (controller, context) {
23
- this.#statusCode = 0
24
- this.#contentType = null
25
- this.#decoder = null
26
- this.#headers = null
27
- this.#body = ''
28
-
29
- return super.onRequestStart(controller, context)
30
- }
31
-
32
- onResponseStart (controller, statusCode, headers, statusMessage) {
33
- this.#statusCode = statusCode
34
- this.#headers = headers
35
- this.#contentType = headers['content-type']
36
-
37
- if (this.#statusCode < 400) {
38
- return super.onResponseStart(controller, statusCode, headers, statusMessage)
39
- }
40
-
41
- if (this.#checkContentType('application/json') || this.#checkContentType('text/plain')) {
42
- this.#decoder = new TextDecoder('utf-8')
43
- }
44
- }
45
-
46
- onResponseData (controller, chunk) {
47
- if (this.#statusCode < 400) {
48
- return super.onResponseData(controller, chunk)
49
- }
50
-
51
- this.#body += this.#decoder?.decode(chunk, { stream: true }) ?? ''
52
- }
53
-
54
- onResponseEnd (controller, trailers) {
55
- if (this.#statusCode >= 400) {
56
- this.#body += this.#decoder?.decode(undefined, { stream: false }) ?? ''
57
-
58
- if (this.#checkContentType('application/json')) {
59
- try {
60
- this.#body = JSON.parse(this.#body)
61
- } catch {
62
- // Do nothing...
63
- }
64
- }
65
-
66
- let err
67
- const stackTraceLimit = Error.stackTraceLimit
68
- Error.stackTraceLimit = 0
69
- try {
70
- err = new ResponseError('Response Error', this.#statusCode, {
71
- body: this.#body,
72
- headers: this.#headers
73
- })
74
- } finally {
75
- Error.stackTraceLimit = stackTraceLimit
76
- }
77
-
78
- super.onResponseError(controller, err)
79
- } else {
80
- super.onResponseEnd(controller, trailers)
81
- }
82
- }
83
-
84
- onResponseError (controller, err) {
85
- super.onResponseError(controller, err)
86
- }
87
- }
88
-
89
- module.exports = () => {
90
- return (dispatch) => {
91
- return function Intercept (opts, handler) {
92
- return dispatch(opts, new ResponseErrorHandler(opts, { handler }))
93
- }
94
- }
95
- }
@@ -1,19 +0,0 @@
1
- 'use strict'
2
- const RetryHandler = require('../handler/retry-handler')
3
-
4
- module.exports = globalOpts => {
5
- return dispatch => {
6
- return function retryInterceptor (opts, handler) {
7
- return dispatch(
8
- opts,
9
- new RetryHandler(
10
- { ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } },
11
- {
12
- handler,
13
- dispatch
14
- }
15
- )
16
- )
17
- }
18
- }
19
- }
File without changes