@portpowered/reference-data 0.4.5 → 0.4.7

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 (54) hide show
  1. package/generated/capabilities.json +135 -4
  2. package/generated/guides.json +2 -2
  3. package/generated/openapi.json +225 -14
  4. package/generated/public/docs/for-ai/api-catalog.md +123 -0
  5. package/generated/public/docs/for-ai/capability-interfaces/brightness/1.0.md +1 -0
  6. package/generated/public/docs/for-ai/capability-interfaces/media-player/1.0.md +2 -1
  7. package/generated/public/docs/for-ai/guides/lighting.md +18 -2
  8. package/generated/public/docs/for-ai/guides/using-the-api.md +19 -1
  9. package/generated/public/docs/for-ai/index.md +1 -0
  10. package/generated/public/docs/for-ai/operations/endpointQuery.md +52 -7
  11. package/generated/public/docs/for-ai/schemas/b-1.md +1 -0
  12. package/generated/public/docs/for-ai/schemas/m-1.md +2 -2
  13. package/generated/public/docs/for-ai/schemas/m-2.md +2 -0
  14. package/generated/public/docs/for-ai/schemas.md +3 -3
  15. package/generated/public/docs/references/authorization.json +6 -1
  16. package/generated/public/docs/references/authorization.yaml +3 -0
  17. package/generated/public/docs/references/capability-interfaces/brightness/1.0/messages/adjust-brightness.yaml +12 -0
  18. package/generated/public/docs/references/capability-interfaces/brightness/1.0.yaml +18 -0
  19. package/generated/public/docs/references/capability-interfaces/brightness.yaml +18 -0
  20. package/generated/public/docs/references/capability-interfaces/keypad-input/1.0/configuration.yaml +1 -0
  21. package/generated/public/docs/references/capability-interfaces/keypad-input/1.0/messages/send-key.yaml +1 -0
  22. package/generated/public/docs/references/capability-interfaces/keypad-input/1.0.yaml +2 -0
  23. package/generated/public/docs/references/capability-interfaces/keypad-input.yaml +2 -0
  24. package/generated/public/docs/references/capability-interfaces/media-player/1.0/configuration.yaml +40 -0
  25. package/generated/public/docs/references/capability-interfaces/media-player/1.0/messages/fast-forward.yaml +5 -0
  26. package/generated/public/docs/references/capability-interfaces/media-player/1.0/messages/search-and-play.yaml +39 -1
  27. package/generated/public/docs/references/capability-interfaces/media-player/1.0.yaml +89 -2
  28. package/generated/public/docs/references/capability-interfaces/media-player.yaml +89 -2
  29. package/generated/public/docs/references/capability-interfaces/speech-synthesizer/1.0/configuration.yaml +14 -0
  30. package/generated/public/docs/references/capability-interfaces/speech-synthesizer/1.0/messages/speak.yaml +7 -0
  31. package/generated/public/docs/references/capability-interfaces/speech-synthesizer/1.0.yaml +22 -1
  32. package/generated/public/docs/references/capability-interfaces/speech-synthesizer.yaml +22 -1
  33. package/generated/public/docs/references/manifest.json +253 -77
  34. package/generated/public/docs/references/openapi.yaml +215 -9
  35. package/generated/public/docs/references/schemas/BrightnessInterfaceAdjustBrightnessMessage.json +21 -0
  36. package/generated/public/docs/references/schemas/EndpointQueryRequest.json +32 -4
  37. package/generated/public/docs/references/schemas/KeypadInputInterfaceConfiguration.json +1 -0
  38. package/generated/public/docs/references/schemas/KeypadInputInterfaceSendKeyMessage.json +1 -0
  39. package/generated/public/docs/references/schemas/MediaPlayerInterfaceConfiguration.json +24 -0
  40. package/generated/public/docs/references/schemas/MediaPlayerInterfaceFastForwardMessage.json +11 -0
  41. package/generated/public/docs/references/schemas/MediaPlayerInterfaceSearchAndPlayMessage.json +23 -1
  42. package/generated/public/docs/references/schemas/MediaProvider.json +37 -0
  43. package/generated/public/docs/references/schemas/SpeechInput.json +7 -1
  44. package/generated/public/docs/references/schemas/SpeechSynthesizerInterfaceConfiguration.json +13 -0
  45. package/generated/public/docs/references/schemas/index.json +18 -0
  46. package/generated/resources/brightness/message-adjust-brightness.json +15 -0
  47. package/generated/resources/keypad-input/configuration.json +1 -0
  48. package/generated/resources/keypad-input/message-send-key.json +1 -0
  49. package/generated/resources/media-player/configuration.json +41 -0
  50. package/generated/resources/media-player/message-fast-forward.json +5 -0
  51. package/generated/resources/media-player/message-search-and-play.json +36 -1
  52. package/generated/resources/speech-synthesizer/configuration.json +18 -1
  53. package/generated/resources/speech-synthesizer/message-speak.json +7 -1
  54. package/package.json +1 -1
