@fedify/vocab-runtime 2.1.0 → 2.1.2

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 (58) hide show
  1. package/deno.json +1 -1
  2. package/dist/{chunk-CUT6urMc.cjs → chunk-CKQMccvm.cjs} +7 -9
  3. package/dist/jsonld.cjs +4 -5
  4. package/dist/jsonld.d.cts +3 -4
  5. package/dist/jsonld.d.ts +2 -2
  6. package/dist/jsonld.js +1 -3
  7. package/dist/mod.cjs +107 -180
  8. package/dist/mod.d.cts +1 -2
  9. package/dist/mod.d.ts +1 -2
  10. package/dist/mod.js +83 -159
  11. package/dist/tests/{chunk-DWy1uDak.cjs → chunk-Do9eywBl.cjs} +13 -17
  12. package/dist/tests/decimal.test.cjs +12 -21
  13. package/dist/tests/{decimal.test.js → decimal.test.mjs} +10 -18
  14. package/dist/tests/{docloader-D3nu2LmR.cjs → docloader-0Yz9aPvU.cjs} +78 -91
  15. package/dist/tests/{docloader-U31begIa.js → docloader-DiLx08rm.mjs} +62 -75
  16. package/dist/tests/docloader.test.cjs +98 -88
  17. package/dist/tests/{docloader.test.js → docloader.test.mjs} +98 -94
  18. package/dist/tests/internal/multicodec.test.cjs +5 -7
  19. package/dist/tests/internal/{multicodec.test.js → multicodec.test.mjs} +3 -4
  20. package/dist/tests/{key-ByCmSI2y.js → key-BeTHFQJK.mjs} +14 -25
  21. package/dist/tests/{key-CCPn6TEY.cjs → key-DTTIntwb.cjs} +60 -71
  22. package/dist/tests/key.test.cjs +23 -45
  23. package/dist/tests/{key.test.js → key.test.mjs} +21 -42
  24. package/dist/tests/{langstr-EPh86hXK.cjs → langstr-CbAxaeEZ.cjs} +6 -8
  25. package/dist/tests/{langstr-BsVE3s9u.js → langstr-Di5AvKpB.mjs} +1 -2
  26. package/dist/tests/langstr.test.cjs +7 -8
  27. package/dist/tests/{langstr.test.js → langstr.test.mjs} +3 -4
  28. package/dist/tests/{link-DYNFAdNu.cjs → link-FguCydMA.cjs} +6 -8
  29. package/dist/tests/{link-C3q2TC2G.js → link-NUUWCdnK.mjs} +1 -2
  30. package/dist/tests/link.test.cjs +5 -7
  31. package/dist/tests/{link.test.js → link.test.mjs} +3 -4
  32. package/dist/tests/multibase/multibase.test.cjs +10 -17
  33. package/dist/tests/multibase/{multibase.test.js → multibase.test.mjs} +10 -18
  34. package/dist/tests/{multibase-B4g8pz6F.js → multibase-BgU9XRf7.mjs} +5 -12
  35. package/dist/tests/{multibase-o_ovPHYJ.cjs → multibase-F7LtMMsK.cjs} +43 -49
  36. package/dist/tests/{multicodec--6hQ74zI.cjs → multicodec-CxGVGa91.cjs} +16 -18
  37. package/dist/tests/{multicodec-Dq3IiOV4.js → multicodec-CyFp54fI.mjs} +1 -2
  38. package/dist/tests/{request-DyrEDYQ-.cjs → request-B4BOehn0.cjs} +38 -72
  39. package/dist/tests/{request-BH_NlxCL.js → request-Nob25QBF.mjs} +4 -45
  40. package/dist/tests/request.test.cjs +23 -24
  41. package/dist/tests/request.test.mjs +42 -0
  42. package/dist/tests/{url-CWEP9Zs9.js → url-BQ_kgmCk.mjs} +3 -7
  43. package/dist/tests/{url-DIjOdK8Q.cjs → url-pFuSds44.cjs} +31 -35
  44. package/dist/tests/url.test.cjs +5 -7
  45. package/dist/tests/{url.test.js → url.test.mjs} +3 -4
  46. package/package.json +3 -3
  47. package/src/docloader.test.ts +67 -0
  48. package/src/docloader.ts +43 -11
  49. package/dist/tests/request.test.js +0 -43
  50. /package/dist/tests/{decimal.test.d.ts → decimal.test.d.mts} +0 -0
  51. /package/dist/tests/{docloader.test.d.ts → docloader.test.d.mts} +0 -0
  52. /package/dist/tests/internal/{multicodec.test.d.ts → multicodec.test.d.mts} +0 -0
  53. /package/dist/tests/{key.test.d.ts → key.test.d.mts} +0 -0
  54. /package/dist/tests/{langstr.test.d.ts → langstr.test.d.mts} +0 -0
  55. /package/dist/tests/{link.test.d.ts → link.test.d.mts} +0 -0
  56. /package/dist/tests/multibase/{multibase.test.d.ts → multibase.test.d.mts} +0 -0
  57. /package/dist/tests/{request.test.d.ts → request.test.d.mts} +0 -0
  58. /package/dist/tests/{url.test.d.ts → url.test.d.mts} +0 -0
