From 6a14cdaf3f21d4e70ff074b1296374c8e05a733c Mon Sep 17 00:00:00 2001 From: Paul Haedrich Date: Thu, 24 Aug 2023 16:41:48 +0200 Subject: [PATCH] Added & updated ingredients --- .gitignore | 4 ++- icons/cdnjs.png | Bin 0 -> 1604 bytes icons/cloudflare-radar.png | Bin 0 -> 1421 bytes icons/cookielaw.png | Bin 0 -> 1051 bytes icons/google-cloud-storage.png | Bin 0 -> 1293 bytes icons/hoefler-co.png | Bin 0 -> 1939 bytes icons/http3.png | Bin 0 -> 1411 bytes icons/katex.png | Bin 0 -> 735 bytes icons/onetrust.png | Bin 0 -> 1068 bytes icons/osano.png | Bin 0 -> 897 bytes icons/paddle.png | Bin 0 -> 1100 bytes icons/phusion-passenger.png | Bin 0 -> 2217 bytes icons/prismic.png | Bin 0 -> 944 bytes icons/raster-cdn.png | Bin 0 -> 1499 bytes icons/tailwind.png | Bin 0 -> 848 bytes icons/ubuntu.png | Bin 0 -> 2552 bytes icons/vimeo.png | Bin 0 -> 1531 bytes icons/webpack.png | Bin 0 -> 1945 bytes ingredients/ads/google-ads.json | 7 +++- ingredients/analytics/matomo.json | 5 +++ ingredients/analytics/piwik-pro.json | 14 ++++++++ ingredients/cdn/aws-cloudfront.json | 19 +++++++++- ingredients/cdn/cdnjs.json | 24 +++++++++++++ ingredients/cdn/cloudflare-cdn.json | 6 ++-- ingredients/cdn/raster-cdn.json | 19 ++++++++++ ingredients/cms/prismic.json | 24 +++++++++++++ ingredients/compliance/cookielaw.json | 14 ++++++++ ingredients/compliance/onetrust.json | 24 +++++++++++++ ingredients/compliance/osano.json | 14 ++++++++ ingredients/fonts/fontawesome.json | 5 +++ ingredients/fonts/hoefler-co.json | 14 ++++++++ ingredients/frameworks/bootstrap.json | 6 ++-- ingredients/frameworks/tailwind.json | 24 +++++++++++++ ingredients/{cdn => hosts}/netlify.json | 8 ++++- ingredients/hosts/vercel.json | 8 +++++ ingredients/libraries/katex.json | 19 ++++++++++ ingredients/monitoring/newrelic copy.json | 14 ++++++++ ingredients/other/http3.json | 17 +++++++++ ingredients/other/webpack.json | 19 ++++++++++ ingredients/payments/paddle.json | 14 ++++++++ ingredients/payments/stripe.json | 5 +++ ingredients/security/hcaptcha.json | 5 +++ ingredients/servers/phusion-passenger.json | 13 +++++++ ingredients/servers/ubuntu.json | 13 +++++++ ingredients/{cdn => storage}/aws-s3.json | 8 ++--- ingredients/storage/google-cloud-storage.json | 34 ++++++++++++++++++ ingredients/widgets/intercom.json | 5 +++ ingredients/widgets/vimeo.json | 29 +++++++++++++++ 48 files changed, 420 insertions(+), 14 deletions(-) create mode 100644 icons/cdnjs.png create mode 100644 icons/cloudflare-radar.png create mode 100644 icons/cookielaw.png create mode 100644 icons/google-cloud-storage.png create mode 100644 icons/hoefler-co.png create mode 100644 icons/http3.png create mode 100644 icons/katex.png create mode 100644 icons/onetrust.png create mode 100644 icons/osano.png create mode 100644 icons/paddle.png create mode 100644 icons/phusion-passenger.png create mode 100644 icons/prismic.png create mode 100644 icons/raster-cdn.png create mode 100644 icons/tailwind.png create mode 100644 icons/ubuntu.png create mode 100644 icons/vimeo.png create mode 100644 icons/webpack.png create mode 100644 ingredients/analytics/piwik-pro.json create mode 100644 ingredients/cdn/cdnjs.json create mode 100644 ingredients/cdn/raster-cdn.json create mode 100644 ingredients/cms/prismic.json create mode 100644 ingredients/compliance/cookielaw.json create mode 100644 ingredients/compliance/onetrust.json create mode 100644 ingredients/compliance/osano.json create mode 100644 ingredients/fonts/hoefler-co.json create mode 100644 ingredients/frameworks/tailwind.json rename ingredients/{cdn => hosts}/netlify.json (64%) create mode 100644 ingredients/libraries/katex.json create mode 100644 ingredients/monitoring/newrelic copy.json create mode 100644 ingredients/other/http3.json create mode 100644 ingredients/other/webpack.json create mode 100644 ingredients/payments/paddle.json create mode 100644 ingredients/servers/phusion-passenger.json create mode 100644 ingredients/servers/ubuntu.json rename ingredients/{cdn => storage}/aws-s3.json (77%) create mode 100644 ingredients/storage/google-cloud-storage.json create mode 100644 ingredients/widgets/vimeo.json diff --git a/.gitignore b/.gitignore index b7501ba..4d79d52 100644 --- a/.gitignore +++ b/.gitignore @@ -163,4 +163,6 @@ cython_debug/ .space # Test files -test.py \ No newline at end of file +test.py +requester.py +requests/ \ No newline at end of file diff --git a/icons/cdnjs.png b/icons/cdnjs.png new file mode 100644 index 0000000000000000000000000000000000000000..60ac1a8d9053d6b210ce38cee4df841c23e711b9 GIT binary patch literal 1604 zcmZ{kc~H^`6vuynh-oHbc%>O^DpDGOrlONzh!|>ExT#%;SZZn>P)Ht#M?#j;VU%WS z7uuy(<}n%NS&f)xSb1$}n@3t&nv~Yk?99&W?CiXG?>q0k`ONp9H&4v)_tw`n*98DT z--kxos?k-yQb$`;69s}VznU=GRzCm`*Z_bq69B$xM#515;NbvZoCN?x8335X71am0 zYZlsUx;F**`7289Up=Xrz_>nsUa7LW+tP+y z5AFRX(p8a28Pp^U9GSb`DW|m(p8GH>!isk6GJF%*sQ|9S4kl%iq=*TK7_9t+Gd~7i zBF!|73*`l(ZVrQ+maQ*_Sck6t7 zmv7PRr|y(G0>p*&c5WDG9*(DI1$K-Dc^o6GM80^jefGdjn-6mPwpwAt9%lu&1SFes zIO?94Osuq!6^M;Rh6r(UnqJBM8Ve)}j{3w-6y8^8vj~ieqK#wtkw9?a9r?6zx$HS&zR1!e z!>$9C;E%;(O}l2@B!D2~Sqq7-Dgd+UFn+4eQ)cgnbKgBT2&s0Rl-pmOJWIWj+-Qy@ zEQ!*AL6$)o_zFKyHyLC1^r~sFfC5e?zz@p-p#Qc@cJ#^Xg0Cx z@dFaCS{@5Yac4H>w2v#+@Z09gbLCGv7VqNn*%?%eYSSRSeuN|sOmBw9guhRFNU85c zEB#D(4KwYXz%BTE-}Rvj!if<}O0z>Mu)hMlZA4H>KsCmrP%5sj3__ z$kv_2UZIM(7Q=QGzJia16E+Xrbqq5qQkQ;1JXApVQYK(^HYiUWU*S) z{369s{aVXw>=2=eXBGHJh;8Ro!CY3JC~8S1B8Yl3?A?B3a5k+_4t~=7HE)-RdT_vv zY>74A_hFG^J0WKD(__Q;=aG>VK@W8|Y&TSSguKyie6EB@Ur1#xwVhbmV52S`XkcV= zx@f{+5;||ef^p#d5GKNaHW%O)>Z$){>xMH=9IB}}N z>}n{Nitz`pFnonk&Wc2`eosl;@G3+>A2Pk?4bx2%i_tPO2Z%>KFOofr^g=g?$m*c zFBP4WM^F$zRugYE_E!4pd-*|BHG%_;Lov@v>d}rK5HMRJ{Qf9IPmw_0j_QVPcBBzL zwwz0Iy3qzVmB+aJw9CIIypZmill&s7x9NOSXHo6QYTD=ig>y;@x{)faQ<%t8%h9@w z;6UEx(z>}Vkv|aKgAUQxWlSG43I47c4t)1`4MJZk%j!Qj_C{p?lMW1gmS}) zVF}?H0q{6H!5-&gk9TCQClH-B5D6}8a5y3kH*g8z|1Tis04H*9(*Fb3)fF=u0P~Ln iH!>zXksBHl_g}`*`EL_g=*)nI0ermtDK|Y?qQ3y(Gr0x; literal 0 HcmV?d00001 diff --git a/icons/cloudflare-radar.png b/icons/cloudflare-radar.png new file mode 100644 index 0000000000000000000000000000000000000000..2943788131ab5161b729225d1c315c20afb47eee GIT binary patch literal 1421 zcmV;81#`&dxc@%eJ!-CWQ$~m?cP% zU=)FosI7Ut&)KFF{ZS9R@bdni z=llIUzsvi+@PGWvA>Act{mh~ulNqND!%=!GdPK2%LX}PX|8am!Jo+qX18_$cwEc># z@wIS`#NsV~JAl@d-fui_AJ7kI237%SU<5F>1Jr3nmiQHoaS`+e4Ml=PbcPjsw{Lr` z&Ian`0tj61jW%?iP)|y15s%33Zl^<(5)UJ_;lqp&- zDj2Q~0Ty)jak6&5q9mlk%=QPupB=|#-nLdR)|m1uQ=nY z=Cs!c1=+l^0%ZF2eH`fB4x~JmEf2t}OeQ^}!$7wHErGa)boJyybA`q$ z$9&)FLZHbN9WPZ4C*j(j@T^t?XMur%<}J$u@~Rs52FTL_hk?L#I9fMtK%jn!DkBwM5V#NIkf1v( z`n~T3TV>XUQ@QGI+JqS^Qw3aw_1&2RNcqMKKms70h#o-oW6=FxWpZwJwOIjZTRVY^ znM7n_PeiVVT5Avic&ev0HvtG-|I*DznSUz)BJC^M=e7Yn>%3~5zyZm>74sWH_1)X9 b{m;c;NTeLG92Hxv00000NkvXXu0mjf|3Qux literal 0 HcmV?d00001 diff --git a/icons/cookielaw.png b/icons/cookielaw.png new file mode 100644 index 0000000000000000000000000000000000000000..2297cff155a8bd9c6a10b74c67932ce4c5881738 GIT binary patch literal 1051 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7e6l0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#N0|R4xfKP}kP=RLtLXG@|K$0p*BX5Cf?gI6^1sZt^ zRdeUt)~>2sd3?o@8!M0A?A&<9t$CeV?gFp24ecAx*w?S|YTa=5?#s8IzVE&KXxGJu zcb>n`p0iIWYhKZUgWrGsiJG)Sr*P5Q6Sv=e{+=>@w|3zot%5~%wW|zEm#XH>FPwki z%a31?6L+{Yu6_Rg%gST7fW8Rn-TLMGuckF8LwdJ-{{E|Z%}J+*HP7CCS#|7I#Ki4u zkKg|A^+(>^{YIrrjZ2q0)UP%!TlV$Gue4cv%_^2#R;}=CU4Qz{iw|FZTzv5A{JmE< zpS=s8uw5y8-mgD@AHMo{{mI*#Pv7l0f8VNlW#NK@eOu4>Y(7`8;Gk*6a`oH=l}ip+ zFFRVZ>}c)sqq%eT=@&2g|Np~Iw=qQ`RG`H;iO5JVS%HHRGzqkAE|M|<^Q!}_f{T0#E_tcxt@IjkHQBX~D zR$^q^vJ(c4{0*xGT4eM)1XDDXxNO)HPkc+Z(mJ`qX_H84Q-boc1@%EmVvUcF3!iZA ztkC5CcmHyK=L|`v=iw9jMPk?+=CstP7D_xwt#^2)sK659%EWkR(cg(aE2F$zSFPLG zAi=ieuKm`98&~dJYI^tDy@gf|Ei6;szJK%T-OIPHnzdo( zlV!_JGe{YPHT*fF(>F)w#Z(678ECq1UqR8WhZ)Y&9)bEwA)JGOJzrhXX9VF%K@xN{)Z*dF5K<>8IN* zzCK+YTKctV`u119{xfiXOjX*cV)z;u8>%I)5hW>!C8<`)MX5lF!N|bKSl7Tp*T^Kq z(8$Wf#LCoI+rYrez<^P4rZ3ThO;12t&CZ79jiO)V}-%q_s8#{y!B TYF@}CpdJQKS3j3^P67iO8f0Zawtf9exU56V z7yITfjxArZ=6{>M=jXKDKQrfjU3lo%|NsBL{`kA>@TYg5|18-5*|y=`{DVLLfdv0; zKJ(@Mm%sD&ezdNB;?VRie)^ZD)$bctzHMCfwt4m2=n2nlsviTRAYsP0=Cz+2R=sUn z^)`CqbD)h@RgV`Q`uXnj-v#?WPTlcw^0xO=wgb_JsoOuKPJd}t{lu#3ku^x~(*^Z` zXMu5kh7RDrRcb7aR{y=dchqJ&VvY3H^TNs2H8D`Cq01C2~c>21sKj)C((PYpU zxx56ZXNISXV~EA+(#h%3hYSQ7in~e|Drr4BvUmHVd)4pvhBF8jzHfZAruuhz?qw0K zDc^&OzuWE1E^_Q(PjU2PXqu|HP{?V@!Jx*|?JGBMuQFK4D6sBW-ipI>nH*eHz9|?v znd~TAWHPTwE$WT1gLHFhN3SqT!w(i6?<5;ThACE+j?<5DGn~}C!M!qb4&#J*4}DLZ zc+$EiXP1eDtVD)}`gGw>FAi-1esBCOJNy zS33WARY65bO_A5)r6&qGmu>#c-SqZSS?c~}ZjwcJ7QKA-t&i(Ff7vvtst~>CM-!L2 zv0e)6IwYL?DdF|cR^g7o(B1{hrcK+hXP@9bd%OK_bPP>O?^s?j?_l5h`|oFs52uCx zNzMMTIPY3_?wq*IdRw;q`tj-WjkdiKZ)Lgc|5;h@e$x9+u1)dth1>0^z5f{96nm~D zES+O$;$x=Zto?7*6$!~yk$;aOuJyX2-29Zxv`X9>q};b`2WrrO+fb63n_66wm|K9Z a#}H^d#F8Bz_oo8&FnGH9xvXNus*VVde{ zPwc(Eki7g-AaDA{!99fzaQhZ3s>33^kmLN!;_AsV;)mgXyKr?a&WUX z*-`NlJW{XJ-jlXHhM%6VLQ|3a9rlcR<)WrIUk=f!ee`)WRuzQ!(H>Ozt0 z-5fn)z!=b{I9*mtZ%tiVeU`cR$?W2HbqeJr8pzz@vb_{TA5fsC2Van7LMUkObPQR0 z?CuVOGOd&)W7i{e;Y2?_tJWhzgV{X`5}S7Wf1`?%sMgz(Zn=yx4%tv=PB_S zv&d08^I=~jC^6uo2I!5-7<_w!+>lbT#f9MNafU8OQb!dz$L+3F2e1dh&1?Ovg3Ua4 zT=vjgOl_Yklv`k!an6zTCK=Uol9D!1hlA{zWkg?tiO?~Lt<1U=B@p8zCAZp z6v8RiV$uEDKFa8l_?wJ#T4eZEP%M9rLvDtA-xfP@vl{>GpeERxmZ{yCz%< z>12|P#-r!f&8Bk`8P@TNal-CWjq2`b^dp<@ob}+|=_IWK*%K{ZT=|u+XllG0B&&!@ zE2wPfLfC9oOrfVhR`>A2al~x;7FcEl>iQeYWXKK0m*ng! zb-Hxi)nM9LJ5(H_(6#hvzbicAe$6R-bs3tTpLVECr}*t@B%Iaa7Aex_49g@1VXhR5 z_LSqVF=v)sTG)ZGQFZNMO5JN@-eB?<=ZZw@ABl2W^d#ga4RxFwrd zbGDu*i?68RayyWSGbm{vnX=&M7t{-bd%{pvM+YZHFdtij_PDAgUgAB=Pm@#MU_#}8)3f4TYZo9_3+YO0vv{Olpa9YCuU@-q)^5ZMQQz-*@ MyW`v%e&pI|LxNXK)t1K{ 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 literal 0 HcmV?d00001 diff --git a/icons/prismic.png b/icons/prismic.png new file mode 100644 index 0000000000000000000000000000000000000000..ba6956901e932a63d2c59c4a0ebc7bcfbb4158d2 GIT binary patch literal 944 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4zl0AZa85pY67#JE_7#My5g&JNk zFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{XiajiKnkC`*RKnK0Yy~MuvYt z`6-?*jv*e$uU_4l9~>^i_Thf<;~h?+j|AL3LOVJgPB0o)zC1K-2X}~%&lVx)(~sPe zyh2uThyG+YI(Wg0$r0ZBiDy z{n=MLjrVKY`R*f1{;g5d?v#5+-V^2DvPGwQR?3<0i)M&++M2CRa=GYum}^0XM_{0* z>)qsyCw!K(EtXQVDLm+$KIh8vg_&p6*<3vRR7%db%AZrIa{feIj>st+vLT^ zOpU6J#O=zxu;s+Em9Yu&P6p3n>$9yM@0k-{^NfG~VnsirqCRcwe8MWXazA-DuH~CKJ*Fgfer`0UlIsVXsS+<` z8}G-O=v}uHD?0hTuPr7#Hf?cy>=Mn4#X&5u^>)rqdndSY^E%1T^V{#Tgl=5_XZEvq zo`z48qxW5?*?K#?!Snjw{`5D66C|1=zOR(u#IkYLYOcH=b@Hl8uJMnq>oCswFwbN z=H6J$cfPS)cD>e>w2=nh6KN(b2fRbSTf~KxK`Qi%3XKQy}W4fZiW2h zGPwZ%?Vq!qBTEhmi?6YIo$@=wQu^82nIW5%w=8(HEII6|)!9En$?Z^D|7P0nXgVJF>4=sof6Un0q+B+Eyn&^AG>g*T4Mco6ZC!cGVKsh?11Vl2ohYqEsNoU}Ruq ztZQJQYh)5)XkrCI#@Yr3Rt5$kH=pRCXvob^$xN%ntwFUVW)e_?2Hb{{%-q!ClEmBs aOg%$9 literal 0 HcmV?d00001 diff --git a/icons/raster-cdn.png b/icons/raster-cdn.png new file mode 100644 index 0000000000000000000000000000000000000000..5c3156ec3d55f8e788cd8c3443462923ff43199f GIT binary patch literal 1499 zcmZ{kcTm#@6vux+Dj-WJATlcwr4lqi5F4>TNHnMk8rdKS1Oy5OB;sLYh+z*ysK}Hg z3}qKcE(inxk)bG9Bq>8yfv_W^AVbpF-u14%>%DvL`^J6l``=5vj6E;6UwuCS0CF~H zBu=E?eN8EGQQcKrD*QTlqj4AjxO)@;qR9ZTEm}p-0>Eu30L)(p0C*Mv91PBDxMD6k z?DM*K9tjA)295JHL$r|&MmvX!RP3*`1-ElWjU>?qgOcP+smZH|>Ep2?7f^`}(#j6q znV;EP4jxeKv>1aw6>tc~4VUpP5LnFNILL0SE}mYFH<)aL)TS>Yy08>V>|uQRHMjal ztrjiQ5EbNzlx{sG1^R6WT@69bHru>iuOB+)qg7Lvv^U}!pu6OjH`l6phdp?dd8EW^)4&0BI$`D3yVC(0F}%oY>|yy!@U@P| zE6b$mZdNnqd$b!$ZWmK7JfFa-gV1sY@jSZub^l0wfn_y-XBj~dE~+5jj300 zbT-}LZH)b%H;VKI%WAgYt5_YNW?Q*$9=*DXA@uoC_zg$!X^33m&j^{X(QWC6&r&LN({F zfZC5(6vesb-boTnwhAK-tr8b}-xWH3e6HOBq9HR*;0np+qpWVCbkwJiInT6xXgN1U zNxW*upiJuK+#4z^v<7jidzYXepQ97m#!{%ihnRUnCmrpdF*TCYu;$iE=w_-j*BpG} za9(iE(oZ_`1V>&_k3G2$*AK7?zMPP)v4fL#W>q{!mCb&im3*U$LGcJqGo1?Z(p`A& zC$=yt*X&S$vJ48Or-re_n3mSz$RDY$>?xxe^X!T=N?WbV<;h0H9PkcAxFuNqgEw7t z&Jd65se)d#>>Q^Z$j7X75Ox;}e?+5}5bNa@Q^zNl%$guGbNRco{r48~C)O511U}|k z0}M;f8qA(xpm)eq*y2x=Uin z-^!QG95bo6){?Abn7ux&;h4)3u9KEuJe&*U#rY~sF`Hn~*x0HqOKeUr@7Fpe6O=eW zE3K>=5qLCH*tXZmDS^eNq;byH4j)B6J30_3w({9_CNioEFGZq;CgR*HTxfQx%^t~8 zeceO$6X9`A2_>kZXCx9w#@sRDQ_s{Jkp0#s*6U@efSf3{({Yn#-k57dx+DxdWgOzKq zQscxhYec2g;$sVa(hhzmKfl@p)2>YSfL?d!%rZikm`t`DW5upE%1JOUoCzR+J c6#QSt2o5#++r)v;`a;A2HYhBz3UNK=PlVgJ+5i9m literal 0 HcmV?d00001 diff --git a/icons/tailwind.png b/icons/tailwind.png new file mode 100644 index 0000000000000000000000000000000000000000..1166e1b77510a3eba1191807909b5b9fc7f25261 GIT binary patch literal 848 zcmZ{geN4=89LK*{YNs#_X;V=@<)L=n9o2QH-07k_S1y!Lu5c-g!$h}Ac}N)lcsAyY zB{BanT}^e@bJ?Qxm&-U7TpZ9r@=Z&3Kg=sx0VL z4>Q4VEa7aJ6m~I9HulRnxzbJtm%@-YP~U(v-r-%f=y(&JWVjn2>CiV&Tnzn-VSEj0 z8znzzZWxnshC9)OqbpH(IZ{@j&T(SyWsUD~Vl9fRMtkdVejD95%wm@7og^QAkk4b} zYzw`<9NzuRD9h2-DkLj~-zLb_4tfBQXWdMs1)Xc5hY@+%!we##v7&tqIJO!k)S~VQ zQZvYkieZ!$RS&RtKG88%NLPo`X`d9n-zmE{hReY@yM;>L*c&2L3i}=hml>4gQJj&l z8w^FrL$!f*x&#-yZNSsn+0#wGXWo`o$7ZVi;zvKo%%>QJnVKEe`ZZS}w^}GKib4-f zp{EwaO6(4g3i3A8nnS2%1u1>5H{;s(2@Kb>a$Xm?X>xN)v+iH<7jL-`8QB11ytMVc zE1qhoq{6h+MUML5llI{ocX(?v8vTk647uHP^|*BH<>hBi1;_TU-Fd_~*J$K`^S~NM z2Z=y1JxIN2eqmVD^q4hX+A`@1S(u$^adeeep4hb^(?vCVsjqdGBURJ-3g*ZM=25W) zwkMBm)FV@8UcNWpf2lY?DiJRi3Z+8f3)S{pe*tL+lk|H|{2!>8-Q~>#K7SGn`n2RD chQzc(|1v8@ze7lCO%u<62!&c+6qbi!{N4 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%0AUxR8ab!GRhDN+YPo`5H4vgYh7g z0~x;jn#jYZ$07E@TD}`i@rDI7l!I%`lX~YF${5 z0yV*7Q_|p05CK&9{D$E+9UDM0jKk_6n}*Gx%E*HV4$G_3R}J6}njvXsoMdu-M>!fo z0JAw8#4Wo1Q5(ZzD4L{cYO<3SyB(;^Uq3K9927;rM{m-NPq2&7YYR{r_B}D#Nn7@Brux^IgQku>B|wGA1;$*p22e2+ z-9BO`sghn3P_orw05(p6(Zx+Ds5H#2Mf5f+G=OnoLe#9MC-Y)Ridxska+&xL;Z(yO zFM8=Y)@2}gYLo-vQy_d-r~Z-A;;bnVnLW3|nw(SvG&tJZg*mYDkp zA7<~-G_OvF+H4F(QVdN}HgSs)Ko+3H<2v;e#ati3LG=hni}7IdO~lLwIcQqmiGa&S z-)2N-8)s;TgCs{utA8^BAcCjG3VP5kvt`3CL(j~kR??C2ctil>p|_3f_9RVBP?Tn} zA`GbU>9xq<*ceHX6C~AbBHo4(phT~|#Ox$JPEs$3(FOG*Kx5&v_pZdGw~z@3X(Jtd znANL62UNz!A;M14tqA5`s}n%jqI#s$fYa3Y;HWj{u~DEl@F!W!u8<+1#V}K==fMQ3 zaxG_{J|{kGy(G#l&hHd!xTHz9W==Z)k_}$%&)A8RA|xW%X~cQXw57hwU!m-m;UFQB zpy-ud32}3N%71rSja2Agzjj7VU2SHK|JAU}y7Y7lMsUW6sm`u0#m+_79u^mdNkc=r z9*9H_JC}Jc^--&;7hGsl!B?v)pfa^`ujlSvi7D~PJCl?5?2rrg6*iuLF5N09J5x|! ztiE{TSea6Jt{FbbcaP?jX)oukjgzHGcWr4Y-zF)SM=NBq;|V`VeZ#*?i8*li!q)hx zj8Iwfw*BjNZkA=AQYJ*g-r<~!VcQP{UHxKX-B+^o5c$@e@8yc@iiAyBDQ-Q5w;Qv@ z+)hMPKG`1B-RgH#52YIa@F=+y+kae$HKK@ds%zvl{bgbLk8N)}we44YzEnm?TwfGE z{pOL_t#qb1_i;>bj-}we0*_f~A4y!i&juHt^NpR=aNyp6j?|7$?Wm3t$lZu0dW(+i?X zR=vOa&|Ngqj?VZcXG~$|3Shp#D>mz9Hq{ZaJ6w>` zyl3^x!na!873SLmi+z2HPFs2kjs=|z_n7}#?SbSIA9r>VYjWwqA$9NBy=jX#?^ZXP zU*@Swy}KUdPpv^$rBdk&dGmy)U9_WXIl#^f57~MPB|>V`yU2{JT)m( du_HC@zZkLjZ<0m(BlB1c2nmjqz@Nt*{u5q9J3{~f literal 0 HcmV?d00001 diff --git a/icons/webpack.png b/icons/webpack.png new file mode 100644 index 0000000000000000000000000000000000000000..8a4ccf37100b027bf40a0d19154a1f4bc17d1bab GIT binary patch literal 1945 zcmZ{l2T;>_7RUc76cgZNCoQu-e=y-@AqcjJoCL1{!v zq_|{ zu5^2G4?(ey9B+2tFNDbOJhAk`ad$PL1B-vE-6@a~IG9TLvz|{*PCAAddI&$;ZW#ho z|KUZ7W%eXES4}u&@gY8`*iguasV7NpESDneb?wqv8+Z5VjP%V8_gQl;IHT zv(WM40sYKx4FitJ>V`o^Oz-@vd)0VM*z_l{KWy{*8o^Vdy82BP`%iHx`x-6MxW|`U zI?Mg#${8}ykT#xmG`gBG6!-Y1g?oHWv(*V<^^^S>q0lP802~dD>^34mT5)F}Qiycn z_M)%3q>Lqz-H-eJX|TIiPC05_yQ(r>J#1%6eMC!pt50Q^qKAq_Wg}(wxbXexyL@mk zLDpFAm`5}+TjznCuhqvc!4_Kn%Q&1nGMSWRG5`UbJYns?KHqIxo5|}pV`f> zV07V*Of4Iab|}Q0w0SzSg^?PJ^;W)6e~FH@OM05qU9aYG=50WT(ZTzqR*#B2GDm$` z;R`e8Wr39$b|=1ouBKvoYoTL6M}2lp6TM?5>q|}_D03+ZJKGu6@HSY{X^hfe_iogK z{u3wDm*ix);hCSHriiet4D7*Lx2T{XWQAQ1%{!sg6CsgVA$qCx()BG_@$uYGRwmEQ zTA=!2bttj52YzmS2T>=J_Clxd?S&$#gUxAzPLZhNdeFKy-XytSkh~u(gvtMPh9DW4 zu%Z7%!5RrJ=kn!`0QcokhBTKWbf+CXp;ZTb zR@=~4)5sZbDRXt(M0BqKHX9z*DQcp`4Ib%|y`!GX_E#$FSZMH9dE?ezRFpDS42h&E z<7~3 zk^kj2G!cCh_2JZX*HP@mW{DT@dqbYf*q+(>!;bx=pjL7tyP$JNsTtfl#ahZ3VwvStof2+eG;$`l>F6alHo=Ys-!`Hm;Ed z-z#8G-_Bik*XT=4HKtj}hAU|Ps=2)0*lZu?2PcOK|2WA8Rwm3)^sN0n#!H%uKnR;l zDy^J>x$b^^?=&{~TYMdw^?9L;a_v1oFE?Q-%QZa)eSwdIz`12wh=w%QXpOz)iomwD zK)+pq3isk|AO)^{r32h=gyBVe5MdWt6DZr+ihlO+J?r$xyPW zE0bDnbg-j)G&V65;I3B9E$y=BZN(R<|0?^|#n8muwB^ybLB{lF-5!yy3vtLTQ3ngL z`qHTf+$dywn*%p8h*>D7j~1dQL0sE($>aN_uswRF*1MJ-BgSpS3G5e#fGgDGk)8qt zVwR3fbv5FdVVE<yTuJyGvnETTuPLB6u-w~hQwYW>H3!b zi*_5NUu{}rd{Utjg}X

