@portpowered/reference-data 0.4.7 → 0.4.8

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 (63) hide show
  1. package/generated/capabilities.json +578 -3
  2. package/generated/openapi.json +368 -39
  3. package/generated/public/docs/for-ai/capability-interfaces/media-player/1.0.md +1 -0
  4. package/generated/public/docs/for-ai/capability-interfaces/media-playlist/1.0.md +3 -0
  5. package/generated/public/docs/for-ai/capability-interfaces/media-search/1.0.md +2 -0
  6. package/generated/public/docs/for-ai/schemas/m-1.md +6 -6
  7. package/generated/public/docs/for-ai/schemas/m-2.md +6 -0
  8. package/generated/public/docs/for-ai/schemas/p-2.md +2 -0
  9. package/generated/public/docs/for-ai/schemas/s-3.md +1 -0
  10. package/generated/public/docs/for-ai/schemas.md +4 -4
  11. package/generated/public/docs/references/capability-interfaces/media-player/1.0/attributes/now-playing.yaml +30 -0
  12. package/generated/public/docs/references/capability-interfaces/media-player/1.0/configuration.yaml +30 -0
  13. package/generated/public/docs/references/capability-interfaces/media-player/1.0/messages/play-media.yaml +11 -5
  14. package/generated/public/docs/references/capability-interfaces/media-player/1.0.yaml +73 -4
  15. package/generated/public/docs/references/capability-interfaces/media-player.yaml +73 -4
  16. package/generated/public/docs/references/capability-interfaces/media-playlist/1.0/messages/get-playlist.yaml +9 -0
  17. package/generated/public/docs/references/capability-interfaces/media-playlist/1.0/messages/list-playlists.yaml +15 -0
  18. package/generated/public/docs/references/capability-interfaces/media-playlist/1.0/messages/playlist-contents.yaml +114 -0
  19. package/generated/public/docs/references/capability-interfaces/media-playlist/1.0/messages/playlists.yaml +35 -0
  20. package/generated/public/docs/references/capability-interfaces/media-playlist/1.0.yaml +184 -0
  21. package/generated/public/docs/references/capability-interfaces/media-playlist.yaml +184 -0
  22. package/generated/public/docs/references/capability-interfaces/media-search/1.0/messages/audio-media-results.yaml +67 -0
  23. package/generated/public/docs/references/capability-interfaces/media-search/1.0/messages/get-media.yaml +32 -0
  24. package/generated/public/docs/references/capability-interfaces/media-search/1.0/messages/media-details.yaml +118 -0
  25. package/generated/public/docs/references/capability-interfaces/media-search/1.0/messages/search-media.yaml +15 -1
  26. package/generated/public/docs/references/capability-interfaces/media-search/1.0.yaml +235 -1
  27. package/generated/public/docs/references/capability-interfaces/media-search.yaml +235 -1
  28. package/generated/public/docs/references/capability-interfaces/recordings/1.0/messages/list-recordings-response.yaml +11 -5
  29. package/generated/public/docs/references/capability-interfaces/recordings/1.0.yaml +10 -5
  30. package/generated/public/docs/references/capability-interfaces/recordings.yaml +10 -5
  31. package/generated/public/docs/references/manifest.json +195 -75
  32. package/generated/public/docs/references/openapi.yaml +303 -37
  33. package/generated/public/docs/references/schemas/CreateMessageTarget.json +4 -0
  34. package/generated/public/docs/references/schemas/MediaId.json +3 -1
  35. package/generated/public/docs/references/schemas/MediaPlayerInterfaceConfiguration.json +7 -0
  36. package/generated/public/docs/references/schemas/MediaPlayerInterfaceNowPlayingAttribute.json +27 -0
  37. package/generated/public/docs/references/schemas/MediaPlaylistInterfaceGetPlaylistMessage.json +11 -0
  38. package/generated/public/docs/references/schemas/MediaPlaylistInterfaceListPlaylistsMessage.json +24 -0
  39. package/generated/public/docs/references/schemas/MediaPlaylistInterfacePlaylistContentsMessage.json +37 -0
  40. package/generated/public/docs/references/schemas/MediaPlaylistInterfacePlaylistsMessage.json +26 -0
  41. package/generated/public/docs/references/schemas/MediaSearchInterfaceAudioMediaResultsMessage.json +17 -0
  42. package/generated/public/docs/references/schemas/MediaSearchInterfaceGetMediaMessage.json +30 -0
  43. package/generated/public/docs/references/schemas/MediaSearchInterfaceMediaDetailsMessage.json +43 -0
  44. package/generated/public/docs/references/schemas/MediaSearchInterfaceSearchMediaMessage.json +13 -1
  45. package/generated/public/docs/references/schemas/Playlist.json +8 -0
  46. package/generated/public/docs/references/schemas/PodcastEpisode.json +30 -0
  47. package/generated/public/docs/references/schemas/PodcastShow.json +22 -0
  48. package/generated/public/docs/references/schemas/SupportedMediaResource.json +34 -0
  49. package/generated/public/docs/references/schemas/configuration-6.json +6 -2
  50. package/generated/public/docs/references/schemas/index.json +54 -0
  51. package/generated/resources/media-player/configuration.json +37 -0
  52. package/generated/resources/media-player/message-play-media.json +3 -1
  53. package/generated/resources/media-player/state-now-playing.json +27 -0
  54. package/generated/resources/media-playlist/message-get-playlist.json +11 -0
  55. package/generated/resources/media-playlist/message-list-playlists.json +18 -0
  56. package/generated/resources/media-playlist/message-playlist-contents.json +140 -0
  57. package/generated/resources/media-playlist/message-playlists.json +46 -0
  58. package/generated/resources/media-search/message-audio-media-results.json +76 -0
  59. package/generated/resources/media-search/message-get-media.json +29 -0
  60. package/generated/resources/media-search/message-media-details.json +146 -0
  61. package/generated/resources/media-search/message-search-media.json +13 -1
  62. package/generated/resources/recordings/message-list-recordings-response.json +3 -1
  63. package/package.json +1 -1
