@buoy-gg/network 7.0.40 → 7.0.42

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 (275) hide show
  1. package/README.md +11 -79
  2. package/lib/commonjs/index.js +1 -325
  3. package/lib/commonjs/index.web.js +1 -420
  4. package/lib/commonjs/network/components/DataViewer.web.js +1 -879
  5. package/lib/commonjs/network/components/NetworkCopyScreen.web.js +1 -48
  6. package/lib/commonjs/network/components/NetworkCopySettingsView.js +27 -755
  7. package/lib/commonjs/network/components/NetworkCopySettingsView.web.js +14 -1242
  8. package/lib/commonjs/network/components/NetworkDetailScreen.web.js +1 -101
  9. package/lib/commonjs/network/components/NetworkDetailStepper.js +1 -108
  10. package/lib/commonjs/network/components/NetworkDetailStepper.web.js +1 -298
  11. package/lib/commonjs/network/components/NetworkEventDetailView.js +15 -1130
  12. package/lib/commonjs/network/components/NetworkEventDetailView.web.js +15 -1484
  13. package/lib/commonjs/network/components/NetworkEventItemCompact.js +2 -401
  14. package/lib/commonjs/network/components/NetworkEventItemCompact.web.js +2 -820
  15. package/lib/commonjs/network/components/NetworkFilterScreen.web.js +1 -55
  16. package/lib/commonjs/network/components/NetworkFilterViewV3.js +1 -442
  17. package/lib/commonjs/network/components/NetworkFilterViewV3.web.js +1 -1310
  18. package/lib/commonjs/network/components/NetworkHeaderLive.js +1 -375
  19. package/lib/commonjs/network/components/NetworkHeaderLive.web.js +1 -623
  20. package/lib/commonjs/network/components/NetworkHeaderMenu.js +1 -190
  21. package/lib/commonjs/network/components/NetworkListScreen.js +1 -404
  22. package/lib/commonjs/network/components/NetworkListScreen.web.js +1 -625
  23. package/lib/commonjs/network/components/NetworkModal.js +1 -786
  24. package/lib/commonjs/network/components/NetworkNumberPrompt.js +1 -178
  25. package/lib/commonjs/network/components/NetworkNumberPrompt.web.js +1 -232
  26. package/lib/commonjs/network/components/NetworkOverrideEditor.js +1 -814
  27. package/lib/commonjs/network/components/NetworkOverrideEditor.web.js +1 -942
  28. package/lib/commonjs/network/components/NetworkOverrideHeaderButton.js +1 -107
  29. package/lib/commonjs/network/components/NetworkOverrideHeaderButton.web.js +1 -133
  30. package/lib/commonjs/network/components/NetworkOverridesButton.js +1 -90
  31. package/lib/commonjs/network/components/NetworkOverridesButton.web.js +1 -143
  32. package/lib/commonjs/network/components/NetworkOverridesScreen.js +1 -543
  33. package/lib/commonjs/network/components/NetworkOverridesScreen.web.js +1 -830
  34. package/lib/commonjs/network/components/NetworkSavedScreen.js +1 -226
  35. package/lib/commonjs/network/components/NetworkSavedScreen.web.js +1 -463
  36. package/lib/commonjs/network/components/NetworkUpgradeBanner.js +1 -76
  37. package/lib/commonjs/network/components/response-editor/Explorer.js +1 -973
  38. package/lib/commonjs/network/components/response-editor/Explorer.web.js +1 -1136
  39. package/lib/commonjs/network/components/response-editor/deleteNestedDataByPath.js +1 -56
  40. package/lib/commonjs/network/components/response-editor/editorContext.js +1 -33
  41. package/lib/commonjs/network/components/response-editor/updateNestedDataByPath.js +1 -61
  42. package/lib/commonjs/network/conditions/NetworkConditionsControl.js +1 -235
  43. package/lib/commonjs/network/conditions/NetworkConditionsControl.test.js +1 -136
  44. package/lib/commonjs/network/conditions/NetworkConditionsIcon.js +1 -33
  45. package/lib/commonjs/network/conditions/NetworkFloatingTool.js +1 -310
  46. package/lib/commonjs/network/conditions/NetworkFloatingTool.test.js +1 -219
  47. package/lib/commonjs/network/conditions/store.js +1 -75
  48. package/lib/commonjs/network/conditions/wait.js +1 -43
  49. package/lib/commonjs/network/conditions/xhr.js +1 -110
  50. package/lib/commonjs/network/hooks/useLiveNetworkEvent.js +1 -62
  51. package/lib/commonjs/network/hooks/useNetworkBadgeCounts.js +1 -83
  52. package/lib/commonjs/network/hooks/useNetworkEventList.js +1 -108
  53. package/lib/commonjs/network/hooks/useNetworkEvents.js +1 -318
  54. package/lib/commonjs/network/hooks/useNetworkHasMatches.js +1 -56
  55. package/lib/commonjs/network/hooks/useNetworkSaved.js +1 -38
  56. package/lib/commonjs/network/hooks/useNetworkSelection.js +1 -53
  57. package/lib/commonjs/network/hooks/useOverrideRules.js +1 -36
  58. package/lib/commonjs/network/hooks/useTickEveryMinute.js +1 -21
  59. package/lib/commonjs/network/overrides/applyToFetch.js +1 -80
  60. package/lib/commonjs/network/overrides/applyToXhr.js +2 -453
  61. package/lib/commonjs/network/overrides/engine.js +1 -93
  62. package/lib/commonjs/network/overrides/matchRule.js +1 -81
  63. package/lib/commonjs/network/overrides/overriddenRows.js +1 -0
  64. package/lib/commonjs/network/overrides/overrideRulesStore.js +1 -550
  65. package/lib/commonjs/network/overrides/presets.js +1 -70
  66. package/lib/commonjs/network/overrides/resolveOverride.js +1 -158
  67. package/lib/commonjs/network/overrides/types.js +1 -90
  68. package/lib/commonjs/network/sync/networkBodyResolver.js +1 -39
  69. package/lib/commonjs/network/sync/networkSyncAdapter.js +1 -882
  70. package/lib/commonjs/network/sync/overrideHonesty.release.test.js +1 -36
  71. package/lib/commonjs/network/types/index.js +1 -5
  72. package/lib/commonjs/network/utils/extractOperationName.js +1 -80
  73. package/lib/commonjs/network/utils/filterNetworkEvents.js +1 -96
  74. package/lib/commonjs/network/utils/formatGraphQLVariables.js +1 -219
  75. package/lib/commonjs/network/utils/formatting.js +1 -30
  76. package/lib/commonjs/network/utils/generateCurl.js +2 -71
  77. package/lib/commonjs/network/utils/generateNetworkCopyText.js +37 -166
  78. package/lib/commonjs/network/utils/httpCompletion.js +1 -37
  79. package/lib/commonjs/network/utils/networkEventStore.js +1 -393
  80. package/lib/commonjs/network/utils/networkListener.js +4 -1259
  81. package/lib/commonjs/network/utils/networkSavedStore.js +3 -577
  82. package/lib/commonjs/network/utils/networkSelectionStore.js +1 -193
  83. package/lib/commonjs/network/utils/realNow.js +1 -0
  84. package/lib/commonjs/network/utils/requestId.js +1 -0
  85. package/lib/commonjs/network/utils/resolveRequestUrl.js +1 -0
  86. package/lib/commonjs/network/utils/selectSavedEvents.js +1 -39
  87. package/lib/commonjs/network/utils/startNetworkCapture.js +1 -0
  88. package/lib/commonjs/network/utils/withPinnedFirst.js +1 -32
  89. package/lib/commonjs/preset.js +1 -102
  90. package/lib/module/index.js +1 -103
  91. package/lib/module/index.web.js +1 -82
  92. package/lib/module/network/components/DataViewer.web.js +1 -875
  93. package/lib/module/network/components/NetworkCopyScreen.web.js +1 -44
  94. package/lib/module/network/components/NetworkCopySettingsView.js +27 -750
  95. package/lib/module/network/components/NetworkCopySettingsView.web.js +14 -1237
  96. package/lib/module/network/components/NetworkDetailScreen.web.js +1 -97
  97. package/lib/module/network/components/NetworkDetailStepper.js +1 -104
  98. package/lib/module/network/components/NetworkDetailStepper.web.js +1 -296
  99. package/lib/module/network/components/NetworkEventDetailView.js +15 -1129
  100. package/lib/module/network/components/NetworkEventDetailView.web.js +15 -1482
  101. package/lib/module/network/components/NetworkEventItemCompact.js +2 -398
  102. package/lib/module/network/components/NetworkEventItemCompact.web.js +2 -818
  103. package/lib/module/network/components/NetworkFilterScreen.web.js +1 -51
  104. package/lib/module/network/components/NetworkFilterViewV3.js +1 -438
  105. package/lib/module/network/components/NetworkFilterViewV3.web.js +1 -1306
  106. package/lib/module/network/components/NetworkHeaderLive.js +1 -366
  107. package/lib/module/network/components/NetworkHeaderLive.web.js +1 -617
  108. package/lib/module/network/components/NetworkHeaderMenu.js +1 -184
  109. package/lib/module/network/components/NetworkListScreen.js +1 -400
  110. package/lib/module/network/components/NetworkListScreen.web.js +1 -623
  111. package/lib/module/network/components/NetworkModal.js +1 -781
  112. package/lib/module/network/components/NetworkNumberPrompt.js +1 -174
  113. package/lib/module/network/components/NetworkNumberPrompt.web.js +1 -230
  114. package/lib/module/network/components/NetworkOverrideEditor.js +1 -811
  115. package/lib/module/network/components/NetworkOverrideEditor.web.js +1 -939
  116. package/lib/module/network/components/NetworkOverrideHeaderButton.js +1 -104
  117. package/lib/module/network/components/NetworkOverrideHeaderButton.web.js +1 -131
  118. package/lib/module/network/components/NetworkOverridesButton.js +1 -87
  119. package/lib/module/network/components/NetworkOverridesButton.web.js +1 -141
  120. package/lib/module/network/components/NetworkOverridesScreen.js +1 -539
  121. package/lib/module/network/components/NetworkOverridesScreen.web.js +1 -826
  122. package/lib/module/network/components/NetworkSavedScreen.js +1 -222
  123. package/lib/module/network/components/NetworkSavedScreen.web.js +1 -461
  124. package/lib/module/network/components/NetworkUpgradeBanner.js +1 -72
  125. package/lib/module/network/components/response-editor/Explorer.js +1 -972
  126. package/lib/module/network/components/response-editor/Explorer.web.js +1 -1133
  127. package/lib/module/network/components/response-editor/deleteNestedDataByPath.js +1 -51
  128. package/lib/module/network/components/response-editor/editorContext.js +1 -29
  129. package/lib/module/network/components/response-editor/updateNestedDataByPath.js +1 -56
  130. package/lib/module/network/conditions/NetworkConditionsControl.js +1 -231
  131. package/lib/module/network/conditions/NetworkConditionsControl.test.js +1 -135
  132. package/lib/module/network/conditions/NetworkConditionsIcon.js +1 -29
  133. package/lib/module/network/conditions/NetworkFloatingTool.js +1 -304
  134. package/lib/module/network/conditions/NetworkFloatingTool.test.js +1 -218
  135. package/lib/module/network/conditions/store.js +1 -65
  136. package/lib/module/network/conditions/wait.js +1 -38
  137. package/lib/module/network/conditions/xhr.js +1 -106
  138. package/lib/module/network/hooks/useLiveNetworkEvent.js +1 -58
  139. package/lib/module/network/hooks/useNetworkBadgeCounts.js +1 -79
  140. package/lib/module/network/hooks/useNetworkEventList.js +1 -104
  141. package/lib/module/network/hooks/useNetworkEvents.js +1 -314
  142. package/lib/module/network/hooks/useNetworkHasMatches.js +1 -52
  143. package/lib/module/network/hooks/useNetworkSaved.js +1 -34
  144. package/lib/module/network/hooks/useNetworkSelection.js +1 -46
  145. package/lib/module/network/hooks/useOverrideRules.js +1 -32
  146. package/lib/module/network/hooks/useTickEveryMinute.js +1 -11
  147. package/lib/module/network/overrides/applyToFetch.js +1 -72
  148. package/lib/module/network/overrides/applyToXhr.js +2 -446
  149. package/lib/module/network/overrides/engine.js +1 -85
  150. package/lib/module/network/overrides/matchRule.js +1 -75
  151. package/lib/module/network/overrides/overriddenRows.js +1 -0
  152. package/lib/module/network/overrides/overrideRulesStore.js +1 -547
  153. package/lib/module/network/overrides/presets.js +1 -65
  154. package/lib/module/network/overrides/resolveOverride.js +1 -152
  155. package/lib/module/network/overrides/types.js +1 -86
  156. package/lib/module/network/sync/networkBodyResolver.js +1 -34
  157. package/lib/module/network/sync/networkSyncAdapter.js +1 -880
  158. package/lib/module/network/sync/overrideHonesty.release.test.js +1 -35
  159. package/lib/module/network/types/index.js +1 -3
  160. package/lib/module/network/utils/extractOperationName.js +1 -76
  161. package/lib/module/network/utils/filterNetworkEvents.js +1 -92
  162. package/lib/module/network/utils/formatGraphQLVariables.js +1 -213
  163. package/lib/module/network/utils/formatting.js +1 -9
  164. package/lib/module/network/utils/generateCurl.js +2 -67
  165. package/lib/module/network/utils/generateNetworkCopyText.js +37 -162
  166. package/lib/module/network/utils/httpCompletion.js +1 -32
  167. package/lib/module/network/utils/networkEventStore.js +1 -391
  168. package/lib/module/network/utils/networkListener.js +4 -1249
  169. package/lib/module/network/utils/networkSavedStore.js +3 -572
  170. package/lib/module/network/utils/networkSelectionStore.js +1 -188
  171. package/lib/module/network/utils/realNow.js +1 -0
  172. package/lib/module/network/utils/requestId.js +1 -0
  173. package/lib/module/network/utils/resolveRequestUrl.js +1 -0
  174. package/lib/module/network/utils/selectSavedEvents.js +1 -35
  175. package/lib/module/network/utils/startNetworkCapture.js +1 -0
  176. package/lib/module/network/utils/withPinnedFirst.js +1 -28
  177. package/lib/module/preset.js +1 -100
  178. package/lib/typescript/index.d.ts +1 -0
  179. package/lib/typescript/network/overrides/applyToXhr.d.ts +1 -0
  180. package/lib/typescript/network/overrides/engine.d.ts +1 -1
  181. package/lib/typescript/network/overrides/matchRule.d.ts +1 -1
  182. package/lib/typescript/network/overrides/overriddenRows.d.ts +16 -0
  183. package/lib/typescript/network/overrides/resolveOverride.d.ts +2 -2
  184. package/lib/typescript/network/overrides/types.d.ts +9 -0
  185. package/lib/typescript/network/utils/networkListener.d.ts +14 -4
  186. package/lib/typescript/network/utils/networkSavedStore.d.ts +4 -4
  187. package/lib/typescript/network/utils/realNow.d.ts +18 -0
  188. package/lib/typescript/network/utils/requestId.d.ts +2 -0
  189. package/lib/typescript/network/utils/resolveRequestUrl.d.ts +3 -0
  190. package/lib/typescript/network/utils/startNetworkCapture.d.ts +6 -0
  191. package/lib/web/index.mjs +145 -0
  192. package/package.json +32 -10
  193. package/lib/typescript/index.d.ts.map +0 -1
  194. package/lib/typescript/index.web.d.ts.map +0 -1
  195. package/lib/typescript/network/components/DataViewer.web.d.ts.map +0 -1
  196. package/lib/typescript/network/components/NetworkCopyScreen.web.d.ts.map +0 -1
  197. package/lib/typescript/network/components/NetworkCopySettingsView.d.ts.map +0 -1
  198. package/lib/typescript/network/components/NetworkCopySettingsView.web.d.ts.map +0 -1
  199. package/lib/typescript/network/components/NetworkDetailScreen.web.d.ts.map +0 -1
  200. package/lib/typescript/network/components/NetworkDetailStepper.d.ts.map +0 -1
  201. package/lib/typescript/network/components/NetworkDetailStepper.web.d.ts.map +0 -1
  202. package/lib/typescript/network/components/NetworkEventDetailView.d.ts.map +0 -1
  203. package/lib/typescript/network/components/NetworkEventDetailView.web.d.ts.map +0 -1
  204. package/lib/typescript/network/components/NetworkEventItemCompact.d.ts.map +0 -1
  205. package/lib/typescript/network/components/NetworkEventItemCompact.web.d.ts.map +0 -1
  206. package/lib/typescript/network/components/NetworkFilterScreen.web.d.ts.map +0 -1
  207. package/lib/typescript/network/components/NetworkFilterViewV3.d.ts.map +0 -1
  208. package/lib/typescript/network/components/NetworkFilterViewV3.web.d.ts.map +0 -1
  209. package/lib/typescript/network/components/NetworkHeaderLive.d.ts.map +0 -1
  210. package/lib/typescript/network/components/NetworkHeaderLive.web.d.ts.map +0 -1
  211. package/lib/typescript/network/components/NetworkHeaderMenu.d.ts.map +0 -1
  212. package/lib/typescript/network/components/NetworkListScreen.d.ts.map +0 -1
  213. package/lib/typescript/network/components/NetworkListScreen.web.d.ts.map +0 -1
  214. package/lib/typescript/network/components/NetworkModal.d.ts.map +0 -1
  215. package/lib/typescript/network/components/NetworkNumberPrompt.d.ts.map +0 -1
  216. package/lib/typescript/network/components/NetworkNumberPrompt.web.d.ts.map +0 -1
  217. package/lib/typescript/network/components/NetworkOverrideEditor.d.ts.map +0 -1
  218. package/lib/typescript/network/components/NetworkOverrideEditor.web.d.ts.map +0 -1
  219. package/lib/typescript/network/components/NetworkOverrideHeaderButton.d.ts.map +0 -1
  220. package/lib/typescript/network/components/NetworkOverrideHeaderButton.web.d.ts.map +0 -1
  221. package/lib/typescript/network/components/NetworkOverridesButton.d.ts.map +0 -1
  222. package/lib/typescript/network/components/NetworkOverridesButton.web.d.ts.map +0 -1
  223. package/lib/typescript/network/components/NetworkOverridesScreen.d.ts.map +0 -1
  224. package/lib/typescript/network/components/NetworkOverridesScreen.web.d.ts.map +0 -1
  225. package/lib/typescript/network/components/NetworkSavedScreen.d.ts.map +0 -1
  226. package/lib/typescript/network/components/NetworkSavedScreen.web.d.ts.map +0 -1
  227. package/lib/typescript/network/components/NetworkUpgradeBanner.d.ts.map +0 -1
  228. package/lib/typescript/network/components/response-editor/Explorer.d.ts.map +0 -1
  229. package/lib/typescript/network/components/response-editor/Explorer.web.d.ts.map +0 -1
  230. package/lib/typescript/network/components/response-editor/deleteNestedDataByPath.d.ts.map +0 -1
  231. package/lib/typescript/network/components/response-editor/editorContext.d.ts.map +0 -1
  232. package/lib/typescript/network/components/response-editor/updateNestedDataByPath.d.ts.map +0 -1
  233. package/lib/typescript/network/conditions/NetworkConditionsControl.d.ts.map +0 -1
  234. package/lib/typescript/network/conditions/NetworkConditionsControl.test.d.ts.map +0 -1
  235. package/lib/typescript/network/conditions/NetworkConditionsIcon.d.ts.map +0 -1
  236. package/lib/typescript/network/conditions/NetworkFloatingTool.d.ts.map +0 -1
  237. package/lib/typescript/network/conditions/NetworkFloatingTool.test.d.ts.map +0 -1
  238. package/lib/typescript/network/conditions/store.d.ts.map +0 -1
  239. package/lib/typescript/network/conditions/wait.d.ts.map +0 -1
  240. package/lib/typescript/network/conditions/xhr.d.ts.map +0 -1
  241. package/lib/typescript/network/hooks/useLiveNetworkEvent.d.ts.map +0 -1
  242. package/lib/typescript/network/hooks/useNetworkBadgeCounts.d.ts.map +0 -1
  243. package/lib/typescript/network/hooks/useNetworkEventList.d.ts.map +0 -1
  244. package/lib/typescript/network/hooks/useNetworkEvents.d.ts.map +0 -1
  245. package/lib/typescript/network/hooks/useNetworkHasMatches.d.ts.map +0 -1
  246. package/lib/typescript/network/hooks/useNetworkSaved.d.ts.map +0 -1
  247. package/lib/typescript/network/hooks/useNetworkSelection.d.ts.map +0 -1
  248. package/lib/typescript/network/hooks/useOverrideRules.d.ts.map +0 -1
  249. package/lib/typescript/network/hooks/useTickEveryMinute.d.ts.map +0 -1
  250. package/lib/typescript/network/overrides/applyToFetch.d.ts.map +0 -1
  251. package/lib/typescript/network/overrides/applyToXhr.d.ts.map +0 -1
  252. package/lib/typescript/network/overrides/engine.d.ts.map +0 -1
  253. package/lib/typescript/network/overrides/matchRule.d.ts.map +0 -1
  254. package/lib/typescript/network/overrides/overrideRulesStore.d.ts.map +0 -1
  255. package/lib/typescript/network/overrides/presets.d.ts.map +0 -1
  256. package/lib/typescript/network/overrides/resolveOverride.d.ts.map +0 -1
  257. package/lib/typescript/network/overrides/types.d.ts.map +0 -1
  258. package/lib/typescript/network/sync/networkBodyResolver.d.ts.map +0 -1
  259. package/lib/typescript/network/sync/networkSyncAdapter.d.ts.map +0 -1
  260. package/lib/typescript/network/sync/overrideHonesty.release.test.d.ts.map +0 -1
  261. package/lib/typescript/network/types/index.d.ts.map +0 -1
  262. package/lib/typescript/network/utils/extractOperationName.d.ts.map +0 -1
  263. package/lib/typescript/network/utils/filterNetworkEvents.d.ts.map +0 -1
  264. package/lib/typescript/network/utils/formatGraphQLVariables.d.ts.map +0 -1
  265. package/lib/typescript/network/utils/formatting.d.ts.map +0 -1
  266. package/lib/typescript/network/utils/generateCurl.d.ts.map +0 -1
  267. package/lib/typescript/network/utils/generateNetworkCopyText.d.ts.map +0 -1
  268. package/lib/typescript/network/utils/httpCompletion.d.ts.map +0 -1
  269. package/lib/typescript/network/utils/networkEventStore.d.ts.map +0 -1
  270. package/lib/typescript/network/utils/networkListener.d.ts.map +0 -1
  271. package/lib/typescript/network/utils/networkSavedStore.d.ts.map +0 -1
  272. package/lib/typescript/network/utils/networkSelectionStore.d.ts.map +0 -1
  273. package/lib/typescript/network/utils/selectSavedEvents.d.ts.map +0 -1
  274. package/lib/typescript/network/utils/withPinnedFirst.d.ts.map +0 -1
  275. package/lib/typescript/preset.d.ts.map +0 -1
