@fedify/fedify 1.10.4 → 1.10.5

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 (102) hide show
  1. package/dist/{actor-BOBYD2WU.js → actor-CQdxP8N-.js} +187 -187
  2. package/dist/{actor-Snz2FxRV.js → actor-Ch9BTg3N.js} +1 -1
  3. package/dist/{actor-Bj7QfjMG.cjs → actor-CjkHF7Cj.cjs} +187 -187
  4. package/dist/{authdocloader-DYsGSwww.js → authdocloader-COFZT9Wh.js} +3 -3
  5. package/dist/{authdocloader-DAkeYWim.js → authdocloader-fR-Fqcpa.js} +3 -3
  6. package/dist/{authdocloader-dttG5T5s.cjs → authdocloader-zc5ibOmU.cjs} +3 -3
  7. package/dist/{builder-DLRO0a1o.js → builder-YD0q32nG.js} +4 -4
  8. package/dist/{client-B6e8VkGv.js → client-BgCucCG7.js} +1 -1
  9. package/dist/compat/transformers.test.js +16 -16
  10. package/dist/{docloader-BH4pzZZC.js → docloader-BETPdM09.js} +30 -13
  11. package/dist/{docloader-C54TKiQx.cjs → docloader-irBWMSOZ.cjs} +30 -13
  12. package/dist/{esm-CbGx2KcW.js → esm-iGH0sRsE.js} +1 -1
  13. package/dist/federation/builder.test.js +5 -5
  14. package/dist/federation/collection.test.js +3 -3
  15. package/dist/federation/handler.test.js +17 -17
  16. package/dist/federation/idempotency.test.js +17 -17
  17. package/dist/federation/inbox.test.js +4 -4
  18. package/dist/federation/keycache.test.js +8 -4
  19. package/dist/federation/kv.test.js +3 -3
  20. package/dist/federation/middleware.test.js +18 -18
  21. package/dist/federation/mod.cjs +10 -10
  22. package/dist/federation/mod.js +10 -10
  23. package/dist/federation/mq.test.js +3 -3
  24. package/dist/federation/retry.test.js +3 -3
  25. package/dist/federation/router.test.js +3 -3
  26. package/dist/federation/send.test.js +10 -10
  27. package/dist/{http-DmxJlZvy.cjs → http-CQAqR_vx.cjs} +18 -7
  28. package/dist/{http-n5BTcxeh.js → http-CxiIW4rD.js} +17 -6
  29. package/dist/{http-DbXPDTX4.js → http-PgdBoDIj.js} +18 -7
  30. package/dist/{inbox-CQcSx4I9.js → inbox-DcDIqTbR.js} +1 -1
  31. package/dist/{key-BLNbwA_2.js → key-Bnod5wJl.js} +4 -4
  32. package/dist/{key-CPqemOR2.js → key-C6swTX71.js} +3 -3
  33. package/dist/{key-Bidhpg7V.js → key-Cg0kO4dA.js} +2 -2
  34. package/dist/{key-DY-1H5d9.js → key-I-ibyaZH.js} +2 -2
  35. package/dist/key-_Uq8gkmM.cjs +10 -0
  36. package/dist/{key-CdyBP8cw.cjs → key-dNFkodH5.cjs} +2 -2
  37. package/dist/{keycache-DtptNYtI.js → keycache-hSs_XFSb.js} +11 -2
  38. package/dist/{keys-kLtROwLY.js → keys-CElJez9H.js} +1 -1
  39. package/dist/{ld-8dX3VuDg.js → ld-b16r91YS.js} +2 -2
  40. package/dist/{lookup-DpuJzIOl.cjs → lookup-Bfq9Jpm0.cjs} +1 -1
  41. package/dist/{lookup-CBeEjsrU.js → lookup-CiSAeWJl.js} +1 -1
  42. package/dist/{lookup-DqqwtRxy.js → lookup-CySNcNcC.js} +1 -1
  43. package/dist/middleware-BWsOtDIF.cjs +17 -0
  44. package/dist/middleware-Bm4bJzjg.js +26 -0
  45. package/dist/{middleware-ZywRHmGd.js → middleware-Bs4xDuXR.js} +20 -11
  46. package/dist/middleware-BvODpE_U.js +17 -0
  47. package/dist/{middleware-Cnkc9TKm.js → middleware-C5emnCh-.js} +13 -13
  48. package/dist/{middleware-fQqVkTI_.cjs → middleware-Dxo56yae.cjs} +20 -11
  49. package/dist/mod.cjs +10 -10
  50. package/dist/mod.js +10 -10
  51. package/dist/nodeinfo/client.test.js +5 -5
  52. package/dist/nodeinfo/handler.test.js +16 -16
  53. package/dist/nodeinfo/mod.cjs +2 -2
  54. package/dist/nodeinfo/mod.js +2 -2
  55. package/dist/nodeinfo/semver.test.js +3 -3
  56. package/dist/nodeinfo/types.test.js +3 -3
  57. package/dist/otel/exporter.test.js +3 -3
  58. package/dist/{owner-DUbJSrOH.js → owner-Bs-sPbHX.js} +2 -2
  59. package/dist/{proof-r5NuE5WJ.cjs → proof-BvQS195q.cjs} +3 -3
  60. package/dist/{proof-DkGFNm3h.js → proof-SgRikE_Y.js} +2 -2
  61. package/dist/{proof-BZJajwfx.js → proof-flD2DeA-.js} +3 -3
  62. package/dist/runtime/authdocloader.test.js +9 -9
  63. package/dist/runtime/docloader.test.js +51 -4
  64. package/dist/runtime/key.test.js +5 -5
  65. package/dist/runtime/langstr.test.js +3 -3
  66. package/dist/runtime/link.test.js +3 -3
  67. package/dist/runtime/mod.cjs +6 -6
  68. package/dist/runtime/mod.js +6 -6
  69. package/dist/runtime/multibase/multibase.test.js +3 -3
  70. package/dist/runtime/url.test.js +3 -3
  71. package/dist/{send-BP6BnZB0.js → send-C0gFHa2i.js} +2 -2
  72. package/dist/sig/http.test.js +51 -8
  73. package/dist/sig/key.test.js +6 -6
  74. package/dist/sig/ld.test.js +7 -7
  75. package/dist/sig/mod.cjs +6 -6
  76. package/dist/sig/mod.js +6 -6
  77. package/dist/sig/owner.test.js +7 -7
  78. package/dist/sig/proof.test.js +7 -7
  79. package/dist/testing/docloader.test.js +3 -3
  80. package/dist/testing/mod.js +3 -3
  81. package/dist/{testing-BHk-TOca.js → testing-C1GIraJh.js} +2 -2
  82. package/dist/{type-BJ212aq2.js → type-DUhon7qK.js} +215 -198
  83. package/dist/{types-jnh1Ge-D.cjs → types-BgUCCngg.cjs} +1 -1
  84. package/dist/{types-D8QbEexz.js → types-Bu-epI-z.js} +1 -1
  85. package/dist/vocab/actor.test.js +5 -5
  86. package/dist/vocab/lookup.test.js +4 -4
  87. package/dist/vocab/mod.cjs +4 -4
  88. package/dist/vocab/mod.js +4 -4
  89. package/dist/vocab/type.test.js +3 -3
  90. package/dist/vocab/vocab.test.js +4 -4
  91. package/dist/{vocab-DZmhBJkz.cjs → vocab-5i6DEIi6.cjs} +3 -3
  92. package/dist/{vocab-CKa0etLd.js → vocab-CBavAdew.js} +3 -3
  93. package/dist/webfinger/handler.test.js +16 -16
  94. package/dist/webfinger/lookup.test.js +4 -4
  95. package/dist/webfinger/mod.cjs +2 -2
  96. package/dist/webfinger/mod.js +2 -2
  97. package/dist/x/cfworkers.test.js +3 -3
  98. package/package.json +1 -1
  99. package/dist/key-Bam8dJ0F.cjs +0 -10
  100. package/dist/middleware-Ba3Grmg4.js +0 -26
  101. package/dist/middleware-COSQWfNA.cjs +0 -17
  102. package/dist/middleware-Cq8RCRvR.js +0 -17
