@fedify/vocab-runtime 2.0.7 → 2.0.9

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 (49) 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 +83 -131
  8. package/dist/mod.d.cts +1 -5
  9. package/dist/mod.d.ts +1 -5
  10. package/dist/mod.js +59 -110
  11. package/dist/tests/{chunk-DWy1uDak.cjs → chunk-Do9eywBl.cjs} +13 -17
  12. package/dist/tests/docloader.test.cjs +137 -114
  13. package/dist/tests/{docloader.test.js → docloader.test.mjs} +132 -115
  14. package/dist/tests/internal/multicodec.test.cjs +5 -7
  15. package/dist/tests/internal/{multicodec.test.js → multicodec.test.mjs} +3 -4
  16. package/dist/tests/key.test.cjs +39 -70
  17. package/dist/tests/{key.test.js → key.test.mjs} +32 -62
  18. package/dist/tests/langstr.test.cjs +6 -8
  19. package/dist/tests/{langstr.test.js → langstr.test.mjs} +2 -4
  20. package/dist/tests/{link-CdFPEo9O.cjs → link-B6ZWBZhf.cjs} +6 -8
  21. package/dist/tests/{link-Ck2yj4dH.js → link-B8JGXSS2.mjs} +1 -2
  22. package/dist/tests/link.test.cjs +5 -7
  23. package/dist/tests/{link.test.js → link.test.mjs} +3 -4
  24. package/dist/tests/multibase/multibase.test.cjs +10 -17
  25. package/dist/tests/multibase/{multibase.test.js → multibase.test.mjs} +10 -18
  26. package/dist/tests/{multibase-B2D6B0V4.cjs → multibase-CgYqpk4Z.cjs} +43 -49
  27. package/dist/tests/{multibase-BdHCGO4H.js → multibase-jcKrOpuU.mjs} +5 -12
  28. package/dist/tests/{multicodec-mHcRzSGY.cjs → multicodec-DeYop8xg.cjs} +16 -18
  29. package/dist/tests/{multicodec-DvC5xnX2.js → multicodec-aqbZnrNi.mjs} +1 -2
  30. package/dist/tests/{request-BZixuWv5.js → request-AitXfW_2.mjs} +4 -45
  31. package/dist/tests/{request-78UEYyIx.cjs → request-C6iSYeYi.cjs} +38 -72
  32. package/dist/tests/request.test.cjs +23 -24
  33. package/dist/tests/request.test.mjs +42 -0
  34. package/dist/tests/{url-C5Vs9nYh.cjs → url-Cr2K-wzd.cjs} +31 -35
  35. package/dist/tests/{url-fW_DHbih.js → url-Djghaq0m.mjs} +3 -7
  36. package/dist/tests/url.test.cjs +5 -7
  37. package/dist/tests/{url.test.js → url.test.mjs} +3 -4
  38. package/package.json +3 -3
  39. package/src/docloader.test.ts +67 -0
  40. package/src/docloader.ts +43 -11
  41. package/dist/tests/request.test.js +0 -43
  42. /package/dist/tests/{docloader.test.d.ts → docloader.test.d.mts} +0 -0
  43. /package/dist/tests/internal/{multicodec.test.d.ts → multicodec.test.d.mts} +0 -0
  44. /package/dist/tests/{key.test.d.ts → key.test.d.mts} +0 -0
  45. /package/dist/tests/{langstr.test.d.ts → langstr.test.d.mts} +0 -0
  46. /package/dist/tests/{link.test.d.ts → link.test.d.mts} +0 -0
  47. /package/dist/tests/multibase/{multibase.test.d.ts → multibase.test.d.mts} +0 -0
  48. /package/dist/tests/{request.test.d.ts → request.test.d.mts} +0 -0
  49. /package/dist/tests/{url.test.d.ts → url.test.d.mts} +0 -0
package/deno.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/vocab-runtime",
3
- "version": "2.0.7",
3
+ "version": "2.0.9",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": "./src/mod.ts",
@@ -1,4 +1,4 @@
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;
@@ -19,12 +19,10 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
19
19
  value: mod,
20
20
  enumerable: true
21
21
  }) : target, mod));
22
-
23
22
  //#endregion
24
-
25
- Object.defineProperty(exports, '__toESM', {
26
- enumerable: true,
27
- get: function () {
28
- return __toESM;
29
- }
30
- });
23
+ Object.defineProperty(exports, "__toESM", {
24
+ enumerable: true,
25
+ get: function() {
26
+ return __toESM;
27
+ }
28
+ });
package/dist/jsonld.cjs CHANGED
@@ -1,8 +1,7 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const jsonld_dist_jsonld_esm_js = require_chunk.__toESM(require("jsonld/dist/jsonld.esm.js"));
3
-
1
+ const require_chunk = require("./chunk-CKQMccvm.cjs");
2
+ let jsonld_dist_jsonld_esm_js = require("jsonld/dist/jsonld.esm.js");
3
+ jsonld_dist_jsonld_esm_js = require_chunk.__toESM(jsonld_dist_jsonld_esm_js);
4
4
  //#region src/jsonld.ts
