full diff

me.linkna.lastfm

linkna.me +66 −0
From
bafyreih5bm5ljawddt5lym2ndugygivpof63ibmmotw2ckjbqgk5mdftuu indexed 2026-03-19 20:26 UTC View this version
To
bafyreifbkkbnonncrumcsz5opr4ekgybtk3r7jerqilkaayb6773gijrme indexed 2026-04-21 15:34 UTC View this version

Compatibility

breaking 3 breaking changes, 28 non-breaking changes.

Breaking changes (3)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#genreTag", src: "me.linkna.lastfm#genreTag", tgt: "me.linkna.lastfm#genreTag.name", kind: "prop", name: Some("name") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#externalUrl", src: "me.linkna.lastfm#externalUrl", tgt: "me.linkna.lastfm#externalUrl.type", kind: "prop", name: Some("type") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#externalUrl", src: "me.linkna.lastfm#externalUrl", tgt: "me.linkna.lastfm#externalUrl.url", kind: "prop", name: Some("url") }
Non-breaking changes (28)
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl.type" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl.url" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#genreTag" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#genreTag.count" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#genreTag.name" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.duration" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.externalUrls" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.externalUrls:items" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.genres" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.genres:items" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.isrcs" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.isrcs:items" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.tags" }
  • AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.tags:items" }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm#genreTag", tgt: "me.linkna.lastfm#genreTag.count", kind: "prop", name: Some("count") }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.duration", kind: "prop", name: Some("duration") }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.externalUrls", kind: "prop", name: Some("externalUrls") }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.genres", kind: "prop", name: Some("genres") }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.isrcs", kind: "prop", name: Some("isrcs") }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.tags", kind: "prop", name: Some("tags") }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body.externalUrls", tgt: "me.linkna.lastfm:body.externalUrls:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body.externalUrls:items", tgt: "me.linkna.lastfm#externalUrl", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body.genres", tgt: "me.linkna.lastfm:body.genres:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body.genres:items", tgt: "me.linkna.lastfm#genreTag", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body.isrcs", tgt: "me.linkna.lastfm:body.isrcs:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body.tags", tgt: "me.linkna.lastfm:body.tags:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "me.linkna.lastfm:body.tags:items", tgt: "me.linkna.lastfm#genreTag", kind: "ref", name: None }

Migration guidance

Added

  • AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl" }
  • AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl.type" }
  • AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl.url" }
  • AddedVertex { vertex_id: "me.linkna.lastfm#genreTag" }
  • AddedVertex { vertex_id: "me.linkna.lastfm#genreTag.count" }
  • AddedVertex { vertex_id: "me.linkna.lastfm#genreTag.name" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.duration" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.externalUrls" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.externalUrls:items" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.genres" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.genres:items" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.isrcs" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.isrcs:items" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.tags" }
  • AddedVertex { vertex_id: "me.linkna.lastfm:body.tags:items" }

Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#genreTag", src: "me.linkna.lastfm#genreTag", tgt: "me.linkna.lastfm#genreTag.name", kind: "prop", name: Some("name") }
  • Breaking: RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#externalUrl", src: "me.linkna.lastfm#externalUrl", tgt: "me.linkna.lastfm#externalUrl.type", kind: "prop", name: Some("type") }
  • Breaking: RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#externalUrl", src: "me.linkna.lastfm#externalUrl", tgt: "me.linkna.lastfm#externalUrl.url", kind: "prop", name: Some("url") }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm#genreTag", tgt: "me.linkna.lastfm#genreTag.count", kind: "prop", name: Some("count") }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.duration", kind: "prop", name: Some("duration") }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.externalUrls", kind: "prop", name: Some("externalUrls") }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.genres", kind: "prop", name: Some("genres") }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.isrcs", kind: "prop", name: Some("isrcs") }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.tags", kind: "prop", name: Some("tags") }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.externalUrls", tgt: "me.linkna.lastfm:body.externalUrls:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.externalUrls:items", tgt: "me.linkna.lastfm#externalUrl", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.genres", tgt: "me.linkna.lastfm:body.genres:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.genres:items", tgt: "me.linkna.lastfm#genreTag", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.isrcs", tgt: "me.linkna.lastfm:body.isrcs:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.tags", tgt: "me.linkna.lastfm:body.tags:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.tags:items", tgt: "me.linkna.lastfm#genreTag", kind: "ref", name: None }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
4 "externalUrl": {
5 "properties": {
6 "type": {
7 "description": "MusicBrainz URL relation type (e.g. 'streaming', 'free streaming', 'youtube music video').",
8 "type": "string"
9 },
10 "url": {
11 "format": "uri",
12 "type": "string"
13 }
14 },
15 "required": [
16 "type",
17 "url"
18 ],
19 "type": "object"
20 },
21 "genreTag": {
22 "properties": {
23 "count": {
24 "type": "integer"
25 },
26 "name": {
27 "type": "string"
28 }
29 },
30 "required": [
31 "name"
32 ],
33 "type": "object"
34 },
435 "main": {
536 "description": "A Last.fm scrobble play record written by Linkname.",
637 "key": "tid",
738 "record": {
839 "properties": {
940 "artistMbId": {
1041 "description": "MusicBrainz ID for the artist.",
1142 "type": "string"
1243 },
1344 "artistNames": {
1445 "description": "Artist name(s).",
1546 "items": {
1647 "type": "string"
1748 },
1849 "type": "array"
1950 },
2051 "coverArtUrl": {
2152 "description": "URL to the album cover art.",
2253 "type": "string"
2354 },
2455 "createdAt": {
2556 "description": "When this record was created.",
2657 "format": "datetime",
2758 "type": "string"
2859 },
60 "duration": {
61 "description": "Track duration in milliseconds, from MusicBrainz.",
62 "type": "integer"
63 },
64 "externalUrls": {
65 "description": "External URL relations for the recording, from MusicBrainz.",
66 "items": {
67 "ref": "#externalUrl",
68 "type": "ref"
69 },
70 "type": "array"
71 },
72 "genres": {
73 "description": "Community-voted genres for the recording, from MusicBrainz.",
74 "items": {
75 "ref": "#genreTag",
76 "type": "ref"
77 },
78 "type": "array"
79 },
80 "isrcs": {
81 "description": "ISRC codes for the recording, from MusicBrainz.",
82 "items": {
83 "type": "string"
84 },
85 "type": "array"
86 },
2987 "originUrl": {
3088 "description": "URL to the track on Last.fm.",
3189 "format": "uri",
3290 "type": "string"
3391 },
3492 "playedTime": {
3593 "description": "When the track was played on Last.fm.",
3694 "format": "datetime",
3795 "type": "string"
3896 },
3997 "releaseMbId": {
4098 "description": "MusicBrainz ID for the release/album.",
4199 "type": "string"
42100 },
43101 "releaseName": {
44102 "description": "Album/release name.",
45103 "type": "string"
46104 },
105 "tags": {
106 "description": "Community-voted tags for the recording, from MusicBrainz.",
107 "items": {
108 "ref": "#genreTag",
109 "type": "ref"
110 },
111 "type": "array"
112 },
47113 "trackMbId": {
48114 "description": "MusicBrainz ID for the track.",
49115 "type": "string"
50116 },
51117 "trackName": {
52118 "description": "Track/song name.",
53119 "type": "string"
54120 }
55121 },
56122 "required": [
57123 "trackName",
58124 "artistNames",
59125 "createdAt"
60126 ],
61127 "type": "object"
62128 },
63129 "type": "record"
64130 }
65131 },
66132 "id": "me.linkna.lastfm",
67133 "lexicon": 1
68134}

Compare other versions