@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
@@ -0,0 +1,30 @@
1
+ description: >-
2
+ Media identity observed on this route. Active false means the provider session
3
+ is on another target; it does not prove the speaker is silent through other
4
+ providers.
5
+ type: object
6
+ properties:
7
+ active:
8
+ type: boolean
9
+ mediaId:
10
+ title: MediaId
11
+ type: string
12
+ minLength: 1
13
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
14
+ pattern: >-
15
+ ^(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_-]+)$
16
+ description: >
17
+ Exact provider resource identity. The canonical form is
18
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id,
19
+ with no URI version. Spotify emits audio track, playlist, album, artist,
20
+ show and episode identities. Copy an ID returned by search or library
21
+ discovery; do not send a search phrase as an ID. Legacy providers retain
22
+ their own input contracts until explicitly migrated. See
23
+ https://portpowered.com/docs/media.
24
+ contextMediaId:
25
+ $ref: '#/properties/mediaId'
26
+ name:
27
+ type: string
28
+ required:
29
+ - active
30
+ additionalProperties: false
@@ -3,6 +3,36 @@ description: >-
3
3
  playback. Read playback state and use only the commands supported by the connected player.
4
4
  type: object
5
5
  properties:
6
+ supportedMediaResources:
7
+ type: array
8
+ description: >-
9
+ Exact play-media URI combinations accepted by this route. Member or endpoint unions do not
10
+ imply support by every route.
11
+ items:
12
+ title: SupportedMediaResource
13
+ description: A provider, media type and resource-kind combination accepted by a control route.
14
+ type: object
15
+ properties:
16
+ provider:
17
+ $ref: '#/properties/supportedAudioProviders/items'
18
+ mediaType:
19
+ type: string
20
+ enum:
21
+ - AUDIO
22
+ - VIDEO
23
+ - IMAGE
24
+ resourceKinds:
25
+ type: array
26
+ minItems: 1
27
+ uniqueItems: true
28
+ items:
29
+ type: string
30
+ description: Lowercase resource-kind segment from the provider URI.
31
+ required:
32
+ - provider
33
+ - mediaType
34
+ - resourceKinds
35
+ additionalProperties: false
6
36
  supportedAudioProviders:
7
37
  type: array
8
38
  uniqueItems: true
@@ -4,11 +4,17 @@ properties:
4
4
  title: MediaId
5
5
  type: string
6
6
  minLength: 1
7
- description: >-
8
- Media IDs are a standardized identifier that Port OS uses to represent
9
- media across YouTube, Spotify, and other media providers. See
10
- https://portpowered.com/docs/media for the current media identifiers
11
- documentation.
7
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
8
+ pattern: >-
9
+ ^(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_-]+)$
10
+ description: >
11
+ Exact provider resource identity. The canonical form is
12
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id,
13
+ with no URI version. Spotify emits audio track, playlist, album, artist,
14
+ show and episode identities. Copy an ID returned by search or library
15
+ discovery; do not send a search phrase as an ID. Legacy providers retain
16
+ their own input contracts until explicitly migrated. See
17
+ https://portpowered.com/docs/media.
12
18
  required:
13
19
  - mediaId
14
20
  additionalProperties: false
@@ -144,10 +144,16 @@ messages:
144
144
  title: MediaId
145
145
  type: string
146
146
  minLength: 1
147
- description: >-
148
- Media IDs are a standardized identifier that Port OS uses to represent media across
149
- YouTube, Spotify, and other media providers. See https://portpowered.com/docs/media for
150
- the current media identifiers documentation.
147
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
148
+ pattern: >-
149
+ ^(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_-]+)$
150
+ description: >
151
+ Exact provider resource identity. The canonical form is
152
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
153
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
154
+ identities. Copy an ID returned by search or library discovery; do not send a search
155
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
156
+ migrated. See https://portpowered.com/docs/media.
151
157
  required:
152
158
  - mediaId
153
159
  additionalProperties: false
@@ -288,6 +294,39 @@ messages:
288
294
  type: object
289
295
  additionalProperties: false
290
296
  attributes:
297
+ - name: now-playing
298
+ description: >-
299
+ Media identity observed on this route. Active false means the provider session is on another
300
+ target; it does not prove the speaker is silent through other providers.
301
+ schema:
302
+ description: >-
303
+ Media identity observed on this route. Active false means the provider session is on another
304
+ target; it does not prove the speaker is silent through other providers.
305
+ type: object
306
+ properties:
307
+ active:
308
+ type: boolean
309
+ mediaId:
310
+ title: MediaId
311
+ type: string
312
+ minLength: 1
313
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
314
+ pattern: >-
315
+ ^(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_-]+)$
316
+ description: >
317
+ Exact provider resource identity. The canonical form is
318
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
319
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
320
+ identities. Copy an ID returned by search or library discovery; do not send a search
321
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
322
+ migrated. See https://portpowered.com/docs/media.
323
+ contextMediaId:
324
+ $ref: '#/properties/mediaId'
325
+ name:
326
+ type: string
327
+ required:
328
+ - active
329
+ additionalProperties: false
291
330
  - name: playback-speed
292
331
  description: null
293
332
  schema:
@@ -324,6 +363,36 @@ configuration:
324
363
  playback. Read playback state and use only the commands supported by the connected player.
325
364
  type: object
326
365
  properties:
366
+ supportedMediaResources:
367
+ type: array
368
+ description: >-
369
+ Exact play-media URI combinations accepted by this route. Member or endpoint unions do not
370
+ imply support by every route.
371
+ items:
372
+ title: SupportedMediaResource
373
+ description: A provider, media type and resource-kind combination accepted by a control route.
374
+ type: object
375
+ properties:
376
+ provider:
377
+ $ref: '#/properties/supportedAudioProviders/items'
378
+ mediaType:
379
+ type: string
380
+ enum:
381
+ - AUDIO
382
+ - VIDEO
383
+ - IMAGE
384
+ resourceKinds:
385
+ type: array
386
+ minItems: 1
387
+ uniqueItems: true
388
+ items:
389
+ type: string
390
+ description: Lowercase resource-kind segment from the provider URI.
391
+ required:
392
+ - provider
393
+ - mediaType
394
+ - resourceKinds
395
+ additionalProperties: false
327
396
  supportedAudioProviders:
328
397
  type: array
329
398
  uniqueItems: true
@@ -144,10 +144,16 @@ messages:
144
144
  title: MediaId
145
145
  type: string
146
146
  minLength: 1
147
- description: >-
148
- Media IDs are a standardized identifier that Port OS uses to represent media across
149
- YouTube, Spotify, and other media providers. See https://portpowered.com/docs/media for
150
- the current media identifiers documentation.
147
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
148
+ pattern: >-
149
+ ^(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_-]+)$
150
+ description: >
151
+ Exact provider resource identity. The canonical form is
152
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
153
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
154
+ identities. Copy an ID returned by search or library discovery; do not send a search
155
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
156
+ migrated. See https://portpowered.com/docs/media.
151
157
  required:
152
158
  - mediaId
153
159
  additionalProperties: false
@@ -288,6 +294,39 @@ messages:
288
294
  type: object
289
295
  additionalProperties: false
290
296
  attributes:
297
+ - name: now-playing
298
+ description: >-
299
+ Media identity observed on this route. Active false means the provider session is on another
300
+ target; it does not prove the speaker is silent through other providers.
301
+ schema:
302
+ description: >-
303
+ Media identity observed on this route. Active false means the provider session is on another
304
+ target; it does not prove the speaker is silent through other providers.
305
+ type: object
306
+ properties:
307
+ active:
308
+ type: boolean
309
+ mediaId:
310
+ title: MediaId
311
+ type: string
312
+ minLength: 1
313
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
314
+ pattern: >-
315
+ ^(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_-]+)$
316
+ description: >
317
+ Exact provider resource identity. The canonical form is
318
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
319
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
320
+ identities. Copy an ID returned by search or library discovery; do not send a search
321
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
322
+ migrated. See https://portpowered.com/docs/media.
323
+ contextMediaId:
324
+ $ref: '#/properties/mediaId'
325
+ name:
326
+ type: string
327
+ required:
328
+ - active
329
+ additionalProperties: false
291
330
  - name: playback-speed