@@ -3,22 +3,22 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, deno_default, getDocumentLoader, getTypeId, kvCache, lookupWebFinger } from "./type-BJ212aq2.js";
7
- import { getNodeInfo } from "./client-B6e8VkGv.js";
8
- import { RouterError, lookupObject, traverseCollection } from "./lookup-DqqwtRxy.js";
6
+ import { Activity, Collection, CollectionPage, CryptographicKey, Link, Multikey, Object as Object$1, OrderedCollection, OrderedCollectionPage, deno_default, getDocumentLoader, getTypeId, kvCache, lookupWebFinger } from "./type-DUhon7qK.js";
7
+ import { getNodeInfo } from "./client-BgCucCG7.js";
8
+ import { RouterError, lookupObject, traverseCollection } from "./lookup-CySNcNcC.js";
9
9
  import { nodeInfoToJson } from "./types-BIgY6c-l.js";
10
- import { exportJwk, importJwk, validateCryptoKey } from "./key-Bidhpg7V.js";
11
- import { verifyRequest } from "./http-n5BTcxeh.js";
12
- import { getAuthenticatedDocumentLoader } from "./authdocloader-DYsGSwww.js";
13
- import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-8dX3VuDg.js";
14
- import { doesActorOwnKey, getKeyOwner } from "./owner-DUbJSrOH.js";
15
- import { signObject, verifyObject } from "./proof-DkGFNm3h.js";
16
- import { routeActivity } from "./inbox-CQcSx4I9.js";
17
- import { FederationBuilderImpl } from "./builder-DLRO0a1o.js";
10
+ import { exportJwk, importJwk, validateCryptoKey } from "./key-Cg0kO4dA.js";
11
+ import { verifyRequest } from "./http-CxiIW4rD.js";
12
+ import { getAuthenticatedDocumentLoader } from "./authdocloader-COFZT9Wh.js";
13
+ import { detachSignature, hasSignature, signJsonLd, verifyJsonLd } from "./ld-b16r91YS.js";
14
+ import { doesActorOwnKey, getKeyOwner } from "./owner-Bs-sPbHX.js";
15
+ import { signObject, verifyObject } from "./proof-SgRikE_Y.js";
16
+ import { routeActivity } from "./inbox-DcDIqTbR.js";
17
+ import { FederationBuilderImpl } from "./builder-YD0q32nG.js";
18
18
  import { buildCollectionSynchronizationHeader } from "./collection-CSzG2j1P.js";
19
- import { KvKeyCache } from "./keycache-DtptNYtI.js";
19
+ import { KvKeyCache } from "./keycache-hSs_XFSb.js";
20
20
  import { createExponentialBackoffPolicy } from "./retry-D4GJ670a.js";
21
- import { extractInboxes, sendActivity } from "./send-BP6BnZB0.js";
21
+ import { extractInboxes, sendActivity } from "./send-C0gFHa2i.js";
22
22
  import { getLogger, withContext } from "@logtape/logtape";
