@kusinta/iot-schema 0.1.0-beta.17 → 0.1.0-beta.19

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.
@@ -3,12 +3,13 @@
3
3
  /* eslint-disable */
4
4
 
5
5
  import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
6
+ import { file_kusinta_iot_device_v1_matter_options } from "./matter_options_pb.js";
6
7
 
7
8
  /**
8
9
  * Describes the file kusinta/iot/device/v1/properties.proto.
9
10
  */
10
11
  export const file_kusinta_iot_device_v1_properties = /*@__PURE__*/
11
- fileDesc("CiZrdXNpbnRhL2lvdC9kZXZpY2UvdjEvcHJvcGVydGllcy5wcm90bxIVa3VzaW50YS5pb3QuZGV2aWNlLnYxItgCChRUaGVybW9zdGF0UHJvcGVydGllcxIZChFsb2NhbF90ZW1wZXJhdHVyZRgBIAEoERIhChlvY2N1cGllZF9oZWF0aW5nX3NldHBvaW50GAIgASgREiEKGW9jY3VwaWVkX2Nvb2xpbmdfc2V0cG9pbnQYAyABKBESHwoXbWluX2hlYXRfc2V0cG9pbnRfbGltaXQYBCABKBESHwoXbWF4X2hlYXRfc2V0cG9pbnRfbGltaXQYBSABKBESHwoXbWluX2Nvb2xfc2V0cG9pbnRfbGltaXQYBiABKBESHwoXbWF4X2Nvb2xfc2V0cG9pbnRfbGltaXQYByABKBESJQodY29udHJvbF9zZXF1ZW5jZV9vZl9vcGVyYXRpb24YCCABKA0SEwoLc3lzdGVtX21vZGUYCSABKA0SHwoXdGhlcm1vc3RhdF9ydW5uaW5nX21vZGUYCiABKA0igAEKG1RlbXBlcmF0dXJlU2Vuc29yUHJvcGVydGllcxIWCg5tZWFzdXJlZF92YWx1ZRgBIAEoERIaChJtaW5fbWVhc3VyZWRfdmFsdWUYAiABKBESGgoSbWF4X21lYXN1cmVkX3ZhbHVlGAMgASgREhEKCXRvbGVyYW5jZRgEIAEoDSJ9ChhIdW1pZGl0eVNlbnNvclByb3BlcnRpZXMSFgoObWVhc3VyZWRfdmFsdWUYASABKA0SGgoSbWluX21lYXN1cmVkX3ZhbHVlGAIgASgNEhoKEm1heF9tZWFzdXJlZF92YWx1ZRgDIAEoDRIRCgl0b2xlcmFuY2UYBCABKA0iswEKGU9jY3VwYW5jeVNlbnNvclByb3BlcnRpZXMSEQoJb2NjdXBhbmN5GAEgASgNEh0KFW9jY3VwYW5jeV9zZW5zb3JfdHlwZRgCIAEoDRIkChxvY2N1cGFuY3lfc2Vuc29yX3R5cGVfYml0bWFwGAMgASgNEh4KFnBpcl9vY2NfdG9fdW5vY2NfZGVsYXkYBCABKA0SHgoWcGlyX3Vub2NjX3RvX29jY19kZWxheRgFIAEoDSIuChdDb250YWN0U2Vuc29yUHJvcGVydGllcxITCgtzdGF0ZV92YWx1ZRgBIAEoCCKnAgoYV2luZG93Q292ZXJpbmdQcm9wZXJ0aWVzEhUKDWNvdmVyaW5nX3R5cGUYASABKA0SKwojY3VycmVudF9wb3NpdGlvbl9saWZ0X3BlcmNlbnQxMDB0aHMYAiABKA0SKwojY3VycmVudF9wb3NpdGlvbl90aWx0X3BlcmNlbnQxMDB0aHMYAyABKA0SKgoidGFyZ2V0X3Bvc2l0aW9uX2xpZnRfcGVyY2VudDEwMHRocxgEIAEoDRIqCiJ0YXJnZXRfcG9zaXRpb25fdGlsdF9wZXJjZW50MTAwdGhzGAUgASgNEhoKEm9wZXJhdGlvbmFsX3N0YXR1cxgGIAEoDRIYChBlbmRfcHJvZHVjdF90eXBlGAcgASgNEgwKBG1vZGUYCCABKA0igQEKEkRvb3JMb2NrUHJvcGVydGllcxISCgpsb2NrX3N0YXRlGAEgASgNEhEKCWxvY2tfdHlwZRgCIAEoDRIYChBhY3R1YXRvcl9lbmFibGVkGAMgASgIEhIKCmRvb3Jfc3RhdGUYBCABKA0SFgoOb3BlcmF0aW5nX21vZGUYBSABKA0ihQEKFE9uT2ZmTGlnaHRQcm9wZXJ0aWVzEg4KBm9uX29mZhgBIAEoCBIcChRnbG9iYWxfc2NlbmVfY29udHJvbBgCIAEoCBIPCgdvbl90aW1lGAMgASgNEhUKDW9mZl93YWl0X3RpbWUYBCABKA0SFwoPc3RhcnRfdXBfb25fb2ZmGAUgASgNIrABChdEaW1tYWJsZUxpZ2h0UHJvcGVydGllcxIOCgZvbl9vZmYYASABKAgSFQoNY3VycmVudF9sZXZlbBgCIAEoDRIRCgltaW5fbGV2ZWwYAyABKA0SEQoJbWF4X2xldmVsGAQgASgNEhAKCG9uX2xldmVsGAUgASgNEh4KFnN0YXJ0X3VwX2N1cnJlbnRfbGV2ZWwYBiABKA0SFgoOcmVtYWluaW5nX3RpbWUYByABKA0i+AEKH0NvbG9yVGVtcGVyYXR1cmVMaWdodFByb3BlcnRpZXMSDgoGb25fb2ZmGAEgASgIEhUKDWN1cnJlbnRfbGV2ZWwYAiABKA0SIAoYY29sb3JfdGVtcGVyYXR1cmVfbWlyZWRzGAMgASgNEiYKHmNvbG9yX3RlbXBfcGh5c2ljYWxfbWluX21pcmVkcxgEIAEoDRImCh5jb2xvcl90ZW1wX3BoeXNpY2FsX21heF9taXJlZHMYBSABKA0SKAogc3RhcnR1cF9jb2xvcl90ZW1wZXJhdHVyZV9taXJlZHMYBiABKA0SEgoKY29sb3JfbW9kZRgHIAEoDSJuChZFbmVyZ3lTZW5zb3JQcm9wZXJ0aWVzEhQKDGFjdGl2ZV9wb3dlchgBIAEoBRITCgtybXNfdm9sdGFnZRgCIAEoDRITCgtybXNfY3VycmVudBgDIAEoDRIUCgxhY19mcmVxdWVuY3kYBCABKA0ifQoYUHJlc3N1cmVTZW5zb3JQcm9wZXJ0aWVzEhYKDm1lYXN1cmVkX3ZhbHVlGAEgASgREhoKEm1pbl9tZWFzdXJlZF92YWx1ZRgCIAEoERIaChJtYXhfbWVhc3VyZWRfdmFsdWUYAyABKBESEQoJdG9sZXJhbmNlGAQgASgNQgJIAWIGcHJvdG8z");
12
+ fileDesc("CiZrdXNpbnRhL2lvdC9kZXZpY2UvdjEvcHJvcGVydGllcy5wcm90bxIVa3VzaW50YS5pb3QuZGV2aWNlLnYxItcHChRUaGVybW9zdGF0UHJvcGVydGllcxI5ChFsb2NhbF90ZW1wZXJhdHVyZRgBIAEoEUIZiLUYgQSStRgQTG9jYWxUZW1wZXJhdHVyZUgAiAEBEkgKGW9jY3VwaWVkX2hlYXRpbmdfc2V0cG9pbnQYAiABKBFCIIi1GIEEkrUYF09jY3VwaWVkSGVhdGluZ1NldHBvaW50SAGIAQESSAoZb2NjdXBpZWRfY29vbGluZ19zZXRwb2ludBgDIAEoEUIgiLUYgQSStRgXT2NjdXBpZWRDb29saW5nU2V0cG9pbnRIAogBARJDChdtaW5faGVhdF9zZXRwb2ludF9saW1pdBgEIAEoEUIdiLUYgQSStRgUTWluSGVhdFNldHBvaW50TGltaXRIA4gBARJDChdtYXhfaGVhdF9zZXRwb2ludF9saW1pdBgFIAEoEUIdiLUYgQSStRgUTWF4SGVhdFNldHBvaW50TGltaXRIBIgBARJDChdtaW5fY29vbF9zZXRwb2ludF9saW1pdBgGIAEoEUIdiLUYgQSStRgUTWluQ29vbFNldHBvaW50TGltaXRIBYgBARJDChdtYXhfY29vbF9zZXRwb2ludF9saW1pdBgHIAEoEUIdiLUYgQSStRgUTWF4Q29vbFNldHBvaW50TGltaXRIBogBARJPCh1jb250cm9sX3NlcXVlbmNlX29mX29wZXJhdGlvbhgIIAEoDUIjiLUYgQSStRgaQ29udHJvbFNlcXVlbmNlT2ZPcGVyYXRpb25IB4gBARItCgtzeXN0ZW1fbW9kZRgJIAEoDUITiLUYgQSStRgKU3lzdGVtTW9kZUgIiAEBEkQKF3RoZXJtb3N0YXRfcnVubmluZ19tb2RlGAogASgNQh6ItRiBBJK1GBVUaGVybW9zdGF0UnVubmluZ01vZGVICYgBAToGmrUYAoEGQhQKEl9sb2NhbF90ZW1wZXJhdHVyZUIcChpfb2NjdXBpZWRfaGVhdGluZ19zZXRwb2ludEIcChpfb2NjdXBpZWRfY29vbGluZ19zZXRwb2ludEIaChhfbWluX2hlYXRfc2V0cG9pbnRfbGltaXRCGgoYX21heF9oZWF0X3NldHBvaW50X2xpbWl0QhoKGF9taW5fY29vbF9zZXRwb2ludF9saW1pdEIaChhfbWF4X2Nvb2xfc2V0cG9pbnRfbGltaXRCIAoeX2NvbnRyb2xfc2VxdWVuY2Vfb2Zfb3BlcmF0aW9uQg4KDF9zeXN0ZW1fbW9kZUIaChhfdGhlcm1vc3RhdF9ydW5uaW5nX21vZGUizQIKG1RlbXBlcmF0dXJlU2Vuc29yUHJvcGVydGllcxIzCg5tZWFzdXJlZF92YWx1ZRgBIAEoEUIWiLUYggiStRgNTWVhc3VyZWRWYWx1ZUgAiAEBEjoKEm1pbl9tZWFzdXJlZF92YWx1ZRgCIAEoEUIZiLUYggiStRgQTWluTWVhc3VyZWRWYWx1ZUgBiAEBEjoKEm1heF9tZWFzdXJlZF92YWx1ZRgDIAEoEUIZiLUYggiStRgQTWF4TWVhc3VyZWRWYWx1ZUgCiAEBEioKCXRvbGVyYW5jZRgEIAEoDUISiLUYggiStRgJVG9sZXJhbmNlSAOIAQE6Bpq1GAKCBkIRCg9fbWVhc3VyZWRfdmFsdWVCFQoTX21pbl9tZWFzdXJlZF92YWx1ZUIVChNfbWF4X21lYXN1cmVkX3ZhbHVlQgwKCl90b2xlcmFuY2UiygIKGEh1bWlkaXR5U2Vuc29yUHJvcGVydGllcxIzCg5tZWFzdXJlZF92YWx1ZRgBIAEoDUIWiLUYhQiStRgNTWVhc3VyZWRWYWx1ZUgAiAEBEjoKEm1pbl9tZWFzdXJlZF92YWx1ZRgCIAEoDUIZiLUYhQiStRgQTWluTWVhc3VyZWRWYWx1ZUgBiAEBEjoKEm1heF9tZWFzdXJlZF92YWx1ZRgDIAEoDUIZiLUYhQiStRgQTWF4TWVhc3VyZWRWYWx1ZUgCiAEBEioKCXRvbGVyYW5jZRgEIAEoDUISiLUYhQiStRgJVG9sZXJhbmNlSAOIAQE6Bpq1GAKHBkIRCg9fbWVhc3VyZWRfdmFsdWVCFQoTX21pbl9tZWFzdXJlZF92YWx1ZUIVChNfbWF4X21lYXN1cmVkX3ZhbHVlQgwKCl90b2xlcmFuY2UizwQKGU9jY3VwYW5jeVNlbnNvclByb3BlcnRpZXMSKgoJb2NjdXBhbmN5GAEgASgNQhKItRiGCJK1GAlPY2N1cGFuY3lIAIgBARJAChVvY2N1cGFuY3lfc2Vuc29yX3R5cGUYAiABKA1CHIi1GIYIkrUYE09jY3VwYW5jeVNlbnNvclR5cGVIAYgBARJNChxvY2N1cGFuY3lfc2Vuc29yX3R5cGVfYml0bWFwGAMgASgNQiKItRiGCJK1GBlPY2N1cGFuY3lTZW5zb3JUeXBlQml0bWFwSAKIAQESVAogcGlyX29jY3VwaWVkX3RvX3Vub2NjdXBpZWRfZGVsYXkYBCABKA1CJYi1GIYIkrUYHFBJUk9jY3VwaWVkVG9Vbm9jY3VwaWVkRGVsYXlIA4gBARJUCiBwaXJfdW5vY2N1cGllZF90b19vY2N1cGllZF9kZWxheRgFIAEoDUIliLUYhgiStRgcUElSVW5vY2N1cGllZFRvT2NjdXBpZWREZWxheUgEiAEBOgaatRgChwJCDAoKX29jY3VwYW5jeUIYChZfb2NjdXBhbmN5X3NlbnNvcl90eXBlQh8KHV9vY2N1cGFuY3lfc2Vuc29yX3R5cGVfYml0bWFwQiMKIV9waXJfb2NjdXBpZWRfdG9fdW5vY2N1cGllZF9kZWxheUIjCiFfcGlyX3Vub2NjdXBpZWRfdG9fb2NjdXBpZWRfZGVsYXlSFnBpcl9vY2NfdG9fdW5vY2NfZGVsYXlSFnBpcl91bm9jY190b19vY2NfZGVsYXkiXgoXQ29udGFjdFNlbnNvclByb3BlcnRpZXMSLAoLc3RhdGVfdmFsdWUYASABKAhCEoi1GEWStRgKU3RhdGVWYWx1ZUgAiAEBOgWatRgBFUIOCgxfc3RhdGVfdmFsdWUiuQYKGFdpbmRvd0NvdmVyaW5nUHJvcGVydGllcxIpCg1jb3ZlcmluZ190eXBlGAEgASgNQg2ItRiCApK1GARUeXBlSACIAQESWwojY3VycmVudF9wb3NpdGlvbl9saWZ0X3BlcmNlbnQxMDB0aHMYAiABKA1CKYi1GIICkrUYIEN1cnJlbnRQb3NpdGlvbkxpZnRQZXJjZW50MTAwdGhzSAGIAQESWwojY3VycmVudF9wb3NpdGlvbl90aWx0X3BlcmNlbnQxMDB0aHMYAyABKA1CKYi1GIICkrUYIEN1cnJlbnRQb3NpdGlvblRpbHRQZXJjZW50MTAwdGhzSAKIAQESWQoidGFyZ2V0X3Bvc2l0aW9uX2xpZnRfcGVyY2VudDEwMHRocxgEIAEoDUIoiLUYggKStRgfVGFyZ2V0UG9zaXRpb25MaWZ0UGVyY2VudDEwMHRoc0gDiAEBElkKInRhcmdldF9wb3NpdGlvbl90aWx0X3BlcmNlbnQxMDB0aHMYBSABKA1CKIi1GIICkrUYH1RhcmdldFBvc2l0aW9uVGlsdFBlcmNlbnQxMDB0aHNIBIgBARI7ChJvcGVyYXRpb25hbF9zdGF0dXMYBiABKA1CGoi1GIICkrUYEU9wZXJhdGlvbmFsU3RhdHVzSAWIAQESNgoQZW5kX3Byb2R1Y3RfdHlwZRgHIAEoDUIXiLUYggKStRgORW5kUHJvZHVjdFR5cGVIBogBARIgCgRtb2RlGAggASgNQg2ItRiCApK1GARNb2RlSAeIAQE6Bpq1GAKCBEIQCg5fY292ZXJpbmdfdHlwZUImCiRfY3VycmVudF9wb3NpdGlvbl9saWZ0X3BlcmNlbnQxMDB0aHNCJgokX2N1cnJlbnRfcG9zaXRpb25fdGlsdF9wZXJjZW50MTAwdGhzQiUKI190YXJnZXRfcG9zaXRpb25fbGlmdF9wZXJjZW50MTAwdGhzQiUKI190YXJnZXRfcG9zaXRpb25fdGlsdF9wZXJjZW50MTAwdGhzQhUKE19vcGVyYXRpb25hbF9zdGF0dXNCEwoRX2VuZF9wcm9kdWN0X3R5cGVCBwoFX21vZGUi4gIKEkRvb3JMb2NrUHJvcGVydGllcxIrCgpsb2NrX3N0YXRlGAEgASgNQhKItRiBApK1GAlMb2NrU3RhdGVIAIgBARIpCglsb2NrX3R5cGUYAiABKA1CEYi1GIECkrUYCExvY2tUeXBlSAGIAQESNwoQYWN0dWF0b3JfZW5hYmxlZBgDIAEoCEIYiLUYgQKStRgPQWN0dWF0b3JFbmFibGVkSAKIAQESKwoKZG9vcl9zdGF0ZRgEIAEoDUISiLUYgQKStRgJRG9vclN0YXRlSAOIAQESMwoOb3BlcmF0aW5nX21vZGUYBSABKA1CFoi1GIECkrUYDU9wZXJhdGluZ01vZGVIBIgBAToFmrUYAQpCDQoLX2xvY2tfc3RhdGVCDAoKX2xvY2tfdHlwZUITChFfYWN0dWF0b3JfZW5hYmxlZEINCgtfZG9vcl9zdGF0ZUIRCg9fb3BlcmF0aW5nX21vZGUi4gIKFE9uT2ZmTGlnaHRQcm9wZXJ0aWVzEiIKBm9uX29mZhgBIAEoCEINiLUYBpK1GAVPbk9mZkgAiAEBEj0KFGdsb2JhbF9zY2VuZV9jb250cm9sGAIgASgIQhqItRgGkrUYEkdsb2JhbFNjZW5lQ29udHJvbEgBiAEBEiQKB29uX3RpbWUYAyABKA1CDoi1GAaStRgGT25UaW1lSAKIAQESLwoNb2ZmX3dhaXRfdGltZRgEIAEoDUITiLUYBpK1GAtPZmZXYWl0VGltZUgDiAEBEjIKD3N0YXJ0X3VwX29uX29mZhgFIAEoDUIUiLUYBpK1GAxTdGFydFVwT25PZmZIBIgBAToGmrUYAoACQgkKB19vbl9vZmZCFwoVX2dsb2JhbF9zY2VuZV9jb250cm9sQgoKCF9vbl90aW1lQhAKDl9vZmZfd2FpdF90aW1lQhIKEF9zdGFydF91cF9vbl9vZmYi3QMKF0RpbW1hYmxlTGlnaHRQcm9wZXJ0aWVzEiIKBm9uX29mZhgBIAEoCEINiLUYBpK1GAVPbk9mZkgAiAEBEjAKDWN1cnJlbnRfbGV2ZWwYAiABKA1CFIi1GAiStRgMQ3VycmVudExldmVsSAGIAQESKAoJbWluX2xldmVsGAMgASgNQhCItRgIkrUYCE1pbkxldmVsSAKIAQESKAoJbWF4X2xldmVsGAQgASgNQhCItRgIkrUYCE1heExldmVsSAOIAQESJgoIb25fbGV2ZWwYBSABKA1CD4i1GAiStRgHT25MZXZlbEgEiAEBEkAKFnN0YXJ0X3VwX2N1cnJlbnRfbGV2ZWwYBiABKA1CG4i1GAiStRgTU3RhcnRVcEN1cnJlbnRMZXZlbEgFiAEBEjIKDnJlbWFpbmluZ190aW1lGAcgASgNQhWItRgIkrUYDVJlbWFpbmluZ1RpbWVIBogBAToGmrUYAoECQgkKB19vbl9vZmZCEAoOX2N1cnJlbnRfbGV2ZWxCDAoKX21pbl9sZXZlbEIMCgpfbWF4X2xldmVsQgsKCV9vbl9sZXZlbEIZChdfc3RhcnRfdXBfY3VycmVudF9sZXZlbEIRCg9fcmVtYWluaW5nX3RpbWUiowUKH0NvbG9yVGVtcGVyYXR1cmVMaWdodFByb3BlcnRpZXMSIgoGb25fb2ZmGAEgASgIQg2ItRgGkrUYBU9uT2ZmSACIAQESMAoNY3VycmVudF9sZXZlbBgCIAEoDUIUiLUYCJK1GAxDdXJyZW50TGV2ZWxIAYgBARJGChhjb2xvcl90ZW1wZXJhdHVyZV9taXJlZHMYAyABKA1CH4i1GIAGkrUYFkNvbG9yVGVtcGVyYXR1cmVNaXJlZHNIAogBARJQCh5jb2xvcl90ZW1wX3BoeXNpY2FsX21pbl9taXJlZHMYBCABKA1CI4i1GIAGkrUYGkNvbG9yVGVtcFBoeXNpY2FsTWluTWlyZWRzSAOIAQESUAoeY29sb3JfdGVtcF9waHlzaWNhbF9tYXhfbWlyZWRzGAUgASgNQiOItRiABpK1GBpDb2xvclRlbXBQaHlzaWNhbE1heE1pcmVkc0gEiAEBElUKIHN0YXJ0dXBfY29sb3JfdGVtcGVyYXR1cmVfbWlyZWRzGAYgASgNQiaItRiABpK1GB1TdGFydFVwQ29sb3JUZW1wZXJhdHVyZU1pcmVkc0gFiAEBEisKCmNvbG9yX21vZGUYByABKA1CEoi1GIAGkrUYCUNvbG9yTW9kZUgGiAEBOgaatRgCjAJCCQoHX29uX29mZkIQCg5fY3VycmVudF9sZXZlbEIbChlfY29sb3JfdGVtcGVyYXR1cmVfbWlyZWRzQiEKH19jb2xvcl90ZW1wX3BoeXNpY2FsX21pbl9taXJlZHNCIQofX2NvbG9yX3RlbXBfcGh5c2ljYWxfbWF4X21pcmVkc0IjCiFfc3RhcnR1cF9jb2xvcl90ZW1wZXJhdHVyZV9taXJlZHNCDQoLX2NvbG9yX21vZGUi2AIKFkVuZXJneVNlbnNvclByb3BlcnRpZXMSLwoMYWN0aXZlX3Bvd2VyGAUgASgSQhSItRiQAZK1GAtBY3RpdmVQb3dlckgAiAEBEiYKB3ZvbHRhZ2UYBiABKBJCEIi1GJABkrUYB1ZvbHRhZ2VIAYgBARIzCg5hY3RpdmVfY3VycmVudBgHIAEoEkIWiLUYkAGStRgNQWN0aXZlQ3VycmVudEgCiAEBEioKCWZyZXF1ZW5jeRgIIAEoEkISiLUYkAGStRgJRnJlcXVlbmN5SAOIAQE6Bpq1GAKQCkIPCg1fYWN0aXZlX3Bvd2VyQgoKCF92b2x0YWdlQhEKD19hY3RpdmVfY3VycmVudEIMCgpfZnJlcXVlbmN5SgQIARACSgQIAhADSgQIAxAESgQIBBAFUgtybXNfdm9sdGFnZVILcm1zX2N1cnJlbnRSDGFjX2ZyZXF1ZW5jeSLKAgoYUHJlc3N1cmVTZW5zb3JQcm9wZXJ0aWVzEjMKDm1lYXN1cmVkX3ZhbHVlGAEgASgRQhaItRiDCJK1GA1NZWFzdXJlZFZhbHVlSACIAQESOgoSbWluX21lYXN1cmVkX3ZhbHVlGAIgASgRQhmItRiDCJK1GBBNaW5NZWFzdXJlZFZhbHVlSAGIAQESOgoSbWF4X21lYXN1cmVkX3ZhbHVlGAMgASgRQhmItRiDCJK1GBBNYXhNZWFzdXJlZFZhbHVlSAKIAQESKgoJdG9sZXJhbmNlGAQgASgNQhKItRiDCJK1GAlUb2xlcmFuY2VIA4gBAToGmrUYAoUGQhEKD19tZWFzdXJlZF92YWx1ZUIVChNfbWluX21lYXN1cmVkX3ZhbHVlQhUKE19tYXhfbWVhc3VyZWRfdmFsdWVCDAoKX3RvbGVyYW5jZUICSAFiBnByb3RvMw", [file_kusinta_iot_device_v1_matter_options]);
12
13
 
