@fedify/fedify 1.1.0-dev.446 → 1.1.0-dev.447

Sign up to get free protection for your applications and to get access to all the features.
@@ -10390,6 +10390,7 @@ export class Application extends Object {
10390
10390
  #_2kGKkJtoFWg8c18PaVSqj9NKP4t7_suspended = [];
10391
10391
  #_79S8K4f5J9MWUgCxziRyUe6PTHZ_memorial = [];
10392
10392
  #_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable = [];
10393
+ #_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
10393
10394
  #_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
10394
10395
  #_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service = [];
10395
10396
  #_2xEU4QtkC53RAun67T81Egqt9vmL_isCat = [];
@@ -10637,6 +10638,20 @@ export class Application extends Object {
10637
10638
  "boolean" + ".");
10638
10639
  }
10639
10640
  }
10641
+ if ("successor" in values && values.successor != null) {
10642
+ if (values.successor instanceof _b ||
10643
+ values.successor instanceof Group ||
10644
+ values.successor instanceof Organization ||
10645
+ values.successor instanceof Person ||
10646
+ values.successor instanceof Service || values.successor instanceof URL) {
10647
+ // @ts-ignore: type is checked above.
10648
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
10649
+ }
10650
+ else {
10651
+ throw new TypeError("The successor must be of type " +
10652
+ "Application | Group | Organization | Person | Service | URL" + ".");
10653
+ }
10654
+ }
10640
10655
  if ("alias" in values && values.alias != null) {
10641
10656
  if (values.alias instanceof _b || values.alias instanceof Group ||
10642
10657
  values.alias instanceof Organization ||
@@ -10986,6 +11001,22 @@ export class Application extends Object {
10986
11001
  "boolean" + ".");
10987
11002
  }
10988
11003
  }
11004
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
11005
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
11006
+ if ("successor" in values && values.successor != null) {
11007
+ if (values.successor instanceof _b ||
11008
+ values.successor instanceof Group ||
11009
+ values.successor instanceof Organization ||
11010
+ values.successor instanceof Person ||
11011
+ values.successor instanceof Service || values.successor instanceof URL) {
11012
+ // @ts-ignore: type is checked above.
11013
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
11014
+ }
11015
+ else {
11016
+ throw new TypeError("The successor must be of type " +
11017
+ "Application | Group | Organization | Person | Service | URL" + ".");
11018
+ }
11019
+ }
10989
11020
  clone.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs =
10990
11021
  this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs;
10991
11022
  if ("alias" in values && values.alias != null) {
@@ -11780,6 +11811,95 @@ export class Application extends Object {
11780
11811
  return null;
11781
11812
  return this.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
11782
11813
  }
11814
+ async #fetchSuccessor(url, options = {}) {
11815
+ const documentLoader = options.documentLoader ?? this._documentLoader ??
11816
+ fetchDocumentLoader;
11817
+ const contextLoader = options.contextLoader ?? this._contextLoader ??
11818
+ fetchDocumentLoader;
11819
+ let fetchResult;
11820
+ try {
11821
+ fetchResult = await documentLoader(url.href);
11822
+ }
11823
+ catch (error) {
11824
+ if (options.suppressError) {
11825
+ getLogger(["fedify", "vocab"]).error("Failed to fetch {url}: {error}", { error, url: url.href });
11826
+ return null;
11827
+ }
11828
+ throw error;
11829
+ }
11830
+ const { document } = fetchResult;
11831
+ try {
11832
+ return await _b.fromJsonLd(document, { documentLoader, contextLoader });
11833
+ }
11834
+ catch (e) {
11835
+ if (!(e instanceof TypeError))
11836
+ throw e;
11837
+ }
11838
+ try {
11839
+ return await Group.fromJsonLd(document, { documentLoader, contextLoader });
11840
+ }
11841
+ catch (e) {
11842
+ if (!(e instanceof TypeError))
11843
+ throw e;
11844
+ }
11845
+ try {
11846
+ return await Organization.fromJsonLd(document, { documentLoader, contextLoader });
11847
+ }
11848
+ catch (e) {
11849
+ if (!(e instanceof TypeError))
11850
+ throw e;
11851
+ }
11852
+ try {
11853
+ return await Person.fromJsonLd(document, { documentLoader, contextLoader });
11854
+ }
11855
+ catch (e) {
11856
+ if (!(e instanceof TypeError))
11857
+ throw e;
11858
+ }
11859
+ try {
11860
+ return await Service.fromJsonLd(document, { documentLoader, contextLoader });
11861
+ }
11862
+ catch (e) {
11863
+ if (!(e instanceof TypeError))
11864
+ throw e;
11865
+ }
11866
+ throw new TypeError("Expected an object of any type of: " +
11867
+ [
11868
+ "https://www.w3.org/ns/activitystreams#Application",
11869
+ "https://www.w3.org/ns/activitystreams#Group",
11870
+ "https://www.w3.org/ns/activitystreams#Organization",
11871
+ "https://www.w3.org/ns/activitystreams#Person",
11872
+ "https://www.w3.org/ns/activitystreams#Service",
11873
+ ].join(", "));
11874
+ }
11875
+ /**
11876
+ * Similar to
11877
+ * {@link Application.getSuccessor},
11878
+ * but returns its `@id` URL instead of the object itself.
11879
+ */
11880
+ get successorId() {
11881
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
11882
+ return null;
11883
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
11884
+ if (v instanceof URL)
11885
+ return v;
11886
+ return v.id;
11887
+ }
11888
+ /** Signifies that an actor has been moved to a different ID. Used in Mastodon-style data portability with the {@link Move} activity; see [ActivityPub Data Portability/Move Action](https://swicg.github.io/activitypub-data-portability/#move-action) for more details.
11889
+ */
11890
+ async getSuccessor(options = {}) {
11891
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
11892
+ return null;
11893
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
11894
+ if (v instanceof URL) {
11895
+ const fetched = await this.#fetchSuccessor(v, options);
11896
+ if (fetched == null)
11897
+ return null;
11898
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0] = fetched;
11899
+ return fetched;
11900
+ }
11901
+ return v;
11902
+ }
11783
11903
  async #fetchAlias(url, options = {}) {
11784
11904
  const documentLoader = options.documentLoader ?? this._documentLoader ??
11785
11905
  fetchDocumentLoader;
@@ -12244,6 +12364,46 @@ export class Application extends Object {
12244
12364
  : compactItems[0];
12245
12365
  }
12246
12366
  compactItems = [];
12367
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
12368
+ const item = v instanceof URL
12369
+ ? v.href
12370
+ : v instanceof _b
12371
+ ? await v.toJsonLd({
12372
+ ...options,
12373
+ format: undefined,
12374
+ context: undefined,
12375
+ })
12376
+ : v instanceof Group
12377
+ ? await v.toJsonLd({
12378
+ ...options,
12379
+ format: undefined,
12380
+ context: undefined,
12381
+ })
12382
+ : v instanceof Organization
12383
+ ? await v.toJsonLd({
12384
+ ...options,
12385
+ format: undefined,
12386
+ context: undefined,
12387
+ })
12388
+ : v instanceof Person
12389
+ ? await v.toJsonLd({
12390
+ ...options,
12391
+ format: undefined,
12392
+ context: undefined,
12393
+ })
12394
+ : await v.toJsonLd({
12395
+ ...options,
12396
+ format: undefined,
12397
+ context: undefined,
12398
+ });
12399
+ compactItems.push(item);
12400
+ }
12401
+ if (compactItems.length > 0) {
12402
+ result["movedTo"] = compactItems.length > 1
12403
+ ? compactItems
12404
+ : compactItems[0];
12405
+ }
12406
+ compactItems = [];
12247
12407
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
12248
12408
  const item = v instanceof URL
12249
12409
  ? v.href