@@ -1,152 +1 @@
1
- "use strict";
2
-
3
- /**
4
- * Decide whether a request is overridden — the whole decision, in one pure
5
- * function.
6
- *
7
- * Pure on purpose: this is the piece worth unit-testing, and it runs inside the
8
- * app's own `XMLHttpRequest.send()`, so it must be cheap, total, and incapable
9
- * of throwing. Everything that could surprise (defaults, clamping, content-type
10
- * inference) is resolved HERE, so `applyToXhr` never makes a decision — it just
11
- * performs the outcome.
12
- */
13
-
14
- import { ruleMatches } from "./matchRule";
15
- import { STATUS_MAX, STATUS_MIN } from "./types";
16
-
17
- /**
18
- * Traffic that must never be overridden, whatever the user's rules say.
19
- *
20
- * A `*` pattern is a completely reasonable thing for a developer to write
21
- * ("break everything and see what the app does"), and without this it would
22
- * also break Buoy's own licence checks — turning "I tested an error state" into
23
- * "the dev tools stopped working and I don't know why". Metro/debugger traffic
24
- * is already excluded upstream by `networkListener.shouldIgnoreUrl`.
25
- */
26
- const NEVER_OVERRIDE = [/(^|\.)keygen\.sh/i, /^https?:\/\/(www\.)?buoy\.gg\/api\/license(\/|$)/i];
27
- function isProtectedUrl(url) {
28
- return NEVER_OVERRIDE.some(pattern => pattern.test(url));
29
- }
30
-
31
- /**
32
- * Guess a `content-type` when the rule didn't set one.
33
- *
34
- * Getting this wrong is not cosmetic: a client that trusts the header (axios's
35
- * default transform, any `response.json()` wrapper) will hand the app a string
36
- * where it expected an object, and the override looks broken rather than the
37
- * header looking wrong.
38
- */
39
- function inferContentType(body) {
40
- const trimmed = body.trim();
41
- if (trimmed === "") return "text/plain; charset=utf-8";
42
- if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
43
- try {
44
- JSON.parse(trimmed);
45
- return "application/json";
46
- } catch {
47
- // Looks like JSON, isn't. Fall through — mislabelling it would be worse.
48
- }
49
- }
50
- return "text/plain; charset=utf-8";
51
- }
52
- function hasHeader(headers, name) {
53
- const wanted = name.toLowerCase();
54
- return Object.keys(headers).some(key => key.toLowerCase() === wanted);
55
- }
56
-
57
- /** Normalize a matched rule into the exact instructions the interceptor needs. */
58
- function toOutcome(rule) {
59
- const delayMs = Math.max(0, rule.delayMs ?? 0);
60
- if (rule.kind === "delay") {
61
- return {
62
- kind: "delay",
63
- rule,
64
- delayMs
65
- };
66
- }
67
- if (rule.kind === "fail") {
68
- return {
69
- kind: "fail",
70
- rule,
71
- delayMs,
72
- failKind: rule.failKind ?? "network"
73
- };
74
- }
75
- const body = rule.body ?? "";
76
- const headers = {
77
- ...(rule.headers ?? {})
78
- };
79
- if (!hasHeader(headers, "content-type")) {
80
- headers["content-type"] = inferContentType(body);
81
- }
82
- return {
83
- kind: "respond",
84
- rule,
85
- delayMs,
86
- // Clamped, not rejected: whatwg-fetch's Response constructor THROWS outside
87
- // [200, 599], which would crash the app's own fetch instead of overriding
88
- // it. The editor constrains the input; this guarantees it.
89
- status: Math.min(STATUS_MAX, Math.max(STATUS_MIN, rule.status ?? 200)),
90
- statusText: rule.statusText ?? "",
91
- headers,
92
- body
93
- };
94
- }
95
-
96
- /** A rule that has burned through its `times` budget no longer applies. */
97
- export function isSpent(rule) {
98
- return typeof rule.times === "number" && rule.hits >= rule.times;
99
- }
100
-
101
- /**
102
- * Is this rule in a phase where it should actually fire?
103
- *
104
- * Only `alternate` can answer no. It reads the CURRENT `seen` count, before
105
- * this match is recorded, so an untouched rule (`seen === 0`) lets the first
106
- * request through and overrides the second.
107
- */
108
- export function shouldApply(rule) {
109
- if (!rule.alternate) return true;
110
- return rule.seen % 2 === 1;
111
- }
112
-
113
- /**
114
- * The first enabled rule whose pattern covers this request, phase ignored.
115
- *
116
- * Separate from `resolveOverride` because an alternating rule has to advance
117
- * its phase on the requests it deliberately skips — the caller needs the rule
118
- * back even when the answer is "not this time".
119
- */
120
- export function findMatchingRule(url, method, rules) {
121
- if (rules.length === 0) return null;
122
- // Chrome skips OPTIONS too (`NetworkPersistenceManager.ts:953`). A faked
123
- // preflight fails CORS in a way that looks nothing like the rule you wrote.
124
- if (method.toUpperCase() === "OPTIONS") return null;
125
- if (isProtectedUrl(url)) return null;
126
- for (const rule of rules) {
127
- if (!rule.enabled) continue;
128
- if (isSpent(rule)) continue;
129
- if (!ruleMatches(rule, url, method)) continue;
130
- return rule;
131
- }
132
- return null;
133
- }
134
-
135
- /**
136
- * First ENABLED matching rule wins outright — no merging across rules.
137
- *
138
- * Chrome cascades header overrides from the most general path segment to the
139
- * most specific, but that only exists because its rules are directory-nested
140
- * files. A flat list with a cascade would be a rule whose effect you cannot see
141
- * by reading it, which is exactly the wrong trade on a phone screen.
142
- *
143
- * @param url Full request URL, query string included.
144
- * @param method HTTP method as the caller sent it (case-insensitive).
145
- * @param rules Ordered rule list; earlier entries win.
146
- */
147
- export function resolveOverride(url, method, rules) {
148
- const rule = findMatchingRule(url, method, rules);
149
- if (!rule || !shouldApply(rule)) return null;
150
- return toOutcome(rule);
151
- }
152
- export { toOutcome };
1
+ "use strict";import{ruleMatches as s}from"./matchRule";import{STATUS_MAX as a,STATUS_MIN as u}from"./types";const f=[/(^|\.)keygen\.sh/i,/^https?:\/\/(www\.)?buoy\.gg\/api\/license(\/|$)/i];function c(t){return f.some(n=>n.test(t))}function p(t){const n=t.trim();if(n==="")return"text/plain; charset=utf-8";if(n.startsWith("{")||n.startsWith("[")){try{JSON.parse(n);return"application/json"}catch{}}return"text/plain; charset=utf-8"}function d(t,n){const e=n.toLowerCase();return Object.keys(t).some(i=>i.toLowerCase()===e)}function o(t){const n=Math.max(0,t.delayMs??0);if(t.kind==="delay"){return{kind:"delay",rule:t,delayMs:n}}if(t.kind==="fail"){return{kind:"fail",rule:t,delayMs:n,failKind:t.failKind??"network"}}const e=t.body??"";const i={...t.headers??{}};if(!d(i,"content-type")){i["content-type"]=p(e)}return{kind:"respond",rule:t,delayMs:n,status:Math.min(a,Math.max(u,t.status??200)),statusText:t.statusText??"",headers:i,body:e}}export function isSpent(t){return typeof t.times==="number"&&t.hits>=t.times}export function shouldApply(t){if(!t.alternate)return true;return t.seen%2===1}export function findMatchingRule(t,n,e,i){if(e.length===0)return null;if(n.toUpperCase()==="OPTIONS")return null;if(c(t))return null;for(const r of e){if(!r.enabled)continue;if(isSpent(r))continue;if(!s(r,t,n,i))continue;return r}return null}export function resolveOverride(t,n,e,i){const r=findMatchingRule(t,n,e,i);if(!r||!shouldApply(r))return null;return o(r)}export{o as toOutcome};
@@ -1,86 +1 @@
1
- "use strict";
2
-
3
- import { TIER_LIMITS } from "@buoy-gg/shared-ui";
4
-
5
- /**
6
- * Network response overrides — the rule model.
7
- *
8
- * This is Buoy's answer to Chrome DevTools' "Local Overrides", reshaped for
9
- * mobile. Two deliberate differences from Chrome are worth knowing, because
10
- * they explain the whole shape of this file:
11
- *
12
- * 1. Chrome's rules ARE a directory tree — a body override is a file at
13
- * `<host>/<path>`, header overrides live in per-directory `.headers` files,
14
- * and its general→specific header cascade exists only to hang off that
15
- * nesting. We have no filesystem, so rules are a flat ordered list and the
16
- * FIRST enabled match wins outright. That's what Charles/Proxyman/MSW do,
17
- * and it's what a developer can reason about on a phone screen.
18
- *
19
- * 2. Chrome CANNOT change a status code. `NetworkManager.ts` computes
20
- * `responseCode = isBodyOverridden ? 200 : (responseStatusCode || 200)`, so
21
- * overriding a body forces 200, and there is no latency or failure
22
- * simulation at all. Chrome's feature is "serve different bytes". Forcing a
23
- * 500, a timeout or a 3s stall is the entire mobile use case, so `status`,
24
- * `delayMs` and `kind: "fail"` below are the point of the exercise.
25
- */
26
-
27
- /**
28
- * What a rule does when it matches.
29
- *
30
- * - `respond` — synthesize a response. The request never leaves the device.
31
- * - `fail` — synthesize a transport failure (offline / timeout). Also never
32
- * leaves the device.
33
- * - `delay` — let the real request run, just late. Pure latency injection.
34
- */
35
-
36
- /**
37
- * Which transport failure to fake.
38
- *
39
- * `network` surfaces the way a real offline request does — `fetch` rejects with
40
- * `TypeError: Network request failed`. This is also how you simulate "status 0":
41
- * you can't, via `respond`, because whatwg-fetch's `Response` constructor throws
42
- * a RangeError outside 200–599 (see STATUS_MIN/STATUS_MAX).
43
- */
44
-
45
- /**
46
- * Status codes a synthesized response may use.
47
- *
48
- * NOT an arbitrary product decision: React Native's `fetch` is the whatwg-fetch
49
- * polyfill, whose `Response` constructor throws
50
- * `RangeError: The status provided is outside the range [200, 599]`. A rule set
51
- * to 0 would therefore crash the app's own fetch call rather than override it.
52
- * Use `kind: "fail"` for connection-level failures.
53
- */
54
- export const STATUS_MIN = 200;
55
- export const STATUS_MAX = 599;
56
-
57
- /** Bounds the persisted list so a runaway UI can't fill storage. */
58
- export const MAX_RULES = 50;
59
-
60
- /**
61
- * @deprecated Read the live limit with `useLimit("network.overrideRules")` —
62
- * this only reports the FREE tier's value. Kept because it is part of the
63
- * package's public exports.
64
- */
65
- export const FREE_TIER_RULE_LIMIT = TIER_LIMITS["network.overrideRules"].free;
66
-
67
- /**
68
- * Stamped onto the `NetworkEvent` a rule affected, so the list can badge the
69
- * row and the detail view can offer "edit / disable the rule that did this".
70
- */
71
-
72
- /**
73
- * A matched rule, normalized into exactly what the interceptor needs — defaults
74
- * resolved, status clamped, content-type inferred. Keeping normalization in the
75
- * resolver means `applyToXhr` never has to make a decision.
76
- */
77
-
78
- /** The marker recorded for an outcome. */
79
- export function markForOutcome(outcome) {
80
- return {
81
- ruleId: outcome.rule.id,
82
- ruleName: outcome.rule.name,
83
- kind: outcome.kind,
84
- delayMs: outcome.delayMs || undefined
85
- };
86
- }
1
+ "use strict";import{TIER_LIMITS as r}from"@buoy-gg/shared-ui";export const STATUS_MIN=200;export const STATUS_MAX=599;export const MAX_RULES=50;export const FREE_TIER_RULE_LIMIT=r["network.overrideRules"].free;export function markForOutcome(e){return{ruleId:e.rule.id,ruleName:e.rule.name,kind:e.kind,delayMs:e.delayMs||void 0}}
@@ -1,34 +1 @@
1
- "use strict";
2
-
3
- import { createContext, useContext } from "react";
4
-
5
- /**
6
- * The full request/response bodies for a single network event, fetched on
7
- * demand. Either field may be `null` when the event genuinely has no body.
8
- */
9
-
10
- /**
11
- * Resolves request/response bodies that were omitted from a synced snapshot.
12
- *
13
- * Large bodies (see `networkSyncAdapter`) are stripped from the list snapshot
14
- * so they aren't re-streamed every ~200ms; the detail view fetches them lazily
15
- * through this resolver when a request is opened.
16
- *
17
- * On the device this is never provided — bodies are always inline — so the
18
- * detail view simply falls back to the inline data. The desktop dashboard
19
- * provides a resolver that fetches the body over the devtool protocol.
20
- */
21
- import { jsx as _jsx } from "react/jsx-runtime";
22
- const NetworkBodyResolverContext = /*#__PURE__*/createContext(null);
23
- export function NetworkBodyResolverProvider({
24
- resolver,
25
- children
26
- }) {
27
- return /*#__PURE__*/_jsx(NetworkBodyResolverContext.Provider, {
28
- value: resolver,
29
- children: children
30
- });
31
- }
32
- export function useNetworkBodyResolver() {
33
- return useContext(NetworkBodyResolverContext);
34
- }
1
+ "use strict";import{createContext as t,useContext as n}from"react";import{jsx as s}from"react/jsx-runtime";const e=t(null);export function NetworkBodyResolverProvider({resolver:o,children:r}){return s(e.Provider,{value:o,children:r})}export function useNetworkBodyResolver(){return n(e)}