292
331
  description: null
293
332
  schema:
@@ -324,6 +363,36 @@ configuration:
324
363
  playback. Read playback state and use only the commands supported by the connected player.
325
364
  type: object
326
365
  properties:
366
+ supportedMediaResources:
367
+ type: array
368
+ description: >-
369
+ Exact play-media URI combinations accepted by this route. Member or endpoint unions do not
370
+ imply support by every route.
371
+ items:
372
+ title: SupportedMediaResource
373
+ description: A provider, media type and resource-kind combination accepted by a control route.
374
+ type: object
375
+ properties:
376
+ provider:
377
+ $ref: '#/properties/supportedAudioProviders/items'
378
+ mediaType:
379
+ type: string
380
+ enum:
381
+ - AUDIO
382
+ - VIDEO
383
+ - IMAGE
384
+ resourceKinds:
385
+ type: array
386
+ minItems: 1
387
+ uniqueItems: true
388
+ items:
389
+ type: string
390
+ description: Lowercase resource-kind segment from the provider URI.
391
+ required:
392
+ - provider
393
+ - mediaType
394
+ - resourceKinds
395
+ additionalProperties: false
327
396
  supportedAudioProviders:
328
397
  type: array
329
398
  uniqueItems: true
@@ -4,6 +4,15 @@ properties:
4
4
  type: string
5
5
  description: ID of the playlist to retrieve
6
6
  minLength: 1
7
+ maxResults:
8
+ type: integer
9
+ minimum: 1
10
+ maximum: 50
11
+ default: 20
12
+ nextToken:
13
+ type: string
14
+ minLength: 1
15
+ description: Opaque continuation for the same playlist.
7
16
  required:
8
17
  - playlistId
9
18
  additionalProperties: false
