@nocobase/plugin-idp-oauth 2.1.0-alpha.17 → 2.1.0-alpha.18

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 (214) hide show
  1. package/build.config.ts +1 -1
  2. package/dist/externalVersion.js +4 -4
  3. package/dist/node_modules/light-my-request/package.json +1 -1
  4. package/dist/node_modules/undici/LICENSE +21 -0
  5. package/dist/node_modules/undici/README.md +741 -0
  6. package/dist/node_modules/undici/docs/docs/api/Agent.md +84 -0
  7. package/dist/node_modules/undici/docs/docs/api/BalancedPool.md +99 -0
  8. package/dist/node_modules/undici/docs/docs/api/CacheStorage.md +30 -0
  9. package/dist/node_modules/undici/docs/docs/api/CacheStore.md +164 -0
  10. package/dist/node_modules/undici/docs/docs/api/Client.md +285 -0
  11. package/dist/node_modules/undici/docs/docs/api/ClientStats.md +27 -0
  12. package/dist/node_modules/undici/docs/docs/api/Connector.md +115 -0
  13. package/dist/node_modules/undici/docs/docs/api/ContentType.md +57 -0
  14. package/dist/node_modules/undici/docs/docs/api/Cookies.md +101 -0
  15. package/dist/node_modules/undici/docs/docs/api/Debug.md +62 -0
  16. package/dist/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +315 -0
  17. package/dist/node_modules/undici/docs/docs/api/Dispatcher.md +1392 -0
  18. package/dist/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +159 -0
  19. package/dist/node_modules/undici/docs/docs/api/Errors.md +49 -0
  20. package/dist/node_modules/undici/docs/docs/api/EventSource.md +45 -0
  21. package/dist/node_modules/undici/docs/docs/api/Fetch.md +60 -0
  22. package/dist/node_modules/undici/docs/docs/api/GlobalInstallation.md +139 -0
  23. package/dist/node_modules/undici/docs/docs/api/H2CClient.md +263 -0
  24. package/dist/node_modules/undici/docs/docs/api/MockAgent.md +603 -0
  25. package/dist/node_modules/undici/docs/docs/api/MockCallHistory.md +197 -0
  26. package/dist/node_modules/undici/docs/docs/api/MockCallHistoryLog.md +43 -0
  27. package/dist/node_modules/undici/docs/docs/api/MockClient.md +81 -0
  28. package/dist/node_modules/undici/docs/docs/api/MockErrors.md +12 -0
  29. package/dist/node_modules/undici/docs/docs/api/MockPool.md +555 -0
  30. package/dist/node_modules/undici/docs/docs/api/Pool.md +84 -0
  31. package/dist/node_modules/undici/docs/docs/api/PoolStats.md +35 -0
  32. package/dist/node_modules/undici/docs/docs/api/ProxyAgent.md +229 -0
  33. package/dist/node_modules/undici/docs/docs/api/RedirectHandler.md +93 -0
  34. package/dist/node_modules/undici/docs/docs/api/RetryAgent.md +50 -0
  35. package/dist/node_modules/undici/docs/docs/api/RetryHandler.md +118 -0
  36. package/dist/node_modules/undici/docs/docs/api/RoundRobinPool.md +145 -0
  37. package/dist/node_modules/undici/docs/docs/api/SnapshotAgent.md +616 -0
  38. package/dist/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +274 -0
  39. package/dist/node_modules/undici/docs/docs/api/Util.md +25 -0
  40. package/dist/node_modules/undici/docs/docs/api/WebSocket.md +141 -0
  41. package/dist/node_modules/undici/docs/docs/api/api-lifecycle.md +91 -0
  42. package/dist/node_modules/undici/docs/docs/best-practices/client-certificate.md +64 -0
  43. package/dist/node_modules/undici/docs/docs/best-practices/crawling.md +58 -0
  44. package/dist/node_modules/undici/docs/docs/best-practices/mocking-request.md +190 -0
  45. package/dist/node_modules/undici/docs/docs/best-practices/proxy.md +127 -0
  46. package/dist/node_modules/undici/docs/docs/best-practices/undici-vs-builtin-fetch.md +224 -0
  47. package/dist/node_modules/undici/docs/docs/best-practices/writing-tests.md +63 -0
  48. package/dist/node_modules/undici/index-fetch.js +65 -0
  49. package/dist/node_modules/undici/index.d.ts +3 -0
  50. package/dist/node_modules/undici/index.js +234 -0
  51. package/dist/node_modules/undici/lib/api/abort-signal.js +59 -0
  52. package/dist/node_modules/undici/lib/api/api-connect.js +110 -0
  53. package/dist/node_modules/undici/lib/api/api-pipeline.js +252 -0
  54. package/dist/node_modules/undici/lib/api/api-request.js +214 -0
  55. package/dist/node_modules/undici/lib/api/api-stream.js +209 -0
  56. package/dist/node_modules/undici/lib/api/api-upgrade.js +111 -0
  57. package/dist/node_modules/undici/lib/api/index.js +7 -0
  58. package/dist/node_modules/undici/lib/api/readable.js +580 -0
  59. package/dist/node_modules/undici/lib/cache/memory-cache-store.js +234 -0
  60. package/dist/node_modules/undici/lib/cache/sqlite-cache-store.js +461 -0
  61. package/dist/node_modules/undici/lib/core/connect.js +137 -0
  62. package/dist/node_modules/undici/lib/core/constants.js +143 -0
  63. package/dist/node_modules/undici/lib/core/diagnostics.js +227 -0
  64. package/dist/node_modules/undici/lib/core/errors.js +477 -0
  65. package/dist/node_modules/undici/lib/core/request.js +438 -0
  66. package/dist/node_modules/undici/lib/core/socks5-client.js +407 -0
  67. package/dist/node_modules/undici/lib/core/socks5-utils.js +203 -0
  68. package/dist/node_modules/undici/lib/core/symbols.js +75 -0
  69. package/dist/node_modules/undici/lib/core/tree.js +160 -0
  70. package/dist/node_modules/undici/lib/core/util.js +992 -0
  71. package/dist/node_modules/undici/lib/dispatcher/agent.js +158 -0
  72. package/dist/node_modules/undici/lib/dispatcher/balanced-pool.js +219 -0
  73. package/dist/node_modules/undici/lib/dispatcher/client-h1.js +1610 -0
  74. package/dist/node_modules/undici/lib/dispatcher/client-h2.js +995 -0
  75. package/dist/node_modules/undici/lib/dispatcher/client.js +659 -0
  76. package/dist/node_modules/undici/lib/dispatcher/dispatcher-base.js +165 -0
  77. package/dist/node_modules/undici/lib/dispatcher/dispatcher.js +48 -0
  78. package/dist/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +146 -0
  79. package/dist/node_modules/undici/lib/dispatcher/fixed-queue.js +135 -0
  80. package/dist/node_modules/undici/lib/dispatcher/h2c-client.js +51 -0
  81. package/dist/node_modules/undici/lib/dispatcher/pool-base.js +214 -0
  82. package/dist/node_modules/undici/lib/dispatcher/pool.js +118 -0
  83. package/dist/node_modules/undici/lib/dispatcher/proxy-agent.js +318 -0
  84. package/dist/node_modules/undici/lib/dispatcher/retry-agent.js +35 -0
  85. package/dist/node_modules/undici/lib/dispatcher/round-robin-pool.js +137 -0
  86. package/dist/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +249 -0
  87. package/dist/node_modules/undici/lib/encoding/index.js +33 -0
  88. package/dist/node_modules/undici/lib/global.js +50 -0
  89. package/dist/node_modules/undici/lib/handler/cache-handler.js +578 -0
  90. package/dist/node_modules/undici/lib/handler/cache-revalidation-handler.js +124 -0
  91. package/dist/node_modules/undici/lib/handler/decorator-handler.js +67 -0
  92. package/dist/node_modules/undici/lib/handler/deduplication-handler.js +460 -0
  93. package/dist/node_modules/undici/lib/handler/redirect-handler.js +238 -0
  94. package/dist/node_modules/undici/lib/handler/retry-handler.js +394 -0
  95. package/dist/node_modules/undici/lib/handler/unwrap-handler.js +100 -0
  96. package/dist/node_modules/undici/lib/handler/wrap-handler.js +105 -0
  97. package/dist/node_modules/undici/lib/interceptor/cache.js +495 -0
  98. package/dist/node_modules/undici/lib/interceptor/decompress.js +259 -0
  99. package/dist/node_modules/undici/lib/interceptor/deduplicate.js +117 -0
  100. package/dist/node_modules/undici/lib/interceptor/dns.js +571 -0
  101. package/dist/node_modules/undici/lib/interceptor/dump.js +112 -0
  102. package/dist/node_modules/undici/lib/interceptor/redirect.js +21 -0
  103. package/dist/node_modules/undici/lib/interceptor/response-error.js +95 -0
  104. package/dist/node_modules/undici/lib/interceptor/retry.js +19 -0
  105. package/dist/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  106. package/dist/node_modules/undici/lib/llhttp/constants.d.ts +195 -0
  107. package/dist/node_modules/undici/lib/llhttp/constants.js +531 -0
  108. package/dist/node_modules/undici/lib/llhttp/llhttp-wasm.js +15 -0
  109. package/dist/node_modules/undici/lib/llhttp/llhttp_simd-wasm.js +15 -0
  110. package/dist/node_modules/undici/lib/llhttp/utils.d.ts +2 -0
  111. package/dist/node_modules/undici/lib/llhttp/utils.js +12 -0
  112. package/dist/node_modules/undici/lib/mock/mock-agent.js +232 -0
  113. package/dist/node_modules/undici/lib/mock/mock-call-history.js +248 -0
  114. package/dist/node_modules/undici/lib/mock/mock-client.js +68 -0
  115. package/dist/node_modules/undici/lib/mock/mock-errors.js +29 -0
  116. package/dist/node_modules/undici/lib/mock/mock-interceptor.js +209 -0
  117. package/dist/node_modules/undici/lib/mock/mock-pool.js +68 -0
  118. package/dist/node_modules/undici/lib/mock/mock-symbols.js +32 -0
  119. package/dist/node_modules/undici/lib/mock/mock-utils.js +486 -0
  120. package/dist/node_modules/undici/lib/mock/pending-interceptors-formatter.js +43 -0
  121. package/dist/node_modules/undici/lib/mock/snapshot-agent.js +353 -0
  122. package/dist/node_modules/undici/lib/mock/snapshot-recorder.js +588 -0
  123. package/dist/node_modules/undici/lib/mock/snapshot-utils.js +158 -0
  124. package/dist/node_modules/undici/lib/util/cache.js +407 -0
  125. package/dist/node_modules/undici/lib/util/date.js +653 -0
  126. package/dist/node_modules/undici/lib/util/promise.js +28 -0
  127. package/dist/node_modules/undici/lib/util/runtime-features.js +124 -0
  128. package/dist/node_modules/undici/lib/util/stats.js +32 -0
  129. package/dist/node_modules/undici/lib/util/timers.js +425 -0
  130. package/dist/node_modules/undici/lib/web/cache/cache.js +864 -0
  131. package/dist/node_modules/undici/lib/web/cache/cachestorage.js +152 -0
  132. package/dist/node_modules/undici/lib/web/cache/util.js +45 -0
  133. package/dist/node_modules/undici/lib/web/cookies/constants.js +12 -0
  134. package/dist/node_modules/undici/lib/web/cookies/index.js +199 -0
  135. package/dist/node_modules/undici/lib/web/cookies/parse.js +322 -0
  136. package/dist/node_modules/undici/lib/web/cookies/util.js +282 -0
  137. package/dist/node_modules/undici/lib/web/eventsource/eventsource-stream.js +399 -0
  138. package/dist/node_modules/undici/lib/web/eventsource/eventsource.js +501 -0
  139. package/dist/node_modules/undici/lib/web/eventsource/util.js +29 -0
  140. package/dist/node_modules/undici/lib/web/fetch/LICENSE +21 -0
  141. package/dist/node_modules/undici/lib/web/fetch/body.js +509 -0
  142. package/dist/node_modules/undici/lib/web/fetch/constants.js +131 -0
  143. package/dist/node_modules/undici/lib/web/fetch/data-url.js +596 -0
  144. package/dist/node_modules/undici/lib/web/fetch/formdata-parser.js +575 -0
  145. package/dist/node_modules/undici/lib/web/fetch/formdata.js +259 -0
  146. package/dist/node_modules/undici/lib/web/fetch/global.js +40 -0
  147. package/dist/node_modules/undici/lib/web/fetch/headers.js +719 -0
  148. package/dist/node_modules/undici/lib/web/fetch/index.js +2397 -0
  149. package/dist/node_modules/undici/lib/web/fetch/request.js +1115 -0
  150. package/dist/node_modules/undici/lib/web/fetch/response.js +641 -0
  151. package/dist/node_modules/undici/lib/web/fetch/util.js +1520 -0
  152. package/dist/node_modules/undici/lib/web/infra/index.js +229 -0
  153. package/dist/node_modules/undici/lib/web/subresource-integrity/Readme.md +9 -0
  154. package/dist/node_modules/undici/lib/web/subresource-integrity/subresource-integrity.js +307 -0
  155. package/dist/node_modules/undici/lib/web/webidl/index.js +1006 -0
  156. package/dist/node_modules/undici/lib/web/websocket/connection.js +329 -0
  157. package/dist/node_modules/undici/lib/web/websocket/constants.js +126 -0
  158. package/dist/node_modules/undici/lib/web/websocket/events.js +331 -0
  159. package/dist/node_modules/undici/lib/web/websocket/frame.js +133 -0
  160. package/dist/node_modules/undici/lib/web/websocket/permessage-deflate.js +118 -0
  161. package/dist/node_modules/undici/lib/web/websocket/receiver.js +450 -0
  162. package/dist/node_modules/undici/lib/web/websocket/sender.js +109 -0
  163. package/dist/node_modules/undici/lib/web/websocket/stream/websocketerror.js +104 -0
  164. package/dist/node_modules/undici/lib/web/websocket/stream/websocketstream.js +497 -0
  165. package/dist/node_modules/undici/lib/web/websocket/util.js +347 -0
  166. package/dist/node_modules/undici/lib/web/websocket/websocket.js +751 -0
  167. package/dist/node_modules/undici/package.json +152 -0
  168. package/dist/node_modules/undici/scripts/strip-comments.js +10 -0
  169. package/dist/node_modules/undici/types/README.md +6 -0
  170. package/dist/node_modules/undici/types/agent.d.ts +32 -0
  171. package/dist/node_modules/undici/types/api.d.ts +43 -0
  172. package/dist/node_modules/undici/types/balanced-pool.d.ts +30 -0
  173. package/dist/node_modules/undici/types/cache-interceptor.d.ts +179 -0
  174. package/dist/node_modules/undici/types/cache.d.ts +36 -0
  175. package/dist/node_modules/undici/types/client-stats.d.ts +15 -0
  176. package/dist/node_modules/undici/types/client.d.ts +123 -0
  177. package/dist/node_modules/undici/types/connector.d.ts +36 -0
  178. package/dist/node_modules/undici/types/content-type.d.ts +21 -0
  179. package/dist/node_modules/undici/types/cookies.d.ts +30 -0
  180. package/dist/node_modules/undici/types/diagnostics-channel.d.ts +74 -0
  181. package/dist/node_modules/undici/types/dispatcher.d.ts +273 -0
  182. package/dist/node_modules/undici/types/env-http-proxy-agent.d.ts +22 -0
  183. package/dist/node_modules/undici/types/errors.d.ts +177 -0
  184. package/dist/node_modules/undici/types/eventsource.d.ts +66 -0
  185. package/dist/node_modules/undici/types/fetch.d.ts +231 -0
  186. package/dist/node_modules/undici/types/formdata.d.ts +114 -0
  187. package/dist/node_modules/undici/types/global-dispatcher.d.ts +9 -0
  188. package/dist/node_modules/undici/types/global-origin.d.ts +7 -0
  189. package/dist/node_modules/undici/types/h2c-client.d.ts +73 -0
  190. package/dist/node_modules/undici/types/handlers.d.ts +14 -0
  191. package/dist/node_modules/undici/types/header.d.ts +160 -0
  192. package/dist/node_modules/undici/types/index.d.ts +91 -0
  193. package/dist/node_modules/undici/types/interceptors.d.ts +80 -0
  194. package/dist/node_modules/undici/types/mock-agent.d.ts +68 -0
  195. package/dist/node_modules/undici/types/mock-call-history.d.ts +111 -0
  196. package/dist/node_modules/undici/types/mock-client.d.ts +27 -0
  197. package/dist/node_modules/undici/types/mock-errors.d.ts +12 -0
  198. package/dist/node_modules/undici/types/mock-interceptor.d.ts +94 -0
  199. package/dist/node_modules/undici/types/mock-pool.d.ts +27 -0
  200. package/dist/node_modules/undici/types/patch.d.ts +29 -0
  201. package/dist/node_modules/undici/types/pool-stats.d.ts +19 -0
  202. package/dist/node_modules/undici/types/pool.d.ts +41 -0
  203. package/dist/node_modules/undici/types/proxy-agent.d.ts +29 -0
  204. package/dist/node_modules/undici/types/readable.d.ts +68 -0
  205. package/dist/node_modules/undici/types/retry-agent.d.ts +8 -0
  206. package/dist/node_modules/undici/types/retry-handler.d.ts +125 -0
  207. package/dist/node_modules/undici/types/round-robin-pool.d.ts +41 -0
  208. package/dist/node_modules/undici/types/snapshot-agent.d.ts +109 -0
  209. package/dist/node_modules/undici/types/socks5-proxy-agent.d.ts +25 -0
  210. package/dist/node_modules/undici/types/util.d.ts +18 -0
  211. package/dist/node_modules/undici/types/utility.d.ts +7 -0
  212. package/dist/node_modules/undici/types/webidl.d.ts +347 -0
  213. package/dist/node_modules/undici/types/websocket.d.ts +188 -0
  214. package/package.json +2 -2
