summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2026-10-07verifier, utils: fix verification failure when page contains invalid URLeltrac
- 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
2026-10-07receiver, verifier, retriever, storage: URL normalizationeltrac
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 -> match-content-types, with a higher order function and clearer description retriever, storage: use url= instead of = when comparing urls
2026-10-06core, processor: refactor startup; graceful shutdowneltrac
- implement a functional rewrite of core.clj, no more `def`, no more states. callable from an REPL - handle SIGINT/SIGTERM and perform graceful shutdown - print clear logs when starting up and shutting down
2026-10-04API: remove typed APIeltrac
- /api/likes removed - /api/replies removed - /api/reposts removed
2026-10-04fe: new frontend in cljs, pluggable #8eltrac
- remove deprecated weepinbell.ui - create a ClojureScript project named bellsprout - use vanilla cljs and Pico CSS - can find and send webmentions in/to weepinbell - display webmentions in cards - <noscript> reminder - embed frontend in weepinbell - opt-in, weepinbell can work without a frontend - serve static files from disk for now; might support a simple reverse proxy in the future - test frontend route (OK when enabled; 404 when disabled) fe: ?show param that shows webmentions when set to true equivalent of clicking "Find" button manually
2026-10-04mf.searcher: improve backward-compatibility of microformats reductioneltrac
2026-10-04retriever: fix /api/mentions not returning valid dataeltrac
2026-09-29retriever: fix /api/mentions always returning 404eltrac
2026-09-29retriever: fix #45eltrac
1. If webmention does not exist, data is {:webmention nil} rather than nil. So it always assume webmention is found. It should check further. 2. The status code is 400 rather than 404.
2026-09-27webhook: fix AssertionError when event keys are not complete in user's configeltrac
2026-09-24test: improve test coverage #28eltrac
- remove reducer spec warninns, test spec before compiling instead. - cover more forms of webhook.clj, webhook_presets.clj, microformats/reducer.clj, microformats/searcher.clj, http/downloader.clj - remove unused code from config.clj - format all tests
2026-09-24microformats.reducer: fallback to same-level h-card if h-entry lacks author ↵eltrac
property
2026-09-24microformats.searcher: improve robustness and accuracyeltrac
- use-items now returns nil for non-collection or empty input - use-prop gets the first element of property if it's a plain map - search-photo correctly fallback to org photo when author photo is nil
2026-09-23http.downloader: report file size on disk, not via http header Content-Lengtheltrac
2026-09-23http.downloader: fix corrupted/empty file not deleted after download failedeltrac
2026-09-23webhook: fix not identifying custom functions as functionseltrac
2026-09-23processor: fix not finding photo to proxyeltrac
2026-09-23retriever, API: allow user to turn off reducer with `?microformats=raw`eltrac
2026-09-23retriever, microformats: fix webmention being null in API responseseltrac
- remove deprecated microformats.wrapper - add microformats.searcher and microformats.reducer
2026-09-23processor: refactor processor; replace mf2j with mf2cljeltrac
- replace mf2j with mf2clj - remove utils.clj completely - refactored processor, use Chain of Responsibilities pattern and pass around maps to reuse data (so we don't have to make a separate HTTP request just to parse microformats, etc.) - test: add more test cases to verifier test - test: add basic test cases to all processing steps - add more logging to each processing steps. good for debugging.
2026-09-20fix #36eltrac
2026-09-19processor, webhook: send webhooks with customizable payloadeltrac
- processor will call hook functions with webmention data - refactor webhook.clj massively - add dynamic parameter substitution for urls, e.g. {source} {target} {event}...... - add config option :webhook-request, a function with parameters [hook, data] that returns a map (resembling {:headers ... :body ...}). webhook.clj uses this function to generate payload. - allow map besids URL string in config option :webhook. if it's a URL, sends webhook request to it with payload generated by :webhook-request; if it's a map, it should be like {:url ... :request-fn ...}, which specifies a payload generator. - add request-fn preset :ntfy
2026-09-18utils.url: valid-http-url? should return false for non-string typeseltrac
2026-09-18docs: add missing docstrings and mark certain components as deprecatedeltrac
2026-09-17fix #34eltrac
2026-09-16logs: print server start message; print data when it's corruptedeltrac
2026-09-16receiver, mf, utils: bug fixeseltrac
microformats: fix assertion error :post and :pre hooks enforce spec but for now we just need to log these issues and analyze them. no need to throw exception for that. --- receiver: fix NullPointerException when source/target is nil when an incomplete webmention request (e.g. only source is included in POST parameters), it throws Exception: java.lang.NullPointerException: Cannot invoke "Object.toString()" because "s" is null this is because `remove-anchor` (which will soon be replaced with weepinbell.utils.url/normalize) did not check if `url` is string or nil. --- utils: fix incorrectly derefing a map
2026-09-16wrapper, storage, mf: add spec check and improve project structureeltrac
wrapper: use spec to check webmention data before writing to storage warn when data does not meet spec (corrupted). for now we're not dealing with corruption, just collect logs and analyze. microformats: use spec to validate data and warn if it's in bad form microformats: move parsers/wrappers to one sub-directory storage: move weepinbell.spec to weepinbell.storage.spec
2026-09-16style: format the codebaseeltrac
starting from now, every commit should be cljfmt-fixed
2026-09-15verifier: use error value instead of catching Exceptionseltrac
with new http client, all Exceptions are caught internally and returned as value. there's no need catching Exceptions in verifier fix
2026-09-15httpclient, webhook, verifier: add weepinbell.http.client to wrap ↵eltrac
org.httpkit.client comment
2026-09-14processor, verifier, webhook: tidy up log msg/level; improve code styleeltrac
processor: tidy up log msg and level; improve code style - all messages start with a lower-case letter - all webmention-related logging contains first 8-digit of its id - use WARN level when something is deleted, not INFO - use WARN level when exceptional cases happen, not ERROR - get rid of emojis in log messages utils: digest-short function for logging verifier: tidy up log messages; improve code style - use `cond` instead of nested `if`s - same message format as processor's logs webhook: tidy up log messages; send webhooks robustly - use same logging formats as processor and verifier - handle error, 4xx, 5xx status and log them - move logging inside webhook module, away from core.clj
2026-09-11fix #22eltrac
1. nil guard `status` 2. upgrade `http-kit` to fix SNI issue 3. match Content-Type correctly
2026-09-11fix #13eltrac
Instead of exit, it should create the data file. The previous approach cause issues when testing and building.
2026-09-11feed, receiver, wrapper: replace MD5 \w SHA-256eltrac
also refactored weepinbell.utils.digest. business logic no longer depend on a concrete algorithm like SHA-256 or MD5, it's just a `digest` function whose defaults can be replaced anytime.
2026-09-11fix #13eltrac
2026-09-11refactor(receiver, webhook, utils): replace commons validatoreltrac
used java.net to create a small validator that passes the test refactor: rename validator to url, and move other url funcs here
2026-09-11refactor(verifier, utils, webhook): replace hato with http-kiteltrac
since http-kit handle both server and client, hato as a client can be replaced
2026-09-11refactor(core): replace jetty-adapter with http-kiteltrac
2026-09-11refactor(receiver, wrapper, feed): replace md5-hash dependency #9eltrac
use Java introp instead of cljc-md5, which is heavy on dependencies.
2026-09-10refactor(verifier, webhook): replace clj-http with hato #9eltrac
2026-09-10test(storage, spec): add conformity check before loading storage; add spec ↵eltrac
and test case #7
2026-05-19fix: same URL with different anchor mistaken as differenteltrac
test(receiver): URL anchor removal test fix: not putting the correct wm object in queue after anchor removal
2026-05-12chore: remove unused dependency and functionseltrac
2026-05-12fix: uncomment get-config functioneltrac
apparently we need to in tests
2026-05-12refactor: move wmc declaration to core.cljeltrac
2026-05-12feat: port is now configurable in config fileeltrac
2026-05-12refactor: clean up core.cljeltrac
2026-05-12refactor(storage): make storage vtable in its nseltrac
2026-05-12refactor(storage): do not depend on config directlyeltrac