@serenity-js/rest 3.41.1 → 3.42.0

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 (213) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/esm/index.d.ts +3 -0
  3. package/esm/index.d.ts.map +1 -0
  4. package/esm/index.js +3 -0
  5. package/esm/index.js.map +1 -0
  6. package/esm/io/AxiosRequestConfigDefaults.d.ts +15 -0
  7. package/esm/io/AxiosRequestConfigDefaults.d.ts.map +1 -0
  8. package/esm/io/AxiosRequestConfigDefaults.js +2 -0
  9. package/esm/io/AxiosRequestConfigDefaults.js.map +1 -0
  10. package/esm/io/EnvironmentVariables.d.ts +9 -0
  11. package/esm/io/EnvironmentVariables.d.ts.map +1 -0
  12. package/esm/io/EnvironmentVariables.js +35 -0
  13. package/esm/io/EnvironmentVariables.js.map +1 -0
  14. package/esm/io/ProxyAgent.d.ts +52 -0
  15. package/esm/io/ProxyAgent.d.ts.map +1 -0
  16. package/esm/io/ProxyAgent.js +83 -0
  17. package/esm/io/ProxyAgent.js.map +1 -0
  18. package/esm/io/ProxyBypass.d.ts +6 -0
  19. package/esm/io/ProxyBypass.d.ts.map +1 -0
  20. package/esm/io/ProxyBypass.js +66 -0
  21. package/esm/io/ProxyBypass.js.map +1 -0
  22. package/esm/io/createAxios.d.ts +9 -0
  23. package/esm/io/createAxios.d.ts.map +1 -0
  24. package/esm/io/createAxios.js +40 -0
  25. package/esm/io/createAxios.js.map +1 -0
  26. package/esm/io/createUrl.d.ts +9 -0
  27. package/esm/io/createUrl.d.ts.map +1 -0
  28. package/esm/io/createUrl.js +26 -0
  29. package/esm/io/createUrl.js.map +1 -0
  30. package/esm/io/index.d.ts +3 -0
  31. package/esm/io/index.d.ts.map +1 -0
  32. package/esm/io/index.js +3 -0
  33. package/esm/io/index.js.map +1 -0
  34. package/esm/io/proxy.d.ts +14 -0
  35. package/esm/io/proxy.d.ts.map +1 -0
  36. package/esm/io/proxy.js +66 -0
  37. package/esm/io/proxy.js.map +1 -0
  38. package/esm/screenplay/abilities/AxiosRequestConfigDefaults.d.ts +14 -0
  39. package/esm/screenplay/abilities/AxiosRequestConfigDefaults.d.ts.map +1 -0
  40. package/esm/screenplay/abilities/AxiosRequestConfigDefaults.js +2 -0
  41. package/esm/screenplay/abilities/AxiosRequestConfigDefaults.js.map +1 -0
  42. package/esm/screenplay/abilities/CallAnApi.d.ts +443 -0
  43. package/esm/screenplay/abilities/CallAnApi.d.ts.map +1 -0
  44. package/esm/screenplay/abilities/CallAnApi.js +555 -0
  45. package/esm/screenplay/abilities/CallAnApi.js.map +1 -0
  46. package/esm/screenplay/abilities/index.d.ts +2 -0
  47. package/esm/screenplay/abilities/index.d.ts.map +1 -0
  48. package/esm/screenplay/abilities/index.js +2 -0
  49. package/esm/screenplay/abilities/index.js.map +1 -0
  50. package/esm/screenplay/index.d.ts +5 -0
  51. package/esm/screenplay/index.d.ts.map +1 -0
  52. package/esm/screenplay/index.js +5 -0
  53. package/esm/screenplay/index.js.map +1 -0
  54. package/esm/screenplay/interactions/ChangeApiConfig.d.ts +135 -0
  55. package/esm/screenplay/interactions/ChangeApiConfig.d.ts.map +1 -0
  56. package/esm/screenplay/interactions/ChangeApiConfig.js +212 -0
  57. package/esm/screenplay/interactions/ChangeApiConfig.js.map +1 -0
  58. package/esm/screenplay/interactions/Send.d.ts +48 -0
  59. package/esm/screenplay/interactions/Send.d.ts.map +1 -0
  60. package/esm/screenplay/interactions/Send.js +83 -0
  61. package/esm/screenplay/interactions/Send.js.map +1 -0
  62. package/esm/screenplay/interactions/index.d.ts +3 -0
  63. package/esm/screenplay/interactions/index.d.ts.map +1 -0
  64. package/esm/screenplay/interactions/index.js +3 -0
  65. package/esm/screenplay/interactions/index.js.map +1 -0
  66. package/esm/screenplay/models/DeleteRequest.d.ts +66 -0
  67. package/esm/screenplay/models/DeleteRequest.d.ts.map +1 -0
  68. package/esm/screenplay/models/DeleteRequest.js +69 -0
  69. package/esm/screenplay/models/DeleteRequest.js.map +1 -0
  70. package/esm/screenplay/models/GetRequest.d.ts +73 -0
  71. package/esm/screenplay/models/GetRequest.d.ts.map +1 -0
  72. package/esm/screenplay/models/GetRequest.js +76 -0
  73. package/esm/screenplay/models/GetRequest.js.map +1 -0
  74. package/esm/screenplay/models/HTTPRequest.d.ts +40 -0
  75. package/esm/screenplay/models/HTTPRequest.d.ts.map +1 -0
  76. package/esm/screenplay/models/HTTPRequest.js +62 -0
  77. package/esm/screenplay/models/HTTPRequest.js.map +1 -0
  78. package/esm/screenplay/models/HeadRequest.d.ts +58 -0
  79. package/esm/screenplay/models/HeadRequest.d.ts.map +1 -0
  80. package/esm/screenplay/models/HeadRequest.js +61 -0
  81. package/esm/screenplay/models/HeadRequest.js.map +1 -0
  82. package/esm/screenplay/models/OptionsRequest.d.ts +61 -0
  83. package/esm/screenplay/models/OptionsRequest.d.ts.map +1 -0
  84. package/esm/screenplay/models/OptionsRequest.js +64 -0
  85. package/esm/screenplay/models/OptionsRequest.js.map +1 -0
  86. package/esm/screenplay/models/PatchRequest.d.ts +65 -0
  87. package/esm/screenplay/models/PatchRequest.d.ts.map +1 -0
  88. package/esm/screenplay/models/PatchRequest.js +70 -0
  89. package/esm/screenplay/models/PatchRequest.js.map +1 -0
  90. package/esm/screenplay/models/PostRequest.d.ts +105 -0
  91. package/esm/screenplay/models/PostRequest.d.ts.map +1 -0
  92. package/esm/screenplay/models/PostRequest.js +110 -0
  93. package/esm/screenplay/models/PostRequest.js.map +1 -0
  94. package/esm/screenplay/models/PutRequest.d.ts +75 -0
  95. package/esm/screenplay/models/PutRequest.d.ts.map +1 -0
  96. package/esm/screenplay/models/PutRequest.js +80 -0
  97. package/esm/screenplay/models/PutRequest.js.map +1 -0
  98. package/esm/screenplay/models/index.d.ts +9 -0
  99. package/esm/screenplay/models/index.d.ts.map +1 -0
  100. package/esm/screenplay/models/index.js +9 -0
  101. package/esm/screenplay/models/index.js.map +1 -0
  102. package/esm/screenplay/questions/LastResponse.d.ts +189 -0
  103. package/esm/screenplay/questions/LastResponse.d.ts.map +1 -0
  104. package/esm/screenplay/questions/LastResponse.js +205 -0
  105. package/esm/screenplay/questions/LastResponse.js.map +1 -0
  106. package/esm/screenplay/questions/index.d.ts +2 -0
  107. package/esm/screenplay/questions/index.d.ts.map +1 -0
  108. package/esm/screenplay/questions/index.js +2 -0
  109. package/esm/screenplay/questions/index.js.map +1 -0
  110. package/lib/index.d.ts +2 -2
  111. package/lib/index.d.ts.map +1 -1
  112. package/lib/index.js +2 -2
  113. package/lib/index.js.map +1 -1
  114. package/lib/io/ProxyBypass.js +2 -2
  115. package/lib/io/ProxyBypass.js.map +1 -1
  116. package/lib/io/createAxios.d.ts +1 -1
  117. package/lib/io/createAxios.d.ts.map +1 -1
  118. package/lib/io/createAxios.js +2 -2
  119. package/lib/io/createAxios.js.map +1 -1
  120. package/lib/io/index.d.ts +2 -2
  121. package/lib/io/index.d.ts.map +1 -1
  122. package/lib/io/index.js +2 -2
  123. package/lib/io/index.js.map +1 -1
  124. package/lib/io/proxy.d.ts +2 -2
  125. package/lib/io/proxy.d.ts.map +1 -1
  126. package/lib/io/proxy.js +9 -9
  127. package/lib/io/proxy.js.map +1 -1
  128. package/lib/package.json +1 -0
  129. package/lib/screenplay/abilities/CallAnApi.d.ts +1 -1
  130. package/lib/screenplay/abilities/CallAnApi.d.ts.map +1 -1
  131. package/lib/screenplay/abilities/CallAnApi.js +4 -4
  132. package/lib/screenplay/abilities/CallAnApi.js.map +1 -1
  133. package/lib/screenplay/abilities/index.d.ts +1 -1
  134. package/lib/screenplay/abilities/index.d.ts.map +1 -1
  135. package/lib/screenplay/abilities/index.js +1 -1
  136. package/lib/screenplay/abilities/index.js.map +1 -1
  137. package/lib/screenplay/index.d.ts +4 -4
  138. package/lib/screenplay/index.d.ts.map +1 -1
  139. package/lib/screenplay/index.js +4 -4
  140. package/lib/screenplay/index.js.map +1 -1
  141. package/lib/screenplay/interactions/ChangeApiConfig.js +4 -4
  142. package/lib/screenplay/interactions/ChangeApiConfig.js.map +1 -1
  143. package/lib/screenplay/interactions/Send.js +3 -3
  144. package/lib/screenplay/interactions/Send.js.map +1 -1
  145. package/lib/screenplay/interactions/index.d.ts +2 -2
  146. package/lib/screenplay/interactions/index.d.ts.map +1 -1
  147. package/lib/screenplay/interactions/index.js +2 -2
  148. package/lib/screenplay/interactions/index.js.map +1 -1
  149. package/lib/screenplay/models/DeleteRequest.d.ts +1 -1
  150. package/lib/screenplay/models/DeleteRequest.d.ts.map +1 -1
  151. package/lib/screenplay/models/DeleteRequest.js +2 -2
  152. package/lib/screenplay/models/DeleteRequest.js.map +1 -1
  153. package/lib/screenplay/models/GetRequest.d.ts +1 -1
  154. package/lib/screenplay/models/GetRequest.d.ts.map +1 -1
  155. package/lib/screenplay/models/GetRequest.js +2 -2
  156. package/lib/screenplay/models/GetRequest.js.map +1 -1
  157. package/lib/screenplay/models/HTTPRequest.js +1 -1
  158. package/lib/screenplay/models/HTTPRequest.js.map +1 -1
  159. package/lib/screenplay/models/HeadRequest.d.ts +1 -1
  160. package/lib/screenplay/models/HeadRequest.d.ts.map +1 -1
  161. package/lib/screenplay/models/HeadRequest.js +2 -2
  162. package/lib/screenplay/models/HeadRequest.js.map +1 -1
  163. package/lib/screenplay/models/OptionsRequest.d.ts +1 -1
  164. package/lib/screenplay/models/OptionsRequest.d.ts.map +1 -1
  165. package/lib/screenplay/models/OptionsRequest.js +2 -2
  166. package/lib/screenplay/models/OptionsRequest.js.map +1 -1
  167. package/lib/screenplay/models/PatchRequest.d.ts +1 -1
  168. package/lib/screenplay/models/PatchRequest.d.ts.map +1 -1
  169. package/lib/screenplay/models/PatchRequest.js +2 -2
  170. package/lib/screenplay/models/PatchRequest.js.map +1 -1
  171. package/lib/screenplay/models/PostRequest.d.ts +1 -1
  172. package/lib/screenplay/models/PostRequest.d.ts.map +1 -1
  173. package/lib/screenplay/models/PostRequest.js +2 -2
  174. package/lib/screenplay/models/PostRequest.js.map +1 -1
  175. package/lib/screenplay/models/PutRequest.d.ts +1 -1
  176. package/lib/screenplay/models/PutRequest.d.ts.map +1 -1
  177. package/lib/screenplay/models/PutRequest.js +2 -2
  178. package/lib/screenplay/models/PutRequest.js.map +1 -1
  179. package/lib/screenplay/models/index.d.ts +8 -8
  180. package/lib/screenplay/models/index.d.ts.map +1 -1
  181. package/lib/screenplay/models/index.js +8 -8
  182. package/lib/screenplay/models/index.js.map +1 -1
  183. package/lib/screenplay/questions/LastResponse.js +5 -5
  184. package/lib/screenplay/questions/LastResponse.js.map +1 -1
  185. package/lib/screenplay/questions/index.d.ts +1 -1
  186. package/lib/screenplay/questions/index.d.ts.map +1 -1
  187. package/lib/screenplay/questions/index.js +1 -1
  188. package/lib/screenplay/questions/index.js.map +1 -1
  189. package/package.json +29 -11
  190. package/src/index.ts +2 -2
  191. package/src/io/ProxyBypass.ts +1 -1
  192. package/src/io/createAxios.ts +2 -2
  193. package/src/io/index.ts +2 -2
  194. package/src/io/proxy.ts +5 -5
  195. package/src/screenplay/abilities/CallAnApi.ts +3 -3
  196. package/src/screenplay/abilities/index.ts +1 -1
  197. package/src/screenplay/index.ts +4 -4
  198. package/src/screenplay/interactions/ChangeApiConfig.ts +1 -1
  199. package/src/screenplay/interactions/Send.ts +3 -3
  200. package/src/screenplay/interactions/index.ts +2 -2
  201. package/src/screenplay/models/DeleteRequest.ts +1 -1
  202. package/src/screenplay/models/GetRequest.ts +1 -1
  203. package/src/screenplay/models/HTTPRequest.ts +1 -1
  204. package/src/screenplay/models/HeadRequest.ts +1 -1
  205. package/src/screenplay/models/OptionsRequest.ts +1 -1
  206. package/src/screenplay/models/PatchRequest.ts +1 -1
  207. package/src/screenplay/models/PostRequest.ts +1 -1
  208. package/src/screenplay/models/PutRequest.ts +1 -1
  209. package/src/screenplay/models/index.ts +8 -8
  210. package/src/screenplay/questions/LastResponse.ts +1 -1
  211. package/src/screenplay/questions/index.ts +1 -1
  212. package/tsconfig-cjs.build.json +17 -0
  213. package/tsconfig-esm.build.json +18 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,34 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.42.0](https://github.com/serenity-js/serenity-js/compare/v3.41.2...v3.42.0) (2026-03-19)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **deps:** update dependency lru-cache to v11.2.7 ([d92ee9a](https://github.com/serenity-js/serenity-js/commit/d92ee9a0d9d29256ae2fbf1fef5987dd3985e4d7))
12
+
13
+
14
+ ### Features
15
+
16
+ * **core:** add dual ESM/CJS build support for Wave 2 packages ([0e2631c](https://github.com/serenity-js/serenity-js/commit/0e2631ca7cdbe68da7feec343eaf4f7fe9bb64d6))
17
+ * **core:** add ESM/CJS dual build support for web packages ([94c5a64](https://github.com/serenity-js/serenity-js/commit/94c5a6423dc369477bbabbacee5a54f8fca20209))
18
+
19
+
20
+
21
+
22
+
23
+ ## [3.41.2](https://github.com/serenity-js/serenity-js/compare/v3.41.1...v3.41.2) (2026-03-05)
24
+
25
+
26
+ ### Bug Fixes
27
+
28
+ * **deps:** update dependency axios to v1.13.6 ([6fa771e](https://github.com/serenity-js/serenity-js/commit/6fa771eb2dc2276b99c18d809f21a73df31cb104))
29
+
30
+
31
+
32
+
33
+
6
34
  ## [3.41.1](https://github.com/serenity-js/serenity-js/compare/v3.41.0...v3.41.1) (2026-02-27)
7
35
 
8
36
  **Note:** Version bump only for package @serenity-js/rest
package/esm/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './io/index.js';
2
+ export * from './screenplay/index.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC"}
package/esm/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './io/index.js';
2
+ export * from './screenplay/index.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type CreateAxiosDefaults } from 'axios';
2
+ export type AxiosRequestConfigProxyDefaults = {
3
+ host: string;
4
+ port?: number;
5
+ auth?: {
6
+ username: string;
7
+ password: string;
8
+ };
9
+ protocol?: string;
10
+ bypass?: string;
11
+ };
12
+ export type AxiosRequestConfigDefaults<Data = any> = Omit<CreateAxiosDefaults<Data>, 'proxy'> & {
13
+ proxy?: AxiosRequestConfigProxyDefaults | false;
14
+ };
15
+ //# sourceMappingURL=AxiosRequestConfigDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxiosRequestConfigDefaults.d.ts","sourceRoot":"","sources":["../../src/io/AxiosRequestConfigDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,MAAM,+BAA+B,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,CAAA;AAED,MAAM,MAAM,0BAA0B,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG;IAC5F,KAAK,CAAC,EAAE,+BAA+B,GAAG,KAAK,CAAC;CACnD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AxiosRequestConfigDefaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxiosRequestConfigDefaults.js","sourceRoot":"","sources":["../../src/io/AxiosRequestConfigDefaults.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export declare class EnvironmentVariables {
2
+ private readonly env;
3
+ constructor(env?: NodeJS.ProcessEnv);
4
+ isSet(name: string): boolean;
5
+ get(name: string): string | undefined;
6
+ find(name: string): string | undefined;
7
+ findFirst(...names: string[]): string | undefined;
8
+ }
9
+ //# sourceMappingURL=EnvironmentVariables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvironmentVariables.d.ts","sourceRoot":"","sources":["../../src/io/EnvironmentVariables.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAoB;IACjB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,GAAE,MAAM,CAAC,UAAwB;IAGjE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI5B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAgBtC,SAAS,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS;CAUpD"}
@@ -0,0 +1,35 @@
1
+ export class EnvironmentVariables {
2
+ env;
3
+ constructor(env = process.env) {
4
+ this.env = env;
5
+ }
6
+ isSet(name) {
7
+ return this.env[name] !== undefined;
8
+ }
9
+ get(name) {
10
+ return this.env[name];
11
+ }
12
+ find(name) {
13
+ const candidateNames = [
14
+ name,
15
+ name.toLocaleUpperCase(),
16
+ name.toLocaleLowerCase(),
17
+ ];
18
+ for (const variableName of candidateNames) {
19
+ if (this.isSet(variableName)) {
20
+ return this.get(variableName);
21
+ }
22
+ }
23
+ return undefined;
24
+ }
25
+ findFirst(...names) {
26
+ for (const name of names) {
27
+ const found = this.find(name);
28
+ if (found) {
29
+ return found;
30
+ }
31
+ }
32
+ return undefined;
33
+ }
34
+ }
35
+ //# sourceMappingURL=EnvironmentVariables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvironmentVariables.js","sourceRoot":"","sources":["../../src/io/EnvironmentVariables.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAoB;IACA;IAA7B,YAA6B,MAAyB,OAAO,CAAC,GAAG;QAApC,QAAG,GAAH,GAAG,CAAiC;IACjE,CAAC;IAED,KAAK,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,CAAC,IAAY;QACb,MAAM,cAAc,GAAG;YACnB,IAAI;YACJ,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,iBAAiB,EAAE;SAC3B,CAAC;QAEF,KAAK,MAAM,YAAY,IAAI,cAAc,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAClC,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,SAAS,CAAC,GAAG,KAAe;QACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK,EAAE,CAAC;gBACR,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ"}
@@ -0,0 +1,52 @@
1
+ import type { AgentConnectOpts } from 'agent-base';
2
+ import { Agent } from 'agent-base';
3
+ import * as http from 'http';
4
+ import { type HttpProxyAgentOptions } from 'http-proxy-agent';
5
+ import { type HttpsProxyAgentOptions } from 'https-proxy-agent';
6
+ type GetProxyForUrlCallback = (url: string) => string;
7
+ export type ProxyAgentOptions = HttpProxyAgentOptions<''> & HttpsProxyAgentOptions<''> & {
8
+ /**
9
+ * Default `http.Agent` instance to use when no proxy is
10
+ * configured for a request. Defaults to a new `http.Agent()`
11
+ * instance with the proxy agent options passed in.
12
+ */
13
+ httpAgent?: http.Agent;
14
+ /**
15
+ * Default `http.Agent` instance to use when no proxy is
16
+ * configured for a request. Defaults to a new `https.Agent()`
17
+ * instance with the proxy agent options passed in.
18
+ */
19
+ httpsAgent?: http.Agent;
20
+ /**
21
+ * A callback to dynamically determine the proxy to use for the given URL.
22
+ */
23
+ getProxyForUrl?: GetProxyForUrlCallback;
24
+ };
25
+ /**
26
+ * A simplified version of the original
27
+ * [`ProxyAgent`](https://github.com/TooTallNate/proxy-agents/blob/5923589c2e5206504772c250ac4f20fc31122d3b/packages/proxy-agent/src/index.ts)
28
+ * with fewer dependencies.
29
+ *
30
+ * Delegates requests to the appropriate `Agent` subclass based on the "proxy"
31
+ * environment variables, or the provided `agentOptions.getProxyForUrl` callback.
32
+ *
33
+ * Uses an LRU cache to prevent unnecessary creation of proxy `http.Agent` instances.
34
+ */
35
+ export declare class ProxyAgent extends Agent {
36
+ private readonly agentOptions;
37
+ private static proxyAgents;
38
+ /**
39
+ * Cache for `Agent` instances.
40
+ */
41
+ private readonly cache;
42
+ private readonly httpAgent;
43
+ private readonly httpsAgent;
44
+ private readonly getProxyForUrl;
45
+ constructor(agentOptions: ProxyAgentOptions);
46
+ connect(request: http.ClientRequest, options: AgentConnectOpts): Promise<http.Agent>;
47
+ private createAgent;
48
+ private isValidProtocol;
49
+ destroy(): void;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=ProxyAgent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyAgent.d.ts","sourceRoot":"","sources":["../../src/io/ProxyAgent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAkB,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAmB,KAAK,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAWjF,KAAK,sBAAsB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;AAEtD,MAAM,MAAM,iBAAiB,GACzB,qBAAqB,CAAC,EAAE,CAAC,GACzB,sBAAsB,CAAC,EAAE,CAAC,GAAG;IACzB;;;;OAIG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;IACvB;;;;OAIG;IACH,UAAU,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;IACxB;;OAEG;IACH,cAAc,CAAC,EAAE,sBAAsB,CAAC;CAC3C,CAAC;AAEN;;;;;;;;;GASG;AACH,qBAAa,UAAW,SAAQ,KAAK;IAmBrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAjBzC,OAAO,CAAC,MAAM,CAAC,WAAW,CAGxB;IAEF;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGnB;IAEH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAE3B,YAAY,EAAE,iBAAiB;IAO7C,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;IA4BnG,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,eAAe;IAId,OAAO,IAAI,IAAI;CAI3B"}
@@ -0,0 +1,83 @@
1
+ import { ConfigurationError } from '@serenity-js/core';
2
+ import { Agent } from 'agent-base';
3
+ import * as http from 'http';
4
+ import { HttpProxyAgent } from 'http-proxy-agent';
5
+ import * as https from 'https';
6
+ import { HttpsProxyAgent } from 'https-proxy-agent';
7
+ import { LRUCache } from 'lru-cache';
8
+ const protocols = [
9
+ ...HttpProxyAgent.protocols,
10
+ ];
11
+ /**
12
+ * A simplified version of the original
13
+ * [`ProxyAgent`](https://github.com/TooTallNate/proxy-agents/blob/5923589c2e5206504772c250ac4f20fc31122d3b/packages/proxy-agent/src/index.ts)
14
+ * with fewer dependencies.
15
+ *
16
+ * Delegates requests to the appropriate `Agent` subclass based on the "proxy"
17
+ * environment variables, or the provided `agentOptions.getProxyForUrl` callback.
18
+ *
19
+ * Uses an LRU cache to prevent unnecessary creation of proxy `http.Agent` instances.
20
+ */
21
+ export class ProxyAgent extends Agent {
22
+ agentOptions;
23
+ static proxyAgents = {
24
+ http: [HttpProxyAgent, HttpsProxyAgent],
25
+ https: [HttpProxyAgent, HttpsProxyAgent],
26
+ };
27
+ /**
28
+ * Cache for `Agent` instances.
29
+ */
30
+ cache = new LRUCache({
31
+ max: 20,
32
+ dispose: (value, key) => value.destroy(),
33
+ });
34
+ httpAgent;
35
+ httpsAgent;
36
+ getProxyForUrl;
37
+ constructor(agentOptions) {
38
+ super(agentOptions);
39
+ this.agentOptions = agentOptions;
40
+ this.httpAgent = agentOptions?.httpAgent || new http.Agent(agentOptions);
41
+ this.httpsAgent = agentOptions?.httpsAgent || new https.Agent(agentOptions);
42
+ this.getProxyForUrl = agentOptions?.getProxyForUrl;
43
+ }
44
+ async connect(request, options) {
45
+ const { secureEndpoint } = options;
46
+ const isWebSocket = request.getHeader('upgrade') === 'websocket';
47
+ const protocol = secureEndpoint
48
+ ? (isWebSocket ? 'wss:' : 'https:')
49
+ : (isWebSocket ? 'ws:' : 'http:');
50
+ const host = request.getHeader('host');
51
+ const url = new URL(request.path, `${protocol}//${host}`).href;
52
+ const proxy = this.getProxyForUrl(url);
53
+ if (!proxy) {
54
+ return secureEndpoint
55
+ ? this.httpsAgent
56
+ : this.httpAgent;
57
+ }
58
+ // attempt to get a cached `http.Agent` instance first
59
+ const cacheKey = `${protocol}+${proxy}`;
60
+ let agent = this.cache.get(cacheKey);
61
+ if (!agent) {
62
+ agent = this.createAgent(new URL(proxy), secureEndpoint || isWebSocket);
63
+ this.cache.set(cacheKey, agent);
64
+ }
65
+ return agent;
66
+ }
67
+ createAgent(proxyUrl, requiresTls) {
68
+ const protocol = proxyUrl.protocol.replace(':', '');
69
+ if (!this.isValidProtocol(protocol)) {
70
+ throw new ConfigurationError(`Unsupported protocol for proxy URL: ${proxyUrl}`);
71
+ }
72
+ const ctor = ProxyAgent.proxyAgents[protocol][requiresTls ? 1 : 0];
73
+ return new ctor(proxyUrl, this.agentOptions);
74
+ }
75
+ isValidProtocol(v) {
76
+ return protocols.includes(v);
77
+ }
78
+ destroy() {
79
+ this.cache.clear();
80
+ super.destroy();
81
+ }
82
+ }
83
+ //# sourceMappingURL=ProxyAgent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyAgent.js","sourceRoot":"","sources":["../../src/io/ProxyAgent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { URL } from 'node:url';
2
+ export declare abstract class ProxyBypass {
3
+ static create(value: string | undefined): ProxyBypass;
4
+ abstract matches(url: URL): boolean;
5
+ }
6
+ //# sourceMappingURL=ProxyBypass.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyBypass.d.ts","sourceRoot":"","sources":["../../src/io/ProxyBypass.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAIpC,8BAAsB,WAAW;IAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW;IAYrD,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO;CACtC"}
@@ -0,0 +1,66 @@
1
+ import { createUrl } from './createUrl.js';
2
+ export class ProxyBypass {
3
+ static create(value) {
4
+ if (value === undefined || value === '') {
5
+ return new BypassNone();
6
+ }
7
+ if (value === '*') {
8
+ return new BypassAll();
9
+ }
10
+ return new BypassMatching(value);
11
+ }
12
+ }
13
+ class BypassNone extends ProxyBypass {
14
+ matches(url_) {
15
+ return false;
16
+ }
17
+ }
18
+ class BypassAll extends ProxyBypass {
19
+ matches(url_) {
20
+ return true;
21
+ }
22
+ }
23
+ class BypassHostnamePattern extends ProxyBypass {
24
+ hostname;
25
+ port;
26
+ static template = /^((?<hostname>[^:]+)(:(?<port>\d+))?)$/;
27
+ static defaultPorts = {
28
+ 'ftp:': '21',
29
+ 'gopher:': '70',
30
+ 'http:': '80',
31
+ 'https:': '443',
32
+ 'ws:': '80',
33
+ 'wss:': '443',
34
+ };
35
+ static create(patternConfig) {
36
+ const { hostname, port } = this.template.exec(patternConfig)?.groups || {};
37
+ return new BypassHostnamePattern(hostname, port);
38
+ }
39
+ constructor(hostname, port) {
40
+ super();
41
+ this.hostname = hostname;
42
+ this.port = port;
43
+ }
44
+ matches(url) {
45
+ const urlPort = url.port || BypassHostnamePattern.defaultPorts[url.protocol];
46
+ return url.hostname.endsWith(this.hostname)
47
+ && (this.port ? urlPort === this.port : true);
48
+ }
49
+ }
50
+ class BypassMatching extends ProxyBypass {
51
+ patterns;
52
+ constructor(value) {
53
+ super();
54
+ this.patterns = value.split(',').map(patternConfig => BypassHostnamePattern.create(patternConfig.trim()));
55
+ }
56
+ matches(url) {
57
+ const normalisedUrl = createUrl(url);
58
+ for (const pattern of this.patterns) {
59
+ if (pattern.matches(normalisedUrl)) {
60
+ return true;
61
+ }
62
+ }
63
+ return false;
64
+ }
65
+ }
66
+ //# sourceMappingURL=ProxyBypass.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProxyBypass.js","sourceRoot":"","sources":["../../src/io/ProxyBypass.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,MAAM,OAAgB,WAAW;IAC7B,MAAM,CAAC,MAAM,CAAC,KAAyB;QACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YACtC,OAAO,IAAI,UAAU,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAChB,OAAO,IAAI,SAAS,EAAE,CAAC;QAC3B,CAAC;QAED,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CAGJ;AAED,MAAM,UAAW,SAAQ,WAAW;IAChC,OAAO,CAAC,IAAS;QACb,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAED,MAAM,SAAU,SAAQ,WAAW;IAC/B,OAAO,CAAC,IAAS;QACb,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,MAAM,qBAAsB,SAAQ,WAAW;IAiBN;IAAmC;IAhBhE,MAAM,CAAU,QAAQ,GAAG,wCAAwC,CAAC;IACpE,MAAM,CAAC,YAAY,GAAG;QAC1B,MAAM,EAAE,IAAI;QACZ,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,KAAK;KAChB,CAAC;IAEF,MAAM,CAAC,MAAM,CAAC,aAAqB;QAC/B,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC;QAE3E,OAAO,IAAI,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,YAAqC,QAAgB,EAAmB,IAAwB;QAC5F,KAAK,EAAE,CAAC;QADyB,aAAQ,GAAR,QAAQ,CAAQ;QAAmB,SAAI,GAAJ,IAAI,CAAoB;IAEhG,CAAC;IAED,OAAO,CAAC,GAAQ;QACZ,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,qBAAqB,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAE5E,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;eACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;;AAGL,MAAM,cAAe,SAAQ,WAAW;IAEnB,QAAQ,CAA0B;IAEnD,YAAY,KAAa;QACrB,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9G,CAAC;IAED,OAAO,CAAC,GAAQ;QACZ,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAErC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjC,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ"}
@@ -0,0 +1,9 @@
1
+ import { type AxiosInstance } from 'axios';
2
+ import type { AxiosRequestConfigDefaults } from './AxiosRequestConfigDefaults.js';
3
+ /**
4
+ * Creates an Axios instance with desired configuration and proxy support.
5
+ *
6
+ * @param axiosInstanceOrConfig
7
+ */
8
+ export declare function createAxios(axiosInstanceOrConfig?: AxiosInstance | AxiosRequestConfigDefaults): AxiosInstance;
9
+ //# sourceMappingURL=createAxios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAxios.d.ts","sourceRoot":"","sources":["../../src/io/createAxios.ts"],"names":[],"mappings":"AACA,OAAc,EAAS,KAAK,aAAa,EAA2B,MAAM,OAAO,CAAC;AAElF,OAAO,KAAK,EAAE,0BAA0B,EAAmC,MAAM,iCAAiC,CAAC;AAGnH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,qBAAqB,GAAE,aAAa,GAAG,0BAA+B,GAAG,aAAa,CAoBjH"}
@@ -0,0 +1,40 @@
1
+ import { Duration } from '@serenity-js/core';
2
+ import axios, { Axios } from 'axios';
3
+ import { axiosProxyOverridesFor } from './proxy.js';
4
+ /**
5
+ * Creates an Axios instance with desired configuration and proxy support.
6
+ *
7
+ * @param axiosInstanceOrConfig
8
+ */
9
+ export function createAxios(axiosInstanceOrConfig = {}) {
10
+ const axiosInstanceGiven = isAxiosInstance(axiosInstanceOrConfig);
11
+ const axiosInstance = axiosInstanceGiven
12
+ ? axiosInstanceOrConfig
13
+ : axios.create({
14
+ timeout: Duration.ofSeconds(10).inMilliseconds(),
15
+ ...omit(axiosInstanceOrConfig, 'proxy'),
16
+ });
17
+ const proxyConfig = axiosInstanceGiven
18
+ ? axiosInstanceOrConfig.defaults.proxy
19
+ : axiosInstanceOrConfig.proxy;
20
+ const proxyOverrides = axiosProxyOverridesFor({
21
+ ...axiosInstance.defaults,
22
+ proxy: proxyConfig || undefined,
23
+ });
24
+ return withOverrides(axiosInstance, proxyOverrides);
25
+ }
26
+ function isAxiosInstance(axiosInstanceOrConfig) {
27
+ return axiosInstanceOrConfig
28
+ && (axiosInstanceOrConfig instanceof Axios || axiosInstanceOrConfig.defaults);
29
+ }
30
+ function withOverrides(axiosInstance, overrides) {
31
+ for (const [key, override] of Object.entries(overrides)) {
32
+ axiosInstance.defaults[key] = override;
33
+ }
34
+ return axiosInstance;
35
+ }
36
+ function omit(record, key) {
37
+ const { [key]: omitted_, ...rest } = record;
38
+ return rest;
39
+ }
40
+ //# sourceMappingURL=createAxios.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAxios.js","sourceRoot":"","sources":["../../src/io/createAxios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,EAAE,KAAK,EAA+C,MAAM,OAAO,CAAC;AAGlF,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,wBAAoE,EAAE;IAC9F,MAAM,kBAAkB,GAAG,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAElE,MAAM,aAAa,GAAG,kBAAkB;QACpC,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;YACX,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,cAAc,EAAE;YAChD,GAAG,IAAI,CAAC,qBAAqB,EAAE,OAAO,CAAC;SAC1C,CAAC,CAAC;IAEP,MAAM,WAAW,GAAwD,kBAAkB;QACvF,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,KAAK;QACtC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC;IAElC,MAAM,cAAc,GAAG,sBAAsB,CAAC;QAC1C,GAAG,aAAa,CAAC,QAAQ;QACzB,KAAK,EAAE,WAAW,IAAI,SAAS;KAClC,CAAC,CAAC;IAEH,OAAO,aAAa,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,eAAe,CAAC,qBAA0B;IAC/C,OAAO,qBAAqB;WACrB,CAAC,qBAAqB,YAAY,KAAK,IAAI,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,aAAa,CAAa,aAA4B,EAAE,SAAmC;IAChG,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAC3C,CAAC;IAED,OAAO,aAAa,CAAC;AACzB,CAAC;AAED,SAAS,IAAI,CAAsC,MAAS,EAAE,GAAM;IAChE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAC5C,OAAO,IAAI,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface CreateUrlOptions {
2
+ protocol?: string;
3
+ hostname: string;
4
+ port?: string | number;
5
+ username?: string;
6
+ password?: string;
7
+ }
8
+ export declare function createUrl(options: CreateUrlOptions): URL;
9
+ //# sourceMappingURL=createUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createUrl.d.ts","sourceRoot":"","sources":["../../src/io/createUrl.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG,CAYxD"}
@@ -0,0 +1,26 @@
1
+ import { ensure, isDefined, isNotBlank, isString } from 'tiny-types';
2
+ export function createUrl(options) {
3
+ const hostname = ensure('hostname', options?.hostname, isString(), isNotBlank()).trim();
4
+ const port = options?.port
5
+ ? ':' + options?.port
6
+ : (options?.protocol ? undefined : ':80');
7
+ return new URL([
8
+ options?.protocol ? protocolFrom(options?.protocol) : 'http://',
9
+ (options?.username || options?.password) && credentialsFrom(options.username, options.password),
10
+ hostname,
11
+ port,
12
+ ].filter(Boolean).join(''));
13
+ }
14
+ function protocolFrom(protocol) {
15
+ const protocolName = protocol.match(/([A-Za-z]+)[/:]*/)[1];
16
+ ensure('hostname', protocolName, isDefined());
17
+ return protocolName + '://';
18
+ }
19
+ function credentialsFrom(username, password) {
20
+ return [
21
+ username && encodeURIComponent(username),
22
+ password && ':' + encodeURIComponent(password),
23
+ '@'
24
+ ].filter(Boolean).join('');
25
+ }
26
+ //# sourceMappingURL=createUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createUrl.js","sourceRoot":"","sources":["../../src/io/createUrl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAUrE,MAAM,UAAU,SAAS,CAAC,OAAyB;IAC/C,MAAM,QAAQ,GAAI,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzF,MAAM,IAAI,GAAQ,OAAO,EAAE,IAAI;QAC3B,CAAC,CAAC,GAAG,GAAG,OAAO,EAAE,IAAI;QACrB,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE9C,OAAO,IAAI,GAAG,CAAC;QACX,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;QAC/D,CAAC,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,QAAQ,CAAC,IAAI,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC/F,QAAQ;QACR,IAAI;KACP,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,YAAY,CAAC,QAAiB;IACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;IAE9C,OAAO,YAAY,GAAG,KAAK,CAAC;AAChC,CAAC;AAED,SAAS,eAAe,CAAC,QAAiB,EAAE,QAAiB;IACzD,OAAO;QACH,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC;QACxC,QAAQ,IAAI,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC;QAC9C,GAAG;KACN,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './AxiosRequestConfigDefaults.js';
2
+ export * from './createAxios.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/io/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './AxiosRequestConfigDefaults.js';
2
+ export * from './createAxios.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/io/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type * as http from 'node:http';
2
+ import type { AxiosRequestConfigDefaults, AxiosRequestConfigProxyDefaults } from './AxiosRequestConfigDefaults.js';
3
+ import { EnvironmentVariables } from './EnvironmentVariables.js';
4
+ /**
5
+ * @param options
6
+ */
7
+ export declare function axiosProxyOverridesFor<Data = any>(options: AxiosRequestConfigDefaults<Data>): {
8
+ proxy: false;
9
+ httpAgent: http.Agent;
10
+ httpsAgent: http.Agent;
11
+ };
12
+ export declare function createGetProxyForUrlFromConfig(proxyOptions: AxiosRequestConfigProxyDefaults): (url: string) => string | undefined;
13
+ export declare function createGetProxyForUrlFromEnvironmentVariables(env: EnvironmentVariables): (url: string) => string | undefined;
14
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/io/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,WAAW,CAAC;AAKvC,OAAO,KAAK,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAEnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAIjE;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,0BAA0B,CAAC,IAAI,CAAC,GAAG;IAC3F,KAAK,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;IAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAA;CAC9D,CAiBA;AAED,wBAAgB,8BAA8B,CAAC,YAAY,EAAE,+BAA+B,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAYjI;AAED,wBAAgB,4CAA4C,CAAC,GAAG,EAAE,oBAAoB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAiB3H"}
@@ -0,0 +1,66 @@
1
+ import * as process from 'node:process';
2
+ import { ensure, isDefined } from 'tiny-types';
3
+ import { createUrl } from './createUrl.js';
4
+ import { EnvironmentVariables } from './EnvironmentVariables.js';
5
+ import { ProxyAgent } from './ProxyAgent.js';
6
+ import { ProxyBypass } from './ProxyBypass.js';
7
+ /**
8
+ * @param options
9
+ */
10
+ export function axiosProxyOverridesFor(options) {
11
+ const agent = new ProxyAgent({
12
+ httpAgent: options.httpAgent,
13
+ httpsAgent: options.httpsAgent,
14
+ // if there's a specific proxy override configured, use it
15
+ // if not - detect proxy automatically based on the env variables
16
+ getProxyForUrl: options.proxy
17
+ ? createGetProxyForUrlFromConfig(options.proxy)
18
+ : createGetProxyForUrlFromEnvironmentVariables(new EnvironmentVariables(process.env)),
19
+ });
20
+ return {
21
+ proxy: false,
22
+ httpAgent: agent,
23
+ httpsAgent: agent,
24
+ };
25
+ }
26
+ export function createGetProxyForUrlFromConfig(proxyOptions) {
27
+ const proxyBypass = ProxyBypass.create(proxyOptions?.bypass);
28
+ return createGetProxyForUrl(proxyBypass, (url) => {
29
+ return createUrl({
30
+ username: proxyOptions.auth?.username,
31
+ password: proxyOptions.auth?.password,
32
+ protocol: proxyOptions.protocol,
33
+ hostname: ensure('proxy.host', proxyOptions?.host, isDefined()),
34
+ port: proxyOptions.port ? Number(proxyOptions.port) : undefined,
35
+ }).toString();
36
+ });
37
+ }
38
+ export function createGetProxyForUrlFromEnvironmentVariables(env) {
39
+ const proxyBypass = ProxyBypass.create(env.findFirst('npm_config_no_proxy', 'no_proxy'));
40
+ return createGetProxyForUrl(proxyBypass, (url) => {
41
+ const protocolName = url.protocol.replace(/:$/, '');
42
+ const proxyUrl = env.findFirst(`npm_config_${protocolName}_proxy`, `${protocolName}_proxy`, 'npm_config_proxy', 'all_proxy');
43
+ return proxyUrl || undefined;
44
+ });
45
+ }
46
+ function createGetProxyForUrl(bypass, getProxy) {
47
+ return function getProxyForUrl(urlValue) {
48
+ if (!isValidUrl(urlValue)) {
49
+ return undefined;
50
+ }
51
+ const url = new URL(urlValue);
52
+ return bypass.matches(url)
53
+ ? undefined
54
+ : getProxy(url);
55
+ };
56
+ }
57
+ function isValidUrl(url) {
58
+ try {
59
+ new URL(url);
60
+ return true;
61
+ }
62
+ catch {
63
+ return false;
64
+ }
65
+ }
66
+ //# sourceMappingURL=proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.js","sourceRoot":"","sources":["../../src/io/proxy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type CreateAxiosDefaults } from 'axios';
2
+ export type AxiosRequestConfigProxyDefaults = {
3
+ host: string;
4
+ port?: number;
5
+ auth?: {
6
+ username: string;
7
+ password: string;
8
+ };
9
+ protocol?: string;
10
+ };
11
+ export type AxiosRequestConfigDefaults<Data = any> = Omit<CreateAxiosDefaults<Data>, 'proxy'> & {
12
+ proxy?: AxiosRequestConfigProxyDefaults | false;
13
+ };
14
+ //# sourceMappingURL=AxiosRequestConfigDefaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxiosRequestConfigDefaults.d.ts","sourceRoot":"","sources":["../../../src/screenplay/abilities/AxiosRequestConfigDefaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,MAAM,+BAA+B,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACH,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAA;AAED,MAAM,MAAM,0BAA0B,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,GAAG;IAC5F,KAAK,CAAC,EAAE,+BAA+B,GAAG,KAAK,CAAC;CACnD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=AxiosRequestConfigDefaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AxiosRequestConfigDefaults.js","sourceRoot":"","sources":["../../../src/screenplay/abilities/AxiosRequestConfigDefaults.ts"],"names":[],"mappings":""}