@fedify/fedify 1.5.2 → 1.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGES.md +152 -0
  2. package/README.md +3 -2
  3. package/SPONSORS.md +3 -2
  4. package/esm/deno.js +1 -1
  5. package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/equals.js +1 -1
  6. package/esm/federation/handler.js +20 -7
  7. package/esm/runtime/key.js +1 -1
  8. package/esm/sig/http.js +1 -1
  9. package/esm/vocab/announce.yaml +3 -1
  10. package/esm/vocab/create.yaml +3 -1
  11. package/esm/vocab/delete.yaml +3 -1
  12. package/esm/vocab/lookup.js +1 -1
  13. package/esm/vocab/question.yaml +3 -1
  14. package/esm/vocab/update.yaml +3 -1
  15. package/esm/vocab/vocab.js +196 -181
  16. package/package.json +1 -1
  17. package/types/deps/jsr.io/@std/async/{1.0.12 → 1.0.13}/delay.d.ts.map +1 -1
  18. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/_types.d.ts.map +1 -1
  19. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/concat.d.ts +1 -1
  20. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/concat.d.ts.map +1 -1
  21. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/copy.d.ts.map +1 -1
  22. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/ends_with.d.ts.map +1 -1
  23. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/equals.d.ts.map +1 -1
  24. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/includes_needle.d.ts.map +1 -1
  25. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/index_of_needle.d.ts.map +1 -1
  26. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/last_index_of_needle.d.ts.map +1 -1
  27. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/mod.d.ts.map +1 -1
  28. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/repeat.d.ts.map +1 -1
  29. package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/starts_with.d.ts.map +1 -1
  30. package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/common.d.ts.map +1 -1
  31. package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/encoding.d.ts.map +1 -1
  32. package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/language.d.ts.map +1 -1
  33. package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/media_type.d.ts.map +1 -1
  34. package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/negotiation.d.ts.map +1 -1
  35. package/types/federation/handler.d.ts.map +1 -1
  36. package/types/vocab/vocab.d.ts.map +1 -1
  37. /package/esm/deps/jsr.io/@std/async/{1.0.12 → 1.0.13}/delay.js +0 -0
  38. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/_types.js +0 -0
  39. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/concat.js +0 -0
  40. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/copy.js +0 -0
  41. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/ends_with.js +0 -0
  42. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/includes_needle.js +0 -0
  43. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/index_of_needle.js +0 -0
  44. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/last_index_of_needle.js +0 -0
  45. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/mod.js +0 -0
  46. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/repeat.js +0 -0
  47. /package/esm/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/starts_with.js +0 -0
  48. /package/esm/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/common.js +0 -0
  49. /package/esm/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/encoding.js +0 -0
  50. /package/esm/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/language.js +0 -0
  51. /package/esm/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/media_type.js +0 -0
  52. /package/esm/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/negotiation.js +0 -0
  53. /package/types/deps/jsr.io/@std/async/{1.0.12 → 1.0.13}/delay.d.ts +0 -0
  54. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/_types.d.ts +0 -0
  55. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/copy.d.ts +0 -0
  56. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/ends_with.d.ts +0 -0
  57. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/equals.d.ts +0 -0
  58. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/includes_needle.d.ts +0 -0
  59. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/index_of_needle.d.ts +0 -0
  60. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/last_index_of_needle.d.ts +0 -0
  61. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/mod.d.ts +0 -0
  62. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/repeat.d.ts +0 -0
  63. /package/types/deps/jsr.io/@std/bytes/{1.0.5 → 1.0.6}/starts_with.d.ts +0 -0
  64. /package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/common.d.ts +0 -0
  65. /package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/encoding.d.ts +0 -0
  66. /package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/language.d.ts +0 -0
  67. /package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/_negotiation/media_type.d.ts +0 -0
  68. /package/types/deps/jsr.io/@std/http/{1.0.15 → 1.0.18}/negotiation.d.ts +0 -0
package/CHANGES.md CHANGED
@@ -3,6 +3,31 @@
3
3
  Fedify changelog
4
4
  ================
5
5
 
