@fedify/fedify 0.10.0-dev.186 → 0.10.0-dev.190
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.
- package/CHANGES.md +31 -0
- package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/mod.js +32 -21
- package/esm/federation/handler.js +3 -5
- package/esm/federation/middleware.js +115 -25
- package/esm/nodeinfo/types.js +1 -1
- package/esm/runtime/key.js +23 -3
- package/esm/sig/key.js +44 -16
- package/esm/testing/fixtures/example.com/key4 +7 -0
- package/esm/testing/fixtures/example.com/person2 +6 -0
- package/package.json +2 -1
- package/types/deps/jsr.io/@std/assert/0.226.0/assert.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/assert/0.226.0/assertion_error.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/common.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/encoding.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/language.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/media_type.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/negotiation.d.ts +26 -21
- package/types/deps/jsr.io/@std/http/0.224.3/negotiation.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/semver/0.224.2/_constants.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/_shared.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/_test_comparator_set.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/can_parse.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/compare.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/constants.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/difference.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/equals.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/format.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/format_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_or_equal.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_than.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_than_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/increment.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/is_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/is_semver.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_or_equal.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_than.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_than_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/max_satisfying.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/min_satisfying.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/mod.d.ts +32 -21
- package/types/deps/jsr.io/@std/semver/0.224.2/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/not_equals.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/parse.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/parse_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_intersects.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_max.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_min.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/satisfies.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/test_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/try_parse.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/try_parse_range.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/types.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/text/{0.224.1 → 0.224.2}/_util.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/text/0.224.2/case.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/text/0.224.2/closest_string.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/text/0.224.2/compare_similarity.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/text/0.224.2/levenshtein_distance.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/text/0.224.2/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/text/0.224.2/word_similarity_sort.d.ts.map +1 -0
- package/types/federation/callback.d.ts +16 -0
- package/types/federation/callback.d.ts.map +1 -1
- package/types/federation/context.d.ts +24 -2
- package/types/federation/context.d.ts.map +1 -1
- package/types/federation/handler.d.ts.map +1 -1
- package/types/federation/middleware.d.ts +14 -4
- package/types/federation/middleware.d.ts.map +1 -1
- package/types/nodeinfo/types.d.ts +1 -1
- package/types/runtime/key.d.ts +2 -0
- package/types/runtime/key.d.ts.map +1 -1
- package/types/sig/key.d.ts +5 -2
- package/types/sig/key.d.ts.map +1 -1
- package/types/testing/context.d.ts.map +1 -1
- package/types/testing/keys.d.ts.map +1 -1
- package/types/deps/jsr.io/@std/assert/0.225.3/assert.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/assert/0.225.3/assertion_error.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/http/0.224.2/negotiation.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/semver/0.224.1/_constants.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/semver/0.224.1/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/0.224.1/case.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/0.224.1/closest_string.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/0.224.1/compare_similarity.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/0.224.1/levenshtein_distance.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/0.224.1/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/0.224.1/word_similarity_sort.d.ts.map +0 -1
- /package/esm/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/common.js +0 -0
- /package/esm/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/encoding.js +0 -0
- /package/esm/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/language.js +0 -0
- /package/esm/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/media_type.js +0 -0
- /package/esm/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/negotiation.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/_constants.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/_shared.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/_test_comparator_set.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/can_parse.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/compare.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/constants.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/difference.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/equals.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/format.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/format_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_or_equal.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_than.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_than_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/increment.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/is_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/is_semver.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_or_equal.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_than.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_than_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/max_satisfying.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/min_satisfying.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/not_equals.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/parse.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/parse_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_intersects.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_max.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_min.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/satisfies.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/test_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/try_parse.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/try_parse_range.js +0 -0
- /package/esm/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/types.js +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/common.d.ts +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/encoding.d.ts +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/language.d.ts +0 -0
- /package/types/deps/jsr.io/@std/http/{0.224.2 → 0.224.3}/_negotiation/media_type.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/_constants.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/_shared.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/_test_comparator_set.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/can_parse.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/compare.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/constants.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/difference.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/equals.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/format.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/format_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_or_equal.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_than.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/greater_than_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/increment.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/is_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/is_semver.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_or_equal.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_than.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/less_than_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/max_satisfying.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/min_satisfying.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/not_equals.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/parse.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/parse_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_intersects.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_max.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/range_min.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/satisfies.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/test_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/try_parse.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/try_parse_range.d.ts +0 -0
- /package/types/deps/jsr.io/@std/semver/{0.224.1 → 0.224.2}/types.d.ts +0 -0
package/CHANGES.md
CHANGED
|
@@ -8,10 +8,41 @@ Version 0.10.0
|
|
|
8
8
|
|
|
9
9
|
To be released.
|
|
10
10
|
|
|
11
|
+
- Besides RSA-PKCS#1-v1.5, Fedify now supports Ed25519 for signing and
|
|
12
|
+
verifying the activities. [[#55]]
|
|
13
|
+
|
|
14
|
+
- Added an optional parameter to `generateCryptoKeyPair()` function,
|
|
15
|
+
`algorithm`, which can be either `"RSASSA-PKCS1-v1_5"` or `"Ed25519"`.
|
|
16
|
+
- The `importJwk()` function now accepts Ed25519 keys.
|
|
17
|
+
- The `exportJwk()` function now exports Ed25519 keys.
|
|
18
|
+
- The `importSpki()` function now accepts Ed25519 keys.
|
|
19
|
+
- The `exportJwk()` function now exports Ed25519 keys.
|
|
20
|
+
|
|
21
|
+
- Now multiple key pairs can be registered for an actor.
|
|
22
|
+
|
|
23
|
+
- Added `Context.getActorKeyPairs()` method.
|
|
24
|
+
- Deprecated `Context.getActorKey()` method.
|
|
25
|
+
Use `Context.getActorKeyPairs()` method instead.
|
|
26
|
+
- Added `ActorKeyPair` interface.
|
|
27
|
+
- Added `ActorCallbackSetters.setKeyPairsDispatcher()` method.
|
|
28
|
+
- Added `ActorKeyPairsDispatcher` type.
|
|
29
|
+
- Deprecated `ActorCallbackSetters.setKeyPairDispatcher()` method.
|
|
30
|
+
- Deprecated `ActorKeyPairDispatcher` type.
|
|
31
|
+
- Deprecated the third parameter of the `ActorDispatcher` callback type.
|
|
32
|
+
Use `Context.getActorKeyPairs()` method instead.
|
|
33
|
+
|
|
11
34
|
- Deprecated `treatHttps` option in `FederationParameters` interface.
|
|
12
35
|
Instead, use the [x-forwarded-fetch] library to recognize the
|
|
13
36
|
`X-Forwarded-Host` and `X-Forwarded-Proto` headers.
|
|
14
37
|
|
|
38
|
+
- Ephemeral actors and inboxes that the `fedify inbox` command spawns are
|
|
39
|
+
now more interoperable with other ActivityPub implementations.
|
|
40
|
+
|
|
41
|
+
- Ephemeral actors now have the following properties: `summary`,
|
|
42
|
+
`following`, `followers`, `outbox`, `manuallyApprovesFollowers`, and
|
|
43
|
+
`url`.
|
|
44
|
+
|
|
45
|
+
[#55]: https://github.com/dahlia/fedify/issues/55
|
|
15
46
|
[x-forwarded-fetch]: https://github.com/dahlia/x-forwarded-fetch
|
|
16
47
|
|
|
17
48
|
|
|
@@ -2,10 +2,40 @@
|
|
|
2
2
|
// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license.
|
|
3
3
|
// This module is browser compatible.
|
|
4
4
|
/**
|
|
5
|
-
* The
|
|
5
|
+
* The Semantic Version parser.
|
|
6
6
|
*
|
|
7
7
|
* Adapted directly from {@link https://github.com/npm/node-semver | semver}.
|
|
8
8
|
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* import {
|
|
11
|
+
* parse,
|
|
12
|
+
* parseRange,
|
|
13
|
+
* greaterThan,
|
|
14
|
+
* lessThan,
|
|
15
|
+
* format
|
|
16
|
+
* } from "@std/semver";
|
|
17
|
+
* import { assertEquals } from "@std/assert/assert-equals";
|
|
18
|
+
*
|
|
19
|
+
* const semver = parse("1.2.3");
|
|
20
|
+
* assertEquals(semver, {
|
|
21
|
+
* major: 1,
|
|
22
|
+
* minor: 2,
|
|
23
|
+
* patch: 3,
|
|
24
|
+
* prerelease: [],
|
|
25
|
+
* build: []
|
|
26
|
+
* });
|
|
27
|
+
*
|
|
28
|
+
* assertEquals(format(semver), "1.2.3");
|
|
29
|
+
*
|
|
30
|
+
* const range = parseRange("1.x || >=2.5.0 || 5.0.0 - 7.2.3");
|
|
31
|
+
*
|
|
32
|
+
* const s0 = parse("1.2.3");
|
|
33
|
+
* const s1 = parse("9.8.7");
|
|
34
|
+
*
|
|
35
|
+
* assertEquals(greaterThan(s0, s1), false);
|
|
36
|
+
* assertEquals(lessThan(s0, s1), true);
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
9
39
|
* ## Versions
|
|
10
40
|
*
|
|
11
41
|
* A "version" is described by the `v2.0.0` specification found at
|
|
@@ -241,26 +271,7 @@
|
|
|
241
271
|
*
|
|
242
272
|
* This module is browser compatible.
|
|
243
273
|
*
|
|
244
|
-
|
|
245
|
-
* ```ts
|
|
246
|
-
* import {
|
|
247
|
-
* parse,
|
|
248
|
-
* parseRange,
|
|
249
|
-
* greaterThan,
|
|
250
|
-
* lessThan,
|
|
251
|
-
* format
|
|
252
|
-
* } from "@std/semver";
|
|
253
|
-
*
|
|
254
|
-
* const semver = parse("1.2.3");
|
|
255
|
-
* const range = parseRange("1.x || >=2.5.0 || 5.0.0 - 7.2.3");
|
|
256
|
-
*
|
|
257
|
-
* const s0 = parse("1.2.3");
|
|
258
|
-
* const s1 = parse("9.8.7");
|
|
259
|
-
* greaterThan(s0, s1); // false
|
|
260
|
-
* lessThan(s0, s1); // true
|
|
261
|
-
*
|
|
262
|
-
* format(semver) // "1.2.3"
|
|
263
|
-
* ```
|
|
274
|
+
|
|
264
275
|
*
|
|
265
276
|
* @module
|
|
266
277
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as dntShim from "../_dnt.shims.js";
|
|
2
2
|
import { getLogger } from "@logtape/logtape";
|
|
3
|
-
import { accepts } from "../deps/jsr.io/@std/http/0.224.
|
|
3
|
+
import { accepts } from "../deps/jsr.io/@std/http/0.224.3/negotiation.js";
|
|
4
4
|
import { verifyRequest } from "../sig/http.js";
|
|
5
5
|
import { doesActorOwnKey } from "../sig/owner.js";
|
|
6
6
|
import { Activity, Link, Object, OrderedCollection, OrderedCollectionPage, } from "../vocab/vocab.js";
|
|
@@ -18,8 +18,7 @@ export function acceptsJsonLd(request) {
|
|
|
18
18
|
export async function handleActor(request, { handle, context, actorDispatcher, authorizePredicate, onNotFound, onNotAcceptable, onUnauthorized, }) {
|
|
19
19
|
if (actorDispatcher == null)
|
|
20
20
|
return await onNotFound(request);
|
|
21
|
-
const
|
|
22
|
-
const actor = await actorDispatcher(context, handle, key);
|
|
21
|
+
const actor = await context.getActor(handle);
|
|
23
22
|
if (actor == null)
|
|
24
23
|
return await onNotFound(request);
|
|
25
24
|
if (!acceptsJsonLd(request))
|
|
@@ -170,8 +169,7 @@ export async function handleInbox(request, { handle, context, kv, kvPrefix, acto
|
|
|
170
169
|
return await onNotFound(request);
|
|
171
170
|
}
|
|
172
171
|
else if (handle != null) {
|
|
173
|
-
const
|
|
174
|
-
const actor = await actorDispatcher(context, handle, key);
|
|
172
|
+
const actor = await context.getActor(handle);
|
|
175
173
|
if (actor == null) {
|
|
176
174
|
logger.error("Actor {handle} not found.", { handle });
|
|
177
175
|
return await onNotFound(request);
|
|
@@ -145,6 +145,32 @@ export class Federation {
|
|
|
145
145
|
}
|
|
146
146
|
logger.info("Successfully sent activity {activityId} to {inbox}.", { ...logData, activityId: activity?.id?.href });
|
|
147
147
|
}
|
|
148
|
+
async #getKeyPairsFromHandle(url, contextData, handle) {
|
|
149
|
+
const logger = getLogger(["fedify", "federation", "actor"]);
|
|
150
|
+
if (this.#actorCallbacks?.keyPairsDispatcher == null) {
|
|
151
|
+
throw new Error("No actor key pairs dispatcher registered.");
|
|
152
|
+
}
|
|
153
|
+
const path = this.#router.build("actor", { handle });
|
|
154
|
+
if (path == null) {
|
|
155
|
+
logger.warn("No actor dispatcher registered.");
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
const actorUri = new URL(path, url);
|
|
159
|
+
const keyPairs = await this.#actorCallbacks?.keyPairsDispatcher(contextData, handle);
|
|
160
|
+
if (keyPairs.length < 1) {
|
|
161
|
+
logger.warn("No key pairs found for actor {handle}.", { handle });
|
|
162
|
+
}
|
|
163
|
+
let i = 0;
|
|
164
|
+
const result = [];
|
|
165
|
+
for (const keyPair of keyPairs) {
|
|
166
|
+
result.push({
|
|
167
|
+
...keyPair,
|
|
168
|
+
keyId: new URL(i == 0 ? `#main-key` : `#key-${i + 1}`, actorUri),
|
|
169
|
+
});
|
|
170
|
+
i++;
|
|
171
|
+
}
|
|
172
|
+
return result;
|
|
173
|
+
}
|
|
148
174
|
createContext(urlOrRequest, contextData) {
|
|
149
175
|
const request = urlOrRequest instanceof Request ? urlOrRequest : null;
|
|
150
176
|
const url = urlOrRequest instanceof URL
|
|
@@ -157,26 +183,28 @@ export class Federation {
|
|
|
157
183
|
}
|
|
158
184
|
if (this.#treatHttps)
|
|
159
185
|
url.protocol = "https:";
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
186
|
+
const getRsaKeyPairFromHandle = async (handle) => {
|
|
187
|
+
const keyPairs = await this.#getKeyPairsFromHandle(url, contextData, handle);
|
|
188
|
+
for (const keyPair of keyPairs) {
|
|
189
|
+
const { privateKey } = keyPair;
|
|
190
|
+
if (privateKey.algorithm.name === "RSASSA-PKCS1-v1_5" &&
|
|
191
|
+
privateKey.algorithm.hash
|
|
192
|
+
.name ===
|
|
193
|
+
"SHA-256") {
|
|
194
|
+
return keyPair;
|
|
195
|
+
}
|
|
169
196
|
}
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
privateKey: keyPair.privateKey,
|
|
173
|
-
};
|
|
197
|
+
getLogger(["fedify", "federation", "actor"]).warn("No RSA-PKCS#1-v1.5 SHA-256 key found for actor {handle}.", { handle });
|
|
198
|
+
return null;
|
|
174
199
|
};
|
|
175
200
|
const getAuthenticatedDocumentLoader = this.#authenticatedDocumentLoaderFactory;
|
|
201
|
+
const documentLoader = this.#documentLoader;
|
|
176
202
|
function getDocumentLoader(identity) {
|
|
177
203
|
if ("handle" in identity) {
|
|
178
|
-
const keyPair =
|
|
179
|
-
|
|
204
|
+
const keyPair = getRsaKeyPairFromHandle(identity.handle);
|
|
205
|
+
if (keyPair == null)
|
|
206
|
+
return documentLoader;
|
|
207
|
+
return keyPair.then((pair) => pair == null ? documentLoader : getAuthenticatedDocumentLoader(pair));
|
|
180
208
|
}
|
|
181
209
|
return getAuthenticatedDocumentLoader(identity);
|
|
182
210
|
}
|
|
@@ -294,23 +322,62 @@ export class Federation {
|
|
|
294
322
|
return result.handle;
|
|
295
323
|
return null;
|
|
296
324
|
},
|
|
325
|
+
getActorKeyPairs: async (handle) => {
|
|
326
|
+
let keyPairs;
|
|
327
|
+
try {
|
|
328
|
+
keyPairs = await this.#getKeyPairsFromHandle(url, contextData, handle);
|
|
329
|
+
}
|
|
330
|
+
catch (_) {
|
|
331
|
+
getLogger(["fedify", "federation", "actor"])
|
|
332
|
+
.warn("No actor key pairs dispatcher registered.");
|
|
333
|
+
return [];
|
|
334
|
+
}
|
|
335
|
+
const owner = context.getActorUri(handle);
|
|
336
|
+
const result = [];
|
|
337
|
+
for (const keyPair of keyPairs) {
|
|
338
|
+
const newPair = {
|
|
339
|
+
...keyPair,
|
|
340
|
+
cryptographicKey: new CryptographicKey({
|
|
341
|
+
id: keyPair.keyId,
|
|
342
|
+
owner,
|
|
343
|
+
publicKey: keyPair.publicKey,
|
|
344
|
+
}),
|
|
345
|
+
};
|
|
346
|
+
result.push(newPair);
|
|
347
|
+
}
|
|
348
|
+
return result;
|
|
349
|
+
},
|
|
297
350
|
getActorKey: async (handle) => {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
351
|
+
getLogger(["fedify", "federation", "actor"]).warn("Context.getActorKey() method is deprecated; " +
|
|
352
|
+
"use Context.getActorKeyPairs() method instead.");
|
|
353
|
+
let keyPair;
|
|
354
|
+
try {
|
|
355
|
+
keyPair = await getRsaKeyPairFromHandle(handle);
|
|
356
|
+
}
|
|
357
|
+
catch (_) {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
301
360
|
if (keyPair == null)
|
|
302
361
|
return null;
|
|
303
362
|
return new CryptographicKey({
|
|
304
|
-
id:
|
|
363
|
+
id: keyPair.keyId,
|
|
305
364
|
owner: context.getActorUri(handle),
|
|
306
365
|
publicKey: keyPair.publicKey,
|
|
307
366
|
});
|
|
308
367
|
},
|
|
309
368
|
getDocumentLoader,
|
|
310
369
|
sendActivity: async (sender, recipients, activity, options = {}) => {
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
370
|
+
let senderPair;
|
|
371
|
+
if ("handle" in sender) {
|
|
372
|
+
const keyPair = await getRsaKeyPairFromHandle(sender.handle);
|
|
373
|
+
if (keyPair == null) {
|
|
374
|
+
throw new Error(`No key pair found for actor ${sender.handle}`);
|
|
375
|
+
}
|
|
376
|
+
senderPair = keyPair;
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
senderPair = sender;
|
|
380
|
+
}
|
|
314
381
|
const opts = { ...options };
|
|
315
382
|
let expandedRecipients;
|
|
316
383
|
if (Array.isArray(recipients)) {
|
|
@@ -349,6 +416,13 @@ export class Federation {
|
|
|
349
416
|
this.#actorCallbacks.dispatcher == null) {
|
|
350
417
|
throw new Error("No actor dispatcher registered.");
|
|
351
418
|
}
|
|
419
|
+
let rsaKey;
|
|
420
|
+
try {
|
|
421
|
+
rsaKey = await getRsaKeyPairFromHandle(handle);
|
|
422
|
+
}
|
|
423
|
+
catch (_) {
|
|
424
|
+
rsaKey = null;
|
|
425
|
+
}
|
|
352
426
|
return await this.#actorCallbacks.dispatcher({
|
|
353
427
|
...reqCtx,
|
|
354
428
|
getActor(handle2) {
|
|
@@ -357,7 +431,11 @@ export class Federation {
|
|
|
357
431
|
"this may cause an infinite loop.", { getActorHandle: handle2, actorDispatcherHandle: handle });
|
|
358
432
|
return reqCtx.getActor(handle2);
|
|
359
433
|
},
|
|
360
|
-
}, handle,
|
|
434
|
+
}, handle, rsaKey == null ? null : new CryptographicKey({
|
|
435
|
+
id: rsaKey.keyId,
|
|
436
|
+
owner: context.getActorUri(handle),
|
|
437
|
+
publicKey: rsaKey.publicKey,
|
|
438
|
+
}));
|
|
361
439
|
},
|
|
362
440
|
getObject: async (cls, values) => {
|
|
363
441
|
const callbacks = this.#objectCallbacks[cls.typeId.href];
|
|
@@ -431,7 +509,7 @@ export class Federation {
|
|
|
431
509
|
* ``` typescript
|
|
432
510
|
* federation.setActorDispatcher(
|
|
433
511
|
* "/users/{handle}",
|
|
434
|
-
* async (ctx, handle
|
|
512
|
+
* async (ctx, handle) => {
|
|
435
513
|
* return new Person({
|
|
436
514
|
* id: ctx.getActorUri(handle),
|
|
437
515
|
* preferredUsername: handle,
|
|
@@ -531,8 +609,20 @@ export class Federation {
|
|
|
531
609
|
};
|
|
532
610
|
this.#actorCallbacks = callbacks;
|
|
533
611
|
const setters = {
|
|
612
|
+
setKeyPairsDispatcher(dispatcher) {
|
|
613
|
+
callbacks.keyPairsDispatcher = dispatcher;
|
|
614
|
+
return setters;
|
|
615
|
+
},
|
|
534
616
|
setKeyPairDispatcher(dispatcher) {
|
|
535
|
-
|
|
617
|
+
getLogger(["fedify", "federation", "actor"]).warn("The ActorCallbackSetters.setKeyPairDispatcher() method is " +
|
|
618
|
+
"deprecated. Use the ActorCallbackSetters.setKeyPairsDispatcher() " +
|
|
619
|
+
"instead.");
|
|
620
|
+
callbacks.keyPairsDispatcher = async (ctxData, handle) => {
|
|
621
|
+
const key = await dispatcher(ctxData, handle);
|
|
622
|
+
if (key == null)
|
|
623
|
+
return [];
|
|
624
|
+
return [key];
|
|
625
|
+
};
|
|
536
626
|
return setters;
|
|
537
627
|
},
|
|
538
628
|
authorize(predicate) {
|
package/esm/nodeinfo/types.js
CHANGED
package/esm/runtime/key.js
CHANGED
|
@@ -1,24 +1,44 @@
|
|
|
1
1
|
import * as dntShim from "../_dnt.shims.js";
|
|
2
2
|
import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/0.224.3/base64.js";
|
|
3
|
+
import { PublicKeyInfo } from "pkijs";
|
|
4
|
+
import { validateCryptoKey } from "../sig/key.js";
|
|
5
|
+
const algorithms = {
|
|
6
|
+
"1.2.840.113549.1.1.1": { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" },
|
|
7
|
+
"1.3.101.112": "Ed25519",
|
|
8
|
+
};
|
|
3
9
|
/**
|
|
4
10
|
* Imports a PEM-SPKI formatted public key.
|
|
5
11
|
* @param pem The PEM-SPKI formatted public key.
|
|
6
12
|
* @returns The imported public key.
|
|
13
|
+
* @throws {TypeError} If the key is invalid or unsupported.
|
|
7
14
|
* @since 0.5.0
|
|
8
15
|
*/
|
|
9
16
|
export async function importSpki(pem) {
|
|
10
17
|
pem = pem.replace(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g, "");
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
18
|
+
let spki;
|
|
19
|
+
try {
|
|
20
|
+
spki = decodeBase64(pem);
|
|
21
|
+
}
|
|
22
|
+
catch (_) {
|
|
23
|
+
throw new TypeError("Invalid PEM-SPKI format.");
|
|
24
|
+
}
|
|
25
|
+
const pki = PublicKeyInfo.fromBER(spki);
|
|
26
|
+
const oid = pki.algorithm.algorithmId;
|
|
27
|
+
const algorithm = algorithms[oid];
|
|
28
|
+
if (algorithm == null) {
|
|
29
|
+
throw new TypeError("Unsupported algorithm: " + oid);
|
|
30
|
+
}
|
|
31
|
+
return await dntShim.crypto.subtle.importKey("spki", spki, algorithm, true, ["verify"]);
|
|
14
32
|
}
|
|
15
33
|
/**
|
|
16
34
|
* Exports a public key in PEM-SPKI format.
|
|
17
35
|
* @param key The public key to export.
|
|
18
36
|
* @returns The exported public key in PEM-SPKI format.
|
|
37
|
+
* @throws {TypeError} If the key is invalid or unsupported.
|
|
19
38
|
* @since 0.5.0
|
|
20
39
|
*/
|
|
21
40
|
export async function exportSpki(key) {
|
|
41
|
+
validateCryptoKey(key);
|
|
22
42
|
const spki = await dntShim.crypto.subtle.exportKey("spki", key);
|
|
23
43
|
let pem = encodeBase64(spki);
|
|
24
44
|
pem = (pem.match(/.{1,64}/g) || []).join("\n");
|
package/esm/sig/key.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import * as dntShim from "../_dnt.shims.js";
|
|
2
|
+
import { getLogger } from "@logtape/logtape";
|
|
1
3
|
/**
|
|
2
4
|
* Checks if the given key is valid and supported. No-op if the key is valid,
|
|
3
5
|
* otherwise throws an error.
|
|
@@ -6,7 +8,6 @@
|
|
|
6
8
|
* either public or private.
|
|
7
9
|
* @throws {TypeError} If the key is invalid or unsupported.
|
|
8
10
|
*/
|
|
9
|
-
import * as dntShim from "../_dnt.shims.js";
|
|
10
11
|
export function validateCryptoKey(key, type) {
|
|
11
12
|
if (type != null && key.type !== type) {
|
|
12
13
|
throw new TypeError(`The key is not a ${type} key.`);
|
|
@@ -14,28 +15,46 @@ export function validateCryptoKey(key, type) {
|
|
|
14
15
|
if (!key.extractable) {
|
|
15
16
|
throw new TypeError("The key is not extractable.");
|
|
16
17
|
}
|
|
17
|
-
if (key.algorithm.name
|
|
18
|
-
|
|
18
|
+
if (key.algorithm.name !== "RSASSA-PKCS1-v1_5" &&
|
|
19
|
+
key.algorithm.name !== "Ed25519") {
|
|
20
|
+
throw new TypeError("Currently only RSASSA-PKCS1-v1_5 and Ed25519 keys are supported. " +
|
|
19
21
|
"More algorithms will be added in the future!");
|
|
20
22
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
"
|
|
23
|
+
if (key.algorithm.name === "RSASSA-PKCS1-v1_5") {
|
|
24
|
+
// @ts-ignore TS2304
|
|
25
|
+
const algorithm = key.algorithm;
|
|
26
|
+
if (algorithm.hash.name !== "SHA-256") {
|
|
27
|
+
throw new TypeError("For compatibility with the existing Fediverse software " +
|
|
28
|
+
"(e.g., Mastodon), hash algorithm for RSASSA-PKCS1-v1_5 keys " +
|
|
29
|
+
"must be SHA-256.");
|
|
30
|
+
}
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
/**
|
|
29
34
|
* Generates a key pair which is appropriate for Fedify.
|
|
35
|
+
* @param algorithm The algorithm to use. Currently only RSASSA-PKCS1-v1_5 and
|
|
36
|
+
* Ed25519 are supported.
|
|
30
37
|
* @returns The generated key pair.
|
|
38
|
+
* @throws {TypeError} If the algorithm is unsupported.
|
|
31
39
|
*/
|
|
32
|
-
export function generateCryptoKeyPair() {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
40
|
+
export function generateCryptoKeyPair(algorithm) {
|
|
41
|
+
if (algorithm == null) {
|
|
42
|
+
getLogger(["fedify", "sig", "key"]).warn("No algorithm specified. Using RSASSA-PKCS1-v1_5 by default, but " +
|
|
43
|
+
"it is recommended to specify the algorithm explicitly as " +
|
|
44
|
+
"the parameter will be required in the future.");
|
|
45
|
+
}
|
|
46
|
+
if (algorithm == null || algorithm === "RSASSA-PKCS1-v1_5") {
|
|
47
|
+
return dntShim.crypto.subtle.generateKey({
|
|
48
|
+
name: "RSASSA-PKCS1-v1_5",
|
|
49
|
+
modulusLength: 4096,
|
|
50
|
+
publicExponent: new Uint8Array([0x01, 0x00, 0x01]),
|
|
51
|
+
hash: "SHA-256",
|
|
52
|
+
}, true, ["sign", "verify"]);
|
|
53
|
+
}
|
|
54
|
+
else if (algorithm === "Ed25519") {
|
|
55
|
+
return dntShim.crypto.subtle.generateKey("Ed25519", true, ["sign", "verify"]);
|
|
56
|
+
}
|
|
57
|
+
throw new TypeError("Unsupported algorithm: " + algorithm);
|
|
39
58
|
}
|
|
40
59
|
/**
|
|
41
60
|
* Exports a key in JWK format.
|
|
@@ -56,7 +75,16 @@ export async function exportJwk(key) {
|
|
|
56
75
|
* @throws {TypeError} If the key is invalid or unsupported.
|
|
57
76
|
*/
|
|
58
77
|
export async function importJwk(jwk, type) {
|
|
59
|
-
|
|
78
|
+
let key;
|
|
79
|
+
if (jwk.kty === "RSA" && jwk.alg === "RS256") {
|
|
80
|
+
key = await dntShim.crypto.subtle.importKey("jwk", jwk, { name: "RSASSA-PKCS1-v1_5", hash: "SHA-256" }, true, type === "public" ? ["verify"] : ["sign"]);
|
|
81
|
+
}
|
|
82
|
+
else if (jwk.kty === "OKP" && jwk.crv === "Ed25519") {
|
|
83
|
+
key = await dntShim.crypto.subtle.importKey("jwk", jwk, "Ed25519", true, type === "public" ? ["verify"] : ["sign"]);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
throw new TypeError("Unsupported JWK format.");
|
|
87
|
+
}
|
|
60
88
|
validateCryptoKey(key, type);
|
|
61
89
|
return key;
|
|
62
90
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"@context": "https://w3id.org/security/v1",
|
|
3
|
+
"id": "https://example.com/key4",
|
|
4
|
+
"type": "CryptographicKey",
|
|
5
|
+
"owner": "https://example.com/person2",
|
|
6
|
+
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEALR8epAGDe+cVq5p2Tx49CCfphpk1rNhkNoY9i+XEUfg=\n-----END PUBLIC KEY-----\n"
|
|
7
|
+
}
|
|
@@ -12,6 +12,12 @@
|
|
|
12
12
|
"type": "CryptographicKey",
|
|
13
13
|
"owner": "https://example.com/person2",
|
|
14
14
|
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4GUqWgdiYlN3Su5Gr4l6\ni+xRS8gDDVKZ718vpGk6eIpvqs33q430nRbHIzbHRXRaAhc/1++rUBcK0V4/kjZl\nCSzVtRgGU6HMkmjcD+uE56a8XbTczfltbEDj7afoEuB2F3UhQEWrSz+QJ29DPXaL\nMIa1Yv61NR2vxGqNbdtoMjDORMBYtg77CYbcFkiJHw65PDa7+f/yjLxuCRPye5L7\nhncN0UZuuFoRJmHNRLSg5omBad9WTvQXmSyXEhEdk9fHwlI022AqAzlWbT79hldc\nDSKGGLLbQIs1c3JZIG8G5i6Uh5Vy0Z7tSNBcxbhqoI9i9je4f/x/OPIVc19f04BE\n1LgWuHsftZzRgW9Sdqz53W83XxVdxlyHeywXOnstSWT11f8dkLyQUcHKTH+E6urb\nH+aiPLiRpYK8W7D9KTQA9kZ5JXaEuveBd5vJX7wakhbzAn8pWJU7GYIHNY38Ycok\nmivkU5pY8S2cKFMwY0b7ade3MComlir5P3ZYSjF+n6gRVsT96P+9mNfCu9gXt/f8\nXCyjKlH89kGwuJ7HhR8CuVdm0l+jYozVt6GsDy0hHYyn79NCCAEzP7ZbhBMR0T5V\nrkl+TIGXoJH9WFiz4VxO+NnglF6dNQjDS5IzYLoFRXIK1f3cmQiEB4FZmL70l9HL\nrgwR+Xys83xia79OqFDRezMCAwEAAQ==\n-----END PUBLIC KEY-----\n"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "https://example.com/key4",
|
|
18
|
+
"type": "CryptographicKey",
|
|
19
|
+
"owner": "https://example.com/person2",
|
|
20
|
+
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMCowBQYDK2VwAyEALR8epAGDe+cVq5p2Tx49CCfphpk1rNhkNoY9i+XEUfg=\n-----END PUBLIC KEY-----\n"
|
|
15
21
|
}
|
|
16
22
|
]
|
|
17
23
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fedify/fedify",
|
|
3
|
-
"version": "0.10.0-dev.
|
|
3
|
+
"version": "0.10.0-dev.190+4dffb89a",
|
|
4
4
|
"description": "An ActivityPub server framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ActivityPub",
|
|
@@ -85,6 +85,7 @@
|
|
|
85
85
|
"@logtape/logtape": "^0.4.0",
|
|
86
86
|
"@phensley/language-tag": "^1.8.0",
|
|
87
87
|
"jsonld": "^8.3.2",
|
|
88
|
+
"pkijs": "^3.1.0",
|
|
88
89
|
"uri-template-router": "^0.0.16",
|
|
89
90
|
"url-template": "^3.1.1",
|
|
90
91
|
"@deno/shim-deno": "~0.18.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/0.226.0/assert.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,SAAK,GAAG,OAAO,CAAC,IAAI,CAI5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assertion_error.d.ts","sourceRoot":"","sources":["../../../../../../src/deps/jsr.io/@std/assert/0.226.0/assertion_error.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC;;;;;;;;;;OAUG;gBACS,OAAO,EAAE,MAAM;CAI5B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@std/http/0.224.
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@std/http/0.224.3/_negotiation/common.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,CAAC,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,CAQnE;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAEpD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@std/http/0.224.
|
|
1
|
+
{"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@std/http/0.224.3/_negotiation/encoding.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AA4GH;;qCAEqC;AACrC,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,MAAM,EAAE,CAkBV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@std/http/0.224.
|
|
1
|
+
{"version":3,"file":"language.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@std/http/0.224.3/_negotiation/language.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAkGH,wBAAgB,kBAAkB,CAChC,MAAM,SAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,MAAM,EAAE,CAiBV"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media_type.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@std/http/0.224.
|
|
1
|
+
{"version":3,"file":"media_type.d.ts","sourceRoot":"","sources":["../../../../../../../src/deps/jsr.io/@std/http/0.224.3/_negotiation/media_type.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAiJH,wBAAgB,mBAAmB,CACjC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,MAAM,EAAE,CAkBV"}
|