<feed xmlns='http://www.w3.org/2005/Atom'>
<title>weepinbell/src/weepinbell/utils, branch master</title>
<subtitle>A Webmention receiver written in Clojure</subtitle>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/'/>
<entry>
<title>utils.digest: remove unused code</title>
<updated>2026-10-30T03:49:45+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-30T03:49:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=ec259f220a95180865fb87f6178d93eb250f5dbb'/>
<id>ec259f220a95180865fb87f6178d93eb250f5dbb</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>all: use JF2 as a single source of truth, compile microformats/JSON-LD/&lt;meta&gt; to JF2 (#80)</title>
<updated>2026-10-29T11:42:50+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-29T11:42:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=573e5f513387ebd34ad9df4b7fe4dc83d7323c8d'/>
<id>573e5f513387ebd34ad9df4b7fe4dc83d7323c8d</id>
<content type='text'>
closes #75

This is a large squash commit. For details, see https://codeberg.org/eltrac/weepinbell/pulls/80
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
closes #75

This is a large squash commit. For details, see https://codeberg.org/eltrac/weepinbell/pulls/80
</pre>
</div>
</content>
</entry>
<entry>
<title>style: cljfmt everything</title>
<updated>2026-10-13T13:27:29+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-13T13:27:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=3989bf6fbbb242ad5bd6a1d1f91f70a6a222f8e2'/>
<id>3989bf6fbbb242ad5bd6a1d1f91f70a6a222f8e2</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>wrapper: fix not downloading photo with relative urls</title>
<updated>2026-10-13T09:19:44+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-13T09:19:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=5d851c82f9575f1709ddeb559c48f9daad449bbd'/>
<id>5d851c82f9575f1709ddeb559c48f9daad449bbd</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>utils.url: fix not removing trailing slash of a root path URL</title>
<updated>2026-10-13T06:59:21+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-13T06:59:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=fdb8d750ee5ce2767d0368686200b82b880b27c1'/>
<id>fdb8d750ee5ce2767d0368686200b82b880b27c1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>proceesor, storage: better error handling; no interrupting pipeline</title>
<updated>2026-10-11T10:00:32+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-11T10:00:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=b3c915d33a67f8063ffb4ef8895523de47c9305c'/>
<id>b3c915d33a67f8063ffb4ef8895523de47c9305c</id>
<content type='text'>
- print clear stack trace using timbre when capturing exceptions
- don't pass nil to url/normalize; if url/normalize gets a nil, instead
of NPE, it now returns an empty string
- capture exceptions in processor pipeline to keep it from dying
- http.downloader now checks response status instead of blindly
downloading anything
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- print clear stack trace using timbre when capturing exceptions
- don't pass nil to url/normalize; if url/normalize gets a nil, instead
of NPE, it now returns an empty string
- capture exceptions in processor pipeline to keep it from dying
- http.downloader now checks response status instead of blindly
downloading anything
</pre>
</div>
</content>
</entry>
<entry>
<title>test, verifier, utils: fix failed tests</title>
<updated>2026-10-07T09:18:06+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-07T09:18:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=ac5d88fae0f64609b522bd272587e9d98ca59a16'/>
<id>ac5d88fae0f64609b522bd272587e9d98ca59a16</id>
<content type='text'>
- some namespaces tests require did not get renamed
- url/extract might throw AssertionError if input contains non-HTTP(S)
urls. it should not check schemes.
- verifier doesn't need to filter non-HTTP(S) urls since they will
return false anyway, and plus it makes localhost urls in tests fail
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- some namespaces tests require did not get renamed
- url/extract might throw AssertionError if input contains non-HTTP(S)
urls. it should not check schemes.
- verifier doesn't need to filter non-HTTP(S) urls since they will
return false anyway, and plus it makes localhost urls in tests fail
</pre>
</div>
</content>
</entry>
<entry>
<title>verifier, utils: fix verification failure when page contains invalid URL</title>
<updated>2026-10-07T08:11:04+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-07T08:11:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=f356729a846da50c71d1fd3ce98db88fa3a3976b'/>
<id>f356729a846da50c71d1fd3ce98db88fa3a3976b</id>
<content type='text'>
- URISyntaxException was not caught in url/normalize, causing
normalization failure which leads to verification failure when there is
one invalid URL, even though valid URL exists
- skip non-HTTP(S) urls when verifying
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- URISyntaxException was not caught in url/normalize, causing
normalization failure which leads to verification failure when there is
one invalid URL, even though valid URL exists
- skip non-HTTP(S) urls when verifying
</pre>
</div>
</content>
</entry>
<entry>
<title>receiver, verifier, retriever, storage: URL normalization</title>
<updated>2026-10-07T07:30:20+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-10-06T12:36:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=87e57727ebfdb51d970f65a1d332aef1cab7c8c9'/>
<id>87e57727ebfdb51d970f65a1d332aef1cab7c8c9</id>
<content type='text'>
utils: add url utilities for accurate comparison

- add url/normalize taht reconstructs URL, strips unnecessary
components, reorders query string and ensures determinism
- add url/url= that uses url/normalize

receiver: normalize URLs before checking and putting in queue

- use url= and normalize from utils.url
- rename verify-request to check-request to avoid confusion with
verifier.clj

verifier: check if source includes target URL more accurately

- implement url/extract with robinst/autolink-java, which extracts a
vector a URLs from string
- check if source includes target by
  1. extracting all links from source body
  2. normalizing all links before comparing with target link (with url=
func)
- refactor verify-headers -&gt; match-content-types, with a higher order
function and clearer description

retriever, storage: use url= instead of = when comparing urls
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
utils: add url utilities for accurate comparison

- add url/normalize taht reconstructs URL, strips unnecessary
components, reorders query string and ensures determinism
- add url/url= that uses url/normalize

receiver: normalize URLs before checking and putting in queue

- use url= and normalize from utils.url
- rename verify-request to check-request to avoid confusion with
verifier.clj

verifier: check if source includes target URL more accurately

- implement url/extract with robinst/autolink-java, which extracts a
vector a URLs from string
- check if source includes target by
  1. extracting all links from source body
  2. normalizing all links before comparing with target link (with url=
func)
- refactor verify-headers -&gt; match-content-types, with a higher order
function and clearer description

retriever, storage: use url= instead of = when comparing urls
</pre>
</div>
</content>
</entry>
<entry>
<title>utils.url: valid-http-url? should return false for non-string types</title>
<updated>2026-09-18T06:12:20+00:00</updated>
<author>
<name>eltrac</name>
<email>hi@eltr.ac</email>
</author>
<published>2026-09-18T06:11:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.eltr.ac/weepinbell.git/commit/?id=41ad0b78bcac340d3b8640be30b9e6f2dcf9bf2b'/>
<id>41ad0b78bcac340d3b8640be30b9e6f2dcf9bf2b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
