@evanp/activitypub-bot 0.41.3 → 0.42.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/CHANGELOG.md ADDED
@@ -0,0 +1,1223 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on
6
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
7
+ and this project adheres to
8
+ [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
9
+
10
+ ## [Unreleased]
11
+
12
+ ## [0.42.1] - 2026-04-22
13
+
14
+ ### Added
15
+
16
+ - `CHANGELOG.md` in [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
17
+ format.
18
+ - `CODE_OF_CONDUCT.md`.
19
+ - `.markdownlint.json` with `MD024` set to `siblings_only` to allow repeated
20
+ `### Added`/`### Fixed` subheadings per release.
21
+
22
+ ### Fixed
23
+
24
+ - Flaky `retries distribution to a flaky recipient` test waits on
25
+ `distributor.onIdle()` instead of a fixed 2-second timeout.
26
+
27
+ ## [0.42.0] - 2026-04-22
28
+
29
+ ### Added
30
+
31
+ - `LitePubRelayClientBot`, a functional LitePub relay client.
32
+ - `BotContext.followers()` and `BotContext.following()` async iterators.
33
+ - Additional `BotContext` introspection methods to support relay client bots.
34
+ - `actorType` getter on `Bot` so subclasses can override their declared
35
+ actor type.
36
+ - `relayForwarding` option on `LitePubRelayServerBot`.
37
+ - Dedicated `LitePubRelayServerBot` separate from the Mastodon-style server.
38
+
39
+ ### Changed
40
+
41
+ - Relay client/server code split into Mastodon- and LitePub-specific classes.
42
+ - Lower retention for the duplicate-activity cache.
43
+ - Bumped `mysql2`, `nanoid`, and `redis` dependencies.
44
+
45
+ ## [0.41.3] - 2026-04-21
46
+
47
+ Hot patch on the `stable` branch.
48
+
49
+ ### Fixed
50
+
51
+ - Errors in `DistributionWorker` are now logged instead of swallowed.
52
+
53
+ ## [0.41.2] - 2026-04-13
54
+
55
+ ### Fixed
56
+
57
+ - `SafeAgent` calls `super.createConnection()` correctly.
58
+
59
+ ## [0.41.1] - 2026-04-13
60
+
61
+ ### Fixed
62
+
63
+ - `trust proxy 1` is interpreted as `1` (integer) so Express parses
64
+ `X-Forwarded-*` correctly.
65
+
66
+ ## [0.41.0] - 2026-04-13
67
+
68
+ ### Added
69
+
70
+ - `trust proxy` enabled in Express.
71
+
72
+ ## [0.40.2] - 2026-04-13
73
+
74
+ ### Fixed
75
+
76
+ - Correct `redis-url` handling in `activitypub-bot.js`.
77
+ - Missing `profile-file` option wired through.
78
+
79
+ ## [0.40.1] - 2026-04-13
80
+
81
+ ### Fixed
82
+
83
+ - Conflicts in integration tests.
84
+
85
+ ## [0.40.0] - 2026-04-13
86
+
87
+ ### Added
88
+
89
+ - Integration test before release.
90
+ - Optional Redis backend for rate-limit storage.
91
+ - Rate limiting on GET and POST with standard `RateLimit-*` headers.
92
+ - Request timeout, maximum size, and maximum redirects for outbound requests.
93
+ - Optional allowance of requests to private IP addresses (off by default).
94
+ - `SafeAgent` performs connection-time private-IP checks to protect
95
+ against SSRF in `ActivityPubClient`.
96
+
97
+ ### Changed
98
+
99
+ - Renamed `RateLimiter` to `RequestThrottler` to reflect its role more
100
+ accurately.
101
+ - `http:` URLs and private-IP hosts are rejected unless explicitly allowed.
102
+
103
+ ### Fixed
104
+
105
+ - Explicit handling of duplicate `resource` parameters on the Webfinger
106
+ endpoint.
107
+
108
+ ## [0.39.6] - 2026-04-11
109
+
110
+ ### Fixed
111
+
112
+ - Validate only minimal derived components when checking a signature.
113
+
114
+ ## [0.39.5] - 2026-04-11
115
+
116
+ ### Fixed
117
+
118
+ - Only include `@method` and `@target-uri` when signing.
119
+
120
+ ## [0.39.4] - 2026-04-10
121
+
122
+ ### Changed
123
+
124
+ - More debugging and error reporting in `ActivityPubClient`.
125
+
126
+ ## [0.39.3] - 2026-04-10
127
+
128
+ ### Changed
129
+
130
+ - Extra debug output for failed RFC 9421 signatures.
131
+
132
+ ## [0.39.2] - 2026-04-10
133
+
134
+ ### Fixed
135
+
136
+ - Send `Content-Digest` (not `Digest`) when signing with RFC 9421.
137
+
138
+ ## [0.39.1] - 2026-04-10
139
+
140
+ ### Fixed
141
+
142
+ - Corrected HTTP error code type in `DistributionWorker`.
143
+ - Logger attributes now include the class name.
144
+
145
+ ## [0.39.0] - 2026-04-10
146
+
147
+ ### Added
148
+
149
+ - RFC 9421 HTTP Message Signatures on outbound `POST` requests.
150
+ - Double-knock in `ActivityPubClient.get()`: fall back to draft-cavage-12
151
+ after an RFC 9421 auth failure and cache the per-origin policy.
152
+ - `SignaturePolicyStorage` backs the cached per-origin signature policy.
153
+ - Remote objects are resolved through a cached proxy when direct load fails.
154
+
155
+ ### Changed
156
+
157
+ - Prefer FEP-C180 problem details on error responses; fall back to
158
+ default problem details otherwise.
159
+ - `app` wires up `ActivityPubClient` with `messageSigner` and `policyStore`.
160
+
161
+ ## [0.38.4] - 2026-04-07
162
+
163
+ ### Fixed
164
+
165
+ - Pre-cache expired context `https://w3id.org/identity/v1`.
166
+
167
+ ## [0.38.3] - 2026-04-07
168
+
169
+ ### Added
170
+
171
+ - Pre-cached DID, security, and GoToSocial contexts.
172
+ - `X-Powered-By` header removed from responses.
173
+ - Structured logging replaces template-literal log lines.
174
+ - Request-ID propagated into per-request log entries.
175
+
176
+ ## [0.38.2] - 2026-04-07
177
+
178
+ ### Fixed
179
+
180
+ - Special-case two objects with the same ID where one is a
181
+ `CryptographicKey`, in `ActivityPubClient.#resolveObject`.
182
+
183
+ ## [0.38.1] - 2026-04-07
184
+
185
+ ### Removed
186
+
187
+ - `p-queue` dependency (no longer needed).
188
+
189
+ ## [0.38.0] - 2026-04-07
190
+
191
+ ### Added
192
+
193
+ - `X-Request-ID` middleware to track requests end-to-end.
194
+
195
+ ### Fixed
196
+
197
+ - Honor the `Date:` header in the `HTTPMessageSignature` validation branch.
198
+
199
+ ## [0.37.1] - 2026-04-04
200
+
201
+ ### Fixed
202
+
203
+ - Better handling of derived components in `HTTPMessageSignature`.
204
+
205
+ ## [0.37.0] - 2026-04-04
206
+
207
+ ### Added
208
+
209
+ - `HTTPMessageSignature` class implementing RFC 9421.
210
+ - Signature authenticator accepts RFC 9421 message signatures alongside
211
+ draft-cavage.
212
+ - `HTTPMessageSignature.created()` helper.
213
+ - `Digester.contentDigest()` for RFC 9421 `Content-Digest`.
214
+
215
+ ### Fixed
216
+
217
+ - Use a regex rather than naive `split()` when parsing `Signature-Input`.
218
+ - Pass full URL to `HTTPMessageSignature.validate()`.
219
+
220
+ ## [0.36.2] - 2026-04-02
221
+
222
+ ### Fixed
223
+
224
+ - Dropped the single-item `alsoKnownAs` value that was triggering a Misskey bug.
225
+
226
+ ## [0.36.1] - 2026-04-01
227
+
228
+ ### Fixed
229
+
230
+ - Cache headers correctly when the stored data is null.
231
+
232
+ ## [0.36.0] - 2026-03-31
233
+
234
+ ### Added
235
+
236
+ - `RemoteObjectCache` class with conditional refresh (`If-None-Match`,
237
+ `If-Modified-Since`).
238
+ - `ActivityPubClient` requires and uses `RemoteObjectCache`.
239
+ - `app` wires `RemoteObjectCache` into the client.
240
+
241
+ ### Changed
242
+
243
+ - Refactored common logic in `ActivityPubClient.#get()`.
244
+
245
+ ## [0.35.0] - 2026-03-30
246
+
247
+ ### Added
248
+
249
+ - `DistributionWorker`, `DeliveryWorker`, and `FanoutWorker` as
250
+ subclasses of a shared `Worker` base.
251
+ - `IntakeWorker` processes shared-inbox intake as a background job.
252
+ - Activity fan-out moved to its own queue.
253
+ - Command-line options documented in the README.
254
+
255
+ ### Changed
256
+
257
+ - Default page size raised from 20 to 256.
258
+ - Slightly better logging for follows.
259
+
260
+ ## [0.34.1] - 2026-03-29
261
+
262
+ ### Changed
263
+
264
+ - Dependency bumps only (no user-visible changes).
265
+
266
+ ## [0.34.0] - 2026-03-29
267
+
268
+ ### Added
269
+
270
+ - Workaround to accept `Follow` activities that omit addressing.
271
+ - Guess Mastodon's 300 requests / 5 minutes rate-limit policy when no
272
+ headers are present.
273
+ - Peek at current rate-limit values.
274
+
275
+ ### Changed
276
+
277
+ - `pendingFollowing` consistently stores activities, not actors.
278
+
279
+ ### Removed
280
+
281
+ - References to the unused `pendingFollowers` collection.
282
+
283
+ ### Fixed
284
+
285
+ - `ActivityHandler.#handleBlock()` checks for a pending follow activity
286
+ rather than a pending actor.
287
+ - Correct handling of pending follow activity during actor block.
288
+ - Test for unfollow correctly uses `pendingFollowing` in `BotContext`.
289
+
290
+ ## [0.33.0] - 2026-03-26
291
+
292
+ ### Added
293
+
294
+ - Webfinger lookup for profile pages.
295
+
296
+ ### Changed
297
+
298
+ - Grudgingly accept the default namespace for security-namespace
299
+ properties when fetching keys and actors.
300
+
301
+ ### Removed
302
+
303
+ - Dead code path for fetching remote public keys in `RemoteKeyStorage`.
304
+
305
+ ### Fixed
306
+
307
+ - Confirm the owner of a remote public key before trusting it.
308
+
309
+ ## [0.32.3] - 2026-03-24
310
+
311
+ ### Fixed
312
+
313
+ - Fail fast on unrecoverable server errors.
314
+ - Respect `Retry-After` delay on 500-class errors when specified.
315
+
316
+ ## [0.32.2] - 2026-03-24
317
+
318
+ ### Added
319
+
320
+ - More robust distribution behavior.
321
+ - Retry after distribution on 429 errors.
322
+
323
+ ## [0.32.1] - 2026-03-24
324
+
325
+ ### Added
326
+
327
+ - Archive failed jobs to a `failed_job` table.
328
+
329
+ ### Fixed
330
+
331
+ - `DistributionWorker` now fails jobs on unrecoverable errors.
332
+
333
+ ## [0.32.0] - 2026-03-24
334
+
335
+ ### Added
336
+
337
+ - Profile page route for bots (`/profile/{botid}`).
338
+ - Custom icon and image for bots.
339
+ - Profile page link in Webfinger output.
340
+ - URL property on the actor pointing at the profile page.
341
+ - Discovery link on the profile page.
342
+ - `UrlFormatter.formatProfile()` and companion format/unformat methods
343
+ for icon and image.
344
+
345
+ ### Changed
346
+
347
+ - Profile page centered in body. (#154)
348
+
349
+ ### Fixed
350
+
351
+ - Count of links in Webfinger results.
352
+
353
+ ## [0.31.1] - 2026-03-22
354
+
355
+ ### Changed
356
+
357
+ - Block activities with no `id` from the shared inbox.
358
+
359
+ ### Fixed
360
+
361
+ - Reject activities with no `id` at the inbox.
362
+
363
+ ## [0.31.0] - 2026-03-22
364
+
365
+ ### Added
366
+
367
+ - Dedicated server actor bot; routes, Webfinger, and documentation
368
+ updated accordingly.
369
+ - `DoNothingBot` accepts custom parameters.
370
+ - Bots can declare whether they need HTTP signature verification.
371
+ - `UrlFormatter` exposes a `hostname` getter.
372
+
373
+ ### Changed
374
+
375
+ - `ActivityPubClient` uses the server actor for signed key-fetch
376
+ requests; no special-case.
377
+ - Server actor ID is now derived from the domain name.
378
+
379
+ ### Removed
380
+
381
+ - Server special case in Webfinger routes and unused server routes.
382
+ - HTTP-signature check for server actor, Webfinger, and health endpoints.
383
+
384
+ ### Fixed
385
+
386
+ - `KeyStorage` no longer accepts `null` username.
387
+ - Don't verify signatures for the server actor itself.
388
+
389
+ ## [0.30.6] - 2026-03-21
390
+
391
+ ### Fixed
392
+
393
+ - Skip HTTP-signature verification for server, Webfinger, and health endpoints.
394
+
395
+ ## [0.30.5] - 2026-03-21
396
+
397
+ ### Added
398
+
399
+ - Rate-limit header parsing supports either dates or integers.
400
+
401
+ ## [0.30.4] - 2026-03-21
402
+
403
+ ### Fixed
404
+
405
+ - Correct protocol for homepage URL.
406
+
407
+ ## [0.30.3] - 2026-03-21
408
+
409
+ ### Added
410
+
411
+ - `name` on server actor.
412
+
413
+ ## [0.30.2] - 2026-03-21
414
+
415
+ ### Fixed
416
+
417
+ - Correct `preferredUsername` for server actor.
418
+
419
+ ## [0.30.1] - 2026-03-21
420
+
421
+ ### Fixed
422
+
423
+ - Wait test for `ActivityPubClient`.
424
+
425
+ ## [0.30.0] - 2026-03-21
426
+
427
+ ### Changed
428
+
429
+ - Rate limiter switched to a greedy algorithm.
430
+ - More logging info on failed requests.
431
+
432
+ ### Fixed
433
+
434
+ - Additional reference fixes for `ActivityHandler.#doActivity()`.
435
+ - Errors in reply and follow handling.
436
+ - Don't expose `botId '*'` publicly in `BotContext`.
437
+ - More robust argument checks in `ActivityPubClient`.
438
+ - Argument checks in `KeyStorage`.
439
+
440
+ ## [0.29.0] - 2026-03-19
441
+
442
+ ### Added
443
+
444
+ - Webfinger routes for both bot actors and the server actor.
445
+ - HTTPS Webfinger support.
446
+ - `UrlFormatter.acct()` for `acct:` URI formatting.
447
+
448
+ ## [0.28.7] - 2026-03-19
449
+
450
+ ### Fixed
451
+
452
+ - Larger body-size limit for incoming JSON data.
453
+
454
+ ## [0.28.6] - 2026-03-19
455
+
456
+ ### Fixed
457
+
458
+ - Support `keyId` with a parameter in the signature header.
459
+
460
+ ## [0.28.5] - 2026-03-18
461
+
462
+ ### Added
463
+
464
+ - More logging in `HTTPSignatureAuthenticator`.
465
+ - More robust handling of server responses.
466
+
467
+ ## [0.28.4] - 2026-03-18
468
+
469
+ ### Added
470
+
471
+ - Better handling of fragment URIs in `ActivityPubClient`.
472
+
473
+ ## [0.28.3] - 2026-03-18
474
+
475
+ ### Added
476
+
477
+ - Embed `publicKey` in the server actor.
478
+
479
+ ## [0.28.2] - 2026-03-18
480
+
481
+ ### Fixed
482
+
483
+ - Rate-limit test epsilon consistent everywhere.
484
+
485
+ ## [0.28.1] - 2026-03-18
486
+
487
+ ### Fixed
488
+
489
+ - Grow the epsilon for the `ActivityPubClient` test.
490
+
491
+ ## [0.28.0] - 2026-03-18
492
+
493
+ ### Changed
494
+
495
+ - Server actor moved to `/actor`.
496
+
497
+ ## [0.27.1] - 2026-03-17
498
+
499
+ ### Fixed
500
+
501
+ - More breathing room in the rate-limit test.
502
+
503
+ ## [0.27.0] - 2026-03-17
504
+
505
+ ### Added
506
+
507
+ - `ActivityPubClient` respects rate limits via a `RateLimiter` argument.
508
+ - `RateLimiter` class.
509
+
510
+ ## [0.26.3] - 2026-03-17
511
+
512
+ ### Fixed
513
+
514
+ - Better handling of `Accept` header for root URL.
515
+
516
+ ## [0.26.2] - 2026-03-17
517
+
518
+ ### Fixed
519
+
520
+ - Better error when a key is not found.
521
+
522
+ ## [0.26.1] - 2026-03-17
523
+
524
+ ### Fixed
525
+
526
+ - Timestamps on collections.
527
+
528
+ ## [0.26.0] - 2026-03-17
529
+
530
+ ### Changed
531
+
532
+ - `BotContext.announceObject()` takes an `actors` argument.
533
+
534
+ ### Fixed
535
+
536
+ - Better handling of objects without owners or names.
537
+
538
+ ## [0.25.1] - 2026-03-17
539
+
540
+ ### Fixed
541
+
542
+ - `BotFactory` also supports `actorOK()`.
543
+ - Relay client deletes the follow activity instead of setting it to null.
544
+
545
+ ## [0.25.0] - 2026-03-16
546
+
547
+ ### Added
548
+
549
+ - `FollowBackBot` that follows back automatically and undoes its follow
550
+ when unfollowed.
551
+ - Undo-Follow callback on the `Bot` interface.
552
+ - `BotContext` silently succeeds on duplicate follow.
553
+
554
+ ### Changed
555
+
556
+ - Exported `FollowBackBot`.
557
+
558
+ ## [0.24.2] - 2026-03-12
559
+
560
+ ### Added
561
+
562
+ - Handle `Accept` and `Reject` for relay follow activities.
563
+
564
+ ## [0.24.1] - 2026-03-12
565
+
566
+ ### Fixed
567
+
568
+ - Send the full `Public` URL for relay follow/unfollow.
569
+ - Log at `info` instead of `debug` in relay client.
570
+
571
+ ## [0.24.0] - 2026-03-11
572
+
573
+ ### Added
574
+
575
+ - Unsubscribe from relay (#91).
576
+
577
+ ## [0.23.0] - 2026-03-11
578
+
579
+ ### Added
580
+
581
+ - Configurable worker counts and index file.
582
+ - Command-line script covered by tests.
583
+ - Documentation for delivery, distribution, and the index file.
584
+
585
+ ### Changed
586
+
587
+ - Default distribution worker count is now 8.
588
+
589
+ ## [0.22.0] - 2026-03-11
590
+
591
+ ### Added
592
+
593
+ - Index page. (#118)
594
+
595
+ ### Changed
596
+
597
+ - `makeApp()` takes keyword arguments.
598
+
599
+ ## [0.21.2] - 2026-03-09
600
+
601
+ ### Added
602
+
603
+ - Reaper for stalled/crashed jobs; releases stalled jobs back to the queue.
604
+ - Wake sleeping workers when a new job is enqueued.
605
+
606
+ ### Changed
607
+
608
+ - Better handling of collections as recipients in `Authorizer`.
609
+ - Better locking for Postgres in `JobQueue`.
610
+ - Database errors bubble up.
611
+
612
+ ### Fixed
613
+
614
+ - Correct retry behaviour.
615
+ - Await delivery properly.
616
+ - Use workers in tests.
617
+ - Better queue handling in `activityhandler.test.js`.
618
+ - `app` wires `jobQueue` and `distributionWorkers` correctly.
619
+
620
+ ## [0.21.1] - 2026-02-25
621
+
622
+ ### Fixed
623
+
624
+ - Correct `summary` property. (#119)
625
+
626
+ ## [0.21.0] - 2026-02-18
627
+
628
+ ### Added
629
+
630
+ - Persistent job queue backed by the database.
631
+ - `DistributionWorker` class.
632
+ - `DeliveryWorker` for local delivery.
633
+ - Retry after a period of time.
634
+ - `IntakeWorker` for shared-inbox intake.
635
+ - Distribute public activities to the bot inbox as well as the shared
636
+ inbox (with deduplication).
637
+
638
+ ### Changed
639
+
640
+ - Single queue used by `ActivityDistributor`.
641
+
642
+ ### Removed
643
+
644
+ - Unused properties and constants from `ActivityDeliverer`.
645
+
646
+ ## [0.20.1] - 2026-02-18
647
+
648
+ ### Fixed
649
+
650
+ - Description for relay server.
651
+
652
+ ## [0.20.0] - 2026-02-18
653
+
654
+ ### Added
655
+
656
+ - Export `RelayClientBot` and `RelayServerBot`.
657
+
658
+ ## [0.19.0] - 2026-02-17
659
+
660
+ ### Changed
661
+
662
+ - Large test-suite cleanup: database isolation, cleanup helpers, unique
663
+ hostnames across tests.
664
+ - Consistent lowercase aliases in `ActorStorage` and `ObjectStorage`
665
+ queries for Postgres/SQLite compatibility.
666
+
667
+ ### Fixed
668
+
669
+ - Better table-existence check for Postgres.
670
+ - Postgres migrations run inside a lock to prevent conflicts.
671
+ - SQLite-memory URL no longer used (broke in Node 25).
672
+ - `ActorStorage` handles mixed-case and lowercase keys.
673
+
674
+ ## [0.18.0] - 2026-02-10
675
+
676
+ ### Added
677
+
678
+ - Accept `hs2019` HTTP signatures.
679
+
680
+ ## [0.17.0] - 2026-02-10
681
+
682
+ ### Added
683
+
684
+ - `RelayServerBot` class.
685
+ - `Bot.handleActivity()` hook to skip default activity handling.
686
+ - `BotContext.doActivity()` method.
687
+ - `RelayClientBot`.
688
+ - Bots can allowlist specific HTTP-signature authors.
689
+
690
+ ### Fixed
691
+
692
+ - Prevent duplicate relay clients.
693
+ - Better debug output for `app.onIdle()`.
694
+ - Always lower-case `type` in the URL formatter.
695
+
696
+ ## [0.16.7] - 2026-01-30
697
+
698
+ ### Added
699
+
700
+ - More info included on Undo activities.
701
+
702
+ ## [0.16.6] - 2026-01-28
703
+
704
+ ### Fixed
705
+
706
+ - Correct recipients of Undo-Announce.
707
+
708
+ ## [0.16.5] - 2026-01-28
709
+
710
+ ### Changed
711
+
712
+ - Refactored `BotContext.#undoActivity()` for clarity.
713
+
714
+ ## [0.16.4] - 2026-01-28
715
+
716
+ ### Fixed
717
+
718
+ - Use bot key as username.
719
+
720
+ ## [0.16.3] - 2026-01-28
721
+
722
+ ### Fixed
723
+
724
+ - Stray include in `ActorStorage`.
725
+
726
+ ## [0.16.2] - 2026-01-28
727
+
728
+ ### Removed
729
+
730
+ - Stray `console.log()`.
731
+
732
+ ## [0.16.1] - 2026-01-28
733
+
734
+ ### Fixed
735
+
736
+ - Debug logging in `botcontext.test.js`.
737
+
738
+ ## [0.16.0] - 2026-01-28
739
+
740
+ ### Added
741
+
742
+ - `BotContext.unannounceObject(obj)`.
743
+ - `lastactivity` table for efficient undos.
744
+ - `ActorStorage` last-activity helpers.
745
+
746
+ ### Changed
747
+
748
+ - Refactored `BotContext` to send activities via a helper and look up
749
+ the most recent activity for undos.
750
+
751
+ ## [0.15.4] - 2026-01-27
752
+
753
+ ### Fixed
754
+
755
+ - Error when filtering pages containing a single item.
756
+
757
+ ## [0.15.3] - 2026-01-26
758
+
759
+ ### Fixed
760
+
761
+ - `package-lock.json`.
762
+
763
+ ## [0.15.2] - 2026-01-26
764
+
765
+ ### Fixed
766
+
767
+ - `package-lock.json` version.
768
+
769
+ ## [0.15.1] - 2026-01-26
770
+
771
+ ### Fixed
772
+
773
+ - `package.json` entry for `activitypub-nock`.
774
+
775
+ ## [0.15.0] - 2026-01-26
776
+
777
+ ### Added
778
+
779
+ - Deliver to remote collections (`followers`, `following`, generic).
780
+ - Distribute to local collections.
781
+
782
+ ## [0.14.2] - 2026-01-25
783
+
784
+ ### Fixed
785
+
786
+ - Skip items in a collection where the read-access check errors.
787
+
788
+ ## [0.14.1] - 2026-01-25
789
+
790
+ ### Fixed
791
+
792
+ - Better format for `shares` collection `Add`.
793
+
794
+ ## [0.14.0] - 2026-01-25
795
+
796
+ ### Added
797
+
798
+ - Correctly generate an `Add` activity when an object is liked.
799
+
800
+ ### Changed
801
+
802
+ - Use 202 Accepted for inbox responses.
803
+ - `ActivityDeliverer` uses a queue for delivery.
804
+
805
+ ### Fixed
806
+
807
+ - More robust behavior when local objects contain bad data.
808
+
809
+ ## [0.13.14] - 2026-01-23
810
+
811
+ ### Changed
812
+
813
+ - Nock helpers extracted into the `@evanp/activitypub-nock` package for re-use.
814
+
815
+ ## [0.13.13] - 2026-01-22
816
+
817
+ ### Changed
818
+
819
+ - `#doActivity()` sets `actor`, `id`, `published`, and `updated`.
820
+
821
+ ### Fixed
822
+
823
+ - Fall back to the user in URL as owner if it's a local object.
824
+
825
+ ## [0.13.12] - 2026-01-22
826
+
827
+ ### Fixed
828
+
829
+ - More robust bot-actor generation.
830
+
831
+ ## [0.13.11] - 2026-01-22
832
+
833
+ ### Fixed
834
+
835
+ - Don't redeliver an activity that's already in the inbox.
836
+
837
+ ## [0.13.10] - 2026-01-22
838
+
839
+ ### Added
840
+
841
+ - Better handling of null key material in the database.
842
+
843
+ ## [0.13.9] - 2026-01-22
844
+
845
+ ### Fixed
846
+
847
+ - `bot.ok.test` no longer depends on ordering.
848
+
849
+ ## [0.13.8] - 2026-01-22
850
+
851
+ ### Added
852
+
853
+ - More debug logging for `OKBot`.
854
+
855
+ ## [0.13.7] - 2026-01-22
856
+
857
+ ### Added
858
+
859
+ - More logging during activity delivery.
860
+
861
+ ## [0.13.6] - 2026-01-22
862
+
863
+ ### Added
864
+
865
+ - Logging for received activities.
866
+
867
+ ## [0.13.5] - 2026-01-22
868
+
869
+ ### Fixed
870
+
871
+ - `KeyStorage` uses a zero-length string for the system key.
872
+
873
+ ## [0.13.4] - 2026-01-22
874
+
875
+ ### Fixed
876
+
877
+ - `OKBot` works in the public inbox context.
878
+
879
+ ## [0.13.3] - 2026-01-22
880
+
881
+ ### Fixed
882
+
883
+ - Symlink global libs into `/app/` inside Docker.
884
+
885
+ ## [0.13.2] - 2026-01-22
886
+
887
+ ### Fixed
888
+
889
+ - Path issues in Dockerfile.
890
+
891
+ ## [0.13.1] - 2026-01-22
892
+
893
+ ### Added
894
+
895
+ - `.npmignore` to exclude unnecessary files.
896
+
897
+ ### Fixed
898
+
899
+ - Proper path for the `activitypub-bot` script.
900
+
901
+ ## [0.13.0] - 2026-01-22
902
+
903
+ ### Added
904
+
905
+ - Default bot classes exported from the library.
906
+
907
+ ### Fixed
908
+
909
+ - Workaround for Express 5 disallowing regexes in routes.
910
+
911
+ ## [0.12.1] - 2026-01-21
912
+
913
+ ### Fixed
914
+
915
+ - Default bots file wired up from `bin`.
916
+
917
+ ## [0.12.0] - 2026-01-21
918
+
919
+ ### Changed
920
+
921
+ - Simplified Dockerfile.
922
+ - Reorganized top-level scripts and packaged the library.
923
+
924
+ ## [0.11.0] - 2026-01-21
925
+
926
+ ### Added
927
+
928
+ - `BotContext.announceObject()`.
929
+ - `onAnnounce()` callback when an actor's object is shared (#56).
930
+ - Thread-context registration for performance.
931
+ - Deliver to local members of a remote collection through the shared inbox.
932
+ - `ActivityPubClient.items(collection)` async iterator for paged and
933
+ ordered collections.
934
+
935
+ ### Changed
936
+
937
+ - Express bumped from 4.x to 5.x.
938
+
939
+ ### Fixed
940
+
941
+ - Better handling of `null` in `KeyStorage`.
942
+
943
+ ## [0.10.0] - 2026-01-15
944
+
945
+ ### Added
946
+
947
+ - Handle public messages.
948
+ - Delivery to followers via shared inbox.
949
+ - `sharedInbox` endpoint on the actor.
950
+ - Utility to look up usernames that have a given item in a collection.
951
+ - Deliver activities to local `followers` and `following` collections.
952
+ - Delivery to remote `following` collections.
953
+ - Webfinger lookup tools in `BotContext`.
954
+ - `BotContext.sendReply()`.
955
+ - Microsyntax transformation (hashtags, URLs, mentions) in `BotContext`.
956
+
957
+ ### Changed
958
+
959
+ - Six delivery cases rationalized: public, local actor, local collection,
960
+ remote actor, remote collection, other.
961
+ - Delivery code moved into `ActivityDeliverer`.
962
+
963
+ ### Fixed
964
+
965
+ - `ActivityDistributor` won't distribute an activity back to the actor.
966
+ - Correct type for `Hashtag` in microsyntax.
967
+
968
+ ## [0.9.0] - 2026-01-10
969
+
970
+ ### Added
971
+
972
+ - `thread` and thread-page routes.
973
+ - Thread collection management for remote objects.
974
+ - `BotContext.duplicate()`.
975
+ - `BotFactory` support for dynamically-provisioned bots: actor routes,
976
+ collections, public key, and inbox handling.
977
+ - FEP-5711 inverse properties (`replies`, `likes`, `shares`) on actors
978
+ and new content.
979
+
980
+ ### Fixed
981
+
982
+ - Conversation tracking in replies.
983
+ - Reactions and thread on new content.
984
+ - `inReplyTo` for OK bot.
985
+ - Correct origin in `actorstorage.test.js`.
986
+ - `UrlFormatter.getUserName()` uses `unformat()`.
987
+
988
+ ## [0.8.0] - 2025-09-13
989
+
990
+ ### Added
991
+
992
+ - Inverse properties on `replies`, `likes`, and `shares`.
993
+
994
+ ## [0.7.5] - 2025-06-03
995
+
996
+ ### Fixed
997
+
998
+ - Don't handle the same activity a second time.
999
+
1000
+ ## [0.7.4] - 2025-06-03
1001
+
1002
+ ### Changed
1003
+
1004
+ - Additional error checks on collection operations.
1005
+
1006
+ ## [0.7.3] - 2025-06-03
1007
+
1008
+ ### Fixed
1009
+
1010
+ - Outbox route when it contains activities.
1011
+
1012
+ ## [0.7.2] - 2025-06-03
1013
+
1014
+ ### Fixed
1015
+
1016
+ - `Authorizer.canRead()` checks for object and object.id.
1017
+ - `HTTPSignature` uses query params when building the signing string.
1018
+ - Silent logger for `HTTPSignature`.
1019
+ - `HTTPSignature` handles URLs with parameters.
1020
+
1021
+ ## [0.7.1] - 2025-05-23
1022
+
1023
+ ### Fixed
1024
+
1025
+ - Quietly fail when delivering to actors with no inbox.
1026
+
1027
+ ## [0.7.0] - 2025-05-22
1028
+
1029
+ ### Added
1030
+
1031
+ - `OKBot` replies at most once to a mention.
1032
+ - `BotContext.hasData()`.
1033
+ - Logger on `BotContext`.
1034
+ - Logging in `OKBot`.
1035
+ - Class name in logger output.
1036
+
1037
+ ## [0.6.0] - 2025-05-22
1038
+
1039
+ ### Added
1040
+
1041
+ - Robustness to key rotation.
1042
+ - Option to skip the cache in `RemoteKeyStorage`.
1043
+
1044
+ ### Fixed
1045
+
1046
+ - Future and past dates.
1047
+
1048
+ ## [0.5.7] - 2025-05-17
1049
+
1050
+ ### Fixed
1051
+
1052
+ - `OKBot` mentions the sender correctly.
1053
+
1054
+ ## [0.5.6] - 2025-05-17
1055
+
1056
+ ### Fixed
1057
+
1058
+ - Better table and queries for `RemotePublicKey`.
1059
+ - Actually save local public and private keys.
1060
+
1061
+ ## [0.5.5] - 2025-05-17
1062
+
1063
+ ### Added
1064
+
1065
+ - Log public/private key access.
1066
+
1067
+ ### Fixed
1068
+
1069
+ - Trim `target` and `host` in `HTTPSignature`.
1070
+
1071
+ ## [0.5.4] - 2025-05-16
1072
+
1073
+ ### Changed
1074
+
1075
+ - Use a list for headers in `HTTPSignature` to make signing replicable.
1076
+ - Better escaping and trimming in `HTTPSignature`.
1077
+
1078
+ ## [0.5.3] - 2025-05-16
1079
+
1080
+ ### Fixed
1081
+
1082
+ - Digester test regression.
1083
+
1084
+ ## [0.5.2] - 2025-05-16
1085
+
1086
+ ### Fixed
1087
+
1088
+ - Signature-header match regex in tests.
1089
+
1090
+ ## [0.5.1] - 2025-05-16
1091
+
1092
+ ### Added
1093
+
1094
+ - Packaging fixes for the signing work in 0.5.0.
1095
+
1096
+ ## [0.5.0] - 2025-05-16
1097
+
1098
+ ### Added
1099
+
1100
+ - Sign `Accept`, `Content-Type`, and `User-Agent` headers.
1101
+
1102
+ ## [0.4.10] - 2025-05-16
1103
+
1104
+ ### Added
1105
+
1106
+ - More HTTP-signature debugging output.
1107
+
1108
+ ## [0.4.9] - 2025-05-15
1109
+
1110
+ ### Added
1111
+
1112
+ - Debug output for HTTP signatures.
1113
+
1114
+ ## [0.4.8] - 2025-05-14
1115
+
1116
+ ### Changed
1117
+
1118
+ - All HTTP-signature and digest methods consolidated into dedicated modules.
1119
+
1120
+ ## [0.4.7] - 2025-05-14
1121
+
1122
+ ### Changed
1123
+
1124
+ - Compare digest algorithms case-independently.
1125
+
1126
+ ## [0.4.6] - 2025-05-14
1127
+
1128
+ ### Fixed
1129
+
1130
+ - Better handling of key IDs with a fragment.
1131
+
1132
+ ## [0.4.5] - 2025-05-13
1133
+
1134
+ ### Added
1135
+
1136
+ - Better error reporting in the distributor.
1137
+ - Log bad incoming activities.
1138
+
1139
+ ## [0.4.4] - 2025-05-13
1140
+
1141
+ ### Fixed
1142
+
1143
+ - Better `Digest` and `Date` validation, with better error messages.
1144
+
1145
+ ## [0.4.3] - 2025-05-13
1146
+
1147
+ ### Fixed
1148
+
1149
+ - Bad `Digest` value on outgoing HTTP requests.
1150
+
1151
+ ## [0.4.2] - 2025-05-13
1152
+
1153
+ ### Fixed
1154
+
1155
+ - Correct method in POST signature.
1156
+
1157
+ ## [0.4.1] - 2025-05-13
1158
+
1159
+ ### Fixed
1160
+
1161
+ - Common logger used for `ActivityDistributor`.
1162
+
1163
+ ## [0.4.0] - 2025-05-13
1164
+
1165
+ ### Added
1166
+
1167
+ - `LOG_LEVEL` environment variable.
1168
+
1169
+ ### Fixed
1170
+
1171
+ - Better handling of remote keys with their own URL.
1172
+ - Use `CryptographicKey` rather than `PublicKey`.
1173
+
1174
+ ## [0.3.4] - 2025-05-13
1175
+
1176
+ ### Fixed
1177
+
1178
+ - Client doesn't sign requests for HTTP-signature keys unless necessary.
1179
+
1180
+ ## [0.3.3] - 2025-05-12
1181
+
1182
+ ### Fixed
1183
+
1184
+ - Webfinger endpoint works correctly.
1185
+
1186
+ ## [0.3.2] - 2025-05-12
1187
+
1188
+ ### Fixed
1189
+
1190
+ - Copy `lib` and `bots` to the correct directories in Docker.
1191
+ - Multiplatform Docker image.
1192
+
1193
+ ## [0.3.1] - 2025-05-12
1194
+
1195
+ ### Fixed
1196
+
1197
+ - Copy `bots` directory in Docker.
1198
+
1199
+ ## [0.3.0] - 2025-05-12
1200
+
1201
+ ### Added
1202
+
1203
+ - Standard bot classes and a new bot architecture.
1204
+ - Start script.
1205
+
1206
+ ## [0.2.0] - 2025-05-11
1207
+
1208
+ ### Added
1209
+
1210
+ - Docker image built on tag.
1211
+ - `/livez` and `/readyz` health-check routes.
1212
+
1213
+ ## [0.1.0] - 2025-05-10
1214
+
1215
+ ### Added
1216
+
1217
+ - Initial release: ActivityPub bot framework with Webfinger, actor
1218
+ routes, inbox/outbox, shared inbox, HTTP Signatures, object and actor
1219
+ storage, key storage, bot context API, activity distribution, and
1220
+ default bots (`OKBot`, `DoNothingBot`).
1221
+ - Sequelize drivers for SQLite, Postgres, and MySQL.
1222
+ - Docker multi-platform build workflow.
1223
+ - Dependabot configuration.