13
14
  /**
14
15
  * Describes the message kusinta.iot.device.v1.ThermostatProperties.
@@ -15,8 +15,41 @@ export declare const file_kusinta_iot_device_v1_property_update: GenFile;
15
15
  /**
16
16
  * PropertyUpdate carries a single attribute change from connector to gateway,
17
17
  * or from gateway to Flutter app.
18
- * attribute_name uses PascalCase Matter attribute naming (e.g. "OccupiedHeatingSetpoint").
19
- * cluster_id_hex is the Matter cluster ID as a 4-char hex string (e.g. "0201" for Thermostat).
18
+ *
19
+ * Resolution rule (normative)
20
+ *
21
+ * A consumer storing an update into device.v1.Device.properties resolves it in two
22
+ * steps, both by reading options off the descriptor. Neither step involves
23
+ * transforming a name.
24
+ *
25
+ * 1. Pick the properties message: the Device.properties case whose message type
26
+ * declares (matter_device_type) == DeviceDescriptor.matter_device_type_id.
27
+ * 2. Pick the field: the one field of that message whose (matter_cluster_id) equals
28
+ * cluster_id_hex parsed as a hex integer AND whose (matter_attribute) equals
29
+ * attribute_name.
30
+ *
31
+ * Writing the resolved field marks it present, which is how a snapshot distinguishes a
32
+ * reported zero from an attribute the device has never sent. A consumer assembling a
33
+ * snapshot MUST NOT pre-populate fields with defaults — see properties.proto.
34
+ *
35
+ * Both comparisons are exact. attribute_name is byte-for-byte equal to the Matter
36
+ * attribute's spec spelling; it is NOT derived from the proto field name and case- or
37
+ * separator-insensitive matching against field names is not a valid fallback —
38
+ * OccupancySensorProperties and WindowCoveringProperties both have fields that no such
39
+ * transformation reaches. See matter_options.proto.
40
+ *
41
+ * When either step resolves to nothing the update is not storable. A consumer MUST NOT
42
+ * silently drop it: log it at warning with device_id, cluster_id_hex and attribute_name,
43
+ * and count it. A miss means one of three things, all of which need to be visible —
44
+ * the device reports an attribute this schema does not model, the device type is not
45
+ * modelled at all (see device.proto), or a connector is sending a non-Matter name.
46
+ * Advancing Device.last_seen on a miss is correct; the update is still evidence of life.
47
+ *
48
+ * Producers: attribute_name uses the Matter attribute's own PascalCase, acronyms
49
+ * included (e.g. "OccupiedHeatingSetpoint", "PIROccupiedToUnoccupiedDelay").
50
+ * cluster_id_hex is the Matter cluster ID as a 4-char lowercase-or-uppercase hex string
51
+ * with no 0x prefix (e.g. "0201" for Thermostat). Both are required for resolution;
52
+ * an update carrying only one of them cannot be stored.
20
53
  *
21
54
  * @generated from message kusinta.iot.device.v1.PropertyUpdate
22
55
  */