6
+ Version 1.5.4
7
+ -------------
8
+
9
+ Released on June 30, 2025.
10
+
11
+ - Fixed JSON-LD serialization of the `Question.voters` property to correctly
12
+ serialize as a plain number (e.g., `"votersCount": 123`) instead of as a
13
+ typed literal object (e.g., `"votersCount":{"type":"xsd:nonNegativeInteger",
14
+ "@value":123}`).
15
+
16
+
17
+ Version 1.5.3
18
+ -------------
19
+
20
+ Released on May 16, 2025.
21
+
22
+ - Fixed a bug where inbox handler had thrown a `jsonld.SyntaxError` which
23
+ caused a `500 Internal Server Error` when the received activity had
24
+ an invalid JSON-LD syntax. Now it logs the error and responds with
25
+ a `400 Bad Request` error instead. [[#232]]
26
+
27
+ - The `exportJwk()` function now populates the `alg` property of a returned
28
+ `JsonWebKey` object with `"Ed25519"` if the input key is an Ed25519 key.
29
+
30
+
6
31
  Version 1.5.2
7
32
  -------------
8
33
 
@@ -152,6 +177,31 @@ Released on March 28, 2025.
152
177
  [multibase]: https://github.com/multiformats/js-multibase
153
178
 
154
179
 
180
+ Version 1.4.12
181
+ --------------
182
+
183
+ Released on June 30, 2025.
184
+
185
+ - Fixed JSON-LD serialization of the `Question.voters` property to correctly
186
+ serialize as a plain number (e.g., `"votersCount": 123`) instead of as a
187
+ typed literal object (e.g., `"votersCount":{"type":"xsd:nonNegativeInteger",
188
+ "@value":123}`).
189
+
190
+
191
+ Version 1.4.11
192
+ --------------
193
+
194
+ Released on May 16, 2025.
195
+
196
+ - Fixed a bug where inbox handler had thrown a `jsonld.SyntaxError` which
197
+ caused a `500 Internal Server Error` when the received activity had
198
+ an invalid JSON-LD syntax. Now it logs the error and responds with
199
+ a `400 Bad Request` error instead. [[#232]]
200
+
201
+ - The `exportJwk()` function now populates the `alg` property of a returned
202
+ `JsonWebKey` object with `"Ed25519"` if the input key is an Ed25519 key.
203
+
204
+
155
205
  Version 1.4.10
156
206
  --------------
157
207
 
@@ -376,6 +426,31 @@ Released on February 5, 2025.
376
426
  [#195]: https://github.com/fedify-dev/fedify/issues/195
377
427
 
378
428
 
429
+ Version 1.3.19
430
+ --------------
431
+
432
+ Released on June 30, 2025.
433
+
434
+ - Fixed JSON-LD serialization of the `Question.voters` property to correctly
435
+ serialize as a plain number (e.g., `"votersCount": 123`) instead of as a
436
+ typed literal object (e.g., `"votersCount":{"type":"xsd:nonNegativeInteger",
437
+ "@value":123}`).
438
+
439
+
440
+ Version 1.3.18
441
+ --------------
442
+
443
+ Released on May 16, 2025.
444
+
445
+ - Fixed a bug where inbox handler had thrown a `jsonld.SyntaxError` which
446
+ caused a `500 Internal Server Error` when the received activity had
447
+ an invalid JSON-LD syntax. Now it logs the error and responds with
448
+ a `400 Bad Request` error instead. [[#232]]
449
+
450
+ - The `exportJwk()` function now populates the `alg` property of a returned
451
+ `JsonWebKey` object with `"Ed25519"` if the input key is an Ed25519 key.
452
+
453
+
379
454
  Version 1.3.17
380
455
  --------------
381
456
 
@@ -716,6 +791,31 @@ Released on November 30, 2024.
716
791
  [#193]: https://github.com/fedify-dev/fedify/issues/193
717
792
 
718
793
 
794
+ Version 1.2.23
795
+ --------------
796
+
797
+ Released on June 30, 2025.
798
+
799
+ - Fixed JSON-LD serialization of the `Question.voters` property to correctly
800
+ serialize as a plain number (e.g., `"votersCount": 123`) instead of as a
801
+ typed literal object (e.g., `"votersCount":{"type":"xsd:nonNegativeInteger",
802
+ "@value":123}`).
803
+
804
+
805
+ Version 1.2.22
806
+ --------------
807
+
808
+ Released on May 16, 2025.
809
+
810
+ - Fixed a bug where inbox handler had thrown a `jsonld.SyntaxError` which
811
+ caused a `500 Internal Server Error` when the received activity had
812
+ an invalid JSON-LD syntax. Now it logs the error and responds with
813
+ a `400 Bad Request` error instead. [[#232]]
814
+
815
+ - The `exportJwk()` function now populates the `alg` property of a returned
816
+ `JsonWebKey` object with `"Ed25519"` if the input key is an Ed25519 key.
817
+
818
+
719
819
  Version 1.2.21
720
820
  --------------
721
821
 
@@ -1104,6 +1204,31 @@ Released on October 31, 2024.
1104
1204
  [#118]: https://github.com/fedify-dev/fedify/issues/118
1105
1205
 
1106
1206
 
1207
+ Version 1.1.23
1208
+ --------------
1209
+
1210
+ Released on June 30, 2025.
1211
+
1212
+ - Fixed JSON-LD serialization of the `Question.voters` property to correctly
1213
+ serialize as a plain number (e.g., `"votersCount": 123`) instead of as a
1214
+ typed literal object (e.g., `"votersCount":{"type":"xsd:nonNegativeInteger",
1215
+ "@value":123}`).
1216
+
1217
+
1218
+ Version 1.1.22
1219
+ --------------
1220
+
1221
+ Released on May 16, 2025.
1222
+
1223
+ - Fixed a bug where inbox handler had thrown a `jsonld.SyntaxError` which
1224
+ caused a `500 Internal Server Error` when the received activity had
1225
+ an invalid JSON-LD syntax. Now it logs the error and responds with
1226
+ a `400 Bad Request` error instead. [[#232]]
1227
+
1228
+ - The `exportJwk()` function now populates the `alg` property of a returned
1229
+ `JsonWebKey` object with `"Ed25519"` if the input key is an Ed25519 key.
1230
+
1231
+
1107
1232
  Version 1.1.21
1108
1233
  --------------
1109
1234
 
@@ -1533,6 +1658,33 @@ Released on October 20, 2024.
1533
1658
  [#150]: https://github.com/fedify-dev/fedify/issues/150
1534
1659
 
1535
1660
 
1661
+ Version 1.0.26
1662
+ --------------
1663
+
1664
+ Released on June 30, 2025.
1665
+
1666
+ - Fixed JSON-LD serialization of the `Question.voters` property to correctly
1667
+ serialize as a plain number (e.g., `"votersCount": 123`) instead of as a
1668
+ typed literal object (e.g., `"votersCount":{"type":"xsd:nonNegativeInteger",
1669
+ "@value":123}`).
1670
+
1671
+
1672
+ Version 1.0.25
1673
+ --------------
1674
+
1675
+ Released on May 16, 2025.
1676
+
1677
+ - Fixed a bug where inbox handler had thrown a `jsonld.SyntaxError` which
1678
+ caused a `500 Internal Server Error` when the received activity had
1679
+ an invalid JSON-LD syntax. Now it logs the error and responds with
1680
+ a `400 Bad Request` error instead. [[#232]]
1681
+
1682
+ - The `exportJwk()` function now populates the `alg` property of a returned
1683
+ `JsonWebKey` object with `"Ed25519"` if the input key is an Ed25519 key.
1684
+
1685
+ [#232]: https://github.com/fedify-dev/fedify/issues/232
1686
+
1687
+
1536
1688
  Version 1.0.24
1537
1689
  --------------
1538
1690
 
package/README.md CHANGED
@@ -101,14 +101,15 @@ financial contributors:[^2]
101
101
  - [Daniel Supernault](https://pixelfed.org/)
102
102
  - [tkgka](https://opencollective.com/tkgka)
103
103
  - [Blaine](https://opencollective.com/blaine)
104
+ - [Erick González Aguilar](https://opencollective.com/erick-gonzalez-aguilar)
104
105
 
105
106
  ### Backers
106
107
 
107
- yamanoku, taye, Encyclia, okin, Andy Piper, box464, Evan Prodromou, Rafael Goulart, malte
108
+ Robin Riley, yamanoku, Encyclia, taye, okin, Andy Piper, box464, Evan Prodromou, Rafael Goulart, malte
108
109
 
109
110
  ### One-time donations
110
111
 
111
- Markus P, Nils Bergmann, Rameez
112
+ Robin Riley, Markus P, Nils Bergmann, Rameez
112
113
 
113
114
  <!-- /DO NOT EDIT -->
114
115
  <!-- cSpell: enable -->
package/SPONSORS.md CHANGED
@@ -21,16 +21,17 @@ Supporters
21
21
  - [Daniel Supernault](https://pixelfed.org/)
22
22
  - [tkgka](https://opencollective.com/tkgka)
23
23
  - [Blaine](https://opencollective.com/blaine)
24
+ - [Erick González Aguilar](https://opencollective.com/erick-gonzalez-aguilar)
24
25
 
25
26
  Backers
26
27
  -------
27
28
 
28
- yamanoku, taye, Encyclia, okin, Andy Piper, box464, Evan Prodromou, Rafael Goulart, malte
29
+ Robin Riley, yamanoku, Encyclia, taye, okin, Andy Piper, box464, Evan Prodromou, Rafael Goulart, malte
29
30
 
30
31
  One-time donations
31
32
  ------------------
32
33
 
33
- Markus P, Nils Bergmann, Rameez
34
+ Robin Riley, Markus P, Nils Bergmann, Rameez
34
35
 
35
36
  <!-- /DO NOT EDIT -->
36
37
  <!-- cSpell: enable -->
package/esm/deno.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export default {
2
2
  "name": "@fedify/fedify",
3
- "version": "1.5.2",
3
+ "version": "1.5.4",
4
4
  "license": "MIT",
5
5
  "exports": {
6
6
  ".": "./mod.ts",
@@ -48,7 +48,7 @@ function equals32Bit(a, b) {
48
48
  * Byte length threshold for when to use 32-bit comparisons, based on
49
49
  * benchmarks.
50
50
  *
51
- * @see {@link https://github.com/denoland/deno_std/pull/4635}
51
+ * @see {@link https://github.com/denoland/std/pull/4635}
52
52
  */
53
53
  const THRESHOLD_32_BIT = 160;
54
54
  /**
@@ -1,6 +1,6 @@
1
1
  import { getLogger } from "@logtape/logtape";
2
2
  import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
3
- import { accepts } from "../deps/jsr.io/@std/http/1.0.15/negotiation.js";
3
+ import { accepts } from "../deps/jsr.io/@std/http/1.0.18/negotiation.js";
4
4
  import metadata from "../deno.js";
5
5
  import { verifyRequest } from "../sig/http.js";
6
6
  import { detachSignature, verifyJsonLd } from "../sig/ld.js";
@@ -376,12 +376,25 @@ async function handleInboxInternal(request, { recipient, context: ctx, inboxCont
376
376
  });
377
377
  }
378
378
  const keyCache = new KvKeyCache(kv, kvPrefixes.publicKey, ctx);
379
- const ldSigVerified = await verifyJsonLd(json, {
380
- contextLoader: ctx.contextLoader,
381
- documentLoader: ctx.documentLoader,
382
- keyCache,
383
- tracerProvider,
384
- });
379
+ let ldSigVerified;
380
+ try {
381
+ ldSigVerified = await verifyJsonLd(json, {
382
+ contextLoader: ctx.contextLoader,
383
+ documentLoader: ctx.documentLoader,
384
+ keyCache,
385
+ tracerProvider,
386
+ });
387
+ }
388
+ catch (error) {
389
+ if (error instanceof Error && error.name === "jsonld.SyntaxError") {
390
+ logger.error("Failed to parse JSON-LD:\n{error}", { recipient, error });
391
+ return new Response("Invalid JSON-LD.", {
392
+ status: 400,
393
+ headers: { "Content-Type": "text/plain; charset=utf-8" },
394
+ });
395
+ }
396
+ ldSigVerified = false;
397
+ }
385
398
  const jsonWithoutSig = detachSignature(json);
386
399
  let activity = null;
387
400
  if (ldSigVerified) {
@@ -1,5 +1,5 @@
1
1
  import * as dntShim from "../_dnt.shims.js";
2
- import { concat } from "../deps/jsr.io/@std/bytes/1.0.5/concat.js";
2
+ import { concat } from "../deps/jsr.io/@std/bytes/1.0.6/concat.js";
3
3
  import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/1.0.7/base64.js";
4
4
  import { decodeBase64Url } from "../deps/jsr.io/@std/encoding/1.0.7/base64url.js";
5
5
  import { decodeHex } from "../deps/jsr.io/@std/encoding/1.0.7/hex.js";
package/esm/sig/http.js CHANGED
@@ -2,7 +2,7 @@ import * as dntShim from "../_dnt.shims.js";
2
2
  import { getLogger } from "@logtape/logtape";
3
3
  import { SpanStatusCode, trace, } from "@opentelemetry/api";
4
4
  import { ATTR_HTTP_REQUEST_HEADER, ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL, } from "@opentelemetry/semantic-conventions";
5
- import { equals } from "../deps/jsr.io/@std/bytes/1.0.5/mod.js";
5
+ import { equals } from "../deps/jsr.io/@std/bytes/1.0.6/mod.js";
6
6
  import { decodeBase64, encodeBase64 } from "../deps/jsr.io/@std/encoding/1.0.7/base64.js";
7
7
  import { encodeHex } from "../deps/jsr.io/@std/encoding/1.0.7/hex.js";
8
8
  import metadata from "../deno.js";
@@ -16,7 +16,9 @@ defaultContext:
16
16
  misskey: "https://misskey-hub.net/ns#"
17
17
  fedibird: "http://fedibird.com/ns#"
18
18
  sensitive: "as:sensitive"
19
- votersCount: "toot:votersCount"
19
+ votersCount:
20
+ "@id": "toot:votersCount"
21
+ "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
20
22
  Emoji: "toot:Emoji"
21
23
  Hashtag: "as:Hashtag"
22
24
  quoteUrl: "as:quoteUrl"
@@ -13,7 +13,9 @@ defaultContext:
13
13
  misskey: "https://misskey-hub.net/ns#"
14
14
  fedibird: "http://fedibird.com/ns#"
15
15
  sensitive: "as:sensitive"
16
- votersCount: "toot:votersCount"
16
+ votersCount:
17
+ "@id": "toot:votersCount"
18
+ "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
17
19
  Emoji: "toot:Emoji"
18
20
  Hashtag: "as:Hashtag"
19
21
  ChatMessage: "http://litepub.social/ns#ChatMessage"
@@ -15,7 +15,9 @@ defaultContext:
15
15
  misskey: "https://misskey-hub.net/ns#"
16
16
  fedibird: "http://fedibird.com/ns#"
17
17
  sensitive: "as:sensitive"
18
- votersCount: "toot:votersCount"
18
+ votersCount:
19
+ "@id": "toot:votersCount"
20
+ "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
19
21
  Emoji: "toot:Emoji"
20
22
  Hashtag: "as:Hashtag"
21
23
  ChatMessage: "http://litepub.social/ns#ChatMessage"
@@ -1,7 +1,7 @@
1
1
  import * as dntShim from "../_dnt.shims.js";
2
2
  import { getLogger } from "@logtape/logtape";
3
3
  import { SpanStatusCode, trace } from "@opentelemetry/api";
4
- import { delay } from "../deps/jsr.io/@std/async/1.0.12/delay.js";
4
+ import { delay } from "../deps/jsr.io/@std/async/1.0.13/delay.js";
5
5
  import metadata from "../deno.js";
6
6
  import { getDocumentLoader, } from "../runtime/docloader.js";
7
7
  import { lookupWebFinger } from "../webfinger/lookup.js";
@@ -21,7 +21,9 @@ defaultContext:
21
21
  misskey: "https://misskey-hub.net/ns#"
22
22
  fedibird: "http://fedibird.com/ns#"
23
23
  sensitive: "as:sensitive"
24
- votersCount: "toot:votersCount"
24
+ votersCount:
25
+ "@id": "toot:votersCount"
26
+ "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
25
27
  Emoji: "toot:Emoji"
26
28
  Hashtag: "as:Hashtag"
27
29
  quoteUrl: "as:quoteUrl"
@@ -37,7 +37,9 @@ defaultContext:
37
37
  suspended: "toot:suspended"
38
38
  memorial: "toot:memorial"
39
39
  indexable: "toot:indexable"
40
- votersCount: "toot:votersCount"
40
+ votersCount:
41
+ "@id": "toot:votersCount"
42
+ "@type": "http://www.w3.org/2001/XMLSchema#nonNegativeInteger"
41
43
  Emoji: "toot:Emoji"
42
44
  Hashtag: "as:Hashtag"
43
45
  schema: "http://schema.org#"