@@ -100,18 +100,240 @@ messages:
100
100
  type: string
101
101
  description: Playlist name
102
102
  minLength: 1
103
+ ownerId:
104
+ type: string
105
+ description: Provider-scoped owner identity, when supplied by the provider.
106
+ ownerName:
107
+ type: string
108
+ description: Owner display name, useful for distinguishing owned and followed playlists.
103
109
  required:
104
110
  - id
105
111
  - name
106
112
  additionalProperties: false
107
113
  title: Playlist
108
114
  description: Playlist results
115
+ shows:
116
+ type: array
117
+ items:
118
+ type: object
119
+ description: Provider-qualified podcast series; read episodes before playback.
120
+ properties:
121
+ id:
122
+ title: MediaId
123
+ type: string
124
+ minLength: 1
125
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
126
+ pattern: >-
127
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
128
+ description: >
129
+ Exact provider resource identity. The canonical form is
130
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with
131
+ no URI version. Spotify emits audio track, playlist, album, artist, show and
132
+ episode identities. Copy an ID returned by search or library discovery; do not
133
+ send a search phrase as an ID. Legacy providers retain their own input contracts
134
+ until explicitly migrated. See https://portpowered.com/docs/media.
135
+ name:
136
+ type: string
137
+ minLength: 1
138
+ publisher:
139
+ type: string
140
+ required:
141
+ - id
142
+ - name
143
+ additionalProperties: false
144
+ title: PodcastShow
145
+ episodes:
146
+ type: array
147
+ items:
148
+ type: object
149
+ description: Provider-qualified podcast episode with selection metadata.
150
+ properties:
151
+ id:
152
+ $ref: '#/properties/shows/items/properties/id'
153
+ name:
154
+ type: string
155
+ minLength: 1
156
+ showId:
157
+ $ref: '#/properties/shows/items/properties/id'
158
+ releaseDate:
159
+ type: string
160
+ description: Provider release date; precision can be year, month or day.
161
+ releaseDatePrecision:
162
+ type: string
163
+ description: Provider date precision.
164
+ required:
165
+ - id
166
+ - name
167
+ additionalProperties: false
168
+ title: PodcastEpisode
169
+ nextToken:
170
+ type: string
171
+ minLength: 1
172
+ description: Opaque continuation for the same search; omit when exhausted.
109
173
  required:
110
174
  - artists
111
175
  - albums
112
176
  - tracks
113
177
  - playlists
114
178
  additionalProperties: false
179
+ - name: get-media
180
+ description: >-
181
+ Inspect an exact media resource or traverse an album/show. Use get-playlist for playlist
182
+ contents.
183
+ directionality: in
184
+ schema:
185
+ description: >-
186
+ Inspect an exact media resource or traverse an album/show. Use get-playlist for playlist
187
+ contents.
188
+ type: object
189
+ properties:
190
+ mediaId:
191
+ title: MediaId
192
+ type: string
193
+ minLength: 1
194
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
195
+ pattern: >-
196
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
197
+ description: >
198
+ Exact provider resource identity. The canonical form is
199
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
200
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
201
+ identities. Copy an ID returned by search or library discovery; do not send a search
202
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
203
+ migrated. See https://portpowered.com/docs/media.
204
+ maxResults:
205
+ type: integer
206
+ minimum: 1
207
+ maximum: 50
208
+ default: 20
209
+ nextToken:
210
+ type: string
211
+ minLength: 1
212
+ description: Opaque continuation for the same resource.
213
+ required:
214
+ - mediaId
215
+ additionalProperties: false
216
+ - name: media-details
217
+ description: Exact media resource details and a bounded page of its children.
218
+ directionality: out
219
+ schema:
220
+ description: Exact media resource details and a bounded page of its children.
221
+ type: object
222
+ properties:
223
+ mediaId:
224
+ title: MediaId
225
+ type: string
226
+ minLength: 1
227
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
228
+ pattern: >-
229
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
230
+ description: >
231
+ Exact provider resource identity. The canonical form is
232
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
233
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
234
+ identities. Copy an ID returned by search or library discovery; do not send a search
235
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
236
+ migrated. See https://portpowered.com/docs/media.
237
+ name:
238
+ type: string
239
+ resourceKind:
240
+ type: string
241
+ description: Provider resource kind from the media URI.
242
+ tracks:
243
+ type: array
244
+ items:
245
+ type: object
246
+ description: Track information
247
+ properties:
248
+ id:
249
+ type: string
250
+ description: Unique identifier for the track
251
+ minLength: 1
252
+ name:
253
+ type: string
254
+ description: Track name
255
+ minLength: 1
256
+ artists:
257
+ type: array
258
+ items:
259
+ type: object
260
+ description: Artist information
261
+ properties:
262
+ id:
263
+ type: string
264
+ description: Unique identifier for the artist
265
+ minLength: 1
266
+ name:
267
+ type: string
268
+ description: Artist name
269
+ minLength: 1
270
+ required:
271
+ - id
272
+ - name
273
+ additionalProperties: false
274
+ title: Artist
275
+ description: Track artists
276
+ album:
277
+ description: Track album
278
+ type: object
279
+ properties:
280
+ id:
281
+ type: string
282
+ description: Unique identifier for the album
283
+ minLength: 1
284
+ name:
285
+ type: string
286
+ description: Album name
287
+ minLength: 1
288
+ artists:
289
+ type: array
290
+ items:
291
+ $ref: '#/properties/tracks/items/properties/artists/items'
292
+ description: Album artists
293
+ required:
294
+ - id
295
+ - name
296
+ - artists
297
+ additionalProperties: false
298
+ title: Album
299
+ required:
300
+ - id
301
+ - name
302
+ - artists
303
+ - album
304
+ additionalProperties: false
305
+ title: Track
306
+ episodes:
307
+ type: array
308
+ items:
309
+ type: object
310
+ description: Provider-qualified podcast episode with selection metadata.
311
+ properties:
312
+ id:
313
+ $ref: '#/properties/mediaId'
314
+ name:
315
+ type: string
316
+ minLength: 1
317
+ showId:
318
+ $ref: '#/properties/mediaId'
319
+ releaseDate:
320
+ type: string
321
+ description: Provider release date; precision can be year, month or day.
322
+ releaseDatePrecision:
323
+ type: string
324
+ description: Provider date precision.
325
+ required:
326
+ - id
327
+ - name
328
+ additionalProperties: false
329
+ title: PodcastEpisode
330
+ nextToken:
331
+ type: string
332
+ minLength: 1
333
+ required:
334
+ - mediaId
335
+ - resourceKind
336
+ additionalProperties: false
115
337
  - name: search-media