@@ -12319,6 +12479,7 @@ export class Application extends Object {
12319
12479
  {
12320
12480
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
12321
12481
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
12482
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
12322
12483
  "toot": "http://joinmastodon.org/ns#",
12323
12484
  "featured": { "@id": "toot:featured", "@type": "@id" },
12324
12485
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -12521,6 +12682,25 @@ export class Application extends Object {
12521
12682
  values["http://joinmastodon.org/ns#indexable"] = propValue;
12522
12683
  }
12523
12684
  array = [];
12685
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
12686
+ const element = v instanceof URL
12687
+ ? { "@id": v.href }
12688
+ : v instanceof _b
12689
+ ? await v.toJsonLd(options)
12690
+ : v instanceof Group
12691
+ ? await v.toJsonLd(options)
12692
+ : v instanceof Organization
12693
+ ? await v.toJsonLd(options)
12694
+ : v instanceof Person
12695
+ ? await v.toJsonLd(options)
12696
+ : await v.toJsonLd(options);
12697
+ array.push(element);
12698
+ }
12699
+ if (array.length > 0) {
12700
+ const propValue = array;
12701
+ values["https://www.w3.org/ns/activitystreams#movedTo"] = propValue;
12702
+ }
12703
+ array = [];
12524
12704
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
12525
12705
  const element = v instanceof URL
12526
12706
  ? { "@id": v.href }
@@ -12575,6 +12755,7 @@ export class Application extends Object {
12575
12755
  {
12576
12756
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
12577
12757
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
12758
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
12578
12759
  "toot": "http://joinmastodon.org/ns#",
12579
12760
  "featured": { "@id": "toot:featured", "@type": "@id" },
12580
12761
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -12981,6 +13162,50 @@ export class Application extends Object {
12981
13162
  }
12982
13163
  instance.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable =
12983
13164
  _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable;
13165
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
13166
+ let _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array = values["https://www.w3.org/ns/activitystreams#movedTo"];
13167
+ for (const v of _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array == null
13168
+ ? []
13169
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array.length === 1 &&
13170
+ "@list" in _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]
13171
+ ? _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]["@list"]
13172
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array) {
13173
+ if (v == null)
13174
+ continue;
13175
+ if (typeof v === "object" && "@id" in v && !("@type" in v) &&
13176
+ globalThis.Object.keys(v).length === 1) {
13177
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(!URL.canParse(v["@id"]) && v["@id"].startsWith("at://")
13178
+ ? new URL("at://" + encodeURIComponent(v["@id"].substring(5)))
13179
+ : new URL(v["@id"]));
13180
+ continue;
13181
+ }
13182
+ const decoded = typeof v === "object" && "@type" in v &&
13183
+ Array.isArray(v["@type"]) &&
13184
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Application")
13185
+ ? await _b.fromJsonLd(v, options)
13186
+ : typeof v === "object" && "@type" in v &&
13187
+ Array.isArray(v["@type"]) &&
13188
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Group")
13189
+ ? await Group.fromJsonLd(v, options)
13190
+ : typeof v === "object" && "@type" in v &&
13191
+ Array.isArray(v["@type"]) &&
13192
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Organization")
13193
+ ? await Organization.fromJsonLd(v, options)
13194
+ : typeof v === "object" && "@type" in v &&
13195
+ Array.isArray(v["@type"]) &&
13196
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Person")
13197
+ ? await Person.fromJsonLd(v, options)
13198
+ : typeof v === "object" && "@type" in v &&
13199
+ Array.isArray(v["@type"]) &&
13200
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Service")
13201
+ ? await Service.fromJsonLd(v, options)
13202
+ : undefined;
13203
+ if (typeof decoded === "undefined")
13204
+ continue;
13205
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(decoded);
13206
+ }
13207
+ instance.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
13208
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
12984
13209
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
12985
13210
  let _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array = values["https://www.w3.org/ns/activitystreams#alsoKnownAs"];
12986
13211
  for (const v of _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array == null
@@ -13296,6 +13521,18 @@ export class Application extends Object {
13296
13521
  if (_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable.length == 1) {
13297
13522
  proxy.indexable = _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
13298
13523
  }
13524
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = this
13525
+ .#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo
13526
+ // deno-lint-ignore no-explicit-any
13527
+ .map((v) => v instanceof URL
13528
+ ? {
13529
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
13530
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
13531
+ }
13532
+ : v);
13533
+ if (_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length == 1) {
13534
+ proxy.successor = _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
13535
+ }
13299
13536
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = this
13300
13537
  .#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs
13301
13538
  // deno-lint-ignore no-explicit-any
@@ -18057,6 +18294,7 @@ export class Group extends Object {
18057
18294
  #_2kGKkJtoFWg8c18PaVSqj9NKP4t7_suspended = [];
18058
18295
  #_79S8K4f5J9MWUgCxziRyUe6PTHZ_memorial = [];
18059
18296
  #_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable = [];
18297
+ #_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
18060
18298
  #_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
18061
18299
  #_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service = [];
18062
18300
  #_2xEU4QtkC53RAun67T81Egqt9vmL_isCat = [];
@@ -18304,6 +18542,20 @@ export class Group extends Object {
18304
18542
  "boolean" + ".");
18305
18543
  }
18306
18544
  }
18545
+ if ("successor" in values && values.successor != null) {
18546
+ if (values.successor instanceof Application ||
18547
+ values.successor instanceof _d ||
18548
+ values.successor instanceof Organization ||
18549
+ values.successor instanceof Person ||
18550
+ values.successor instanceof Service || values.successor instanceof URL) {
18551
+ // @ts-ignore: type is checked above.
18552
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
18553
+ }
18554
+ else {
18555
+ throw new TypeError("The successor must be of type " +
18556
+ "Application | Group | Organization | Person | Service | URL" + ".");
18557
+ }
18558
+ }
18307
18559
  if ("alias" in values && values.alias != null) {
18308
18560
  if (values.alias instanceof Application || values.alias instanceof _d ||
18309
18561
  values.alias instanceof Organization ||
@@ -18653,6 +18905,22 @@ export class Group extends Object {
18653
18905
  "boolean" + ".");
18654
18906
  }
18655
18907
  }
18908
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
18909
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
18910
+ if ("successor" in values && values.successor != null) {
18911
+ if (values.successor instanceof Application ||
18912
+ values.successor instanceof _d ||
18913
+ values.successor instanceof Organization ||
18914
+ values.successor instanceof Person ||
18915
+ values.successor instanceof Service || values.successor instanceof URL) {
18916
+ // @ts-ignore: type is checked above.
18917
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
18918
+ }
18919
+ else {
18920
+ throw new TypeError("The successor must be of type " +
18921
+ "Application | Group | Organization | Person | Service | URL" + ".");
18922
+ }
18923
+ }
18656
18924
  clone.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs =
18657
18925
  this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs;
18658
18926
  if ("alias" in values && values.alias != null) {
@@ -19447,7 +19715,7 @@ export class Group extends Object {
19447
19715
  return null;
19448
19716
  return this.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
19449
19717
  }
19450
- async #fetchAlias(url, options = {}) {
19718
+ async #fetchSuccessor(url, options = {}) {
19451
19719
  const documentLoader = options.documentLoader ?? this._documentLoader ??
19452
19720
  fetchDocumentLoader;
19453
19721
  const contextLoader = options.contextLoader ?? this._contextLoader ??
@@ -19510,64 +19778,33 @@ export class Group extends Object {
19510
19778
  }
19511
19779
  /**
19512
19780
  * Similar to
19513
- * {@link Group.getAlias},
19781
+ * {@link Group.getSuccessor},
19514
19782
  * but returns its `@id` URL instead of the object itself.
19515
19783
  */
19516
- get aliasId() {
19517
- if (this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.length < 1)
19784
+ get successorId() {
19785
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
19518
19786
  return null;
19519
- const v = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0];
19787
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
19520
19788
  if (v instanceof URL)
19521
19789
  return v;
19522
19790
  return v.id;
19523
19791
  }
19524
- /** The `aliases` (`alsoKnownAs`) property is used to specify alternative names
19525
- * or aliases for an entity. It can be used to provide additional identifiers
19526
- * or labels for an entity, which can be useful in scenarios where an entity
19527
- * may have multiple names or aliases.
19792
+ /** Signifies that an actor has been moved to a different ID. Used in Mastodon-style data portability with the {@link Move} activity; see [ActivityPub Data Portability/Move Action](https://swicg.github.io/activitypub-data-portability/#move-action) for more details.
19528
19793
  */
19529
- async getAlias(options = {}) {
19530
- if (this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.length < 1)
19794
+ async getSuccessor(options = {}) {
19795
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
19531
19796
  return null;
19532
- const v = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0];
19797
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
19533
19798
  if (v instanceof URL) {
19534
- const fetched = await this.#fetchAlias(v, options);
19799
+ const fetched = await this.#fetchSuccessor(v, options);
19535
19800
  if (fetched == null)
19536
19801
  return null;
19537
- this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0] = fetched;
19802
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0] = fetched;
19538
19803
  return fetched;
19539
19804
  }
19540
19805
  return v;
19541
19806
  }
19542
- /**
19543
- * Similar to
19544
- * {@link Group.getAliases},
19545
- * but returns their `@id`s instead of the objects themselves.
19546
- */
19547
- get aliasIds() {
19548
- return this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.map((v) => v instanceof URL ? v : v.id).filter((id) => id !== null);
19549
- }
19550
- /** The `aliases` (`alsoKnownAs`) property is used to specify alternative names
19551
- * or aliases for an entity. It can be used to provide additional identifiers
19552
- * or labels for an entity, which can be useful in scenarios where an entity
19553
- * may have multiple names or aliases.
19554
- */
19555
- async *getAliases(options = {}) {
19556
- const vs = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs;
19557
- for (let i = 0; i < vs.length; i++) {
19558
- const v = vs[i];
19559
- if (v instanceof URL) {
19560
- const fetched = await this.#fetchAlias(v, options);
19561
- if (fetched == null)
19562
- continue;
19563
- vs[i] = fetched;
19564
- yield fetched;
19565
- continue;
19566
- }
19567
- yield v;
19568
- }
19569
- }
19570
- async #fetchService(url, options = {}) {
19807
+ async #fetchAlias(url, options = {}) {
19571
19808
  const documentLoader = options.documentLoader ?? this._documentLoader ??
19572
19809
  fetchDocumentLoader;
19573
19810
  const contextLoader = options.contextLoader ?? this._contextLoader ??
@@ -19585,24 +19822,144 @@ export class Group extends Object {
19585
19822
  }
19586
19823
  const { document } = fetchResult;
19587
19824
  try {
19588
- return await DidService.fromJsonLd(document, { documentLoader, contextLoader });
19825
+ return await Application.fromJsonLd(document, { documentLoader, contextLoader });
19589
19826
  }
19590
19827
  catch (e) {
19591
19828
  if (!(e instanceof TypeError))
19592
19829
  throw e;
19593
19830
  }
19594
- throw new TypeError("Expected an object of any type of: " +
19595
- ["https://www.w3.org/ns/did#Service"].join(", "));
19596
- }
19597
- /**
19598
- * Similar to
19599
- * {@link Group.getService},
19600
- * but returns its `@id` URL instead of the object itself.
19601
- */
19602
- get serviceId() {
19603
- if (this.#_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service.length < 1)
19604
- return null;
19605
- const v = this.#_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service[0];
19831
+ try {
19832
+ return await _d.fromJsonLd(document, { documentLoader, contextLoader });
19833
+ }
19834
+ catch (e) {
19835
+ if (!(e instanceof TypeError))
19836
+ throw e;
19837
+ }
19838
+ try {
19839
+ return await Organization.fromJsonLd(document, { documentLoader, contextLoader });
19840
+ }
19841
+ catch (e) {
19842
+ if (!(e instanceof TypeError))
19843
+ throw e;
19844
+ }
19845
+ try {
19846
+ return await Person.fromJsonLd(document, { documentLoader, contextLoader });
19847
+ }
19848
+ catch (e) {
19849
+ if (!(e instanceof TypeError))
19850
+ throw e;
19851
+ }
19852
+ try {
19853
+ return await Service.fromJsonLd(document, { documentLoader, contextLoader });
19854
+ }
19855
+ catch (e) {
19856
+ if (!(e instanceof TypeError))
19857
+ throw e;
19858
+ }
19859
+ throw new TypeError("Expected an object of any type of: " +
19860
+ [
19861
+ "https://www.w3.org/ns/activitystreams#Application",
19862
+ "https://www.w3.org/ns/activitystreams#Group",
19863
+ "https://www.w3.org/ns/activitystreams#Organization",
19864
+ "https://www.w3.org/ns/activitystreams#Person",
19865
+ "https://www.w3.org/ns/activitystreams#Service",
19866
+ ].join(", "));
19867
+ }
19868
+ /**
19869
+ * Similar to
19870
+ * {@link Group.getAlias},
19871
+ * but returns its `@id` URL instead of the object itself.
19872
+ */
19873
+ get aliasId() {
19874
+ if (this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.length < 1)
19875
+ return null;
19876
+ const v = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0];
19877
+ if (v instanceof URL)
19878
+ return v;
19879
+ return v.id;
19880
+ }
19881
+ /** The `aliases` (`alsoKnownAs`) property is used to specify alternative names
19882
+ * or aliases for an entity. It can be used to provide additional identifiers
19883
+ * or labels for an entity, which can be useful in scenarios where an entity
19884
+ * may have multiple names or aliases.
19885
+ */
19886
+ async getAlias(options = {}) {
19887
+ if (this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.length < 1)
19888
+ return null;
19889
+ const v = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0];
19890
+ if (v instanceof URL) {
19891
+ const fetched = await this.#fetchAlias(v, options);
19892
+ if (fetched == null)
19893
+ return null;
19894
+ this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0] = fetched;
19895
+ return fetched;
19896
+ }
19897
+ return v;
19898
+ }
19899
+ /**
19900
+ * Similar to
19901
+ * {@link Group.getAliases},
19902
+ * but returns their `@id`s instead of the objects themselves.
19903
+ */
19904
+ get aliasIds() {
19905
+ return this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.map((v) => v instanceof URL ? v : v.id).filter((id) => id !== null);
19906
+ }
19907
+ /** The `aliases` (`alsoKnownAs`) property is used to specify alternative names
19908
+ * or aliases for an entity. It can be used to provide additional identifiers
19909
+ * or labels for an entity, which can be useful in scenarios where an entity
19910
+ * may have multiple names or aliases.
19911
+ */
19912
+ async *getAliases(options = {}) {
19913
+ const vs = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs;
19914
+ for (let i = 0; i < vs.length; i++) {
19915
+ const v = vs[i];
19916
+ if (v instanceof URL) {
19917
+ const fetched = await this.#fetchAlias(v, options);
19918
+ if (fetched == null)
19919
+ continue;
19920
+ vs[i] = fetched;
19921
+ yield fetched;
19922
+ continue;
19923
+ }
19924
+ yield v;
19925
+ }
19926
+ }
19927
+ async #fetchService(url, options = {}) {
19928
+ const documentLoader = options.documentLoader ?? this._documentLoader ??
19929
+ fetchDocumentLoader;
19930
+ const contextLoader = options.contextLoader ?? this._contextLoader ??
19931
+ fetchDocumentLoader;
19932
+ let fetchResult;
19933
+ try {
19934
+ fetchResult = await documentLoader(url.href);
19935
+ }
19936
+ catch (error) {
19937
+ if (options.suppressError) {
19938
+ getLogger(["fedify", "vocab"]).error("Failed to fetch {url}: {error}", { error, url: url.href });
19939
+ return null;
19940
+ }
19941
+ throw error;
19942
+ }
19943
+ const { document } = fetchResult;
19944
+ try {
19945
+ return await DidService.fromJsonLd(document, { documentLoader, contextLoader });
19946
+ }
19947
+ catch (e) {
19948
+ if (!(e instanceof TypeError))
19949
+ throw e;
19950
+ }
19951
+ throw new TypeError("Expected an object of any type of: " +
19952
+ ["https://www.w3.org/ns/did#Service"].join(", "));
19953
+ }
19954
+ /**
19955
+ * Similar to
19956
+ * {@link Group.getService},
19957
+ * but returns its `@id` URL instead of the object itself.
19958
+ */
19959
+ get serviceId() {
19960
+ if (this.#_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service.length < 1)
19961
+ return null;
19962
+ const v = this.#_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service[0];
19606
19963
  if (v instanceof URL)
19607
19964
  return v;
19608
19965
  return v.id;
@@ -19911,6 +20268,46 @@ export class Group extends Object {
19911
20268
  : compactItems[0];
19912
20269
  }
19913
20270
  compactItems = [];
20271
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
20272
+ const item = v instanceof URL
20273
+ ? v.href
20274
+ : v instanceof Application
20275
+ ? await v.toJsonLd({
20276
+ ...options,
20277
+ format: undefined,
20278
+ context: undefined,
20279
+ })
20280
+ : v instanceof _d
20281
+ ? await v.toJsonLd({
20282
+ ...options,
20283
+ format: undefined,
20284
+ context: undefined,
20285
+ })
20286
+ : v instanceof Organization
20287
+ ? await v.toJsonLd({
20288
+ ...options,
20289
+ format: undefined,
20290
+ context: undefined,
20291
+ })
20292
+ : v instanceof Person
20293
+ ? await v.toJsonLd({
20294
+ ...options,
20295
+ format: undefined,
20296
+ context: undefined,
20297
+ })
20298
+ : await v.toJsonLd({
20299
+ ...options,
20300
+ format: undefined,
20301
+ context: undefined,
20302
+ });
20303
+ compactItems.push(item);
20304
+ }
20305
+ if (compactItems.length > 0) {
20306
+ result["movedTo"] = compactItems.length > 1
20307
+ ? compactItems
20308
+ : compactItems[0];
20309
+ }
20310
+ compactItems = [];
19914
20311
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
19915
20312
  const item = v instanceof URL
19916
20313
  ? v.href
@@ -19986,6 +20383,7 @@ export class Group extends Object {
19986
20383
  {
19987
20384
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
19988
20385
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
20386
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
19989
20387
  "toot": "http://joinmastodon.org/ns#",
19990
20388
  "featured": { "@id": "toot:featured", "@type": "@id" },
19991
20389
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -20188,6 +20586,25 @@ export class Group extends Object {
20188
20586
  values["http://joinmastodon.org/ns#indexable"] = propValue;
20189
20587
  }
20190
20588
  array = [];
20589
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
20590
+ const element = v instanceof URL
20591
+ ? { "@id": v.href }
20592
+ : v instanceof Application
20593
+ ? await v.toJsonLd(options)
20594
+ : v instanceof _d
20595
+ ? await v.toJsonLd(options)
20596
+ : v instanceof Organization
20597
+ ? await v.toJsonLd(options)
20598
+ : v instanceof Person
20599
+ ? await v.toJsonLd(options)
20600
+ : await v.toJsonLd(options);
20601
+ array.push(element);
20602
+ }
20603
+ if (array.length > 0) {
20604
+ const propValue = array;
20605
+ values["https://www.w3.org/ns/activitystreams#movedTo"] = propValue;
20606
+ }
20607
+ array = [];
20191
20608
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
20192
20609
  const element = v instanceof URL
20193
20610
  ? { "@id": v.href }
@@ -20242,6 +20659,7 @@ export class Group extends Object {
20242
20659
  {
20243
20660
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
20244
20661
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
20662
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
20245
20663
  "toot": "http://joinmastodon.org/ns#",
20246
20664
  "featured": { "@id": "toot:featured", "@type": "@id" },
20247
20665
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -20648,6 +21066,50 @@ export class Group extends Object {
20648
21066
  }
20649
21067
  instance.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable =
20650
21068
  _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable;
21069
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
21070
+ let _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array = values["https://www.w3.org/ns/activitystreams#movedTo"];
21071
+ for (const v of _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array == null
21072
+ ? []
21073
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array.length === 1 &&
21074
+ "@list" in _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]
21075
+ ? _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]["@list"]
21076
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array) {
21077
+ if (v == null)
21078
+ continue;
21079
+ if (typeof v === "object" && "@id" in v && !("@type" in v) &&
21080
+ globalThis.Object.keys(v).length === 1) {
21081
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(!URL.canParse(v["@id"]) && v["@id"].startsWith("at://")
21082
+ ? new URL("at://" + encodeURIComponent(v["@id"].substring(5)))
21083
+ : new URL(v["@id"]));
21084
+ continue;
21085
+ }
21086
+ const decoded = typeof v === "object" && "@type" in v &&
21087
+ Array.isArray(v["@type"]) &&
21088
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Application")
21089
+ ? await Application.fromJsonLd(v, options)
21090
+ : typeof v === "object" && "@type" in v &&
21091
+ Array.isArray(v["@type"]) &&
21092
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Group")
21093
+ ? await _d.fromJsonLd(v, options)
21094
+ : typeof v === "object" && "@type" in v &&
21095
+ Array.isArray(v["@type"]) &&
21096
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Organization")
21097
+ ? await Organization.fromJsonLd(v, options)
21098
+ : typeof v === "object" && "@type" in v &&
21099
+ Array.isArray(v["@type"]) &&
21100
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Person")
21101
+ ? await Person.fromJsonLd(v, options)
21102
+ : typeof v === "object" && "@type" in v &&
21103
+ Array.isArray(v["@type"]) &&
21104
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Service")
21105
+ ? await Service.fromJsonLd(v, options)
21106
+ : undefined;
21107
+ if (typeof decoded === "undefined")
21108
+ continue;
21109
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(decoded);
21110
+ }
21111
+ instance.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
21112
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
20651
21113
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
20652
21114
  let _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array = values["https://www.w3.org/ns/activitystreams#alsoKnownAs"];
20653
21115
  for (const v of _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array == null
@@ -20963,6 +21425,18 @@ export class Group extends Object {
20963
21425
  if (_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable.length == 1) {
20964
21426
  proxy.indexable = _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
20965
21427
  }
21428
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = this
21429
+ .#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo
21430
+ // deno-lint-ignore no-explicit-any
21431
+ .map((v) => v instanceof URL
21432
+ ? {
21433
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
21434
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
21435
+ }
21436
+ : v);
21437
+ if (_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length == 1) {
21438
+ proxy.successor = _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
21439
+ }
20966
21440
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = this
20967
21441
  .#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs
20968
21442
  // deno-lint-ignore no-explicit-any
@@ -24942,6 +25416,7 @@ export class Organization extends Object {
24942
25416
  #_2kGKkJtoFWg8c18PaVSqj9NKP4t7_suspended = [];
24943
25417
  #_79S8K4f5J9MWUgCxziRyUe6PTHZ_memorial = [];
24944
25418
  #_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable = [];
25419
+ #_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
24945
25420
  #_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
24946
25421
  #_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service = [];
24947
25422
  #_2xEU4QtkC53RAun67T81Egqt9vmL_isCat = [];
@@ -25189,6 +25664,20 @@ export class Organization extends Object {
25189
25664
  "boolean" + ".");
25190
25665
  }
25191
25666
  }
25667
+ if ("successor" in values && values.successor != null) {
25668
+ if (values.successor instanceof Application ||
25669
+ values.successor instanceof Group ||
25670
+ values.successor instanceof _f ||
25671
+ values.successor instanceof Person ||
25672
+ values.successor instanceof Service || values.successor instanceof URL) {
25673
+ // @ts-ignore: type is checked above.
25674
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
25675
+ }
25676
+ else {
25677
+ throw new TypeError("The successor must be of type " +
25678
+ "Application | Group | Organization | Person | Service | URL" + ".");
25679
+ }
25680
+ }
25192
25681
  if ("alias" in values && values.alias != null) {
25193
25682
  if (values.alias instanceof Application || values.alias instanceof Group ||
25194
25683
  values.alias instanceof _f ||
@@ -25538,6 +26027,22 @@ export class Organization extends Object {
25538
26027
  "boolean" + ".");
25539
26028
  }
25540
26029
  }
26030
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
26031
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
26032
+ if ("successor" in values && values.successor != null) {
26033
+ if (values.successor instanceof Application ||
26034
+ values.successor instanceof Group ||
26035
+ values.successor instanceof _f ||
26036
+ values.successor instanceof Person ||
26037
+ values.successor instanceof Service || values.successor instanceof URL) {
26038
+ // @ts-ignore: type is checked above.
26039
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
26040
+ }
26041
+ else {
26042
+ throw new TypeError("The successor must be of type " +
26043
+ "Application | Group | Organization | Person | Service | URL" + ".");
26044
+ }
26045
+ }
25541
26046
  clone.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs =
25542
26047
  this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs;
25543
26048
  if ("alias" in values && values.alias != null) {
@@ -26332,7 +26837,7 @@ export class Organization extends Object {
26332
26837
  return null;
26333
26838
  return this.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
26334
26839
  }
26335
- async #fetchAlias(url, options = {}) {
26840
+ async #fetchSuccessor(url, options = {}) {
26336
26841
  const documentLoader = options.documentLoader ?? this._documentLoader ??
26337
26842
  fetchDocumentLoader;
26338
26843
  const contextLoader = options.contextLoader ?? this._contextLoader ??
@@ -26395,37 +26900,126 @@ export class Organization extends Object {
26395
26900
  }
26396
26901
  /**
26397
26902
  * Similar to
26398
- * {@link Organization.getAlias},
26903
+ * {@link Organization.getSuccessor},
26399
26904
  * but returns its `@id` URL instead of the object itself.
26400
26905
  */
26401
- get aliasId() {
26402
- if (this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.length < 1)
26906
+ get successorId() {
26907
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
26403
26908
  return null;
26404
- const v = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0];
26909
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
26405
26910
  if (v instanceof URL)
26406
26911
  return v;
26407
26912
  return v.id;
26408
26913
  }
26409
- /** The `aliases` (`alsoKnownAs`) property is used to specify alternative names
26410
- * or aliases for an entity. It can be used to provide additional identifiers
26411
- * or labels for an entity, which can be useful in scenarios where an entity
26412
- * may have multiple names or aliases.
26914
+ /** Signifies that an actor has been moved to a different ID. Used in Mastodon-style data portability with the {@link Move} activity; see [ActivityPub Data Portability/Move Action](https://swicg.github.io/activitypub-data-portability/#move-action) for more details.
26413
26915
  */
26414
- async getAlias(options = {}) {
26415
- if (this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.length < 1)
26916
+ async getSuccessor(options = {}) {
26917
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
26416
26918
  return null;
26417
- const v = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0];
26919
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
26418
26920
  if (v instanceof URL) {
26419
- const fetched = await this.#fetchAlias(v, options);
26921
+ const fetched = await this.#fetchSuccessor(v, options);
26420
26922
  if (fetched == null)
26421
26923
  return null;
26422
- this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0] = fetched;
26924
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0] = fetched;
26423
26925
  return fetched;
26424
26926
  }
26425
26927
  return v;
26426
26928
  }
26427
- /**
26428
- * Similar to
26929
+ async #fetchAlias(url, options = {}) {
26930
+ const documentLoader = options.documentLoader ?? this._documentLoader ??
26931
+ fetchDocumentLoader;
26932
+ const contextLoader = options.contextLoader ?? this._contextLoader ??
26933
+ fetchDocumentLoader;
26934
+ let fetchResult;
26935
+ try {
26936
+ fetchResult = await documentLoader(url.href);
26937
+ }
26938
+ catch (error) {
26939
+ if (options.suppressError) {
26940
+ getLogger(["fedify", "vocab"]).error("Failed to fetch {url}: {error}", { error, url: url.href });
26941
+ return null;
26942
+ }
26943
+ throw error;
26944
+ }
26945
+ const { document } = fetchResult;
26946
+ try {
26947
+ return await Application.fromJsonLd(document, { documentLoader, contextLoader });
26948
+ }
26949
+ catch (e) {
26950
+ if (!(e instanceof TypeError))
26951
+ throw e;
26952
+ }
26953
+ try {
26954
+ return await Group.fromJsonLd(document, { documentLoader, contextLoader });
26955
+ }
26956
+ catch (e) {
26957
+ if (!(e instanceof TypeError))
26958
+ throw e;
26959
+ }
26960
+ try {
26961
+ return await _f.fromJsonLd(document, { documentLoader, contextLoader });
26962
+ }
26963
+ catch (e) {
26964
+ if (!(e instanceof TypeError))
26965
+ throw e;
26966
+ }
26967
+ try {
26968
+ return await Person.fromJsonLd(document, { documentLoader, contextLoader });
26969
+ }
26970
+ catch (e) {
26971
+ if (!(e instanceof TypeError))
26972
+ throw e;
26973
+ }
26974
+ try {
26975
+ return await Service.fromJsonLd(document, { documentLoader, contextLoader });
26976
+ }
26977
+ catch (e) {
26978
+ if (!(e instanceof TypeError))
26979
+ throw e;
26980
+ }
26981
+ throw new TypeError("Expected an object of any type of: " +
26982
+ [
26983
+ "https://www.w3.org/ns/activitystreams#Application",
26984
+ "https://www.w3.org/ns/activitystreams#Group",
26985
+ "https://www.w3.org/ns/activitystreams#Organization",
26986
+ "https://www.w3.org/ns/activitystreams#Person",
26987
+ "https://www.w3.org/ns/activitystreams#Service",
26988
+ ].join(", "));
26989
+ }
26990
+ /**
26991
+ * Similar to
26992
+ * {@link Organization.getAlias},
26993
+ * but returns its `@id` URL instead of the object itself.
26994
+ */
26995
+ get aliasId() {
26996
+ if (this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.length < 1)
26997
+ return null;
26998
+ const v = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0];
26999
+ if (v instanceof URL)
27000
+ return v;
27001
+ return v.id;
27002
+ }
27003
+ /** The `aliases` (`alsoKnownAs`) property is used to specify alternative names
27004
+ * or aliases for an entity. It can be used to provide additional identifiers
27005
+ * or labels for an entity, which can be useful in scenarios where an entity
27006
+ * may have multiple names or aliases.
27007
+ */
27008
+ async getAlias(options = {}) {
27009
+ if (this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs.length < 1)
27010
+ return null;
27011
+ const v = this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0];
27012
+ if (v instanceof URL) {
27013
+ const fetched = await this.#fetchAlias(v, options);
27014
+ if (fetched == null)
27015
+ return null;
27016
+ this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs[0] = fetched;
27017
+ return fetched;
27018
+ }
27019
+ return v;
27020
+ }
27021
+ /**
27022
+ * Similar to
26429
27023
  * {@link Organization.getAliases},
26430
27024
  * but returns their `@id`s instead of the objects themselves.
26431
27025
  */
