Skip to content

Commit 330dced

Browse files
committed
Merge tag '2.1.13' into 2.2-maintenance
Fedify 2.1.13
2 parents 33a17da + c21b53a commit 330dced

35 files changed

Lines changed: 1226 additions & 510 deletions

.hongdown.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ include = ["*.md", "**/*.md"]
33
exclude = [
44
"**/node_modules/**",
55
"**/dist/**",
6+
".agents/skills/**",
67
".claude/skills/**",
78
".github/copilot-instructions.md",
89
"AGENT.md",

CHANGES.md

Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,75 @@ Version 2.2.2
88

99
To be released.
1010

11+
### @fedify/fedify
12+
13+
- Fixed `doubleKnock()` so transient transport failures such as DNS hiccups
14+
no longer leak raw `TypeError`s. Idempotent authenticated document
15+
fetches are retried once, and remaining transport failures are reported as
16+
`FetchError` with the original error as the cause. [[#762], [#763]]
17+
18+
- Fixed a `TypeError` thrown when Activity Vocabulary constructors received
19+
a `Temporal.Instant` or `Temporal.Duration` produced by an implementation
20+
other than the bundled `@js-temporal/polyfill` (for example, the native
21+
`Temporal` shipped with Node.js 26+). Internal `instanceof` checks have
22+
been replaced with `Symbol.toStringTag`-based guards so any spec-conformant
23+
Temporal value is accepted. Generated _\*.d.ts_ declarations no longer
24+
import from `@js-temporal/polyfill`; they reference the ambient `Temporal`
25+
namespace through the `esnext.temporal` lib instead, which removes the
26+
nominal mismatch with native Temporal types. TypeScript 6.0 or later is
27+
required to consume the type declarations. [[#767], [#768]]
28+
29+
[#762]: https://github.com/fedify-dev/fedify/issues/762
30+
[#763]: https://github.com/fedify-dev/fedify/pull/763
31+
[#767]: https://github.com/fedify-dev/fedify/issues/767
32+
[#768]: https://github.com/fedify-dev/fedify/pull/768
33+
34+
### @fedify/vocab-runtime
35+
36+
- Added `isTemporalInstant()` and `isTemporalDuration()` type guards that
37+
accept both polyfill and native `Temporal` values via `Symbol.toStringTag`.
38+
[[#767], [#768]]
39+
40+
- Added the `@fedify/vocab-runtime/temporal` subpath export so consumers
41+
can import the new `Temporal` type guards without pulling in the rest of
42+
the runtime. [[#767], [#768]]
43+
44+
### @fedify/postgres
45+
46+
- Generated _\*.d.ts_ declarations no longer import from
47+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
48+
through the `esnext.temporal` lib instead, so `pollInterval` and
49+
`handlerTimeout` accept native `Temporal.Duration` values from Node.js
50+
26+ without a nominal type mismatch. TypeScript 6.0 or later is
51+
required to consume the type declarations. [[#767], [#768]]
52+
53+
### @fedify/redis
54+
55+
- Generated _\*.d.ts_ declarations no longer import from
56+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
57+
through the `esnext.temporal` lib instead, so `pollInterval` accepts
58+
native `Temporal.Duration` values from Node.js 26+ without a nominal type
59+
mismatch. TypeScript 6.0 or later is required to consume the type
60+
declarations. [[#767], [#768]]
61+
62+
### @fedify/sqlite
63+
64+
- Generated _\*.d.ts_ declarations no longer import from
65+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
66+
through the `esnext.temporal` lib instead, so `pollInterval` accepts
67+
native `Temporal.Duration` values from Node.js 26+ without a nominal type
68+
mismatch. TypeScript 6.0 or later is required to consume the type
69+
declarations. [[#767], [#768]]
70+
71+
### @fedify/mysql
72+
73+
- Generated _\*.d.ts_ declarations no longer import from
74+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
75+
through the `esnext.temporal` lib instead, so `pollInterval` and
76+
`handlerTimeout` accept native `Temporal.Duration` values from Node.js
77+
26+ without a nominal type mismatch. TypeScript 6.0 or later is
78+
required to consume the type declarations. [[#767]]
79+
1180

1281
Version 2.2.1
1382
-------------
@@ -294,6 +363,76 @@ Released on April 28, 2026.
294363
[#722]: https://github.com/fedify-dev/fedify/pull/722
295364

296365

366+
Version 2.1.13
367+
--------------
368+
369+
Released May 15, 2026.
370+
371+
### @fedify/fedify
372+
373+
- Fixed `doubleKnock()` so transient transport failures such as DNS hiccups
374+
no longer leak raw `TypeError`s. Idempotent authenticated document
375+
fetches are retried once, and remaining transport failures are reported as
376+
`FetchError` with the original error as the cause. [[#762], [#763]]
377+
378+
- Fixed a `TypeError` thrown when Activity Vocabulary constructors received
379+
a `Temporal.Instant` or `Temporal.Duration` produced by an implementation
380+
other than the bundled `@js-temporal/polyfill` (for example, the native
381+
`Temporal` shipped with Node.js 26+). Internal `instanceof` checks have
382+
been replaced with `Symbol.toStringTag`-based guards so any spec-conformant
383+
Temporal value is accepted. Generated _\*.d.ts_ declarations no longer
384+
import from `@js-temporal/polyfill`; they reference the ambient `Temporal`
385+
namespace through the `esnext.temporal` lib instead, which removes the
386+
nominal mismatch with native Temporal types. TypeScript 6.0 or later is
387+
required to consume the type declarations. [[#767], [#768]]
388+
389+
### @fedify/vocab-runtime
390+
391+
- Added `isTemporalInstant()` and `isTemporalDuration()` type guards that
392+
accept both polyfill and native `Temporal` values via `Symbol.toStringTag`.
393+
[[#767], [#768]]
394+
395+
- Added the `@fedify/vocab-runtime/temporal` subpath export so consumers
396+
can import the new `Temporal` type guards without pulling in the rest of
397+
the runtime. [[#767], [#768]]
398+
399+
### @fedify/postgres
400+
401+
- Generated _\*.d.ts_ declarations no longer import from
402+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
403+
through the `esnext.temporal` lib instead, so `pollInterval` and
404+
`handlerTimeout` accept native `Temporal.Duration` values from Node.js
405+
26+ without a nominal type mismatch. TypeScript 6.0 or later is
406+
required to consume the type declarations. [[#767], [#768]]
407+
408+
### @fedify/redis
409+
410+
- Generated _\*.d.ts_ declarations no longer import from
411+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
412+
through the `esnext.temporal` lib instead, so `pollInterval` accepts
413+
native `Temporal.Duration` values from Node.js 26+ without a nominal type
414+
mismatch. TypeScript 6.0 or later is required to consume the type
415+
declarations. [[#767], [#768]]
416+
417+
### @fedify/sqlite
418+
419+
- Generated _\*.d.ts_ declarations no longer import from
420+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
421+
through the `esnext.temporal` lib instead, so `pollInterval` accepts
422+
native `Temporal.Duration` values from Node.js 26+ without a nominal type
423+
mismatch. TypeScript 6.0 or later is required to consume the type
424+
declarations. [[#767], [#768]]
425+
426+
### @fedify/mysql
427+
428+
- Generated _\*.d.ts_ declarations no longer import from
429+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
430+
through the `esnext.temporal` lib instead, so `pollInterval` and
431+
`handlerTimeout` accept native `Temporal.Duration` values from Node.js
432+
26+ without a nominal type mismatch. TypeScript 6.0 or later is
433+
required to consume the type declarations. [[#767]]
434+
435+
297436
Version 2.1.12
298437
--------------
299438

@@ -753,6 +892,67 @@ Released on March 24, 2026.
753892
[#599]: https://github.com/fedify-dev/fedify/pull/599
754893

755894

895+
Version 2.0.17
896+
--------------
897+
898+
Released on May 15, 2026.
899+
900+
### @fedify/fedify
901+
902+
- Fixed `doubleKnock()` so transient transport failures such as DNS hiccups
903+
no longer leak raw `TypeError`s. Idempotent authenticated document
904+
fetches are retried once, and remaining transport failures are reported as
905+
`FetchError` with the original error as the cause. [[#762], [#763]]
906+
907+
- Fixed a `TypeError` thrown when Activity Vocabulary constructors received
908+
a `Temporal.Instant` or `Temporal.Duration` produced by an implementation
909+
other than the bundled `@js-temporal/polyfill` (for example, the native
910+
`Temporal` shipped with Node.js 26+). Internal `instanceof` checks have
911+
been replaced with `Symbol.toStringTag`-based guards so any spec-conformant
912+
Temporal value is accepted. Generated _\*.d.ts_ declarations no longer
913+
import from `@js-temporal/polyfill`; they reference the ambient `Temporal`
914+
namespace through the `esnext.temporal` lib instead, which removes the
915+
nominal mismatch with native Temporal types. TypeScript 6.0 or later is
916+
required to consume the type declarations. [[#767], [#768]]
917+
918+
### @fedify/vocab-runtime
919+
920+
- Added `isTemporalInstant()` and `isTemporalDuration()` type guards that
921+
accept both polyfill and native `Temporal` values via `Symbol.toStringTag`.
922+
[[#767], [#768]]
923+
924+
- Added the `@fedify/vocab-runtime/temporal` subpath export so consumers
925+
can import the new `Temporal` type guards without pulling in the rest of
926+
the runtime. [[#767], [#768]]
927+
928+
### @fedify/postgres
929+
930+
- Generated _\*.d.ts_ declarations no longer import from
931+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
932+
through the `esnext.temporal` lib instead, so `pollInterval` and
933+
`handlerTimeout` accept native `Temporal.Duration` values from Node.js
934+
26+ without a nominal type mismatch. TypeScript 6.0 or later is
935+
required to consume the type declarations. [[#767], [#768]]
936+
937+
### @fedify/redis
938+
939+
- Generated _\*.d.ts_ declarations no longer import from
940+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
941+
through the `esnext.temporal` lib instead, so `pollInterval` accepts
942+
native `Temporal.Duration` values from Node.js 26+ without a nominal type
943+
mismatch. TypeScript 6.0 or later is required to consume the type
944+
declarations. [[#767], [#768]]
945+
946+
### @fedify/sqlite
947+
948+
- Generated _\*.d.ts_ declarations no longer import from
949+
`@js-temporal/polyfill`; they reference the ambient `Temporal` namespace
950+
through the `esnext.temporal` lib instead, so `pollInterval` accepts
951+
native `Temporal.Duration` values from Node.js 26+ without a nominal type
952+
mismatch. TypeScript 6.0 or later is required to consume the type
953+
declarations. [[#767], [#768]]
954+
955+
756956
Version 2.0.16
757957
--------------
758958

deno.lock

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/.vitepress/config.mts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,10 @@ export default withMermaid(defineConfig({
295295
target: ScriptTarget.ESNext,
296296
experimentalDecorators: true, // For @fedify/nestjs
297297
emitDecoratorMetadata: true, // For @fedify/nestjs
298+
// Silences TS5101 about the `baseUrl` injected by @typescript/vfs
299+
// when Twoslash spins up its virtual TS environment; the option
300+
// is deprecated in TypeScript 6.0 and removed in 7.0.
301+
ignoreDeprecations: "6.0",
298302
lib: ["dom", "dom.iterable", "esnext"],
299303
types: [
300304
"dom",

docs/manual/federation.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ Deno.serve(
546546
~~~~
547547

548548
~~~~ typescript twoslash [Bun]
549-
import "@types/bun";
549+
import "bun";
550550
import { type Federation } from "@fedify/fedify";
551551
const federation = null as unknown as Federation<void>;
552552
const request = new Request("");
@@ -671,7 +671,7 @@ serve({
671671
~~~~
672672

673673
~~~~ typescript{1,4} twoslash [Bun]
674-
import "@types/bun";
674+
import "bun";
675675
import { type Federation } from "@fedify/fedify";
676676
const federation = null as unknown as Federation<void>;
677677
// ---cut-before---

docs/manual/pragmatics.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,6 @@ The date joined is displayed in the profile page of the actor.
158158
159159
~~~~ typescript twoslash
160160
import { Person } from "@fedify/vocab";
161-
import { Temporal } from "@js-temporal/polyfill";
162161
// ---cut-before---
163162
new Person({
164163
name: "Fedify Demo",

docs/manual/relay.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ Deno.serve((request) => relay.fetch(request));
6767
~~~~
6868

6969
~~~~ typescript twoslash [Bun]
70-
import "@types/bun";
70+
import "bun";
7171
// ---cut-before---
7272
import { createRelay } from "@fedify/relay";
7373
import { MemoryKvStore } from "@fedify/fedify";

docs/manual/vocab.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,6 @@ that contains the properties of the object. The following shows an example of
9292
instantiating a `Create` object:
9393

9494
~~~~ typescript twoslash
95-
import { Temporal } from "@js-temporal/polyfill";
96-
// ---cut-before---
9795
import { Create, Note } from "@fedify/vocab";
9896

9997
const create = new Create({
@@ -217,7 +215,6 @@ For example, the following two objects are equivalent (where dereferencing URI
217215

218216
~~~~ typescript twoslash
219217
import { Create, Note } from "@fedify/vocab";
220-
import { Temporal } from "@js-temporal/polyfill";
221218
// ---cut-before---
222219
const a = new Create({
223220
id: new URL("https://example.com/activities/123"),
@@ -371,8 +368,6 @@ properties. The following shows an example of changing the `~Object.content`
371368
property of a `Note` object:
372369

373370
~~~~ typescript{8-10} twoslash
374-
import { Temporal } from "@js-temporal/polyfill";
375-
// ---cut-before---
376371
import { Note } from "@fedify/vocab";
377372
import { LanguageString } from "@fedify/vocab-runtime";
378373

docs/tutorial/basics.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ Deno.serve(request =>
167167
~~~~
168168

169169
~~~~ typescript twoslash [Bun]
170-
import "@types/bun";
170+
import "bun";
171171
// ---cut-before---
172172
Bun.serve({
173173
port: 8000,
@@ -277,7 +277,7 @@ Deno.serve(
277277
~~~~
278278

279279
~~~~ typescript{4} twoslash [Bun]
280-
import "@types/bun";
280+
import "bun";
281281
import type { Federation } from "@fedify/fedify";
282282
const federation = null as unknown as Federation<void>;
283283
// ---cut-before---
@@ -409,7 +409,7 @@ Deno.serve(
409409
~~~~
410410
411411
~~~~ typescript{7-16} twoslash [Bun]
412-
import "@types/bun";
412+
import "bun";
413413
// ---cut-before---
414414
import { createFederation, MemoryKvStore } from "@fedify/fedify";
415415
import { Person } from "@fedify/vocab";
@@ -657,7 +657,7 @@ Deno.serve(
657657
~~~~
658658
659659
~~~~ typescript{1,5} twoslash [Bun]
660-
import "@types/bun";
660+
import "bun";
661661
import type { Federation } from "@fedify/fedify";
662662
const federation = null as unknown as Federation<void>;
663663
// ---cut-before---
@@ -1205,7 +1205,7 @@ Deno.serve(async (request) => {
12051205
~~~~
12061206
12071207
~~~~ typescript{4-18} twoslash [Bun]
1208-
import "@types/bun";
1208+
import "bun";
12091209
import type { Federation } from "@fedify/fedify";
12101210
import { openKv } from "@deno/kv";
12111211
const federation = null as unknown as Federation<void>;

docs/tutorial/microblog.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3144,7 +3144,7 @@ npm add @js-temporal/polyfill
31443144
31453145
Open the *src/federation.ts* file and `import` the installed package:
31463146
3147-
~~~~ typescript twoslash [src/federation.ts]
3147+
~~~~ typescript [src/federation.ts]
31483148
import { Temporal } from "@js-temporal/polyfill";
31493149
~~~~
31503150
@@ -3199,7 +3199,6 @@ federation.setObjectDispatcher(
31993199
Let's modify this as follows:
32003200
32013201
~~~~ typescript twoslash [src/federation.ts]
3202-
import { Temporal } from "@js-temporal/polyfill";
32033202
import { type Federation } from "@fedify/fedify";
32043203
import { Note, PUBLIC_COLLECTION } from "@fedify/vocab";
32053204
const federation = null as unknown as Federation<void>;

0 commit comments

Comments
 (0)