23
23
  import { SpanKind, SpanStatusCode, context, propagation, trace } from "@opentelemetry/api";
24
24
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_HEADER, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_URL_FULL } from "@opentelemetry/semantic-conventions";
@@ -4,15 +4,15 @@
4
4
 
5
5
  const require_chunk = require('./chunk-DqRYRqnO.cjs');
6
6
  const require_transformers = require('./transformers-CoBS-oFG.cjs');
7
- const require_docloader = require('./docloader-C54TKiQx.cjs');
8
- const require_actor = require('./actor-Bj7QfjMG.cjs');
9
- const require_lookup = require('./lookup-DpuJzIOl.cjs');
10
- const require_key = require('./key-CdyBP8cw.cjs');
11
- const require_http = require('./http-DmxJlZvy.cjs');
12
- const require_proof = require('./proof-r5NuE5WJ.cjs');
13
- const require_types = require('./types-jnh1Ge-D.cjs');
14
- const require_authdocloader = require('./authdocloader-dttG5T5s.cjs');
15
- const require_vocab = require('./vocab-DZmhBJkz.cjs');
7
+ const require_docloader = require('./docloader-irBWMSOZ.cjs');
8
+ const require_actor = require('./actor-CjkHF7Cj.cjs');
9
+ const require_lookup = require('./lookup-Bfq9Jpm0.cjs');
10
+ const require_key = require('./key-dNFkodH5.cjs');
11
+ const require_http = require('./http-CQAqR_vx.cjs');
12
+ const require_proof = require('./proof-BvQS195q.cjs');
13
+ const require_types = require('./types-BgUCCngg.cjs');
14
+ const require_authdocloader = require('./authdocloader-zc5ibOmU.cjs');
15
+ const require_vocab = require('./vocab-5i6DEIi6.cjs');
16
16
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
17
17
  const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
18
18
  const byte_encodings_hex = require_chunk.__toESM(require("byte-encodings/hex"));
@@ -345,7 +345,7 @@ var FederationBuilderImpl = class {
345
345
  this.collectionTypeIds = {};
346
346
  }