@@ -26796,6 +27390,46 @@ export class Organization extends Object {
26796
27390
  : compactItems[0];
26797
27391
  }
26798
27392
  compactItems = [];
27393
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
27394
+ const item = v instanceof URL
27395
+ ? v.href
27396
+ : v instanceof Application
27397
+ ? await v.toJsonLd({
27398
+ ...options,
27399
+ format: undefined,
27400
+ context: undefined,
27401
+ })
27402
+ : v instanceof Group
27403
+ ? await v.toJsonLd({
27404
+ ...options,
27405
+ format: undefined,
27406
+ context: undefined,
27407
+ })
27408
+ : v instanceof _f
27409
+ ? await v.toJsonLd({
27410
+ ...options,
27411
+ format: undefined,
27412
+ context: undefined,
27413
+ })
27414
+ : v instanceof Person
27415
+ ? await v.toJsonLd({
27416
+ ...options,
27417
+ format: undefined,
27418
+ context: undefined,
27419
+ })
27420
+ : await v.toJsonLd({
27421
+ ...options,
27422
+ format: undefined,
27423
+ context: undefined,
27424
+ });
27425
+ compactItems.push(item);
27426
+ }
27427
+ if (compactItems.length > 0) {
27428
+ result["movedTo"] = compactItems.length > 1
27429
+ ? compactItems
27430
+ : compactItems[0];
27431
+ }
27432
+ compactItems = [];
26799
27433
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
26800
27434
  const item = v instanceof URL