5
5
  var jsonld_default = jsonld_dist_jsonld_esm_js.default;
6
-
7
6
  //#endregion
8
- module.exports = jsonld_default;
7
+ module.exports = jsonld_default;
package/dist/jsonld.d.cts CHANGED
@@ -1,6 +1,5 @@
1
- import * as jsonld0 from "jsonld";
1
+ import * as _$jsonld from "jsonld";
2
2
 
3
3
  //#region src/jsonld.d.ts
4
- declare const _default: typeof jsonld0;
5
- //#endregion
6
- export { _default as default };
4
+ declare const _default: typeof _$jsonld;
5
+ export = _default;
package/dist/jsonld.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import * as jsonld0 from "jsonld";
1
+ import * as _$jsonld from "jsonld";
2
2
 
3
3
  //#region src/jsonld.d.ts
4
- declare const _default: typeof jsonld0;
4
+ declare const _default: typeof _$jsonld;
5
5
  //#endregion
6
6
  export { _default as default };
package/dist/jsonld.js CHANGED
@@ -1,7 +1,5 @@
1
1
  import jsonld from "jsonld/dist/jsonld.esm.js";
2
-
3
2
  //#region src/jsonld.ts
4
3
  var jsonld_default = jsonld;
5
-
6
4
  //#endregion
7
- export { jsonld_default as default };
5
+ export { jsonld_default as default };
package/dist/mod.cjs CHANGED
@@ -1,16 +1,18 @@
1
- const require_chunk = require('./chunk-CUT6urMc.cjs');
2
- const __logtape_logtape = require_chunk.__toESM(require("@logtape/logtape"));
3
- const __opentelemetry_api = require_chunk.__toESM(require("@opentelemetry/api"));
4
- const node_process = require_chunk.__toESM(require("node:process"));
5
- const node_dns_promises = require_chunk.__toESM(require("node:dns/promises"));
6
- const node_net = require_chunk.__toESM(require("node:net"));
7
- const asn1js = require_chunk.__toESM(require("asn1js"));
8
- const byte_encodings_base64 = require_chunk.__toESM(require("byte-encodings/base64"));
9
- const byte_encodings_base64url = require_chunk.__toESM(require("byte-encodings/base64url"));
10
- const node_crypto = require_chunk.__toESM(require("node:crypto"));
11
- const pkijs = require_chunk.__toESM(require("pkijs"));
12
- const __multiformats_base_x = require_chunk.__toESM(require("@multiformats/base-x"));
13
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_chunk = require("./chunk-CKQMccvm.cjs");
3
+ let _logtape_logtape = require("@logtape/logtape");
4
+ let _opentelemetry_api = require("@opentelemetry/api");
5
+ let node_process = require("node:process");
6
+ node_process = require_chunk.__toESM(node_process);
7
+ let node_dns_promises = require("node:dns/promises");
8
+ let node_net = require("node:net");
9
+ let asn1js = require("asn1js");
10
+ let byte_encodings_base64 = require("byte-encodings/base64");
11
+ let byte_encodings_base64url = require("byte-encodings/base64url");
12
+ let node_crypto = require("node:crypto");
13
+ let pkijs = require("pkijs");
14
+ let _multiformats_base_x = require("@multiformats/base-x");
15
+ _multiformats_base_x = require_chunk.__toESM(_multiformats_base_x);
14
16
  //#region src/contexts.ts
15
17
  const preloadedContexts = {
16
18
  "https://www.w3.org/ns/activitystreams": { "@context": {
@@ -4258,50 +4260,10 @@ const preloadedContexts = {
4258
4260
  }
4259
4261
  } }
4260
4262
  };
4261
- var contexts_default = preloadedContexts;
4262
-
4263
4263
  //#endregion
4264
4264
  //#region deno.json
4265
4265
  var name = "@fedify/vocab-runtime";