116
338
  description: null
117
339
  directionality: in
@@ -123,7 +345,9 @@ messages:
123
345
  description: Freeform query string
124
346
  type:
125
347
  type: string
126
- description: Supported types, track, album, artist, playlist. Defaults to track
348
+ description: >-
349
+ Resource kind: track, album, artist, playlist, show or episode when advertised. Defaults
350
+ to track
127
351
  default: track
128
352
  album:
129
353
  type: string
@@ -136,6 +360,16 @@ messages:
136
360
  description: >-
137
361
  Search by year, can only be used when searching albums, years, and tracks. You can pass
138
362
  a range like 1990-2000
363
+ maxResults:
364
+ type: integer
365
+ minimum: 1
366
+ maximum: 50
367
+ default: 20
368
+ description: Maximum results on one page.
369
+ nextToken:
370
+ type: string
371
+ minLength: 1
372
+ description: Copy the opaque continuation from the previous result with the same query and filters.
139
373
  required:
140
374
  - query
141
375
  additionalProperties: false
@@ -100,18 +100,240 @@ messages:
100
100
  type: string
101
101
  description: Playlist name
102
102
  minLength: 1
103
+ ownerId:
104
+ type: string
105
+ description: Provider-scoped owner identity, when supplied by the provider.
106
+ ownerName:
107
+ type: string
108
+ description: Owner display name, useful for distinguishing owned and followed playlists.
103
109
  required:
104
110
  - id
105
111
  - name
106
112
  additionalProperties: false
107
113
  title: Playlist
108
114
  description: Playlist results
115
+ shows:
116
+ type: array
117
+ items:
118
+ type: object
119
+ description: Provider-qualified podcast series; read episodes before playback.
120
+ properties:
121
+ id:
122
+ title: MediaId
123
+ type: string
124
+ minLength: 1
125
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
126
+ pattern: >-
127
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
128
+ description: >
129
+ Exact provider resource identity. The canonical form is
130
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with
131
+ no URI version. Spotify emits audio track, playlist, album, artist, show and
132
+ episode identities. Copy an ID returned by search or library discovery; do not
133
+ send a search phrase as an ID. Legacy providers retain their own input contracts
134
+ until explicitly migrated. See https://portpowered.com/docs/media.
135
+ name:
136
+ type: string
137
+ minLength: 1
138
+ publisher:
139
+ type: string
140
+ required:
141
+ - id
142
+ - name
143
+ additionalProperties: false
144
+ title: PodcastShow
145
+ episodes:
146
+ type: array
147
+ items:
148
+ type: object
149
+ description: Provider-qualified podcast episode with selection metadata.
150
+ properties:
151
+ id:
152
+ $ref: '#/properties/shows/items/properties/id'
153
+ name:
154
+ type: string
155
+ minLength: 1
156
+ showId:
157
+ $ref: '#/properties/shows/items/properties/id'
158
+ releaseDate:
159
+ type: string
160
+ description: Provider release date; precision can be year, month or day.
161
+ releaseDatePrecision:
162
+ type: string
163
+ description: Provider date precision.
164
+ required:
165
+ - id
166
+ - name
167
+ additionalProperties: false
168
+ title: PodcastEpisode
169
+ nextToken:
170
+ type: string
171
+ minLength: 1
172
+ description: Opaque continuation for the same search; omit when exhausted.
109
173
  required:
110
174
  - artists
111
175
  - albums
112
176
  - tracks
113
177
  - playlists
114
178
  additionalProperties: false