26801
27435
  ? v.href
@@ -26871,6 +27505,7 @@ export class Organization extends Object {
26871
27505
  {
26872
27506
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
26873
27507
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
27508
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
26874
27509
  "toot": "http://joinmastodon.org/ns#",
26875
27510
  "featured": { "@id": "toot:featured", "@type": "@id" },
26876
27511
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -27073,6 +27708,25 @@ export class Organization extends Object {
27073
27708
  values["http://joinmastodon.org/ns#indexable"] = propValue;
27074
27709
  }
27075
27710
  array = [];
27711
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
27712
+ const element = v instanceof URL
27713
+ ? { "@id": v.href }
27714
+ : v instanceof Application
27715
+ ? await v.toJsonLd(options)
27716
+ : v instanceof Group
27717
+ ? await v.toJsonLd(options)
27718
+ : v instanceof _f
27719
+ ? await v.toJsonLd(options)
27720
+ : v instanceof Person
27721
+ ? await v.toJsonLd(options)
27722
+ : await v.toJsonLd(options);
27723
+ array.push(element);
27724
+ }
27725
+ if (array.length > 0) {
27726
+ const propValue = array;
27727
+ values["https://www.w3.org/ns/activitystreams#movedTo"] = propValue;
27728
+ }
27729
+ array = [];
27076
27730
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
27077
27731
  const element = v instanceof URL
27078
27732
  ? { "@id": v.href }
@@ -27127,6 +27781,7 @@ export class Organization extends Object {
27127
27781
  {
27128
27782
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
27129
27783
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
27784
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
27130
27785
  "toot": "http://joinmastodon.org/ns#",
27131
27786
  "featured": { "@id": "toot:featured", "@type": "@id" },
27132
27787
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -27533,6 +28188,50 @@ export class Organization extends Object {
27533
28188
  }
27534
28189
  instance.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable =
27535
28190
  _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable;
28191
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
28192
+ let _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array = values["https://www.w3.org/ns/activitystreams#movedTo"];
28193
+ for (const v of _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array == null
28194
+ ? []
28195
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array.length === 1 &&
28196
+ "@list" in _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]
28197
+ ? _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]["@list"]
28198
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array) {
28199
+ if (v == null)
28200
+ continue;
28201
+ if (typeof v === "object" && "@id" in v && !("@type" in v) &&
28202
+ globalThis.Object.keys(v).length === 1) {
28203
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(!URL.canParse(v["@id"]) && v["@id"].startsWith("at://")
28204
+ ? new URL("at://" + encodeURIComponent(v["@id"].substring(5)))
28205
+ : new URL(v["@id"]));
28206
+ continue;
28207
+ }
28208
+ const decoded = typeof v === "object" && "@type" in v &&
28209
+ Array.isArray(v["@type"]) &&
28210
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Application")
28211
+ ? await Application.fromJsonLd(v, options)
28212
+ : typeof v === "object" && "@type" in v &&
28213
+ Array.isArray(v["@type"]) &&
28214
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Group")
28215
+ ? await Group.fromJsonLd(v, options)
28216
+ : typeof v === "object" && "@type" in v &&
28217
+ Array.isArray(v["@type"]) &&
28218
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Organization")
28219
+ ? await _f.fromJsonLd(v, options)
28220
+ : typeof v === "object" && "@type" in v &&
28221
+ Array.isArray(v["@type"]) &&
28222
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Person")
28223
+ ? await Person.fromJsonLd(v, options)
28224
+ : typeof v === "object" && "@type" in v &&
28225
+ Array.isArray(v["@type"]) &&
28226
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Service")
28227
+ ? await Service.fromJsonLd(v, options)
28228
+ : undefined;
28229
+ if (typeof decoded === "undefined")
28230
+ continue;
28231
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(decoded);
28232
+ }
28233
+ instance.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
28234
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
27536
28235
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
27537
28236
  let _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array = values["https://www.w3.org/ns/activitystreams#alsoKnownAs"];
27538
28237
  for (const v of _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array == null
@@ -27848,6 +28547,18 @@ export class Organization extends Object {
27848
28547
  if (_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable.length == 1) {
27849
28548
  proxy.indexable = _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
27850
28549
  }
28550
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = this
28551
+ .#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo
28552
+ // deno-lint-ignore no-explicit-any
28553
+ .map((v) => v instanceof URL
28554
+ ? {
28555
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
28556
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
28557
+ }
28558
+ : v);
28559
+ if (_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length == 1) {
28560
+ proxy.successor = _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
28561
+ }
27851
28562
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = this
27852
28563
  .#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs
27853
28564
  // deno-lint-ignore no-explicit-any
@@ -28108,6 +28819,7 @@ export class Person extends Object {
28108
28819
  #_2kGKkJtoFWg8c18PaVSqj9NKP4t7_suspended = [];
28109
28820
  #_79S8K4f5J9MWUgCxziRyUe6PTHZ_memorial = [];
28110
28821
  #_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable = [];
28822
+ #_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
28111
28823
  #_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
28112
28824
  #_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service = [];
28113
28825
  #_2xEU4QtkC53RAun67T81Egqt9vmL_isCat = [];
@@ -28355,6 +29067,20 @@ export class Person extends Object {
28355
29067
  "boolean" + ".");
28356
29068
  }
28357
29069
  }
29070
+ if ("successor" in values && values.successor != null) {
29071
+ if (values.successor instanceof Application ||
29072
+ values.successor instanceof Group ||
29073
+ values.successor instanceof Organization ||
29074
+ values.successor instanceof _g ||
29075
+ values.successor instanceof Service || values.successor instanceof URL) {
29076
+ // @ts-ignore: type is checked above.
29077
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
29078
+ }
29079
+ else {
29080
+ throw new TypeError("The successor must be of type " +
29081
+ "Application | Group | Organization | Person | Service | URL" + ".");
29082
+ }
29083
+ }
28358
29084
  if ("alias" in values && values.alias != null) {
28359
29085
  if (values.alias instanceof Application || values.alias instanceof Group ||
28360
29086
  values.alias instanceof Organization ||
@@ -28704,6 +29430,22 @@ export class Person extends Object {
28704
29430
  "boolean" + ".");
28705
29431
  }
28706
29432
  }
29433
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
29434
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
29435
+ if ("successor" in values && values.successor != null) {
29436
+ if (values.successor instanceof Application ||
29437
+ values.successor instanceof Group ||
29438
+ values.successor instanceof Organization ||
29439
+ values.successor instanceof _g ||
29440
+ values.successor instanceof Service || values.successor instanceof URL) {
29441
+ // @ts-ignore: type is checked above.
29442
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
29443
+ }
29444
+ else {
29445
+ throw new TypeError("The successor must be of type " +
29446
+ "Application | Group | Organization | Person | Service | URL" + ".");
29447
+ }
29448
+ }
28707
29449
  clone.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs =
28708
29450
  this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs;
28709
29451
  if ("alias" in values && values.alias != null) {
@@ -29498,6 +30240,95 @@ export class Person extends Object {
29498
30240
  return null;
29499
30241
  return this.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
29500
30242
  }
30243
+ async #fetchSuccessor(url, options = {}) {
30244
+ const documentLoader = options.documentLoader ?? this._documentLoader ??
30245
+ fetchDocumentLoader;
30246
+ const contextLoader = options.contextLoader ?? this._contextLoader ??
30247
+ fetchDocumentLoader;
30248
+ let fetchResult;
30249
+ try {
30250
+ fetchResult = await documentLoader(url.href);
30251
+ }
30252
+ catch (error) {
30253
+ if (options.suppressError) {
30254
+ getLogger(["fedify", "vocab"]).error("Failed to fetch {url}: {error}", { error, url: url.href });
30255
+ return null;
30256
+ }
30257
+ throw error;
30258
+ }
30259
+ const { document } = fetchResult;
30260
+ try {
30261
+ return await Application.fromJsonLd(document, { documentLoader, contextLoader });
30262
+ }
30263
+ catch (e) {
30264
+ if (!(e instanceof TypeError))
30265
+ throw e;
30266
+ }
30267
+ try {
30268
+ return await Group.fromJsonLd(document, { documentLoader, contextLoader });
30269
+ }
30270
+ catch (e) {
30271
+ if (!(e instanceof TypeError))
30272
+ throw e;
30273
+ }
30274
+ try {
30275
+ return await Organization.fromJsonLd(document, { documentLoader, contextLoader });
30276
+ }
30277
+ catch (e) {
30278
+ if (!(e instanceof TypeError))
30279
+ throw e;
30280
+ }
30281
+ try {
30282
+ return await _g.fromJsonLd(document, { documentLoader, contextLoader });
30283
+ }
30284
+ catch (e) {
30285
+ if (!(e instanceof TypeError))
30286
+ throw e;
30287
+ }
30288
+ try {
30289
+ return await Service.fromJsonLd(document, { documentLoader, contextLoader });
30290
+ }
30291
+ catch (e) {
30292
+ if (!(e instanceof TypeError))
30293
+ throw e;
30294
+ }
30295
+ throw new TypeError("Expected an object of any type of: " +
30296
+ [
30297
+ "https://www.w3.org/ns/activitystreams#Application",
30298
+ "https://www.w3.org/ns/activitystreams#Group",
30299
+ "https://www.w3.org/ns/activitystreams#Organization",
30300
+ "https://www.w3.org/ns/activitystreams#Person",
30301
+ "https://www.w3.org/ns/activitystreams#Service",
30302
+ ].join(", "));
30303
+ }
30304
+ /**
30305
+ * Similar to
30306
+ * {@link Person.getSuccessor},
30307
+ * but returns its `@id` URL instead of the object itself.
30308
+ */
30309
+ get successorId() {
30310
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
30311
+ return null;
30312
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
30313
+ if (v instanceof URL)
30314
+ return v;
30315
+ return v.id;
30316
+ }
30317
+ /** Signifies that an actor has been moved to a different ID. Used in Mastodon-style data portability with the {@link Move} activity; see [ActivityPub Data Portability/Move Action](https://swicg.github.io/activitypub-data-portability/#move-action) for more details.
30318
+ */
30319
+ async getSuccessor(options = {}) {
30320
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
30321
+ return null;
30322
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
30323
+ if (v instanceof URL) {
30324
+ const fetched = await this.#fetchSuccessor(v, options);
30325
+ if (fetched == null)
30326
+ return null;
30327
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0] = fetched;
30328
+ return fetched;
30329
+ }
30330
+ return v;
30331
+ }
29501
30332
  async #fetchAlias(url, options = {}) {
29502
30333
  const documentLoader = options.documentLoader ?? this._documentLoader ??
29503
30334
  fetchDocumentLoader;
@@ -29957,7 +30788,47 @@ export class Person extends Object {
29957
30788
  compactItems.push(item);
29958
30789
  }
29959
30790
  if (compactItems.length > 0) {
29960
- result["indexable"] = compactItems.length > 1
30791
+ result["indexable"] = compactItems.length > 1
30792
+ ? compactItems
30793
+ : compactItems[0];
30794
+ }
30795
+ compactItems = [];
30796
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
30797
+ const item = v instanceof URL
30798
+ ? v.href
30799
+ : v instanceof Application
30800
+ ? await v.toJsonLd({
30801
+ ...options,
30802
+ format: undefined,
30803
+ context: undefined,
30804
+ })
30805
+ : v instanceof Group
30806
+ ? await v.toJsonLd({
30807
+ ...options,
30808
+ format: undefined,
30809
+ context: undefined,
30810
+ })
30811
+ : v instanceof Organization
30812
+ ? await v.toJsonLd({
30813
+ ...options,
30814
+ format: undefined,
30815
+ context: undefined,
30816
+ })
30817
+ : v instanceof _g
30818
+ ? await v.toJsonLd({
30819
+ ...options,
30820
+ format: undefined,
30821
+ context: undefined,
30822
+ })
30823
+ : await v.toJsonLd({
30824
+ ...options,
30825
+ format: undefined,
30826
+ context: undefined,
30827
+ });
30828
+ compactItems.push(item);
30829
+ }
30830
+ if (compactItems.length > 0) {
30831
+ result["movedTo"] = compactItems.length > 1
29961
30832
  ? compactItems
29962
30833
  : compactItems[0];
29963
30834
  }