@@ -0,0 +1,1115 @@
1
+ /* globals AbortController */
2
+
3
+ 'use strict'
4
+
5
+ const { extractBody, mixinBody, cloneBody, bodyUnusable } = require('./body')
6
+ const { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require('./headers')
7
+ const util = require('../../core/util')
8
+ const nodeUtil = require('node:util')
9
+ const {
10
+ isValidHTTPToken,
11
+ sameOrigin,
12
+ environmentSettingsObject
13
+ } = require('./util')
14
+ const {
15
+ forbiddenMethodsSet,
16
+ corsSafeListedMethodsSet,
17
+ referrerPolicy,
18
+ requestRedirect,
19
+ requestMode,
20
+ requestCredentials,
21
+ requestCache,
22
+ requestDuplex
23
+ } = require('./constants')
24
+ const { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util
25
+ const { webidl } = require('../webidl')
26
+ const { URLSerializer } = require('./data-url')
27
+ const { kConstruct } = require('../../core/symbols')
28
+ const assert = require('node:assert')
29
+ const { getMaxListeners, setMaxListeners, defaultMaxListeners } = require('node:events')
30
+
31
+ const kAbortController = Symbol('abortController')
32
+
33
+ const requestFinalizer = new FinalizationRegistry(({ signal, abort }) => {
34
+ signal.removeEventListener('abort', abort)
35
+ })
36
+
37
+ const dependentControllerMap = new WeakMap()
38
+
39
+ let abortSignalHasEventHandlerLeakWarning
40
+
41
+ try {
42
+ abortSignalHasEventHandlerLeakWarning = getMaxListeners(new AbortController().signal) > 0
43
+ } catch {
44
+ abortSignalHasEventHandlerLeakWarning = false
45
+ }
46
+
47
+ function buildAbort (acRef) {
48
+ return abort
49
+
50
+ function abort () {
51
+ const ac = acRef.deref()
52
+ if (ac !== undefined) {
53
+ // Currently, there is a problem with FinalizationRegistry.
54
+ // https://github.com/nodejs/node/issues/49344
55
+ // https://github.com/nodejs/node/issues/47748
56
+ // In the case of abort, the first step is to unregister from it.
57
+ // If the controller can refer to it, it is still registered.
58
+ // It will be removed in the future.
59
+ requestFinalizer.unregister(abort)
60
+
61
+ // Unsubscribe a listener.
62
+ // FinalizationRegistry will no longer be called, so this must be done.
63
+ this.removeEventListener('abort', abort)
64
+
65
+ ac.abort(this.reason)
66
+
67
+ const controllerList = dependentControllerMap.get(ac.signal)
68
+
69
+ if (controllerList !== undefined) {
70
+ if (controllerList.size !== 0) {
71
+ for (const ref of controllerList) {
72
+ const ctrl = ref.deref()
73
+ if (ctrl !== undefined) {
74
+ ctrl.abort(this.reason)
75
+ }
76
+ }
77
+ controllerList.clear()
78
+ }
79
+ dependentControllerMap.delete(ac.signal)
80
+ }
81
+ }
82
+ }
83
+ }
84
+
85
+ let patchMethodWarning = false
86
+
87
+ // https://fetch.spec.whatwg.org/#request-class
88
+ class Request {
89
+ /** @type {AbortSignal} */
90
+ #signal
91
+
92
+ /** @type {import('../../dispatcher/dispatcher')} */
93
+ #dispatcher
94
+
95
+ /** @type {Headers} */
96
+ #headers
97
+
98
+ #state
99
+
100
+ // https://fetch.spec.whatwg.org/#dom-request
101
+ constructor (input, init = undefined) {
102
+ webidl.util.markAsUncloneable(this)
103
+
104
+ if (input === kConstruct) {
105
+ return
106
+ }
107
+
108
+ const prefix = 'Request constructor'
109
+ webidl.argumentLengthCheck(arguments, 1, prefix)
110
+
111
+ input = webidl.converters.RequestInfo(input)
112
+ init = webidl.converters.RequestInit(init)
113
+
114
+ // 1. Let request be null.
115
+ let request = null
116
+
117
+ // 2. Let fallbackMode be null.
118
+ let fallbackMode = null
119
+
120
+ // 3. Let baseURL be this’s relevant settings object’s API base URL.
121
+ const baseUrl = environmentSettingsObject.settingsObject.baseUrl
122
+
123
+ // 4. Let signal be null.
124
+ let signal = null
125
+
126
+ // 5. If input is a string, then:
127
+ if (typeof input === 'string') {
128
+ this.#dispatcher = init.dispatcher
129
+
130
+ // 1. Let parsedURL be the result of parsing input with baseURL.
131
+ // 2. If parsedURL is failure, then throw a TypeError.
132
+ let parsedURL
133
+ try {
134
+ parsedURL = new URL(input, baseUrl)
135
+ } catch (err) {
136
+ throw new TypeError('Failed to parse URL from ' + input, { cause: err })
137
+ }
138
+
139
+ // 3. If parsedURL includes credentials, then throw a TypeError.
140
+ if (parsedURL.username || parsedURL.password) {
141
+ throw new TypeError(
142
+ 'Request cannot be constructed from a URL that includes credentials: ' +
143
+ input
144
+ )
145
+ }
146
+
147
+ // 4. Set request to a new request whose URL is parsedURL.
148
+ request = makeRequest({ urlList: [parsedURL] })
149
+
150
+ // 5. Set fallbackMode to "cors".
151
+ fallbackMode = 'cors'
152
+ } else {
153
+ // 6. Otherwise:
154
+
155
+ // 7. Assert: input is a Request object.
156
+ assert(webidl.is.Request(input))
157
+
158
+ // 8. Set request to input’s request.
159
+ request = input.#state
160
+
161
+ // 9. Set signal to input’s signal.
162
+ signal = input.#signal
163
+
164
+ this.#dispatcher = init.dispatcher || input.#dispatcher
165
+ }
166
+
167
+ // 7. Let origin be this’s relevant settings object’s origin.
168
+ const origin = environmentSettingsObject.settingsObject.origin
169
+
170
+ // 8. Let window be "client".
171
+ let window = 'client'
172
+
173
+ // 9. If request’s window is an environment settings object and its origin
174
+ // is same origin with origin, then set window to request’s window.
175
+ if (
176
+ request.window?.constructor?.name === 'EnvironmentSettingsObject' &&
177
+ sameOrigin(request.window, origin)
178
+ ) {
179
+ window = request.window
180
+ }
181
+
182
+ // 10. If init["window"] exists and is non-null, then throw a TypeError.
183
+ if (init.window != null) {
184
+ throw new TypeError(`'window' option '${window}' must be null`)
185
+ }
186
+
187
+ // 11. If init["window"] exists, then set window to "no-window".
188
+ if ('window' in init) {
189
+ window = 'no-window'
190
+ }
191
+
192
+ // 12. Set request to a new request with the following properties:
193
+ request = makeRequest({
194
+ // URL request’s URL.
195
+ // undici implementation note: this is set as the first item in request's urlList in makeRequest
196
+ // method request’s method.
197
+ method: request.method,
198
+ // header list A copy of request’s header list.
199
+ // undici implementation note: headersList is cloned in makeRequest
200
+ headersList: request.headersList,
201
+ // unsafe-request flag Set.
202
+ unsafeRequest: request.unsafeRequest,
203
+ // client This’s relevant settings object.
204
+ client: environmentSettingsObject.settingsObject,
205
+ // window window.
206
+ window,
207
+ // priority request’s priority.
208
+ priority: request.priority,
209
+ // origin request’s origin. The propagation of the origin is only significant for navigation requests
210
+ // being handled by a service worker. In this scenario a request can have an origin that is different
211
+ // from the current client.
212
+ origin: request.origin,
213
+ // referrer request’s referrer.
214
+ referrer: request.referrer,
215
+ // referrer policy request’s referrer policy.
216
+ referrerPolicy: request.referrerPolicy,
217
+ // mode request’s mode.
218
+ mode: request.mode,
219
+ // credentials mode request’s credentials mode.
220
+ credentials: request.credentials,
221
+ // cache mode request’s cache mode.
222
+ cache: request.cache,
223
+ // redirect mode request’s redirect mode.
224
+ redirect: request.redirect,
225
+ // integrity metadata request’s integrity metadata.
226
+ integrity: request.integrity,
227
+ // keepalive request’s keepalive.
228
+ keepalive: request.keepalive,
229
+ // reload-navigation flag request’s reload-navigation flag.
230
+ reloadNavigation: request.reloadNavigation,
231
+ // history-navigation flag request’s history-navigation flag.
232
+ historyNavigation: request.historyNavigation,
233
+ // URL list A clone of request’s URL list.
234
+ urlList: [...request.urlList]
235
+ })
236
+
237
+ const initHasKey = Object.keys(init).length !== 0
238
+
239
+ // 13. If init is not empty, then:
240
+ if (initHasKey) {
241
+ // 1. If request’s mode is "navigate", then set it to "same-origin".
242
+ if (request.mode === 'navigate') {
243
+ request.mode = 'same-origin'
244
+ }
245
+
246
+ // 2. Unset request’s reload-navigation flag.
247
+ request.reloadNavigation = false
248
+
249
+ // 3. Unset request’s history-navigation flag.
250
+ request.historyNavigation = false
251
+
252
+ // 4. Set request’s origin to "client".
253
+ request.origin = 'client'
254
+
255
+ // 5. Set request’s referrer to "client"
256
+ request.referrer = 'client'
257
+
258
+ // 6. Set request’s referrer policy to the empty string.
259
+ request.referrerPolicy = ''
260
+
261
+ // 7. Set request’s URL to request’s current URL.
262
+ request.url = request.urlList[request.urlList.length - 1]
263
+
264
+ // 8. Set request’s URL list to « request’s URL ».
265
+ request.urlList = [request.url]
266
+ }
267
+
268
+ // 14. If init["referrer"] exists, then:
269
+ if (init.referrer !== undefined) {
270
+ // 1. Let referrer be init["referrer"].
271
+ const referrer = init.referrer
272
+
273
+ // 2. If referrer is the empty string, then set request’s referrer to "no-referrer".
274
+ if (referrer === '') {
275
+ request.referrer = 'no-referrer'
276
+ } else {
277
+ // 1. Let parsedReferrer be the result of parsing referrer with
278
+ // baseURL.
279
+ // 2. If parsedReferrer is failure, then throw a TypeError.
280
+ let parsedReferrer
281
+ try {
282
+ parsedReferrer = new URL(referrer, baseUrl)
283
+ } catch (err) {
284
+ throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err })
285
+ }
286
+
287
+ // 3. If one of the following is true
288
+ // - parsedReferrer’s scheme is "about" and path is the string "client"
289
+ // - parsedReferrer’s origin is not same origin with origin
290
+ // then set request’s referrer to "client".
291
+ if (
292
+ (parsedReferrer.protocol === 'about:' && parsedReferrer.hostname === 'client') ||
293
+ (origin && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl))
294
+ ) {
295
+ request.referrer = 'client'
296
+ } else {
297
+ // 4. Otherwise, set request’s referrer to parsedReferrer.
298
+ request.referrer = parsedReferrer
299
+ }
300
+ }
301
+ }
302
+
303
+ // 15. If init["referrerPolicy"] exists, then set request’s referrer policy
304
+ // to it.
305
+ if (init.referrerPolicy !== undefined) {
306
+ request.referrerPolicy = init.referrerPolicy
307
+ }
308
+
309
+ // 16. Let mode be init["mode"] if it exists, and fallbackMode otherwise.
310
+ let mode
311
+ if (init.mode !== undefined) {
312
+ mode = init.mode
313
+ } else {
314
+ mode = fallbackMode
315
+ }
316
+
317
+ // 17. If mode is "navigate", then throw a TypeError.
318
+ if (mode === 'navigate') {
319
+ throw webidl.errors.exception({
320
+ header: 'Request constructor',
321
+ message: 'invalid request mode navigate.'
322
+ })
323
+ }
324
+
325
+ // 18. If mode is non-null, set request’s mode to mode.
326
+ if (mode != null) {
327
+ request.mode = mode
328
+ }
329
+
330
+ // 19. If init["credentials"] exists, then set request’s credentials mode
331
+ // to it.
332
+ if (init.credentials !== undefined) {
333
+ request.credentials = init.credentials
334
+ }
335
+
336
+ // 18. If init["cache"] exists, then set request’s cache mode to it.
337
+ if (init.cache !== undefined) {
338
+ request.cache = init.cache
339
+ }
340
+
341
+ // 21. If request’s cache mode is "only-if-cached" and request’s mode is
342
+ // not "same-origin", then throw a TypeError.
343
+ if (request.cache === 'only-if-cached' && request.mode !== 'same-origin') {
344
+ throw new TypeError(
345
+ "'only-if-cached' can be set only with 'same-origin' mode"
346
+ )
347
+ }
348
+
349
+ // 22. If init["redirect"] exists, then set request’s redirect mode to it.
350
+ if (init.redirect !== undefined) {
351
+ request.redirect = init.redirect
352
+ }
353
+
354
+ // 23. If init["integrity"] exists, then set request’s integrity metadata to it.
355
+ if (init.integrity != null) {
356
+ request.integrity = String(init.integrity)
357
+ }
358
+
359
+ // 24. If init["keepalive"] exists, then set request’s keepalive to it.
360
+ if (init.keepalive !== undefined) {
361
+ request.keepalive = Boolean(init.keepalive)
362
+ }
363
+
364
+ // 25. If init["method"] exists, then:
365
+ if (init.method !== undefined) {
366
+ // 1. Let method be init["method"].
367
+ let method = init.method
368
+
369
+ const mayBeNormalized = normalizedMethodRecords[method]
370
+
371
+ if (mayBeNormalized !== undefined) {
372
+ // Note: Bypass validation DELETE, GET, HEAD, OPTIONS, POST, PUT, PATCH and these lowercase ones
373
+ request.method = mayBeNormalized
374
+ } else {
375
+ // 2. If method is not a method or method is a forbidden method, then
376
+ // throw a TypeError.
377
+ if (!isValidHTTPToken(method)) {
378
+ throw new TypeError(`'${method}' is not a valid HTTP method.`)
379
+ }
380
+
381
+ const upperCase = method.toUpperCase()
382
+
383
+ if (forbiddenMethodsSet.has(upperCase)) {
384
+ throw new TypeError(`'${method}' HTTP method is unsupported.`)
385
+ }
386
+
387
+ // 3. Normalize method.
388
+ // https://fetch.spec.whatwg.org/#concept-method-normalize
389
+ // Note: must be in uppercase
390
+ method = normalizedMethodRecordsBase[upperCase] ?? method
391
+
392
+ // 4. Set request’s method to method.
393
+ request.method = method
394
+ }
395
+
396
+ if (!patchMethodWarning && request.method === 'patch') {
397
+ process.emitWarning('Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.', {
398
+ code: 'UNDICI-FETCH-patch'
399
+ })
400
+
401
+ patchMethodWarning = true
402
+ }
403
+ }
404
+
405
+ // 26. If init["signal"] exists, then set signal to it.
406
+ if (init.signal !== undefined) {
407
+ signal = init.signal
408
+ }
409
+
410
+ // 27. Set this’s request to request.
411
+ this.#state = request
412
+
413
+ // 28. Set this’s signal to a new AbortSignal object with this’s relevant
414
+ // Realm.
415
+ // TODO: could this be simplified with AbortSignal.any
416
+ // (https://dom.spec.whatwg.org/#dom-abortsignal-any)
417
+ const ac = new AbortController()
418
+ this.#signal = ac.signal
419
+
420
+ // 29. If signal is not null, then make this’s signal follow signal.
421
+ if (signal != null) {
422
+ if (signal.aborted) {
423
+ ac.abort(signal.reason)
424
+ } else {
425
+ // Keep a strong ref to ac while request object
426
+ // is alive. This is needed to prevent AbortController
427
+ // from being prematurely garbage collected.
428
+ // See, https://github.com/nodejs/undici/issues/1926.
429
+ this[kAbortController] = ac
430
+
431
+ const acRef = new WeakRef(ac)
432
+ const abort = buildAbort(acRef)
433
+
434
+ // If the max amount of listeners is equal to the default, increase it
435
+ if (abortSignalHasEventHandlerLeakWarning && getMaxListeners(signal) === defaultMaxListeners) {
436
+ setMaxListeners(1500, signal)
437
+ }
438
+
439
+ util.addAbortListener(signal, abort)
440
+ // The third argument must be a registry key to be unregistered.
441
+ // Without it, you cannot unregister.
442
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry
443
+ // abort is used as the unregister key. (because it is unique)
444
+ requestFinalizer.register(ac, { signal, abort }, abort)
445
+ }
446
+ }
447
+
448
+ // 30. Set this’s headers to a new Headers object with this’s relevant
449
+ // Realm, whose header list is request’s header list and guard is
450
+ // "request".
451
+ this.#headers = new Headers(kConstruct)
452
+ setHeadersList(this.#headers, request.headersList)
453
+ setHeadersGuard(this.#headers, 'request')
454
+
455
+ // 31. If this’s request’s mode is "no-cors", then:
456
+ if (mode === 'no-cors') {
457
+ // 1. If this’s request’s method is not a CORS-safelisted method,
458
+ // then throw a TypeError.
459
+ if (!corsSafeListedMethodsSet.has(request.method)) {
460
+ throw new TypeError(
461
+ `'${request.method} is unsupported in no-cors mode.`
462
+ )
463
+ }
464
+
465
+ // 2. Set this’s headers’s guard to "request-no-cors".
466
+ setHeadersGuard(this.#headers, 'request-no-cors')
467
+ }
468
+
469
+ // 32. If init is not empty, then:
470
+ if (initHasKey) {
471
+ /** @type {HeadersList} */
472
+ const headersList = getHeadersList(this.#headers)
473
+ // 1. Let headers be a copy of this’s headers and its associated header
474
+ // list.
475
+ // 2. If init["headers"] exists, then set headers to init["headers"].
476
+ const headers = init.headers !== undefined ? init.headers : new HeadersList(headersList)
477
+
478
+ // 3. Empty this’s headers’s header list.
479
+ headersList.clear()
480
+
481
+ // 4. If headers is a Headers object, then for each header in its header
482
+ // list, append header’s name/header’s value to this’s headers.
483
+ if (headers instanceof HeadersList) {
484
+ for (const { name, value } of headers.rawValues()) {
485
+ headersList.append(name, value, false)
486
+ }
487
+ // Note: Copy the `set-cookie` meta-data.
488
+ headersList.cookies = headers.cookies
489
+ } else {
490
+ // 5. Otherwise, fill this’s headers with headers.
491
+ fillHeaders(this.#headers, headers)
492
+ }
493
+ }
494
+
495
+ // 33. Let inputBody be input’s request’s body if input is a Request
496
+ // object; otherwise null.
497
+ const inputBody = webidl.is.Request(input) ? input.#state.body : null
498
+
499
+ // 34. If either init["body"] exists and is non-null or inputBody is
500
+ // non-null, and request’s method is `GET` or `HEAD`, then throw a
501
+ // TypeError.
502
+ if (
503
+ (init.body != null || inputBody != null) &&
504
+ (request.method === 'GET' || request.method === 'HEAD')
505
+ ) {
506
+ throw new TypeError('Request with GET/HEAD method cannot have body.')
507
+ }
508
+
509
+ // 35. Let initBody be null.
510
+ let initBody = null
511
+
512
+ // 36. If init["body"] exists and is non-null, then:
513
+ if (init.body != null) {
514
+ // 1. Let Content-Type be null.
515
+ // 2. Set initBody and Content-Type to the result of extracting
516
+ // init["body"], with keepalive set to request’s keepalive.
517
+ const [extractedBody, contentType] = extractBody(
518
+ init.body,
519
+ request.keepalive
520
+ )
521
+ initBody = extractedBody
522
+
523
+ // 3, If Content-Type is non-null and this’s headers’s header list does
524
+ // not contain `Content-Type`, then append `Content-Type`/Content-Type to
525
+ // this’s headers.
526
+ if (contentType && !getHeadersList(this.#headers).contains('content-type', true)) {
527
+ this.#headers.append('content-type', contentType, true)
528
+ }
529
+ }
530
+
531
+ // 37. Let inputOrInitBody be initBody if it is non-null; otherwise
532
+ // inputBody.
533
+ const inputOrInitBody = initBody ?? inputBody
534
+
535
+ // 38. If inputOrInitBody is non-null and inputOrInitBody’s source is
536
+ // null, then:
537
+ if (inputOrInitBody != null && inputOrInitBody.source == null) {
538
+ // 1. If initBody is non-null and init["duplex"] does not exist,
539
+ // then throw a TypeError.
540
+ if (initBody != null && init.duplex == null) {
541
+ throw new TypeError('RequestInit: duplex option is required when sending a body.')
542
+ }
543
+
544
+ // 2. If this’s request’s mode is neither "same-origin" nor "cors",
545
+ // then throw a TypeError.
546
+ if (request.mode !== 'same-origin' && request.mode !== 'cors') {
547
+ throw new TypeError(
548
+ 'If request is made from ReadableStream, mode should be "same-origin" or "cors"'
549
+ )
550
+ }
551
+
552
+ // 3. Set this’s request’s use-CORS-preflight flag.
553
+ request.useCORSPreflightFlag = true
554
+ }
555
+
556
+ // 39. Let finalBody be inputOrInitBody.
557
+ let finalBody = inputOrInitBody
558
+
559
+ // 40. If initBody is null and inputBody is non-null, then:
560
+ if (initBody == null && inputBody != null) {
561
+ // 1. If input is unusable, then throw a TypeError.
562
+ if (bodyUnusable(input.#state)) {
563
+ throw new TypeError(
564
+ 'Cannot construct a Request with a Request object that has already been used.'
565
+ )
566
+ }
567
+
568
+ // 2. Set finalBody to the result of creating a proxy for inputBody.
569
+ // https://streams.spec.whatwg.org/#readablestream-create-a-proxy
570
+ const identityTransform = new TransformStream()
571
+ inputBody.stream.pipeThrough(identityTransform)
572
+ finalBody = {
573
+ source: inputBody.source,
574
+ length: inputBody.length,
575
+ stream: identityTransform.readable
576
+ }
577
+ }
578
+
579
+ // 41. Set this’s request’s body to finalBody.
580
+ this.#state.body = finalBody
581
+ }
582
+
583
+ // Returns request’s HTTP method, which is "GET" by default.
584
+ get method () {
585
+ webidl.brandCheck(this, Request)
586
+
587
+ // The method getter steps are to return this’s request’s method.
588
+ return this.#state.method
589
+ }
590
+
591
+ // Returns the URL of request as a string.
592
+ get url () {
593
+ webidl.brandCheck(this, Request)
594
+
595
+ // The url getter steps are to return this’s request’s URL, serialized.
596
+ return URLSerializer(this.#state.url)
597
+ }
598
+
599
+ // Returns a Headers object consisting of the headers associated with request.
600
+ // Note that headers added in the network layer by the user agent will not
601
+ // be accounted for in this object, e.g., the "Host" header.
602
+ get headers () {
603
+ webidl.brandCheck(this, Request)
604
+
605
+ // The headers getter steps are to return this’s headers.
606
+ return this.#headers
607
+ }
608
+
609
+ // Returns the kind of resource requested by request, e.g., "document"
610
+ // or "script".
611
+ get destination () {
612
+ webidl.brandCheck(this, Request)
613
+
614
+ // The destination getter are to return this’s request’s destination.
615
+ return this.#state.destination
616
+ }
617
+
618
+ // Returns the referrer of request. Its value can be a same-origin URL if
619
+ // explicitly set in init, the empty string to indicate no referrer, and
620
+ // "about:client" when defaulting to the global’s default. This is used
621
+ // during fetching to determine the value of the `Referer` header of the
622
+ // request being made.
623
+ get referrer () {
624
+ webidl.brandCheck(this, Request)
625
+
626
+ // 1. If this’s request’s referrer is "no-referrer", then return the
627
+ // empty string.
628
+ if (this.#state.referrer === 'no-referrer') {
629
+ return ''
630
+ }
631
+
632
+ // 2. If this’s request’s referrer is "client", then return
633
+ // "about:client".
634
+ if (this.#state.referrer === 'client') {
635
+ return 'about:client'
636
+ }
637
+
638
+ // Return this’s request’s referrer, serialized.
639
+ return this.#state.referrer.toString()
640
+ }
641
+
642
+ // Returns the referrer policy associated with request.
643
+ // This is used during fetching to compute the value of the request’s
644
+ // referrer.
645
+ get referrerPolicy () {
646
+ webidl.brandCheck(this, Request)
647
+
648
+ // The referrerPolicy getter steps are to return this’s request’s referrer policy.
649
+ return this.#state.referrerPolicy
650
+ }
651
+
652
+ // Returns the mode associated with request, which is a string indicating
653
+ // whether the request will use CORS, or will be restricted to same-origin
654
+ // URLs.
655
+ get mode () {
656
+ webidl.brandCheck(this, Request)
657
+
658
+ // The mode getter steps are to return this’s request’s mode.
659
+ return this.#state.mode
660
+ }
661
+
662
+ // Returns the credentials mode associated with request,
663
+ // which is a string indicating whether credentials will be sent with the
664
+ // request always, never, or only when sent to a same-origin URL.
665
+ get credentials () {
666
+ webidl.brandCheck(this, Request)
667
+
668
+ // The credentials getter steps are to return this’s request’s credentials mode.
669
+ return this.#state.credentials
670
+ }
671
+
672
+ // Returns the cache mode associated with request,
673
+ // which is a string indicating how the request will
674
+ // interact with the browser’s cache when fetching.
675
+ get cache () {
676
+ webidl.brandCheck(this, Request)
677
+
678
+ // The cache getter steps are to return this’s request’s cache mode.
679
+ return this.#state.cache
680
+ }
681
+
682
+ // Returns the redirect mode associated with request,
683
+ // which is a string indicating how redirects for the
684
+ // request will be handled during fetching. A request
685
+ // will follow redirects by default.
686
+ get redirect () {
687
+ webidl.brandCheck(this, Request)
688
+
689
+ // The redirect getter steps are to return this’s request’s redirect mode.
690
+ return this.#state.redirect
691
+ }
692
+
693
+ // Returns request’s subresource integrity metadata, which is a
694
+ // cryptographic hash of the resource being fetched. Its value
695
+ // consists of multiple hashes separated by whitespace. [SRI]
696
+ get integrity () {
697
+ webidl.brandCheck(this, Request)
698
+
699
+ // The integrity getter steps are to return this’s request’s integrity
700
+ // metadata.
701
+ return this.#state.integrity
702
+ }
703
+
704
+ // Returns a boolean indicating whether or not request can outlive the
705
+ // global in which it was created.
706
+ get keepalive () {
707
+ webidl.brandCheck(this, Request)
708
+
709
+ // The keepalive getter steps are to return this’s request’s keepalive.
710
+ return this.#state.keepalive
711
+ }
712
+
713
+ // Returns a boolean indicating whether or not request is for a reload
714
+ // navigation.
715
+ get isReloadNavigation () {
716
+ webidl.brandCheck(this, Request)
717
+
718
+ // The isReloadNavigation getter steps are to return true if this’s
719
+ // request’s reload-navigation flag is set; otherwise false.
720
+ return this.#state.reloadNavigation
721
+ }
722
+
723
+ // Returns a boolean indicating whether or not request is for a history
724
+ // navigation (a.k.a. back-forward navigation).
725
+ get isHistoryNavigation () {
726
+ webidl.brandCheck(this, Request)
727
+
728
+ // The isHistoryNavigation getter steps are to return true if this’s request’s
729
+ // history-navigation flag is set; otherwise false.
730
+ return this.#state.historyNavigation
731
+ }
732
+
733
+ // Returns the signal associated with request, which is an AbortSignal
734
+ // object indicating whether or not request has been aborted, and its
735
+ // abort event handler.
736
+ get signal () {
737
+ webidl.brandCheck(this, Request)
738
+
739
+ // The signal getter steps are to return this’s signal.
740
+ return this.#signal
741
+ }
742
+
743
+ get body () {
744
+ webidl.brandCheck(this, Request)
745
+
746
+ return this.#state.body ? this.#state.body.stream : null
747
+ }
748
+
749
+ get bodyUsed () {
750
+ webidl.brandCheck(this, Request)
751
+
752
+ return !!this.#state.body && util.isDisturbed(this.#state.body.stream)
753
+ }
754
+
755
+ get duplex () {
756
+ webidl.brandCheck(this, Request)
757
+
758
+ return 'half'
759
+ }
760
+
761
+ // Returns a clone of request.
762
+ clone () {
763
+ webidl.brandCheck(this, Request)
764
+
765
+ // 1. If this is unusable, then throw a TypeError.
766
+ if (bodyUnusable(this.#state)) {
767
+ throw new TypeError('unusable')
768
+ }
769
+
770
+ // 2. Let clonedRequest be the result of cloning this’s request.
771
+ const clonedRequest = cloneRequest(this.#state)
772
+
773
+ // 3. Let clonedRequestObject be the result of creating a Request object,
774
+ // given clonedRequest, this’s headers’s guard, and this’s relevant Realm.
775
+ // 4. Make clonedRequestObject’s signal follow this’s signal.
776
+ const ac = new AbortController()
777
+ if (this.signal.aborted) {
778
+ ac.abort(this.signal.reason)
779
+ } else {
780
+ let list = dependentControllerMap.get(this.signal)
781
+ if (list === undefined) {
782
+ list = new Set()
783
+ dependentControllerMap.set(this.signal, list)
784
+ }
785
+ const acRef = new WeakRef(ac)
786
+ list.add(acRef)
787
+ util.addAbortListener(
788
+ ac.signal,
789
+ buildAbort(acRef)
790
+ )
791
+ }
792
+
793
+ // 4. Return clonedRequestObject.
794
+ return fromInnerRequest(clonedRequest, this.#dispatcher, ac.signal, getHeadersGuard(this.#headers))
795
+ }
796
+
797
+ [nodeUtil.inspect.custom] (depth, options) {
798
+ if (options.depth === null) {
799
+ options.depth = 2
800
+ }
801
+
802
+ options.colors ??= true
803
+
804
+ const properties = {
805
+ method: this.method,
806
+ url: this.url,
807
+ headers: this.headers,
808
+ destination: this.destination,
809
+ referrer: this.referrer,
810
+ referrerPolicy: this.referrerPolicy,
811
+ mode: this.mode,
812
+ credentials: this.credentials,
813
+ cache: this.cache,
814
+ redirect: this.redirect,
815
+ integrity: this.integrity,
816
+ keepalive: this.keepalive,
817
+ isReloadNavigation: this.isReloadNavigation,
818
+ isHistoryNavigation: this.isHistoryNavigation,
819
+ signal: this.signal
820
+ }
821
+
822
+ return `Request ${nodeUtil.formatWithOptions(options, properties)}`
823
+ }
824
+
825
+ /**
826
+ * @param {Request} request
827
+ * @param {AbortSignal} newSignal
828
+ */
829
+ static setRequestSignal (request, newSignal) {
830
+ request.#signal = newSignal
831
+ return request
832
+ }
833
+
834
+ /**
835
+ * @param {Request} request
836
+ */
837
+ static getRequestDispatcher (request) {
838
+ return request.#dispatcher
839
+ }
840
+
841
+ /**
842
+ * @param {Request} request
843
+ * @param {import('../../dispatcher/dispatcher')} newDispatcher
844
+ */
845
+ static setRequestDispatcher (request, newDispatcher) {
846
+ request.#dispatcher = newDispatcher
847
+ }
848
+
849
+ /**
850
+ * @param {Request} request
851
+ * @param {Headers} newHeaders
852
+ */
853
+ static setRequestHeaders (request, newHeaders) {
854
+ request.#headers = newHeaders
855
+ }
856
+
857
+ /**
858
+ * @param {Request} request
859
+ */
860
+ static getRequestState (request) {
861
+ return request.#state
862
+ }
863
+
864
+ /**
865
+ * @param {Request} request
866
+ * @param {any} newState
867
+ */
868
+ static setRequestState (request, newState) {
869
+ request.#state = newState
870
+ }
871
+ }
872
+
873
+ const { setRequestSignal, getRequestDispatcher, setRequestDispatcher, setRequestHeaders, getRequestState, setRequestState } = Request
874
+ Reflect.deleteProperty(Request, 'setRequestSignal')
875
+ Reflect.deleteProperty(Request, 'getRequestDispatcher')
876
+ Reflect.deleteProperty(Request, 'setRequestDispatcher')
877
+ Reflect.deleteProperty(Request, 'setRequestHeaders')
878
+ Reflect.deleteProperty(Request, 'getRequestState')
879
+ Reflect.deleteProperty(Request, 'setRequestState')
880
+
881
+ mixinBody(Request, getRequestState)
882
+
883
+ // https://fetch.spec.whatwg.org/#requests
884
+ function makeRequest (init) {
885
+ return {
886
+ method: init.method ?? 'GET',
887
+ localURLsOnly: init.localURLsOnly ?? false,
888
+ unsafeRequest: init.unsafeRequest ?? false,
889
+ body: init.body ?? null,
890
+ client: init.client ?? null,
891
+ reservedClient: init.reservedClient ?? null,
892
+ replacesClientId: init.replacesClientId ?? '',
893
+ window: init.window ?? 'client',
894
+ keepalive: init.keepalive ?? false,
895
+ serviceWorkers: init.serviceWorkers ?? 'all',
896
+ initiator: init.initiator ?? '',
897
+ destination: init.destination ?? '',
898
+ priority: init.priority ?? null,
899
+ origin: init.origin ?? 'client',
900
+ policyContainer: init.policyContainer ?? 'client',
901
+ referrer: init.referrer ?? 'client',
902
+ referrerPolicy: init.referrerPolicy ?? '',
903
+ mode: init.mode ?? 'no-cors',
904
+ useCORSPreflightFlag: init.useCORSPreflightFlag ?? false,
905
+ credentials: init.credentials ?? 'same-origin',
906
+ useCredentials: init.useCredentials ?? false,
907
+ cache: init.cache ?? 'default',
908
+ redirect: init.redirect ?? 'follow',
909
+ integrity: init.integrity ?? '',
910
+ cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? '',
911
+ parserMetadata: init.parserMetadata ?? '',
912
+ reloadNavigation: init.reloadNavigation ?? false,
913
+ historyNavigation: init.historyNavigation ?? false,
914
+ userActivation: init.userActivation ?? false,
915
+ taintedOrigin: init.taintedOrigin ?? false,
916
+ redirectCount: init.redirectCount ?? 0,
917
+ responseTainting: init.responseTainting ?? 'basic',
918
+ preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false,
919
+ done: init.done ?? false,
920
+ timingAllowFailed: init.timingAllowFailed ?? false,
921
+ useURLCredentials: init.useURLCredentials ?? undefined,
922
+ traversableForUserPrompts: init.traversableForUserPrompts ?? 'client',
923
+ urlList: init.urlList,
924
+ url: init.urlList[0],
925
+ headersList: init.headersList
926
+ ? new HeadersList(init.headersList)
927
+ : new HeadersList()
928
+ }
929
+ }
930
+
931
+ // https://fetch.spec.whatwg.org/#concept-request-clone
932
+ function cloneRequest (request) {
933
+ // To clone a request request, run these steps:
934
+
935
+ // 1. Let newRequest be a copy of request, except for its body.
936
+ const newRequest = makeRequest({ ...request, body: null })
937
+
938
+ // 2. If request’s body is non-null, set newRequest’s body to the
939
+ // result of cloning request’s body.
940
+ if (request.body != null) {
941
+ newRequest.body = cloneBody(request.body)
942
+ }
943
+
944
+ // 3. Return newRequest.
945
+ return newRequest
946
+ }
947
+
948
+ /**
949
+ * @see https://fetch.spec.whatwg.org/#request-create
950
+ * @param {any} innerRequest
951
+ * @param {import('../../dispatcher/agent')} dispatcher
952
+ * @param {AbortSignal} signal
953
+ * @param {'request' | 'immutable' | 'request-no-cors' | 'response' | 'none'} guard
954
+ * @returns {Request}
955
+ */
956
+ function fromInnerRequest (innerRequest, dispatcher, signal, guard) {
957
+ const request = new Request(kConstruct)
958
+ setRequestState(request, innerRequest)
959
+ setRequestDispatcher(request, dispatcher)
960
+ setRequestSignal(request, signal)
961
+ const headers = new Headers(kConstruct)
962
+ setRequestHeaders(request, headers)
963
+ setHeadersList(headers, innerRequest.headersList)
964
+ setHeadersGuard(headers, guard)
965
+ return request
966
+ }
967
+
968
+ Object.defineProperties(Request.prototype, {
969
+ method: kEnumerableProperty,
970
+ url: kEnumerableProperty,
971
+ headers: kEnumerableProperty,
972
+ redirect: kEnumerableProperty,
973
+ clone: kEnumerableProperty,
974
+ signal: kEnumerableProperty,
975
+ duplex: kEnumerableProperty,
976
+ destination: kEnumerableProperty,
977
+ body: kEnumerableProperty,
978
+ bodyUsed: kEnumerableProperty,
979
+ isHistoryNavigation: kEnumerableProperty,
980
+ isReloadNavigation: kEnumerableProperty,
981
+ keepalive: kEnumerableProperty,
982
+ integrity: kEnumerableProperty,
983
+ cache: kEnumerableProperty,
984
+ credentials: kEnumerableProperty,
985
+ attribute: kEnumerableProperty,
986
+ referrerPolicy: kEnumerableProperty,
987
+ referrer: kEnumerableProperty,
988
+ mode: kEnumerableProperty,
989
+ [Symbol.toStringTag]: {
990
+ value: 'Request',
991
+ configurable: true
992
+ }
993
+ })
994
+
995
+ webidl.is.Request = webidl.util.MakeTypeAssertion(Request)
996
+
997
+ /**
998
+ * @param {*} V
999
+ * @returns {import('../../../types/fetch').Request|string}
1000
+ *
1001
+ * @see https://fetch.spec.whatwg.org/#requestinfo
1002
+ */
1003
+ webidl.converters.RequestInfo = function (V) {
1004
+ if (typeof V === 'string') {
1005
+ return webidl.converters.USVString(V)
1006
+ }
1007
+
1008
+ if (webidl.is.Request(V)) {
1009
+ return V
1010
+ }
1011
+
1012
+ return webidl.converters.USVString(V)
1013
+ }
1014
+
1015
+ /**
1016
+ * @param {*} V
1017
+ * @returns {import('../../../types/fetch').RequestInit}
1018
+ * @see https://fetch.spec.whatwg.org/#requestinit
1019
+ */
1020
+ webidl.converters.RequestInit = webidl.dictionaryConverter([
1021
+ {
1022
+ key: 'method',
1023
+ converter: webidl.converters.ByteString
1024
+ },
1025
+ {
1026
+ key: 'headers',
1027
+ converter: webidl.converters.HeadersInit
1028
+ },
1029
+ {
1030
+ key: 'body',
1031
+ converter: webidl.nullableConverter(
1032
+ webidl.converters.BodyInit
1033
+ )
1034
+ },
1035
+ {
1036
+ key: 'referrer',
1037
+ converter: webidl.converters.USVString
1038
+ },
1039
+ {
1040
+ key: 'referrerPolicy',
1041
+ converter: webidl.converters.DOMString,
1042
+ // https://w3c.github.io/webappsec-referrer-policy/#referrer-policy
1043
+ allowedValues: referrerPolicy
1044
+ },
1045
+ {
1046
+ key: 'mode',
1047
+ converter: webidl.converters.DOMString,
1048
+ // https://fetch.spec.whatwg.org/#concept-request-mode
1049
+ allowedValues: requestMode
1050
+ },
1051
+ {
1052
+ key: 'credentials',
1053
+ converter: webidl.converters.DOMString,
1054
+ // https://fetch.spec.whatwg.org/#requestcredentials
1055
+ allowedValues: requestCredentials
1056
+ },
1057
+ {
1058
+ key: 'cache',
1059
+ converter: webidl.converters.DOMString,
1060
+ // https://fetch.spec.whatwg.org/#requestcache
1061
+ allowedValues: requestCache
1062
+ },
1063
+ {
1064
+ key: 'redirect',
1065
+ converter: webidl.converters.DOMString,
1066
+ // https://fetch.spec.whatwg.org/#requestredirect
1067
+ allowedValues: requestRedirect
1068
+ },
1069
+ {
1070
+ key: 'integrity',
1071
+ converter: webidl.converters.DOMString
1072
+ },
1073
+ {
1074
+ key: 'keepalive',
1075
+ converter: webidl.converters.boolean
1076
+ },
1077
+ {
1078
+ key: 'signal',
1079
+ converter: webidl.nullableConverter(
1080
+ (signal) => webidl.converters.AbortSignal(
1081
+ signal,
1082
+ 'RequestInit',
1083
+ 'signal'
1084
+ )
1085
+ )
1086
+ },
1087
+ {
1088
+ key: 'window',
1089
+ converter: webidl.converters.any
1090
+ },
1091
+ {
1092
+ key: 'duplex',
1093
+ converter: webidl.converters.DOMString,
1094
+ allowedValues: requestDuplex
1095
+ },
1096
+ {
1097
+ key: 'dispatcher', // undici specific option
1098
+ converter: webidl.converters.any
1099
+ },
1100
+ {
1101
+ key: 'priority',
1102
+ converter: webidl.converters.DOMString,
1103
+ allowedValues: ['high', 'low', 'auto'],
1104
+ defaultValue: () => 'auto'
1105
+ }
1106
+ ])
1107
+
1108
+ module.exports = {
1109
+ Request,
1110
+ makeRequest,
1111
+ fromInnerRequest,
1112
+ cloneRequest,
1113
+ getRequestDispatcher,
1114
+ getRequestState
1115
+ }