@fedify/fedify 2.3.12-dev.2346 → 2.3.12

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.
Files changed (48) hide show
  1. package/dist/{builder-DicVJ-xu.mjs → builder-B6ixdT3y.mjs} +2 -2
  2. package/dist/compat/transformers.test.mjs +1 -1
  3. package/dist/{deno-6wql8QZc.mjs → deno-D4dcoVfF.mjs} +1 -1
  4. package/dist/{docloader-DKBslg7U.mjs → docloader-NOKfswJV.mjs} +2 -2
  5. package/dist/federation/builder.test.mjs +1 -1
  6. package/dist/federation/handler.test.mjs +5 -5
  7. package/dist/federation/idempotency.test.mjs +2 -2
  8. package/dist/federation/metrics.test.mjs +1 -1
  9. package/dist/federation/middleware.test.mjs +7 -7
  10. package/dist/federation/mod.cjs +1 -1
  11. package/dist/federation/mod.js +1 -1
  12. package/dist/federation/send.test.mjs +3 -3
  13. package/dist/federation/temporal.test.mjs +1 -1
  14. package/dist/federation/webfinger.test.mjs +1 -1
  15. package/dist/{http-BQ95e2Z_.cjs → http-D_Xrr6kp.cjs} +109 -11
  16. package/dist/{http-DSypZ0ko.js → http-DkyUBs_T.js} +110 -12
  17. package/dist/{http-Ds8PEU4r.mjs → http-HjidyDfF.mjs} +3 -3
  18. package/dist/{key-C1WyQwNb.mjs → key-Dg-NXm4K.mjs} +111 -13
  19. package/dist/{kv-cache-nXxgpjXJ.js → kv-cache-BhGeZk_o.js} +1 -1
  20. package/dist/{kv-cache-D-PGp70v.mjs → kv-cache-BpVwvcSI.mjs} +1 -1
  21. package/dist/{kv-cache-x_tgEc8v.cjs → kv-cache-BwnC6JGt.cjs} +1 -1
  22. package/dist/{ld-DsmIg6si.mjs → ld-C1wveXXf.mjs} +3 -3
  23. package/dist/{metrics-CA7fZCvS.mjs → metrics-cIaMxG0v.mjs} +1 -1
  24. package/dist/{middleware-Cg9iYtli.js → middleware-CnrzVu9i.js} +3 -3
  25. package/dist/{middleware-kgbXwBr4.cjs → middleware-DhOFTXmo.cjs} +3 -3
  26. package/dist/{middleware-Dqw7nQQZ.mjs → middleware-I-XlrRVl.mjs} +12 -12
  27. package/dist/{middleware-B0pcbjrb.mjs → middleware-VxPpU0h_.mjs} +1 -1
  28. package/dist/mod.cjs +4 -4
  29. package/dist/mod.js +4 -4
  30. package/dist/nodeinfo/handler.test.mjs +1 -1
  31. package/dist/{owner-7IaH65XQ.mjs → owner-CFKfE85G.mjs} +2 -2
  32. package/dist/{proof-FBXgckPH.cjs → proof-DBxu6g2K.cjs} +1 -1
  33. package/dist/{proof-Tyx3l9v7.mjs → proof-DtpGEj0u.mjs} +3 -3
  34. package/dist/{proof-CXdG1Z6Z.js → proof-HU__qtUD.js} +1 -1
  35. package/dist/{send-BKMqs3g5.mjs → send-CwMea5r6.mjs} +3 -3
  36. package/dist/sig/http.test.mjs +2 -2
  37. package/dist/sig/key.test.mjs +209 -3
  38. package/dist/sig/ld.test.mjs +2 -2
  39. package/dist/sig/mod.cjs +2 -2
  40. package/dist/sig/mod.js +2 -2
  41. package/dist/sig/owner.test.mjs +1 -1
  42. package/dist/sig/proof.test.mjs +1 -1
  43. package/dist/{temporal-Yl2xuEII.mjs → temporal-ClSXyHyu.mjs} +1 -1
  44. package/dist/utils/docloader.test.mjs +2 -2
  45. package/dist/utils/kv-cache.test.mjs +1 -1
  46. package/dist/utils/mod.cjs +1 -1
  47. package/dist/utils/mod.js +1 -1
  48. package/package.json +6 -6
