@browserless.io/browserless 2.31.1 → 2.32.0-beta-1

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 (432) hide show
  1. package/build/routes/chrome/http/content.post.body.json +8 -8
  2. package/build/routes/chrome/http/pdf.post.body.json +8 -8
  3. package/build/routes/chrome/http/scrape.post.body.json +8 -8
  4. package/build/routes/chrome/http/screenshot.post.body.json +8 -8
  5. package/build/routes/chromium/http/content.post.body.json +8 -8
  6. package/build/routes/chromium/http/pdf.post.body.json +8 -8
  7. package/build/routes/chromium/http/scrape.post.body.json +8 -8
  8. package/build/routes/chromium/http/screenshot.post.body.json +8 -8
  9. package/build/routes/edge/http/content.post.body.json +8 -8
  10. package/build/routes/edge/http/pdf.post.body.json +8 -8
  11. package/build/routes/edge/http/scrape.post.body.json +8 -8
  12. package/build/routes/edge/http/screenshot.post.body.json +8 -8
  13. package/build/routes/management/tests/management.spec.js +14 -0
  14. package/build/server.js +4 -5
  15. package/build/shared/utils/enjoi-resolver.d.ts +77 -0
  16. package/build/shared/utils/enjoi-resolver.js +399 -0
  17. package/docker/base/Dockerfile +2 -2
  18. package/extensions/ublocklite/README.md +4 -2
  19. package/extensions/ublocklite/_locales/ar/messages.json +34 -10
  20. package/extensions/ublocklite/_locales/az/messages.json +26 -2
  21. package/extensions/ublocklite/_locales/be/messages.json +26 -2
  22. package/extensions/ublocklite/_locales/bg/messages.json +26 -2
  23. package/extensions/ublocklite/_locales/bn/messages.json +26 -2
  24. package/extensions/ublocklite/_locales/br_FR/messages.json +26 -2
  25. package/extensions/ublocklite/_locales/bs/messages.json +26 -2
  26. package/extensions/ublocklite/_locales/ca/messages.json +26 -2
  27. package/extensions/ublocklite/_locales/cs/messages.json +26 -2
  28. package/extensions/ublocklite/_locales/cv/messages.json +26 -2
  29. package/extensions/ublocklite/_locales/cy/messages.json +37 -13
  30. package/extensions/ublocklite/_locales/da/messages.json +26 -2
  31. package/extensions/ublocklite/_locales/de/messages.json +26 -2
  32. package/extensions/ublocklite/_locales/el/messages.json +29 -5
  33. package/extensions/ublocklite/_locales/en/messages.json +26 -2
  34. package/extensions/ublocklite/_locales/en_GB/messages.json +26 -2
  35. package/extensions/ublocklite/_locales/eo/messages.json +26 -2
  36. package/extensions/ublocklite/_locales/es/messages.json +26 -2
  37. package/extensions/ublocklite/_locales/et/messages.json +26 -2
  38. package/extensions/ublocklite/_locales/eu/messages.json +26 -2
  39. package/extensions/ublocklite/_locales/fa/messages.json +26 -2
  40. package/extensions/ublocklite/_locales/fi/messages.json +26 -2
  41. package/extensions/ublocklite/_locales/fil/messages.json +68 -44
  42. package/extensions/ublocklite/_locales/fr/messages.json +26 -2
  43. package/extensions/ublocklite/_locales/fy/messages.json +26 -2
  44. package/extensions/ublocklite/_locales/gl/messages.json +27 -3
  45. package/extensions/ublocklite/_locales/gu/messages.json +26 -2
  46. package/extensions/ublocklite/_locales/he/messages.json +26 -2
  47. package/extensions/ublocklite/_locales/hi/messages.json +26 -2
  48. package/extensions/ublocklite/_locales/hr/messages.json +26 -2
  49. package/extensions/ublocklite/_locales/hu/messages.json +26 -2
  50. package/extensions/ublocklite/_locales/hy/messages.json +26 -2
  51. package/extensions/ublocklite/_locales/id/messages.json +37 -13
  52. package/extensions/ublocklite/_locales/it/messages.json +26 -2
  53. package/extensions/ublocklite/_locales/ja/messages.json +26 -2
  54. package/extensions/ublocklite/_locales/ka/messages.json +26 -2
  55. package/extensions/ublocklite/_locales/kk/messages.json +26 -2
  56. package/extensions/ublocklite/_locales/kn/messages.json +26 -2
  57. package/extensions/ublocklite/_locales/ko/messages.json +26 -2
  58. package/extensions/ublocklite/_locales/lt/messages.json +26 -2
  59. package/extensions/ublocklite/_locales/lv/messages.json +26 -2
  60. package/extensions/ublocklite/_locales/mk/messages.json +26 -2
  61. package/extensions/ublocklite/_locales/ml/messages.json +26 -2
  62. package/extensions/ublocklite/_locales/mr/messages.json +26 -2
  63. package/extensions/ublocklite/_locales/ms/messages.json +26 -2
  64. package/extensions/ublocklite/_locales/nb/messages.json +26 -2
  65. package/extensions/ublocklite/_locales/nl/messages.json +26 -2
  66. package/extensions/ublocklite/_locales/oc/messages.json +26 -2
  67. package/extensions/ublocklite/_locales/pa/messages.json +26 -2
  68. package/extensions/ublocklite/_locales/pl/messages.json +26 -2
  69. package/extensions/ublocklite/_locales/pt_BR/messages.json +26 -2
  70. package/extensions/ublocklite/_locales/pt_PT/messages.json +29 -5
  71. package/extensions/ublocklite/_locales/ro/messages.json +26 -2
  72. package/extensions/ublocklite/_locales/ru/messages.json +26 -2
  73. package/extensions/ublocklite/_locales/si/messages.json +26 -2
  74. package/extensions/ublocklite/_locales/sk/messages.json +26 -2
  75. package/extensions/ublocklite/_locales/sl/messages.json +26 -2
  76. package/extensions/ublocklite/_locales/so/messages.json +26 -2
  77. package/extensions/ublocklite/_locales/sq/messages.json +26 -2
  78. package/extensions/ublocklite/_locales/sr/messages.json +26 -2
  79. package/extensions/ublocklite/_locales/sv/messages.json +26 -2
  80. package/extensions/ublocklite/_locales/sw/messages.json +26 -2
  81. package/extensions/ublocklite/_locales/ta/messages.json +26 -2
  82. package/extensions/ublocklite/_locales/te/messages.json +26 -2
  83. package/extensions/ublocklite/_locales/th/messages.json +26 -2
  84. package/extensions/ublocklite/_locales/tr/messages.json +26 -2
  85. package/extensions/ublocklite/_locales/uk/messages.json +26 -2
  86. package/extensions/ublocklite/_locales/ur/messages.json +26 -2
  87. package/extensions/ublocklite/_locales/vi/messages.json +33 -9
  88. package/extensions/ublocklite/_locales/zh_CN/messages.json +33 -9
  89. package/extensions/ublocklite/_locales/zh_TW/messages.json +26 -2
  90. package/extensions/ublocklite/css/develop.css +59 -25
  91. package/extensions/ublocklite/css/line-hor-dashed.png +0 -0
  92. package/extensions/ublocklite/dashboard.html +25 -16
  93. package/extensions/ublocklite/js/admin.js +7 -8
  94. package/extensions/ublocklite/js/background.js +38 -19
  95. package/extensions/ublocklite/js/dashboard.js +3 -3
  96. package/extensions/ublocklite/js/develop.js +533 -798
  97. package/extensions/ublocklite/js/dnr-editor.js +180 -0
  98. package/extensions/ublocklite/js/dnr-parser.js +30 -10
  99. package/extensions/ublocklite/js/i18n.js +5 -0
  100. package/extensions/ublocklite/js/mode-editor.js +87 -0
  101. package/extensions/ublocklite/js/mode-manager.js +11 -48
  102. package/extensions/ublocklite/js/mode-parser.js +211 -0
  103. package/extensions/ublocklite/js/ro-dnr-editor.js +95 -0
  104. package/extensions/ublocklite/js/ruleset-manager.js +42 -16
  105. package/extensions/ublocklite/js/rw-dnr-editor.js +391 -0
  106. package/extensions/ublocklite/js/settings.js +7 -71
  107. package/extensions/ublocklite/lib/codemirror/cm6.bundle.ubol.min.js +1 -1
  108. package/extensions/ublocklite/lib/codemirror/codemirror.LICENSE +21 -0
  109. package/extensions/ublocklite/manifest.json +1 -1
  110. package/extensions/ublocklite/rulesets/generic-details.json +3 -24
  111. package/extensions/ublocklite/rulesets/main/adguard-mobile.json +7 -18
  112. package/extensions/ublocklite/rulesets/main/annoyances-cookies.json +12 -6
  113. package/extensions/ublocklite/rulesets/main/annoyances-others.json +4 -2
  114. package/extensions/ublocklite/rulesets/main/annoyances-overlays.json +2 -1
  115. package/extensions/ublocklite/rulesets/main/annoyances-social.json +4 -2
  116. package/extensions/ublocklite/rulesets/main/block-lan.json +6 -0
  117. package/extensions/ublocklite/rulesets/main/chn-0.json +26 -64
  118. package/extensions/ublocklite/rulesets/main/cze-0.json +2 -1
  119. package/extensions/ublocklite/rulesets/main/deu-0.json +3 -1
  120. package/extensions/ublocklite/rulesets/main/dpollock-0.json +2 -0
  121. package/extensions/ublocklite/rulesets/main/easylist.json +23 -9
  122. package/extensions/ublocklite/rulesets/main/easyprivacy.json +40 -11
  123. package/extensions/ublocklite/rulesets/main/fin-0.json +11 -2
  124. package/extensions/ublocklite/rulesets/main/fra-0.json +22 -41
  125. package/extensions/ublocklite/rulesets/main/grc-0.json +1 -1
  126. package/extensions/ublocklite/rulesets/main/hun-0.json +9 -2
  127. package/extensions/ublocklite/rulesets/main/idn-0.json +8 -38
  128. package/extensions/ublocklite/rulesets/main/ind-0.json +35 -6
  129. package/extensions/ublocklite/rulesets/main/irn-0.json +1 -0
  130. package/extensions/ublocklite/rulesets/main/isr-0.json +11 -1
  131. package/extensions/ublocklite/rulesets/main/ita-0.json +1 -1
  132. package/extensions/ublocklite/rulesets/main/jpn-1.json +24 -18
  133. package/extensions/ublocklite/rulesets/main/kor-1.json +6 -4
  134. package/extensions/ublocklite/rulesets/main/nld-0.json +3 -2
  135. package/extensions/ublocklite/rulesets/main/nor-0.json +8 -2
  136. package/extensions/ublocklite/rulesets/main/pgl.json +10 -7
  137. package/extensions/ublocklite/rulesets/main/pol-0.json +5 -0
  138. package/extensions/ublocklite/rulesets/main/rus-0.json +30 -28
  139. package/extensions/ublocklite/rulesets/main/spa-1.json +18 -61
  140. package/extensions/ublocklite/rulesets/main/stevenblack-hosts.json +7223 -999
  141. package/extensions/ublocklite/rulesets/main/swe-1.json +40 -28
  142. package/extensions/ublocklite/rulesets/main/tur-0.json +17 -38
  143. package/extensions/ublocklite/rulesets/main/ublock-badware.json +28 -63
  144. package/extensions/ublocklite/rulesets/main/ublock-filters.json +173 -28
  145. package/extensions/ublocklite/rulesets/main/ukr-0.json +8 -26
  146. package/extensions/ublocklite/rulesets/main/urlhaus-full.json +339 -766
  147. package/extensions/ublocklite/rulesets/main/vie-1.json +33 -30
  148. package/extensions/ublocklite/rulesets/modify-headers/chn-0.json +4 -1
  149. package/extensions/ublocklite/rulesets/modify-headers/fra-0.json +0 -3
  150. package/extensions/ublocklite/rulesets/modify-headers/rus-0.json +2 -1
  151. package/extensions/ublocklite/rulesets/modify-headers/ublock-filters.json +1 -1
  152. package/extensions/ublocklite/rulesets/redirect/adguard-mobile.json +1 -1
  153. package/extensions/ublocklite/rulesets/redirect/annoyances-overlays.json +1 -0
  154. package/extensions/ublocklite/rulesets/redirect/spa-1.json +3 -4
  155. package/extensions/ublocklite/rulesets/redirect/swe-1.json +2 -1
  156. package/extensions/ublocklite/rulesets/redirect/tur-0.json +1 -1
  157. package/extensions/ublocklite/rulesets/redirect/ublock-filters.json +15 -5
  158. package/extensions/ublocklite/rulesets/redirect/vie-1.json +2 -2
  159. package/extensions/ublocklite/rulesets/regex/adguard-mobile.json +13 -0
  160. package/extensions/ublocklite/rulesets/regex/chn-0.json +2 -3
  161. package/extensions/ublocklite/rulesets/regex/jpn-1.json +1 -1
  162. package/extensions/ublocklite/rulesets/regex/kor-1.json +1 -0
  163. package/extensions/ublocklite/rulesets/regex/nor-0.json +10 -0
  164. package/extensions/ublocklite/rulesets/regex/spa-0.json +0 -1
  165. package/extensions/ublocklite/rulesets/regex/spa-1.json +0 -13
  166. package/extensions/ublocklite/rulesets/regex/ublock-badware.json +5 -6
  167. package/extensions/ublocklite/rulesets/regex/ublock-filters.json +14 -6
  168. package/extensions/ublocklite/rulesets/regex/ukr-0.json +2 -2
  169. package/extensions/ublocklite/rulesets/removeparam/adguard-spyware-url.json +10 -5
  170. package/extensions/ublocklite/rulesets/removeparam/rus-0.json +1 -1
  171. package/extensions/ublocklite/rulesets/removeparam/rus-1.json +3 -2
  172. package/extensions/ublocklite/rulesets/ruleset-details.json +246 -246
  173. package/extensions/ublocklite/rulesets/scripting/declarative/adguard-mobile.js +3 -3
  174. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-cookies.js +1 -1
  175. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-others.js +3 -3
  176. package/extensions/ublocklite/rulesets/scripting/declarative/annoyances-overlays.js +1 -1
  177. package/extensions/ublocklite/rulesets/scripting/declarative/chn-0.js +3 -3
  178. package/extensions/ublocklite/rulesets/scripting/declarative/easylist.js +3 -3
  179. package/extensions/ublocklite/rulesets/scripting/declarative/fin-0.js +3 -3
  180. package/extensions/ublocklite/rulesets/scripting/declarative/fra-0.js +3 -3
  181. package/extensions/ublocklite/rulesets/scripting/declarative/idn-0.js +3 -3
  182. package/extensions/ublocklite/rulesets/scripting/declarative/jpn-1.js +3 -3
  183. package/extensions/ublocklite/rulesets/scripting/declarative/kor-1.js +3 -3
  184. package/extensions/ublocklite/rulesets/scripting/declarative/rus-0.js +3 -3
  185. package/extensions/ublocklite/rulesets/scripting/declarative/spa-1.js +3 -3
  186. package/extensions/ublocklite/rulesets/scripting/declarative/swe-1.js +3 -3
  187. package/extensions/ublocklite/rulesets/scripting/declarative/tur-0.js +3 -3
  188. package/extensions/ublocklite/rulesets/scripting/declarative/ublock-filters.js +3 -3
  189. package/extensions/ublocklite/rulesets/scripting/declarative/ukr-0.js +3 -3
  190. package/extensions/ublocklite/rulesets/scripting/declarative/vie-1.js +1 -1
  191. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-cookies.js +3 -3
  192. package/extensions/ublocklite/rulesets/scripting/generic/annoyances-social.js +3 -3
  193. package/extensions/ublocklite/rulesets/scripting/generic/chn-0.js +3 -3
  194. package/extensions/ublocklite/rulesets/scripting/generic/easylist.js +3 -3
  195. package/extensions/ublocklite/rulesets/scripting/generic/fin-0.js +2 -2
  196. package/extensions/ublocklite/rulesets/scripting/generic/fra-0.js +2 -2
  197. package/extensions/ublocklite/rulesets/scripting/generic/hrv-0.js +1 -1
  198. package/extensions/ublocklite/rulesets/scripting/generic/idn-0.js +2 -2
  199. package/extensions/ublocklite/rulesets/scripting/generic/ind-0.js +2 -2
  200. package/extensions/ublocklite/rulesets/scripting/generic/jpn-1.js +3 -3
  201. package/extensions/ublocklite/rulesets/scripting/generic/nor-0.js +1 -1
  202. package/extensions/ublocklite/rulesets/scripting/generic/rus-0.js +2 -2
  203. package/extensions/ublocklite/rulesets/scripting/generic/spa-1.js +2 -2
  204. package/extensions/ublocklite/rulesets/scripting/generic/tur-0.js +2 -2
  205. package/extensions/ublocklite/rulesets/scripting/generic/ublock-filters.js +3 -3
  206. package/extensions/ublocklite/rulesets/scripting/generic/ukr-0.js +3 -3
  207. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-cookies.css +0 -1
  208. package/extensions/ublocklite/rulesets/scripting/generichigh/annoyances-social.css +0 -1
  209. package/extensions/ublocklite/rulesets/scripting/generichigh/chn-0.css +0 -4
  210. package/extensions/ublocklite/rulesets/scripting/generichigh/cze-0.css +0 -1
  211. package/extensions/ublocklite/rulesets/scripting/generichigh/easylist.css +5 -9
  212. package/extensions/ublocklite/rulesets/scripting/generichigh/idn-0.css +11 -0
  213. package/extensions/ublocklite/rulesets/scripting/generichigh/kor-1.css +0 -2
  214. package/extensions/ublocklite/rulesets/scripting/procedural/adguard-mobile.js +3 -3
  215. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-cookies.js +1 -1
  216. package/extensions/ublocklite/rulesets/scripting/procedural/annoyances-overlays.js +3 -3
  217. package/extensions/ublocklite/rulesets/scripting/procedural/chn-0.js +2 -2
  218. package/extensions/ublocklite/rulesets/scripting/procedural/deu-0.js +3 -3
  219. package/extensions/ublocklite/rulesets/scripting/procedural/easylist.js +3 -3
  220. package/extensions/ublocklite/rulesets/scripting/procedural/fin-0.js +3 -3
  221. package/extensions/ublocklite/rulesets/scripting/procedural/fra-0.js +3 -3
  222. package/extensions/ublocklite/rulesets/scripting/procedural/jpn-1.js +3 -3
  223. package/extensions/ublocklite/rulesets/scripting/procedural/kor-1.js +3 -3
  224. package/extensions/ublocklite/rulesets/scripting/procedural/nor-0.js +3 -3
  225. package/extensions/ublocklite/rulesets/scripting/procedural/rou-1.js +3 -3
  226. package/extensions/ublocklite/rulesets/scripting/procedural/rus-0.js +3 -3
  227. package/extensions/ublocklite/rulesets/scripting/procedural/rus-1.js +1 -1
  228. package/extensions/ublocklite/rulesets/scripting/procedural/spa-0.js +3 -3
  229. package/extensions/ublocklite/rulesets/scripting/procedural/spa-1.js +3 -3
  230. package/extensions/ublocklite/rulesets/scripting/procedural/swe-1.js +3 -3
  231. package/extensions/ublocklite/rulesets/scripting/procedural/ublock-filters.js +3 -3
  232. package/extensions/ublocklite/rulesets/scripting/procedural/ukr-0.js +3 -3
  233. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.abort-current-script.js +2 -2
  234. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie-reload.js +11 -2
  235. package/extensions/ublocklite/rulesets/scripting/scriptlet/adguard-mobile.set-cookie.js +10 -1
  236. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-cookie.js +12 -3
  237. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.set-local-storage-item.js +2 -2
  238. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-click-element.js +2 -2
  239. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie-reload.js +10 -1
  240. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-cookie.js +12 -3
  241. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-cookies.trusted-set-local-storage-item.js +2 -2
  242. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.remove-cookie.js +17 -7
  243. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-others.set-cookie.js +10 -1
  244. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-current-script.js +1 -1
  245. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.abort-on-property-read.js +1 -1
  246. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.addEventListener-defuser.js +2 -2
  247. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-attr.js +2 -2
  248. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-class.js +1 -1
  249. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-cookie.js +17 -7
  250. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.remove-node-text.js +2 -2
  251. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-constant.js +1 -1
  252. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-cookie.js +12 -3
  253. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.set-local-storage-item.js +2 -2
  254. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-cookie.js +10 -1
  255. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-overlays.trusted-set-local-storage-item.js +2 -2
  256. package/extensions/ublocklite/rulesets/scripting/scriptlet/annoyances-social.set-cookie.js +10 -1
  257. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-current-script.js +2 -2
  258. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.abort-on-property-read.js +2 -2
  259. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.evaldata-prune.js +1 -1
  260. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.json-prune.js +3 -3
  261. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.prevent-setTimeout.js +1 -1
  262. package/extensions/ublocklite/rulesets/scripting/scriptlet/chn-0.set-constant.js +1 -1
  263. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.json-prune-xhr-response.js +597 -0
  264. package/extensions/ublocklite/rulesets/scripting/scriptlet/cze-0.remove-cookie.js +17 -7
  265. package/extensions/ublocklite/rulesets/scripting/scriptlet/easyprivacy.set-cookie.js +10 -1
  266. package/extensions/ublocklite/rulesets/scripting/scriptlet/fin-0.set-cookie.js +10 -1
  267. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.abort-on-property-read.js +2 -2
  268. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.adjust-setTimeout.js +2 -2
  269. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.prevent-fetch.js +2 -2
  270. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-constant.js +1 -1
  271. package/extensions/ublocklite/rulesets/scripting/scriptlet/fra-0.set-cookie.js +10 -1
  272. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.prevent-fetch.js +2 -2
  273. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.remove-cookie.js +17 -7
  274. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-constant.js +1 -1
  275. package/extensions/ublocklite/rulesets/scripting/scriptlet/hun-0.set-cookie.js +10 -1
  276. package/extensions/ublocklite/rulesets/scripting/scriptlet/irn-0.remove-cookie.js +17 -7
  277. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.abort-current-script.js +2 -2
  278. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.addEventListener-defuser.js +1 -1
  279. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.adjust-setTimeout.js +1 -1
  280. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-fetch.js +1 -1
  281. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-setTimeout.js +2 -2
  282. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.prevent-window-open.js +1 -1
  283. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.remove-node-text.js +1 -1
  284. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-constant.js +2 -2
  285. package/extensions/ublocklite/rulesets/scripting/scriptlet/jpn-1.set-cookie-reload.js +10 -1
  286. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.prevent-setTimeout.js +2 -2
  287. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-constant.js +2 -2
  288. package/extensions/ublocklite/rulesets/scripting/scriptlet/kor-1.set-cookie.js +10 -1
  289. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.abort-on-stack-trace.js +1 -1
  290. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.addEventListener-defuser.js +1 -1
  291. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.href-sanitizer.js +1 -1
  292. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-setTimeout.js +1 -1
  293. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.prevent-xhr.js +1 -1
  294. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-cookie.js +19 -9
  295. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.remove-node-text.js +1 -1
  296. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-constant.js +3 -3
  297. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie-reload.js +11 -2
  298. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-0.set-cookie.js +10 -1
  299. package/extensions/ublocklite/rulesets/scripting/scriptlet/rus-1.remove-cookie.js +17 -7
  300. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-current-script.js +2 -2
  301. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-property-read.js +2 -2
  302. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.abort-on-stack-trace.js +1 -1
  303. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.addEventListener-defuser.js +2 -2
  304. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setInterval.js +2 -2
  305. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.adjust-setTimeout.js +2 -2
  306. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-fetch.js +2 -2
  307. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-setTimeout.js +1 -1
  308. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-window-open.js +2 -2
  309. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.prevent-xhr.js +1 -1
  310. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-attr.js +2 -2
  311. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.remove-class.js +2 -2
  312. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-constant.js +2 -2
  313. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie-reload.js +10 -1
  314. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-cookie.js +12 -3
  315. package/extensions/ublocklite/rulesets/scripting/scriptlet/spa-1.set-local-storage-item.js +1 -1
  316. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.remove-cookie.js +17 -7
  317. package/extensions/ublocklite/rulesets/scripting/scriptlet/swe-1.set-cookie.js +10 -1
  318. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-current-script.js +2 -2
  319. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.abort-on-property-read.js +2 -2
  320. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.addEventListener-defuser.js +1 -1
  321. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.adjust-setInterval.js +2 -2
  322. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-setTimeout.js +2 -2
  323. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.prevent-window-open.js +1 -1
  324. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.remove-attr.js +2 -2
  325. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-constant.js +2 -2
  326. package/extensions/ublocklite/rulesets/scripting/scriptlet/tur-0.set-cookie.js +10 -1
  327. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-badware.abort-current-script.js +2 -2
  328. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-current-script.js +3 -3
  329. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-read.js +2 -2
  330. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-property-write.js +1 -1
  331. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.abort-on-stack-trace.js +2 -2
  332. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.addEventListener-defuser.js +3 -3
  333. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setInterval.js +3 -3
  334. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.adjust-setTimeout.js +2 -2
  335. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-edit.js +30 -7
  336. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune-xhr-response.js +3 -3
  337. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.json-prune.js +3 -3
  338. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.jsonl-edit-xhr-response.js +19 -2
  339. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.noeval-if.js +3 -3
  340. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-fetch.js +1 -1
  341. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-refresh.js +1 -1
  342. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-setTimeout.js +2 -2
  343. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-window-open.js +2 -2
  344. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.prevent-xhr.js +3 -3
  345. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-attr.js +2 -2
  346. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-cookie.js +19 -9
  347. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.remove-node-text.js +3 -3
  348. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-constant.js +3 -3
  349. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-cookie.js +12 -3
  350. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.set-local-storage-item.js +2 -2
  351. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-argument.js +2 -2
  352. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-node-text.js +3 -3
  353. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-replace-outbound-text.js +2 -2
  354. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-constant.js +2 -2
  355. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie-reload.js +10 -1
  356. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-cookie.js +13 -4
  357. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-set-local-storage-item.js +399 -0
  358. package/extensions/ublocklite/rulesets/scripting/scriptlet/ublock-filters.trusted-suppress-native-method.js +2 -2
  359. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-fetch-response.js +19 -2
  360. package/extensions/ublocklite/rulesets/scripting/scriptlet/ubol-tests.jsonl-edit-xhr-response.js +19 -2
  361. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-current-script.js +2 -2
  362. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-on-property-read.js +1 -1
  363. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.abort-on-property-write.js +1 -1
  364. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.remove-class.js +1 -1
  365. package/extensions/ublocklite/rulesets/scripting/scriptlet/ukr-0.set-constant.js +2 -2
  366. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-current-script.js +1 -1
  367. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.abort-on-property-read.js +2 -2
  368. package/extensions/ublocklite/rulesets/scripting/scriptlet/vie-1.set-constant.js +2 -2
  369. package/extensions/ublocklite/rulesets/scripting/specific/adguard-mobile.js +3 -3
  370. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-cookies.js +3 -3
  371. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-others.js +3 -3
  372. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-overlays.js +3 -3
  373. package/extensions/ublocklite/rulesets/scripting/specific/annoyances-social.js +3 -3
  374. package/extensions/ublocklite/rulesets/scripting/specific/chn-0.js +3 -3
  375. package/extensions/ublocklite/rulesets/scripting/specific/deu-0.js +3 -3
  376. package/extensions/ublocklite/rulesets/scripting/specific/easylist.js +3 -3
  377. package/extensions/ublocklite/rulesets/scripting/specific/fin-0.js +3 -3
  378. package/extensions/ublocklite/rulesets/scripting/specific/fra-0.js +3 -3
  379. package/extensions/ublocklite/rulesets/scripting/specific/grc-0.js +3 -3
  380. package/extensions/ublocklite/rulesets/scripting/specific/hun-0.js +3 -3
  381. package/extensions/ublocklite/rulesets/scripting/specific/idn-0.js +3 -3
  382. package/extensions/ublocklite/rulesets/scripting/specific/ind-0.js +3 -3
  383. package/extensions/ublocklite/rulesets/scripting/specific/isr-0.js +1 -1
  384. package/extensions/ublocklite/rulesets/scripting/specific/ita-0.js +3 -3
  385. package/extensions/ublocklite/rulesets/scripting/specific/jpn-1.js +3 -3
  386. package/extensions/ublocklite/rulesets/scripting/specific/kor-1.js +3 -3
  387. package/extensions/ublocklite/rulesets/scripting/specific/ltu-0.js +3 -3
  388. package/extensions/ublocklite/rulesets/scripting/specific/nld-0.js +3 -3
  389. package/extensions/ublocklite/rulesets/scripting/specific/nor-0.js +3 -3
  390. package/extensions/ublocklite/rulesets/scripting/specific/rou-1.js +3 -3
  391. package/extensions/ublocklite/rulesets/scripting/specific/rus-0.js +3 -3
  392. package/extensions/ublocklite/rulesets/scripting/specific/spa-0.js +3 -3
  393. package/extensions/ublocklite/rulesets/scripting/specific/spa-1.js +3 -3
  394. package/extensions/ublocklite/rulesets/scripting/specific/swe-1.js +3 -3
  395. package/extensions/ublocklite/rulesets/scripting/specific/tur-0.js +3 -3
  396. package/extensions/ublocklite/rulesets/scripting/specific/ublock-badware.js +3 -3
  397. package/extensions/ublocklite/rulesets/scripting/specific/ublock-filters.js +3 -3
  398. package/extensions/ublocklite/rulesets/scripting/specific/ukr-0.js +3 -3
  399. package/extensions/ublocklite/rulesets/scripting/specific/vie-1.js +3 -3
  400. package/extensions/ublocklite/rulesets/scriptlet-details.json +157 -153
  401. package/extensions/ublocklite/rulesets/strictblock/adguard-mobile.json +1 -34
  402. package/extensions/ublocklite/rulesets/strictblock/chn-0.json +198 -248
  403. package/extensions/ublocklite/rulesets/strictblock/dpollock-0.json +2 -0
  404. package/extensions/ublocklite/rulesets/strictblock/easylist.json +3 -2
  405. package/extensions/ublocklite/rulesets/strictblock/easyprivacy.json +37 -1
  406. package/extensions/ublocklite/rulesets/strictblock/fra-0.json +304 -62
  407. package/extensions/ublocklite/rulesets/strictblock/grc-0.json +1 -7
  408. package/extensions/ublocklite/rulesets/strictblock/idn-0.json +1 -0
  409. package/extensions/ublocklite/rulesets/strictblock/ita-0.json +1 -0
  410. package/extensions/ublocklite/rulesets/strictblock/jpn-1.json +159 -155
  411. package/extensions/ublocklite/rulesets/strictblock/kor-1.json +1 -0
  412. package/extensions/ublocklite/rulesets/strictblock/nor-0.json +1 -1
  413. package/extensions/ublocklite/rulesets/strictblock/pgl.json +10 -7
  414. package/extensions/ublocklite/rulesets/strictblock/spa-1.json +0 -11
  415. package/extensions/ublocklite/rulesets/strictblock/stevenblack-hosts.json +7223 -999
  416. package/extensions/ublocklite/rulesets/strictblock/tur-0.json +0 -13
  417. package/extensions/ublocklite/rulesets/strictblock/ublock-badware.json +569 -570
  418. package/extensions/ublocklite/rulesets/strictblock/ublock-filters.json +1 -1
  419. package/extensions/ublocklite/rulesets/strictblock/ukr-0.json +0 -75
  420. package/extensions/ublocklite/rulesets/strictblock/urlhaus-full.json +339 -766
  421. package/extensions/ublocklite/rulesets/strictblock/vie-1.json +3 -2
  422. package/extensions/ublocklite/rulesets/urlskip/ublock-filters.json +13 -0
  423. package/extensions/ublocklite/ublock.zip +0 -0
  424. package/package.json +24 -19
  425. package/src/routes/management/tests/management.spec.ts +25 -0
  426. package/src/server.ts +4 -5
  427. package/src/shared/utils/enjoi-resolver.ts +565 -0
  428. package/static/docs/swagger.json +9 -9
  429. package/static/docs/swagger.min.json +9 -9
  430. package/static/function/client.js +86 -39
  431. package/static/function/index.html +86 -39
  432. /package/extensions/ublocklite/lib/codemirror/{LICENSE → codemirror-quickstart.LICENSE} +0 -0
