@fedify/fedify 0.10.0-dev.196 → 0.10.0-dev.197

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 CHANGED
@@ -70,6 +70,9 @@ To be released.
70
70
  - `Service.clone()` method now accepts `assertionMethod` option.
71
71
  - `Service.clone()` method now accepts `assertionMethods` option.
72
72
 
73
+ - Added `DataIntegrityProof` class to Activity Vocabulary API.
74
+ [[FEP-8b32], [#54]]
75
+
73
76
  - Deprecated `treatHttps` option in `FederationParameters` interface.
74
77
  Instead, use the [x-forwarded-fetch] library to recognize the
75
78
  `X-Forwarded-Host` and `X-Forwarded-Proto` headers.
@@ -81,8 +84,10 @@ To be released.
81
84
  `following`, `followers`, `outbox`, `manuallyApprovesFollowers`, and
82
85
  `url`.
83
86
 
87
+ [#54]: https://github.com/dahlia/fedify/issues/54
84
88
  [#55]: https://github.com/dahlia/fedify/issues/55
85
89
  [FEP-521a]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
90
+ [FEP-8b32]: https://codeberg.org/fediverse/fep/src/branch/main/fep/8b32/fep-8b32.md
86
91
  [x-forwarded-fetch]: https://github.com/dahlia/x-forwarded-fetch
87
92
 
88
93
 
@@ -0,0 +1,74 @@
1
+ {
2
+ "@context": {
3
+ "id": "@id",
4
+ "type": "@type",
5
+ "@protected": true,
6
+ "proof": {
7
+ "@id": "https://w3id.org/security#proof",
8
+ "@type": "@id",
9
+ "@container": "@graph"
10
+ },
11
+ "DataIntegrityProof": {
12
+ "@id": "https://w3id.org/security#DataIntegrityProof",
13
+ "@context": {
14
+ "@protected": true,
15
+ "id": "@id",
16
+ "type": "@type",
17
+ "challenge": "https://w3id.org/security#challenge",
18
+ "created": {
19
+ "@id": "http://purl.org/dc/terms/created",
20
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
21
+ },
22
+ "domain": "https://w3id.org/security#domain",
23
+ "expires": {
24
+ "@id": "https://w3id.org/security#expiration",
25
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
26
+ },
27
+ "nonce": "https://w3id.org/security#nonce",
28
+ "proofPurpose": {
29
+ "@id": "https://w3id.org/security#proofPurpose",
30
+ "@type": "@vocab",
31
+ "@context": {
32
+ "@protected": true,
33
+ "id": "@id",
34
+ "type": "@type",
35
+ "assertionMethod": {
36
+ "@id": "https://w3id.org/security#assertionMethod",
37
+ "@type": "@id",
38
+ "@container": "@set"
39
+ },
40
+ "authentication": {
41
+ "@id": "https://w3id.org/security#authenticationMethod",
42
+ "@type": "@id",
43
+ "@container": "@set"
44
+ },
45
+ "capabilityInvocation": {
46
+ "@id": "https://w3id.org/security#capabilityInvocationMethod",
47
+ "@type": "@id",
48
+ "@container": "@set"
49
+ },
50
+ "capabilityDelegation": {
51
+ "@id": "https://w3id.org/security#capabilityDelegationMethod",
52
+ "@type": "@id",
53
+ "@container": "@set"
54
+ },
55
+ "keyAgreement": {
56
+ "@id": "https://w3id.org/security#keyAgreementMethod",
57
+ "@type": "@id",
58
+ "@container": "@set"
59
+ }
60
+ }
61
+ },
62
+ "cryptosuite": "https://w3id.org/security#cryptosuite",
63
+ "proofValue": {
64
+ "@id": "https://w3id.org/security#proofValue",
65
+ "@type": "https://w3id.org/security#multibase"
66
+ },
67
+ "verificationMethod": {
68
+ "@id": "https://w3id.org/security#verificationMethod",
69
+ "@type": "@id"
70
+ }
71
+ }
72
+ }
73
+ }
74
+ }
@@ -0,0 +1,56 @@
1
+ $schema: ../codegen/schema.yaml
2
+ name: DataIntegrityProof
3
+ uri: "https://w3id.org/security#DataIntegrityProof"
4
+ entity: true
5
+ description: |
6
+ A proof that can be added to any activity or object, allowing recipients to
7
+ verify the identity of the actor and the integrity of the data.
8
+ defaultContext: "https://w3id.org/security/data-integrity/v1"
9
+
10
+ properties:
11
+ - singularName: cryptosuite
12
+ functional: true
13
+ uri: "https://w3id.org/security#cryptosuite"
14
+ description: |
15
+ The cryptographic suite used to create the proof.
16
+ range:
17
+ - "https://w3id.org/security#cryptosuiteString"
18
+
19
+ - singularName: verificationMethod
20
+ functional: true
21
+ uri: "https://w3id.org/security#verificationMethod"
22
+ description: |
23
+ A key owned by an actor according to [FEP-521a: Representing actor's public
24
+ keys][1].
25
+
26
+ [1]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
27
+ range:
28
+ - "https://w3id.org/security#Multikey"
29
+
30
+ - singularName: proofPurpose
31
+ functional: true
32
+ uri: "https://w3id.org/security#proofPurpose"
33
+ description: |
34
+ The reason the proof was created.
35
+
36
+ - `"assertionMethod"`
37
+ - `"authentication"`
38
+ - `"capabilityInvocation"`
39
+ - `"capabilityDelegation"`
40
+ - `"keyAgreement"`
41
+ range:
42
+ - fedify:proofPurpose
43
+
44
+ - singularName: proofValue
45
+ functional: true
46
+ uri: "https://w3id.org/security#proofValue"
47
+ description: The proof value.
48
+ range:
49
+ - "https://w3id.org/security#multibase"
50
+
51
+ - singularName: created
52
+ functional: true
53
+ uri: "https://www.w3.org/ns/activitystreams#published"
54
+ description: The date and time the proof was created.
55
+ range:
56
+ - "http://www.w3.org/2001/XMLSchema#dateTime"
@@ -4,6 +4,7 @@ import * as dntShim from "../_dnt.shims.js";
4
4
  // @ts-ignore TS7016
5
5
  import jsonld from "jsonld";
6
6
  import { parseLanguageTag } from "@phensley/language-tag";
7
+ import { decode as decodeMultibase, encode as encodeMultibase, } from "multibase";
7
8
  import { fetchDocumentLoader, } from "../runtime/docloader.js";
8
9
  import { exportMultibaseKey, exportSpki, importMultibaseKey, importSpki, } from "../runtime/key.js";
9
10
  import { LanguageString } from "../runtime/langstr.js";
@@ -3631,6 +3632,381 @@ export class PropertyValue {
3631
3632
  return "PropertyValue " + inspect(proxy, options);
3632
3633
  }
3633
3634
  }
3635
+ /** A proof that can be added to any activity or object, allowing recipients to
3636
+ * verify the identity of the actor and the integrity of the data.
3637
+ */
3638
+ export class DataIntegrityProof {
3639
+ #documentLoader;
3640
+ #contextLoader;
3641
+ id;
3642
+ get _documentLoader() {
3643
+ return this.#documentLoader;
3644
+ }
3645
+ get _contextLoader() {
3646
+ return this.#contextLoader;
3647
+ }
3648
+ /**
3649
+ * The type URI of {@link DataIntegrityProof}: `https://w3id.org/security#DataIntegrityProof`.
3650
+ */
3651
+ static get typeId() {
3652
+ return new URL("https://w3id.org/security#DataIntegrityProof");
3653
+ }
3654
+ #_3RurJsa7tnptyqMFR5hDGcP9pMs5 = [];
3655
+ #_2mHVKxqA7zncjveJrDEo3pWpMZqg = [];
3656
+ #_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb = [];
3657
+ #_3CjFK5vfKpX4HQuNh2b18TykoVLq = [];
3658
+ #_5e258TDXtuhaFRPZiGoDfEpjdMr = [];
3659
+ /**
3660
+ * Constructs a new instance of DataIntegrityProof with the given values.
3661
+ * @param values The values to initialize the instance with.
3662
+ * @param options The options to use for initialization.
3663
+ */
3664
+ constructor(values, { documentLoader, contextLoader, } = {}) {
3665
+ this.#documentLoader = documentLoader;
3666
+ this.#contextLoader = contextLoader;
3667
+ this.id = values.id ?? null;
3668
+ if ("cryptosuite" in values && values.cryptosuite != null) {
3669
+ this.#_3RurJsa7tnptyqMFR5hDGcP9pMs5 = [values.cryptosuite];
3670
+ }
3671
+ if ("verificationMethod" in values && values.verificationMethod != null) {
3672
+ this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg = [values.verificationMethod];
3673
+ }
3674
+ if ("proofPurpose" in values && values.proofPurpose != null) {
3675
+ this.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb = [values.proofPurpose];
3676
+ }
3677
+ if ("proofValue" in values && values.proofValue != null) {
3678
+ this.#_3CjFK5vfKpX4HQuNh2b18TykoVLq = [values.proofValue];
3679
+ }
3680
+ if ("created" in values && values.created != null) {
3681
+ this.#_5e258TDXtuhaFRPZiGoDfEpjdMr = [values.created];
3682
+ }
3683
+ }
3684
+ /**
3685
+ * Clones this instance, optionally updating it with the given values.
3686
+ * @param values The values to update the clone with.
3687
+ * @options The options to use for cloning.
3688
+ * @returns The cloned instance.
3689
+ */
3690
+ clone(values = {}, options = {}) {
3691
+ // @ts-ignore: this.constructor is not recognized as a constructor, but it is.
3692
+ const clone = new this.constructor({ id: values.id }, options);
3693
+ clone.#_3RurJsa7tnptyqMFR5hDGcP9pMs5 = this.#_3RurJsa7tnptyqMFR5hDGcP9pMs5;
3694
+ if ("cryptosuite" in values && values.cryptosuite != null) {
3695
+ clone.#_3RurJsa7tnptyqMFR5hDGcP9pMs5 = [values.cryptosuite];
3696
+ }
3697
+ clone.#_2mHVKxqA7zncjveJrDEo3pWpMZqg = this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg;
3698
+ if ("verificationMethod" in values && values.verificationMethod != null) {
3699
+ clone.#_2mHVKxqA7zncjveJrDEo3pWpMZqg = [values.verificationMethod];
3700
+ }
3701
+ clone.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb = this.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb;
3702
+ if ("proofPurpose" in values && values.proofPurpose != null) {
3703
+ clone.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb = [values.proofPurpose];
3704
+ }
3705
+ clone.#_3CjFK5vfKpX4HQuNh2b18TykoVLq = this.#_3CjFK5vfKpX4HQuNh2b18TykoVLq;
3706
+ if ("proofValue" in values && values.proofValue != null) {
3707
+ clone.#_3CjFK5vfKpX4HQuNh2b18TykoVLq = [values.proofValue];
3708
+ }
3709
+ clone.#_5e258TDXtuhaFRPZiGoDfEpjdMr = this.#_5e258TDXtuhaFRPZiGoDfEpjdMr;
3710
+ if ("created" in values && values.created != null) {
3711
+ clone.#_5e258TDXtuhaFRPZiGoDfEpjdMr = [values.created];
3712
+ }
3713
+ return clone;
3714
+ }
3715
+ /** The cryptographic suite used to create the proof.
3716
+ */
3717
+ get cryptosuite() {
3718
+ if (this.#_3RurJsa7tnptyqMFR5hDGcP9pMs5.length < 1)
3719
+ return null;
3720
+ return this.#_3RurJsa7tnptyqMFR5hDGcP9pMs5[0];
3721
+ }
3722
+ async #fetchVerificationMethod(url, options = {}) {
3723
+ const documentLoader = options.documentLoader ?? this._documentLoader ??
3724
+ fetchDocumentLoader;
3725
+ const contextLoader = options.contextLoader ?? this._contextLoader ??
3726
+ fetchDocumentLoader;
3727
+ const { document } = await documentLoader(url.href);
3728
+ try {
3729
+ return await Multikey.fromJsonLd(document, { documentLoader, contextLoader });
3730
+ }
3731
+ catch (e) {
3732
+ if (!(e instanceof TypeError))
3733
+ throw e;
3734
+ }
3735
+ throw new TypeError("Expected an object of any type of: " +
3736
+ ["https://w3id.org/security#Multikey"].join(", "));
3737
+ }
3738
+ /**
3739
+ * Similar to
3740
+ * {@link DataIntegrityProof.getVerificationMethod},
3741
+ * but returns its `@id` URL instead of the object itself.
3742
+ */
3743
+ get verificationMethodId() {
3744
+ if (this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg.length < 1)
3745
+ return null;
3746
+ const v = this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg[0];
3747
+ if (v instanceof URL)
3748
+ return v;
3749
+ return v.id;
3750
+ }
3751
+ /** A key owned by an actor according to [FEP-521a: Representing actor's public
3752
+ * keys][1].
3753
+ *
3754
+ * [1]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
3755
+ */
3756
+ async getVerificationMethod(options = {}) {
3757
+ if (this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg.length < 1)
3758
+ return null;
3759
+ const v = this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg[0];
3760
+ if (v instanceof URL) {
3761
+ const fetched = await this.#fetchVerificationMethod(v, options);
3762
+ this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg[0] = fetched;
3763
+ return fetched;
3764
+ }
3765
+ return v;
3766
+ }
3767
+ /** The reason the proof was created.
3768
+ *
3769
+ * - `"assertionMethod"`
3770
+ * - `"authentication"`
3771
+ * - `"capabilityInvocation"`
3772
+ * - `"capabilityDelegation"`
3773
+ * - `"keyAgreement"`
3774
+ */
3775
+ get proofPurpose() {
3776
+ if (this.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb.length < 1)
3777
+ return null;
3778
+ return this.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb[0];
3779
+ }
3780
+ /** The proof value.
3781
+ */
3782
+ get proofValue() {
3783
+ if (this.#_3CjFK5vfKpX4HQuNh2b18TykoVLq.length < 1)
3784
+ return null;
3785
+ return this.#_3CjFK5vfKpX4HQuNh2b18TykoVLq[0];
3786
+ }
3787
+ /** The date and time the proof was created.
3788
+ */
3789
+ get created() {
3790
+ if (this.#_5e258TDXtuhaFRPZiGoDfEpjdMr.length < 1)
3791
+ return null;
3792
+ return this.#_5e258TDXtuhaFRPZiGoDfEpjdMr[0];
3793
+ }
3794
+ /**
3795
+ * Converts this object to a JSON-LD structure.
3796
+ * @returns The JSON-LD representation of this object.
3797
+ */
3798
+ async toJsonLd(options = {}) {
3799
+ options = {
3800
+ ...options,
3801
+ contextLoader: options.contextLoader ?? fetchDocumentLoader,
3802
+ };
3803
+ // deno-lint-ignore no-unused-vars prefer-const
3804
+ let array;
3805
+ const values = {};
3806
+ array = [];
3807
+ for (const v of this.#_3RurJsa7tnptyqMFR5hDGcP9pMs5) {
3808
+ array.push({ "@value": v });
3809
+ }
3810
+ if (array.length > 0) {
3811
+ values["https://w3id.org/security#cryptosuite"] = array;
3812
+ }
3813
+ array = [];
3814
+ for (const v of this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg) {
3815
+ array.push(v instanceof URL ? { "@id": v.href } : await v.toJsonLd(options));
3816
+ }
3817
+ if (array.length > 0) {
3818
+ values["https://w3id.org/security#verificationMethod"] = array;
3819
+ }
3820
+ array = [];
3821
+ for (const v of this.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb) {
3822
+ array.push({
3823
+ "@id": "https://w3id.org/security#" + v,
3824
+ });
3825
+ }
3826
+ if (array.length > 0) {
3827
+ values["https://w3id.org/security#proofPurpose"] = array;
3828
+ }
3829
+ array = [];
3830
+ for (const v of this.#_3CjFK5vfKpX4HQuNh2b18TykoVLq) {
3831
+ array.push({
3832
+ "@type": "https://w3id.org/security#multibase",
3833
+ "@value": new TextDecoder().decode(encodeMultibase("base58btc", v)),
3834
+ });
3835
+ }
3836
+ if (array.length > 0) {
3837
+ values["https://w3id.org/security#proofValue"] = array;
3838
+ }
3839
+ array = [];
3840
+ for (const v of this.#_5e258TDXtuhaFRPZiGoDfEpjdMr) {
3841
+ array.push({
3842
+ "@type": "http://www.w3.org/2001/XMLSchema#dateTime",
3843
+ "@value": v.toString(),
3844
+ });
3845
+ }
3846
+ if (array.length > 0) {
3847
+ values["https://www.w3.org/ns/activitystreams#published"] = array;
3848
+ }
3849
+ values["@type"] = ["https://w3id.org/security#DataIntegrityProof"];
3850
+ if (this.id)
3851
+ values["@id"] = this.id.href;
3852
+ if (options.expand) {
3853
+ return await jsonld.expand(values, { documentLoader: options.contextLoader });
3854
+ }
3855
+ return await jsonld.compact(values, "https://w3id.org/security/data-integrity/v1", { documentLoader: options.contextLoader });
3856
+ }
3857
+ /**
3858
+ * Converts a JSON-LD structure to an object of this type.
3859
+ * @param json The JSON-LD structure to convert.
3860
+ * @returns The object of this type.
3861
+ * @throws {TypeError} If the given `json` is invalid.
3862
+ */
3863
+ static async fromJsonLd(json, options = {}) {
3864
+ if (typeof json === "undefined") {
3865
+ throw new TypeError("Invalid JSON-LD: undefined.");
3866
+ }
3867
+ else if (json === null)
3868
+ throw new TypeError("Invalid JSON-LD: null.");
3869
+ options = {
3870
+ ...options,
3871
+ documentLoader: options.documentLoader ?? fetchDocumentLoader,
3872
+ contextLoader: options.contextLoader ?? fetchDocumentLoader,
3873
+ };
3874
+ // deno-lint-ignore no-explicit-any
3875
+ let values;
3876
+ if (globalThis.Object.keys(json).length == 0) {
3877
+ values = {};
3878
+ }
3879
+ else {
3880
+ const expanded = await jsonld.expand(json, {
3881
+ documentLoader: options.contextLoader,
3882
+ keepFreeFloatingNodes: true,
3883
+ });
3884
+ values =
3885
+ // deno-lint-ignore no-explicit-any
3886
+ (expanded[0] ?? {});
3887
+ }
3888
+ if ("@type" in values) {
3889
+ if (!values["@type"].includes("https://w3id.org/security#DataIntegrityProof")) {
3890
+ throw new TypeError("Invalid type: " + values["@type"]);
3891
+ }
3892
+ }
3893
+ const instance = new this({ id: "@id" in values ? new URL(values["@id"]) : undefined }, options);
3894
+ const _3RurJsa7tnptyqMFR5hDGcP9pMs5 = [];
3895
+ for (const v of values["https://w3id.org/security#cryptosuite"] ?? []) {
3896
+ if (v == null)
3897
+ continue;
3898
+ _3RurJsa7tnptyqMFR5hDGcP9pMs5.push(v["@value"]);
3899
+ }
3900
+ instance.#_3RurJsa7tnptyqMFR5hDGcP9pMs5 = _3RurJsa7tnptyqMFR5hDGcP9pMs5;
3901
+ const _2mHVKxqA7zncjveJrDEo3pWpMZqg = [];
3902
+ for (const v of values["https://w3id.org/security#verificationMethod"] ?? []) {
3903
+ if (v == null)
3904
+ continue;
3905
+ if (typeof v === "object" && "@id" in v && !("@type" in v) &&
3906
+ globalThis.Object.keys(v).length === 1) {
3907
+ _2mHVKxqA7zncjveJrDEo3pWpMZqg.push(new URL(v["@id"]));
3908
+ continue;
3909
+ }
3910
+ _2mHVKxqA7zncjveJrDEo3pWpMZqg.push(await Multikey.fromJsonLd(v, options));
3911
+ }
3912
+ instance.#_2mHVKxqA7zncjveJrDEo3pWpMZqg = _2mHVKxqA7zncjveJrDEo3pWpMZqg;
3913
+ const _2AeEnPcAvVrPEuKbpmn9ZKNmWHKb = [];
3914
+ for (const v of values["https://w3id.org/security#proofPurpose"] ?? []) {
3915
+ if (v == null)
3916
+ continue;
3917
+ _2AeEnPcAvVrPEuKbpmn9ZKNmWHKb.push(v["@id"].substring(26));
3918
+ }
3919
+ instance.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb = _2AeEnPcAvVrPEuKbpmn9ZKNmWHKb;
3920
+ const _3CjFK5vfKpX4HQuNh2b18TykoVLq = [];
3921
+ for (const v of values["https://w3id.org/security#proofValue"] ?? []) {
3922
+ if (v == null)
3923
+ continue;
3924
+ _3CjFK5vfKpX4HQuNh2b18TykoVLq.push(decodeMultibase(v["@value"]));
3925
+ }
3926
+ instance.#_3CjFK5vfKpX4HQuNh2b18TykoVLq = _3CjFK5vfKpX4HQuNh2b18TykoVLq;
3927
+ const _5e258TDXtuhaFRPZiGoDfEpjdMr = [];
3928
+ for (const v of values["https://www.w3.org/ns/activitystreams#published"] ?? []) {
3929
+ if (v == null)
3930
+ continue;
3931
+ _5e258TDXtuhaFRPZiGoDfEpjdMr.push(dntShim.Temporal.Instant.from(v["@value"]));
3932
+ }
3933
+ instance.#_5e258TDXtuhaFRPZiGoDfEpjdMr = _5e258TDXtuhaFRPZiGoDfEpjdMr;
3934
+ return instance;
3935
+ }
3936
+ _getCustomInspectProxy() {
3937
+ const proxy = {};
3938
+ if (this.id != null) {
3939
+ proxy.id = {
3940
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(this.id.href, options),
3941
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(this.id.href, options),
3942
+ };
3943
+ }
3944
+ const _3RurJsa7tnptyqMFR5hDGcP9pMs5 = this.#_3RurJsa7tnptyqMFR5hDGcP9pMs5
3945
+ // deno-lint-ignore no-explicit-any
3946
+ .map((v) => v instanceof URL
3947
+ ? {
3948
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
3949
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
3950
+ }
3951
+ : v);
3952
+ if (_3RurJsa7tnptyqMFR5hDGcP9pMs5.length == 1) {
3953
+ proxy.cryptosuite = _3RurJsa7tnptyqMFR5hDGcP9pMs5[0];
3954
+ }
3955
+ const _2mHVKxqA7zncjveJrDEo3pWpMZqg = this.#_2mHVKxqA7zncjveJrDEo3pWpMZqg
3956
+ // deno-lint-ignore no-explicit-any
3957
+ .map((v) => v instanceof URL
3958
+ ? {
3959
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
3960
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
3961
+ }
3962
+ : v);
3963
+ if (_2mHVKxqA7zncjveJrDEo3pWpMZqg.length == 1) {
3964
+ proxy.verificationMethod = _2mHVKxqA7zncjveJrDEo3pWpMZqg[0];
3965
+ }
3966
+ const _2AeEnPcAvVrPEuKbpmn9ZKNmWHKb = this.#_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb
3967
+ // deno-lint-ignore no-explicit-any
3968
+ .map((v) => v instanceof URL
3969
+ ? {
3970
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
3971
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
3972
+ }
3973
+ : v);
3974
+ if (_2AeEnPcAvVrPEuKbpmn9ZKNmWHKb.length == 1) {
3975
+ proxy.proofPurpose = _2AeEnPcAvVrPEuKbpmn9ZKNmWHKb[0];
3976
+ }
3977
+ const _3CjFK5vfKpX4HQuNh2b18TykoVLq = this.#_3CjFK5vfKpX4HQuNh2b18TykoVLq
3978
+ // deno-lint-ignore no-explicit-any
3979
+ .map((v) => v instanceof URL
3980
+ ? {
3981
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
3982
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
3983
+ }
3984
+ : v);
3985
+ if (_3CjFK5vfKpX4HQuNh2b18TykoVLq.length == 1) {
3986
+ proxy.proofValue = _3CjFK5vfKpX4HQuNh2b18TykoVLq[0];
3987
+ }
3988
+ const _5e258TDXtuhaFRPZiGoDfEpjdMr = this.#_5e258TDXtuhaFRPZiGoDfEpjdMr
3989
+ // deno-lint-ignore no-explicit-any
3990
+ .map((v) => v instanceof URL
3991
+ ? {
3992
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
3993
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
3994
+ }
3995
+ : v);
3996
+ if (_5e258TDXtuhaFRPZiGoDfEpjdMr.length == 1) {
3997
+ proxy.created = _5e258TDXtuhaFRPZiGoDfEpjdMr[0];
3998
+ }
3999
+ return proxy;
4000
+ }
4001
+ [Symbol.for("Deno.customInspect")](inspect, options) {
4002
+ const proxy = this._getCustomInspectProxy();
4003
+ return "DataIntegrityProof " + inspect(proxy, options);
4004
+ }
4005
+ [Symbol.for("nodejs.util.inspect.custom")](_depth, options, inspect) {
4006
+ const proxy = this._getCustomInspectProxy();
4007
+ return "DataIntegrityProof " + inspect(proxy, options);
4008
+ }
4009
+ }
3634
4010
  /** A key owned by an actor.
3635
4011
  */
3636
4012
  export class CryptographicKey {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fedify/fedify",
3
- "version": "0.10.0-dev.196+55cc34d1",
3
+ "version": "0.10.0-dev.197+66147100",
4
4
  "description": "An ActivityPub server framework",
5
5
  "keywords": [
6
6
  "ActivityPub",
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/codegen/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA2P9C,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,MAAM,CAIR;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,WAAW,UAAQ,GAClB,MAAM,CAOR;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,OAAO,CAIT;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,OAAO,CAET;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,WAAW,UAAQ,GAClB,MAAM,EAAE,CAOV;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAIR;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,GACf,MAAM,CAIR;AAED,wBAAiB,WAAW,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,QAAQ,CAAC,MAAM,CAAC,CAUlB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAOR;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,GACf,MAAM,CAYR;AAED,wBAAiB,WAAW,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,QAAQ,CAAC,MAAM,CAAC,CAQlB"}
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../src/codegen/type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAwT9C,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,MAAM,CAIR;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,WAAW,UAAQ,GAClB,MAAM,CAOR;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,OAAO,CAIT;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAChC,OAAO,CAET;AAED,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,WAAW,UAAQ,GAClB,MAAM,EAAE,CAOV;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAIR;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,GACf,MAAM,CAIR;AAED,wBAAiB,WAAW,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,QAAQ,CAAC,MAAM,CAAC,CAUlB;AAED,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,MAAM,CAOR;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,GACf,MAAM,CAYR;AAED,wBAAiB,WAAW,CAC1B,QAAQ,EAAE,MAAM,EAAE,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACjC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GACtB,QAAQ,CAAC,MAAM,CAAC,CAQlB"}
@@ -776,6 +776,104 @@ export declare class PropertyValue {
776
776
  }): Promise<PropertyValue>;
777
777
  protected _getCustomInspectProxy(): Record<string, unknown>;
778
778
  }
779
+ /** A proof that can be added to any activity or object, allowing recipients to
780
+ * verify the identity of the actor and the integrity of the data.
781
+ */
782
+ export declare class DataIntegrityProof {
783
+ #private;
784
+ readonly id: URL | null;
785
+ protected get _documentLoader(): DocumentLoader | undefined;
786
+ protected get _contextLoader(): DocumentLoader | undefined;
787
+ /**
788
+ * The type URI of {@link DataIntegrityProof}: `https://w3id.org/security#DataIntegrityProof`.
789
+ */
790
+ static get typeId(): URL;
791
+ /**
792
+ * Constructs a new instance of DataIntegrityProof with the given values.
793
+ * @param values The values to initialize the instance with.
794
+ * @param options The options to use for initialization.
795
+ */
796
+ constructor(values: {
797
+ id?: URL | null;
798
+ cryptosuite?: "eddsa-jcs-2022" | null;
799
+ verificationMethod?: Multikey | URL | null;
800
+ proofPurpose?: ("assertionMethod" | "authentication" | "capabilityInvocation" | "capabilityDelegation" | "keyAgreement") | null;
801
+ proofValue?: Uint8Array | null;
802
+ created?: dntShim.Temporal.Instant | null;
803
+ }, { documentLoader, contextLoader, }?: {
804
+ documentLoader?: DocumentLoader;
805
+ contextLoader?: DocumentLoader;
806
+ });
807
+ /**
808
+ * Clones this instance, optionally updating it with the given values.
809
+ * @param values The values to update the clone with.
810
+ * @options The options to use for cloning.
811
+ * @returns The cloned instance.
812
+ */
813
+ clone(values?: {
814
+ id?: URL | null;
815
+ cryptosuite?: "eddsa-jcs-2022" | null;
816
+ verificationMethod?: Multikey | URL | null;
817
+ proofPurpose?: ("assertionMethod" | "authentication" | "capabilityInvocation" | "capabilityDelegation" | "keyAgreement") | null;
818
+ proofValue?: Uint8Array | null;
819
+ created?: dntShim.Temporal.Instant | null;
820
+ }, options?: {
821
+ documentLoader?: DocumentLoader;
822
+ contextLoader?: DocumentLoader;
823
+ }): DataIntegrityProof;
824
+ /** The cryptographic suite used to create the proof.
825
+ */
826
+ get cryptosuite(): "eddsa-jcs-2022" | null;
827
+ /**
828
+ * Similar to
829
+ * {@link DataIntegrityProof.getVerificationMethod},
830
+ * but returns its `@id` URL instead of the object itself.
831
+ */
832
+ get verificationMethodId(): URL | null;
833
+ /** A key owned by an actor according to [FEP-521a: Representing actor's public
834
+ * keys][1].
835
+ *
836
+ * [1]: https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md
837
+ */
838
+ getVerificationMethod(options?: {
839
+ documentLoader?: DocumentLoader;
840
+ contextLoader?: DocumentLoader;
841
+ }): Promise<Multikey | null>;
842
+ /** The reason the proof was created.
843
+ *
844
+ * - `"assertionMethod"`
845
+ * - `"authentication"`
846
+ * - `"capabilityInvocation"`
847
+ * - `"capabilityDelegation"`
848
+ * - `"keyAgreement"`
849
+ */
850
+ get proofPurpose(): ("assertionMethod" | "authentication" | "capabilityInvocation" | "capabilityDelegation" | "keyAgreement") | null;
851
+ /** The proof value.
852
+ */
853
+ get proofValue(): Uint8Array | null;
854
+ /** The date and time the proof was created.
855
+ */
856
+ get created(): dntShim.Temporal.Instant | null;
857
+ /**
858
+ * Converts this object to a JSON-LD structure.
859
+ * @returns The JSON-LD representation of this object.
860
+ */
861
+ toJsonLd(options?: {
862
+ expand?: boolean;
863
+ contextLoader?: DocumentLoader;
864
+ }): Promise<unknown>;
865
+ /**
866
+ * Converts a JSON-LD structure to an object of this type.
867
+ * @param json The JSON-LD structure to convert.
868
+ * @returns The object of this type.
869
+ * @throws {TypeError} If the given `json` is invalid.
870
+ */
871
+ static fromJsonLd(json: unknown, options?: {
872
+ documentLoader?: DocumentLoader;
873
+ contextLoader?: DocumentLoader;
874
+ }): Promise<DataIntegrityProof>;
875
+ protected _getCustomInspectProxy(): Record<string, unknown>;
876
+ }
779
877
  /** A key owned by an actor.
780
878
  */
781
879
  export declare class CryptographicKey {