@@ -14,37 +14,42 @@ export declare const file_kusinta_iot_vendor_homematic_v1_homematic: GenFile;
14
14
  * HomeMatic-specific thermostat properties not available in Matter Thermostat cluster.
15
15
  * Add new fields at the next available field number — never reuse a removed number.
16
16
  *
17
+ * Every field is `optional`, for the same reason as device/v1/properties.proto: these are
18
+ * assembled from a PropertyUpdate stream, and zero is a real reading here too — boost_mode
19
+ * false means not boosting, control_mode 0 is an HmIP ControlMode value. Absent means never
20
+ * reported; present means a reading, including zero.
21
+ *
17
22
  * @generated from message kusinta.iot.vendor.homematic.v1.HmThermostatProps
18
23
  */
19
24
  export declare type HmThermostatProps = Message<"kusinta.iot.vendor.homematic.v1.HmThermostatProps"> & {
20
25
  /**
21
- * @generated from field: bool boost_mode = 1;
26
+ * @generated from field: optional bool boost_mode = 1;
22
27
  */
23
- boostMode: boolean;
28
+ boostMode?: boolean | undefined;
24
29
 
25
30
  /**
26
31
  * minutes remaining in boost
27
32
  *
28
- * @generated from field: float boost_time_period = 2;
33
+ * @generated from field: optional float boost_time_period = 2;
29
34
  */
30
- boostTimePeriod: number;
35
+ boostTimePeriod?: number | undefined;
31
36
 
32
37
  /**
33
38
  * HmIP ControlMode enum
34
39
  *
35
- * @generated from field: uint32 control_mode = 3;
40
+ * @generated from field: optional uint32 control_mode = 3;
36
41
  */
37
- controlMode: number;
42
+ controlMode?: number | undefined;
38
43
 
39
44
  /**
40
- * @generated from field: bool frost_protection = 4;
45
+ * @generated from field: optional bool frost_protection = 4;
41
46
  */
42
- frostProtection: boolean;
47
+ frostProtection?: boolean | undefined;
43
48
 
44
49
  /**
45
- * @generated from field: float current_profile_period = 5;
50
+ * @generated from field: optional float current_profile_period = 5;
46
51
  */
47
- currentProfilePeriod: number;
52
+ currentProfilePeriod?: number | undefined;
48
53
  };