4266
- var version = "2.0.7";
4267
- var license = "MIT";
4268
- var exports$1 = {
4269
- ".": "./src/mod.ts",
4270
- "./jsonld": "./src/jsonld.ts"
4271
- };
4272
- var description = "Runtime library for @fedify/vocab";
4273
- var author = {
4274
- "name": "Hong Minhee",
4275
- "email": "hong@minhee.org",
4276
- "url": "https://hongminhee.org/"
4277
- };
4278
- var imports = {
4279
- "@multiformats/base-x": "npm:@multiformats/base-x@^4.0.1",
4280
- "asn1js": "npm:asn1js@^3.0.6",
4281
- "byte-encodings": "npm:byte-encodings@^1.0.11",
4282
- "fetch-mock": "npm:fetch-mock@^12.5.4",
4283
- "jsonld": "npm:jsonld@^9.0.0",
4284
- "pkijs": "npm:pkijs@^3.2.5"
4285
- };
4286
- var exclude = ["dist", "node_modules"];
4287
- var publish = { "exclude": ["**/*.test.ts", "tsdown.config.ts"] };
4288
- var tasks = {
4289
- "check": "deno fmt --check && deno lint && deno check src/*.ts",
4290
- "test": "deno test"
4291
- };
4292
- var deno_default = {
4293
- name,
4294
- version,
4295
- license,
4296
- exports: exports$1,
4297
- description,
4298
- author,
4299
- imports,
4300
- exclude,
4301
- publish,
4302
- tasks
4303
- };
4304
-
4266
+ var version = "2.0.9";
4305
4267
  //#endregion
4306
4268
  //#region src/link.ts
4307
4269
  const parametersNeedLowerCase = ["rel", "type"];
@@ -4483,7 +4445,6 @@ var HttpHeaderLink = class HttpHeaderLink {
4483
4445
  return new this(...inputs).toString();
4484
4446
  }
4485
4447
  };
4486
-
4487
4448
  //#endregion
4488
4449
  //#region src/request.ts
4489
4450
  /**
@@ -4529,27 +4490,25 @@ function createActivityPubRequest(url, options = {}) {
4529
4490
  * @since 1.3.0
4530
4491
  */
4531
4492
  function getUserAgent({ software, url } = {}) {
4532
- const fedify = `Fedify/${deno_default.version}`;
4493
+ const fedify = `Fedify/${version}`;
4533
4494
  const runtime = globalThis.Deno?.version?.deno != null ? `Deno/${Deno.version.deno}` : globalThis.process?.versions?.bun != null ? `Bun/${node_process.default.versions.bun}` : "navigator" in globalThis && navigator.userAgent === "Cloudflare-Workers" ? navigator.userAgent : globalThis.process?.versions?.node != null ? `Node.js/${node_process.default.versions.node}` : null;
4534
4495
  const userAgent = software == null ? [fedify] : [software, fedify];
4535
4496
  if (runtime != null) userAgent.push(runtime);
4536
4497
  if (url != null) userAgent.push(`+${url.toString()}`);
4537
- const first = userAgent.shift();
4538
- return `${first} (${userAgent.join("; ")})`;
4498
+ return `${userAgent.shift()} (${userAgent.join("; ")})`;
4539
4499
  }
4540
4500
  /**
4541
4501
  * Logs the request.
4542
4502
  * @param request The request to log.
4543
4503
  * @internal
4544
4504
  */