347
347
  async build(options) {
348
- const { FederationImpl: FederationImpl$1 } = await Promise.resolve().then(() => require("./middleware-COSQWfNA.cjs"));
348
+ const { FederationImpl: FederationImpl$1 } = await Promise.resolve().then(() => require("./middleware-BWsOtDIF.cjs"));
349
349
  const f = new FederationImpl$1(options);
350
350
  const trailingSlashInsensitiveValue = f.router.trailingSlashInsensitive;
351
351
  f.router = this.router.clone();
@@ -913,6 +913,11 @@ async function buildCollectionSynchronizationHeader(collectionId, actorIds) {
913
913
 
914
914
  //#endregion
915
915
  //#region src/federation/keycache.ts
916
+ const NULL_KEY_CACHE_VALUE = { _fedify: "key-unavailable" };
917
+ const NULL_KEY_CACHE_TTL = Temporal.Duration.from({ minutes: 5 });
918
+ function isNullKeyCacheValue(value) {
919
+ return typeof value === "object" && value != null && "_fedify" in value && value._fedify === NULL_KEY_CACHE_VALUE._fedify;
920
+ }
916
921
  var KvKeyCache = class {
917
922
  kv;
918
923
  prefix;
@@ -928,6 +933,10 @@ var KvKeyCache = class {
928
933
  if (this.nullKeys.has(keyId.href)) return null;
929
934
  const serialized = await this.kv.get([...this.prefix, keyId.href]);
930
935
  if (serialized == null) return void 0;
936
+ if (isNullKeyCacheValue(serialized)) {
937
+ this.nullKeys.add(keyId.href);
938
+ return null;
939
+ }
931
940
  try {
932
941
  return await require_actor.CryptographicKey.fromJsonLd(serialized, this.options);
933
942
  } catch {
@@ -942,7 +951,7 @@ var KvKeyCache = class {
942
951
  async set(keyId, key) {
943
952
  if (key == null) {
944
953
  this.nullKeys.add(keyId.href);
945
- await this.kv.delete([...this.prefix, keyId.href]);
954
+ await this.kv.set([...this.prefix, keyId.href], NULL_KEY_CACHE_VALUE, { ttl: NULL_KEY_CACHE_TTL });
946
955
  return;
947
956
  }
948
957
  this.nullKeys.delete(keyId.href);
package/dist/mod.cjs CHANGED
@@ -4,17 +4,17 @@
4
4
 
5
5
  const require_transformers = require('./transformers-CoBS-oFG.cjs');
6
6
  require('./compat-DmDDELst.cjs');
7
- const require_docloader = require('./docloader-C54TKiQx.cjs');
8
- const require_actor = require('./actor-Bj7QfjMG.cjs');
9
- const require_middleware = require('./middleware-fQqVkTI_.cjs');
10
- const require_lookup = require('./lookup-DpuJzIOl.cjs');
11
- const require_key = require('./key-CdyBP8cw.cjs');
12
- const require_http = require('./http-DmxJlZvy.cjs');
13
- const require_proof = require('./proof-r5NuE5WJ.cjs');
7
+ const require_docloader = require('./docloader-irBWMSOZ.cjs');
8
+ const require_actor = require('./actor-CjkHF7Cj.cjs');
9
+ const require_middleware = require('./middleware-Dxo56yae.cjs');
10
+ const require_lookup = require('./lookup-Bfq9Jpm0.cjs');
11
+ const require_key = require('./key-dNFkodH5.cjs');
12
+ const require_http = require('./http-CQAqR_vx.cjs');
13
+ const require_proof = require('./proof-BvQS195q.cjs');
14
14
  const require_federation = require('./federation-C15gGOh1.cjs');
15
- const require_types = require('./types-jnh1Ge-D.cjs');
16
- const require_authdocloader = require('./authdocloader-dttG5T5s.cjs');
17
- const require_vocab = require('./vocab-DZmhBJkz.cjs');
15
+ const require_types = require('./types-BgUCCngg.cjs');
16
+ const require_authdocloader = require('./authdocloader-zc5ibOmU.cjs');
17
+ const require_vocab = require('./vocab-5i6DEIi6.cjs');
18
18
  require('./nodeinfo-Co9lJrWl.cjs');
19
19
  require('./runtime-C58AJWSv.cjs');
20
20
  require('./sig-ByHXzqUi.cjs');
package/dist/mod.js CHANGED
@@ -4,17 +4,17 @@
4
4
 
5
5
  import { actorDehydrator, autoIdAssigner, getDefaultActivityTransformers } from "./transformers-BFT6d7J5.js";
6
6
  import "./compat-nxUqe4Z-.js";
7
- import { FetchError, fetchDocumentLoader, getDocumentLoader, getUserAgent, kvCache } from "./docloader-BH4pzZZC.js";
8
- import { Accept, Activity, Add, Announce, Application, Arrive, Article, Audio, Block, ChatMessage, Collection, CollectionPage, Create, CryptographicKey, DataIntegrityProof, Delete, DidService, Dislike, Document, Emoji, EmojiReact, Endpoints, Event, Export, Flag, Follow, Group, Hashtag, Ignore, Image, IntransitiveActivity, Invite, Join, LanguageString, Leave, Like, Link, Listen, Mention, Move, Multikey, Note, Object as Object$1, Offer, OrderedCollection, OrderedCollectionPage, Organization, Page, Person, Place, Profile, PropertyValue, Question, Read, Reject, Relationship, Remove, Service, Source, TentativeAccept, TentativeReject, Tombstone, Travel, Undo, Update, Video, View, exportMultibaseKey, exportSpki, getActorClassByTypeName, getActorHandle, getActorTypeName, getTypeId, importMultibaseKey, importPem, importPkcs1, importSpki, isActor, normalizeActorHandle } from "./actor-BOBYD2WU.js";
9
- import { Router, RouterError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable } from "./middleware-ZywRHmGd.js";
10
- import { lookupWebFinger } from "./lookup-CBeEjsrU.js";
11
- import { exportJwk, fetchKey, generateCryptoKeyPair, importJwk } from "./key-DY-1H5d9.js";
12
- import { signRequest, verifyRequest } from "./http-DbXPDTX4.js";
13
- import { attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, getKeyOwner, signJsonLd, signObject, verifyJsonLd, verifyObject, verifyProof, verifySignature } from "./proof-BZJajwfx.js";
7
+ import { FetchError, fetchDocumentLoader, getDocumentLoader, getUserAgent, kvCache } from "./docloader-BETPdM09.js";
8
+ import { Accept, Activity, Add, Announce, Application, Arrive, Article, Audio, Block, ChatMessage, Collection, CollectionPage, Create, CryptographicKey, DataIntegrityProof, Delete, DidService, Dislike, Document, Emoji, EmojiReact, Endpoints, Event, Export, Flag, Follow, Group, Hashtag, Ignore, Image, IntransitiveActivity, Invite, Join, LanguageString, Leave, Like, Link, Listen, Mention, Move, Multikey, Note, Object as Object$1, Offer, OrderedCollection, OrderedCollectionPage, Organization, Page, Person, Place, Profile, PropertyValue, Question, Read, Reject, Relationship, Remove, Service, Source, TentativeAccept, TentativeReject, Tombstone, Travel, Undo, Update, Video, View, exportMultibaseKey, exportSpki, getActorClassByTypeName, getActorHandle, getActorTypeName, getTypeId, importMultibaseKey, importPem, importPkcs1, importSpki, isActor, normalizeActorHandle } from "./actor-CQdxP8N-.js";
9
+ import { Router, RouterError, buildCollectionSynchronizationHeader, createExponentialBackoffPolicy, createFederation, createFederationBuilder, digest, respondWithObject, respondWithObjectIfAcceptable } from "./middleware-Bs4xDuXR.js";
10
+ import { lookupWebFinger } from "./lookup-CiSAeWJl.js";
11
+ import { exportJwk, fetchKey, generateCryptoKeyPair, importJwk } from "./key-I-ibyaZH.js";
12
+ import { signRequest, verifyRequest } from "./http-PgdBoDIj.js";
13
+ import { attachSignature, createProof, createSignature, detachSignature, doesActorOwnKey, getKeyOwner, signJsonLd, signObject, verifyJsonLd, verifyObject, verifyProof, verifySignature } from "./proof-flD2DeA-.js";
14
14
  import { InProcessMessageQueue, MemoryKvStore, ParallelMessageQueue } from "./federation-K-xsO03l.js";
15
- import { formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer } from "./types-D8QbEexz.js";
16
- import { getAuthenticatedDocumentLoader } from "./authdocloader-DAkeYWim.js";
17
- import { PUBLIC_COLLECTION, isFediverseHandle, lookupObject, parseFediverseHandle, toAcctUrl, traverseCollection } from "./vocab-CKa0etLd.js";
15
+ import { formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer } from "./types-Bu-epI-z.js";
16
+ import { getAuthenticatedDocumentLoader } from "./authdocloader-fR-Fqcpa.js";
17
+ import { PUBLIC_COLLECTION, isFediverseHandle, lookupObject, parseFediverseHandle, toAcctUrl, traverseCollection } from "./vocab-CBavAdew.js";
18
18
  import "./nodeinfo-DfycQ8Wf.js";
19
19
  import "./runtime-DPYEDf-o.js";
20
20
  import "./sig-Cj3tk-ig.js";
@@ -3,20 +3,20 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-BJ212aq2.js";
6
+ import "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import "../semver-dArNLkR9.js";
11
- import { getNodeInfo, parseInboundService, parseNodeInfo, parseOutboundService, parseProtocol, parseServices, parseSoftware, parseUsage } from "../client-B6e8VkGv.js";
12
- import "../lookup-DqqwtRxy.js";
13
- import { test } from "../testing-BHk-TOca.js";
11
+ import { getNodeInfo, parseInboundService, parseNodeInfo, parseOutboundService, parseProtocol, parseServices, parseSoftware, parseUsage } from "../client-BgCucCG7.js";
12
+ import "../lookup-CySNcNcC.js";
13
+ import { test } from "../testing-C1GIraJh.js";
14
14
  import "../std__assert-X-_kMxKM.js";
15
15
  import "../assert_rejects-DiIiJbZn.js";
16
16
  import "../assert_is_error-BPGph1Jx.js";
17
17
  import "../assert_not_equals-f3m3epl3.js";
18
18
  import "../assert_throws-BOO88avQ.js";
19
- import { esm_default } from "../esm-CbGx2KcW.js";
19
+ import { esm_default } from "../esm-iGH0sRsE.js";
20
20
 
21
21
  //#region src/nodeinfo/client.test.ts
22
22
  test("getNodeInfo()", async (t) => {
@@ -3,30 +3,30 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-BJ212aq2.js";
6
+ import "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
11
- import { createFederation, handleNodeInfo, handleNodeInfoJrd } from "../middleware-Cnkc9TKm.js";
11
+ import { createFederation, handleNodeInfo, handleNodeInfoJrd } from "../middleware-C5emnCh-.js";
12
12
  import { parseSemVer } from "../semver-dArNLkR9.js";
13
- import "../client-B6e8VkGv.js";
14
- import "../lookup-DqqwtRxy.js";
13
+ import "../client-BgCucCG7.js";
14
+ import "../lookup-CySNcNcC.js";
15
15
  import "../types-BIgY6c-l.js";
16
- import "../actor-Snz2FxRV.js";
17
- import "../key-Bidhpg7V.js";
18
- import "../http-n5BTcxeh.js";
19
- import "../authdocloader-DYsGSwww.js";
20
- import "../ld-8dX3VuDg.js";
21
- import "../owner-DUbJSrOH.js";
22
- import "../proof-DkGFNm3h.js";
23
- import "../inbox-CQcSx4I9.js";
24
- import "../builder-DLRO0a1o.js";
16
+ import "../actor-Ch9BTg3N.js";
17
+ import "../key-Cg0kO4dA.js";
18
+ import "../http-CxiIW4rD.js";
19
+ import "../authdocloader-COFZT9Wh.js";
20
+ import "../ld-b16r91YS.js";
21
+ import "../owner-Bs-sPbHX.js";
22
+ import "../proof-SgRikE_Y.js";
23
+ import "../inbox-DcDIqTbR.js";
24
+ import "../builder-YD0q32nG.js";
25
25
  import "../collection-CSzG2j1P.js";
26
- import "../keycache-DtptNYtI.js";
26
+ import "../keycache-hSs_XFSb.js";
27
27
  import "../retry-D4GJ670a.js";
28
- import "../send-BP6BnZB0.js";
29
- import { createRequestContext, test } from "../testing-BHk-TOca.js";
28
+ import "../send-C0gFHa2i.js";
29
+ import { createRequestContext, test } from "../testing-C1GIraJh.js";
30
30
  import "../std__assert-X-_kMxKM.js";
31
31
  import "../assert_rejects-DiIiJbZn.js";
32
32
  import "../assert_is_error-BPGph1Jx.js";
@@ -2,8 +2,8 @@
2
2
  const { Temporal } = require("@js-temporal/polyfill");
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
- require('../docloader-C54TKiQx.cjs');
6
- const require_types = require('../types-jnh1Ge-D.cjs');
5
+ require('../docloader-irBWMSOZ.cjs');
6
+ const require_types = require('../types-BgUCCngg.cjs');
7
7
  require('../nodeinfo-Co9lJrWl.cjs');
8
8
 
9
9
  exports.formatSemVer = require_types.formatSemVer;
@@ -2,8 +2,8 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import "../docloader-BH4pzZZC.js";
6
- import { formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer } from "../types-D8QbEexz.js";
5
+ import "../docloader-BETPdM09.js";
6
+ import { formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer } from "../types-Bu-epI-z.js";
7
7
  import "../nodeinfo-DfycQ8Wf.js";
8
8
 
9
9
  export { formatSemVer, getNodeInfo, nodeInfoToJson, parseNodeInfo, parseSemVer };
@@ -3,13 +3,13 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-BJ212aq2.js";
6
+ import "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { formatSemVer, parseSemVer } from "../semver-dArNLkR9.js";
11
- import "../lookup-DqqwtRxy.js";
12
- import { test } from "../testing-BHk-TOca.js";
11
+ import "../lookup-CySNcNcC.js";
12
+ import { test } from "../testing-C1GIraJh.js";
13
13
  import "../std__assert-X-_kMxKM.js";
14
14
  import "../assert_rejects-DiIiJbZn.js";
15
15
  import "../assert_is_error-BPGph1Jx.js";
@@ -3,14 +3,14 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-BJ212aq2.js";
6
+ import "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import "../semver-dArNLkR9.js";
11
- import "../lookup-DqqwtRxy.js";
11
+ import "../lookup-CySNcNcC.js";
12
12
  import { nodeInfoToJson } from "../types-BIgY6c-l.js";
13
- import { test } from "../testing-BHk-TOca.js";
13
+ import { test } from "../testing-C1GIraJh.js";
14
14
  import "../std__assert-X-_kMxKM.js";
15
15
  import "../assert_rejects-DiIiJbZn.js";
16
16
  import "../assert_is_error-BPGph1Jx.js";
@@ -3,13 +3,13 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import "../type-BJ212aq2.js";
6
+ import "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
11
- import "../lookup-DqqwtRxy.js";
12
- import { test } from "../testing-BHk-TOca.js";
11
+ import "../lookup-CySNcNcC.js";
12
+ import { test } from "../testing-C1GIraJh.js";
13
13
  import "../std__assert-X-_kMxKM.js";
14
14
  import "../assert_rejects-DiIiJbZn.js";
15
15
  import "../assert_is_error-BPGph1Jx.js";
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { CryptographicKey, Object as Object$1, deno_default, getDocumentLoader } from "./type-BJ212aq2.js";
7
- import { isActor } from "./actor-Snz2FxRV.js";
6
+ import { CryptographicKey, Object as Object$1, deno_default, getDocumentLoader } from "./type-DUhon7qK.js";
7
+ import { isActor } from "./actor-Ch9BTg3N.js";
8
8
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
9
9
 
10
10
  //#region src/sig/owner.ts
@@ -3,9 +3,9 @@
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
5
  const require_chunk = require('./chunk-DqRYRqnO.cjs');
6
- const require_docloader = require('./docloader-C54TKiQx.cjs');
7
- const require_actor = require('./actor-Bj7QfjMG.cjs');
8
- const require_key = require('./key-CdyBP8cw.cjs');
6
+ const require_docloader = require('./docloader-irBWMSOZ.cjs');
7
+ const require_actor = require('./actor-CjkHF7Cj.cjs');
8
+ const require_key = require('./key-dNFkodH5.cjs');
9
9
  const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
10
10
  const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
11
11
  const jsonld = require_chunk.__toESM(require("jsonld"));
@@ -3,8 +3,8 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { Activity, DataIntegrityProof, Multikey, deno_default, getTypeId } from "./type-BJ212aq2.js";
7
- import { fetchKey, validateCryptoKey } from "./key-Bidhpg7V.js";
6
+ import { Activity, DataIntegrityProof, Multikey, deno_default, getTypeId } from "./type-DUhon7qK.js";
7
+ import { fetchKey, validateCryptoKey } from "./key-Cg0kO4dA.js";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
  import { SpanStatusCode, trace } from "@opentelemetry/api";
10
10
  import { encodeHex } from "byte-encodings/hex";
@@ -2,9 +2,9 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { deno_default, getDocumentLoader } from "./docloader-BH4pzZZC.js";
6
- import { Activity, CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1, getTypeId, isActor } from "./actor-BOBYD2WU.js";
7
- import { fetchKey, validateCryptoKey } from "./key-DY-1H5d9.js";
5
+ import { deno_default, getDocumentLoader } from "./docloader-BETPdM09.js";
6
+ import { Activity, CryptographicKey, DataIntegrityProof, Multikey, Object as Object$1, getTypeId, isActor } from "./actor-CQdxP8N-.js";
7
+ import { fetchKey, validateCryptoKey } from "./key-I-ibyaZH.js";
8
8
  import { getLogger } from "@logtape/logtape";
9
9
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
10
10
  import jsonld from "jsonld";
@@ -3,23 +3,23 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { UrlError } from "../type-BJ212aq2.js";
6
+ import { UrlError } from "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
- import "../lookup-DqqwtRxy.js";
11
- import "../actor-Snz2FxRV.js";
12
- import "../key-Bidhpg7V.js";
13
- import { verifyRequest } from "../http-n5BTcxeh.js";
14
- import { getAuthenticatedDocumentLoader } from "../authdocloader-DYsGSwww.js";
15
- import { mockDocumentLoader, test } from "../testing-BHk-TOca.js";
10
+ import "../lookup-CySNcNcC.js";
11
+ import "../actor-Ch9BTg3N.js";
12
+ import "../key-Cg0kO4dA.js";
13
+ import { verifyRequest } from "../http-CxiIW4rD.js";
14
+ import { getAuthenticatedDocumentLoader } from "../authdocloader-COFZT9Wh.js";
15
+ import { mockDocumentLoader, test } from "../testing-C1GIraJh.js";
16
16
  import "../std__assert-X-_kMxKM.js";
17
17
  import { assertRejects } from "../assert_rejects-DiIiJbZn.js";
18
18
  import "../assert_is_error-BPGph1Jx.js";
19
19
  import "../assert_not_equals-f3m3epl3.js";
20
20
  import "../assert_throws-BOO88avQ.js";
21
- import { rsaPrivateKey2 } from "../keys-kLtROwLY.js";
22
- import { esm_default } from "../esm-CbGx2KcW.js";
21
+ import { rsaPrivateKey2 } from "../keys-CElJez9H.js";
22
+ import { esm_default } from "../esm-iGH0sRsE.js";
23
23
 
24
24
  //#region src/runtime/authdocloader.test.ts
25
25
  test("getAuthenticatedDocumentLoader()", async (t) => {
@@ -3,20 +3,20 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { FetchError, UrlError, contexts_default, deno_default, getDocumentLoader, getUserAgent, kvCache } from "../type-BJ212aq2.js";
6
+ import { FetchError, UrlError, contexts_default, deno_default, getDocumentLoader, getUserAgent, kvCache } from "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
10
  import { MemoryKvStore } from "../kv-QzKcOQgP.js";
11
- import "../lookup-DqqwtRxy.js";
12
- import { mockDocumentLoader, test } from "../testing-BHk-TOca.js";
11
+ import "../lookup-CySNcNcC.js";
12
+ import { mockDocumentLoader, test } from "../testing-C1GIraJh.js";
13
13
  import "../std__assert-X-_kMxKM.js";
14
14
  import { assertRejects } from "../assert_rejects-DiIiJbZn.js";
15
15
  import "../assert_is_error-BPGph1Jx.js";
16
16
  import "../assert_not_equals-f3m3epl3.js";
17
17
  import { assertThrows } from "../assert_throws-BOO88avQ.js";
18
18
  import { createTestTracerProvider } from "../otel-Chy5T2Xh.js";
19
- import { esm_default } from "../esm-CbGx2KcW.js";
19
+ import { esm_default } from "../esm-iGH0sRsE.js";
20
20
  import process from "node:process";
21
21
 
22
22
  //#region src/runtime/docloader.test.ts
@@ -287,6 +287,53 @@ test("getDocumentLoader()", async (t) => {
287
287
  assertEquals(await fetchDocumentLoader2("https://example.com/localhost-redirect"), expected);
288
288
  assertEquals(await fetchDocumentLoader2("https://example.com/localhost-link"), expected);
289
289
  });
290
+ let redirectAttempts = 0;
291
+ esm_default.get("begin:https://example.com/too-many-redirects/", (cl) => {
292
+ redirectAttempts++;
293
+ const index = Number(cl.url.split("/").at(-1));
294
+ return {
295
+ status: 302,
296
+ headers: { Location: `https://example.com/too-many-redirects/${index + 1}` }
297
+ };
298
+ });
299
+ await t.step("too many redirects", async () => {
300
+ redirectAttempts = 0;
301
+ await assertRejects(() => fetchDocumentLoader("https://example.com/too-many-redirects/0"), FetchError, "Too many redirections");
302
+ assertEquals(redirectAttempts, 21);
303
+ });
304
+ let loopAttempts = 0;
305
+ esm_default.get("https://example.com/redirect-loop-a", () => {
306
+ loopAttempts++;
307
+ return {
308
+ status: 302,
309
+ headers: { Location: "https://example.com/redirect-loop-b" }
310
+ };
311
+ });
312
+ esm_default.get("https://example.com/redirect-loop-b", () => {
313
+ loopAttempts++;
314
+ return {
315
+ status: 302,
316
+ headers: { Location: "https://example.com/redirect-loop-a" }
317
+ };
318
+ });
319
+ await t.step("redirect loop", async () => {
320
+ loopAttempts = 0;
321
+ await assertRejects(() => fetchDocumentLoader("https://example.com/redirect-loop-a"), FetchError, "Redirect loop detected");
322
+ assertEquals(loopAttempts, 2);
323
+ });
324
+ let relativeLoopAttempts = 0;
325
+ esm_default.get("https://example.com/redirect-loop-relative", () => {
326
+ relativeLoopAttempts++;
327
+ return {
328
+ status: 302,
329
+ headers: { Location: "/redirect-loop-relative" }
330
+ };
331
+ });
332
+ await t.step("redirect loop with relative location", async () => {
333
+ relativeLoopAttempts = 0;
334
+ await assertRejects(() => fetchDocumentLoader("https://example.com/redirect-loop-relative"), FetchError, "Redirect loop detected");
335
+ assertEquals(relativeLoopAttempts, 1);
336
+ });
290
337
  const maliciousPayload = "<a" + " a=\"b\"".repeat(30) + " ";
291
338
  esm_default.get("https://example.com/redos", {
292
339
  body: maliciousPayload,
@@ -3,14 +3,14 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { exportMultibaseKey, exportSpki, importMultibaseKey, importPem, importPkcs1, importSpki } from "../type-BJ212aq2.js";
6
+ import { exportMultibaseKey, exportSpki, importMultibaseKey, importPem, importPkcs1, importSpki } from "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
- import "../lookup-DqqwtRxy.js";
11
- import "../actor-Snz2FxRV.js";
12
- import { exportJwk, importJwk } from "../key-Bidhpg7V.js";
13
- import { test } from "../testing-BHk-TOca.js";
10
+ import "../lookup-CySNcNcC.js";
11
+ import "../actor-Ch9BTg3N.js";
12
+ import { exportJwk, importJwk } from "../key-Cg0kO4dA.js";
13
+ import { test } from "../testing-C1GIraJh.js";
14
14
  import "../std__assert-X-_kMxKM.js";
15
15
  import "../assert_rejects-DiIiJbZn.js";
16
16
  import "../assert_is_error-BPGph1Jx.js";
@@ -3,12 +3,12 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { LanguageString } from "../type-BJ212aq2.js";
6
+ import { LanguageString } from "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import "../assert-MZs1qjMx.js";
9
9
  import "../assert_instance_of-DHz7EHNU.js";
10
- import "../lookup-DqqwtRxy.js";
11
- import { test } from "../testing-BHk-TOca.js";
10
+ import "../lookup-CySNcNcC.js";
11
+ import { test } from "../testing-C1GIraJh.js";
12
12
  import "../std__assert-X-_kMxKM.js";
13
13
  import "../assert_rejects-DiIiJbZn.js";
14
14
  import "../assert_is_error-BPGph1Jx.js";
@@ -3,9 +3,9 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { HttpHeaderLink } from "../type-BJ212aq2.js";
7
- import "../lookup-DqqwtRxy.js";
8
- import { test } from "../testing-BHk-TOca.js";
6
+ import { HttpHeaderLink } from "../type-DUhon7qK.js";
7
+ import "../lookup-CySNcNcC.js";
8
+ import { test } from "../testing-C1GIraJh.js";
9
9
  import { deepStrictEqual, throws } from "node:assert";
10
10
 
11
11
  //#region src/runtime/link.test.ts
@@ -2,12 +2,12 @@
2
2
  const { Temporal } = require("@js-temporal/polyfill");
3
3
  const { URLPattern } = require("urlpattern-polyfill");
4
4
 
5
- const require_docloader = require('../docloader-C54TKiQx.cjs');
6
- const require_actor = require('../actor-Bj7QfjMG.cjs');
7
- require('../lookup-DpuJzIOl.cjs');
8
- require('../key-CdyBP8cw.cjs');
9
- require('../http-DmxJlZvy.cjs');
10
- const require_authdocloader = require('../authdocloader-dttG5T5s.cjs');
5
+ const require_docloader = require('../docloader-irBWMSOZ.cjs');
6
+ const require_actor = require('../actor-CjkHF7Cj.cjs');
7
+ require('../lookup-Bfq9Jpm0.cjs');
8
+ require('../key-dNFkodH5.cjs');
9
+ require('../http-CQAqR_vx.cjs');
10
+ const require_authdocloader = require('../authdocloader-zc5ibOmU.cjs');
11
11
  require('../runtime-C58AJWSv.cjs');
12
12
 
13
13
  exports.FetchError = require_docloader.FetchError;
@@ -2,12 +2,12 @@
2
2
  import { Temporal } from "@js-temporal/polyfill";
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
 
5
- import { FetchError, fetchDocumentLoader, getDocumentLoader, getUserAgent, kvCache } from "../docloader-BH4pzZZC.js";
6
- import { LanguageString, exportMultibaseKey, exportSpki, importMultibaseKey, importPem, importPkcs1, importSpki } from "../actor-BOBYD2WU.js";
7
- import "../lookup-CBeEjsrU.js";
8
- import "../key-DY-1H5d9.js";
9
- import "../http-DbXPDTX4.js";
10
- import { getAuthenticatedDocumentLoader } from "../authdocloader-DAkeYWim.js";
5
+ import { FetchError, fetchDocumentLoader, getDocumentLoader, getUserAgent, kvCache } from "../docloader-BETPdM09.js";
6
+ import { LanguageString, exportMultibaseKey, exportSpki, importMultibaseKey, importPem, importPkcs1, importSpki } from "../actor-CQdxP8N-.js";
7
+ import "../lookup-CiSAeWJl.js";
8
+ import "../key-I-ibyaZH.js";
9
+ import "../http-PgdBoDIj.js";
10
+ import { getAuthenticatedDocumentLoader } from "../authdocloader-fR-Fqcpa.js";
11
11
  import "../runtime-DPYEDf-o.js";
12
12
 
13
13
  export { FetchError, LanguageString, exportMultibaseKey, exportSpki, fetchDocumentLoader, getAuthenticatedDocumentLoader, getDocumentLoader, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, kvCache };
@@ -3,12 +3,12 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { codes, decode, decodeText, encode, encodeText, names } from "../../type-BJ212aq2.js";
6
+ import { codes, decode, decodeText, encode, encodeText, names } from "../../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../../assert_equals-DSbWqCm3.js";
8
8
  import "../../assert-MZs1qjMx.js";
9
9
  import "../../assert_instance_of-DHz7EHNU.js";
10
- import "../../lookup-DqqwtRxy.js";
11
- import { test } from "../../testing-BHk-TOca.js";
10
+ import "../../lookup-CySNcNcC.js";
11
+ import { test } from "../../testing-C1GIraJh.js";
12
12
  import "../../std__assert-X-_kMxKM.js";
13
13
  import "../../assert_rejects-DiIiJbZn.js";
14
14
  import "../../assert_is_error-BPGph1Jx.js";
@@ -3,11 +3,11 @@
3
3
  import { URLPattern } from "urlpattern-polyfill";
4
4
  globalThis.addEventListener = () => {};
5
5
 
6
- import { UrlError, expandIPv6Address, isValidPublicIPv4Address, isValidPublicIPv6Address, validatePublicUrl } from "../type-BJ212aq2.js";
6
+ import { UrlError, expandIPv6Address, isValidPublicIPv4Address, isValidPublicIPv6Address, validatePublicUrl } from "../type-DUhon7qK.js";
7
7
  import { assertEquals } from "../assert_equals-DSbWqCm3.js";
8
8
  import { assert } from "../assert-MZs1qjMx.js";
9
- import "../lookup-DqqwtRxy.js";
10
- import { test } from "../testing-BHk-TOca.js";
9
+ import "../lookup-CySNcNcC.js";
10
+ import { test } from "../testing-C1GIraJh.js";
11
11
  import { assertFalse, assertRejects } from "../assert_rejects-DiIiJbZn.js";
12
12
  import "../assert_is_error-BPGph1Jx.js";
13
13