@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,11 +1,10 @@
1
- import { FetchError, createActivityPubRequest, deno_default, logRequest } from "./request-BH_NlxCL.js";
2
- import { HttpHeaderLink } from "./link-C3q2TC2G.js";
3
- import { UrlError, validatePublicUrl } from "./url-CWEP9Zs9.js";
1
+ import { a as name, i as logRequest, n as createActivityPubRequest, o as version, t as FetchError } from "./request-Nob25QBF.mjs";
2
+ import { t as HttpHeaderLink } from "./link-NUUWCdnK.mjs";
3
+ import { a as validatePublicUrl, t as UrlError } from "./url-BQ_kgmCk.mjs";
4
4
  import { getLogger } from "@logtape/logtape";
5
5
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
6
-
7
6
  //#region src/contexts/activitystreams.json
8
- var __context$11 = {
7
+ var activitystreams_default = { "@context": {
9
8
  "@vocab": "_:",
10
9
  "xsd": "http://www.w3.org/2001/XMLSchema#",
11
10
  "as": "https://www.w3.org/ns/activitystreams#",
@@ -381,12 +380,10 @@ var __context$11 = {
381
380
  "@id": "as:alsoKnownAs",
382
381
  "@type": "@id"
383
382
  }
384
- };
385
- var activitystreams_default = { "@context": __context$11 };
386
-
383
+ } };
387
384
  //#endregion
388
385
  //#region src/contexts/did-v1.json
389
- var __context$10 = {
386
+ var did_v1_default = { "@context": {
390
387
  "@protected": true,
391
388
  "id": "@id",
392
389
  "type": "@type",
@@ -440,12 +437,10 @@ var __context$10 = {
440
437
  "@id": "https://w3id.org/security#verificationMethod",
441
438
  "@type": "@id"
442
439
  }
443
- };
444
- var did_v1_default = { "@context": __context$10 };
445
-
440
+ } };
446
441
  //#endregion
447
442
  //#region src/contexts/fep-5711.json
448
- var __context$9 = {
443
+ var fep_5711_default = { "@context": {
449
444
  "likesOf": {
450
445
  "@id": "https://w3id.org/fep/5711#likesOf",
451
446
  "@type": "@id"
@@ -478,12 +473,10 @@ var __context$9 = {
478
473
  "@id": "https://w3id.org/fep/5711#likedOf",
479
474
  "@type": "@id"
480
475
  }
481
- };
482
- var fep_5711_default = { "@context": __context$9 };
483
-
476
+ } };
484
477
  //#endregion
485
478
  //#region src/contexts/gotosocial.json
486
- var __context$8 = {
479
+ var gotosocial_default = { "@context": {
487
480
  "xsd": "http://www.w3.org/2001/XMLSchema#",
488
481
  "gts": "https://gotosocial.org/ns#",
489
482
  "LikeRequest": "gts:LikeRequest",
@@ -566,12 +559,10 @@ var __context$8 = {
566
559
  "@id": "gts:approvedBy",
567
560
  "@type": "@id"
568
561
  }
569
- };
570
- var gotosocial_default = { "@context": __context$8 };
571
-
562
+ } };
572
563
  //#endregion
573
564
  //#region src/contexts/identity-v1.json
574
- var __context$7 = {
565
+ var identity_v1_default = { "@context": {
575
566
  "id": "@id",
576
567
  "type": "@type",
577
568
  "cred": "https://w3id.org/credentials#",
@@ -720,12 +711,10 @@ var __context$7 = {
720
711
  "@id": "perm:writePermission",
721
712
  "@type": "@id"
722
713
  }
723
- };
724
- var identity_v1_default = { "@context": __context$7 };
725
-
714
+ } };
726
715
  //#endregion
727
716
  //#region src/contexts/joinmastodon.json
728
- var __context$6 = {
717
+ var joinmastodon_default = { "@context": {
729
718
  "toot": "http://joinmastodon.org/ns#",
730
719
  "Emoji": "toot:Emoji",
731
720
  "featured": {
@@ -750,12 +739,10 @@ var __context$6 = {
750
739
  "@id": "toot:attributionDomains",
751
740
  "@type": "@id"
752
741
  }
753
- };
754
- var joinmastodon_default = { "@context": __context$6 };
755
-
742
+ } };
756
743
  //#endregion
757
744
  //#region src/contexts/schemaorg.json
758
- var __context$5 = {
745
+ var schemaorg_default = { "@context": {
759
746
  "type": "@type",
760
747
  "id": "@id",
761
748
  "HTML": { "@id": "rdf:HTML" },
@@ -4057,12 +4044,10 @@ var __context$5 = {
4057
4044
  "yearlyRevenue": { "@id": "schema:yearlyRevenue" },
4058
4045
  "yearsInOperation": { "@id": "schema:yearsInOperation" },
4059
4046
  "yield": { "@id": "schema:yield" }
4060
- };
4061
- var schemaorg_default = { "@context": __context$5 };
4062
-
4047
+ } };
4063
4048
  //#endregion
4064
4049
  //#region src/contexts/security-data-integrity-v1.json
4065
- var __context$4 = {
4050
+ var security_data_integrity_v1_default = { "@context": {
4066
4051
  "id": "@id",
4067
4052
  "type": "@type",
4068
4053
  "@protected": true,
@@ -4137,12 +4122,10 @@ var __context$4 = {
4137
4122
  }
4138
4123
  }
4139
4124
  }
4140
- };
4141
- var security_data_integrity_v1_default = { "@context": __context$4 };
4142
-
4125
+ } };
4143
4126
  //#endregion
4144
4127
  //#region src/contexts/security-data-integrity-v2.json
4145
- var __context$3 = {
4128
+ var security_data_integrity_v2_default = { "@context": {
4146
4129
  "id": "@id",
4147
4130
  "type": "@type",
4148
4131
  "@protected": true,
@@ -4220,12 +4203,10 @@ var __context$3 = {
4220
4203
  }
4221
4204
  }
4222
4205
  }
4223
- };
4224
- var security_data_integrity_v2_default = { "@context": __context$3 };
4225
-
4206
+ } };
4226
4207
  //#endregion