@@ -30037,6 +30908,7 @@ export class Person extends Object {
30037
30908
  {
30038
30909
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
30039
30910
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
30911
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
30040
30912
  "toot": "http://joinmastodon.org/ns#",
30041
30913
  "featured": { "@id": "toot:featured", "@type": "@id" },
30042
30914
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -30239,6 +31111,25 @@ export class Person extends Object {
30239
31111
  values["http://joinmastodon.org/ns#indexable"] = propValue;
30240
31112
  }
30241
31113
  array = [];
31114
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
31115
+ const element = v instanceof URL
31116
+ ? { "@id": v.href }
31117
+ : v instanceof Application
31118
+ ? await v.toJsonLd(options)
31119
+ : v instanceof Group
31120
+ ? await v.toJsonLd(options)
31121
+ : v instanceof Organization
31122
+ ? await v.toJsonLd(options)
31123
+ : v instanceof _g
31124
+ ? await v.toJsonLd(options)
31125
+ : await v.toJsonLd(options);
31126
+ array.push(element);
31127
+ }
31128
+ if (array.length > 0) {
31129
+ const propValue = array;
31130
+ values["https://www.w3.org/ns/activitystreams#movedTo"] = propValue;
31131
+ }
31132
+ array = [];
30242
31133
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
30243
31134
  const element = v instanceof URL
30244
31135
  ? { "@id": v.href }
@@ -30293,6 +31184,7 @@ export class Person extends Object {
30293
31184
  {
30294
31185
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
30295
31186
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
31187
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
30296
31188
  "toot": "http://joinmastodon.org/ns#",
30297
31189
  "featured": { "@id": "toot:featured", "@type": "@id" },
30298
31190
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -30699,6 +31591,50 @@ export class Person extends Object {
30699
31591
  }
30700
31592
  instance.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable =
30701
31593
  _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable;
31594
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
31595
+ let _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array = values["https://www.w3.org/ns/activitystreams#movedTo"];
31596
+ for (const v of _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array == null
31597
+ ? []
31598
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array.length === 1 &&
31599
+ "@list" in _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]
31600
+ ? _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]["@list"]
31601
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array) {
31602
+ if (v == null)
31603
+ continue;
31604
+ if (typeof v === "object" && "@id" in v && !("@type" in v) &&
31605
+ globalThis.Object.keys(v).length === 1) {
31606
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(!URL.canParse(v["@id"]) && v["@id"].startsWith("at://")
31607
+ ? new URL("at://" + encodeURIComponent(v["@id"].substring(5)))
31608
+ : new URL(v["@id"]));
31609
+ continue;
31610
+ }
31611
+ const decoded = typeof v === "object" && "@type" in v &&
31612
+ Array.isArray(v["@type"]) &&
31613
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Application")
31614
+ ? await Application.fromJsonLd(v, options)
31615
+ : typeof v === "object" && "@type" in v &&
31616
+ Array.isArray(v["@type"]) &&
31617
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Group")
31618
+ ? await Group.fromJsonLd(v, options)
31619
+ : typeof v === "object" && "@type" in v &&
31620
+ Array.isArray(v["@type"]) &&
31621
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Organization")
31622
+ ? await Organization.fromJsonLd(v, options)
31623
+ : typeof v === "object" && "@type" in v &&
31624
+ Array.isArray(v["@type"]) &&
31625
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Person")
31626
+ ? await _g.fromJsonLd(v, options)
31627
+ : typeof v === "object" && "@type" in v &&
31628
+ Array.isArray(v["@type"]) &&
31629
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Service")
31630
+ ? await Service.fromJsonLd(v, options)
31631
+ : undefined;
31632
+ if (typeof decoded === "undefined")
31633
+ continue;
31634
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(decoded);
31635
+ }
31636
+ instance.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
31637
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
30702
31638
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
30703
31639
  let _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array = values["https://www.w3.org/ns/activitystreams#alsoKnownAs"];
30704
31640
  for (const v of _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array == null
@@ -31014,6 +31950,18 @@ export class Person extends Object {
31014
31950
  if (_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable.length == 1) {
31015
31951
  proxy.indexable = _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
31016
31952
  }
31953
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = this
31954
+ .#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo
31955
+ // deno-lint-ignore no-explicit-any
31956
+ .map((v) => v instanceof URL
31957
+ ? {
31958
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
31959
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
31960
+ }
31961
+ : v);
31962
+ if (_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length == 1) {
31963
+ proxy.successor = _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
31964
+ }
31017
31965
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = this
31018
31966
  .#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs
31019
31967
  // deno-lint-ignore no-explicit-any
@@ -33968,6 +34916,7 @@ export class Service extends Object {
33968
34916
  #_2kGKkJtoFWg8c18PaVSqj9NKP4t7_suspended = [];
33969
34917
  #_79S8K4f5J9MWUgCxziRyUe6PTHZ_memorial = [];
33970
34918
  #_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable = [];
34919
+ #_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
33971
34920
  #_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
33972
34921
  #_4Q6NrKH6bazBGtxwG8vyG77ir7Tg_service = [];
33973
34922
  #_2xEU4QtkC53RAun67T81Egqt9vmL_isCat = [];
@@ -34215,6 +35164,20 @@ export class Service extends Object {
34215
35164
  "boolean" + ".");
34216
35165
  }
34217
35166
  }
35167
+ if ("successor" in values && values.successor != null) {
35168
+ if (values.successor instanceof Application ||
35169
+ values.successor instanceof Group ||
35170
+ values.successor instanceof Organization ||
35171
+ values.successor instanceof Person ||
35172
+ values.successor instanceof _h || values.successor instanceof URL) {
35173
+ // @ts-ignore: type is checked above.
35174
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
35175
+ }
35176
+ else {
35177
+ throw new TypeError("The successor must be of type " +
35178
+ "Application | Group | Organization | Person | Service | URL" + ".");
35179
+ }
35180
+ }
34218
35181
  if ("alias" in values && values.alias != null) {
34219
35182
  if (values.alias instanceof Application || values.alias instanceof Group ||
34220
35183
  values.alias instanceof Organization ||
@@ -34564,6 +35527,22 @@ export class Service extends Object {
34564
35527
  "boolean" + ".");
34565
35528
  }
34566
35529
  }
35530
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
35531
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
35532
+ if ("successor" in values && values.successor != null) {
35533
+ if (values.successor instanceof Application ||
35534
+ values.successor instanceof Group ||
35535
+ values.successor instanceof Organization ||
35536
+ values.successor instanceof Person ||
35537
+ values.successor instanceof _h || values.successor instanceof URL) {
35538
+ // @ts-ignore: type is checked above.
35539
+ clone.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [values.successor];
35540
+ }
35541
+ else {
35542
+ throw new TypeError("The successor must be of type " +
35543
+ "Application | Group | Organization | Person | Service | URL" + ".");
35544
+ }
35545
+ }
34567
35546
  clone.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs =
34568
35547
  this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs;
34569
35548
  if ("alias" in values && values.alias != null) {
@@ -35358,6 +36337,95 @@ export class Service extends Object {
35358
36337
  return null;
35359
36338
  return this.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
35360
36339
  }
36340
+ async #fetchSuccessor(url, options = {}) {
36341
+ const documentLoader = options.documentLoader ?? this._documentLoader ??
36342
+ fetchDocumentLoader;
36343
+ const contextLoader = options.contextLoader ?? this._contextLoader ??
36344
+ fetchDocumentLoader;
36345
+ let fetchResult;
36346
+ try {
36347
+ fetchResult = await documentLoader(url.href);
36348
+ }
36349
+ catch (error) {
36350
+ if (options.suppressError) {
36351
+ getLogger(["fedify", "vocab"]).error("Failed to fetch {url}: {error}", { error, url: url.href });
36352
+ return null;
36353
+ }
36354
+ throw error;
36355
+ }
36356
+ const { document } = fetchResult;
36357
+ try {
36358
+ return await Application.fromJsonLd(document, { documentLoader, contextLoader });
36359
+ }
36360
+ catch (e) {
36361
+ if (!(e instanceof TypeError))
36362
+ throw e;
36363
+ }
36364
+ try {
36365
+ return await Group.fromJsonLd(document, { documentLoader, contextLoader });
36366
+ }
36367
+ catch (e) {
36368
+ if (!(e instanceof TypeError))
36369
+ throw e;
36370
+ }
36371
+ try {
36372
+ return await Organization.fromJsonLd(document, { documentLoader, contextLoader });
36373
+ }
36374
+ catch (e) {
36375
+ if (!(e instanceof TypeError))
36376
+ throw e;
36377
+ }
36378
+ try {
36379
+ return await Person.fromJsonLd(document, { documentLoader, contextLoader });
36380
+ }
36381
+ catch (e) {
36382
+ if (!(e instanceof TypeError))
36383
+ throw e;
36384
+ }
36385
+ try {
36386
+ return await _h.fromJsonLd(document, { documentLoader, contextLoader });
36387
+ }
36388
+ catch (e) {
36389
+ if (!(e instanceof TypeError))
36390
+ throw e;
36391
+ }
36392
+ throw new TypeError("Expected an object of any type of: " +
36393
+ [
36394
+ "https://www.w3.org/ns/activitystreams#Application",
36395
+ "https://www.w3.org/ns/activitystreams#Group",
36396
+ "https://www.w3.org/ns/activitystreams#Organization",
36397
+ "https://www.w3.org/ns/activitystreams#Person",
36398
+ "https://www.w3.org/ns/activitystreams#Service",
36399
+ ].join(", "));
36400
+ }
36401
+ /**
36402
+ * Similar to
36403
+ * {@link Service.getSuccessor},
36404
+ * but returns its `@id` URL instead of the object itself.
36405
+ */
36406
+ get successorId() {
36407
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
36408
+ return null;
36409
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
36410
+ if (v instanceof URL)
36411
+ return v;
36412
+ return v.id;
36413
+ }
36414
+ /** Signifies that an actor has been moved to a different ID. Used in Mastodon-style data portability with the {@link Move} activity; see [ActivityPub Data Portability/Move Action](https://swicg.github.io/activitypub-data-portability/#move-action) for more details.
36415
+ */
36416
+ async getSuccessor(options = {}) {
36417
+ if (this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length < 1)
36418
+ return null;
36419
+ const v = this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
36420
+ if (v instanceof URL) {
36421
+ const fetched = await this.#fetchSuccessor(v, options);
36422
+ if (fetched == null)
36423
+ return null;
36424
+ this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0] = fetched;
36425
+ return fetched;
36426
+ }
36427
+ return v;
36428
+ }
35361
36429
  async #fetchAlias(url, options = {}) {
35362
36430
  const documentLoader = options.documentLoader ?? this._documentLoader ??
35363
36431
  fetchDocumentLoader;
@@ -35822,6 +36890,46 @@ export class Service extends Object {
35822
36890
  : compactItems[0];
35823
36891
  }
35824
36892
  compactItems = [];
36893
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
36894
+ const item = v instanceof URL
36895
+ ? v.href
36896
+ : v instanceof Application
36897
+ ? await v.toJsonLd({
36898
+ ...options,
36899
+ format: undefined,
36900
+ context: undefined,
36901
+ })
36902
+ : v instanceof Group
36903
+ ? await v.toJsonLd({
36904
+ ...options,
36905
+ format: undefined,
36906
+ context: undefined,
36907
+ })
36908
+ : v instanceof Organization
36909
+ ? await v.toJsonLd({
36910
+ ...options,
36911
+ format: undefined,
36912
+ context: undefined,
36913
+ })
36914
+ : v instanceof Person
36915
+ ? await v.toJsonLd({
36916
+ ...options,
36917
+ format: undefined,
36918
+ context: undefined,
36919
+ })
36920
+ : await v.toJsonLd({
36921
+ ...options,
36922
+ format: undefined,
36923
+ context: undefined,
36924
+ });
36925
+ compactItems.push(item);
36926
+ }
36927
+ if (compactItems.length > 0) {
36928
+ result["movedTo"] = compactItems.length > 1
36929
+ ? compactItems
36930
+ : compactItems[0];
36931
+ }
36932
+ compactItems = [];
35825
36933
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
35826
36934
  const item = v instanceof URL