&VL-B>&=#YN%w-XCHT`IADsSQ_s-8{B+;+^a|(Mbe{Jy zwYQ~3K8cSdnU)7R-p9_7FW)I*XfH5yL2fLJ?m%8)MK_PM6B-WBuMI|4*N`}GS4zd7 zR_~R4m*l*?)&)QKdd=^6JC#g6MA_`4%`^GULv0}ENn-7BGFj3oEv(-ipS5p}cF9pQ z&8eEg^y_7J79zfUFPSn4q0EF>CJi5-L6Zw$gR`;4;+(KHcEQ%xcw1+@ zz0Ef`93F>z5*7pgFM!TSNIJp#|G)$2NS7SI{HFsmiB8L8#?sUN2jlqfCil&Up2!)% Mhd}mh@`%a%3wE|%$^ZZW literal 0 HcmV?d00001 diff --git a/ingredients/ads/google-ads.json b/ingredients/ads/google-ads.json index 76a0fb9..8e4f831 100644 --- a/ingredients/ads/google-ads.json +++ b/ingredients/ads/google-ads.json @@ -6,7 +6,12 @@ { "tag": "script", "attribute": "src", - "value": "googlesyndication.com/pagead/js/adsbygoogle.js" + "value": "googlesyndication.com/*.js" + }, + { + "tag": "script", + "attribute": "src", + "value": "g.doubleclick.net/*.js" } ], "headers": [] diff --git a/ingredients/analytics/matomo.json b/ingredients/analytics/matomo.json index 0857d5c..b47c25e 100644 --- a/ingredients/analytics/matomo.json +++ b/ingredients/analytics/matomo.json @@ -8,6 +8,11 @@ "attribute": "src", "value": "/piwik.js" }, + { + "tag": "img", + "attribute": "src", + "value": "/piwik.php" + }, { "tag": "script", "attribute": "src", diff --git a/ingredients/analytics/piwik-pro.json b/ingredients/analytics/piwik-pro.json new file mode 100644 index 0000000..dba71ea --- /dev/null +++ b/ingredients/analytics/piwik-pro.json @@ -0,0 +1,14 @@ +{ + "name": "Piwik Pro", + "icon": "/icon/piwik-pro.png", + "checks": { + "tags": [ + { + "tag": "link", + "attribute": "href", + "value": ".piwik.pro" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/cdn/aws-cloudfront.json b/ingredients/cdn/aws-cloudfront.json index 04ca2e1..b8f4104 100644 --- a/ingredients/cdn/aws-cloudfront.json +++ b/ingredients/cdn/aws-cloudfront.json @@ -24,6 +24,23 @@ "value": "cloudfront.net" } ], - "headers": [] + "headers": [ + { + "header": "Server", + "value": "cloudfront" + }, + { + "header": "Via", + "value": "cloudfront" + }, + { + "header": "x-amz-cf-pop", + "value": null + }, + { + "header": "x-amz-cf-id", + "value": null + } + ] } } \ No newline at end of file diff --git a/ingredients/cdn/cdnjs.json b/ingredients/cdn/cdnjs.json new file mode 100644 index 0000000..ef8f02b --- /dev/null +++ b/ingredients/cdn/cdnjs.json @@ -0,0 +1,24 @@ +{ + "name": "cdnjs", + "icon": "/icon/cdnjs.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "cdnjs.cloudflare.com" + }, + { + "tag": "link", + "attribute": "href", + "value": "cdnjs.cloudflare.com" + }, + { + "tag": "script", + "attribute": null, + "value": "cdnjs.cloudflare.com" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/cdn/cloudflare-cdn.json b/ingredients/cdn/cloudflare-cdn.json index ddefc05..f89a10f 100644 --- a/ingredients/cdn/cloudflare-cdn.json +++ b/ingredients/cdn/cloudflare-cdn.json @@ -6,12 +6,12 @@ { "tag": "script", "attribute": "src", - "value": "cdnjs.cloudflare.com" + "value": "cdn.cloudflare.com" }, { "tag": "script", "attribute": null, - "value": "cdnjs.cloudflare.com" + "value": "cdn.cloudflare.com" } ], "headers": [ @@ -20,7 +20,7 @@ "value": "cloudflare" }, { - "header": "CF-Cache-Status", + "header": "cf-cache-status", "value": null } ] diff --git a/ingredients/cdn/raster-cdn.json b/ingredients/cdn/raster-cdn.json new file mode 100644 index 0000000..394f509 --- /dev/null +++ b/ingredients/cdn/raster-cdn.json @@ -0,0 +1,19 @@ +{ + "name": "Raster", + "icon": "/icon/raster-cdn.png", + "checks": { + "tags": [ + { + "tag": "img", + "attribute": "src", + "value": "cdn.raster.app" + }, + { + "tag": "meta", + "attribute": "content", + "value": "cdn.raster.app" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/cms/prismic.json b/ingredients/cms/prismic.json new file mode 100644 index 0000000..4cd14ca --- /dev/null +++ b/ingredients/cms/prismic.json @@ -0,0 +1,24 @@ +{ + "name": "Prismic", + "icon": "/icon/prismic.png", + "checks": { + "tags": [ + { + "tag": "meta", + "attribute": "content", + "value": "images.prismic.io" + }, + { + "tag": "img", + "attribute": "src", + "value": "cdn.prismic.io" + }, + { + "tag": "img", + "attribute": "srcset", + "value": "cdn.prismic.io" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/compliance/cookielaw.json b/ingredients/compliance/cookielaw.json new file mode 100644 index 0000000..8fe63e7 --- /dev/null +++ b/ingredients/compliance/cookielaw.json @@ -0,0 +1,14 @@ +{ + "name": "CookieLaw", + "icon": "/icon/cookielaw.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "cdn.cookielaw.org/*.js" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/compliance/onetrust.json b/ingredients/compliance/onetrust.json new file mode 100644 index 0000000..23e4ab2 --- /dev/null +++ b/ingredients/compliance/onetrust.json @@ -0,0 +1,24 @@ +{ + "name": "OneTrust", + "icon": "/icon/onetrust.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "geolocation.onetrust.com" + }, + { + "tag": "script", + "attribute": "src", + "value": "/otSDKStub.js" + }, + { + "tag": "script", + "attribute": "src", + "value": "/OtAutoBlock.js" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/compliance/osano.json b/ingredients/compliance/osano.json new file mode 100644 index 0000000..d30ee76 --- /dev/null +++ b/ingredients/compliance/osano.json @@ -0,0 +1,14 @@ +{ + "name": "Osano", + "icon": "/icon/osano.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "osano.com/*.js" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/fonts/fontawesome.json b/ingredients/fonts/fontawesome.json index 06dcf69..928ddf1 100644 --- a/ingredients/fonts/fontawesome.json +++ b/ingredients/fonts/fontawesome.json @@ -7,6 +7,11 @@ "tag": "link", "attribute": "href", "value": "/fontawesome" + }, + { + "tag": "link", + "attribute": "href", + "value": "/fa-*.woff2" } ], "headers": [] diff --git a/ingredients/fonts/hoefler-co.json b/ingredients/fonts/hoefler-co.json new file mode 100644 index 0000000..2bad495 --- /dev/null +++ b/ingredients/fonts/hoefler-co.json @@ -0,0 +1,14 @@ +{ + "name": "Hoefler&Co", + "icon": "/icon/hoefler-co.png", + "checks": { + "tags": [ + { + "tag": "link", + "attribute": "href", + "value": "cloud.typography.com/*.css" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/frameworks/bootstrap.json b/ingredients/frameworks/bootstrap.json index c6a8429..e0924e0 100644 --- a/ingredients/frameworks/bootstrap.json +++ b/ingredients/frameworks/bootstrap.json @@ -6,17 +6,17 @@ { "tag": "script", "attribute": "src", - "value": "/bootstrap.min.js" + "value": "/bootstrap*.js" }, { "tag": "script", "attribute": "src", - "value": "/bootstrap.min.css" + "value": "/bootstrap*.css" }, { "tag": "link", "attribute": "href", - "value": "/bootstrap.min.css" + "value": "/bootstrap*.css" } ], "headers": [] diff --git a/ingredients/frameworks/tailwind.json b/ingredients/frameworks/tailwind.json new file mode 100644 index 0000000..6ea0248 --- /dev/null +++ b/ingredients/frameworks/tailwind.json @@ -0,0 +1,24 @@ +{ + "name": "Tailwind CSS", + "icon": "/icon/tailwind.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "/tailwind*.js" + }, + { + "tag": "script", + "attribute": "src", + "value": "/tailwind*.css" + }, + { + "tag": "link", + "attribute": "href", + "value": "/tailwind*.css" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/cdn/netlify.json b/ingredients/hosts/netlify.json similarity index 64% rename from ingredients/cdn/netlify.json rename to ingredients/hosts/netlify.json index ed08f0e..6420ae8 100644 --- a/ingredients/cdn/netlify.json +++ b/ingredients/hosts/netlify.json @@ -2,7 +2,13 @@ "name": "Netlify", "icon": "/icon/netlify.png", "checks": { - "tags": [], + "tags": [ + { + "tag": "src", + "attribute": "id", + "value": "netlify-rum-container" + } + ], "headers": [ { "header": "Server", diff --git a/ingredients/hosts/vercel.json b/ingredients/hosts/vercel.json index 4a25dd1..049d52c 100644 --- a/ingredients/hosts/vercel.json +++ b/ingredients/hosts/vercel.json @@ -7,6 +7,14 @@ { "header": "Server", "value": "Vercel" + }, + { + "header": "x-vercel-cache", + "value": null + }, + { + "header": "x-vercel-id", + "value": null } ] } diff --git a/ingredients/libraries/katex.json b/ingredients/libraries/katex.json new file mode 100644 index 0000000..bbbfa6a --- /dev/null +++ b/ingredients/libraries/katex.json @@ -0,0 +1,19 @@ +{ + "name": "KaTeX", + "icon": "/icon/katex.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "/katex.*js" + }, + { + "tag": "link", + "attribute": "href", + "value": "/katex.*css" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/monitoring/newrelic copy.json b/ingredients/monitoring/newrelic copy.json new file mode 100644 index 0000000..87e7be9 --- /dev/null +++ b/ingredients/monitoring/newrelic copy.json @@ -0,0 +1,14 @@ +{ + "name": "Cloudflare Radar", + "icon": "/icon/cloudflare-radar.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "radar.cloudflare.com/beacon*.js" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/other/http3.json b/ingredients/other/http3.json new file mode 100644 index 0000000..46fda4d --- /dev/null +++ b/ingredients/other/http3.json @@ -0,0 +1,17 @@ +{ + "name": "HTTP/3", + "icon": "/icon/http3.png", + "checks": { + "tags": [], + "headers": [ + { + "header": "quic", + "value": null + }, + { + "header": "Alt-Svc", + "value": null + } + ] + } +} \ No newline at end of file diff --git a/ingredients/other/webpack.json b/ingredients/other/webpack.json new file mode 100644 index 0000000..5c2c497 --- /dev/null +++ b/ingredients/other/webpack.json @@ -0,0 +1,19 @@ +{ + "name": "Webpack", + "icon": "/icon/webpack.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "bundle.js" + }, + { + "tag": "script", + "attribute": "src", + "value": "chunks*.js" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/payments/paddle.json b/ingredients/payments/paddle.json new file mode 100644 index 0000000..824e103 --- /dev/null +++ b/ingredients/payments/paddle.json @@ -0,0 +1,14 @@ +{ + "name": "Paddle", + "icon": "/icon/paddle.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "cdn.paddle.com/*.js" + } + ], + "headers": [] + } +} \ No newline at end of file diff --git a/ingredients/payments/stripe.json b/ingredients/payments/stripe.json index 05674be..6c13142 100644 --- a/ingredients/payments/stripe.json +++ b/ingredients/payments/stripe.json @@ -8,6 +8,11 @@ "attribute": "src", "value": "js.stripe.com" }, + { + "tag": "script", + "attribute": null, + "value": "js.stripe.com" + }, { "tag": "iframe", "attribute": "src", diff --git a/ingredients/security/hcaptcha.json b/ingredients/security/hcaptcha.json index 913047b..5c04556 100644 --- a/ingredients/security/hcaptcha.json +++ b/ingredients/security/hcaptcha.json @@ -7,6 +7,11 @@ "tag": "script", "attribute": "src", "value": "js.hcaptcha.com" + }, + { + "tag": "script", + "attribute": "src", + "value": "hcaptcha.com/*.js" } ], "headers": [] diff --git a/ingredients/servers/phusion-passenger.json b/ingredients/servers/phusion-passenger.json new file mode 100644 index 0000000..9c94e44 --- /dev/null +++ b/ingredients/servers/phusion-passenger.json @@ -0,0 +1,13 @@ +{ + "name": "Phusion Passenger", + "icon": "/icon/phusion-passenger.png", + "checks": { + "tags": [], + "headers": [ + { + "header": "x-powered-by", + "value": "Phusion Passenger" + } + ] + } +} \ No newline at end of file diff --git a/ingredients/servers/ubuntu.json b/ingredients/servers/ubuntu.json new file mode 100644 index 0000000..25e9e5d --- /dev/null +++ b/ingredients/servers/ubuntu.json @@ -0,0 +1,13 @@ +{ + "name": "Ubuntu", + "icon": "/icon/ubuntu.png", + "checks": { + "tags": [], + "headers": [ + { + "header": "Server", + "value": "Ubuntu" + } + ] + } +} \ No newline at end of file diff --git a/ingredients/cdn/aws-s3.json b/ingredients/storage/aws-s3.json similarity index 77% rename from ingredients/cdn/aws-s3.json rename to ingredients/storage/aws-s3.json index 05c8a10..7f34102 100644 --- a/ingredients/cdn/aws-s3.json +++ b/ingredients/storage/aws-s3.json @@ -6,22 +6,22 @@ { "tag": "script", "attribute": "src", - "value": "s3.amazonaws.com" + "value": "s3*.amazonaws.com" }, { "tag": "link", "attribute": "href", - "value": "s3.amazonaws.com" + "value": "s3*.amazonaws.com" }, { "tag": "img", "attribute": "src", - "value": "s3.amazonaws.com" + "value": "s3*.amazonaws.com" }, { "tag": "src", "attribute": null, - "value": "s3.amazonaws.com" + "value": "s3*.amazonaws.com" } ], "headers": [ diff --git a/ingredients/storage/google-cloud-storage.json b/ingredients/storage/google-cloud-storage.json new file mode 100644 index 0000000..ba76a31 --- /dev/null +++ b/ingredients/storage/google-cloud-storage.json @@ -0,0 +1,34 @@ +{ + "name": "Google Cloud Storage", + "icon": "/icon/google-cloud-storage.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "storage.googleapis.com/*storage" + }, + { + "tag": "link", + "attribute": "href", + "value": "storage.googleapis.com/*storage" + }, + { + "tag": "img", + "attribute": "src", + "value": "storage.googleapis.com/*storage" + }, + { + "tag": "src", + "attribute": null, + "value": "storage.googleapis.com/*storage" + } + ], + "headers": [ + { + "header": "X-Goog-Storage-Class", + "value": null + } + ] + } +} \ No newline at end of file diff --git a/ingredients/widgets/intercom.json b/ingredients/widgets/intercom.json index 5947cf9..927a5e1 100644 --- a/ingredients/widgets/intercom.json +++ b/ingredients/widgets/intercom.json @@ -8,6 +8,11 @@ "attribute": "src", "value": "widget.intercom.io" }, + { + "tag": "link", + "attribute": "href", + "value": "widget.intercom.io" + }, { "tag": "iframe", "attribute": "id", diff --git a/ingredients/widgets/vimeo.json b/ingredients/widgets/vimeo.json new file mode 100644 index 0000000..db635eb --- /dev/null +++ b/ingredients/widgets/vimeo.json @@ -0,0 +1,29 @@ +{ + "name": "Vimeo", + "icon": "/icon/vimeo.png", + "checks": { + "tags": [ + { + "tag": "script", + "attribute": "src", + "value": "vimeocdn.com" + }, + { + "tag": "iframe", + "attribute": "src", + "value": "vimeo.com" + }, + { + "tag": "script", + "attribute": null, + "value": "player.vimeo.com" + }, + { + "tag": "script", + "attribute": null, + "value": "Vimeo.Player" + } + ], + "headers": [] + } +} \ No newline at end of file