49
54
 
50
55
  /**
@@ -8,7 +8,7 @@ import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
8
8
  * Describes the file kusinta/iot/vendor/homematic/v1/homematic.proto.
9
9
  */
10
10
  export const file_kusinta_iot_vendor_homematic_v1_homematic = /*@__PURE__*/
11
- fileDesc("Ci9rdXNpbnRhL2lvdC92ZW5kb3IvaG9tZW1hdGljL3YxL2hvbWVtYXRpYy5wcm90bxIfa3VzaW50YS5pb3QudmVuZG9yLmhvbWVtYXRpYy52MSKSAQoRSG1UaGVybW9zdGF0UHJvcHMSEgoKYm9vc3RfbW9kZRgBIAEoCBIZChFib29zdF90aW1lX3BlcmlvZBgCIAEoAhIUCgxjb250cm9sX21vZGUYAyABKA0SGAoQZnJvc3RfcHJvdGVjdGlvbhgEIAEoCBIeChZjdXJyZW50X3Byb2ZpbGVfcGVyaW9kGAUgASgCIq0BChhIb21lbWF0aWNWZW5kb3JFeHRlbnNpb24SGQoRaG9tZW1hdGljX2FkZHJlc3MYASABKAkSFgoOaG9tZW1hdGljX3R5cGUYAiABKAkSSwoNaG1fdGhlcm1vc3RhdBgKIAEoCzIyLmt1c2ludGEuaW90LnZlbmRvci5ob21lbWF0aWMudjEuSG1UaGVybW9zdGF0UHJvcHNIAEIRCg9ob21lbWF0aWNfcHJvcHNCAkgBYgZwcm90bzM");
11
+ fileDesc("Ci9rdXNpbnRhL2lvdC92ZW5kb3IvaG9tZW1hdGljL3YxL2hvbWVtYXRpYy5wcm90bxIfa3VzaW50YS5pb3QudmVuZG9yLmhvbWVtYXRpYy52MSKRAgoRSG1UaGVybW9zdGF0UHJvcHMSFwoKYm9vc3RfbW9kZRgBIAEoCEgAiAEBEh4KEWJvb3N0X3RpbWVfcGVyaW9kGAIgASgCSAGIAQESGQoMY29udHJvbF9tb2RlGAMgASgNSAKIAQESHQoQZnJvc3RfcHJvdGVjdGlvbhgEIAEoCEgDiAEBEiMKFmN1cnJlbnRfcHJvZmlsZV9wZXJpb2QYBSABKAJIBIgBAUINCgtfYm9vc3RfbW9kZUIUChJfYm9vc3RfdGltZV9wZXJpb2RCDwoNX2NvbnRyb2xfbW9kZUITChFfZnJvc3RfcHJvdGVjdGlvbkIZChdfY3VycmVudF9wcm9maWxlX3BlcmlvZCKtAQoYSG9tZW1hdGljVmVuZG9yRXh0ZW5zaW9uEhkKEWhvbWVtYXRpY19hZGRyZXNzGAEgASgJEhYKDmhvbWVtYXRpY190eXBlGAIgASgJEksKDWhtX3RoZXJtb3N0YXQYCiABKAsyMi5rdXNpbnRhLmlvdC52ZW5kb3IuaG9tZW1hdGljLnYxLkhtVGhlcm1vc3RhdFByb3BzSABCEQoPaG9tZW1hdGljX3Byb3BzQgJIAWIGcHJvdG8z");
12
12
 