@@ -483,6 +483,26 @@
483
483
  "version": "1.0",
484
484
  "description": "Brightness sets how bright a connected device should be and reports its current level. Use it to dim a light for the evening or restore a brighter setting for work.",
485
485
  "messages": [
486
+ {
487
+ "name": "adjust-brightness",
488
+ "description": "Adjust brightness by a signed number of percentage points. The endpoint must advertise this message separately from set-brightness.",
489
+ "directionality": "in",
490
+ "schema": {
491
+ "description": "Adjust brightness by a signed number of percentage points. The endpoint must advertise this message separately from set-brightness.",
492
+ "type": "object",
493
+ "properties": {
494
+ "brightnessDelta": {
495
+ "type": "integer",
496
+ "minimum": -100,
497
+ "maximum": 100
498
+ }
499
+ },
500
+ "required": [
501
+ "brightnessDelta"
502
+ ],
503
+ "additionalProperties": false
504
+ }
505
+ },
486
506
  {
487
507
  "name": "set-brightness",
488
508
  "description": null,
@@ -3816,6 +3836,7 @@
3816
3836
  "LEFT",
3817
3837
  "RIGHT",
3818
3838
  "SELECT",
3839
+ "HOME",
3819
3840
  "BACK",
3820
3841
  "EXIT",
3821
3842
  "MENU",
@@ -3876,6 +3897,7 @@
3876
3897
  "LEFT",
3877
3898
  "RIGHT",
3878
3899
  "SELECT",
3900
+ "HOME",
3879
3901
  "BACK",
3880
3902
  "EXIT",
3881
3903
  "MENU",
@@ -4317,6 +4339,16 @@
4317
4339
  "additionalProperties": false
4318
4340
  }
4319
4341
  },
4342
+ {
4343
+ "name": "fast-forward",
4344
+ "description": "Begin provider-defined fast-forward playback. This does not seek by a specific duration; use skip-forward or seek for a known position change.",
4345
+ "directionality": "in",
4346
+ "schema": {
4347
+ "description": "Begin provider-defined fast-forward playback. This does not seek by a specific duration; use skip-forward or seek for a known position change.",
4348
+ "type": "object",
4349
+ "additionalProperties": false
4350
+ }
4351
+ },
4320
4352
  {
4321
4353
  "name": "next",
4322
4354
  "description": null,
@@ -4457,15 +4489,50 @@
4457
4489
  },