179
+ - name: get-media
180
+ description: >-
181
+ Inspect an exact media resource or traverse an album/show. Use get-playlist for playlist
182
+ contents.
183
+ directionality: in
184
+ schema:
185
+ description: >-
186
+ Inspect an exact media resource or traverse an album/show. Use get-playlist for playlist
187
+ contents.
188
+ type: object
189
+ properties:
190
+ mediaId:
191
+ title: MediaId
192
+ type: string
193
+ minLength: 1
194
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
195
+ pattern: >-
196
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
197
+ description: >
198
+ Exact provider resource identity. The canonical form is
199
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
200
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
201
+ identities. Copy an ID returned by search or library discovery; do not send a search
202
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
203
+ migrated. See https://portpowered.com/docs/media.
204
+ maxResults:
205
+ type: integer
206
+ minimum: 1
207
+ maximum: 50
208
+ default: 20
209
+ nextToken:
210
+ type: string
211
+ minLength: 1
212
+ description: Opaque continuation for the same resource.
213
+ required:
214
+ - mediaId
215
+ additionalProperties: false
216
+ - name: media-details
217
+ description: Exact media resource details and a bounded page of its children.
218
+ directionality: out
219
+ schema:
220
+ description: Exact media resource details and a bounded page of its children.
221
+ type: object
222
+ properties:
223
+ mediaId:
224
+ title: MediaId
225
+ type: string
226
+ minLength: 1
227
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
228
+ pattern: >-
229
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
230
+ description: >
231
+ Exact provider resource identity. The canonical form is
232
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
233
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
234
+ identities. Copy an ID returned by search or library discovery; do not send a search
235
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
236
+ migrated. See https://portpowered.com/docs/media.
237
+ name:
238
+ type: string
239
+ resourceKind:
240
+ type: string
241
+ description: Provider resource kind from the media URI.
242
+ tracks:
243
+ type: array
244
+ items:
245
+ type: object
246
+ description: Track information
247
+ properties:
248
+ id:
249
+ type: string
250
+ description: Unique identifier for the track
251
+ minLength: 1
252
+ name:
253
+ type: string
254
+ description: Track name
255
+ minLength: 1
256
+ artists:
257
+ type: array
258
+ items:
259
+ type: object
260
+ description: Artist information
261
+ properties:
262
+ id:
263
+ type: string
264
+ description: Unique identifier for the artist
265
+ minLength: 1
266
+ name:
267
+ type: string
268
+ description: Artist name
269
+ minLength: 1
270
+ required:
271
+ - id
272
+ - name
273
+ additionalProperties: false
274
+ title: Artist
275
+ description: Track artists
276
+ album:
277
+ description: Track album
278
+ type: object
279
+ properties:
280
+ id:
281
+ type: string
282
+ description: Unique identifier for the album
283
+ minLength: 1
284
+ name:
285
+ type: string
286
+ description: Album name
287
+ minLength: 1
288
+ artists:
289
+ type: array
290
+ items:
291
+ $ref: '#/properties/tracks/items/properties/artists/items'
292
+ description: Album artists
293
+ required:
294
+ - id
295
+ - name
296
+ - artists
297
+ additionalProperties: false
298
+ title: Album
299
+ required:
300
+ - id
301
+ - name
302
+ - artists
303
+ - album
304
+ additionalProperties: false
305
+ title: Track
306
+ episodes:
307
+ type: array
308
+ items:
309
+ type: object
310
+ description: Provider-qualified podcast episode with selection metadata.
311
+ properties:
312
+ id:
313
+ $ref: '#/properties/mediaId'
314
+ name:
315
+ type: string
316
+ minLength: 1
317
+ showId:
318
+ $ref: '#/properties/mediaId'
319
+ releaseDate:
320
+ type: string
321
+ description: Provider release date; precision can be year, month or day.
322
+ releaseDatePrecision:
323
+ type: string
324
+ description: Provider date precision.
325
+ required:
326
+ - id
327
+ - name
328
+ additionalProperties: false
329
+ title: PodcastEpisode
330
+ nextToken:
331
+ type: string
332
+ minLength: 1
333
+ required:
334
+ - mediaId
335
+ - resourceKind
336
+ additionalProperties: false
115
337
  - name: search-media