13
13
  /**
14
14
  * Describes the message kusinta.iot.vendor.homematic.v1.HmThermostatProps.
@@ -8,6 +8,7 @@ import type { Device } from "../../device/v1/device_pb.js";
8
8
  import type { EffectivePermissions } from "../../access/v1/acl_pb.js";
9
9
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
10
10
  import type { PropertyUpdate } from "../../device/v1/property_update_pb.js";
11
+ import type { DeviceId } from "../../identity/v1/identity_pb.js";
11
12
 
12
13
  /**
13
14
  * Describes the file kusinta/iot/webrtc/v1/device_state.proto.
@@ -65,3 +66,65 @@ export declare type DevicePropertyEvent = Message<"kusinta.iot.webrtc.v1.DeviceP
65
66
  */
66
67
  export declare const DevicePropertyEventSchema: GenMessage<DevicePropertyEvent>;
67
68
 
69
+ /**
70
+ * A device appeared while the app was connected — the app leg's counterpart to
71
+ * connector.v1.DeviceAnnouncement, which the gateway can currently only drop.
72
+ *
73
+ * Carries the full Device, descriptor plus current typed properties, so the app can
74
+ * render it without a follow-up read — the same payload DeviceStateSnapshot gives
75
+ * per device.
76
+ *
77
+ * Apply as an upsert keyed on descriptor.device_id, never as an insert: a device can
78
+ * be in the snapshot and then announced, or announced twice across a connector
79
+ * reconnect.
80
+ *
81
+ * Discovery, not interest. Being told a device exists does not subscribe the app to
82
+ * it — that still takes AppMessage.subscribe. The gateway sends this only for devices
83
+ * the user is entitled to see; an unfiltered announcement would be a device
84
+ * enumeration channel.
85
+ *
86
+ * @generated from message kusinta.iot.webrtc.v1.DeviceAdded
87
+ */
88
+ export declare type DeviceAdded = Message<"kusinta.iot.webrtc.v1.DeviceAdded"> & {
89
+ /**
90
+ * @generated from field: kusinta.iot.device.v1.Device device = 1;
91
+ */
92
+ device?: Device | undefined;
93
+ };
94
+
95
+ /**
96
+ * Describes the message kusinta.iot.webrtc.v1.DeviceAdded.
97
+ * Use `create(DeviceAddedSchema)` to create a new message.
98
+ */
99
+ export declare const DeviceAddedSchema: GenMessage<DeviceAdded>;
100
+
101
+ /**
102
+ * A device is gone, because its connector said so via connector.v1.DeviceRemoval.
103
+ *
104
+ * A connector disconnecting is NOT a removal: an ordinary reconnect wipes the
105
+ * device→connector route while every device still exists, and treating that as a
106
+ * removal makes the whole UI flap. Unreachability is a separate signal — read
107
+ * device.v1.Device.last_seen for that.
108
+ *
109
+ * @generated from message kusinta.iot.webrtc.v1.DeviceRemoved
110
+ */
111
+ export declare type DeviceRemoved = Message<"kusinta.iot.webrtc.v1.DeviceRemoved"> & {
112
+ /**
113
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
114
+ */
115
+ deviceId?: DeviceId | undefined;
116
+
117
+ /**
118
+ * passed through from the connector, for logs
119
+ *
120
+ * @generated from field: string reason = 2;
121
+ */
122
+ reason: string;
123
+ };
124
+
125
+ /**
126
+ * Describes the message kusinta.iot.webrtc.v1.DeviceRemoved.
127
+ * Use `create(DeviceRemovedSchema)` to create a new message.
128
+ */
129
+ export declare const DeviceRemovedSchema: GenMessage<DeviceRemoved>;
130
+
@@ -7,12 +7,13 @@ import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
7
  import { file_kusinta_iot_device_v1_device } from "../../device/v1/device_pb.js";
8
8
  import { file_kusinta_iot_device_v1_property_update } from "../../device/v1/property_update_pb.js";
9
9
  import { file_kusinta_iot_access_v1_acl } from "../../access/v1/acl_pb.js";
10
+ import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
10
11
 
11
12
  /**
12
13
  * Describes the file kusinta/iot/webrtc/v1/device_state.proto.
13
14
  */
14
15
  export const file_kusinta_iot_webrtc_v1_device_state = /*@__PURE__*/
15
- fileDesc("CihrdXNpbnRhL2lvdC93ZWJydGMvdjEvZGV2aWNlX3N0YXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEiuwEKE0RldmljZVN0YXRlU25hcHNob3QSLgoHZGV2aWNlcxgBIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USQAoLcGVybWlzc2lvbnMYAiABKAsyKy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuRWZmZWN0aXZlUGVybWlzc2lvbnMSMgoOc25hcHNob3R0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoYBChNEZXZpY2VQcm9wZXJ0eUV2ZW50EjUKBnVwZGF0ZRgBIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5Qcm9wZXJ0eVVwZGF0ZRI4ChRnYXRld2F5X3Byb2Nlc3NlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCAkgBYgZwcm90bzM", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_access_v1_acl]);
16
+ fileDesc("CihrdXNpbnRhL2lvdC93ZWJydGMvdjEvZGV2aWNlX3N0YXRlLnByb3RvEhVrdXNpbnRhLmlvdC53ZWJydGMudjEiuwEKE0RldmljZVN0YXRlU25hcHNob3QSLgoHZGV2aWNlcxgBIAMoCzIdLmt1c2ludGEuaW90LmRldmljZS52MS5EZXZpY2USQAoLcGVybWlzc2lvbnMYAiABKAsyKy5rdXNpbnRhLmlvdC5hY2Nlc3MudjEuRWZmZWN0aXZlUGVybWlzc2lvbnMSMgoOc25hcHNob3R0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIoYBChNEZXZpY2VQcm9wZXJ0eUV2ZW50EjUKBnVwZGF0ZRgBIAEoCzIlLmt1c2ludGEuaW90LmRldmljZS52MS5Qcm9wZXJ0eVVwZGF0ZRI4ChRnYXRld2F5X3Byb2Nlc3NlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiPAoLRGV2aWNlQWRkZWQSLQoGZGV2aWNlGAEgASgLMh0ua3VzaW50YS5pb3QuZGV2aWNlLnYxLkRldmljZSJVCg1EZXZpY2VSZW1vdmVkEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEg4KBnJlYXNvbhgCIAEoCUICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_device_v1_device, file_kusinta_iot_device_v1_property_update, file_kusinta_iot_access_v1_acl, file_kusinta_iot_identity_v1_identity]);
16
17
 
17
18
  /**
18
19
  * Describes the message kusinta.iot.webrtc.v1.DeviceStateSnapshot.
@@ -28,3 +29,17 @@ export const DeviceStateSnapshotSchema = /*@__PURE__*/
28
29
  export const DevicePropertyEventSchema = /*@__PURE__*/
29
30
  messageDesc(file_kusinta_iot_webrtc_v1_device_state, 1);
30
31
 
32
+ /**
33
+ * Describes the message kusinta.iot.webrtc.v1.DeviceAdded.
34
+ * Use `create(DeviceAddedSchema)` to create a new message.
35
+ */
36
+ export const DeviceAddedSchema = /*@__PURE__*/
37
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 2);
38
+
39
+ /**
40
+ * Describes the message kusinta.iot.webrtc.v1.DeviceRemoved.
41
+ * Use `create(DeviceRemovedSchema)` to create a new message.
42
+ */
43
+ export const DeviceRemovedSchema = /*@__PURE__*/
44
+ messageDesc(file_kusinta_iot_webrtc_v1_device_state, 3);
45
+
@@ -2,11 +2,11 @@
2
2
  // @generated from file kusinta/iot/webrtc/v1/envelope.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
- import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
5
+ import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
6
6
  import type { Message } from "@bufbuild/protobuf";
7
7
  import type { DeviceId } from "../../identity/v1/identity_pb.js";
8
8
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
9
- import type { DevicePropertyEvent, DeviceStateSnapshot } from "./device_state_pb.js";
9
+ import type { DeviceAdded, DevicePropertyEvent, DeviceRemoved, DeviceStateSnapshot } from "./device_state_pb.js";
10
10
  import type { LivePermissionUpdate } from "./permission_push_pb.js";
11
11
  import type { CommandResult, DeviceCommand } from "./command_pb.js";
12
12
 
@@ -73,6 +73,12 @@ export declare type AppHandshake = Message<"kusinta.iot.webrtc.v1.AppHandshake">
73
73
  jwt: string;
74
74
 