@@ -1,13 +1,11 @@
1
- //#region rolldown:runtime
1
+ //#region \0rolldown/runtime.js
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __commonJS = (cb, mod) => function() {
9
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
- };
8
+ var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
11
9
  var __copyProps = (to, from, except, desc) => {
12
10
  if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
13
11
  key = keys[i];
@@ -22,18 +20,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
22
20
  value: mod,
23
21
  enumerable: true
24
22
  }) : target, mod));
25
-
26
23
  //#endregion
27
-
28
- Object.defineProperty(exports, '__commonJS', {
29
- enumerable: true,
30
- get: function () {
31
- return __commonJS;
32
- }
24
+ Object.defineProperty(exports, "__commonJSMin", {
25
+ enumerable: true,
26
+ get: function() {
27
+ return __commonJSMin;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "__toESM", {
31
+ enumerable: true,
32
+ get: function() {
33
+ return __toESM;
34
+ }
33
35
  });
34
- Object.defineProperty(exports, '__toESM', {
35
- enumerable: true,
36
- get: function () {
37
- return __toESM;
38
- }
39
- });
@@ -1,15 +1,10 @@
1
- const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- require('./docloader-D3nu2LmR.cjs');
3
- require('./request-DyrEDYQ-.cjs');
4
- require('./link-DYNFAdNu.cjs');
5
- require('./url-DIjOdK8Q.cjs');
6
- require('./multicodec--6hQ74zI.cjs');
7
- require('./key-CCPn6TEY.cjs');
8
- require('./multibase-o_ovPHYJ.cjs');
9
- require('./langstr-EPh86hXK.cjs');
10
- const node_assert = require_chunk.__toESM(require("node:assert"));
11
- const node_test = require_chunk.__toESM(require("node:test"));
12
-
1
+ require("./chunk-Do9eywBl.cjs");
2
+ require("./docloader-0Yz9aPvU.cjs");
3
+ require("./key-DTTIntwb.cjs");
4
+ require("./multibase-F7LtMMsK.cjs");
5
+ require("./langstr-CbAxaeEZ.cjs");
6
+ let node_assert = require("node:assert");
7
+ let node_test = require("node:test");
13
8
  //#region src/decimal.ts
14
9
  const DECIMAL_PATTERN = /^(\+|-)?([0-9]+(\.[0-9]*)?|\.[0-9]+)$/;
15
10
  const XML_SCHEMA_WHITESPACE_PATTERN = /[\t\n\r ]+/g;
@@ -84,11 +79,10 @@ function parseDecimal(value) {
84
79
  if (!isDecimal(normalized)) throw new TypeError(`${JSON.stringify(value)} is not a valid xsd:decimal lexical form.`);
85
80
  return normalized;
86
81
  }
87
-
88
82
  //#endregion
89
83
  //#region src/decimal.test.ts
90
84
  (0, node_test.test)("parseDecimal() accepts valid xsd:decimal lexical forms", () => {
91
- const values = [
85
+ for (const value of [
92
86
  "-1.23",
93
87
  "12678967.543233",
94
88
  "+100000.00",
@@ -97,8 +91,7 @@ function parseDecimal(value) {
97
91
  "5.",
98
92
  "0",
99
93
  "-0.0"
100
- ];
101
- for (const value of values) (0, node_assert.deepStrictEqual)(parseDecimal(value), value);
94
+ ]) (0, node_assert.deepStrictEqual)(parseDecimal(value), value);
102
95
  });
103
96
  (0, node_test.test)("isDecimal() reports valid xsd:decimal lexical forms", () => {
104
97
  (0, node_assert.deepStrictEqual)(isDecimal("12.50"), true);
@@ -123,7 +116,7 @@ function parseDecimal(value) {
123
116
  (0, node_assert.deepStrictEqual)(parseDecimal(" .5 "), ".5");
124
117
  });
125
118
  (0, node_test.test)("parseDecimal() rejects invalid xsd:decimal lexical forms", () => {
126
- const values = [
119
+ for (const value of [
127
120
  "",
128
121
  ".",
129
122
  "+",
@@ -135,8 +128,7 @@ function parseDecimal(value) {
135
128
  "1..2",
136
129
  "1 2.3",
137
130
  "1 2.3"
138
- ];
139
- for (const value of values) (0, node_assert.throws)(() => parseDecimal(value), {
131
+ ]) (0, node_assert.throws)(() => parseDecimal(value), {
140
132
  name: "TypeError",
141
133
  message: `${JSON.stringify(value)} is not a valid xsd:decimal lexical form.`
142
134
  });
@@ -150,5 +142,4 @@ function parseDecimal(value) {
150
142
  (0, node_test.test)("isDecimal() is exported from the package root", () => {
151
143
  (0, node_assert.deepStrictEqual)(isDecimal("12.50"), true);
152
144
  });
153
-
154
- //#endregion
145
+ //#endregion
@@ -1,14 +1,9 @@
1
- import "./docloader-U31begIa.js";
2
- import "./request-BH_NlxCL.js";
3
- import "./link-C3q2TC2G.js";
4
- import "./url-CWEP9Zs9.js";
5
- import "./multicodec-Dq3IiOV4.js";
6
- import "./key-ByCmSI2y.js";
7
- import "./multibase-B4g8pz6F.js";
8
- import "./langstr-BsVE3s9u.js";
1
+ import "./docloader-DiLx08rm.mjs";
2
+ import "./key-BeTHFQJK.mjs";
3
+ import "./multibase-BgU9XRf7.mjs";
4
+ import "./langstr-Di5AvKpB.mjs";
9
5
  import { deepStrictEqual, throws } from "node:assert";
10
6
  import { test } from "node:test";
11
-
12
7
  //#region src/decimal.ts
13
8
  const DECIMAL_PATTERN = /^(\+|-)?([0-9]+(\.[0-9]*)?|\.[0-9]+)$/;
14
9
  const XML_SCHEMA_WHITESPACE_PATTERN = /[\t\n\r ]+/g;
@@ -83,11 +78,10 @@ function parseDecimal(value) {
83
78
  if (!isDecimal(normalized)) throw new TypeError(`${JSON.stringify(value)} is not a valid xsd:decimal lexical form.`);
84
79
  return normalized;
85
80
  }
86
-
87
81
  //#endregion
88
82
  //#region src/decimal.test.ts
89
83
  test("parseDecimal() accepts valid xsd:decimal lexical forms", () => {
90
- const values = [
84
+ for (const value of [
91
85
  "-1.23",
92
86
  "12678967.543233",
93
87
  "+100000.00",
@@ -96,8 +90,7 @@ test("parseDecimal() accepts valid xsd:decimal lexical forms", () => {
96
90
  "5.",
97
91
  "0",
98
92
  "-0.0"
99
- ];
100
- for (const value of values) deepStrictEqual(parseDecimal(value), value);
93
+ ]) deepStrictEqual(parseDecimal(value), value);
101
94
  });
102
95
  test("isDecimal() reports valid xsd:decimal lexical forms", () => {
103
96
  deepStrictEqual(isDecimal("12.50"), true);
@@ -122,7 +115,7 @@ test("parseDecimal() normalizes XML Schema whitespace", () => {
122
115
  deepStrictEqual(parseDecimal(" .5 "), ".5");
123
116
  });
124
117
  test("parseDecimal() rejects invalid xsd:decimal lexical forms", () => {
125
- const values = [
118
+ for (const value of [
126
119
  "",
127
120
  ".",
128
121
  "+",
@@ -134,8 +127,7 @@ test("parseDecimal() rejects invalid xsd:decimal lexical forms", () => {
134
127
  "1..2",
135
128
  "1 2.3",
136
129
  "1 2.3"
137
- ];
138
- for (const value of values) throws(() => parseDecimal(value), {
130
+ ]) throws(() => parseDecimal(value), {
139
131
  name: "TypeError",
140
132
  message: `${JSON.stringify(value)} is not a valid xsd:decimal lexical form.`
141
133
  });
@@ -149,5 +141,5 @@ test("canParseDecimal() is exported from the package root", () => {
149
141
  test("isDecimal() is exported from the package root", () => {
150
142
  deepStrictEqual(isDecimal("12.50"), true);
151
143
  });
152
-
153
- //#endregion
144
+ //#endregion
145
+ export {};
@@ -1,12 +1,11 @@
1
- const require_chunk = require('./chunk-DWy1uDak.cjs');
2
- const require_request = require('./request-DyrEDYQ-.cjs');
3
- const require_link = require('./link-DYNFAdNu.cjs');
4
- const require_url = require('./url-DIjOdK8Q.cjs');
5
- const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
6
- const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
7
-
1
+ require("./chunk-Do9eywBl.cjs");
2
+ const require_request = require("./request-B4BOehn0.cjs");
3
+ const require_link = require("./link-FguCydMA.cjs");
4
+ const require_url = require("./url-pFuSds44.cjs");
5
+ let _logtape_logtape = require("@logtape/logtape");
6
+ let _opentelemetry_api = require("@opentelemetry/api");
8
7
  //#region src/contexts/activitystreams.json
9
- var __context$11 = {
8
+ var activitystreams_default = { "@context": {
10
9
  "@vocab": "_:",
11
10
  "xsd": "http://www.w3.org/2001/XMLSchema#",
12
11
  "as": "https://www.w3.org/ns/activitystreams#",
@@ -382,12 +381,10 @@ var __context$11 = {
382
381
  "@id": "as:alsoKnownAs",
383
382
  "@type": "@id"
384
383
  }
385
- };
386
- var activitystreams_default = { "@context": __context$11 };
387
-
384
+ } };
388
385
  //#endregion
389
386
  //#region src/contexts/did-v1.json
390
- var __context$10 = {
387
+ var did_v1_default = { "@context": {
391
388
  "@protected": true,
392
389
  "id": "@id",
393
390
  "type": "@type",
@@ -441,12 +438,10 @@ var __context$10 = {
441
438
  "@id": "https://w3id.org/security#verificationMethod",
442
439
  "@type": "@id"
443
440
  }
444
- };
445
- var did_v1_default = { "@context": __context$10 };
446
-
441
+ } };
447
442
  //#endregion
448
443
  //#region src/contexts/fep-5711.json
449
- var __context$9 = {
444
+ var fep_5711_default = { "@context": {
450
445
  "likesOf": {
451
446
  "@id": "https://w3id.org/fep/5711#likesOf",
452
447
  "@type": "@id"
@@ -479,12 +474,10 @@ var __context$9 = {
479
474
  "@id": "https://w3id.org/fep/5711#likedOf",
480
475
  "@type": "@id"
481
476
  }
482
- };
483
- var fep_5711_default = { "@context": __context$9 };
484
-
477
+ } };
485
478
  //#endregion
486
479
  //#region src/contexts/gotosocial.json
487
- var __context$8 = {
480
+ var gotosocial_default = { "@context": {
488
481
  "xsd": "http://www.w3.org/2001/XMLSchema#",
489
482
  "gts": "https://gotosocial.org/ns#",
490
483
  "LikeRequest": "gts:LikeRequest",
@@ -567,12 +560,10 @@ var __context$8 = {
567
560
  "@id": "gts:approvedBy",
568
561
  "@type": "@id"
569
562
  }
570
- };
571
- var gotosocial_default = { "@context": __context$8 };
572
-
563
+ } };
573
564
  //#endregion
574
565
  //#region src/contexts/identity-v1.json
575
- var __context$7 = {
566
+ var identity_v1_default = { "@context": {
576
567
  "id": "@id",
577
568
  "type": "@type",
578
569
  "cred": "https://w3id.org/credentials#",
@@ -721,12 +712,10 @@ var __context$7 = {
721
712
  "@id": "perm:writePermission",
722
713
  "@type": "@id"
723
714
  }
724
- };
725
- var identity_v1_default = { "@context": __context$7 };
726
-
715
+ } };
727
716
  //#endregion
728
717
  //#region src/contexts/joinmastodon.json
729
- var __context$6 = {
718
+ var joinmastodon_default = { "@context": {
730
719
  "toot": "http://joinmastodon.org/ns#",
731
720
  "Emoji": "toot:Emoji",
732
721
  "featured": {
@@ -751,12 +740,10 @@ var __context$6 = {
751
740
  "@id": "toot:attributionDomains",
752
741
  "@type": "@id"
753
742
  }
754
- };
755
- var joinmastodon_default = { "@context": __context$6 };
756
-
743
+ } };
757
744
  //#endregion
758
745
  //#region src/contexts/schemaorg.json
759
- var __context$5 = {
746
+ var schemaorg_default = { "@context": {
760
747
  "type": "@type",
761
748
  "id": "@id",
762
749
  "HTML": { "@id": "rdf:HTML" },
@@ -4058,12 +4045,10 @@ var __context$5 = {
4058
4045
  "yearlyRevenue": { "@id": "schema:yearlyRevenue" },
4059
4046
  "yearsInOperation": { "@id": "schema:yearsInOperation" },
4060
4047
  "yield": { "@id": "schema:yield" }
4061
- };
4062
- var schemaorg_default = { "@context": __context$5 };
4063
-
4048
+ } };
4064
4049
  //#endregion
4065
4050
  //#region src/contexts/security-data-integrity-v1.json
4066
- var __context$4 = {
4051
+ var security_data_integrity_v1_default = { "@context": {
4067
4052
  "id": "@id",
4068
4053
  "type": "@type",
4069
4054
  "@protected": true,
@@ -4138,12 +4123,10 @@ var __context$4 = {
4138
4123
  }
4139
4124
  }
4140
4125
  }
4141
- };
4142
- var security_data_integrity_v1_default = { "@context": __context$4 };
4143
-
4126
+ } };
4144
4127
  //#endregion
4145
4128
  //#region src/contexts/security-data-integrity-v2.json
4146
- var __context$3 = {
4129
+ var security_data_integrity_v2_default = { "@context": {
4147
4130
  "id": "@id",
4148
4131
  "type": "@type",
4149
4132
  "@protected": true,
@@ -4221,12 +4204,10 @@ var __context$3 = {
4221
4204
  }
4222
4205
  }
4223
4206
  }
4224
- };
4225
- var security_data_integrity_v2_default = { "@context": __context$3 };
4226
-
4207
+ } };
4227
4208
  //#endregion
4228
4209
  //#region src/contexts/security-multikey-v1.json
4229
- var __context$2 = {
4210
+ var security_multikey_v1_default = { "@context": {
4230
4211
  "id": "@id",
4231
4212
  "type": "@type",
4232
4213
  "@protected": true,
@@ -4258,12 +4239,10 @@ var __context$2 = {
4258
4239
  }
4259
4240
  }
4260
4241
  }
4261
- };
4262
- var security_multikey_v1_default = { "@context": __context$2 };
4263
-
4242
+ } };
4264
4243
  //#endregion
4265
4244
  //#region src/contexts/security-v1.json
4266
- var __context$1 = {
4245
+ var security_v1_default = { "@context": {
4267
4246
  "id": "@id",
4268
4247
  "type": "@type",
4269
4248
  "dc": "http://purl.org/dc/terms/",
@@ -4334,21 +4313,17 @@ var __context$1 = {
4334
4313
  "signature": "sec:signature",
4335
4314
  "signatureAlgorithm": "sec:signingAlgorithm",
4336
4315
  "signatureValue": "sec:signatureValue"
4337
- };
4338
- var security_v1_default = { "@context": __context$1 };
4339
-
4316
+ } };
4340
4317
  //#endregion
4341
4318
  //#region src/contexts/webfinger.json
4342
- var __context = {
4319
+ var webfinger_default = { "@context": {
4343
4320
  "wf": "https://purl.archive.org/socialweb/webfinger#",
4344
4321
  "xsd": "http://www.w3.org/2001/XMLSchema#",
4345
4322
  "webfinger": {
4346
4323
  "@id": "wf:webfinger",
4347
4324
  "@type": "xsd:string"
4348
4325
  }
4349
- };
4350
- var webfinger_default = { "@context": __context };
4351
-
4326
+ } };
4352
4327
  //#endregion
4353
4328
  //#region src/contexts.ts
4354
4329
  const preloadedContexts = {
@@ -4365,15 +4340,14 @@ const preloadedContexts = {
4365
4340
  "https://w3id.org/fep/5711": fep_5711_default,
4366
4341
  "http://joinmastodon.org/ns": joinmastodon_default
4367
4342
  };
4368
- var contexts_default = preloadedContexts;
4369
-
4370
4343
  //#endregion
4371
4344
  //#region src/docloader.ts
4372
- const logger = (0, __logtape_logtape.getLogger)([
4345
+ const logger = (0, _logtape_logtape.getLogger)([
4373
4346
  "fedify",
4374
4347
  "runtime",
4375
4348
  "docloader"
4376
4349
  ]);
4350
+ const DEFAULT_MAX_REDIRECTION = 20;
4377
4351
  /**
4378
4352
  * Gets a {@link RemoteDocument} from the given response.
4379
4353
  * @param url The URL of the document to load.
@@ -4383,7 +4357,7 @@ const logger = (0, __logtape_logtape.getLogger)([
4383
4357
  * @throws {FetchError} If the response is not OK.
4384
4358
  * @internal
4385
4359
  */
4386
- async function getRemoteDocument(url, response, fetch$1) {
4360
+ async function getRemoteDocument(url, response, fetch) {
4387
4361
  const documentUrl = response.url === "" ? url : response.url;
4388
4362
  const docUrl = new URL(documentUrl);
4389
4363
  if (!response.ok) {
@@ -4421,7 +4395,7 @@ async function getRemoteDocument(url, response, fetch$1) {
4421
4395
  alternateUrl: altUri.href,
4422
4396
  url: documentUrl
4423
4397
  });
4424
- return await fetch$1(altUri.href);
4398
+ return await fetch(altUri.href);
4425
4399
  }
4426
4400
  }
4427
4401
  }
@@ -4447,15 +4421,14 @@ async function getRemoteDocument(url, response, fetch$1) {
4447
4421
  attrPattern.lastIndex = 0;
4448
4422
  while ((attrMatch = attrPattern.exec(tagContent)) !== null) {
4449
4423
  const key = attrMatch[1].toLowerCase();
4450
- const value = attrMatch[2] ?? attrMatch[3] ?? attrMatch[4] ?? "";
4451
- attribs[key] = value;
4424
+ attribs[key] = attrMatch[2] ?? attrMatch[3] ?? attrMatch[4] ?? "";
4452
4425
  }
4453
4426
  if (attribs.rel === "alternate" && "type" in attribs && (attribs.type === "application/activity+json" || attribs.type === "application/ld+json" || attribs.type.startsWith("application/ld+json;")) && "href" in attribs && new URL(attribs.href, docUrl).href !== docUrl.href) {
4454
4427
  logger.debug("Found alternate document: {alternateUrl} from {url}", {
4455
4428
  alternateUrl: attribs.href,
4456
4429
  url: documentUrl
4457
4430
  });
4458
- return await fetch$1(new URL(attribs.href, docUrl).href);
4431
+ return await fetch(new URL(attribs.href, docUrl).href);
4459
4432
  }
4460
4433
  }
4461
4434
  document = JSON.parse(html);
@@ -4490,33 +4463,34 @@ async function getRemoteDocument(url, response, fetch$1) {
4490
4463
  * @since 1.3.0
4491
4464
  */
4492
4465
  function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4493
- const tracerProvider = __opentelemetry_api.trace.getTracerProvider();
4494
- const tracer = tracerProvider.getTracer(require_request.deno_default.name, require_request.deno_default.version);
4495
- async function load(url, options) {
4466
+ const tracer = _opentelemetry_api.trace.getTracerProvider().getTracer(require_request.name, require_request.version);
4467
+ async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
4496
4468
  options?.signal?.throwIfAborted();
4497
- if (!skipPreloadedContexts && url in contexts_default) {
4498
- logger.debug("Using preloaded context: {url}.", { url });
4469
+ const currentUrl = new URL(url).href;
4470
+ if (!skipPreloadedContexts && currentUrl in preloadedContexts) {
4471
+ logger.debug("Using preloaded context: {url}.", { url: currentUrl });
4499
4472
  return {
4500
4473
  contextUrl: null,
4501
- document: contexts_default[url],
4502
- documentUrl: url
4474
+ document: preloadedContexts[currentUrl],
4475
+ documentUrl: currentUrl
4503
4476
  };
4504
4477
  }
4505
4478
  if (!allowPrivateAddress) try {
4506
- await require_url.validatePublicUrl(url);
4479
+ await require_url.validatePublicUrl(currentUrl);
4507
4480
  } catch (error) {
4508
4481
  if (error instanceof require_url.UrlError) logger.error("Disallowed private URL: {url}", {
4509
- url,
4482
+ url: currentUrl,
4510
4483
  error
4511
4484
  });
4512
4485
  throw error;
4513
4486
  }
4487
+ visited.add(currentUrl);
4514
4488
  return await tracer.startActiveSpan("activitypub.fetch_document", {
4515
- kind: __opentelemetry_api.SpanKind.CLIENT,
4516
- attributes: { "url.full": url }
4489
+ kind: _opentelemetry_api.SpanKind.CLIENT,
4490
+ attributes: { "url.full": currentUrl }
4517
4491
  }, async (span) => {
4518
4492
  try {
4519
- const request = require_request.createActivityPubRequest(url, { userAgent });
4493
+ const request = require_request.createActivityPubRequest(currentUrl, { userAgent });
4520
4494
  require_request.logRequest(logger, request);
4521
4495
  const response = await fetch(request, {
4522
4496
  redirect: "manual",
@@ -4524,18 +4498,32 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4524
4498
  });
4525
4499
  span.setAttribute("http.response.status_code", response.status);
4526
4500
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4527
- const redirectUrl = response.headers.get("Location");
4501
+ if (redirected >= DEFAULT_MAX_REDIRECTION) {
4502
+ logger.error("Too many redirections ({redirections}) while fetching document.", {
4503
+ redirections: redirected + 1,
4504
+ url: currentUrl
4505
+ });
4506
+ throw new require_request.FetchError(currentUrl, `Too many redirections (${redirected + 1})`);
4507
+ }
4508
+ const redirectUrl = new URL(response.headers.get("Location"), response.url === "" ? currentUrl : response.url).href;
4528
4509
  span.setAttribute("http.redirect.url", redirectUrl);
4529
- return await load(redirectUrl, options);
4510
+ if (visited.has(redirectUrl)) {
4511
+ logger.error("Detected a redirect loop while fetching document: {url} -> {redirectUrl}", {
4512
+ url: currentUrl,
4513
+ redirectUrl
4514
+ });
4515
+ throw new require_request.FetchError(currentUrl, `Redirect loop detected: ${redirectUrl}`);
4516
+ }
4517
+ return await load(redirectUrl, options, redirected + 1, visited);
4530
4518
  }
4531
- const result = await getRemoteDocument(url, response, load);
4519
+ const result = await getRemoteDocument(currentUrl, response, load);
4532
4520
  span.setAttribute("docloader.document_url", result.documentUrl);
4533
4521
  if (result.contextUrl != null) span.setAttribute("docloader.context_url", result.contextUrl);
4534
4522
  return result;
4535
4523
  } catch (error) {
4536
4524
  span.recordException(error);
4537
4525
  span.setStatus({
4538
- code: __opentelemetry_api.SpanStatusCode.ERROR,
4526
+ code: _opentelemetry_api.SpanStatusCode.ERROR,
4539
4527
  message: String(error)
4540
4528
  });
4541
4529
  throw error;
@@ -4546,17 +4534,16 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4546
4534
  }
4547
4535
  return load;
4548
4536
  }
4549
-
4550
4537
  //#endregion
4551
- Object.defineProperty(exports, 'contexts_default', {
4552
- enumerable: true,
4553
- get: function () {
4554
- return contexts_default;
4555
- }
4538
+ Object.defineProperty(exports, "getDocumentLoader", {
4539
+ enumerable: true,
4540
+ get: function() {
4541
+ return getDocumentLoader;
4542
+ }
4543
+ });
4544
+ Object.defineProperty(exports, "preloadedContexts", {
4545
+ enumerable: true,
4546
+ get: function() {
4547
+ return preloadedContexts;
4548
+ }
4556
4549
  });
4557
- Object.defineProperty(exports, 'getDocumentLoader', {
4558
- enumerable: true,
4559
- get: function () {
4560
- return getDocumentLoader;
4561
- }
4562
- });