116
338
  description: null
117
339
  directionality: in
@@ -123,7 +345,9 @@ messages:
123
345
  description: Freeform query string
124
346
  type:
125
347
  type: string
126
- description: Supported types, track, album, artist, playlist. Defaults to track
348
+ description: >-
349
+ Resource kind: track, album, artist, playlist, show or episode when advertised. Defaults
350
+ to track
127
351
  default: track
128
352
  album:
129
353
  type: string
@@ -136,6 +360,16 @@ messages:
136
360
  description: >-
137
361
  Search by year, can only be used when searching albums, years, and tracks. You can pass
138
362
  a range like 1990-2000
363
+ maxResults:
364
+ type: integer
365
+ minimum: 1
366
+ maximum: 50
367
+ default: 20
368
+ description: Maximum results on one page.
369
+ nextToken:
370
+ type: string
371
+ minLength: 1
372
+ description: Copy the opaque continuation from the previous result with the same query and filters.
139
373
  required:
140
374
  - query
141
375
  additionalProperties: false
@@ -15,11 +15,17 @@ properties:
15
15
  title: MediaId
16
16
  type: string
17
17
  minLength: 1
18
- description: >-
19
- Media IDs are a standardized identifier that Port OS uses to
20
- represent media across YouTube, Spotify, and other media providers.
21
- See https://portpowered.com/docs/media for the current media
22
- identifiers documentation.
18
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
19
+ pattern: >-
20
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
21
+ description: >
22
+ Exact provider resource identity. The canonical form is
23
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id,
24
+ with no URI version. Spotify emits audio track, playlist, album,
25
+ artist, show and episode identities. Copy an ID returned by search
26
+ or library discovery; do not send a search phrase as an ID. Legacy
27
+ providers retain their own input contracts until explicitly
28
+ migrated. See https://portpowered.com/docs/media.
23
29
  startedAt:
24
30
  type: string
25
31
  format: date-time
@@ -104,11 +104,16 @@ messages:
104
104
  title: MediaId
105
105
  type: string
106
106
  minLength: 1
107
- description: >-
108
- Media IDs are a standardized identifier that Port OS uses to represent media
109
- across YouTube, Spotify, and other media providers. See
110
- https://portpowered.com/docs/media for the current media identifiers
111
- documentation.
107
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
108
+ pattern: >-
109
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
110
+ description: >
111
+ Exact provider resource identity. The canonical form is
112
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with
113
+ no URI version. Spotify emits audio track, playlist, album, artist, show and
114
+ episode identities. Copy an ID returned by search or library discovery; do not
115
+ send a search phrase as an ID. Legacy providers retain their own input contracts
116
+ until explicitly migrated. See https://portpowered.com/docs/media.
112
117
  startedAt:
113
118
  type: string
114
119
  format: date-time
@@ -104,11 +104,16 @@ messages:
104
104
  title: MediaId
105
105
  type: string
106
106
  minLength: 1
107
- description: >-
108
- Media IDs are a standardized identifier that Port OS uses to represent media
109
- across YouTube, Spotify, and other media providers. See
110
- https://portpowered.com/docs/media for the current media identifiers
111
- documentation.
107
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
108
+ pattern: >-
109
+ ^(portos-media://portpowered[.]com/[a-z][a-z0-9_-]*/(audio|video|image)/[a-z][a-z0-9_-]*/([^/?#\s]|%[0-9A-Fa-f]{2})+|https?://[^\s]+|portos://[^\s]+|youtube:video:[A-Za-z0-9_-]+)$
110
+ description: >
111
+ Exact provider resource identity. The canonical form is
112
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with
113
+ no URI version. Spotify emits audio track, playlist, album, artist, show and
114
+ episode identities. Copy an ID returned by search or library discovery; do not
115
+ send a search phrase as an ID. Legacy providers retain their own input contracts
116
+ until explicitly migrated. See https://portpowered.com/docs/media.
112
117
  startedAt:
113
118
  type: string
114
119
  format: date-time