4545
- function logRequest(logger$1, request) {
4546
- logger$1.debug("Fetching document: {method} {url} {headers}", {
4505
+ function logRequest(logger, request) {
4506
+ logger.debug("Fetching document: {method} {url} {headers}", {
4547
4507
  method: request.method,
4548
4508
  url: request.url,
4549
4509
  headers: Object.fromEntries(request.headers.entries())
4550
4510
  });
4551
4511
  }
4552
-
4553
4512
  //#endregion
4554
4513
  //#region src/url.ts
4555
4514
  var UrlError = class extends Error {
@@ -4568,8 +4527,7 @@ async function validatePublicUrl(url) {
4568
4527
  if (hostname.startsWith("[") && hostname.endsWith("]")) hostname = hostname.substring(1, hostname.length - 2);
4569
4528
  if (hostname === "localhost") throw new UrlError("Localhost is not allowed");
4570
4529
  if ("Deno" in globalThis && !(0, node_net.isIP)(hostname)) {
4571
- const netPermission = await Deno.permissions.query({ name: "net" });
4572
- if (netPermission.state !== "granted") return;
4530
+ if ((await Deno.permissions.query({ name: "net" })).state !== "granted") return;
4573
4531
  }
4574
4532
  if ("Bun" in globalThis) {
4575
4533
  if (hostname === "example.com" || hostname.endsWith(".example.com")) return;
@@ -4605,17 +4563,16 @@ function expandIPv6Address(address) {
4605
4563
  if (address.startsWith("::")) address = "0000" + address;
4606
4564
  if (address.endsWith("::")) address = address + "0000";
4607
4565
  address = address.replace("::", ":0000".repeat(8 - (address.match(/:/g) || []).length) + ":");
4608
- const parts = address.split(":");
4609
- return parts.map((part) => part.padStart(4, "0")).join(":");
4566
+ return address.split(":").map((part) => part.padStart(4, "0")).join(":");
4610
4567
  }
4611
-
4612
4568
  //#endregion
4613
4569
  //#region src/docloader.ts
4614
- const logger = (0, __logtape_logtape.getLogger)([
4570
+ const logger = (0, _logtape_logtape.getLogger)([
4615
4571
  "fedify",
4616
4572
  "runtime",
4617
4573
  "docloader"
4618
4574
  ]);
4575
+ const DEFAULT_MAX_REDIRECTION = 20;
4619
4576
  /**
4620
4577
  * Gets a {@link RemoteDocument} from the given response.
4621
4578
  * @param url The URL of the document to load.
@@ -4625,7 +4582,7 @@ const logger = (0, __logtape_logtape.getLogger)([
4625
4582
  * @throws {FetchError} If the response is not OK.
4626
4583
  * @internal
4627
4584
  */
4628
- async function getRemoteDocument(url, response, fetch$1) {
4585
+ async function getRemoteDocument(url, response, fetch) {
4629
4586
  const documentUrl = response.url === "" ? url : response.url;
4630
4587
  const docUrl = new URL(documentUrl);
4631
4588
  if (!response.ok) {
@@ -4663,7 +4620,7 @@ async function getRemoteDocument(url, response, fetch$1) {
4663
4620
  alternateUrl: altUri.href,
4664
4621
  url: documentUrl
4665
4622
  });
4666
- return await fetch$1(altUri.href);
4623
+ return await fetch(altUri.href);
4667
4624
  }
4668
4625
  }
4669
4626
  }
@@ -4689,15 +4646,14 @@ async function getRemoteDocument(url, response, fetch$1) {
4689
4646
  attrPattern.lastIndex = 0;
4690
4647
  while ((attrMatch = attrPattern.exec(tagContent)) !== null) {
4691
4648
  const key = attrMatch[1].toLowerCase();
4692
- const value = attrMatch[2] ?? attrMatch[3] ?? attrMatch[4] ?? "";
4693
- attribs[key] = value;
4649
+ attribs[key] = attrMatch[2] ?? attrMatch[3] ?? attrMatch[4] ?? "";
4694
4650
  }
4695
4651
  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) {
4696
4652
  logger.debug("Found alternate document: {alternateUrl} from {url}", {
4697
4653
  alternateUrl: attribs.href,
4698
4654
  url: documentUrl
4699
4655
  });
4700
- return await fetch$1(new URL(attribs.href, docUrl).href);
4656
+ return await fetch(new URL(attribs.href, docUrl).href);
4701
4657
  }
4702
4658
  }
4703
4659
  document = JSON.parse(html);
@@ -4732,33 +4688,34 @@ async function getRemoteDocument(url, response, fetch$1) {
4732
4688
  * @since 1.3.0
4733
4689
  */
4734
4690
  function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAgent } = {}) {
4735
- const tracerProvider = __opentelemetry_api.trace.getTracerProvider();
4736
- const tracer = tracerProvider.getTracer(deno_default.name, deno_default.version);
4737
- async function load(url, options) {
4691
+ const tracer = _opentelemetry_api.trace.getTracerProvider().getTracer(name, version);
4692
+ async function load(url, options, redirected = 0, visited = /* @__PURE__ */ new Set()) {
4738
4693
  options?.signal?.throwIfAborted();
4739
- if (!skipPreloadedContexts && url in contexts_default) {
4740
- logger.debug("Using preloaded context: {url}.", { url });
4694
+ const currentUrl = new URL(url).href;
4695
+ if (!skipPreloadedContexts && currentUrl in preloadedContexts) {
4696
+ logger.debug("Using preloaded context: {url}.", { url: currentUrl });
4741
4697
  return {
4742
4698
  contextUrl: null,
4743
- document: contexts_default[url],
4744
- documentUrl: url
4699
+ document: preloadedContexts[currentUrl],
4700
+ documentUrl: currentUrl
4745
4701
  };
4746
4702
  }
4747
4703
  if (!allowPrivateAddress) try {
4748
- await validatePublicUrl(url);
4704
+ await validatePublicUrl(currentUrl);
4749
4705
  } catch (error) {
4750
4706
  if (error instanceof UrlError) logger.error("Disallowed private URL: {url}", {
4751
- url,
4707
+ url: currentUrl,
4752
4708
  error
4753
4709
  });
4754
4710
  throw error;
4755
4711
  }
4712
+ visited.add(currentUrl);
4756
4713
  return await tracer.startActiveSpan("activitypub.fetch_document", {
4757
- kind: __opentelemetry_api.SpanKind.CLIENT,
4758
- attributes: { "url.full": url }
4714
+ kind: _opentelemetry_api.SpanKind.CLIENT,
4715
+ attributes: { "url.full": currentUrl }
4759
4716
  }, async (span) => {
4760
4717
  try {
4761
- const request = createActivityPubRequest(url, { userAgent });
4718
+ const request = createActivityPubRequest(currentUrl, { userAgent });
4762
4719
  logRequest(logger, request);
4763
4720
  const response = await fetch(request, {
4764
4721
  redirect: "manual",
@@ -4766,18 +4723,32 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4766
4723
  });
4767
4724
  span.setAttribute("http.response.status_code", response.status);
4768
4725
  if (response.status >= 300 && response.status < 400 && response.headers.has("Location")) {
4769
- const redirectUrl = response.headers.get("Location");
4726
+ if (redirected >= DEFAULT_MAX_REDIRECTION) {
4727
+ logger.error("Too many redirections ({redirections}) while fetching document.", {
4728
+ redirections: redirected + 1,
4729
+ url: currentUrl
4730
+ });
4731
+ throw new FetchError(currentUrl, `Too many redirections (${redirected + 1})`);
4732
+ }
4733
+ const redirectUrl = new URL(response.headers.get("Location"), response.url === "" ? currentUrl : response.url).href;
4770
4734
  span.setAttribute("http.redirect.url", redirectUrl);
4771
- return await load(redirectUrl, options);
4735
+ if (visited.has(redirectUrl)) {
4736
+ logger.error("Detected a redirect loop while fetching document: {url} -> {redirectUrl}", {
4737
+ url: currentUrl,
4738
+ redirectUrl
4739
+ });
4740
+ throw new FetchError(currentUrl, `Redirect loop detected: ${redirectUrl}`);
4741
+ }
4742
+ return await load(redirectUrl, options, redirected + 1, visited);
4772
4743
  }
4773
- const result = await getRemoteDocument(url, response, load);
4744
+ const result = await getRemoteDocument(currentUrl, response, load);
4774
4745
  span.setAttribute("docloader.document_url", result.documentUrl);
4775
4746
  if (result.contextUrl != null) span.setAttribute("docloader.context_url", result.contextUrl);
4776
4747
  return result;
4777
4748
  } catch (error) {
4778
4749
  span.recordException(error);
4779
4750
  span.setStatus({
4780
- code: __opentelemetry_api.SpanStatusCode.ERROR,
4751
+ code: _opentelemetry_api.SpanStatusCode.ERROR,
4781
4752
  message: String(error)
4782
4753
  });
4783
4754
  throw error;
@@ -4788,7 +4759,6 @@ function getDocumentLoader({ allowPrivateAddress, skipPreloadedContexts, userAge
4788
4759
  }
4789
4760
  return load;
4790
4761
  }
4791
-
4792
4762
  //#endregion
4793
4763
  //#region src/internal/multicodec.ts
4794
4764
  const INVALID_MULTICODEC_PREFIX = "Invalid multicodec prefix.";
@@ -4828,7 +4798,6 @@ function addMulticodecPrefix(code, payload) {
4828
4798
  prefixed.set(payload, prefix.length);
4829
4799
  return prefixed;
4830
4800
  }
4831
-
4832
4801
  //#endregion
4833
4802
  //#region src/jwk.ts
4834
4803
  function validateCryptoKey(key, type) {
@@ -4836,11 +4805,9 @@ function validateCryptoKey(key, type) {
4836
4805
  if (!key.extractable) throw new TypeError("The key is not extractable.");
4837
4806
  if (key.algorithm.name !== "RSASSA-PKCS1-v1_5" && key.algorithm.name !== "Ed25519") throw new TypeError("Currently only RSASSA-PKCS1-v1_5 and Ed25519 keys are supported. More algorithms will be added in the future!");
4838
4807
  if (key.algorithm.name === "RSASSA-PKCS1-v1_5") {
4839
- const algorithm = key.algorithm;
4840
- if (algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
4808
+ if (key.algorithm.hash.name !== "SHA-256") throw new TypeError("For compatibility with the existing Fediverse software (e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys must be SHA-256.");
4841
4809
  }
4842
4810
  }
4843
-
4844
4811
  //#endregion
4845
4812
  //#region src/multibase/util.ts
4846
4813
  const textDecoder = new TextDecoder();
@@ -4856,7 +4823,6 @@ function concat(arrs, length) {
4856
4823
  }
4857
4824
  return output;
4858
4825
  }
4859
-
4860
4826
  //#endregion
4861
4827
  //#region src/multibase/base.ts
4862
4828
  /**
@@ -4865,8 +4831,8 @@ function concat(arrs, length) {
4865
4831
  var Base = class {
4866
4832
  codeBuf;
4867
4833
  codec;
4868
- constructor(name$1, code, factory, alphabet) {
4869
- this.name = name$1;
4834
+ constructor(name, code, factory, alphabet) {
4835
+ this.name = name;
4870
4836
  this.code = code;
4871
4837
  this.alphabet = alphabet;
4872
4838
  this.codeBuf = encodeText(this.code);
@@ -4881,12 +4847,11 @@ var Base = class {
4881
4847
  return this.codec.decode(string);
4882
4848
  }
4883
4849
  };
4884
-
4885
4850
  //#endregion
4886
4851
  //#region src/multibase/rfc4648.ts
4887
4852
  const decode = (string, alphabet, bitsPerChar) => {
4888
- const codes$1 = {};
4889
- for (let i = 0; i < alphabet.length; ++i) codes$1[alphabet[i]] = i;
4853
+ const codes = {};
4854
+ for (let i = 0; i < alphabet.length; ++i) codes[alphabet[i]] = i;
4890
4855
  let end = string.length;
4891
4856
  while (string[end - 1] === "=") --end;
4892
4857
  const out = new Uint8Array(end * bitsPerChar / 8 | 0);
@@ -4894,7 +4859,7 @@ const decode = (string, alphabet, bitsPerChar) => {
4894
4859
  let buffer = 0;
4895
4860
  let written = 0;
4896
4861
  for (let i = 0; i < end; ++i) {
4897
- const value = codes$1[string[i]];
4862
+ const value = codes[string[i]];
4898
4863
  if (value === void 0) throw new SyntaxError("Invalid character " + string[i]);
4899
4864
  buffer = buffer << bitsPerChar | value;
4900
4865
  bits += bitsPerChar;
@@ -4937,7 +4902,6 @@ const rfc4648 = (bitsPerChar) => (alphabet) => {
4937
4902
  }
4938
4903
  };
4939
4904
  };
4940
-
4941
4905
  //#endregion
4942
4906
  //#region src/multibase/constants.ts
4943
4907
  const identity = () => {
@@ -4973,7 +4937,7 @@ const constants = [
4973
4937
  [
4974
4938
  "base10",
4975
4939
  "9",
4976
- __multiformats_base_x.default,
4940
+ _multiformats_base_x.default,
4977
4941
  "0123456789"
4978
4942
  ],
4979
4943
  [
@@ -5045,25 +5009,25 @@ const constants = [
5045
5009
  [
5046
5010
  "base36",
5047
5011
  "k",
5048
- __multiformats_base_x.default,
5012
+ _multiformats_base_x.default,
5049
5013
  "0123456789abcdefghijklmnopqrstuvwxyz"
5050
5014
  ],
5051
5015
  [
5052
5016
  "base36upper",
5053
5017
  "K",
5054
- __multiformats_base_x.default,
5018
+ _multiformats_base_x.default,
5055
5019
  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
5056
5020
  ],
5057
5021
  [
5058
5022
  "base58btc",
5059
5023
  "z",
5060
- __multiformats_base_x.default,
5024
+ _multiformats_base_x.default,
5061
5025
  "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
5062
5026
  ],
5063
5027
  [
5064
5028
  "base58flickr",
5065
5029
  "Z",
5066
- __multiformats_base_x.default,
5030
+ _multiformats_base_x.default,
5067
5031
  "123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"
5068
5032
  ],
5069
5033
  [
@@ -5099,7 +5063,6 @@ const codes = constants.reduce((prev, tupple) => {
5099
5063
  prev[tupple[1]] = names[tupple[0]];
5100
5064
  return prev;
5101
5065
  }, {});
5102
-
5103
5066
  //#endregion
5104
5067
  //#region src/multibase/mod.ts
5105
5068
  /**
@@ -5136,8 +5099,7 @@ function decodeMultibase(data) {
5136
5099
  "k",
5137
5100
  "K"
5138
5101
  ].includes(prefix)) data = data.toLowerCase();
5139
- const enc = encoding(data[0]);
5140
- return enc.decode(data.substring(1));
5102
+ return encoding(data[0]).decode(data.substring(1));
5141
5103
  }
5142
5104
  /**
5143
5105
  * Get the encoding by name or code
@@ -5159,7 +5121,6 @@ function encodingFromBaseData(data) {
5159
5121
  if (data instanceof Uint8Array) data = decodeText(data);
5160
5122
  return encoding(data[0]);
5161
5123
  }
5162
-
5163
5124
  //#endregion
5164
5125
  //#region src/key.ts
5165
5126
  const algorithms = {
@@ -5184,8 +5145,7 @@ async function importSpki(pem) {
5184
5145
  } catch (_) {
5185
5146
  throw new TypeError("Invalid PEM-SPKI format.");
5186
5147
  }
5187
- const pki = pkijs.PublicKeyInfo.fromBER(spki);
5188
- const oid = pki.algorithm.algorithmId;
5148
+ const oid = pkijs.PublicKeyInfo.fromBER(spki).algorithm.algorithmId;
5189
5149
  const algorithm = algorithms[oid];
5190
5150
  if (algorithm == null) throw new TypeError("Unsupported algorithm: " + oid);
5191
5151
  return await crypto.subtle.importKey("spki", spki, algorithm, true, ["verify"]);
@@ -5199,8 +5159,7 @@ async function importSpki(pem) {
5199
5159
  */
5200
5160
  async function exportSpki(key) {
5201
5161
  validateCryptoKey(key);
5202
- const spki = await crypto.subtle.exportKey("spki", key);
5203
- let pem = (0, byte_encodings_base64.encodeBase64)(spki);
5162
+ let pem = (0, byte_encodings_base64.encodeBase64)(await crypto.subtle.exportKey("spki", key));
5204
5163
  pem = (pem.match(/.{1,64}/g) || []).join("\n");
5205
5164
  return `-----BEGIN PUBLIC KEY-----\n${pem}\n-----END PUBLIC KEY-----\n`;
5206
5165
  }
@@ -5212,16 +5171,14 @@ async function exportSpki(key) {
5212
5171
  * @since 1.5.0
5213
5172
  */
5214
5173
  function importPkcs1(pem) {
5215
- const key = (0, node_crypto.createPublicKey)({
5174
+ return importSpki((0, node_crypto.createPublicKey)({
5216
5175
  key: pem,
5217
5176
  format: "pem",
5218
5177
  type: "pkcs1"
5219
- });
5220
- const spki = key.export({
5178
+ }).export({
5221
5179
  type: "spki",
5222
5180
  format: "pem"
5223
- });
5224
- return importSpki(spki);
5181
+ }));
5225
5182
  }
5226
5183
  const PKCS1_HEADER = /^\s*-----BEGIN\s+RSA\s+PUBLIC\s+KEY-----\s*\n/;
5227
5184
  /**
@@ -5248,12 +5205,11 @@ async function importMultibaseKey(key) {
5248
5205
  const { code } = getMulticodecPrefix(decoded);
5249
5206
  const content = removeMulticodecPrefix(decoded);
5250
5207
  if (code === 4613) {
5251
- const keyObject = (0, node_crypto.createPublicKey)({
5208
+ const exported = (0, node_crypto.createPublicKey)({
5252
5209
  key: content,
5253
5210
  format: "der",
5254
5211
  type: "pkcs1"
5255
- });
5256
- const exported = keyObject.export({
5212
+ }).export({
5257
5213
  type: "spki",
5258
5214
  format: "der"
5259
5215
  });
@@ -5285,21 +5241,18 @@ async function exportMultibaseKey(key) {
5285
5241
  const decodedN = (0, byte_encodings_base64url.decodeBase64Url)(jwk.n);
5286
5242
  const n = new Uint8Array(decodedN.length + 1);
5287
5243
  n.set(decodedN, 1);
5288
- const sequence = new asn1js.Sequence({ value: [new asn1js.Integer({
5244
+ content = new asn1js.Sequence({ value: [new asn1js.Integer({
5289
5245
  isHexOnly: true,
5290
5246
  valueHex: n
5291
5247
  }), new asn1js.Integer({
5292
5248
  isHexOnly: true,
5293
5249
  valueHex: (0, byte_encodings_base64url.decodeBase64Url)(jwk.e)
5294
- })] });
5295
- content = sequence.toBER(false);
5250
+ })] }).toBER(false);
5296
5251
  code = 4613;
5297
5252
  } else throw new TypeError("Unsupported key type: " + JSON.stringify(key.algorithm));
5298
- const prefixed = addMulticodecPrefix(code, new Uint8Array(content));
5299
- const encoded = encodeMultibase("base58btc", prefixed);
5253
+ const encoded = encodeMultibase("base58btc", addMulticodecPrefix(code, new Uint8Array(content)));
5300
5254
  return new TextDecoder().decode(encoded);
5301
5255
  }
5302
-
5303
5256
  //#endregion
5304
5257
  //#region src/langstr.ts
5305
5258
  /**
@@ -5328,7 +5281,6 @@ LanguageString.prototype[Symbol.for("Deno.customInspect")] = function(inspect, o
5328
5281
  LanguageString.prototype[Symbol.for("nodejs.util.inspect.custom")] = function(_depth, options, inspect) {
5329
5282
  return `<${this.locale.baseName}> ${inspect(this.toString(), options)}`;
5330
5283
  };
5331
-
5332
5284
  //#endregion
5333
5285
  exports.FetchError = FetchError;
5334
5286
  exports.LanguageString = LanguageString;
@@ -5350,5 +5302,5 @@ exports.importSpki = importSpki;
5350
5302
  exports.isValidPublicIPv4Address = isValidPublicIPv4Address;
5351
5303
  exports.isValidPublicIPv6Address = isValidPublicIPv6Address;
5352
5304
  exports.logRequest = logRequest;
5353
- exports.preloadedContexts = contexts_default;
5354
- exports.validatePublicUrl = validatePublicUrl;
5305
+ exports.preloadedContexts = preloadedContexts;
5306
+ exports.validatePublicUrl = validatePublicUrl;
package/dist/mod.d.cts CHANGED
@@ -1,9 +1,6 @@
1
1
  import { Logger } from "@logtape/logtape";
2
2
 
3
3
  //#region src/contexts.d.ts
4
- // Preloaded context documents
5
- // https://github.com/fedify-dev/fedify/issues/74
6
- // cSpell: disable
7
4
  declare const preloadedContexts: Record<string, unknown>;
8
5
  //#endregion
9
6
  //#region src/request.d.ts
@@ -267,7 +264,6 @@ declare class LanguageString extends String {
267
264
  //#endregion
268
265
  //#region src/multibase/types.d.ts
269
266
  type BaseCode = "\x00" | "0" | "7" | "9" | "f" | "F" | "v" | "V" | "t" | "T" | "b" | "B" | "c" | "C" | "h" | "k" | "K" | "z" | "Z" | "m" | "M" | "u" | "U";
270
-
271
267
  /**
272
268
  * - Names of the supported encodings
273
269
  */
@@ -331,4 +327,4 @@ declare function isValidPublicIPv4Address(address: string): boolean;
331
327
  declare function isValidPublicIPv6Address(address: string): boolean;
332
328
  declare function expandIPv6Address(address: string): string;
333
329
  //#endregion
334
- export { AuthenticatedDocumentLoaderFactory, CreateRequestOptions, DocumentLoader, DocumentLoaderFactory, DocumentLoaderFactoryOptions, DocumentLoaderOptions, FetchError, GetDocumentLoaderOptions, GetUserAgentOptions, LanguageString, RemoteDocument, UrlError, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, preloadedContexts, validatePublicUrl };
330
+ export { type AuthenticatedDocumentLoaderFactory, type CreateRequestOptions, type DocumentLoader, type DocumentLoaderFactory, type DocumentLoaderFactoryOptions, type DocumentLoaderOptions, FetchError, type GetDocumentLoaderOptions, type GetUserAgentOptions, LanguageString, type RemoteDocument, UrlError, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, preloadedContexts, validatePublicUrl };
package/dist/mod.d.ts CHANGED
@@ -1,9 +1,6 @@
1
1
  import { Logger } from "@logtape/logtape";
2
2
 
3
3
  //#region src/contexts.d.ts
4
- // Preloaded context documents
5
- // https://github.com/fedify-dev/fedify/issues/74
6
- // cSpell: disable
7
4
  declare const preloadedContexts: Record<string, unknown>;
8
5
  //#endregion
9
6
  //#region src/request.d.ts
@@ -267,7 +264,6 @@ declare class LanguageString extends String {
267
264
  //#endregion
268
265
  //#region src/multibase/types.d.ts
269
266
  type BaseCode = "\x00" | "0" | "7" | "9" | "f" | "F" | "v" | "V" | "t" | "T" | "b" | "B" | "c" | "C" | "h" | "k" | "K" | "z" | "Z" | "m" | "M" | "u" | "U";
270
-
271
267
  /**
272
268
  * - Names of the supported encodings
273
269
  */
@@ -331,4 +327,4 @@ declare function isValidPublicIPv4Address(address: string): boolean;
331
327
  declare function isValidPublicIPv6Address(address: string): boolean;
332
328
  declare function expandIPv6Address(address: string): string;
333
329
  //#endregion
334
- export { AuthenticatedDocumentLoaderFactory, CreateRequestOptions, DocumentLoader, DocumentLoaderFactory, DocumentLoaderFactoryOptions, DocumentLoaderOptions, FetchError, GetDocumentLoaderOptions, GetUserAgentOptions, LanguageString, RemoteDocument, UrlError, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, preloadedContexts, validatePublicUrl };
330
+ export { type AuthenticatedDocumentLoaderFactory, type CreateRequestOptions, type DocumentLoader, type DocumentLoaderFactory, type DocumentLoaderFactoryOptions, type DocumentLoaderOptions, FetchError, type GetDocumentLoaderOptions, type GetUserAgentOptions, LanguageString, type RemoteDocument, UrlError, createActivityPubRequest, decodeMultibase, encodeMultibase, encodingFromBaseData, expandIPv6Address, exportMultibaseKey, exportSpki, getDocumentLoader, getRemoteDocument, getUserAgent, importMultibaseKey, importPem, importPkcs1, importSpki, isValidPublicIPv4Address, isValidPublicIPv6Address, logRequest, preloadedContexts, validatePublicUrl };