@@ -0,0 +1,15 @@
1
+ description: >-
2
+ List the connected customer's owned or followed playlists; use search-media
3
+ for catalog search.
4
+ type: object
5
+ properties:
6
+ maxResults:
7
+ type: integer
8
+ minimum: 1
9
+ maximum: 50
10
+ default: 20
11
+ nextToken:
12
+ type: string
13
+ minLength: 1
14
+ required: []
15
+ additionalProperties: false
@@ -0,0 +1,114 @@
1
+ description: A bounded playlist page containing playable tracks or episodes.
2
+ type: object
3
+ properties:
4
+ playlistId:
5
+ title: MediaId
6
+ type: string
7
+ minLength: 1
8
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
9
+ pattern: >-
10
+ ^(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_-]+)$
11
+ description: >
12
+ Exact provider resource identity. The canonical form is
13
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id,
14
+ with no URI version. Spotify emits audio track, playlist, album, artist,
15
+ show and episode identities. Copy an ID returned by search or library
16
+ discovery; do not send a search phrase as an ID. Legacy providers retain
17
+ their own input contracts until explicitly migrated. See
18
+ https://portpowered.com/docs/media.
19
+ tracks:
20
+ type: array
21
+ items:
22
+ type: object
23
+ description: Track information
24
+ properties:
25
+ id:
26
+ type: string
27
+ description: Unique identifier for the track
28
+ minLength: 1
29
+ name:
30
+ type: string
31
+ description: Track name
32
+ minLength: 1
33
+ artists:
34
+ type: array
35
+ items:
36
+ type: object
37
+ description: Artist information
38
+ properties:
39
+ id:
40
+ type: string
41
+ description: Unique identifier for the artist
42
+ minLength: 1
43
+ name:
44
+ type: string
45
+ description: Artist name
46
+ minLength: 1
47
+ required:
48
+ - id
49
+ - name
50
+ additionalProperties: false
51
+ title: Artist
52
+ description: Track artists
53
+ album:
54
+ description: Track album
55
+ type: object
56
+ properties:
57
+ id:
58
+ type: string
59
+ description: Unique identifier for the album
60
+ minLength: 1
61
+ name:
62
+ type: string
63
+ description: Album name
64
+ minLength: 1
65
+ artists:
66
+ type: array
67
+ items:
68
+ $ref: '#/properties/tracks/items/properties/artists/items'
69
+ description: Album artists
70
+ required:
71
+ - id
72
+ - name
73
+ - artists
74
+ additionalProperties: false
75
+ title: Album
76
+ required:
77
+ - id
78
+ - name
79
+ - artists
80
+ - album
81
+ additionalProperties: false
82
+ title: Track
83
+ episodes:
84
+ type: array
85
+ items:
86
+ type: object
87
+ description: Provider-qualified podcast episode with selection metadata.
88
+ properties:
89
+ id:
90
+ $ref: '#/properties/playlistId'
91
+ name:
92
+ type: string
93
+ minLength: 1
94
+ showId:
95
+ $ref: '#/properties/playlistId'
96
+ releaseDate:
97
+ type: string
98
+ description: Provider release date; precision can be year, month or day.
99
+ releaseDatePrecision:
100
+ type: string
101
+ description: Provider date precision.
102
+ required:
103
+ - id
104
+ - name
105
+ additionalProperties: false
106
+ title: PodcastEpisode
107
+ nextToken:
108
+ type: string
109
+ minLength: 1
110
+ required:
111
+ - playlistId
112
+ - tracks
113
+ - episodes
114
+ additionalProperties: false
@@ -0,0 +1,35 @@
1
+ description: A page of the connected customer's playlists with exact resource IDs.
2
+ type: object
3
+ properties:
4
+ playlists:
5
+ type: array
6
+ items:
7
+ type: object
8
+ properties:
9
+ id:
10
+ type: string
11
+ description: Unique identifier for the playlist
12
+ minLength: 1
13
+ name:
14
+ type: string
15
+ description: Playlist name
16
+ minLength: 1
17
+ ownerId:
18
+ type: string
19
+ description: Provider-scoped owner identity, when supplied by the provider.
20
+ ownerName:
21
+ type: string
22
+ description: >-
23
+ Owner display name, useful for distinguishing owned and followed
24
+ playlists.
25
+ required:
26
+ - id
27
+ - name
28
+ additionalProperties: false
29
+ title: Playlist
30
+ nextToken:
31
+ type: string
32
+ minLength: 1
33
+ required:
34
+ - playlists
35
+ additionalProperties: false
@@ -53,9 +53,39 @@ messages:
53
53
  type: string
54
54
  description: ID of the playlist to retrieve
55
55
  minLength: 1
56
+ maxResults:
57
+ type: integer
58
+ minimum: 1
59
+ maximum: 50
60
+ default: 20
61
+ nextToken:
62
+ type: string
63
+ minLength: 1
64
+ description: Opaque continuation for the same playlist.
56
65
  required:
57
66
  - playlistId
58
67
  additionalProperties: false
68
+ - name: list-playlists
69
+ description: >-
70
+ List the connected customer's owned or followed playlists; use search-media for catalog
71
+ search.
72
+ directionality: in
73
+ schema:
74
+ description: >-
75
+ List the connected customer's owned or followed playlists; use search-media for catalog
76
+ search.
77
+ type: object
78
+ properties:
79
+ maxResults:
80
+ type: integer
81
+ minimum: 1
82
+ maximum: 50
83
+ default: 20
84
+ nextToken:
85
+ type: string
86
+ minLength: 1
87
+ required: []
88
+ additionalProperties: false
59
89
  - name: play-playlist
60
90
  description: null
61
91
  directionality: in
@@ -72,6 +102,160 @@ messages:
72
102
  required:
73
103
  - playlistId
74
104
  additionalProperties: false