75
75
  /**
76
+ * Initial interest set — an optimisation that saves one round trip, equivalent to
77
+ * sending SubscribeDevices immediately after the handshake. Interest only: naming
78
+ * an id here does not entitle the app to it, and ids the user may not see are
79
+ * refused in the SubscriptionAck that follows. Not the only mechanism — the set is
80
+ * revisable mid-session via AppMessage.subscribe / .unsubscribe.
81
+ *
76
82
  * @generated from field: repeated kusinta.iot.identity.v1.DeviceId subscribe_device_ids = 2;
77
83
  */
78
84
  subscribeDeviceIds: DeviceId[];
@@ -84,6 +90,110 @@ export declare type AppHandshake = Message<"kusinta.iot.webrtc.v1.AppHandshake">
84
90
  */
85
91
  export declare const AppHandshakeSchema: GenMessage<AppHandshake>;
86
92
 
93
+ /**
94
+ * Adds device_ids to what the app wants streamed. Interest, never entitlement:
95
+ * the gateway intersects the request with what the user is permitted to see and
96
+ * reports what it declined in SubscriptionAck.refused. Additive — ids already in
97
+ * the set are a no-op, so a retry after a dropped ack is safe.
98
+ *
99
+ * @generated from message kusinta.iot.webrtc.v1.SubscribeDevices
100
+ */
101
+ export declare type SubscribeDevices = Message<"kusinta.iot.webrtc.v1.SubscribeDevices"> & {
102
+ /**
103
+ * @generated from field: repeated kusinta.iot.identity.v1.DeviceId device_ids = 1;
104
+ */
105
+ deviceIds: DeviceId[];
106
+ };
107
+
108
+ /**
109
+ * Describes the message kusinta.iot.webrtc.v1.SubscribeDevices.
110
+ * Use `create(SubscribeDevicesSchema)` to create a new message.
111
+ */
112
+ export declare const SubscribeDevicesSchema: GenMessage<SubscribeDevices>;
113
+
114
+ /**
115
+ * Removes device_ids from what the app wants streamed. Removing an id the app is
116
+ * not subscribed to is a no-op, not an error.
117
+ *
118
+ * @generated from message kusinta.iot.webrtc.v1.UnsubscribeDevices
119
+ */
120
+ export declare type UnsubscribeDevices = Message<"kusinta.iot.webrtc.v1.UnsubscribeDevices"> & {
121
+ /**
122
+ * @generated from field: repeated kusinta.iot.identity.v1.DeviceId device_ids = 1;
123
+ */
124
+ deviceIds: DeviceId[];
125
+ };
126
+
127
+ /**
128
+ * Describes the message kusinta.iot.webrtc.v1.UnsubscribeDevices.
129
+ * Use `create(UnsubscribeDevicesSchema)` to create a new message.
130
+ */
131
+ export declare const UnsubscribeDevicesSchema: GenMessage<UnsubscribeDevices>;
132
+
133
+ /**
134
+ * A device the gateway declined to add to the interest set. Ids the gateway does
135
+ * not know are refused as NOT_ENTITLED rather than a distinct not-found code, so
136
+ * the ack cannot be used to enumerate devices the user may not see.
137
+ *
138
+ * @generated from message kusinta.iot.webrtc.v1.RefusedSubscription
139
+ */
140
+ export declare type RefusedSubscription = Message<"kusinta.iot.webrtc.v1.RefusedSubscription"> & {
141
+ /**
142
+ * @generated from field: kusinta.iot.identity.v1.DeviceId device_id = 1;
143
+ */
144
+ deviceId?: DeviceId | undefined;
145
+
146
+ /**
147
+ * @generated from field: kusinta.iot.webrtc.v1.GatewayErrorCode code = 2;
148
+ */
149
+ code: GatewayErrorCode;
150
+
151
+ /**
152
+ * human-readable, for logs
153
+ *
154
+ * @generated from field: string message = 3;
155
+ */
156
+ message: string;
157
+ };
158
+
159
+ /**
160
+ * Describes the message kusinta.iot.webrtc.v1.RefusedSubscription.
161
+ * Use `create(RefusedSubscriptionSchema)` to create a new message.
162
+ */
163
+ export declare const RefusedSubscriptionSchema: GenMessage<RefusedSubscription>;
164
+
165
+ /**
166
+ * Answer to SubscribeDevices / UnsubscribeDevices, gateway → Flutter app.
167
+ * `subscribed` is the effective set after the change, not a delta: an app that
168
+ * missed an ack or raced two requests re-syncs from it without reconnecting.
169
+ *
170
+ * @generated from message kusinta.iot.webrtc.v1.SubscriptionAck
171
+ */
172
+ export declare type SubscriptionAck = Message<"kusinta.iot.webrtc.v1.SubscriptionAck"> & {
173
+ /**
174
+ * AppMessage.message_id of the request
175
+ *
176
+ * @generated from field: string in_reply_to = 1;
177
+ */
178
+ inReplyTo: string;
179
+
180
+ /**
181
+ * @generated from field: repeated kusinta.iot.identity.v1.DeviceId subscribed = 2;
182
+ */
183
+ subscribed: DeviceId[];
184
+
185
+ /**
186
+ * @generated from field: repeated kusinta.iot.webrtc.v1.RefusedSubscription refused = 3;
187
+ */
188
+ refused: RefusedSubscription[];
189
+ };
190
+
191
+ /**
192
+ * Describes the message kusinta.iot.webrtc.v1.SubscriptionAck.
193
+ * Use `create(SubscriptionAckSchema)` to create a new message.
194
+ */
195
+ export declare const SubscriptionAckSchema: GenMessage<SubscriptionAck>;
196
+
87
197
  /**
88
198
  * @generated from message kusinta.iot.webrtc.v1.PropertyReadRequest
89
199
  */
@@ -110,6 +220,40 @@ export declare type PropertyReadRequest = Message<"kusinta.iot.webrtc.v1.Propert
110
220
  */
111
221
  export declare const PropertyReadRequestSchema: GenMessage<PropertyReadRequest>;
112
222
 
223
+ /**
224
+ * Session-level error, gateway → Flutter app. Mirrors connector.v1.GatewayError
225
+ * on the connector leg; kept separate because the two legs have different
226
+ * authorization semantics and this one has a closed code vocabulary.
227
+ *
228
+ * @generated from message kusinta.iot.webrtc.v1.GatewayError
229
+ */
230
+ export declare type GatewayError = Message<"kusinta.iot.webrtc.v1.GatewayError"> & {
231
+ /**
232
+ * @generated from field: kusinta.iot.webrtc.v1.GatewayErrorCode code = 1;
233
+ */
234
+ code: GatewayErrorCode;
235
+
236
+ /**
237
+ * human-readable, for logs — never rendered to a user
238
+ *
239
+ * @generated from field: string message = 2;
240
+ */
241
+ message: string;
242
+
243
+ /**
244
+ * structured detail, e.g. {"device_id": "therm-1"}
245
+ *
246
+ * @generated from field: map<string, string> metadata = 3;
247
+ */
248
+ metadata: { [key: string]: string };
249
+ };
250
+
251
+ /**
252
+ * Describes the message kusinta.iot.webrtc.v1.GatewayError.
253
+ * Use `create(GatewayErrorSchema)` to create a new message.
254
+ */
255
+ export declare const GatewayErrorSchema: GenMessage<GatewayError>;
256
+
113
257
  /**
114
258
  * GatewayMessage: gateway → Flutter app
115
259
  *
@@ -153,14 +297,6 @@ export declare type GatewayMessage = Message<"kusinta.iot.webrtc.v1.GatewayMessa
153
297
  */
154
298
  value: CommandResult;
155
299
  case: "commandResult";
156
- } | {
157
- /**
158
- * error description string
159
- *
160
- * @generated from field: string error = 7;
161
- */
162
- value: string;
163
- case: "error";
164
300
  } | {
165
301
  /**
166
302
  * @generated from field: kusinta.iot.webrtc.v1.Pong pong = 8;
@@ -173,6 +309,30 @@ export declare type GatewayMessage = Message<"kusinta.iot.webrtc.v1.GatewayMessa
173
309
  */
174
310
  value: HandshakeRejected;
175
311
  case: "handshakeRejected";
312
+ } | {
313
+ /**
314
+ * @generated from field: kusinta.iot.webrtc.v1.GatewayError error = 10;
315
+ */
316
+ value: GatewayError;
317
+ case: "error";
318
+ } | {
319
+ /**
320
+ * @generated from field: kusinta.iot.webrtc.v1.SubscriptionAck subscription_ack = 11;
321
+ */
322
+ value: SubscriptionAck;
323
+ case: "subscriptionAck";
324
+ } | {
325
+ /**
326
+ * @generated from field: kusinta.iot.webrtc.v1.DeviceAdded device_added = 12;
327
+ */
328
+ value: DeviceAdded;
329
+ case: "deviceAdded";
330
+ } | {
331
+ /**
332
+ * @generated from field: kusinta.iot.webrtc.v1.DeviceRemoved device_removed = 13;
333
+ */
334
+ value: DeviceRemoved;
335
+ case: "deviceRemoved";
176
336
  } | { case: undefined; value?: undefined };
