@jaredwray/mockhttp 3.0.0 → 3.0.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.
- package/dist/index.d.mts +45 -0
- package/dist/index.mjs +315 -2
- package/package.json +5 -3
- package/site/dist/api/index.html +188 -2
- package/site/dist/api/swagger.json +226 -1
- package/site/dist/changelog/index.html +20 -17
- package/site/dist/changelog/page/2/index.html +17 -16
- package/site/dist/changelog/{v0-2-1 → v3-0-1}/index.html +83 -9
- package/site/dist/changelog-latest.json +13 -13
- package/site/dist/changelog.json +13 -13
- package/site/dist/docs/bins/index.html +62 -2
- package/site/dist/docs/configuration/index.html +2 -2
- package/site/dist/docs/hosted/index.html +2 -2
- package/site/dist/docs/how-to-deploy/cloudflare/index.html +8 -3
- package/site/dist/docs/how-to-deploy/docker/index.html +2 -2
- package/site/dist/docs/how-to-deploy/wasmer/index.html +2 -2
- package/site/dist/docs/https/index.html +2 -2
- package/site/dist/docs/index.html +2 -2
- package/site/dist/docs/library/index.html +3 -3
- package/site/dist/docs/taps/index.html +2 -2
- package/site/dist/feed.xml +1 -1
- package/site/dist/index.html +2 -2
- package/site/dist/llms-full.txt +371 -15
- package/site/dist/llms.txt +1 -1
- package/site/dist/search-index.json +1 -1
- package/site/dist/sitemap.xml +1 -1
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
}
|
|
34
34
|
})();
|
|
35
35
|
</script>
|
|
36
|
-
<title>MockHTTP -
|
|
36
|
+
<title>MockHTTP - v3.0.1</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"BlogPosting","headline":"
|
|
38
|
+
{"@context":"https://schema.org","@type":"BlogPosting","headline":"v3.0.1","description":"<p>Security patches and Worker fixes. /healthz omits scheme, host, username, and password length.</p>\n<ul>\n<li>start the Worker during isolate startup (#248)</li>\n<li>report bin store health and keep a failed connect in process (#249)</li>\n<li>drop every second socket error that has no listener (#250)</li>\n<li>Add redacted URI diagnostics to /healthz (#254)</li>\n<li>open one MongoDB client per Worker request to stop 1101s on bins (#255)</li>\n<li>pin Node 24.22.1 and patched undici (#256)</li>\n</ul>","url":"https://mockhttp.org/changelog/v3-0-1/","publisher":{"@type":"Organization","name":"MockHTTP"},"datePublished":"2026-10-28"}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -148,17 +148,91 @@
|
|
|
148
148
|
</div>
|
|
149
149
|
<div class="changelog-entry changelog-entry-single">
|
|
150
150
|
<div class="changelog-entry-header">
|
|
151
|
-
<h1 class="changelog-entry-title">
|
|
151
|
+
<h1 class="changelog-entry-title">v3.0.1</h1>
|
|
152
152
|
<span class="changelog-tag changelog-tag-release">Release</span>
|
|
153
153
|
</div>
|
|
154
|
-
<span class="changelog-entry-date">
|
|
154
|
+
<span class="changelog-entry-date">October 28, 2026</span>
|
|
155
155
|
<div class="changelog-entry-body">
|
|
156
|
-
<h2 id="
|
|
156
|
+
<h2 id="jaredwraymockhttp301--2026-10-28">@jaredwray/mockhttp@3.0.1 — 2026-10-28</h2>
|
|
157
|
+
<p>Security patches and Worker fixes. /healthz omits scheme, host, username, and password length.</p>
|
|
158
|
+
<h3 id="bug-fixes">Bug Fixes</h3>
|
|
157
159
|
<ul>
|
|
158
|
-
<li>
|
|
159
|
-
<
|
|
160
|
+
<li>
|
|
161
|
+
<p>start the Worker during isolate startup (#248)</p>
|
|
162
|
+
</li>
|
|
163
|
+
<li>
|
|
164
|
+
<p>report bin store health and keep a failed connect in process (#249)</p>
|
|
165
|
+
</li>
|
|
166
|
+
<li>
|
|
167
|
+
<p>drop every second socket error that has no listener (#250)</p>
|
|
168
|
+
</li>
|
|
169
|
+
<li>
|
|
170
|
+
<p>Add redacted URI diagnostics to /healthz (#254)</p>
|
|
171
|
+
</li>
|
|
172
|
+
<li>
|
|
173
|
+
<p>open one MongoDB client per Worker request to stop 1101s on bins (#255)</p>
|
|
174
|
+
</li>
|
|
175
|
+
<li>
|
|
176
|
+
<p>pin Node 24.22.1 and patched undici (#256)</p>
|
|
177
|
+
</li>
|
|
178
|
+
<li>
|
|
179
|
+
<p>force miniflare's sharp pin to 0.35.5 (#257)</p>
|
|
180
|
+
</li>
|
|
181
|
+
<li>
|
|
182
|
+
<p>bump zod to 4.6.7 for GHSA-mrhx-c7xc-m3w5 (#258)</p>
|
|
183
|
+
</li>
|
|
184
|
+
<li>
|
|
185
|
+
<p>security - markdown-it 15.0.3 (CVE-2026-111758) (#260)</p>
|
|
186
|
+
</li>
|
|
187
|
+
<li>
|
|
188
|
+
<p>omit scheme and URI identity from /healthz (#262)</p>
|
|
189
|
+
<pre><code class="hljs language-json"><span class="hljs-punctuation">{</span>
|
|
190
|
+
<span class="hljs-attr">"status"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ok"</span><span class="hljs-punctuation">,</span>
|
|
191
|
+
<span class="hljs-attr">"bins"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
|
|
192
|
+
<span class="hljs-attr">"connected"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>
|
|
193
|
+
<span class="hljs-attr">"uriPresent"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>
|
|
194
|
+
<span class="hljs-attr">"uri"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
|
|
195
|
+
<span class="hljs-attr">"atCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>
|
|
196
|
+
<span class="hljs-attr">"passwordHasPercent"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span>
|
|
197
|
+
<span class="hljs-punctuation">}</span>
|
|
198
|
+
<span class="hljs-punctuation">}</span>
|
|
199
|
+
<span class="hljs-punctuation">}</span>
|
|
200
|
+
</code></pre>
|
|
201
|
+
</li>
|
|
160
202
|
</ul>
|
|
161
|
-
<
|
|
203
|
+
<h3 id="documentation">Documentation</h3>
|
|
204
|
+
<ul>
|
|
205
|
+
<li>remove the empty vars note from the Cloudflare page (#253)</li>
|
|
206
|
+
</ul>
|
|
207
|
+
<h3 id="internal">Internal</h3>
|
|
208
|
+
<ul>
|
|
209
|
+
<li>point worker URI fixtures at example.invalid (#251)</li>
|
|
210
|
+
<li>declare empty Worker vars in Wrangler (#252)</li>
|
|
211
|
+
<li>list LICENSE in the published package files (#259)</li>
|
|
212
|
+
</ul>
|
|
213
|
+
<h3 id="contributors">Contributors</h3>
|
|
214
|
+
<ul>
|
|
215
|
+
<li>@jaredwray (13)</li>
|
|
216
|
+
<li>@cursoragent (1)</li>
|
|
217
|
+
</ul>
|
|
218
|
+
<h3 id="full-list-of-changes">Full List of Changes</h3>
|
|
219
|
+
<ul>
|
|
220
|
+
<li>fix: restore Cloudflare Worker routes after the v3.0.0 startup crash by @jaredwray in #248</li>
|
|
221
|
+
<li>Add GET /healthz and redact bin store errors by @jaredwray in #249</li>
|
|
222
|
+
<li>Use example.invalid for worker test URI fixtures by @jaredwray in #251</li>
|
|
223
|
+
<li>Drop every second socket error that has no listener by @jaredwray in #250</li>
|
|
224
|
+
<li>Declare empty Worker vars in Wrangler by @jaredwray in #252</li>
|
|
225
|
+
<li>Remove the empty vars note from the Cloudflare page by @jaredwray in #253</li>
|
|
226
|
+
<li>Add redacted URI diagnostics to /healthz by @jaredwray in #254</li>
|
|
227
|
+
<li>fix: open one MongoDB client per Worker request to stop 1101s on bins by @jaredwray in #255</li>
|
|
228
|
+
<li>security: pin Node 24.22.1 and patched undici by @jaredwray in #256</li>
|
|
229
|
+
<li>fix: security - upgrade sharp to 0.35.5 (libheif RCE) by @jaredwray in #257</li>
|
|
230
|
+
<li>fix: security - bump zod to 4.6.7 (GHSA-mrhx-c7xc-m3w5) by @jaredwray in #258</li>
|
|
231
|
+
<li>chore: list LICENSE in the published package files by @jaredwray in #259</li>
|
|
232
|
+
<li>fix: security - markdown-it 15.0.3 (CVE-2026-111758) by @jaredwray in #260</li>
|
|
233
|
+
<li>fix: omit scheme and URI identity from /healthz by @jaredwray in #262</li>
|
|
234
|
+
</ul>
|
|
235
|
+
<p><strong>Full diff:</strong> <a href="https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1">https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1</a></p>
|
|
162
236
|
</div>
|
|
163
237
|
</div>
|
|
164
238
|
</div>
|
|
@@ -173,7 +247,7 @@
|
|
|
173
247
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
174
248
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
175
249
|
</a>
|
|
176
|
-
<span class="footer__updated">updated:
|
|
250
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
177
251
|
</footer>
|
|
178
252
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
179
253
|
<script>
|
|
@@ -5,6 +5,19 @@
|
|
|
5
5
|
"home_page_url": "https://mockhttp.org/",
|
|
6
6
|
"feed_url": "https://mockhttp.org/changelog-latest.json",
|
|
7
7
|
"items": [
|
|
8
|
+
{
|
|
9
|
+
"id": "v3-0-1",
|
|
10
|
+
"title": "v3.0.1",
|
|
11
|
+
"url": "https://mockhttp.org/changelog/v3-0-1/",
|
|
12
|
+
"date_published": "2026-10-28",
|
|
13
|
+
"date_modified": "2026-10-28",
|
|
14
|
+
"summary": "<p>Security patches and Worker fixes. /healthz omits scheme, host, username, and password length.</p>\n<ul>\n<li>start the Worker during isolate startup (#248)</li>\n<li>report bin store health and keep a failed connect in process (#249)</li>\n<li>drop every second socket error that has no listener (#250)</li>\n<li>Add redacted URI diagnostics to /healthz (#254)</li>\n<li>open one MongoDB client per Worker request to stop 1101s on bins (#255)</li>\n<li>pin Node 24.22.1 and patched undici (#256)</li>\n</ul>",
|
|
15
|
+
"content_html": "<h2 id=\"jaredwraymockhttp301--2026-10-28\">@jaredwray/mockhttp@3.0.1 — 2026-10-28</h2>\n<p>Security patches and Worker fixes. /healthz omits scheme, host, username, and password length.</p>\n<h3 id=\"bug-fixes\">Bug Fixes</h3>\n<ul>\n<li>\n<p>start the Worker during isolate startup (#248)</p>\n</li>\n<li>\n<p>report bin store health and keep a failed connect in process (#249)</p>\n</li>\n<li>\n<p>drop every second socket error that has no listener (#250)</p>\n</li>\n<li>\n<p>Add redacted URI diagnostics to /healthz (#254)</p>\n</li>\n<li>\n<p>open one MongoDB client per Worker request to stop 1101s on bins (#255)</p>\n</li>\n<li>\n<p>pin Node 24.22.1 and patched undici (#256)</p>\n</li>\n<li>\n<p>force miniflare's sharp pin to 0.35.5 (#257)</p>\n</li>\n<li>\n<p>bump zod to 4.6.7 for GHSA-mrhx-c7xc-m3w5 (#258)</p>\n</li>\n<li>\n<p>security - markdown-it 15.0.3 (CVE-2026-111758) (#260)</p>\n</li>\n<li>\n<p>omit scheme and URI identity from /healthz (#262)</p>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\r\n <span class=\"hljs-attr\">\"status\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"ok\"</span><span class=\"hljs-punctuation\">,</span>\r\n <span class=\"hljs-attr\">\"bins\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\r\n <span class=\"hljs-attr\">\"connected\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-literal\"><span class=\"hljs-keyword\">true</span></span><span class=\"hljs-punctuation\">,</span>\r\n <span class=\"hljs-attr\">\"uriPresent\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-literal\"><span class=\"hljs-keyword\">true</span></span><span class=\"hljs-punctuation\">,</span>\r\n <span class=\"hljs-attr\">\"uri\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\r\n <span class=\"hljs-attr\">\"atCount\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-number\">1</span><span class=\"hljs-punctuation\">,</span>\r\n <span class=\"hljs-attr\">\"passwordHasPercent\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-literal\"><span class=\"hljs-keyword\">false</span></span>\r\n <span class=\"hljs-punctuation\">}</span>\r\n <span class=\"hljs-punctuation\">}</span>\r\n<span class=\"hljs-punctuation\">}</span>\n</code></pre>\n</li>\n</ul>\n<h3 id=\"documentation\">Documentation</h3>\n<ul>\n<li>remove the empty vars note from the Cloudflare page (#253)</li>\n</ul>\n<h3 id=\"internal\">Internal</h3>\n<ul>\n<li>point worker URI fixtures at example.invalid (#251)</li>\n<li>declare empty Worker vars in Wrangler (#252)</li>\n<li>list LICENSE in the published package files (#259)</li>\n</ul>\n<h3 id=\"contributors\">Contributors</h3>\n<ul>\n<li>@jaredwray (13)</li>\n<li>@cursoragent (1)</li>\n</ul>\n<h3 id=\"full-list-of-changes\">Full List of Changes</h3>\n<ul>\n<li>fix: restore Cloudflare Worker routes after the v3.0.0 startup crash by @jaredwray in #248</li>\n<li>Add GET /healthz and redact bin store errors by @jaredwray in #249</li>\n<li>Use example.invalid for worker test URI fixtures by @jaredwray in #251</li>\n<li>Drop every second socket error that has no listener by @jaredwray in #250</li>\n<li>Declare empty Worker vars in Wrangler by @jaredwray in #252</li>\n<li>Remove the empty vars note from the Cloudflare page by @jaredwray in #253</li>\n<li>Add redacted URI diagnostics to /healthz by @jaredwray in #254</li>\n<li>fix: open one MongoDB client per Worker request to stop 1101s on bins by @jaredwray in #255</li>\n<li>security: pin Node 24.22.1 and patched undici by @jaredwray in #256</li>\n<li>fix: security - upgrade sharp to 0.35.5 (libheif RCE) by @jaredwray in #257</li>\n<li>fix: security - bump zod to 4.6.7 (GHSA-mrhx-c7xc-m3w5) by @jaredwray in #258</li>\n<li>chore: list LICENSE in the published package files by @jaredwray in #259</li>\n<li>fix: security - markdown-it 15.0.3 (CVE-2026-111758) by @jaredwray in #260</li>\n<li>fix: omit scheme and URI identity from /healthz by @jaredwray in #262</li>\n</ul>\n<p><strong>Full diff:</strong> <a href=\"https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1\">https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1</a></p>",
|
|
16
|
+
"content_text": "## @jaredwray/mockhttp@3.0.1 — 2026-10-28\r\n\r\nSecurity patches and Worker fixes. /healthz omits scheme, host, username, and password length.\r\n\r\n### Bug Fixes\r\n- start the Worker during isolate startup (#248)\r\n- report bin store health and keep a failed connect in process (#249)\r\n- drop every second socket error that has no listener (#250)\r\n- Add redacted URI diagnostics to /healthz (#254)\r\n- open one MongoDB client per Worker request to stop 1101s on bins (#255)\r\n- pin Node 24.22.1 and patched undici (#256)\r\n- force miniflare's sharp pin to 0.35.5 (#257)\r\n- bump zod to 4.6.7 for GHSA-mrhx-c7xc-m3w5 (#258)\r\n- security - markdown-it 15.0.3 (CVE-2026-111758) (#260)\r\n- omit scheme and URI identity from /healthz (#262)\r\n\r\n ```json\r\n {\r\n \"status\": \"ok\",\r\n \"bins\": {\r\n \"connected\": true,\r\n \"uriPresent\": true,\r\n \"uri\": {\r\n \"atCount\": 1,\r\n \"passwordHasPercent\": false\r\n }\r\n }\r\n }\r\n ```\r\n\r\n### Documentation\r\n- remove the empty vars note from the Cloudflare page (#253)\r\n\r\n### Internal\r\n- point worker URI fixtures at example.invalid (#251)\r\n- declare empty Worker vars in Wrangler (#252)\r\n- list LICENSE in the published package files (#259)\r\n\r\n### Contributors\r\n- @jaredwray (13)\r\n- @cursoragent (1)\r\n\r\n### Full List of Changes\r\n- fix: restore Cloudflare Worker routes after the v3.0.0 startup crash by @jaredwray in #248\r\n- Add GET /healthz and redact bin store errors by @jaredwray in #249\r\n- Use example.invalid for worker test URI fixtures by @jaredwray in #251\r\n- Drop every second socket error that has no listener by @jaredwray in #250\r\n- Declare empty Worker vars in Wrangler by @jaredwray in #252\r\n- Remove the empty vars note from the Cloudflare page by @jaredwray in #253\r\n- Add redacted URI diagnostics to /healthz by @jaredwray in #254\r\n- fix: open one MongoDB client per Worker request to stop 1101s on bins by @jaredwray in #255\r\n- security: pin Node 24.22.1 and patched undici by @jaredwray in #256\r\n- fix: security - upgrade sharp to 0.35.5 (libheif RCE) by @jaredwray in #257\r\n- fix: security - bump zod to 4.6.7 (GHSA-mrhx-c7xc-m3w5) by @jaredwray in #258\r\n- chore: list LICENSE in the published package files by @jaredwray in #259\r\n- fix: security - markdown-it 15.0.3 (CVE-2026-111758) by @jaredwray in #260\r\n- fix: omit scheme and URI identity from /healthz by @jaredwray in #262\r\n\r\n**Full diff:** [https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1](https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1)",
|
|
17
|
+
"tags": [
|
|
18
|
+
"Release"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
8
21
|
{
|
|
9
22
|
"id": "v3-0-0",
|
|
10
23
|
"title": "v3.0.0",
|
|
@@ -251,19 +264,6 @@
|
|
|
251
264
|
"tags": [
|
|
252
265
|
"Release"
|
|
253
266
|
]
|
|
254
|
-
},
|
|
255
|
-
{
|
|
256
|
-
"id": "v0-6-1",
|
|
257
|
-
"title": "v0.6.1",
|
|
258
|
-
"url": "https://mockhttp.org/changelog/v0-6-1/",
|
|
259
|
-
"date_published": "2025-07-19",
|
|
260
|
-
"date_modified": "2025-07-19",
|
|
261
|
-
"summary": "<ul>\n<li>chore: adding in min for cloud run by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/60\">https://github.com/jaredwray/mockhttp/pull/60</a></li>\n<li>chore: upgrading xo to 1.2.1 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/61\">https://github.com/jaredwray/mockhttp/pull/61</a></li>\n<li>chore: upgrading vitest to 3.2.4 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/62\">https://github.com/jaredwray/mockhttp/pull/62</a></li>\n<li>chore: upgrading @scalar/api-reference to 1.32.9 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/63\">https://github.com/jaredwray/mockhttp/pull/63</a></li>\n</ul>",
|
|
262
|
-
"content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>chore: adding in min for cloud run by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/60\">https://github.com/jaredwray/mockhttp/pull/60</a></li>\n<li>chore: upgrading xo to 1.2.1 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/61\">https://github.com/jaredwray/mockhttp/pull/61</a></li>\n<li>chore: upgrading vitest to 3.2.4 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/62\">https://github.com/jaredwray/mockhttp/pull/62</a></li>\n<li>chore: upgrading @scalar/api-reference to 1.32.9 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/63\">https://github.com/jaredwray/mockhttp/pull/63</a></li>\n<li>chore: upgrading hookified to 1.10.0 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/64\">https://github.com/jaredwray/mockhttp/pull/64</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/mockhttp/compare/v0.6.0...v0.6.1\">https://github.com/jaredwray/mockhttp/compare/v0.6.0...v0.6.1</a></p>",
|
|
263
|
-
"content_text": "## What's Changed\r\n* chore: adding in min for cloud run by @jaredwray in [https://github.com/jaredwray/mockhttp/pull/60](https://github.com/jaredwray/mockhttp/pull/60)\r\n* chore: upgrading xo to 1.2.1 by @jaredwray in [https://github.com/jaredwray/mockhttp/pull/61](https://github.com/jaredwray/mockhttp/pull/61)\r\n* chore: upgrading vitest to 3.2.4 by @jaredwray in [https://github.com/jaredwray/mockhttp/pull/62](https://github.com/jaredwray/mockhttp/pull/62)\r\n* chore: upgrading @scalar/api-reference to 1.32.9 by @jaredwray in [https://github.com/jaredwray/mockhttp/pull/63](https://github.com/jaredwray/mockhttp/pull/63)\r\n* chore: upgrading hookified to 1.10.0 by @jaredwray in [https://github.com/jaredwray/mockhttp/pull/64](https://github.com/jaredwray/mockhttp/pull/64)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/mockhttp/compare/v0.6.0...v0.6.1](https://github.com/jaredwray/mockhttp/compare/v0.6.0...v0.6.1)",
|
|
264
|
-
"tags": [
|
|
265
|
-
"Release"
|
|
266
|
-
]
|
|
267
267
|
}
|
|
268
268
|
]
|
|
269
269
|
}
|
package/site/dist/changelog.json
CHANGED
|
@@ -5,6 +5,19 @@
|
|
|
5
5
|
"home_page_url": "https://mockhttp.org/",
|
|
6
6
|
"feed_url": "https://mockhttp.org/changelog.json",
|
|
7
7
|
"items": [
|
|
8
|
+
{
|
|
9
|
+
"id": "v3-0-1",
|
|
10
|
+
"title": "v3.0.1",
|
|
11
|
+
"url": "https://mockhttp.org/changelog/v3-0-1/",
|
|
12
|
+
"date_published": "2026-10-28",
|
|
13
|
+
"date_modified": "2026-10-28",
|
|
14
|
+
"summary": "<p>Security patches and Worker fixes. /healthz omits scheme, host, username, and password length.</p>\n<ul>\n<li>start the Worker during isolate startup (#248)</li>\n<li>report bin store health and keep a failed connect in process (#249)</li>\n<li>drop every second socket error that has no listener (#250)</li>\n<li>Add redacted URI diagnostics to /healthz (#254)</li>\n<li>open one MongoDB client per Worker request to stop 1101s on bins (#255)</li>\n<li>pin Node 24.22.1 and patched undici (#256)</li>\n</ul>",
|
|
15
|
+
"content_html": "<h2 id=\"jaredwraymockhttp301--2026-10-28\">@jaredwray/mockhttp@3.0.1 — 2026-10-28</h2>\n<p>Security patches and Worker fixes. /healthz omits scheme, host, username, and password length.</p>\n<h3 id=\"bug-fixes\">Bug Fixes</h3>\n<ul>\n<li>\n<p>start the Worker during isolate startup (#248)</p>\n</li>\n<li>\n<p>report bin store health and keep a failed connect in process (#249)</p>\n</li>\n<li>\n<p>drop every second socket error that has no listener (#250)</p>\n</li>\n<li>\n<p>Add redacted URI diagnostics to /healthz (#254)</p>\n</li>\n<li>\n<p>open one MongoDB client per Worker request to stop 1101s on bins (#255)</p>\n</li>\n<li>\n<p>pin Node 24.22.1 and patched undici (#256)</p>\n</li>\n<li>\n<p>force miniflare's sharp pin to 0.35.5 (#257)</p>\n</li>\n<li>\n<p>bump zod to 4.6.7 for GHSA-mrhx-c7xc-m3w5 (#258)</p>\n</li>\n<li>\n<p>security - markdown-it 15.0.3 (CVE-2026-111758) (#260)</p>\n</li>\n<li>\n<p>omit scheme and URI identity from /healthz (#262)</p>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\r\n <span class=\"hljs-attr\">\"status\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">\"ok\"</span><span class=\"hljs-punctuation\">,</span>\r\n <span class=\"hljs-attr\">\"bins\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\r\n <span class=\"hljs-attr\">\"connected\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-literal\"><span class=\"hljs-keyword\">true</span></span><span class=\"hljs-punctuation\">,</span>\r\n <span class=\"hljs-attr\">\"uriPresent\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-literal\"><span class=\"hljs-keyword\">true</span></span><span class=\"hljs-punctuation\">,</span>\r\n <span class=\"hljs-attr\">\"uri\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\r\n <span class=\"hljs-attr\">\"atCount\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-number\">1</span><span class=\"hljs-punctuation\">,</span>\r\n <span class=\"hljs-attr\">\"passwordHasPercent\"</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-literal\"><span class=\"hljs-keyword\">false</span></span>\r\n <span class=\"hljs-punctuation\">}</span>\r\n <span class=\"hljs-punctuation\">}</span>\r\n<span class=\"hljs-punctuation\">}</span>\n</code></pre>\n</li>\n</ul>\n<h3 id=\"documentation\">Documentation</h3>\n<ul>\n<li>remove the empty vars note from the Cloudflare page (#253)</li>\n</ul>\n<h3 id=\"internal\">Internal</h3>\n<ul>\n<li>point worker URI fixtures at example.invalid (#251)</li>\n<li>declare empty Worker vars in Wrangler (#252)</li>\n<li>list LICENSE in the published package files (#259)</li>\n</ul>\n<h3 id=\"contributors\">Contributors</h3>\n<ul>\n<li>@jaredwray (13)</li>\n<li>@cursoragent (1)</li>\n</ul>\n<h3 id=\"full-list-of-changes\">Full List of Changes</h3>\n<ul>\n<li>fix: restore Cloudflare Worker routes after the v3.0.0 startup crash by @jaredwray in #248</li>\n<li>Add GET /healthz and redact bin store errors by @jaredwray in #249</li>\n<li>Use example.invalid for worker test URI fixtures by @jaredwray in #251</li>\n<li>Drop every second socket error that has no listener by @jaredwray in #250</li>\n<li>Declare empty Worker vars in Wrangler by @jaredwray in #252</li>\n<li>Remove the empty vars note from the Cloudflare page by @jaredwray in #253</li>\n<li>Add redacted URI diagnostics to /healthz by @jaredwray in #254</li>\n<li>fix: open one MongoDB client per Worker request to stop 1101s on bins by @jaredwray in #255</li>\n<li>security: pin Node 24.22.1 and patched undici by @jaredwray in #256</li>\n<li>fix: security - upgrade sharp to 0.35.5 (libheif RCE) by @jaredwray in #257</li>\n<li>fix: security - bump zod to 4.6.7 (GHSA-mrhx-c7xc-m3w5) by @jaredwray in #258</li>\n<li>chore: list LICENSE in the published package files by @jaredwray in #259</li>\n<li>fix: security - markdown-it 15.0.3 (CVE-2026-111758) by @jaredwray in #260</li>\n<li>fix: omit scheme and URI identity from /healthz by @jaredwray in #262</li>\n</ul>\n<p><strong>Full diff:</strong> <a href=\"https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1\">https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1</a></p>",
|
|
16
|
+
"content_text": "## @jaredwray/mockhttp@3.0.1 — 2026-10-28\r\n\r\nSecurity patches and Worker fixes. /healthz omits scheme, host, username, and password length.\r\n\r\n### Bug Fixes\r\n- start the Worker during isolate startup (#248)\r\n- report bin store health and keep a failed connect in process (#249)\r\n- drop every second socket error that has no listener (#250)\r\n- Add redacted URI diagnostics to /healthz (#254)\r\n- open one MongoDB client per Worker request to stop 1101s on bins (#255)\r\n- pin Node 24.22.1 and patched undici (#256)\r\n- force miniflare's sharp pin to 0.35.5 (#257)\r\n- bump zod to 4.6.7 for GHSA-mrhx-c7xc-m3w5 (#258)\r\n- security - markdown-it 15.0.3 (CVE-2026-111758) (#260)\r\n- omit scheme and URI identity from /healthz (#262)\r\n\r\n ```json\r\n {\r\n \"status\": \"ok\",\r\n \"bins\": {\r\n \"connected\": true,\r\n \"uriPresent\": true,\r\n \"uri\": {\r\n \"atCount\": 1,\r\n \"passwordHasPercent\": false\r\n }\r\n }\r\n }\r\n ```\r\n\r\n### Documentation\r\n- remove the empty vars note from the Cloudflare page (#253)\r\n\r\n### Internal\r\n- point worker URI fixtures at example.invalid (#251)\r\n- declare empty Worker vars in Wrangler (#252)\r\n- list LICENSE in the published package files (#259)\r\n\r\n### Contributors\r\n- @jaredwray (13)\r\n- @cursoragent (1)\r\n\r\n### Full List of Changes\r\n- fix: restore Cloudflare Worker routes after the v3.0.0 startup crash by @jaredwray in #248\r\n- Add GET /healthz and redact bin store errors by @jaredwray in #249\r\n- Use example.invalid for worker test URI fixtures by @jaredwray in #251\r\n- Drop every second socket error that has no listener by @jaredwray in #250\r\n- Declare empty Worker vars in Wrangler by @jaredwray in #252\r\n- Remove the empty vars note from the Cloudflare page by @jaredwray in #253\r\n- Add redacted URI diagnostics to /healthz by @jaredwray in #254\r\n- fix: open one MongoDB client per Worker request to stop 1101s on bins by @jaredwray in #255\r\n- security: pin Node 24.22.1 and patched undici by @jaredwray in #256\r\n- fix: security - upgrade sharp to 0.35.5 (libheif RCE) by @jaredwray in #257\r\n- fix: security - bump zod to 4.6.7 (GHSA-mrhx-c7xc-m3w5) by @jaredwray in #258\r\n- chore: list LICENSE in the published package files by @jaredwray in #259\r\n- fix: security - markdown-it 15.0.3 (CVE-2026-111758) by @jaredwray in #260\r\n- fix: omit scheme and URI identity from /healthz by @jaredwray in #262\r\n\r\n**Full diff:** [https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1](https://github.com/jaredwray/mockhttp/compare/v3.0.0...v3.0.1)",
|
|
17
|
+
"tags": [
|
|
18
|
+
"Release"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
8
21
|
{
|
|
9
22
|
"id": "v3-0-0",
|
|
10
23
|
"title": "v3.0.0",
|
|
@@ -381,19 +394,6 @@
|
|
|
381
394
|
"tags": [
|
|
382
395
|
"Release"
|
|
383
396
|
]
|
|
384
|
-
},
|
|
385
|
-
{
|
|
386
|
-
"id": "v0-2-1",
|
|
387
|
-
"title": "v0.2.1",
|
|
388
|
-
"url": "https://mockhttp.org/changelog/v0-2-1/",
|
|
389
|
-
"date_published": "2024-12-13",
|
|
390
|
-
"date_modified": "2024-12-13",
|
|
391
|
-
"summary": "<ul>\n<li>moving to logging on a single line by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/15\">https://github.com/jaredwray/mockhttp/pull/15</a></li>\n<li>upgrading scalar to 1.25.82 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/16\">https://github.com/jaredwray/mockhttp/pull/16</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/mockhttp/compare/v0.2.0...v0.2.1\">https://github.com/jaredwray/mockhttp/compare/v0.2.0...v0.2.1</a></p>",
|
|
392
|
-
"content_html": "<h2 id=\"whats-changed\">What's Changed</h2>\n<ul>\n<li>moving to logging on a single line by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/15\">https://github.com/jaredwray/mockhttp/pull/15</a></li>\n<li>upgrading scalar to 1.25.82 by @jaredwray in <a href=\"https://github.com/jaredwray/mockhttp/pull/16\">https://github.com/jaredwray/mockhttp/pull/16</a></li>\n</ul>\n<p><strong>Full Changelog</strong>: <a href=\"https://github.com/jaredwray/mockhttp/compare/v0.2.0...v0.2.1\">https://github.com/jaredwray/mockhttp/compare/v0.2.0...v0.2.1</a></p>",
|
|
393
|
-
"content_text": "## What's Changed\r\n* moving to logging on a single line by @jaredwray in [https://github.com/jaredwray/mockhttp/pull/15](https://github.com/jaredwray/mockhttp/pull/15)\r\n* upgrading scalar to 1.25.82 by @jaredwray in [https://github.com/jaredwray/mockhttp/pull/16](https://github.com/jaredwray/mockhttp/pull/16)\r\n\r\n\r\n**Full Changelog**: [https://github.com/jaredwray/mockhttp/compare/v0.2.0...v0.2.1](https://github.com/jaredwray/mockhttp/compare/v0.2.0...v0.2.1)",
|
|
394
|
-
"tags": [
|
|
395
|
-
"Release"
|
|
396
|
-
]
|
|
397
397
|
}
|
|
398
398
|
]
|
|
399
399
|
}
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - Bins</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"Bins","description":"","url":"https://mockhttp.org/docs/bins/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"Bins","description":"","url":"https://mockhttp.org/docs/bins/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -312,6 +312,7 @@ here is stored against bin <code>:id</code></li>
|
|
|
312
312
|
<ul>
|
|
313
313
|
<li><a href="#quick-start">Quick Start</a></li>
|
|
314
314
|
<li><a href="#endpoints">Endpoints</a></li>
|
|
315
|
+
<li><a href="#storage-health">Storage health</a></li>
|
|
315
316
|
<li><a href="#end-to-end-webhook-debugging-example">End-to-End Webhook Debugging Example</a></li>
|
|
316
317
|
<li><a href="#captured-request-shape">Captured Request Shape</a></li>
|
|
317
318
|
<li><a href="#body-encoding-examples">Body Encoding Examples</a>
|
|
@@ -401,8 +402,67 @@ curl http://localhost:3000/bins/abc123def456/requests
|
|
|
401
402
|
<td><code>/b/:id</code> and <code>/b/:id/*</code></td>
|
|
402
403
|
<td>Capture requests sent to a bin</td>
|
|
403
404
|
</tr>
|
|
405
|
+
<tr>
|
|
406
|
+
<td>GET</td>
|
|
407
|
+
<td><code>/healthz</code></td>
|
|
408
|
+
<td>Check whether bin storage is reachable</td>
|
|
409
|
+
</tr>
|
|
404
410
|
</tbody>
|
|
405
411
|
</table>
|
|
412
|
+
<h2 id="storage-health">Storage health</h2>
|
|
413
|
+
<p><code>GET /healthz</code> is on the Node server and the Worker. This route does not create a bin.</p>
|
|
414
|
+
<p>A memory store sends HTTP 200:</p>
|
|
415
|
+
<pre><code class="hljs language-json"><span class="hljs-punctuation">{</span>
|
|
416
|
+
<span class="hljs-attr">"status"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"ok"</span><span class="hljs-punctuation">,</span>
|
|
417
|
+
<span class="hljs-attr">"bins"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
|
|
418
|
+
<span class="hljs-attr">"store"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"memory"</span><span class="hljs-punctuation">,</span>
|
|
419
|
+
<span class="hljs-attr">"connected"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>
|
|
420
|
+
<span class="hljs-attr">"latencyMs"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>
|
|
421
|
+
<span class="hljs-attr">"uriPresent"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span>
|
|
422
|
+
<span class="hljs-punctuation">}</span>
|
|
423
|
+
<span class="hljs-punctuation">}</span>
|
|
424
|
+
</code></pre>
|
|
425
|
+
<p>The Worker uses MongoDB when <code>MONGODB_URI</code> is set. The check opens a client, sends an admin ping, and then closes the client. The timeout is short. The check does not keep the client after a failure.</p>
|
|
426
|
+
<p>A successful ping sends HTTP 200. <code>store</code> is <code>mongo</code>.</p>
|
|
427
|
+
<p>A failed ping sends HTTP 503:</p>
|
|
428
|
+
<pre><code class="hljs language-json"><span class="hljs-punctuation">{</span>
|
|
429
|
+
<span class="hljs-attr">"status"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"error"</span><span class="hljs-punctuation">,</span>
|
|
430
|
+
<span class="hljs-attr">"bins"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
|
|
431
|
+
<span class="hljs-attr">"store"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"mongo"</span><span class="hljs-punctuation">,</span>
|
|
432
|
+
<span class="hljs-attr">"connected"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>
|
|
433
|
+
<span class="hljs-attr">"uriPresent"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">true</span></span><span class="hljs-punctuation">,</span>
|
|
434
|
+
<span class="hljs-attr">"uri"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
|
|
435
|
+
<span class="hljs-attr">"length"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">78</span><span class="hljs-punctuation">,</span>
|
|
436
|
+
<span class="hljs-attr">"leadingWhitespace"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>
|
|
437
|
+
<span class="hljs-attr">"trailingWhitespace"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>
|
|
438
|
+
<span class="hljs-attr">"newline"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>
|
|
439
|
+
<span class="hljs-attr">"wrappedQuotes"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span><span class="hljs-punctuation">,</span>
|
|
440
|
+
<span class="hljs-attr">"atCount"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">2</span><span class="hljs-punctuation">,</span>
|
|
441
|
+
<span class="hljs-attr">"passwordReserved"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">[</span><span class="hljs-string">"@"</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">,</span>
|
|
442
|
+
<span class="hljs-attr">"passwordHasPercent"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">false</span></span>
|
|
443
|
+
<span class="hljs-punctuation">}</span><span class="hljs-punctuation">,</span>
|
|
444
|
+
<span class="hljs-attr">"error"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
|
|
445
|
+
<span class="hljs-attr">"name"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"MongoParseError"</span><span class="hljs-punctuation">,</span>
|
|
446
|
+
<span class="hljs-attr">"message"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"Invalid connection string. Percent-encode reserved characters in the username and password (@ : / ? # [ ] $)."</span><span class="hljs-punctuation">,</span>
|
|
447
|
+
<span class="hljs-attr">"code"</span><span class="hljs-punctuation">:</span> <span class="hljs-literal"><span class="hljs-keyword">null</span></span>
|
|
448
|
+
<span class="hljs-punctuation">}</span>
|
|
449
|
+
<span class="hljs-punctuation">}</span>
|
|
450
|
+
<span class="hljs-punctuation">}</span>
|
|
451
|
+
</code></pre>
|
|
452
|
+
<p>A MongoDB result includes <code>bins.uri</code> on success and on failure. A memory result omits <code>bins.uri</code>. The response does not include the scheme, the host, the username, or the password length.</p>
|
|
453
|
+
<p><code>uri.passwordReserved</code> lists raw reserved characters in the password. The list is empty when the password has only reserved characters. <code>uri.passwordHasPercent</code> is true when the password contains <code>%</code>. The response does not contain the connection string or the password. The logs do not contain the connection string, the username, the password, or the host. <code>uriPresent</code> is a boolean.</p>
|
|
454
|
+
<p><code>Invalid connection string</code> is the driver text. MockHTTP adds the percent-encode hint only for that text or for <code>unescaped characters</code>. A DNS error stays a DNS error. <code>Invalid connection string</code> means that the URI has a second <code>@</code>. It also means that you did not encode a reserved character in the username or the password. Encode these characters:</p>
|
|
455
|
+
<ul>
|
|
456
|
+
<li><code>@</code> as <code>%40</code></li>
|
|
457
|
+
<li><code>:</code> as <code>%3A</code></li>
|
|
458
|
+
<li><code>/</code> as <code>%2F</code></li>
|
|
459
|
+
<li><code>?</code> as <code>%3F</code></li>
|
|
460
|
+
<li><code>#</code> as <code>%23</code></li>
|
|
461
|
+
<li><code>[</code> as <code>%5B</code></li>
|
|
462
|
+
<li><code>]</code> as <code>%5D</code></li>
|
|
463
|
+
<li><code>$</code> as <code>%24</code></li>
|
|
464
|
+
</ul>
|
|
465
|
+
<p>A correct <code>mongodb+srv://</code> URI does not fail at parse time. A DNS failure or a network failure has a different error name.</p>
|
|
406
466
|
<h2 id="end-to-end-webhook-debugging-example">End-to-End Webhook Debugging Example</h2>
|
|
407
467
|
<p>A complete walkthrough using curl:</p>
|
|
408
468
|
<pre><code class="hljs language-bash">BASE=http://localhost:3000
|
|
@@ -702,7 +762,7 @@ mock.<span class="hljs-property">bins</span> = <span class="hljs-keyword">new</s
|
|
|
702
762
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
703
763
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
704
764
|
</a>
|
|
705
|
-
<span class="footer__updated">updated: 2026-10-
|
|
765
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
706
766
|
</footer>
|
|
707
767
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
708
768
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - Configuration</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"Configuration","description":"","url":"https://mockhttp.org/docs/configuration/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"Configuration","description":"","url":"https://mockhttp.org/docs/configuration/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -544,7 +544,7 @@ GET /status/429/foo/bar
|
|
|
544
544
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
545
545
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
546
546
|
</a>
|
|
547
|
-
<span class="footer__updated">updated: 2026-10-
|
|
547
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
548
548
|
</footer>
|
|
549
549
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
550
550
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - MockHttp.org Live</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"MockHttp.org Live","description":"","url":"https://mockhttp.org/docs/hosted/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"MockHttp.org Live","description":"","url":"https://mockhttp.org/docs/hosted/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -318,7 +318,7 @@
|
|
|
318
318
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
319
319
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
320
320
|
</a>
|
|
321
|
-
<span class="footer__updated">updated: 2026-10-
|
|
321
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
322
322
|
</footer>
|
|
323
323
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
324
324
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - Cloudflare</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"Cloudflare","description":"Deploy MockHTTP as a Cloudflare Worker. Workers Assets serve the docs site, and the Worker handles mock API routes.","url":"https://mockhttp.org/docs/how-to-deploy/cloudflare/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"Cloudflare","description":"Deploy MockHTTP as a Cloudflare Worker. Workers Assets serve the docs site, and the Worker handles mock API routes.","url":"https://mockhttp.org/docs/how-to-deploy/cloudflare/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -345,7 +345,12 @@
|
|
|
345
345
|
</tr>
|
|
346
346
|
</tbody>
|
|
347
347
|
</table>
|
|
348
|
-
<p>The rate limiter key is the <code>cf-connecting-ip</code> header, then the first address in <code>x-forwarded-for</code>, then <code>unknown</code>. A limited request returns <code>429</code> with <code>retry-after: 60</code>. That limiter is shared across isolates
|
|
348
|
+
<p>The rate limiter key is the <code>cf-connecting-ip</code> header, then the first address in <code>x-forwarded-for</code>, then <code>unknown</code>. A limited request returns <code>429</code> with <code>retry-after: 60</code>. That limiter is shared across isolates.</p>
|
|
349
|
+
<p>Bins stay in memory in the isolate when <code>MONGODB_URI</code> is not set. A bin from one request can be absent when a different isolate handles the next request. When <code>MONGODB_URI</code> is set, bins are stored in MongoDB. Each request opens its own client on its first bin operation and closes it after the response, through <code>ctx.waitUntil</code>. No client is shared between requests: workerd rejects I/O on a socket that a different request opened, and a shared client made bin requests fail with error 1101. It does not connect while the isolate starts. Each bin request therefore pays one connection setup, which is a few round trips to Atlas.</p>
|
|
350
|
+
<p>Percent-encode reserved characters in the username and the password. <code>@</code> is <code>%40</code>. An unencoded <code>@</code> makes the driver throw <code>Invalid connection string</code> before it contacts Atlas.</p>
|
|
351
|
+
<p><code>GET /healthz</code> reports the bin store. A successful admin ping returns HTTP 200 and <code>bins.connected: true</code>. A failed ping returns HTTP 503 with the driver error name, a redacted message, and a code. The body has <code>uriPresent</code> (boolean). It does not have the scheme. On the Node server, this route reports the memory store.</p>
|
|
352
|
+
<p>When <code>MONGODB_URI</code> is set, <code>bins.uri</code> has the URI length and the <code>@</code> count. It also has flags for whitespace, a newline, and quote marks. It does not have the host, the username, or the password length. The body does not have the password or the full URI.</p>
|
|
353
|
+
<p>The percent-encode hint is added only for <code>Invalid connection string</code> or <code>unescaped characters</code>. A DNS error keeps the driver text. <code>uri.passwordReserved</code> is empty when the password has only reserved characters. Worker logs still omit the URI, the username, the password, and the host.</p>
|
|
349
354
|
<p>Taps are a library API (<code>mock.taps.inject</code>). They have no HTTP routes, so a deployed Worker has no way to inject one.</p>
|
|
350
355
|
<p>Assets are checked before the Worker. A file under <code>site/dist</code> (the docs site, favicon, logos) is served as a static asset. A path that is not a file, such as <code>/get</code> or <code>/post</code>, is handled by the Worker.</p>
|
|
351
356
|
<h2 id="deploy-your-own-worker">Deploy your own Worker</h2>
|
|
@@ -385,7 +390,7 @@ npx wrangler@4.127.0 deploy
|
|
|
385
390
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
386
391
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
387
392
|
</a>
|
|
388
|
-
<span class="footer__updated">updated: 2026-10-
|
|
393
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
389
394
|
</footer>
|
|
390
395
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
391
396
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - Docker</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"Docker","description":"Run MockHTTP from the jaredwray/mockhttp image, with Docker Compose, or by building the image from this repository.","url":"https://mockhttp.org/docs/how-to-deploy/docker/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"Docker","description":"Run MockHTTP from the jaredwray/mockhttp image, with Docker Compose, or by building the image from this repository.","url":"https://mockhttp.org/docs/how-to-deploy/docker/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -399,7 +399,7 @@ docker run -d -p 3000:3000 jaredwray/mockhttp
|
|
|
399
399
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
400
400
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
401
401
|
</a>
|
|
402
|
-
<span class="footer__updated">updated: 2026-10-
|
|
402
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
403
403
|
</footer>
|
|
404
404
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
405
405
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - Wasmer</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"Wasmer","description":"Deploy the MockHTTP Node.js server to Wasmer Edge with app.yaml, Anybuild, and wasmer deploy.","url":"https://mockhttp.org/docs/how-to-deploy/wasmer/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"Wasmer","description":"Deploy the MockHTTP Node.js server to Wasmer Edge with app.yaml, Anybuild, and wasmer deploy.","url":"https://mockhttp.org/docs/how-to-deploy/wasmer/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -360,7 +360,7 @@
|
|
|
360
360
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
361
361
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
362
362
|
</a>
|
|
363
|
-
<span class="footer__updated">updated: 2026-10-
|
|
363
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
364
364
|
</footer>
|
|
365
365
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
366
366
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - HTTPS and HTTP/2</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"HTTPS and HTTP/2","description":"","url":"https://mockhttp.org/docs/https/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"HTTPS and HTTP/2","description":"","url":"https://mockhttp.org/docs/https/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -531,7 +531,7 @@
|
|
|
531
531
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
532
532
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
533
533
|
</a>
|
|
534
|
-
<span class="footer__updated">updated: 2026-10-
|
|
534
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
535
535
|
</footer>
|
|
536
536
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
537
537
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - Getting Started</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"Getting Started","description":"","url":"https://mockhttp.org/docs/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"Getting Started","description":"","url":"https://mockhttp.org/docs/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -375,7 +375,7 @@
|
|
|
375
375
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
376
376
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
377
377
|
</a>
|
|
378
|
-
<span class="footer__updated">updated: 2026-10-
|
|
378
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
379
379
|
</footer>
|
|
380
380
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
381
381
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - Library API</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"Library API","description":"","url":"https://mockhttp.org/docs/library/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"Library API","description":"","url":"https://mockhttp.org/docs/library/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -447,7 +447,7 @@
|
|
|
447
447
|
<h4 id="async-registerimageroutesfastifyinstance"><code>async registerImageRoutes(fastifyInstance?)</code></h4>
|
|
448
448
|
<p>Register image routes (jpeg, png, svg, webp) with content negotiation support.</p>
|
|
449
449
|
<h4 id="async-registerbinroutesfastifyinstance"><code>async registerBinRoutes(fastifyInstance?)</code></h4>
|
|
450
|
-
<p>Register the request bin routes
|
|
450
|
+
<p>Register the request bin routes. Management is at <code>/bins</code> and capture is at <code>/b/:id</code>. <code>GET /healthz</code> reports whether bin storage is reachable.</p>
|
|
451
451
|
<h2 id="bins-request-capture">Bins (Request Capture)</h2>
|
|
452
452
|
<p>Use <code>mockHttp.bins</code> to control request bins. See <a href="#request-bins">Request Bins</a> for usage examples.</p>
|
|
453
453
|
<h3 id="binscreatebin"><code>bins.createBin()</code></h3>
|
|
@@ -549,7 +549,7 @@
|
|
|
549
549
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
550
550
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
551
551
|
</a>
|
|
552
|
-
<span class="footer__updated">updated: 2026-10-
|
|
552
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
553
553
|
</footer>
|
|
554
554
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
555
555
|
<script>
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
</script>
|
|
36
36
|
<title>MockHTTP - Taps</title>
|
|
37
37
|
<script type="application/ld+json">
|
|
38
|
-
{"@context":"https://schema.org","@type":"TechArticle","headline":"Taps","description":"","url":"https://mockhttp.org/docs/taps/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-
|
|
38
|
+
{"@context":"https://schema.org","@type":"TechArticle","headline":"Taps","description":"","url":"https://mockhttp.org/docs/taps/","publisher":{"@type":"Organization","name":"MockHTTP"},"dateModified":"2026-10-28","keywords":[]}
|
|
39
39
|
</script>
|
|
40
40
|
</head>
|
|
41
41
|
|
|
@@ -481,7 +481,7 @@ mock.<span class="hljs-property">taps</span>.<span class="hljs-title function_">
|
|
|
481
481
|
<a href="https://docula.org/" target="_blank" rel="noopener noreferrer" class="footer__link" aria-label="Docula">
|
|
482
482
|
<svg class="footer__bat" xmlns="http://www.w3.org/2000/svg" viewBox="70 110 360 205" fill="currentColor"><path d="M420,173c-16.76-18-72.78-36.65-131.59-30.58A160.15,160.15,0,0,0,269,120.55c-3.78,4.52-11.15,9.45-19,9.45s-15.23-4.93-19-9.45a160.15,160.15,0,0,0-19.4,21.83C152.78,136.31,96.76,154.94,80,173c48.86,5.86,79.5,34.09,79.5,72.06,52.37,0,77,28,90.5,59.94C263.54,273,288.13,245,340.5,245,340.5,207,371.14,178.8,420,173Z"/><circle cx="239.19" cy="145.36" r="3.32" fill="#fff"/><circle cx="260.81" cy="145.36" r="3.32" fill="#fff"/></svg>
|
|
483
483
|
</a>
|
|
484
|
-
<span class="footer__updated">updated: 2026-10-
|
|
484
|
+
<span class="footer__updated">updated: 2026-10-28</span>
|
|
485
485
|
</footer>
|
|
486
486
|
<script src="/css/highlight/highlight.min.js"></script>
|
|
487
487
|
<script>
|