105
+ - name: playlist-contents
106
+ description: A bounded playlist page containing playable tracks or episodes.
107
+ directionality: out
108
+ schema:
109
+ description: A bounded playlist page containing playable tracks or episodes.
110
+ type: object
111
+ properties:
112
+ playlistId:
113
+ title: MediaId
114
+ type: string
115
+ minLength: 1
116
+ example: portos-media://portpowered.com/spotify/audio/track/Ab123
117
+ pattern: >-
118
+ ^(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_-]+)$
119
+ description: >
120
+ Exact provider resource identity. The canonical form is
121
+ portos-media://portpowered.com/provider/media-type/resource-kind/resource-id, with no
122
+ URI version. Spotify emits audio track, playlist, album, artist, show and episode
123
+ identities. Copy an ID returned by search or library discovery; do not send a search
124
+ phrase as an ID. Legacy providers retain their own input contracts until explicitly
125
+ migrated. See https://portpowered.com/docs/media.
126
+ tracks:
127
+ type: array
128
+ items:
129
+ type: object
130
+ description: Track information
131
+ properties:
132
+ id:
133
+ type: string
134
+ description: Unique identifier for the track
135
+ minLength: 1
136
+ name:
137
+ type: string
138
+ description: Track name
139
+ minLength: 1
140
+ artists:
141
+ type: array
142
+ items:
143
+ type: object
144
+ description: Artist information
145
+ properties:
146
+ id:
147
+ type: string
148
+ description: Unique identifier for the artist
149
+ minLength: 1
150
+ name:
151
+ type: string
152
+ description: Artist name
153
+ minLength: 1
154
+ required:
155
+ - id
156
+ - name
157
+ additionalProperties: false
158
+ title: Artist
159
+ description: Track artists
160
+ album:
161
+ description: Track album
162
+ type: object
163
+ properties:
164
+ id:
165
+ type: string
166
+ description: Unique identifier for the album
167
+ minLength: 1
168
+ name:
169
+ type: string
170
+ description: Album name
171
+ minLength: 1
172
+ artists:
173
+ type: array
174
+ items:
175
+ $ref: '#/properties/tracks/items/properties/artists/items'
176
+ description: Album artists
177
+ required:
178
+ - id
179
+ - name
180
+ - artists
181
+ additionalProperties: false
182
+ title: Album
183
+ required:
184
+ - id
185
+ - name
186
+ - artists
187
+ - album
188
+ additionalProperties: false
189
+ title: Track
190
+ episodes:
191
+ type: array
192
+ items:
193
+ type: object
194
+ description: Provider-qualified podcast episode with selection metadata.
195
+ properties:
196
+ id:
197
+ $ref: '#/properties/playlistId'
198
+ name:
199
+ type: string
200
+ minLength: 1
201
+ showId:
202
+ $ref: '#/properties/playlistId'
203
+ releaseDate:
204
+ type: string
205
+ description: Provider release date; precision can be year, month or day.
206
+ releaseDatePrecision:
207
+ type: string
208
+ description: Provider date precision.
209
+ required:
210
+ - id
211
+ - name
212
+ additionalProperties: false
213
+ title: PodcastEpisode
214
+ nextToken:
215
+ type: string
216
+ minLength: 1
217
+ required:
218
+ - playlistId
219
+ - tracks
220
+ - episodes
221
+ additionalProperties: false
222
+ - name: playlists
223
+ description: A page of the connected customer's playlists with exact resource IDs.
224
+ directionality: out
225
+ schema:
226
+ description: A page of the connected customer's playlists with exact resource IDs.
227
+ type: object
228
+ properties:
229
+ playlists:
230
+ type: array
231
+ items:
232
+ type: object
233
+ properties:
234
+ id:
235
+ type: string
236
+ description: Unique identifier for the playlist
237
+ minLength: 1
238
+ name:
239
+ type: string
240
+ description: Playlist name
241
+ minLength: 1
242
+ ownerId:
243
+ type: string
244
+ description: Provider-scoped owner identity, when supplied by the provider.
245
+ ownerName:
246
+ type: string
247
+ description: Owner display name, useful for distinguishing owned and followed playlists.
248
+ required:
249
+ - id
250
+ - name
251
+ additionalProperties: false
252
+ title: Playlist
253
+ nextToken:
254
+ type: string
255
+ minLength: 1
256
+ required:
257
+ - playlists
258
+ additionalProperties: false
75
259
  - name: remove-from-playlist
76
260
  description: null
77
261
  directionality: in