4227
4208
  //#region src/contexts/security-multikey-v1.json
4228
- var __context$2 = {
4209
+ var security_multikey_v1_default = { "@context": {
4229
4210
  "id": "@id",
4230
4211
  "type": "@type",
4231
4212
  "@protected": true,
@@ -4257,12 +4238,10 @@ var __context$2 = {
4257
4238
  }
4258
4239
  }
4259
4240
  }
4260
- };
4261
- var security_multikey_v1_default = { "@context": __context$2 };
4262
-
4241
+ } };
4263
4242
  //#endregion
4264
4243
  //#region src/contexts/security-v1.json
4265
- var __context$1 = {
4244
+ var security_v1_default = { "@context": {
4266
4245
  "id": "@id",
4267
4246
  "type": "@type",
4268
4247
  "dc": "http://purl.org/dc/terms/",
@@ -4333,21 +4312,17 @@ var __context$1 = {
4333
4312
  "signature": "sec:signature",
4334
4313
  "signatureAlgorithm": "sec:signingAlgorithm",
4335
4314
  "signatureValue": "sec:signatureValue"
4336
- };
4337
- var security_v1_default = { "@context": __context$1 };
4338
-
4315
+ } };
4339
4316
  //#endregion
4340
4317
  //#region src/contexts/webfinger.json
4341
- var __context = {
4318
+ var webfinger_default = { "@context": {
4342
4319
  "wf": "https://purl.archive.org/socialweb/webfinger#",
4343
4320
  "xsd": "http://www.w3.org/2001/XMLSchema#",
4344
4321
  "webfinger": {
4345
4322
  "@id": "wf:webfinger",
4346
4323
  "@type": "xsd:string"
4347
4324
  }
4348
- };
4349
- var webfinger_default = { "@context": __context };
4350
-
4325
+ } };
4351
4326
  //#endregion
4352
4327
  //#region src/contexts.ts
4353
4328
  const preloadedContexts = {
@@ -4364,8 +4339,6 @@ const preloadedContexts = {
4364
4339
  "https://w3id.org/fep/5711": fep_5711_default,
4365
4340
  "http://joinmastodon.org/ns": joinmastodon_default
4366
4341
  };
4367
- var contexts_default = preloadedContexts;
4368
-
4369
4342
  //#endregion
4370
4343
  //#region src/docloader.ts
4371
4344
  const logger = getLogger([
@@ -4373,6 +4346,7 @@ const logger = getLogger([
4373
4346
  "runtime",
4374
4347
  "docloader"
4375
4348
  ]);
4349
+ const DEFAULT_MAX_REDIRECTION = 20;
4376
4350
  /**
4377
4351
  * Gets a {@link RemoteDocument} from the given response.
4378
4352
  * @param url The URL of the document to load.
@@ -4382,7 +4356,7 @@ const logger = getLogger([
4382
4356
  * @throws {FetchError} If the response is not OK.
4383
4357
  * @internal
4384
4358
  */
4385
- async function getRemoteDocument(url, response, fetch$1) {
4359
+ async function getRemoteDocument(url, response, fetch) {
4386
4360
  const documentUrl = response.url === "" ? url : response.url;
4387
4361
  const docUrl = new URL(documentUrl);
4388
4362
  if (!response.ok) {
@@ -4420,7 +4394,7 @@ async function getRemoteDocument(url, response, fetch$1) {
4420
4394
  alternateUrl: altUri.href,
4421
4395
  url: documentUrl
4422
4396
  });
4423
- return await fetch$1(altUri.href);
4397
+ return await fetch(altUri.href);
4424
4398
  }
4425
4399
  }
4426
4400
  }
@@ -4446,15 +4420,14 @@ async function getRemoteDocument(url, response, fetch$1) {
4446
4420
  attrPattern.lastIndex = 0;
4447
4421
  while ((attrMatch = attrPattern.exec(tagContent)) !== null) {
4448
4422
  const key = attrMatch[1].toLowerCase();
4449
- const value = attrMatch[2] ?? attrMatch[3] ?? attrMatch[4] ?? "";
4450
- attribs[key] = value;
4423
+ attribs[key] = attrMatch[2] ?? attrMatch[3] ?? attrMatch[4] ?? "";
4451
4424
  }
4452
4425
  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) {
4453
4426
  logger.debug("Found alternate document: {alternateUrl} from {url}", {
4454
4427
  alternateUrl: attribs.href,
4455
4428
  url: documentUrl
4456
4429
  });
4457
- return await fetch$1(new URL(attribs.href, docUrl).href);
4430
+ return await fetch(new URL(attribs.href, docUrl).href);
4458
4431
  }
4459
4432
  }
4460
4433
  document = JSON.parse(html);
@@ -4489,33 +4462,34 @@ async function getRemoteDocument(url, response, fetch$1) {
4489
4462
  * @since 1.3.0
4490
4463
  */
4491
4464
  function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4492
- const tracerProvider = trace.getTracerProvider();
4493
- const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
4494
- async function load(url, options) {
4465
+ const tracer = trace.getTracerProvider().getTracer(name, version);
4466
+ async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
4495
4467
  options?.signal?.throwIfAborted();
4496
- if (!skipPreloadedContexts && url in contexts_default) {
4497
- logger.debug("Using preloaded context: {url}.", { url });
4468
+ const currentUrl = new URL(url).href;
4469
+ if (!skipPreloadedContexts && currentUrl in preloadedContexts) {
4470
+ logger.debug("Using preloaded context: {url}.", { url: currentUrl });
4498
4471
  return {
4499
4472
  contextUrl: null,
4500
- document: contexts_default[url],
4501
- documentUrl: url
4473
+ document: preloadedContexts[currentUrl],
4474
+ documentUrl: currentUrl
4502
4475
  };
4503
4476
  }
4504
4477
  if (!allowPrivateAddress) try {
4505
- await validatePublicUrl(url);
4478
+ await validatePublicUrl(currentUrl);
4506
4479
  } catch (error) {
4507
4480
  if (error instanceof UrlError) logger.error("Disallowed private URL: {url}", {
4508
- url,
4481
+ url: currentUrl,
4509
4482
  error
4510
4483
  });
4511
4484
  throw error;
4512
4485
  }
4486
+ visited.add(currentUrl);
4513
4487
  return await tracer.startActiveSpan("activitypub.fetch_document", {
4514
4488
  kind: SpanKind.CLIENT,
4515
- attributes: { "url.full": url }
4489
+ attributes: { "url.full": currentUrl }
4516
4490
  }, async (span) => {
4517
4491
  try {
4518
- const request = createActivityPubRequest(url, { userAgent });
4492
+ const request = createActivityPubRequest(currentUrl, { userAgent });
4519
4493
  logRequest(logger, request);
4520
4494
  const response = await fetch(request, {
4521
4495
  redirect: "manual",
@@ -4523,11 +4497,25 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4523
4497
  });
4524
4498
  span.setAttribute("http.response.status_code", response.status);
4525
4499
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4526
- const redirectUrl = response.headers.get("Location");
4500
+ if (redirected >= DEFAULT_MAX_REDIRECTION) {
4501
+ logger.error("Too many redirections ({redirections}) while fetching document.", {
4502
+ redirections: redirected + 1,
4503
+ url: currentUrl
4504
+ });
4505
+ throw new FetchError(currentUrl, `Too many redirections (${redirected + 1})`);
4506
+ }
4507
+ const redirectUrl = new URL(response.headers.get("Location"), response.url === "" ? currentUrl : response.url).href;
4527
4508
  span.setAttribute("http.redirect.url", redirectUrl);
4528
- return await load(redirectUrl, options);
4509
+ if (visited.has(redirectUrl)) {
4510
+ logger.error("Detected a redirect loop while fetching document: {url} -> {redirectUrl}", {
4511
+ url: currentUrl,
4512
+ redirectUrl
4513
+ });
4514
+ throw new FetchError(currentUrl, `Redirect loop detected: ${redirectUrl}`);
4515
+ }
4516
+ return await load(redirectUrl, options, redirected + 1, visited);
4529
4517
  }
4530
- const result = await getRemoteDocument(url, response, load);
4518
+ const result = await getRemoteDocument(currentUrl, response, load);
4531
4519
  span.setAttribute("docloader.document_url", result.documentUrl);
4532
4520
  if (result.contextUrl != null) span.setAttribute("docloader.context_url", result.contextUrl);
4533
4521
  return result;
@@ -4545,6 +4533,5 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4545
4533
  }
4546
4534
  return load;
4547
4535
  }
4548
-
4549
4536
  //#endregion
4550
- export { contexts_default, getDocumentLoader };
4537
+ export { preloadedContexts as n, getDocumentLoader as t };