35827
36935
  ? v.href
@@ -35897,6 +37005,7 @@ export class Service extends Object {
35897
37005
  {
35898
37006
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
35899
37007
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
37008
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
35900
37009
  "toot": "http://joinmastodon.org/ns#",
35901
37010
  "featured": { "@id": "toot:featured", "@type": "@id" },
35902
37011
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -36099,6 +37208,25 @@ export class Service extends Object {
36099
37208
  values["http://joinmastodon.org/ns#indexable"] = propValue;
36100
37209
  }
36101
37210
  array = [];
37211
+ for (const v of this.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo) {
37212
+ const element = v instanceof URL
37213
+ ? { "@id": v.href }
37214
+ : v instanceof Application
37215
+ ? await v.toJsonLd(options)
37216
+ : v instanceof Group
37217
+ ? await v.toJsonLd(options)
37218
+ : v instanceof Organization
37219
+ ? await v.toJsonLd(options)
37220
+ : v instanceof Person
37221
+ ? await v.toJsonLd(options)
37222
+ : await v.toJsonLd(options);
37223
+ array.push(element);
37224
+ }
37225
+ if (array.length > 0) {
37226
+ const propValue = array;
37227
+ values["https://www.w3.org/ns/activitystreams#movedTo"] = propValue;
37228
+ }
37229
+ array = [];
36102
37230
  for (const v of this.#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs) {
36103
37231
  const element = v instanceof URL
36104
37232
  ? { "@id": v.href }
@@ -36153,6 +37281,7 @@ export class Service extends Object {
36153
37281
  {
36154
37282
  "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" },
36155
37283
  "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
37284
+ "movedTo": { "@id": "as:movedTo", "@type": "@id" },
36156
37285
  "toot": "http://joinmastodon.org/ns#",
36157
37286
  "featured": { "@id": "toot:featured", "@type": "@id" },
36158
37287
  "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" },
@@ -36559,6 +37688,50 @@ export class Service extends Object {
36559
37688
  }
36560
37689
  instance.#_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable =
36561
37690
  _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable;
37691
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = [];
37692
+ let _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array = values["https://www.w3.org/ns/activitystreams#movedTo"];
37693
+ for (const v of _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array == null
37694
+ ? []
37695
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array.length === 1 &&
37696
+ "@list" in _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]
37697
+ ? _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array[0]["@list"]
37698
+ : _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo__array) {
37699
+ if (v == null)
37700
+ continue;
37701
+ if (typeof v === "object" && "@id" in v && !("@type" in v) &&
37702
+ globalThis.Object.keys(v).length === 1) {
37703
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(!URL.canParse(v["@id"]) && v["@id"].startsWith("at://")
37704
+ ? new URL("at://" + encodeURIComponent(v["@id"].substring(5)))
37705
+ : new URL(v["@id"]));
37706
+ continue;
37707
+ }
37708
+ const decoded = typeof v === "object" && "@type" in v &&
37709
+ Array.isArray(v["@type"]) &&
37710
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Application")
37711
+ ? await Application.fromJsonLd(v, options)
37712
+ : typeof v === "object" && "@type" in v &&
37713
+ Array.isArray(v["@type"]) &&
37714
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Group")
37715
+ ? await Group.fromJsonLd(v, options)
37716
+ : typeof v === "object" && "@type" in v &&
37717
+ Array.isArray(v["@type"]) &&
37718
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Organization")
37719
+ ? await Organization.fromJsonLd(v, options)
37720
+ : typeof v === "object" && "@type" in v &&
37721
+ Array.isArray(v["@type"]) &&
37722
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Person")
37723
+ ? await Person.fromJsonLd(v, options)
37724
+ : typeof v === "object" && "@type" in v &&
37725
+ Array.isArray(v["@type"]) &&
37726
+ v["@type"].includes("https://www.w3.org/ns/activitystreams#Service")
37727
+ ? await _h.fromJsonLd(v, options)
37728
+ : undefined;
37729
+ if (typeof decoded === "undefined")
37730
+ continue;
37731
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.push(decoded);
37732
+ }
37733
+ instance.#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo =
37734
+ _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo;
36562
37735
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = [];
36563
37736
  let _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array = values["https://www.w3.org/ns/activitystreams#alsoKnownAs"];
36564
37737
  for (const v of _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs__array == null
@@ -36874,6 +38047,18 @@ export class Service extends Object {
36874
38047
  if (_2diCorzqPGQQqftp6e4SrCEwEnyk_indexable.length == 1) {
36875
38048
  proxy.indexable = _2diCorzqPGQQqftp6e4SrCEwEnyk_indexable[0];
36876
38049
  }
38050
+ const _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo = this
38051
+ .#_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo
38052
+ // deno-lint-ignore no-explicit-any
38053
+ .map((v) => v instanceof URL
38054
+ ? {
38055
+ [Symbol.for("Deno.customInspect")]: (inspect, options) => "URL " + inspect(v.href, options),
38056
+ [Symbol.for("nodejs.util.inspect.custom")]: (_depth, options, inspect) => "URL " + inspect(v.href, options),
38057
+ }
38058
+ : v);
38059
+ if (_2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo.length == 1) {
38060
+ proxy.successor = _2ZNWDhuNdSXBwEmrB5kwffdKGzok_movedTo[0];
38061
+ }
36877
38062
  const _3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs = this
36878
38063
  .#_3NV7TGNhuABbryNjNi4wib4DgNpY_alsoKnownAs
36879
38064
  // deno-lint-ignore no-explicit-any