177
337
  };
178
338
 
@@ -225,6 +385,18 @@ export declare type AppMessage = Message<"kusinta.iot.webrtc.v1.AppMessage"> & {
225
385
  */
226
386
  value: Ping;
227
387
  case: "ping";
388
+ } | {
389
+ /**
390
+ * @generated from field: kusinta.iot.webrtc.v1.SubscribeDevices subscribe = 7;
391
+ */
392
+ value: SubscribeDevices;
393
+ case: "subscribe";
394
+ } | {
395
+ /**
396
+ * @generated from field: kusinta.iot.webrtc.v1.UnsubscribeDevices unsubscribe = 8;
397
+ */
398
+ value: UnsubscribeDevices;
399
+ case: "unsubscribe";
228
400
  } | { case: undefined; value?: undefined };
229
401
  };
230
402
 
@@ -234,3 +406,53 @@ export declare type AppMessage = Message<"kusinta.iot.webrtc.v1.AppMessage"> & {
234
406
  */
235
407
  export declare const AppMessageSchema: GenMessage<AppMessage>;
236
408
 
409
+ /**
410
+ * Machine-readable classification of a session-level gateway error, so the app
411
+ * can branch without string-matching a human sentence. Deliberately an enum here,
412
+ * unlike the free-form code on connector.v1.GatewayError: the app leg is versioned
413
+ * together with the gateway, and clients need an exhaustive switch.
414
+ *
415
+ * @generated from enum kusinta.iot.webrtc.v1.GatewayErrorCode
416
+ */
417
+ export enum GatewayErrorCode {
418
+ /**
419
+ * Sender did not set a code, or sent one this client's schema does not know.
420
+ *
421
+ * @generated from enum value: GATEWAY_ERROR_CODE_UNSPECIFIED = 0;
422
+ */
423
+ UNSPECIFIED = 0,
424
+
425
+ /**
426
+ * Permanent refusal — the user may not see or act on this. Stop asking, tell the user.
427
+ *
428
+ * @generated from enum value: GATEWAY_ERROR_CODE_NOT_ENTITLED = 1;
429
+ */
430
+ NOT_ENTITLED = 1,
431
+
432
+ /**
433
+ * The app sent something malformed. A client bug: log it, do not retry.
434
+ *
435
+ * @generated from enum value: GATEWAY_ERROR_CODE_INVALID_REQUEST = 2;
436
+ */
437
+ INVALID_REQUEST = 2,
438
+
439
+ /**
440
+ * Transient failure. Retrying is reasonable.
441
+ *
442
+ * @generated from enum value: GATEWAY_ERROR_CODE_UNAVAILABLE = 3;
443
+ */
444
+ UNAVAILABLE = 3,
445
+
446
+ /**
447
+ * Gateway-side fault. Not the app's doing; retry cautiously.
448
+ *
449
+ * @generated from enum value: GATEWAY_ERROR_CODE_INTERNAL = 4;
450
+ */
451
+ INTERNAL = 4,
452
+ }
453
+
454
+ /**
455
+ * Describes the enum kusinta.iot.webrtc.v1.GatewayErrorCode.
456
+ */
457
+ export declare const GatewayErrorCodeSchema: GenEnum<GatewayErrorCode>;
458
+
@@ -2,7 +2,7 @@
2
2
  // @generated from file kusinta/iot/webrtc/v1/envelope.proto (package kusinta.iot.webrtc.v1, syntax proto3)
3
3
  /* eslint-disable */
4
4
 
5
- import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
5
+ import { enumDesc, fileDesc, messageDesc, tsEnum } from "@bufbuild/protobuf/codegenv2";
6
6
  import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
7
  import { file_kusinta_iot_identity_v1_identity } from "../../identity/v1/identity_pb.js";
8
8
  import { file_kusinta_iot_webrtc_v1_command } from "./command_pb.js";
@@ -13,7 +13,7 @@ import { file_kusinta_iot_webrtc_v1_permission_push } from "./permission_push_pb
13
13
  * Describes the file kusinta/iot/webrtc/v1/envelope.proto.
14
14
  */
15
15
  export const file_kusinta_iot_webrtc_v1_envelope = /*@__PURE__*/
16
- fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJ7ChNQcm9wZXJ0eVJlYWRSZXF1ZXN0EjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhYKDmF0dHJpYnV0ZV9uYW1lGAIgASgJEhYKDmNsdXN0ZXJfaWRfaGV4GAMgASgJIvgDCg5HYXRld2F5TWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkQKDnN0YXRlX3NuYXBzaG90GAMgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZVN0YXRlU25hcHNob3RIABJECg5wcm9wZXJ0eV9ldmVudBgEIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VQcm9wZXJ0eUV2ZW50SAASSAoRcGVybWlzc2lvbl91cGRhdGUYBSABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGl2ZVBlcm1pc3Npb25VcGRhdGVIABI+Cg5jb21tYW5kX3Jlc3VsdBgGIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kUmVzdWx0SAASDwoFZXJyb3IYByABKAlIABIrCgRwb25nGAggASgLMhsua3VzaW50YS5pb3Qud2VicnRjLnYxLlBvbmdIABJGChJoYW5kc2hha2VfcmVqZWN0ZWQYCSABKAsyKC5rdXNpbnRhLmlvdC53ZWJydGMudjEuSGFuZHNoYWtlUmVqZWN0ZWRIAEIJCgdwYXlsb2FkIrwCCgpBcHBNZXNzYWdlEhIKCm1lc3NhZ2VfaWQYASABKAkSKwoHc2VudF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOAoJaGFuZHNoYWtlGAMgASgLMiMua3VzaW50YS5pb3Qud2VicnRjLnYxLkFwcEhhbmRzaGFrZUgAEjcKB2NvbW1hbmQYBCABKAsyJC5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlQ29tbWFuZEgAEkIKDHJlYWRfcmVxdWVzdBgFIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qcm9wZXJ0eVJlYWRSZXF1ZXN0SAASKwoEcGluZxgGIAEoCzIbLmt1c2ludGEuaW90LndlYnJ0Yy52MS5QaW5nSABCCQoHcGF5bG9hZEICSAFiBnByb3RvMw", [file_google_protobuf_timestamp, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_permission_push]);
16
+ fileDesc("CiRrdXNpbnRhL2lvdC93ZWJydGMvdjEvZW52ZWxvcGUucHJvdG8SFWt1c2ludGEuaW90LndlYnJ0Yy52MSIGCgRQaW5nIgYKBFBvbmciIwoRSGFuZHNoYWtlUmVqZWN0ZWQSDgoGcmVhc29uGAEgASgJIlwKDEFwcEhhbmRzaGFrZRILCgNqd3QYASABKAkSPwoUc3Vic2NyaWJlX2RldmljZV9pZHMYAiADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJJChBTdWJzY3JpYmVEZXZpY2VzEjUKCmRldmljZV9pZHMYASADKAsyIS5rdXNpbnRhLmlvdC5pZGVudGl0eS52MS5EZXZpY2VJZCJLChJVbnN1YnNjcmliZURldmljZXMSNQoKZGV2aWNlX2lkcxgBIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkIpMBChNSZWZ1c2VkU3Vic2NyaXB0aW9uEjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjUKBGNvZGUYAiABKA4yJy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yQ29kZRIPCgdtZXNzYWdlGAMgASgJIpoBCg9TdWJzY3JpcHRpb25BY2sSEwoLaW5fcmVwbHlfdG8YASABKAkSNQoKc3Vic2NyaWJlZBgCIAMoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEjsKB3JlZnVzZWQYAyADKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUmVmdXNlZFN1YnNjcmlwdGlvbiJ7ChNQcm9wZXJ0eVJlYWRSZXF1ZXN0EjQKCWRldmljZV9pZBgBIAEoCzIhLmt1c2ludGEuaW90LmlkZW50aXR5LnYxLkRldmljZUlkEhYKDmF0dHJpYnV0ZV9uYW1lGAIgASgJEhYKDmNsdXN0ZXJfaWRfaGV4GAMgASgJIswBCgxHYXRld2F5RXJyb3ISNQoEY29kZRgBIAEoDjInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5HYXRld2F5RXJyb3JDb2RlEg8KB21lc3NhZ2UYAiABKAkSQwoIbWV0YWRhdGEYAyADKAsyMS5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9yLk1ldGFkYXRhRW50cnkaLwoNTWV0YWRhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIuMFCg5HYXRld2F5TWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEkQKDnN0YXRlX3NuYXBzaG90GAMgASgLMioua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZVN0YXRlU25hcHNob3RIABJECg5wcm9wZXJ0eV9ldmVudBgEIAEoCzIqLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VQcm9wZXJ0eUV2ZW50SAASSAoRcGVybWlzc2lvbl91cGRhdGUYBSABKAsyKy5rdXNpbnRhLmlvdC53ZWJydGMudjEuTGl2ZVBlcm1pc3Npb25VcGRhdGVIABI+Cg5jb21tYW5kX3Jlc3VsdBgGIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Db21tYW5kUmVzdWx0SAASKwoEcG9uZxgIIAEoCzIbLmt1c2ludGEuaW90LndlYnJ0Yy52MS5Qb25nSAASRgoSaGFuZHNoYWtlX3JlamVjdGVkGAkgASgLMigua3VzaW50YS5pb3Qud2VicnRjLnYxLkhhbmRzaGFrZVJlamVjdGVkSAASNAoFZXJyb3IYCiABKAsyIy5rdXNpbnRhLmlvdC53ZWJydGMudjEuR2F0ZXdheUVycm9ySAASQgoQc3Vic2NyaXB0aW9uX2FjaxgLIAEoCzImLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpcHRpb25BY2tIABI6CgxkZXZpY2VfYWRkZWQYDCABKAsyIi5rdXNpbnRhLmlvdC53ZWJydGMudjEuRGV2aWNlQWRkZWRIABI+Cg5kZXZpY2VfcmVtb3ZlZBgNIAEoCzIkLmt1c2ludGEuaW90LndlYnJ0Yy52MS5EZXZpY2VSZW1vdmVkSABCCQoHcGF5bG9hZEoECAcQCCK8AwoKQXBwTWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEisKB3NlbnRfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjgKCWhhbmRzaGFrZRgDIAEoCzIjLmt1c2ludGEuaW90LndlYnJ0Yy52MS5BcHBIYW5kc2hha2VIABI3Cgdjb21tYW5kGAQgASgLMiQua3VzaW50YS5pb3Qud2VicnRjLnYxLkRldmljZUNvbW1hbmRIABJCCgxyZWFkX3JlcXVlc3QYBSABKAsyKi5rdXNpbnRhLmlvdC53ZWJydGMudjEuUHJvcGVydHlSZWFkUmVxdWVzdEgAEisKBHBpbmcYBiABKAsyGy5rdXNpbnRhLmlvdC53ZWJydGMudjEuUGluZ0gAEjwKCXN1YnNjcmliZRgHIAEoCzInLmt1c2ludGEuaW90LndlYnJ0Yy52MS5TdWJzY3JpYmVEZXZpY2VzSAASQAoLdW5zdWJzY3JpYmUYCCABKAsyKS5rdXNpbnRhLmlvdC53ZWJydGMudjEuVW5zdWJzY3JpYmVEZXZpY2VzSABCCQoHcGF5bG9hZCrIAQoQR2F0ZXdheUVycm9yQ29kZRIiCh5HQVRFV0FZX0VSUk9SX0NPREVfVU5TUEVDSUZJRUQQABIjCh9HQVRFV0FZX0VSUk9SX0NPREVfTk9UX0VOVElUTEVEEAESJgoiR0FURVdBWV9FUlJPUl9DT0RFX0lOVkFMSURfUkVRVUVTVBACEiIKHkdBVEVXQVlfRVJST1JfQ09ERV9VTkFWQUlMQUJMRRADEh8KG0dBVEVXQVlfRVJST1JfQ09ERV9JTlRFUk5BTBAEQgJIAWIGcHJvdG8z", [file_google_protobuf_timestamp, file_kusinta_iot_identity_v1_identity, file_kusinta_iot_webrtc_v1_command, file_kusinta_iot_webrtc_v1_device_state, file_kusinta_iot_webrtc_v1_permission_push]);
17
17
 
18
18
  /**
19
19
  * Describes the message kusinta.iot.webrtc.v1.Ping.
@@ -43,24 +43,76 @@ export const HandshakeRejectedSchema = /*@__PURE__*/
43
43
  export const AppHandshakeSchema = /*@__PURE__*/
44
44
  messageDesc(file_kusinta_iot_webrtc_v1_envelope, 3);
45
45
 
46
+ /**
47
+ * Describes the message kusinta.iot.webrtc.v1.SubscribeDevices.
48
+ * Use `create(SubscribeDevicesSchema)` to create a new message.
49
+ */
50
+ export const SubscribeDevicesSchema = /*@__PURE__*/
51
+ messageDesc(file_kusinta_iot_webrtc_v1_envelope, 4);
52
+
53
+ /**
54
+ * Describes the message kusinta.iot.webrtc.v1.UnsubscribeDevices.
55
+ * Use `create(UnsubscribeDevicesSchema)` to create a new message.
56
+ */
57
+ export const UnsubscribeDevicesSchema = /*@__PURE__*/
58
+ messageDesc(file_kusinta_iot_webrtc_v1_envelope, 5);
59
+
60
+ /**
61
+ * Describes the message kusinta.iot.webrtc.v1.RefusedSubscription.
62
+ * Use `create(RefusedSubscriptionSchema)` to create a new message.
63
+ */
64
+ export const RefusedSubscriptionSchema = /*@__PURE__*/
65
+ messageDesc(file_kusinta_iot_webrtc_v1_envelope, 6);
66
+
67
+ /**
68
+ * Describes the message kusinta.iot.webrtc.v1.SubscriptionAck.
69
+ * Use `create(SubscriptionAckSchema)` to create a new message.
70
+ */
71
+ export const SubscriptionAckSchema = /*@__PURE__*/
72
+ messageDesc(file_kusinta_iot_webrtc_v1_envelope, 7);
73
+
46
74
  /**
47
75
  * Describes the message kusinta.iot.webrtc.v1.PropertyReadRequest.
48
76
  * Use `create(PropertyReadRequestSchema)` to create a new message.
49
77
  */
50
78
  export const PropertyReadRequestSchema = /*@__PURE__*/
51
- messageDesc(file_kusinta_iot_webrtc_v1_envelope, 4);
79
+ messageDesc(file_kusinta_iot_webrtc_v1_envelope, 8);
80
+
81
+ /**
82
+ * Describes the message kusinta.iot.webrtc.v1.GatewayError.
83
+ * Use `create(GatewayErrorSchema)` to create a new message.
84
+ */
85
+ export const GatewayErrorSchema = /*@__PURE__*/
86
+ messageDesc(file_kusinta_iot_webrtc_v1_envelope, 9);
52
87
 
53
88
  /**
54
89
  * Describes the message kusinta.iot.webrtc.v1.GatewayMessage.
55
90
  * Use `create(GatewayMessageSchema)` to create a new message.
56
91
  */
57
92
  export const GatewayMessageSchema = /*@__PURE__*/
58
- messageDesc(file_kusinta_iot_webrtc_v1_envelope, 5);
93
+ messageDesc(file_kusinta_iot_webrtc_v1_envelope, 10);
59
94
 
60
95
  /**
61
96
  * Describes the message kusinta.iot.webrtc.v1.AppMessage.
62
97
  * Use `create(AppMessageSchema)` to create a new message.
63
98
  */
64
99
  export const AppMessageSchema = /*@__PURE__*/
65
- messageDesc(file_kusinta_iot_webrtc_v1_envelope, 6);
100
+ messageDesc(file_kusinta_iot_webrtc_v1_envelope, 11);
101
+
102
+ /**
103
+ * Describes the enum kusinta.iot.webrtc.v1.GatewayErrorCode.
104
+ */
105
+ export const GatewayErrorCodeSchema = /*@__PURE__*/
106
+ enumDesc(file_kusinta_iot_webrtc_v1_envelope, 0);
107
+
108
+ /**
109
+ * Machine-readable classification of a session-level gateway error, so the app
110
+ * can branch without string-matching a human sentence. Deliberately an enum here,
111
+ * unlike the free-form code on connector.v1.GatewayError: the app leg is versioned
112
+ * together with the gateway, and clients need an exhaustive switch.
113
+ *
114
+ * @generated from enum kusinta.iot.webrtc.v1.GatewayErrorCode
115
+ */
116
+ export const GatewayErrorCode = /*@__PURE__*/
117
+ tsEnum(GatewayErrorCodeSchema);
66
118