4458
4490
  {
4459
4491
  "name": "search-and-play",
4460
- "description": null,
4492
+ "description": "Search for and play media by title or query using a service advertised by the endpoint. Omitting mediaType retains audio search behavior; video-only endpoints may default to video.",
4461
4493
  "directionality": "in",
4462
4494
  "schema": {
4495
+ "description": "Search for and play media by title or query using a service advertised by the endpoint. Omitting mediaType retains audio search behavior; video-only endpoints may default to video.",
4463
4496
  "type": "object",
4464
4497
  "properties": {
4465
4498
  "query": {
4466
4499
  "type": "string",
4467
- "description": "Query to search for audio content",
4500
+ "description": "Query to search for media content",
4468
4501
  "minLength": 1
4502
+ },
4503
+ "provider": {
4504
+ "type": "string",
4505
+ "description": "Media service identifier. A provider enum value does not imply that every endpoint supports that service; use the endpoint's advertised provider lists.",
4506
+ "enum": [
4507
+ "SPOTIFY",
4508
+ "AMAZON_MUSIC",
4509
+ "APPLE_MUSIC",
4510
+ "AUDIBLE",
4511
+ "TUNE_IN",
4512
+ "PANDORA",
4513
+ "IHEART_RADIO",
4514
+ "SIRIUSXM",
4515
+ "DEEZER",
4516
+ "TIDAL",
4517
+ "YOUTUBE",
4518
+ "NETFLIX",
4519
+ "PRIME_VIDEO",
4520
+ "DAILYMOTION"
4521
+ ]
4522
+ },
4523
+ "mediaType": {
4524
+ "type": "string",
4525
+ "enum": [
4526
+ "AUDIO",
4527
+ "VIDEO"
4528
+ ],
4529
+ "description": "Media search domain. The endpoint must advertise support for the selected type."
4530
+ },
4531
+ "timerSeconds": {
4532
+ "type": "integer",
4533
+ "minimum": 1,
4534
+ "maximum": 86400,
4535
+ "description": "Optional provider playback timer in seconds."
4469
4536
  }
4470
4537
  },
4471
4538
  "required": [
@@ -4593,6 +4660,47 @@
4593
4660
  "description": "Media players select media by its Port OS media ID, play supplied audio or a URI, and control playback. Read playback state and use only the commands supported by the connected player.",
4594
4661
  "type": "object",
4595
4662
  "properties": {
4663
+ "supportedAudioProviders": {
4664
+ "type": "array",
4665
+ "uniqueItems": true,
4666
+ "description": "Audio services accepted by search-and-play on this endpoint. These describe command support, not active subscriptions.",
4667
+ "items": {
4668
+ "type": "string",
4669
+ "description": "Media service identifier. A provider enum value does not imply that every endpoint supports that service; use the endpoint's advertised provider lists.",
4670
+ "enum": [
4671
+ "SPOTIFY",
4672
+ "AMAZON_MUSIC",
4673
+ "APPLE_MUSIC",
4674
+ "AUDIBLE",
4675
+ "TUNE_IN",
4676
+ "PANDORA",
4677
+ "IHEART_RADIO",
4678
+ "SIRIUSXM",
4679
+ "DEEZER",
4680
+ "TIDAL",
4681
+ "YOUTUBE",
4682
+ "NETFLIX",
4683
+ "PRIME_VIDEO",
4684
+ "DAILYMOTION"
4685
+ ]
4686
+ }
4687
+ },
4688
+ "supportedVideoProviders": {
4689
+ "type": "array",
4690
+ "uniqueItems": true,
4691
+ "description": "Video services accepted by search-and-play on this endpoint. These describe command support, not installed applications or active subscriptions.",
4692
+ "items": {
4693
+ "$ref": "#/properties/supportedAudioProviders/items"
4694
+ }
4695
+ },
4696
+ "defaultAudioProvider": {
4697
+ "$ref": "#/properties/supportedAudioProviders/items",
4698
+ "description": "Default service for an audio search. Must be in supportedAudioProviders."
4699
+ },
4700
+ "defaultVideoProvider": {
4701
+ "$ref": "#/properties/supportedAudioProviders/items",
4702
+ "description": "Default service for a video search. Must be in supportedVideoProviders."
4703
+ },
4596
4704
  "supportedPlaybackStates": {
4597
4705
  "type": "array",
4598
4706
  "items": {
@@ -9066,11 +9174,17 @@
9066
9174
  "type": {
9067
9175
  "type": "string",
9068
9176
  "enum": [
9069
- "SSML"
9177
+ "SSML",
9178
+ "CANNED_TTS"
9070
9179
  ]
9071
9180
  },
9072
9181
  "ssml": {
9073
9182
  "type": "string"
9183
+ },
9184
+ "cannedTtsStringId": {
9185
+ "type": "string",
9186
+ "minLength": 1,
9187
+ "description": "Provider-defined canned speech identifier; supported only by integrations advertising canned speech."
9074
9188
  }
9075
9189
  },
9076
9190
  "title": "SpeechInput"
@@ -9081,7 +9195,24 @@
9081
9195
  }
9082
9196
  ],
9083
9197
  "attributes": [],
9084
- "configuration": null
9198
+ "configuration": {
9199
+ "type": "object",
9200
+ "properties": {
9201
+ "supportedInputTypes": {
9202
+ "type": "array",
9203
+ "uniqueItems": true,
9204
+ "items": {
9205
+ "type": "string",
9206
+ "enum": [
9207
+ "SSML",
9208
+ "CANNED_TTS"
9209
+ ]
9210
+ }
9211
+ }
9212
+ },
9213
+ "additionalProperties": false,
9214
+ "description": "Speech synthesizers accept a request to speak. Use them to send spoken output to a connected device or integration."
9215
+ }
9085
9216
  },
9086
9217
  {
9087
9218
  "name": "temperature-sensor",
@@ -50,7 +50,7 @@
50
50
  {
51
51
  "id": "lighting",
52
52
  "title": "Control lights and distinguish switches and plugs",
53
- "content": "# Control lights and distinguish switches and plugs\n\nStart with authorized endpoint discovery and inspect capability declarations. A room name can be ambiguous; select by full ID and group path or ask the user. A power-capable plug or switch is not automatically a light.\n\nFor one bulb, read its power/brightness/color message schemas in [the capability directory](/docs/for-ai/capability-interfaces.md). Use the exact namespace, version, message name, units and constraints returned. [The quickstart](/docs/for-ai/guides/quickstart.md) shows the generic dispatch envelope.\n\nFor “all lights,” include explicitly authorized shared lights and the user-requested home/group scope. Complete pagination, exclude disabled/unavailable unsupported targets as documented and deduplicate nested groups. Do not broaden the set to every power-capable endpoint. Use the existing query/dispatch contract if it supports the selection; otherwise enumerate the fixed target set and report each result.\n\nA batch can partially succeed. Report selected, accepted, failed and unresolved targets separately. Read fresh state before claiming all lights changed. A lost response does not justify repeating relative brightness adjustments. See [authorization rules](/docs/for-ai/guides/authorization-rules.md).\n",
53
+ "content": "# Control lights and distinguish switches and plugs\n\nStart with authorized endpoint discovery and inspect capability declarations. A room name can be ambiguous; select by full ID and group path or ask the user. A power-capable plug or switch is not automatically a light.\n\nFor one bulb, read its power/brightness/color message schemas in [the capability directory](/docs/for-ai/capability-interfaces.md). Use the exact namespace, version, message name, units and constraints returned. [The quickstart](/docs/for-ai/guides/quickstart.md) shows the generic dispatch envelope.\n\nFor “all lights,” use [endpointQuery](/docs/for-ai/operations/endpointQuery.md): POST /endpoint-query with endpoint:read. Its results include readable shared endpoints from other owners. Start with the LIGHT and LIGHTBULB types below, then limit the results to the user's requested home or group.\n\n```json\n{\n \"query\": {\n \"or\": [\n {\"match\": {\"key\": \"type\", \"value\": \"LIGHT\"}},\n {\"match\": {\"key\": \"type\", \"value\": \"LIGHTBULB\"}}\n ]\n },\n \"paginationContext\": {\"maxResults\": 25}\n}\n```\n\nFor a room, first resolve its full group ID using [group discovery](/docs/for-ai/guides/managing-groups.md). Intersect the type predicate with `{\"match\":{\"key\":\"groupId\",\"value\":\"<resolved-full-group-id>\"}}` inside query.and. This additionally requires group:read and permission to read that group. A group filter uses its returned member endpoints; resolve the requested nested groups as needed and deduplicate full endpoint IDs. Reading a group does not grant control of its members.\n\nRepeat the same query, page size and authenticated grant with paginationContext.nextToken from each response. Continue until that token is absent, including after an empty page. Disabled endpoints are excluded by default. Inspect declared capabilities for the selected endpoints and exclude unsupported targets; do not broaden the selection to every power-capable plug or switch. Freeze the discovered target set before dispatch and report each result.\n\nA batch can partially succeed. Report selected, accepted, failed and unresolved targets separately. For fresh readback, repeat endpointQuery with expand:[\"interfaces.attributes\"] and forceDeviceQuery:true. Inspect observation sample times and response errors before claiming all lights changed. A lost response does not justify repeating relative brightness adjustments. See [authorization rules](/docs/for-ai/guides/authorization-rules.md).\n",
54
54
  "setupPrompt": null
55
55
  },
56
56
  {
@@ -128,7 +128,7 @@
128
128
  {
129
129
  "id": "using-the-api",
130
130
  "title": "Using the REST API",
131
- "content": "# Using the REST API\n\nDiscover authorization metadata, then use [OAuth setup](/docs/for-ai/guides/authentication-and-dcr.md). Obtain exact REST paths and schemas from [OpenAPI](/docs/references/openapi.yaml) or [small operation pages](/docs/for-ai/operations/index.md).\n\nEnumerate endpoints with endpoint:read. Follow returned pagination links/tokens exactly and stop only when continuation is absent. Inspect declared capabilities and versions; retrieve one message/attribute schema as needed. Send messages through POST /messages (the existing /messages/send alias also works). Never invent target IDs or message fields.\n\nREST dispatch and subsequent physical observation are separate facts. A 202 describes unfinished work. A timeout can mean the operation already acted; inspect existing results/state before repeating. IR/Bluetooth fire-and-forget and long-delay devices may never provide immediate confirmation. Use bounded polling and report unresolved state. An endpoint edit marked committed with cleanup pending must not be repeated as though it failed.\n\nUse documented idempotency/correlation and version preconditions only where the operation guarantees them. Setting a value and incrementing it have different replay risks. On an ambiguous lost relative-command response, report unknown or read back rather than blindly send again.\n\nRead [authorization rules](/docs/for-ai/guides/authorization-rules.md), [lighting](/docs/for-ai/guides/lighting.md) or the relevant task guide.\n",
131
+ "content": "# Using the REST API\n\nDiscover authorization metadata, then use [OAuth setup](/docs/for-ai/guides/authentication-and-dcr.md).\nStart with the [compact API catalog](/docs/for-ai/api-catalog.md). It\ncontains auth context, public operation links, parameter names and top-level JSON\nkeys. Obtain exact REST paths from its links or the [small operation index](/docs/for-ai/operations/index.md).\nFollow one operation's linked schemas for required/conditional fields and\nnested payloads. It does not inline all schemas or examples.\n\nFor SDK generation or a comprehensive contract download, request the\n[full OpenAPI document](/docs/references/openapi.yaml).\n\nThe website's `/api/` route serves this compact Markdown when the request puts\n`text/markdown` first in `Accept` (for example,\n`text/markdown, text/plain;q=0.9, text/html;q=0.8`). Browser HTML requests keep the\ninteractive reference. Add `?full=1` to explicitly retrieve the complete HTML\ncatalog; keep HTML in your accepted formats for that request. Both variants\ninclude `Vary: Accept` for caches. The direct compact Markdown URL works on both\nthe website and API host and does not depend on negotiation.\n\nEnumerate endpoints with endpoint:read. Follow returned pagination links/tokens exactly and stop only when continuation is absent. Inspect declared capabilities and versions; retrieve one message/attribute schema as needed. Send messages through POST /messages (the existing /messages/send alias also works). Never invent target IDs or message fields.\n\nFor filtered inventory including readable shared endpoints, use [POST /endpoint-query](/docs/for-ai/operations/endpointQuery.md). Its query accepts exact match and nested and/or/not predicates; read the request schema's supported fields rather than inventing comparisons or text search. A groupId predicate additionally needs group:read and access to that group. Keep the query, page size, expansions, forceDeviceQuery setting and grant unchanged while following paginationContext.nextToken. Empty pages can have a continuation. Cursors expire after fifteen minutes; restart without nextToken on a 400 cursor error.\n\nREST dispatch and subsequent physical observation are separate facts. A 202 describes unfinished work. A timeout can mean the operation already acted; inspect existing results/state before repeating. IR/Bluetooth fire-and-forget and long-delay devices may never provide immediate confirmation. Use bounded polling and report unresolved state. An endpoint edit marked committed with cleanup pending must not be repeated as though it failed.\n\nUse documented idempotency/correlation and version preconditions only where the operation guarantees them. Setting a value and incrementing it have different replay risks. On an ambiguous lost relative-command response, report unknown or read back rather than blindly send again.\n\nRead [authorization rules](/docs/for-ai/guides/authorization-rules.md), [lighting](/docs/for-ai/guides/lighting.md) or the relevant task guide.\n",
132
132
  "setupPrompt": null
133
133
  },
134
134
  {
@@ -1086,7 +1086,12 @@
1086
1086
  "tags": [
1087
1087
  "Endpoints"
1088
1088
  ],
1089
- "description": "Query for endpoints",
1089
+ "description": "Return a bounded page of authorized endpoints matching the shared Query expression, including endpoints shared by other owners. Read permission is evaluated before filtering, pagination and state expansion. See the request schema for supported fields and operators. Use groupId to select members of a readable room/group, then intersect type or declared interfaces to select lights. Group predicates additionally require group:read for delegated OAuth. Repeat the complete query settings and grant when following nextToken; cursors expire after fifteen minutes. Device attributes are returned only when expanded. Report per-target command acceptance and observed state separately; querying a group does not grant permission to control its members.",
1090
+ "x-portos-conditional-scopes": {
1091
+ "groupId": [
1092
+ "group:read"
1093
+ ]
1094
+ },
1090
1095
  "requestBody": {
1091
1096
  "required": true,
1092
1097
  "content": {
@@ -1097,9 +1102,12 @@
1097
1102
  "example": {
1098
1103
  "query": {
1099
1104
  "match": {
1100
- "key": "name",
1101
- "value": "test"
1105
+ "key": "type",
1106
+ "value": "LIGHT"
1102
1107
  }
1108
+ },
1109
+ "paginationContext": {
1110
+ "maxResults": 10
1103
1111
  }
1104
1112
  }
1105
1113
  }
@@ -1114,16 +1122,13 @@
1114
1122
  "$ref": "#/components/schemas/EndpointQueryResponse"
1115
1123
  },
1116
1124
  "example": {
1117
- "results": [],
1118
- "paginationContext": {
1119
- "nextToken": "abc123"
1120
- }
1125
+ "results": []
1121
1126
  }
1122
1127
  }
1123
1128
  }
1124
1129
  },
1125
1130
  "400": {
1126
- "description": "Bad request - missing required parameters",
1131
+ "description": "Invalid query, unsupported expansion, or invalid/expired/mismatched cursor.",
1127
1132
  "content": {
1128
1133
  "application/json": {
1129
1134
  "schema": {
@@ -1152,6 +1157,51 @@
1152
1157
  }
1153
1158
  }
1154
1159
  },
1160
+ "403": {
1161
+ "description": "Missing conditional OAuth scope or permission to read a referenced group.",
1162
+ "content": {
1163
+ "application/json": {
1164
+ "schema": {
1165
+ "$ref": "#/components/schemas/Error"
1166
+ },
1167
+ "example": {
1168
+ "message": "Permission to read the requested group is required.",
1169
+ "code": "FORBIDDEN",
1170
+ "family": "FORBIDDEN"
1171
+ }
1172
+ }
1173
+ }
1174
+ },
1175
+ "404": {
1176
+ "description": "A referenced group does not exist.",
1177
+ "content": {
1178
+ "application/json": {
1179
+ "schema": {
1180
+ "$ref": "#/components/schemas/Error"
1181
+ },
1182
+ "example": {
1183
+ "message": "Requested group was not found.",
1184
+ "code": "NOT_FOUND",
1185
+ "family": "NOT_FOUND"
1186
+ }
1187
+ }
1188
+ }
1189
+ },
1190
+ "409": {
1191
+ "description": "A selected disabled endpoint cannot be forcibly refreshed.",
1192
+ "content": {
1193
+ "application/json": {
1194
+ "schema": {
1195
+ "$ref": "#/components/schemas/Error"
1196
+ },
1197
+ "example": {
1198
+ "message": "endpoint messaging is disabled",
1199
+ "code": "ENDPOINT_DISABLED",
1200
+ "family": "CONFLICT"
1201
+ }
1202
+ }
1203
+ }
1204
+ },
1155
1205
  "500": {
1156
1206
  "description": "Internal server error",
1157
1207
  "content": {
@@ -13317,12 +13367,34 @@
13317
13367
  "x-version": "1.0",
13318
13368
  "x-type": "message",
13319
13369
  "x-directionality": "in",
13370
+ "description": "Search for and play media by title or query using a service advertised by the endpoint. Omitting mediaType retains audio search behavior; video-only endpoints may default to video.",
13320
13371
  "type": "object",
13321
13372
  "properties": {
13322
13373
  "query": {
13323
13374
  "type": "string",
13324
- "description": "Query to search for audio content",
13375
+ "description": "Query to search for media content",
13325
13376
  "minLength": 1
13377
+ },
13378
+ "provider": {
13379
+ "$ref": "#/components/schemas/MediaProvider"
13380
+ },
13381
+ "mediaType": {
13382
+ "type": "string",
13383
+ "enum": [
13384
+ "AUDIO",
13385
+ "VIDEO"
13386
+ ],
13387
+ "description": "Media search domain. The endpoint must advertise support for the selected type.",
13388
+ "x-enum-varnames": [
13389
+ "MediaSearchTypeAudio",
13390
+ "MediaSearchTypeVideo"
13391
+ ]
13392
+ },
13393
+ "timerSeconds": {
13394
+ "type": "integer",
13395
+ "minimum": 1,
13396
+ "maximum": 86400,
13397
+ "description": "Optional provider playback timer in seconds."
13326
13398
  }
13327
13399
  },
13328
13400
  "required": [
@@ -14525,6 +14597,7 @@
14525
14597
  "LEFT",
14526
14598
  "RIGHT",
14527
14599
  "SELECT",
14600
+ "HOME",
14528
14601
  "BACK",
14529
14602
  "EXIT",
14530
14603
  "MENU",
@@ -14637,6 +14710,16 @@
14637
14710
  "type": "object",
14638
14711
  "additionalProperties": false
14639
14712
  },
14713
+ "MediaPlayerInterfaceFastForwardMessage": {
14714
+ "x-namespace": "port1/systems/zero/capability-interfaces/media-player",
14715
+ "x-name": "fast-forward",
14716
+ "x-version": "1.0",
14717
+ "x-type": "message",
14718
+ "x-directionality": "in",
14719
+ "description": "Begin provider-defined fast-forward playback. This does not seek by a specific duration; use skip-forward or seek for a known position change.",
14720
+ "type": "object",
14721
+ "additionalProperties": false
14722
+ },
14640
14723
  "MediaPlayerInterfaceStartOverMessage": {
14641
14724
  "x-namespace": "port1/systems/zero/capability-interfaces/media-player",
14642
14725
  "x-name": "start-over",
@@ -15078,6 +15161,26 @@
15078
15161
  "brightness"
15079
15162
  ]
15080
15163
  },
15164
+ "BrightnessInterfaceAdjustBrightnessMessage": {
15165
+ "x-namespace": "port1/systems/zero/capability-interfaces/brightness",
15166
+ "x-name": "adjust-brightness",
15167
+ "x-version": "1.0",
15168
+ "x-type": "message",
15169
+ "x-directionality": "in",
15170
+ "description": "Adjust brightness by a signed number of percentage points. The endpoint must advertise this message separately from set-brightness.",
15171
+ "type": "object",
15172
+ "properties": {
15173
+ "brightnessDelta": {
15174
+ "type": "integer",
15175
+ "minimum": -100,
15176
+ "maximum": 100
15177
+ }
15178
+ },
15179
+ "required": [
15180
+ "brightnessDelta"
15181
+ ],
15182
+ "additionalProperties": false
15183
+ },
15081
15184
  "MediaSearchInterfaceAudioMediaResultsMessage": {
15082
15185
  "x-namespace": "port1/systems/zero/capability-interfaces/media-search",
15083
15186
  "x-name": "audio-media-results",
@@ -22076,6 +22179,7 @@
22076
22179
  "LEFT",
22077
22180
  "RIGHT",
22078
22181
  "SELECT",
22182
+ "HOME",
22079
22183
  "BACK",
22080
22184
  "EXIT",
22081
22185
  "MENU",
@@ -22172,6 +22276,30 @@
22172
22276
  "description": "Configure media playback, media selection and audio playback. Advertise only the messages implemented by this endpoint.",
22173
22277
  "type": "object",
22174
22278
  "properties": {
22279
+ "supportedAudioProviders": {
22280
+ "type": "array",
22281
+ "uniqueItems": true,
22282
+ "description": "Audio services accepted by search-and-play on this endpoint. These describe command support, not active subscriptions.",
22283
+ "items": {
22284
+ "$ref": "#/components/schemas/MediaProvider"
22285
+ }
22286
+ },
22287
+ "supportedVideoProviders": {
22288
+ "type": "array",
22289
+ "uniqueItems": true,
22290
+ "description": "Video services accepted by search-and-play on this endpoint. These describe command support, not installed applications or active subscriptions.",
22291
+ "items": {
22292
+ "$ref": "#/components/schemas/MediaProvider"
22293
+ }
22294
+ },
22295
+ "defaultAudioProvider": {
22296
+ "$ref": "#/components/schemas/MediaProvider",
22297
+ "description": "Default service for an audio search. Must be in supportedAudioProviders."
22298
+ },
22299
+ "defaultVideoProvider": {
22300
+ "$ref": "#/components/schemas/MediaProvider",
22301
+ "description": "Default service for a video search. Must be in supportedVideoProviders."
22302
+ },
22175
22303
  "supportedPlaybackStates": {
22176
22304
  "type": "array",
22177
22305
  "items": {
@@ -22874,6 +23002,19 @@
22874
23002
  "x-version": "1.0",
22875
23003
  "x-type": "configuration",
22876
23004
  "type": "object",
23005
+ "properties": {
23006
+ "supportedInputTypes": {
23007
+ "type": "array",
23008
+ "uniqueItems": true,
23009
+ "items": {
23010
+ "type": "string",
23011
+ "enum": [
23012
+ "SSML",
23013
+ "CANNED_TTS"
23014
+ ]
23015
+ }
23016
+ }
23017
+ },
22877
23018
  "additionalProperties": false
22878
23019
  },
22879
23020
  "TemperatureSensorInterfaceConfiguration": {
@@ -23657,22 +23798,50 @@
23657
23798
  },
23658
23799
  "EndpointQueryRequest": {
23659
23800
  "type": "object",
23801
+ "additionalProperties": false,
23660
23802
  "required": [
23661
23803
  "query"
23662
23804
  ],
23663
23805
  "properties": {
23664
23806
  "query": {
23665
- "$ref": "#/components/schemas/Query"
23807
+ "$ref": "#/components/schemas/Query",
23808
+ "description": "A bounded shared Query expression. An empty object selects unfiltered readable inventory. This endpoint supports match, and, or, and not. Scalar match keys are id, name, type, ownerId, manufacturer, model, and enablement. interfaces matches membership in the endpoint's declared interface names; groupId matches membership in a readable endpoint group. Comparisons, patterns, freeform search, unknown keys, ambiguous nodes, expressions deeper than eight levels, or more than 64 nodes return 400. Values are exact strings. Collections hide disabled endpoints unless the expression explicitly filters enablement. Results include readable shared endpoints, regardless of their owner. A groupId predicate additionally requires group:read for delegated OAuth and read permission on that group."
23666
23809
  },
23667
23810
  "paginationContext": {
23668
- "$ref": "#/components/schemas/PaginationContext"
23811
+ "type": "object",
23812
+ "additionalProperties": false,
23813
+ "properties": {
23814
+ "maxResults": {
23815
+ "type": "integer",
23816
+ "minimum": 1,
23817
+ "maximum": 100,
23818
+ "default": 10,
23819
+ "description": "Maximum authorized matching endpoints in this page."
23820
+ },
23821
+ "nextToken": {
23822
+ "type": "string",
23823
+ "minLength": 1,
23824
+ "description": "Opaque server-issued continuation token. Repeat the same query, page size, expansions, forceDeviceQuery setting, and authenticated grant. Modified, expired, or differently bound tokens return 400; restart without nextToken. Follow nextToken until absent, including empty pages."
23825
+ }
23826
+ }
23669
23827
  },
23670
23828
  "expand": {
23671
23829
  "type": "array",
23672
- "description": "Expansion tokens that request related or computed endpoint fields.",
23830
+ "uniqueItems": true,
23831
+ "maxItems": 1,
23832
+ "description": "Optional reported state expansion; only interfaces.attributes is supported.",
23673
23833
  "items": {
23674
- "type": "string"
23834
+ "type": "string",
23835
+ "enum": [
23836
+ "interfaces.attributes"
23837
+ ],
23838
+ "x-enum-exempt": "Existing published REST expansion token shared with GET /endpoints."
23675
23839
  }
23840
+ },
23841
+ "forceDeviceQuery": {
23842
+ "type": "boolean",
23843
+ "default": false,
23844
+ "description": "Refresh reported device attributes for the selected page. Requires expand to contain interfaces.attributes. An accepted command is not proof of device state; inspect the returned sample times and partial errors. Disabled endpoints cannot be forcibly refreshed."
23676
23845
  }
23677
23846
  }
23678
23847
  },
@@ -27021,6 +27190,42 @@
27021
27190
  },
27022
27191
  "additionalProperties": false
27023
27192
  },
27193
+ "MediaProvider": {
27194
+ "type": "string",
27195
+ "description": "Media service identifier. A provider enum value does not imply that every endpoint supports that service; use the endpoint's advertised provider lists.",
27196
+ "enum": [
27197
+ "SPOTIFY",
27198
+ "AMAZON_MUSIC",
27199
+ "APPLE_MUSIC",
27200
+ "AUDIBLE",
27201
+ "TUNE_IN",
27202
+ "PANDORA",
27203
+ "IHEART_RADIO",
27204
+ "SIRIUSXM",
27205
+ "DEEZER",
27206
+ "TIDAL",
27207
+ "YOUTUBE",
27208
+ "NETFLIX",
27209
+ "PRIME_VIDEO",
27210
+ "DAILYMOTION"
27211
+ ],
27212
+ "x-enum-varnames": [
27213
+ "MediaProviderSpotify",
27214
+ "MediaProviderAmazonMusic",
27215
+ "MediaProviderAppleMusic",
27216
+ "MediaProviderAudible",
27217
+ "MediaProviderTuneIn",
27218
+ "MediaProviderPandora",
27219
+ "MediaProviderIHeartRadio",
27220
+ "MediaProviderSiriusXM",
27221
+ "MediaProviderDeezer",
27222
+ "MediaProviderTidal",
27223
+ "MediaProviderYouTube",
27224
+ "MediaProviderNetflix",
27225
+ "MediaProviderPrimeVideo",
27226
+ "MediaProviderDailymotion"
27227
+ ]
27228
+ },
27024
27229
  "NotificationPayload": {
27025
27230
  "type": "object",
27026
27231
  "description": "Notification payload information",
@@ -27665,11 +27870,17 @@
27665
27870
  "type": {
27666
27871
  "type": "string",
27667
27872
  "enum": [
27668
- "SSML"
27873
+ "SSML",
27874
+ "CANNED_TTS"
27669
27875
  ]
27670
27876
  },
27671
27877
  "ssml": {
27672
27878
  "type": "string"
27879
+ },
27880
+ "cannedTtsStringId": {
27881
+ "type": "string",
27882
+ "minLength": 1,
27883
+ "description": "Provider-defined canned speech identifier; supported only by integrations advertising canned speech."
27673
27884
  }
27674
27885
  }
27675
27886
  },