@@ -6,11 +6,13 @@ import "../std__assert-BvGuO4xO.mjs";
6
6
  import { t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
7
7
  import { t as assert } from "../assert-jSdZMYam.mjs";
8
8
  import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
9
- import { a as generateCryptoKeyPair, i as fetchKeyDetailed, o as importJwk, r as fetchKey, s as validateCryptoKey, t as exportJwk } from "../key-C1WyQwNb.mjs";
9
+ import { t as assertStrictEquals } from "../assert_strict_equals-XEgZAlrj.mjs";
10
+ import { a as generateCryptoKeyPair, i as fetchKeyDetailed, o as importJwk, r as fetchKey, s as validateCryptoKey, t as exportJwk } from "../key-Dg-NXm4K.mjs";
10
11
  import { c as rsaPublicKey3, i as rsaPrivateKey2, o as rsaPublicKey1, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
11
- import { CryptographicKey, Multikey } from "@fedify/vocab";
12
+ import { _ as wrapContextLoaderForJsonLd } from "../ld-C1wveXXf.mjs";
13
+ import { CryptographicKey, Multikey, Person } from "@fedify/vocab";
12
14
  import { createTestMeterProvider, createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
13
- import { FetchError } from "@fedify/vocab-runtime";
15
+ import { FetchError, UrlError, getDocumentLoader } from "@fedify/vocab-runtime";
14
16
  //#region src/sig/key.test.ts
15
17
  test("validateCryptoKey()", async () => {
16
18
  const pkcs1v15 = await crypto.subtle.generateKey({
@@ -496,6 +498,210 @@ test("fetchKey() returns null for a malformed actor publicKey", async () => {
496
498
  cached: true
497
499
  });
498
500
  });
501
+ for (const cls of [CryptographicKey, Multikey]) for (const location of [
502
+ "actor",
503
+ "key",
504
+ "owner"
505
+ ]) test(`fetchKey() handles JSON-LD context failures in ${cls.name} ${location} documents`, async (t) => {
506
+ const actorId = new URL("https://example.com/context-actor");
507
+ const keyId = new URL(`${actorId.href}#key`);
508
+ const key = cls === CryptographicKey ? rsaPublicKey1.clone({
509
+ id: keyId,
510
+ owner: actorId
511
+ }) : ed25519Multikey.clone({
512
+ id: keyId,
513
+ controller: actorId
514
+ });
515
+ const actorDocument = await new Person({
516
+ id: actorId,
517
+ ...key instanceof CryptographicKey ? { publicKeys: [key] } : { assertionMethods: [key] }
518
+ }).toJsonLd({ contextLoader: mockDocumentLoader });
519
+ const keyDocument = await key.toJsonLd({ contextLoader: mockDocumentLoader });
520
+ const contextUrl = `https://example.com/context/${cls.name}/${location}`;
521
+ const transportErrors = [
522
+ /* @__PURE__ */ new TypeError("fetch failed"),
523
+ /* @__PURE__ */ new TypeError("error reading a body from connection"),
524
+ globalThis.Object.assign(/* @__PURE__ */ new TypeError("The socket connection was closed unexpectedly."), { code: "ECONNRESET" }),
525
+ globalThis.Object.assign(/* @__PURE__ */ new TypeError("Network request failed"), { code: "ECONNRESET" }),
526
+ new TypeError("Network request failed", { cause: globalThis.Object.assign(/* @__PURE__ */ new Error("connection refused"), { code: "ECONNREFUSED" }) }),
527
+ new FetchError(contextUrl, "HTTP 503"),
528
+ new FetchError(contextUrl, "HTTP 503", new Response("unavailable", { status: 503 })),
529
+ new UrlError("DNS lookup failed", { reason: "dns" }),
530
+ globalThis.Object.assign(/* @__PURE__ */ new Error("request aborted"), { name: "AbortError" })
531
+ ];
532
+ const programmingErrors = [
533
+ /* @__PURE__ */ new Error("loader bug"),
534
+ /* @__PURE__ */ new ReferenceError("loader bug"),
535
+ /* @__PURE__ */ new TypeError("loader bug"),
536
+ "loader bug",
537
+ null,
538
+ void 0
539
+ ];
540
+ const cases = [
541
+ { kind: "inline" },
542
+ {
543
+ kind: "url",
544
+ wrapped: false
545
+ },
546
+ {
547
+ kind: "url",
548
+ wrapped: true
549
+ },
550
+ {
551
+ kind: "wrapped",
552
+ error: /* @__PURE__ */ new TypeError("Invalid URL string.")
553
+ },
554
+ {
555
+ kind: "remote",
556
+ document: 123
557
+ },
558
+ {
559
+ kind: "remote",
560
+ document: "not JSON"
561
+ },
562
+ {
563
+ kind: "remote",
564
+ document: { "@context": contextUrl }
565
+ },
566
+ ...transportErrors.map((error) => ({
567
+ kind: "transport",
568
+ error
569
+ })),
570
+ ...programmingErrors.map((error) => ({
571
+ kind: "programming",
572
+ error
573
+ })),
574
+ ...location === "key" ? [{
575
+ kind: "transport",
576
+ error: /* @__PURE__ */ new TypeError("fetch failed"),
577
+ fallback: true
578
+ }, {
579
+ kind: "programming",
580
+ error: /* @__PURE__ */ new ReferenceError("fallback bug"),
581
+ fallback: true
582
+ }] : []
583
+ ];
584
+ for (const scenario of cases) {
585
+ const description = "error" in scenario ? scenario.error instanceof Error ? `${scenario.error.name}: ${scenario.error.message}` : String(scenario.error) : "document" in scenario ? JSON.stringify(scenario.document) : "invalid type mapping";
586
+ await t.step(`${scenario.kind}: ${description}${"fallback" in scenario ? " (fallback)" : ""}`, async () => {
587
+ const cache = {};
588
+ let fetchError = { error: /* @__PURE__ */ new Error("stale fetch error") };
589
+ const [meterProvider, recorder] = createTestMeterProvider();
590
+ let recovered = false;
591
+ let contextLoads = 0;
592
+ const options = {
593
+ meterProvider,
594
+ documentLoader(resource) {
595
+ const document = structuredClone(resource === keyId.href && location !== "actor" ? keyDocument : actorDocument);
596
+ if (location === "actor" || location === "key" && resource === keyId.href || location === "owner" && resource === actorId.href) {
597
+ const context = scenario.kind === "inline" ? { broken: {
598
+ "@id": "https://example.com/ns#broken",
599
+ "@type": "not-an-absolute-iri"
600
+ } } : scenario.kind === "url" ? "http://[" : contextUrl;
601
+ document["@context"] = [document["@context"], context].flat();
602
+ }
603
+ return Promise.resolve({
604
+ contextUrl: null,
605
+ documentUrl: resource,
606
+ document
607
+ });
608
+ },
609
+ async contextLoader(resource) {
610
+ if (scenario.kind === "url" && resource === "http://[") {
611
+ const loader = getDocumentLoader();
612
+ return await (scenario.wrapped ? wrapContextLoaderForJsonLd(loader) : loader)(resource);
613
+ }
614
+ if (scenario.kind === "wrapped" && resource === contextUrl) return await wrapContextLoaderForJsonLd(() => Promise.reject(scenario.error))(resource);
615
+ if (resource !== contextUrl) return await mockDocumentLoader(resource);
616
+ contextLoads++;
617
+ if (!recovered && "error" in scenario && (!("fallback" in scenario) || contextLoads > 1)) throw scenario.error;
618
+ return {
619
+ contextUrl: null,
620
+ documentUrl: resource,
621
+ document: !recovered && "document" in scenario ? scenario.document : { "@context": {} }
622
+ };
623
+ },
624
+ keyCache: {
625
+ get: (id) => Promise.resolve(cache[id.href]),
626
+ set(id, value) {
627
+ cache[id.href] = value;
628
+ return Promise.resolve();
629
+ },
630
+ getFetchError: () => Promise.resolve(fetchError),
631
+ setFetchError(_id, error) {
632
+ fetchError = error ?? void 0;
633
+ return Promise.resolve();
634
+ }
635
+ }
636
+ };
637
+ const lookup = () => fetchKey(keyId, cls, options);
638
+ if (scenario.kind === "programming" && "error" in scenario) {
639
+ assertStrictEquals(await assertRejects(lookup), scenario.error);
640
+ assertEquals(cache, {});
641
+ assertStrictEquals(await assertRejects(() => fetchKeyDetailed(keyId, cls, options)), scenario.error);
642
+ assertEquals(cache, {});
643
+ return;
644
+ }
645
+ assertEquals(await lookup(), {
646
+ key: null,
647
+ cached: false
648
+ });
649
+ if (scenario.kind === "transport") {
650
+ const counter = recorder.getMeasurement("activitypub.key.lookup");
651
+ const duration = recorder.getMeasurement("activitypub.key.lookup.duration");
652
+ const status = scenario.error instanceof FetchError ? scenario.error.response?.status : void 0;
653
+ const expected = status != null ? "error" : scenario.error instanceof TypeError || scenario.error instanceof FetchError || scenario.error instanceof Error && scenario.error.name === "AbortError" ? "network_error" : "error";
654
+ assertEquals(counter?.attributes["activitypub.lookup.result"], expected);
655
+ assertEquals(duration?.attributes["activitypub.lookup.result"], expected);
656
+ assertEquals(counter?.attributes["http.response.status_code"], status);
657
+ }
658
+ assertEquals(cache, { [keyId.href]: null });
659
+ const detailed = await fetchKeyDetailed(keyId, cls, options);
660
+ assertEquals(detailed.cached, true);
661
+ if (scenario.kind === "transport" || scenario.kind === "wrapped") {
662
+ assert(detailed.fetchError != null);
663
+ if (scenario.error instanceof FetchError && scenario.error.response != null) {
664
+ assert("status" in detailed.fetchError);
665
+ assertEquals(detailed.fetchError.status, 503);
666
+ assertEquals(await detailed.fetchError.response.text(), "unavailable");
667
+ } else {
668
+ assert("error" in detailed.fetchError);
669
+ assertStrictEquals(detailed.fetchError.error, scenario.error);
670
+ }
671
+ } else assertEquals(detailed.fetchError, void 0);
672
+ const previousLoads = contextLoads;
673
+ assertEquals(await lookup(), {
674
+ key: null,
675
+ cached: true
676
+ });
677
+ assertEquals(contextLoads, previousLoads);
678
+ delete cache[keyId.href];
679
+ fetchError = void 0;
680
+ const fresh = await fetchKeyDetailed(keyId, cls, options);
681
+ assertEquals(fresh.cached, false);
682
+ assertEquals(fresh.key, null);
683
+ if (scenario.kind === "transport" || scenario.kind === "wrapped") {
684
+ assert(fresh.fetchError != null);
685
+ if (scenario.error instanceof FetchError && scenario.error.response != null) {
686
+ assert("status" in fresh.fetchError);
687
+ assertEquals(fresh.fetchError.status, 503);
688
+ assertEquals(await fresh.fetchError.response.text(), "unavailable");
689
+ } else {
690
+ assert("error" in fresh.fetchError);
691
+ assertStrictEquals(fresh.fetchError.error, scenario.error);
692
+ }
693
+ } else assertEquals(fresh.fetchError, void 0);
694
+ if (scenario.kind === "transport") {
695
+ delete cache[keyId.href];
696
+ recovered = true;
697
+ const result = await lookup();
698
+ assertEquals(result.cached, false);
699
+ assertEquals(result.key?.id, keyId);
700
+ assert(result.key?.publicKey != null);
701
+ }
702
+ });
703
+ }
704
+ });
499
705
  test("fetchKey() rejects a key whose owner does not link back", async () => {
500
706
  const keyId = "https://attacker.example/key";
501
707
  const keyDocument = await rsaPublicKey1.toJsonLd({ contextLoader: mockDocumentLoader });
@@ -5,9 +5,9 @@ import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
5
5
  import { n as assertGreaterOrEqual, r as assertFalse, t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
6
6
  import { n as assertInstanceOf, t as assert } from "../assert-jSdZMYam.mjs";
7
7
  import { t as assertThrows } from "../assert_throws-BOkhLGYc.mjs";
8
- import { a as generateCryptoKeyPair } from "../key-C1WyQwNb.mjs";
8
+ import { a as generateCryptoKeyPair } from "../key-Dg-NXm4K.mjs";
9
9
  import { a as rsaPrivateKey3, c as rsaPublicKey3, i as rsaPrivateKey2, n as ed25519PrivateKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
10
- import { a as compactJsonLd, f as isInvalidUrlTypeError, g as verifySignature, h as verifyJsonLd, i as attachSignature, n as UnsafeJsonLdError, o as createSignature, p as signJsonLd, s as detachSignature, u as hasSignatureLike } from "../ld-DsmIg6si.mjs";
10
+ import { a as compactJsonLd, f as isInvalidUrlTypeError, g as verifySignature, h as verifyJsonLd, i as attachSignature, n as UnsafeJsonLdError, o as createSignature, p as signJsonLd, s as detachSignature, u as hasSignatureLike } from "../ld-C1wveXXf.mjs";
11
11
  import { CryptographicKey } from "@fedify/vocab";
12
12
  import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
13
13
  import { encodeBase64 } from "byte-encodings/base64";
package/dist/sig/mod.cjs CHANGED
@@ -1,8 +1,8 @@
1
1
  const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
- const require_http = require("../http-BQ95e2Z_.cjs");
5
- const require_proof = require("../proof-FBXgckPH.cjs");
4
+ const require_http = require("../http-D_Xrr6kp.cjs");
5
+ const require_proof = require("../proof-DBxu6g2K.cjs");
6
6
  exports.attachSignature = require_proof.attachSignature;
7
7
  exports.createProof = require_proof.createProof;
8
8
  exports.createSignature = require_proof.createSignature;
package/dist/sig/mod.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { F as validateAcceptSignature, M as formatAcceptSignature, N as fulfillAcceptSignature, P as parseAcceptSignature, a as verifyRequestDetailed, c as fetchKey, d as importJwk, i as verifyRequest, l as fetchKeyDetailed, o as exportJwk, r as signRequest, u as generateCryptoKeyPair } from "../http-DSypZ0ko.js";
4
- import { C as verifySignature, S as verifyJsonLd, _ as hasSignatureLike, a as verifyProof, b as signJsonLd, c as getKeyOwner, d as attachSignature, i as verifyObject, m as detachSignature, n as hasProofLike, p as createSignature, r as signObject, s as doesActorOwnKey, t as createProof } from "../proof-CXdG1Z6Z.js";
3
+ import { F as validateAcceptSignature, M as formatAcceptSignature, N as fulfillAcceptSignature, P as parseAcceptSignature, a as verifyRequestDetailed, c as fetchKey, d as importJwk, i as verifyRequest, l as fetchKeyDetailed, o as exportJwk, r as signRequest, u as generateCryptoKeyPair } from "../http-DkyUBs_T.js";
4
+ import { C as verifySignature, S as verifyJsonLd, _ as hasSignatureLike, a as verifyProof, b as signJsonLd, c as getKeyOwner, d as attachSignature, i as verifyObject, m as detachSignature, n as hasProofLike, p as createSignature, r as signObject, s as doesActorOwnKey, t as createProof } from "../proof-HU__qtUD.js";
5
5
  export { attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, exportJwk, fetchKey, fetchKeyDetailed, formatAcceptSignature, fulfillAcceptSignature, generateCryptoKeyPair, getKeyOwner, hasProofLike, hasSignatureLike, importJwk, parseAcceptSignature, signJsonLd, signObject, signRequest, validateAcceptSignature, verifyJsonLd, verifyObject, verifyProof, verifyRequest, verifyRequestDetailed, verifySignature };
@@ -6,7 +6,7 @@ import "../std__assert-BvGuO4xO.mjs";
6
6
  import { r as assertFalse } from "../assert_rejects-DN60FHPX.mjs";
7
7
  import { t as assert } from "../assert-jSdZMYam.mjs";
8
8
  import { o as rsaPublicKey1, s as rsaPublicKey2 } from "../keys-BAK-tUlf.mjs";
9
- import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-7IaH65XQ.mjs";
9
+ import { n as getKeyOwner, t as doesActorOwnKey } from "../owner-CFKfE85G.mjs";
10
10
  import { Create, CryptographicKey, lookupObject } from "@fedify/vocab";
11
11
  import { createTestTracerProvider, mockDocumentLoader, test } from "@fedify/fixture";
12
12
  //#region src/sig/owner.test.ts
@@ -7,7 +7,7 @@ import { n as assertGreaterOrEqual, r as assertFalse, t as assertRejects } from
7
7
  import { n as assertInstanceOf, t as assert } from "../assert-jSdZMYam.mjs";
8
8
  import { i as rsaPrivateKey2, n as ed25519PrivateKey, r as ed25519PublicKey, s as rsaPublicKey2, t as ed25519Multikey } from "../keys-BAK-tUlf.mjs";
9
9
  import { r as normalizeOutgoingActivityJsonLd } from "../outgoing-jsonld-D4iTv7uM.mjs";
10
- import { a as verifyProof, i as verifyObject, n as hasProofLike, r as signObject, t as createProof } from "../proof-Tyx3l9v7.mjs";
10
+ import { a as verifyProof, i as verifyObject, n as hasProofLike, r as signObject, t as createProof } from "../proof-DtpGEj0u.mjs";
11
11
  import { Create, DataIntegrityProof, Document, Multikey, Note, PUBLIC_COLLECTION, Place } from "@fedify/vocab";
12
12
  import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
13
13
  import { decodeMultibase, importMultibaseKey } from "@fedify/vocab-runtime";
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { c as getNormalizationContextLoader } from "./ld-DsmIg6si.mjs";
4
+ import { c as getNormalizationContextLoader } from "./ld-C1wveXXf.mjs";
5
5
  import jsonld from "@fedify/vocab-runtime/jsonld";
6
6
  //#region src/federation/temporal.ts
7
7
  function isPlainObject(value) {
@@ -5,9 +5,9 @@ import { t as esm_default } from "../esm-vrlUxr60.mjs";
5
5
  import { t as assertEquals } from "../assert_equals-C-ZRDbaf.mjs";
6
6
  import "../std__assert-BvGuO4xO.mjs";
7
7
  import { t as assertRejects } from "../assert_rejects-DN60FHPX.mjs";
8
- import { l as verifyRequest } from "../http-Ds8PEU4r.mjs";
8
+ import { l as verifyRequest } from "../http-HjidyDfF.mjs";
9
9
  import { i as rsaPrivateKey2 } from "../keys-BAK-tUlf.mjs";
10
- import { t as getAuthenticatedDocumentLoader } from "../docloader-DKBslg7U.mjs";
10
+ import { t as getAuthenticatedDocumentLoader } from "../docloader-NOKfswJV.mjs";
11
11
  import { configure, reset } from "@logtape/logtape";
12
12
  import { mockDocumentLoader, test } from "@fedify/fixture";
13
13
  import { FetchError, UrlError } from "@fedify/vocab-runtime";
@@ -1,7 +1,7 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
3
  globalThis.addEventListener = () => {};
4
- import { n as kvCache, t as MockKvStore } from "../kv-cache-D-PGp70v.mjs";
4
+ import { n as kvCache, t as MockKvStore } from "../kv-cache-BpVwvcSI.mjs";
5
5
  import { deepStrictEqual, throws } from "node:assert";
6
6
  import { createTestMeterProvider, mockDocumentLoader, test } from "@fedify/fixture";
7
7
  import { preloadedContexts } from "@fedify/vocab-runtime";
@@ -1,6 +1,6 @@
1
1
  const { Temporal } = require("@js-temporal/polyfill");
2
2
  const { URLPattern } = require("urlpattern-polyfill");
3
3
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
4
- const require_kv_cache = require("../kv-cache-x_tgEc8v.cjs");
4
+ const require_kv_cache = require("../kv-cache-BwnC6JGt.cjs");
5
5
  exports.getAuthenticatedDocumentLoader = require_kv_cache.getAuthenticatedDocumentLoader;
6
6
  exports.kvCache = require_kv_cache.kvCache;
package/dist/utils/mod.js CHANGED
@@ -1,4 +1,4 @@
1
1
  import { Temporal } from "@js-temporal/polyfill";
2
2
  import { URLPattern } from "urlpattern-polyfill";
3
- import { n as getAuthenticatedDocumentLoader, t as kvCache } from "../kv-cache-nXxgpjXJ.js";
3
+ import { n as getAuthenticatedDocumentLoader, t as kvCache } from "../kv-cache-BhGeZk_o.js";
4
4
  export { getAuthenticatedDocumentLoader, kvCache };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/fedify",
3
- "version": "2.3.12-dev.2346+e087854c",
3
+ "version": "2.3.12",
4
4
  "description": "An ActivityPub server framework",
5
5
  "keywords": [
6
6
  "ActivityPub",
@@ -152,10 +152,10 @@
152
152
  "jsonld": "^9.0.0",
153
153
  "structured-field-values": "^2.0.4",
154
154
  "urlpattern-polyfill": "^10.1.0",
155
- "@fedify/vocab": "2.3.12-dev.2346+e087854c",
156
- "@fedify/vocab-runtime": "2.3.12-dev.2346+e087854c",
157
- "@fedify/uri-template": "2.3.12-dev.2346+e087854c",
158
- "@fedify/webfinger": "2.3.12-dev.2346+e087854c"
155
+ "@fedify/uri-template": "2.3.12",
156
+ "@fedify/vocab": "2.3.12",
157
+ "@fedify/webfinger": "2.3.12",
158
+ "@fedify/vocab-runtime": "2.3.12"
159
159
  },
160
160
  "devDependencies": {
161
161
  "@std/assert": "npm:@jsr/std__assert@^0.226.0",
@@ -168,7 +168,7 @@
168
168
  "typescript": "^6.0.0",
169
169
  "wrangler": "^4.17.0",
170
170
  "@fedify/fixture": "2.0.0",
171
- "@fedify/vocab-tools": "^2.3.12-dev.2346+e087854c"
171
+ "@fedify/vocab-tools": "^2.3.12"
172
172
  },
173
173
  "scripts": {
174
174
  "build:self": "tsdown",