@@ -67,6 +67,20 @@ describe('Management APIs', function () {
67
67
  expect(r.status).to.equal(204);
68
68
  expect(r.headers.get('access-control-allow-origin')).to.equal('https://abc.example.com');
69
69
  });
70
+ it('allows glob-matched OPTIONS requests with OR patterns across two domains', async () => {
71
+ const config = new Config();
72
+ config.enableCORS(true);
73
+ config.setCORSOrigin('(https://(abc|xyz).example.com|https://deploy-preview-*.netlify.app)');
74
+ await start({ config });
75
+ const r = await fetch('http://localhost:3000/config?token=6R0W53R135510', {
76
+ method: 'OPTIONS',
77
+ headers: {
78
+ Origin: 'https://deploy-preview-123--funky-monkey-12345.netlify.app',
79
+ },
80
+ });
81
+ expect(r.status).to.equal(204);
82
+ expect(r.headers.get('access-control-allow-origin')).to.equal('https://deploy-preview-123--funky-monkey-12345.netlify.app');
83
+ });
70
84
  it('should 404 when the origin does not match the CORS origin pattern', async () => {
71
85
  const config = new Config();
72
86
  config.enableCORS(true);
package/build/server.js CHANGED
@@ -1,8 +1,7 @@
1
1
  import * as http from 'http';
2
2
  import { BadRequest, Logger as BlessLogger, NotFound, Timeout, TooManyRequests, Unauthorized, contentTypes, convertPathToURL, isMatch, queryParamsToObject, readBody, shimLegacyRequests, writeResponse, } from '@browserless.io/browserless';
3
3
  import { EventEmitter } from 'events';
4
- // @ts-ignore
5
- import Enjoi from 'enjoi';
4
+ import EnjoiResolver from './shared/utils/enjoi-resolver.js';
6
5
  export class HTTPServer extends EventEmitter {
7
6
  config;
8
7
  metrics;
@@ -136,7 +135,7 @@ export class HTTPServer extends EventEmitter {
136
135
  if (route.querySchema) {
137
136
  this.logger.trace(`Validating route query-params with QUERY schema`);
138
137
  try {
139
- const schema = Enjoi.schema(route.querySchema);
138
+ const schema = EnjoiResolver.schema(route.querySchema);
140
139
  const valid = schema.validate(req.queryParams, {
141
140
  abortEarly: false,
142
141
  });
@@ -158,7 +157,7 @@ export class HTTPServer extends EventEmitter {
158
157
  if (route.bodySchema) {
159
158
  this.logger.trace(`Validating route payload with BODY schema`);
160
159
  try {
161
- const schema = Enjoi.schema(route.bodySchema);
160
+ const schema = EnjoiResolver.schema(route.bodySchema);
162
161
  const valid = schema.validate(body, { abortEarly: false });
163
162
  if (valid.error) {
164
163
  const errorDetails = valid.error.details
@@ -204,7 +203,7 @@ export class HTTPServer extends EventEmitter {
204
203
  if (route.querySchema) {
205
204
  this.logger.trace(`Validating route query-params with QUERY schema`);
206
205
  try {
207
- const schema = Enjoi.schema(route.querySchema);
206
+ const schema = EnjoiResolver.schema(route.querySchema);
208
207
  const valid = schema.validate(req.queryParams, {
209
208
  abortEarly: false,
210
209
  });
@@ -0,0 +1,77 @@
1
+ interface SchemaResolverOptions {
2
+ subSchemas?: Record<string, any>;
3
+ refineType?: (type: string, format?: string) => string;
4
+ refineSchema?: (joiSchema: any, jsonSchema: any) => any;
5
+ strictMode?: boolean;
6
+ useDefaults?: boolean;
7
+ extensions?: any[];
8
+ }
9
+ interface JSONSchema {
10
+ type?: string | string[];
11
+ $ref?: string;
12
+ properties?: Record<string, any>;
13
+ format?: string;
14
+ enum?: any[];
15
+ anyOf?: any[];
16
+ allOf?: any[];
17
+ oneOf?: any[];
18
+ not?: any;
19
+ default?: any;
20
+ required?: string[];
21
+ additionalProperties?: boolean | any;
22
+ minProperties?: number;
23
+ maxProperties?: number;
24
+ items?: any;
25
+ ordered?: any;
26
+ additionalItems?: boolean;
27
+ minItems?: number;
28
+ maxItems?: number;
29
+ uniqueItems?: boolean;
30
+ minimum?: number;
31
+ maximum?: number;
32
+ exclusiveMinimum?: number;
33
+ exclusiveMaximum?: number;
34
+ multipleOf?: number;
35
+ pattern?: string;
36
+ minLength?: number;
37
+ maxLength?: number;
38
+ [key: string]: any;
39
+ }
40
+ declare class SchemaResolver {
41
+ private root;
42
+ private subSchemas?;
43
+ private refineType?;
44
+ private refineSchema?;
45
+ private strictMode?;
46
+ private walkedSchemas;
47
+ private useDefaults?;
48
+ private joi;
49
+ constructor(root: any, { subSchemas, refineType, refineSchema, strictMode, useDefaults, extensions, }?: SchemaResolverOptions);
50
+ resolve(schema?: any, ancestors?: string[]): any;
51
+ resolveReference(value: string): any;
52
+ resolveType(schema: JSONSchema, ancestors: string[]): any;
53
+ resolveOneOf(schema: JSONSchema, ancestors: string[]): any;
54
+ resolveAnyOf(schema: JSONSchema, ancestors: string[]): any;
55
+ resolveAllOf(schema: JSONSchema, ancestors: string[]): any;
56
+ resolveNot(schema: JSONSchema, ancestors: string[]): any;
57
+ resolveLink(schema: any): any;
58
+ object(schema: JSONSchema, ancestors: string[]): any;
59
+ array(schema: JSONSchema, ancestors: string[]): any;
60
+ number(schema: JSONSchema): any;
61
+ string(schema: JSONSchema): any;
62
+ regularString(schema: JSONSchema, joischema: any): any;
63
+ binary(schema: JSONSchema): any;
64
+ }
65
+ /**
66
+ * Enjoi-compatible API
67
+ * Creates a Joi schema from a JSON Schema
68
+ * @param jsonSchema - The JSON schema to convert
69
+ * @param options - Optional configuration for schema resolution
70
+ * @returns Joi schema with validate method
71
+ */
72
+ declare function schema(jsonSchema: any, options?: SchemaResolverOptions): any;
73
+ export { SchemaResolver, schema };
74
+ declare const _default: {
75
+ schema: typeof schema;
76
+ };
77
+ export default _default;
@@ -0,0 +1,399 @@
1
+ /* global WeakMap */
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
3
+ /* eslint-disable @typescript-eslint/no-unused-vars */
4
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
5
+ import * as Bourne from '@hapi/bourne';
6
+ import * as Hoek from '@hapi/hoek';
7
+ import Joi from 'joi';
8
+ // Modern replacements for deprecated Node.js util functions
9
+ const isArray = Array.isArray;
10
+ const isObject = (value) => value && typeof value === 'object' && value.constructor === Object;
11
+ const isNumber = (value) => typeof value === 'number';
12
+ const isUndefined = (value) => value === undefined;
13
+ function randomString(length) {
14
+ return Math.round(Math.pow(36, length + 1) - Math.random() * Math.pow(36, length))
15
+ .toString(36)
16
+ .slice(1);
17
+ }
18
+ class SchemaResolver {
19
+ root;
20
+ subSchemas;
21
+ refineType;
22
+ refineSchema;
23
+ strictMode;
24
+ walkedSchemas;
25
+ useDefaults;
26
+ joi;
27
+ constructor(root, { subSchemas, refineType, refineSchema, strictMode, useDefaults, extensions = [], } = {}) {
28
+ this.root = root;
29
+ this.subSchemas = subSchemas;
30
+ this.refineType = refineType;
31
+ this.refineSchema = refineSchema;
32
+ this.strictMode = strictMode;
33
+ this.walkedSchemas = new WeakMap(); // map of schemas iterated thus far to the generated id they were given
34
+ this.useDefaults = useDefaults;
35
+ this.joi = Joi.extend({
36
+ type: 'object',
37
+ base: Joi.object(),
38
+ coerce: {
39
+ from: 'string',
40
+ // @ts-ignore - Type compatibility issue with Joi coerce method
41
+ method(value) {
42
+ if (typeof value !== 'string' ||
43
+ (value[0] !== '{' && !/^\s*\{/.test(value))) {
44
+ return;
45
+ }
46
+ try {
47
+ return { value: Bourne.parse(value) };
48
+ }
49
+ catch (_) {
50
+ return;
51
+ } // eslint-disable-line no-empty
52
+ },
53
+ },
54
+ }, {
55
+ type: 'array',
56
+ base: Joi.array(),
57
+ coerce: {
58
+ from: 'string',
59
+ method(value) {
60
+ if (typeof value !== 'string' ||
61
+ (value[0] !== '[' && !/^\s*\[/.test(value))) {
62
+ return;
63
+ }
64
+ try {
65
+ return { value: Bourne.parse(value) };
66
+ }
67
+ catch (_) {
68
+ return;
69
+ } // eslint-disable-line no-empty
70
+ },
71
+ },
72
+ }, ...extensions);
73
+ }
74
+ resolve(schema = this.root, ancestors = []) {
75
+ let resolvedSchema;
76
+ let generatedId = this.walkedSchemas.get(schema);
77
+ if (generatedId && ancestors.lastIndexOf(generatedId) > -1) {
78
+ // resolve cyclic schema by using joi reference via generated unique ids
79
+ return this.resolveLink(schema);
80
+ }
81
+ else if (typeof schema === 'object') {
82
+ generatedId = randomString(10);
83
+ this.walkedSchemas.set(schema, generatedId);
84
+ }
85
+ if (typeof schema === 'string') {
86
+ // If schema is itself a string, interpret it as a type
87
+ resolvedSchema = this.resolveType({ type: schema }, ancestors);
88
+ }
89
+ else if (schema.$ref) {
90
+ resolvedSchema = this.resolve(this.resolveReference(schema.$ref), ancestors.concat(generatedId || ''));
91
+ }
92
+ else {
93
+ const partialSchemas = [];
94
+ if (schema.type) {
95
+ partialSchemas.push(this.resolveType(schema, ancestors.concat(generatedId || '')));
96
+ }
97
+ else if (schema.properties) {
98
+ // if no type is specified, just properties
99
+ partialSchemas.push(this.object(schema, ancestors.concat(generatedId || '')));
100
+ }
101
+ else if (schema.format) {
102
+ // if no type is specified, just format
103
+ partialSchemas.push(this.string(schema));
104
+ }
105
+ else if (schema.enum) {
106
+ // If no type is specified, just enum
107
+ partialSchemas.push(this.joi.any().valid(...schema.enum));
108
+ }
109
+ if (schema.anyOf) {
110
+ partialSchemas.push(this.resolveAnyOf(schema, ancestors.concat(generatedId || '')));
111
+ }
112
+ if (schema.allOf) {
113
+ partialSchemas.push(this.resolveAllOf(schema, ancestors.concat(generatedId || '')));
114
+ }
115
+ if (schema.oneOf) {
116
+ partialSchemas.push(this.resolveOneOf(schema, ancestors.concat(generatedId || '')));
117
+ }
118
+ if (schema.not) {
119
+ partialSchemas.push(this.resolveNot(schema, ancestors.concat(generatedId || '')));
120
+ }
121
+ if (partialSchemas.length === 0) {
122
+ //Fall through to whatever.
123
+ //eslint-disable-next-line no-console
124
+ console.warn("WARNING: schema missing a 'type' or '$ref' or 'enum': \n%s", JSON.stringify(schema, null, 2));
125
+ //TODO: Handle better
126
+ partialSchemas.push(this.joi.any());
127
+ }
128
+ resolvedSchema =
129
+ partialSchemas.length === 1
130
+ ? partialSchemas[0]
131
+ : this.joi.alternatives(partialSchemas).match('all');
132
+ }
133
+ if (generatedId) {
134
+ // we have finished resolving the schema, now attach the id generated earlier
135
+ resolvedSchema = resolvedSchema.id(this.walkedSchemas.get(schema));
136
+ }
137
+ if (this.refineSchema) {
138
+ resolvedSchema = this.refineSchema(resolvedSchema, schema);
139
+ }
140
+ if (this.useDefaults && schema.default !== undefined) {
141
+ resolvedSchema = resolvedSchema.default(schema.default);
142
+ }
143
+ return resolvedSchema;
144
+ }
145
+ resolveReference(value) {
146
+ let refschema;
147
+ const id = value.substr(0, value.indexOf('#') + 1);
148
+ const path = value.substr(value.indexOf('#') + 1);
149
+ if (id && this.subSchemas) {
150
+ refschema =
151
+ this.subSchemas[id] || this.subSchemas[id.substr(0, id.length - 1)];
152
+ }
153
+ if (!refschema) {
154
+ refschema = this.root;
155
+ }
156
+ Hoek.assert(refschema, 'Can not find schema reference: ' + value + '.');
157
+ let fragment = refschema;
158
+ const paths = path.split('/');
159
+ for (let i = 1; i < paths.length && fragment; i++) {
160
+ fragment = typeof fragment === 'object' && fragment[paths[i]];
161
+ }
162
+ return fragment;
163
+ }
164
+ resolveType(schema, ancestors) {
165
+ let joischema;
166
+ const typeDefinitionMap = {
167
+ description: 'description',
168
+ title: 'label',
169
+ default: 'default',
170
+ };
171
+ const joitype = (type, format) => {
172
+ let joischema;
173
+ if (this.refineType) {
174
+ type = this.refineType(type, format);
175
+ }
176
+ switch (type) {
177
+ case 'array':
178
+ joischema = this.array(schema, ancestors);
179
+ break;
180
+ case 'boolean':
181
+ joischema = this.joi.boolean();
182
+ break;
183
+ case 'integer':
184
+ case 'number':
185
+ joischema = this.number(schema);
186
+ break;
187
+ case 'object':
188
+ joischema = this.object(schema, ancestors);
189
+ break;
190
+ case 'string':
191
+ joischema = this.string(schema);
192
+ break;
193
+ case 'null':
194
+ joischema = this.joi.any().valid(null);
195
+ break;
196
+ default:
197
+ joischema = this.joi.types()[type];
198
+ }
199
+ Hoek.assert(joischema, 'Could not resolve type: ' + schema.type + '.');
200
+ return this.strictMode === true ? joischema.strict(true) : joischema;
201
+ };
202
+ if (isArray(schema.type)) {
203
+ const schemas = [];
204
+ for (let i = 0; i < schema.type.length; i++) {
205
+ schemas.push(joitype(schema.type[i], schema.format));
206
+ }
207
+ joischema = this.joi.alternatives(schemas);
208
+ }
209
+ else {
210
+ joischema = joitype(schema.type, schema.format);
211
+ }
212
+ Object.keys(typeDefinitionMap).forEach((key) => {
213
+ if (schema[key] !== undefined) {
214
+ joischema = joischema[typeDefinitionMap[key]](schema[key]);
215
+ }
216
+ });
217
+ return joischema;
218
+ }
219
+ resolveOneOf(schema, ancestors) {
220
+ Hoek.assert(isArray(schema.oneOf), 'Expected oneOf to be an array.');
221
+ return this.joi
222
+ .alternatives(schema.oneOf.map((subSchema) => this.resolve(subSchema, ancestors)))
223
+ .match('one');
224
+ }
225
+ resolveAnyOf(schema, ancestors) {
226
+ Hoek.assert(isArray(schema.anyOf), 'Expected anyOf to be an array.');
227
+ return this.joi
228
+ .alternatives(schema.anyOf.map((subSchema) => this.resolve(subSchema, ancestors)))
229
+ .match('any');
230
+ }
231
+ resolveAllOf(schema, ancestors) {
232
+ Hoek.assert(isArray(schema.allOf), 'Expected allOf to be an array.');
233
+ return this.joi
234
+ .alternatives(schema.allOf.map((subSchema) => this.resolve(subSchema, ancestors)))
235
+ .match('all');
236
+ }
237
+ resolveNot(schema, ancestors) {
238
+ Hoek.assert(isObject(schema.not), 'Expected Not to be an object.');
239
+ return this.joi.alternatives().conditional('.', {
240
+ not: this.resolve(schema.not, ancestors),
241
+ then: this.joi.any(),
242
+ otherwise: this.joi.any().forbidden(),
243
+ });
244
+ }
245
+ resolveLink(schema) {
246
+ return this.joi.link().ref(`#${this.walkedSchemas.get(schema)}`);
247
+ }
248
+ object(schema, ancestors) {
249
+ const resolveproperties = () => {
250
+ const schemas = {};
251
+ if (!isObject(schema.properties)) {
252
+ return;
253
+ }
254
+ Object.keys(schema.properties).forEach((key) => {
255
+ const property = schema.properties[key];
256
+ let joischema = this.resolve(property, ancestors);
257
+ if (schema.required && schema.required.indexOf(key) !== -1) {
258
+ joischema = joischema.required();
259
+ }
260
+ schemas[key] = joischema;
261
+ });
262
+ return schemas;
263
+ };
264
+ let joischema = this.joi.object(resolveproperties());
265
+ if (isObject(schema.additionalProperties)) {
266
+ joischema = joischema.pattern(/^/, this.resolve(schema.additionalProperties, ancestors));
267
+ }
268
+ else {
269
+ joischema = joischema.unknown(schema.additionalProperties !== false);
270
+ }
271
+ isNumber(schema.minProperties) &&
272
+ (joischema = joischema.min(schema.minProperties));
273
+ isNumber(schema.maxProperties) &&
274
+ (joischema = joischema.max(schema.maxProperties));
275
+ return joischema;
276
+ }
277
+ array(schema, ancestors) {
278
+ let joischema = this.joi.array();
279
+ let items;
280
+ const resolveAsArray = (value) => {
281
+ if (isArray(value)) {
282
+ // found an array, thus its _per type_
283
+ return value.map((v) => this.resolve(v, ancestors));
284
+ }
285
+ // it's a single entity, so just resolve it normally
286
+ return [this.resolve(value, ancestors)];
287
+ };
288
+ if (schema.items) {
289
+ items = resolveAsArray(schema.items);
290
+ joischema = joischema.items(...items);
291
+ }
292
+ else if (schema.ordered) {
293
+ items = resolveAsArray(schema.ordered);
294
+ joischema = joischema.ordered(...items);
295
+ }
296
+ if (items && schema.additionalItems === false) {
297
+ joischema = joischema.max(items.length);
298
+ }
299
+ isNumber(schema.minItems) && (joischema = joischema.min(schema.minItems));
300
+ isNumber(schema.maxItems) && (joischema = joischema.max(schema.maxItems));
301
+ if (schema.uniqueItems) {
302
+ joischema = joischema.unique();
303
+ }
304
+ return joischema;
305
+ }
306
+ number(schema) {
307
+ let joischema = this.joi.number();
308
+ if (schema.type === 'integer') {
309
+ joischema = joischema.integer();
310
+ }
311
+ isNumber(schema.minimum) && (joischema = joischema.min(schema.minimum));
312
+ isNumber(schema.maximum) && (joischema = joischema.max(schema.maximum));
313
+ isNumber(schema.exclusiveMinimum) &&
314
+ (joischema = joischema.greater(schema.exclusiveMinimum));
315
+ isNumber(schema.exclusiveMaximum) &&
316
+ (joischema = joischema.less(schema.exclusiveMaximum));
317
+ isNumber(schema.multipleOf) &&
318
+ schema.multipleOf !== 0 &&
319
+ (joischema = joischema.multiple(schema.multipleOf));
320
+ return joischema;
321
+ }
322
+ string(schema) {
323
+ let joischema = this.joi.string();
324
+ const dateRegex = '(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])';
325
+ const timeRegex = '([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(.[0-9]+)?(Z|(\\+|-)([01][0-9]|2[0-3]):([0-5][0-9]))';
326
+ const dateTimeRegex = dateRegex + 'T' + timeRegex;
327
+ if (schema.enum) {
328
+ return this.joi.string().valid(...schema.enum);
329
+ }
330
+ switch (schema.format) {
331
+ case 'date':
332
+ return joischema.regex(new RegExp('^' + dateRegex + '$', 'i'), 'JsonSchema date format');
333
+ case 'time':
334
+ return joischema.regex(new RegExp('^' + timeRegex + '$', 'i'), 'JsonSchema time format');
335
+ case 'date-time':
336
+ return joischema.regex(new RegExp('^' + dateTimeRegex + '$', 'i'), 'JsonSchema date-time format');
337
+ case 'binary':
338
+ joischema = this.binary(schema);
339
+ break;
340
+ case 'email':
341
+ return joischema.email();
342
+ case 'hostname':
343
+ return joischema.hostname();
344
+ case 'ipv4':
345
+ return joischema.ip({
346
+ version: ['ipv4'],
347
+ });
348
+ case 'ipv6':
349
+ return joischema.ip({
350
+ version: ['ipv6'],
351
+ });
352
+ case 'uri':
353
+ return joischema.uri();
354
+ case 'byte':
355
+ joischema = joischema.base64();
356
+ break;
357
+ case 'uuid':
358
+ return joischema.guid({ version: ['uuidv4'] });
359
+ case 'guid':
360
+ return joischema.guid();
361
+ }
362
+ return this.regularString(schema, joischema);
363
+ }
364
+ regularString(schema, joischema) {
365
+ schema.pattern && (joischema = joischema.regex(new RegExp(schema.pattern)));
366
+ if (isUndefined(schema.minLength)) {
367
+ schema.minLength = 0;
368
+ if (!schema.pattern && !schema.format) {
369
+ joischema = joischema.allow('');
370
+ }
371
+ }
372
+ else if (schema.minLength === 0) {
373
+ joischema = joischema.allow('');
374
+ }
375
+ isNumber(schema.minLength) && (joischema = joischema.min(schema.minLength));
376
+ isNumber(schema.maxLength) && (joischema = joischema.max(schema.maxLength));
377
+ return joischema;
378
+ }
379
+ binary(schema) {
380
+ let joischema = this.joi.binary();
381
+ isNumber(schema.minLength) && (joischema = joischema.min(schema.minLength));
382
+ isNumber(schema.maxLength) && (joischema = joischema.max(schema.maxLength));
383
+ return joischema;
384
+ }
385
+ }
386
+ /**
387
+ * Enjoi-compatible API
388
+ * Creates a Joi schema from a JSON Schema
389
+ * @param jsonSchema - The JSON schema to convert
390
+ * @param options - Optional configuration for schema resolution
391
+ * @returns Joi schema with validate method
392
+ */
393
+ function schema(jsonSchema, options) {
394
+ const resolver = new SchemaResolver(jsonSchema, options);
395
+ return resolver.resolve();
396
+ }
397
+ // Export both the class and the compatible API
398
+ export { SchemaResolver, schema };
399
+ export default { schema };
@@ -6,7 +6,7 @@ ARG DEBIAN_FRONTEND=noninteractive
6
6
  ARG TZ=America/Los_Angeles
7
7
  ARG BLESS_USER_ID=999
8
8
  ARG APP_DIR=/usr/src/app
9
- ARG NODE_VERSION=v22.11.0
9
+ ARG NODE_VERSION=v24.2.0
10
10
 
11
11
  ENV NODE_VERSION=$NODE_VERSION
12
12
  ENV NVM_DIR /usr/src/.nvm
@@ -54,7 +54,7 @@ RUN apt-get update && apt-get install -y \
54
54
  wget \
55
55
  xvfb
56
56
 
57
- RUN curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash &&\
57
+ RUN curl -sL https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash &&\
58
58
  . $NVM_DIR/nvm.sh &&\
59
59
  nvm install $NODE_VERSION
60
60
 
@@ -7,8 +7,10 @@ The following assumes a linux environment.
7
7
  1. Open Bash console
8
8
  2. `git clone https://github.com/gorhill/uBlock.git`
9
9
  3. `cd uBlock`
10
- 4. `make mv3-[platform]`, where `[platform]` is either `chromium`, `edge`, `firefox`, or `safari`
11
- 5. This will fully build uBO Lite, and during the process filter lists will be downloaded from their respective remote servers
10
+ 4. `git submodule init`
11
+ 5. `git submodule update`
12
+ 6. `make mv3-[platform]`, where `[platform]` is either `chromium`, `edge`, `firefox`, or `safari`
13
+ 7. This will fully build uBO Lite, and during the process filter lists will be downloaded from their respective remote servers
12
14
 
13
15
  Upon completion of the script, the resulting extension package will become present in:
14
16
 
@@ -20,7 +20,7 @@
20
20
  "description": "appears as tab name in dashboard"
21
21
  },
22
22
  "developPageName": {
23
- "message": "Develop",
23
+ "message": "تطوير",
24
24
  "description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
25
25
  },
26
26
  "aboutPageName": {
@@ -240,11 +240,11 @@
240
240
  "description": "Short description for a checkbox in the options page"
241
241
  },
242
242
  "developerModeLabel": {
243
- "message": "Developer mode",
243
+ "message": "وضع المطور",
244
244
  "description": "Label for a checkbox in the options page"
245
245
  },
246
246
  "developerModeLegend": {
247
- "message": "Enables access to features suitable for technical users.",
247
+ "message": "يمكن الوصول إلى الميزات المناسبة للمستخدمين التقنيين.",
248
248
  "description": "Short description for a checkbox in the options page"
249
249
  },
250
250
  "findListsPlaceholder": {
@@ -288,35 +288,59 @@
288
288
  "description": "A button to navigate to the blocked page"
289
289
  },
290
290
  "zapperTipEnter": {
291
- "message": "Enter element zapper mode",
291
+ "message": "دخول وضع تحديد العناصر السريع",
292
292
  "description": "Tooltip for the button used to enter zapper mode"
293
293
  },
294
294
  "zapperTipQuit": {
295
- "message": "Exit element zapper mode",
295
+ "message": "الخروج من وضع تحديد العناصر السريع",
296
296
  "description": "Tooltip for the button used to exit zapper mode"
297
297
  },
298
+ "developDropdownLabel": {
299
+ "message": "View:",
300
+ "description": "A label of a dropdown list"
301
+ },
302
+ "developOptionFilteringModeDetails": {
303
+ "message": "Filtering mode details",
304
+ "description": "An option in a dropdown list"
305
+ },
306
+ "developOptionCustomDnrRules": {
307
+ "message": "قواعد DNR مخصصة",
308
+ "description": "An option in a dropdown list"
309
+ },
310
+ "developOptionDnrRulesOf": {
311
+ "message": "قواعد DNR لـ …",
312
+ "description": "A section header in a dropdown list"
313
+ },
314
+ "developOptionDynamicRuleset": {
315
+ "message": "مجموعة قواعد متغيرة",
316
+ "description": "An option in a dropdown list"
317
+ },
318
+ "developOptionSessionRuleset": {
319
+ "message": "مجموعة قواعد جَلسة",
320
+ "description": "An option in a dropdown list"
321
+ },
298
322
  "saveButton": {
299
323
  "message": "حفظ",
300
324
  "description": "Text for buttons used to save changes"
301
325
  },
302
326
  "revertButton": {
303
- "message": "Revert",
327
+ "message": "إرجاع",
304
328
  "description": "Text for buttons used to revert changes"
305
329
  },
306
330
  "importAndAppendButton": {
307
- "message": "Import and append…",
331
+ "message": "استيراد واضافة…",
308
332
  "description": "Text for buttons used to import and append content"
309
333
  },
310
334
  "exportButton": {
311
335
  "message": "تصدير...",
312
336
  "description": "Text for buttons used to export content"
313
337
  },
314
- "dnrRulesSummary": {
315
- "message": "Enter your own DNR rules below. <b>Do not add content from untrusted sources.</b>",
338
+ "dnrRulesWarning": {
339
+ "message": "لا تضف محتوى من مصادر غير موثوقة",
316
340
  "description": "Short description of the DNR rules editor pane"
317
341
  },
318
342
  "dnrRulesCountInfo": {
319
- "message": "Number of registered rules: {count}",
343
+ "message": "عدد القواعد المسجلة: {count}",
320
344
  "description": "Short sentence to report the number of currently registered DNR rules"
321
345
  }
322
346
  }