@matter/general 0.16.0-alpha.0-20251006-3fe1e7c57 → 0.16.0-alpha.0-20251013-89bb7099d

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 (190) hide show
  1. package/dist/cjs/codec/Base64Codec.js +2 -2
  2. package/dist/cjs/codec/Base64Codec.js.map +1 -1
  3. package/dist/cjs/environment/Environment.d.ts +12 -18
  4. package/dist/cjs/environment/Environment.d.ts.map +1 -1
  5. package/dist/cjs/environment/Environment.js +17 -32
  6. package/dist/cjs/environment/Environment.js.map +1 -1
  7. package/dist/cjs/environment/Environmental.d.ts +16 -2
  8. package/dist/cjs/environment/Environmental.d.ts.map +1 -1
  9. package/dist/cjs/log/Logger.js +1 -1
  10. package/dist/cjs/net/Network.d.ts +4 -0
  11. package/dist/cjs/net/Network.d.ts.map +1 -1
  12. package/dist/cjs/net/Network.js +6 -0
  13. package/dist/cjs/net/Network.js.map +1 -1
  14. package/dist/cjs/net/ServerAddress.d.ts +1 -0
  15. package/dist/cjs/net/ServerAddress.d.ts.map +1 -1
  16. package/dist/cjs/net/ServerAddress.js +13 -0
  17. package/dist/cjs/net/ServerAddress.js.map +1 -1
  18. package/dist/cjs/net/http/HttpEndpoint.d.ts +53 -0
  19. package/dist/cjs/net/http/HttpEndpoint.d.ts.map +1 -0
  20. package/dist/cjs/net/http/HttpEndpoint.js +22 -0
  21. package/dist/cjs/net/http/HttpEndpoint.js.map +6 -0
  22. package/dist/cjs/net/http/HttpEndpointFactory.d.ts +23 -0
  23. package/dist/cjs/net/http/HttpEndpointFactory.d.ts.map +1 -0
  24. package/dist/cjs/net/http/HttpEndpointFactory.js +39 -0
  25. package/dist/cjs/net/http/HttpEndpointFactory.js.map +6 -0
  26. package/dist/cjs/net/http/HttpEndpointGroup.d.ts +17 -0
  27. package/dist/cjs/net/http/HttpEndpointGroup.d.ts.map +1 -0
  28. package/dist/cjs/net/http/HttpEndpointGroup.js +56 -0
  29. package/dist/cjs/net/http/HttpEndpointGroup.js.map +6 -0
  30. package/dist/cjs/net/http/HttpService.d.ts +20 -0
  31. package/dist/cjs/net/http/HttpService.d.ts.map +1 -0
  32. package/dist/cjs/net/http/HttpService.js +83 -0
  33. package/dist/cjs/net/http/HttpService.js.map +6 -0
  34. package/dist/cjs/net/http/HttpSharedEndpoint.d.ts +16 -0
  35. package/dist/cjs/net/http/HttpSharedEndpoint.d.ts.map +1 -0
  36. package/dist/cjs/net/http/HttpSharedEndpoint.js +92 -0
  37. package/dist/cjs/net/http/HttpSharedEndpoint.js.map +6 -0
  38. package/dist/cjs/net/http/index.d.ts +11 -0
  39. package/dist/cjs/net/http/index.d.ts.map +1 -0
  40. package/dist/cjs/net/http/index.js +28 -0
  41. package/dist/cjs/net/http/index.js.map +6 -0
  42. package/dist/cjs/net/index.d.ts +2 -0
  43. package/dist/cjs/net/index.d.ts.map +1 -1
  44. package/dist/cjs/net/index.js +2 -0
  45. package/dist/cjs/net/index.js.map +1 -1
  46. package/dist/cjs/net/mqtt/MqttEndpoint.d.ts +39 -0
  47. package/dist/cjs/net/mqtt/MqttEndpoint.d.ts.map +1 -0
  48. package/dist/cjs/net/mqtt/MqttEndpoint.js +36 -0
  49. package/dist/cjs/net/mqtt/MqttEndpoint.js.map +6 -0
  50. package/dist/cjs/net/mqtt/MqttEndpointFactory.d.ts +15 -0
  51. package/dist/cjs/net/mqtt/MqttEndpointFactory.d.ts.map +1 -0
  52. package/dist/cjs/net/mqtt/MqttEndpointFactory.js +31 -0
  53. package/dist/cjs/net/mqtt/MqttEndpointFactory.js.map +6 -0
  54. package/dist/cjs/net/mqtt/MqttService.d.ts +19 -0
  55. package/dist/cjs/net/mqtt/MqttService.d.ts.map +1 -0
  56. package/dist/cjs/net/mqtt/MqttService.js +52 -0
  57. package/dist/cjs/net/mqtt/MqttService.js.map +6 -0
  58. package/dist/cjs/net/mqtt/index.d.ts +9 -0
  59. package/dist/cjs/net/mqtt/index.d.ts.map +1 -0
  60. package/dist/cjs/net/mqtt/index.js +26 -0
  61. package/dist/cjs/net/mqtt/index.js.map +6 -0
  62. package/dist/cjs/net/udp/UdpChannel.d.ts +31 -2
  63. package/dist/cjs/net/udp/UdpChannel.d.ts.map +1 -1
  64. package/dist/cjs/net/udp/UdpMulticastServer.d.ts.map +1 -1
  65. package/dist/cjs/net/udp/UdpMulticastServer.js +6 -3
  66. package/dist/cjs/net/udp/UdpMulticastServer.js.map +1 -1
  67. package/dist/cjs/storage/StorageService.d.ts +5 -1
  68. package/dist/cjs/storage/StorageService.d.ts.map +1 -1
  69. package/dist/cjs/storage/StorageService.js +6 -1
  70. package/dist/cjs/storage/StorageService.js.map +1 -1
  71. package/dist/cjs/time/Duration.d.ts +1 -1
  72. package/dist/cjs/util/Abort.d.ts +4 -1
  73. package/dist/cjs/util/Abort.d.ts.map +1 -1
  74. package/dist/cjs/util/Abort.js +19 -3
  75. package/dist/cjs/util/Abort.js.map +1 -1
  76. package/dist/cjs/util/Construction.d.ts +1 -1
  77. package/dist/cjs/util/Multiplex.js +1 -1
  78. package/dist/cjs/util/Multiplex.js.map +1 -1
  79. package/dist/cjs/util/String.d.ts +5 -1
  80. package/dist/cjs/util/String.d.ts.map +1 -1
  81. package/dist/cjs/util/String.js +16 -0
  82. package/dist/cjs/util/String.js.map +1 -1
  83. package/dist/esm/codec/Base64Codec.js +2 -2
  84. package/dist/esm/codec/Base64Codec.js.map +1 -1
  85. package/dist/esm/environment/Environment.d.ts +12 -18
  86. package/dist/esm/environment/Environment.d.ts.map +1 -1
  87. package/dist/esm/environment/Environment.js +17 -32
  88. package/dist/esm/environment/Environment.js.map +1 -1
  89. package/dist/esm/environment/Environmental.d.ts +16 -2
  90. package/dist/esm/environment/Environmental.d.ts.map +1 -1
  91. package/dist/esm/log/Logger.js +1 -1
  92. package/dist/esm/net/Network.d.ts +4 -0
  93. package/dist/esm/net/Network.d.ts.map +1 -1
  94. package/dist/esm/net/Network.js +6 -0
  95. package/dist/esm/net/Network.js.map +1 -1
  96. package/dist/esm/net/ServerAddress.d.ts +1 -0
  97. package/dist/esm/net/ServerAddress.d.ts.map +1 -1
  98. package/dist/esm/net/ServerAddress.js +13 -0
  99. package/dist/esm/net/ServerAddress.js.map +1 -1
  100. package/dist/esm/net/http/HttpEndpoint.d.ts +53 -0
  101. package/dist/esm/net/http/HttpEndpoint.d.ts.map +1 -0
  102. package/dist/esm/net/http/HttpEndpoint.js +6 -0
  103. package/dist/esm/net/http/HttpEndpoint.js.map +6 -0
  104. package/dist/esm/net/http/HttpEndpointFactory.d.ts +23 -0
  105. package/dist/esm/net/http/HttpEndpointFactory.d.ts.map +1 -0
  106. package/dist/esm/net/http/HttpEndpointFactory.js +19 -0
  107. package/dist/esm/net/http/HttpEndpointFactory.js.map +6 -0
  108. package/dist/esm/net/http/HttpEndpointGroup.d.ts +17 -0
  109. package/dist/esm/net/http/HttpEndpointGroup.d.ts.map +1 -0
  110. package/dist/esm/net/http/HttpEndpointGroup.js +36 -0
  111. package/dist/esm/net/http/HttpEndpointGroup.js.map +6 -0
  112. package/dist/esm/net/http/HttpService.d.ts +20 -0
  113. package/dist/esm/net/http/HttpService.d.ts.map +1 -0
  114. package/dist/esm/net/http/HttpService.js +63 -0
  115. package/dist/esm/net/http/HttpService.js.map +6 -0
  116. package/dist/esm/net/http/HttpSharedEndpoint.d.ts +16 -0
  117. package/dist/esm/net/http/HttpSharedEndpoint.d.ts.map +1 -0
  118. package/dist/esm/net/http/HttpSharedEndpoint.js +72 -0
  119. package/dist/esm/net/http/HttpSharedEndpoint.js.map +6 -0
  120. package/dist/esm/net/http/index.d.ts +11 -0
  121. package/dist/esm/net/http/index.d.ts.map +1 -0
  122. package/dist/esm/net/http/index.js +11 -0
  123. package/dist/esm/net/http/index.js.map +6 -0
  124. package/dist/esm/net/index.d.ts +2 -0
  125. package/dist/esm/net/index.d.ts.map +1 -1
  126. package/dist/esm/net/index.js +2 -0
  127. package/dist/esm/net/index.js.map +1 -1
  128. package/dist/esm/net/mqtt/MqttEndpoint.d.ts +39 -0
  129. package/dist/esm/net/mqtt/MqttEndpoint.d.ts.map +1 -0
  130. package/dist/esm/net/mqtt/MqttEndpoint.js +16 -0
  131. package/dist/esm/net/mqtt/MqttEndpoint.js.map +6 -0
  132. package/dist/esm/net/mqtt/MqttEndpointFactory.d.ts +15 -0
  133. package/dist/esm/net/mqtt/MqttEndpointFactory.d.ts.map +1 -0
  134. package/dist/esm/net/mqtt/MqttEndpointFactory.js +11 -0
  135. package/dist/esm/net/mqtt/MqttEndpointFactory.js.map +6 -0
  136. package/dist/esm/net/mqtt/MqttService.d.ts +19 -0
  137. package/dist/esm/net/mqtt/MqttService.d.ts.map +1 -0
  138. package/dist/esm/net/mqtt/MqttService.js +32 -0
  139. package/dist/esm/net/mqtt/MqttService.js.map +6 -0
  140. package/dist/esm/net/mqtt/index.d.ts +9 -0
  141. package/dist/esm/net/mqtt/index.d.ts.map +1 -0
  142. package/dist/esm/net/mqtt/index.js +9 -0
  143. package/dist/esm/net/mqtt/index.js.map +6 -0
  144. package/dist/esm/net/udp/UdpChannel.d.ts +31 -2
  145. package/dist/esm/net/udp/UdpChannel.d.ts.map +1 -1
  146. package/dist/esm/net/udp/UdpMulticastServer.d.ts.map +1 -1
  147. package/dist/esm/net/udp/UdpMulticastServer.js +6 -3
  148. package/dist/esm/net/udp/UdpMulticastServer.js.map +1 -1
  149. package/dist/esm/storage/StorageService.d.ts +5 -1
  150. package/dist/esm/storage/StorageService.d.ts.map +1 -1
  151. package/dist/esm/storage/StorageService.js +6 -1
  152. package/dist/esm/storage/StorageService.js.map +1 -1
  153. package/dist/esm/time/Duration.d.ts +1 -1
  154. package/dist/esm/util/Abort.d.ts +4 -1
  155. package/dist/esm/util/Abort.d.ts.map +1 -1
  156. package/dist/esm/util/Abort.js +19 -3
  157. package/dist/esm/util/Abort.js.map +1 -1
  158. package/dist/esm/util/Construction.d.ts +1 -1
  159. package/dist/esm/util/Multiplex.js +1 -1
  160. package/dist/esm/util/Multiplex.js.map +1 -1
  161. package/dist/esm/util/String.d.ts +5 -1
  162. package/dist/esm/util/String.d.ts.map +1 -1
  163. package/dist/esm/util/String.js +16 -0
  164. package/dist/esm/util/String.js.map +1 -1
  165. package/package.json +2 -2
  166. package/src/codec/Base64Codec.ts +2 -2
  167. package/src/environment/Environment.ts +35 -52
  168. package/src/environment/Environmental.ts +17 -2
  169. package/src/log/Logger.ts +1 -1
  170. package/src/net/Network.ts +4 -0
  171. package/src/net/ServerAddress.ts +16 -0
  172. package/src/net/http/HttpEndpoint.ts +60 -0
  173. package/src/net/http/HttpEndpointFactory.ts +27 -0
  174. package/src/net/http/HttpEndpointGroup.ts +43 -0
  175. package/src/net/http/HttpService.ts +75 -0
  176. package/src/net/http/HttpSharedEndpoint.ts +88 -0
  177. package/src/net/http/index.ts +11 -0
  178. package/src/net/index.ts +2 -0
  179. package/src/net/mqtt/MqttEndpoint.ts +50 -0
  180. package/src/net/mqtt/MqttEndpointFactory.ts +17 -0
  181. package/src/net/mqtt/MqttService.ts +40 -0
  182. package/src/net/mqtt/index.ts +9 -0
  183. package/src/net/udp/UdpChannel.ts +35 -2
  184. package/src/net/udp/UdpMulticastServer.ts +3 -0
  185. package/src/storage/StorageService.ts +14 -1
  186. package/src/time/Duration.ts +1 -1
  187. package/src/util/Abort.ts +28 -4
  188. package/src/util/Construction.ts +2 -2
  189. package/src/util/Multiplex.ts +1 -1
  190. package/src/util/String.ts +25 -6
@@ -16,7 +16,7 @@ export declare function asyncNew<const A extends any[], const C extends new (...
16
16
  * Construction happens in the initializer parameter of {@link Construction} or via {@link Construction.construct} on
17
17
  * the subject. You invoke in your constructor and place in a property called "construction".
18
18
  *
19
- * Destruciton is optional and happens in the destructor parameter of {@link Construction#close} or via
19
+ * Destruction is optional and happens in the destructor parameter of {@link Construction#close} or via
20
20
  * {@link Construction.destruct} on the subject. Typically you invoke in a "close" method of the subject.
21
21
  *
22
22
  * If construction or destruction is not asynchronous (does not return a Promise) then they complete synchronously,
@@ -20,7 +20,7 @@ class BasicMultiplex {
20
20
  if (description) {
21
21
  message = `${message} in ${description}`;
22
22
  }
23
- logger.error(message, e);
23
+ logger.error(`${message}:`, e);
24
24
  }).finally(() => this.#workers.delete(entry)),
25
25
  description
26
26
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/Multiplex.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAc;AACvB,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AAEzB,MAAM,SAAS,OAAO,IAAI,WAAW;AAmB9B,MAAM,eAA4C;AAAA,EACrD,WAAW,IAAI,SAAsB;AAAA,EAErC,IAAI,QAA+B,aAAsB;AACrD,QAAI,CAAC,aAAa,GAAG,MAAM,GAAG;AAC1B;AAAA,IACJ;AAEA,UAAM,QAAQ;AAAA,MACV,MAAM,QAAQ,QAAQ,MAAM,EACvB,MAAM,OAAK;AACR,YAAI,UAAU;AACd,YAAI,aAAa;AACb,oBAAU,GAAG,OAAO,OAAO,WAAW;AAAA,QAC1C;AACA,eAAO,MAAM,SAAS,CAAC;AAAA,MAC3B,CAAC,EACA,QAAQ,MAAM,KAAK,SAAS,OAAO,KAAK,CAAC;AAAA,MAC9C;AAAA,IACJ;AAEA,SAAK,SAAS,IAAI,KAAK;AAAA,EAC3B;AAAA,EAEA,MAAM,QAAQ;AACV,WAAO,KAAK,SAAS,MAAM;AACvB,YAAM,qBAAqB,WAAW,CAAC,GAAG,KAAK,QAAQ,EAAE,IAAI,WAAS,MAAM,IAAI,CAAC;AAAA,IACrF;AAAA,EACJ;AAAA,EAEA,KACI,aACA,YACgC;AAChC,WAAO,KAAK,MAAM,EAAE,KAAK,aAAa,UAAU;AAAA,EACpD;AAAA,EAEA,CAAC,OAAO,YAAY,IAAI,KAAK,MAAM,KAAK,IAAI;AAChD;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,cAAc;AACvB,SAAS,4BAA4B;AACrC,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AAEzB,MAAM,SAAS,OAAO,IAAI,WAAW;AAmB9B,MAAM,eAA4C;AAAA,EACrD,WAAW,IAAI,SAAsB;AAAA,EAErC,IAAI,QAA+B,aAAsB;AACrD,QAAI,CAAC,aAAa,GAAG,MAAM,GAAG;AAC1B;AAAA,IACJ;AAEA,UAAM,QAAQ;AAAA,MACV,MAAM,QAAQ,QAAQ,MAAM,EACvB,MAAM,OAAK;AACR,YAAI,UAAU;AACd,YAAI,aAAa;AACb,oBAAU,GAAG,OAAO,OAAO,WAAW;AAAA,QAC1C;AACA,eAAO,MAAM,GAAG,OAAO,KAAK,CAAC;AAAA,MACjC,CAAC,EACA,QAAQ,MAAM,KAAK,SAAS,OAAO,KAAK,CAAC;AAAA,MAC9C;AAAA,IACJ;AAEA,SAAK,SAAS,IAAI,KAAK;AAAA,EAC3B;AAAA,EAEA,MAAM,QAAQ;AACV,WAAO,KAAK,SAAS,MAAM;AACvB,YAAM,qBAAqB,WAAW,CAAC,GAAG,KAAK,QAAQ,EAAE,IAAI,WAAS,MAAM,IAAI,CAAC;AAAA,IACrF;AAAA,EACJ;AAAA,EAEA,KACI,aACA,YACgC;AAChC,WAAO,KAAK,MAAM,EAAE,KAAK,aAAa,UAAU;AAAA,EACpD;AAAA,EAEA,CAAC,OAAO,YAAY,IAAI,KAAK,MAAM,KAAK,IAAI;AAChD;",
5
5
  "names": []
6
6
  }
@@ -16,7 +16,11 @@ export declare function decamelize(name: string, separator?: string): string;
16
16
  /**
17
17
  * Like JSON.stringify but targets well-formed JS and is slightly more readable.
18
18
  */
19
- export declare function serialize(value: any): string | undefined;
19
+ export declare function serialize(value: unknown): string | undefined;
20
+ /**
21
+ * Like {@link JSON.stringify} but with support for additional standard objects.
22
+ */
23
+ export declare function asJson(value: unknown, space?: number): string;
20
24
  export declare namespace serialize {
21
25
  /**
22
26
  * Custom serialization function key.
@@ -1 +1 @@
1
- {"version":3,"file":"String.d.ts","sourceRoot":"","sources":["../../../src/util/String.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GACE,UAAU,CAAC,CAAC,CAAC,CAClE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,UAAQ,UA8DxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,UAgBvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,GAAG,sBAyEnC;AAED,yBAAiB,SAAS,CAAC;IACvB;;OAEG;IACI,MAAM,SAAS,eAAsB,CAAC;IAE7C;;;OAGG;IACH,SAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,OAU9B;IAED;;OAEG;IACH,SAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,WAgBrC;CACJ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,UAkBvE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,UAwD3C"}
1
+ {"version":3,"file":"String.d.ts","sourceRoot":"","sources":["../../../src/util/String.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,CAAC,GACE,UAAU,CAAC,CAAC,CAAC,CAClE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,UAAQ,UA8DxD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAM,UAgBvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,sBAyEvC;AAED;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,UAcpD;AAED,yBAAiB,SAAS,CAAC;IACvB;;OAEG;IACI,MAAM,SAAS,eAAsB,CAAC;IAE7C;;;OAGG;IACH,SAAgB,IAAI,CAAC,KAAK,EAAE,GAAG,OAU9B;IAED;;OAEG;IACH,SAAgB,WAAW,CAAC,KAAK,EAAE,GAAG,WAgBrC;CACJ;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,UAkBvE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,UAwD3C"}
@@ -135,6 +135,21 @@ function serialize(value) {
135
135
  }
136
136
  return serializeOne(value);
137
137
  }
138
+ function asJson(value, space) {
139
+ return JSON.stringify(
140
+ value,
141
+ (_key, value2) => {
142
+ if (typeof value2 === "bigint") {
143
+ return value2.toString();
144
+ }
145
+ if (Bytes.isBytes(value2)) {
146
+ return Bytes.toHex(value2);
147
+ }
148
+ return value2;
149
+ },
150
+ space
151
+ );
152
+ }
138
153
  ((serialize2) => {
139
154
  serialize2.SERIALIZE = Symbol("SERIALIZE");
140
155
  function asIs(value) {
@@ -223,6 +238,7 @@ function serializeToJs(value) {
223
238
  return parts.join("");
224
239
  }
225
240
  export {
241
+ asJson,
226
242
  camelize,
227
243
  capitalize,
228
244
  decamelize,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/String.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["value", "serialize", "parts"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter/general",
3
- "version": "0.16.0-alpha.0-20251006-3fe1e7c57",
3
+ "version": "0.16.0-alpha.0-20251013-89bb7099d",
4
4
  "description": "Non-Matter support for Matter.js",
5
5
  "keywords": [
6
6
  "iot",
@@ -36,7 +36,7 @@
36
36
  "@noble/curves": "^2.0.1"
37
37
  },
38
38
  "devDependencies": {
39
- "@matter/testing": "0.16.0-alpha.0-20251006-3fe1e7c57"
39
+ "@matter/testing": "0.16.0-alpha.0-20251013-89bb7099d"
40
40
  },
41
41
  "files": [
42
42
  "dist/**/*",
@@ -103,7 +103,7 @@ export namespace Base64 {
103
103
  outLength += 1;
104
104
  break;
105
105
  case 1:
106
- throw new Error("Invalid base-64 encoding");
106
+ throw new SyntaxError("Invalid base-64 encoding");
107
107
  }
108
108
 
109
109
  const out = new Uint8Array(outLength);
@@ -113,7 +113,7 @@ export namespace Base64 {
113
113
  if (inPos >= inputLength) return 0;
114
114
  const v = A2B[input.codePointAt(inPos++) ?? -1];
115
115
  if (v === undefined) {
116
- throw new Error("Invalid base-64 encoding");
116
+ throw new SyntaxError("Invalid base-64 encoding");
117
117
  }
118
118
  return v;
119
119
  }
@@ -33,12 +33,12 @@ const logger = Logger.get("Environment");
33
33
  * TODO - could remove global singletons by moving here
34
34
  */
35
35
  export class Environment {
36
- #services?: Map<abstract new (...args: any[]) => any, Environmental.Service | null>;
36
+ #services?: Map<Environmental.ServiceType, Environmental.Service | null>;
37
37
  #name: string;
38
38
  #parent?: Environment;
39
- #added = Observable<[type: abstract new (...args: any[]) => {}, instance: {}]>();
40
- #deleted = Observable<[type: abstract new (...args: any[]) => {}, instance: {}]>();
41
- #serviceEvents = new Map<abstract new (...args: any[]) => any, Environmental.ServiceEvents<any>>();
39
+ #added = Observable<[type: Environmental.ServiceType, instance: {}]>();
40
+ #deleted = Observable<[type: Environmental.ServiceType, instance: {}]>();
41
+ #serviceEvents = new Map<Environmental.ServiceType, Environmental.ServiceEvents<any>>();
42
42
 
43
43
  constructor(name: string, parent?: Environment) {
44
44
  this.#name = name;
@@ -48,7 +48,7 @@ export class Environment {
48
48
  /**
49
49
  * Determine if an environmental service is available.
50
50
  */
51
- has(type: abstract new (...args: any[]) => any): boolean {
51
+ has(type: Environmental.ServiceType): boolean {
52
52
  const mine = this.#services?.get(type);
53
53
 
54
54
  if (mine === null) {
@@ -61,14 +61,14 @@ export class Environment {
61
61
  /**
62
62
  * Determine if an environmental services is owned by this environment (not an ancestor).
63
63
  */
64
- owns(type: abstract new (...args: any[]) => any): boolean {
64
+ owns(type: Environmental.ServiceType): boolean {
65
65
  return !!this.#services?.get(type);
66
66
  }
67
67
 
68
68
  /**
69
69
  * Access an environmental service.
70
70
  */
71
- get<T extends object>(type: abstract new (...args: any[]) => T): T {
71
+ get<T extends object>(type: Environmental.ServiceType<T>): T {
72
72
  const mine = this.#services?.get(type);
73
73
 
74
74
  if (mine !== undefined && mine !== null) {
@@ -77,21 +77,20 @@ export class Environment {
77
77
 
78
78
  // When null then we do not have it and also do not want to inherit from parent
79
79
  if (mine === undefined) {
80
- let instance = this.#parent?.maybeGet(type);
80
+ const instance = this.#parent?.maybeGet(type);
81
81
  if (instance !== undefined && instance !== null) {
82
82
  // Parent has it, use it
83
83
  return instance;
84
84
  }
85
+ }
85
86
 
86
- // ... otherwise try to create it
87
- if ((type as Environmental.Factory<T>)[Environmental.create]) {
88
- instance = (type as any)[Environmental.create](this) as T;
89
- if (!(instance instanceof type)) {
90
- throw new InternalError(`Service creation did not produce instance of ${type.name}`);
91
- }
92
- this.set(type, instance);
93
- return instance;
87
+ // ... otherwise try to create it. The create method must install it in the environment if needed
88
+ if ((type as Environmental.Factory<T>)[Environmental.create]) {
89
+ const instance = (type as any)[Environmental.create](this) as T;
90
+ if (!(instance instanceof type)) {
91
+ throw new InternalError(`Service creation did not produce instance of ${type.name}`);
94
92
  }
93
+ return instance;
95
94
  }
96
95
 
97
96
  throw new UnsupportedDependencyError(`Required dependency ${type.name}`, "is not available");
@@ -100,64 +99,48 @@ export class Environment {
100
99
  /**
101
100
  * Access an environmental service that may not exist.
102
101
  */
103
- maybeGet<T extends object>(type: abstract new (...args: any[]) => T): T | undefined {
102
+ maybeGet<T extends object>(type: Environmental.ServiceType<T>): T | undefined {
104
103
  if (this.has(type)) {
105
104
  return this.get(type);
106
105
  }
107
106
  }
108
107
 
109
108
  /**
110
- * Remove an environmental service.
109
+ * Remove an environmental service and block further inheritance
111
110
  *
112
111
  * @param type the class of the service to remove
113
112
  * @param instance optional instance expected, if existing instance does not match it is not deleted
114
113
  */
115
- delete(type: abstract new (...args: any[]) => any, instance?: any) {
116
- if (instance !== undefined && this.#services?.get(type) !== instance) {
114
+ delete(type: Environmental.ServiceType, instance?: any) {
115
+ const localInstance = this.#services?.get(type);
116
+
117
+ // Remove instance and replace by null to prevent inheritance from parent
118
+ this.#services?.set(type, null);
119
+
120
+ if (localInstance === undefined || localInstance === null) {
121
+ return;
122
+ }
123
+ if (instance !== undefined && localInstance !== instance) {
117
124
  return;
118
125
  }
119
- this.#services?.delete(type);
120
- this.#parent?.delete(type);
121
126
 
122
- this.#deleted.emit(type, instance);
127
+ this.#deleted.emit(type, localInstance);
123
128
 
124
129
  const serviceEvents = this.#serviceEvents.get(type);
125
130
  if (serviceEvents) {
126
- serviceEvents.deleted.emit(instance);
131
+ serviceEvents.deleted.emit(localInstance);
127
132
  }
128
133
  }
129
134
 
130
- /**
131
- * Prevent this environment from automatically instantiating or retrieving a service from parent environment.
132
- *
133
- * @param type the class of the service to block
134
- */
135
- block(type: abstract new (...args: any[]) => any) {
136
- const instance = this.#services?.get(type);
137
-
138
- if (instance !== undefined && instance !== null) {
139
- this.#services?.delete(type);
140
-
141
- this.#deleted.emit(type, instance);
142
-
143
- const serviceEvents = this.#serviceEvents.get(type);
144
- if (serviceEvents) {
145
- serviceEvents.deleted.emit(instance);
146
- }
147
- }
148
-
149
- this.#services?.set(type, null);
150
- }
151
-
152
135
  /**
153
136
  * Remove and close an environmental service.
154
137
  */
155
138
  close<T extends object>(
156
- type: abstract new (...args: any[]) => T,
139
+ type: Environmental.ServiceType<T>,
157
140
  ): T extends { close: () => MaybePromise<void> } ? MaybePromise<void> : void {
158
141
  const instance = this.maybeGet(type);
142
+ this.delete(type, instance); // delete and block inheritance
159
143
  if (instance !== undefined) {
160
- this.delete(type, instance);
161
144
  return (instance as Partial<Destructable>).close?.() as T extends { close: () => MaybePromise<void> }
162
145
  ? MaybePromise<void>
163
146
  : void;
@@ -176,7 +159,7 @@ export class Environment {
176
159
  /**
177
160
  * Install a preinitialized version of an environmental service.
178
161
  */
179
- set<T extends {}>(type: abstract new (...args: any[]) => T, instance: T) {
162
+ set<T extends {}>(type: Environmental.ServiceType<T>, instance: T) {
180
163
  if (!this.#services) {
181
164
  this.#services = new Map();
182
165
  }
@@ -222,7 +205,7 @@ export class Environment {
222
205
  *
223
206
  * This is a more convenient way to observe a specific service than {@link added} and {@link deleted}.
224
207
  */
225
- eventsFor<T extends Environmental.Factory<any>>(type: T) {
208
+ eventsFor<T extends Environmental.ServiceType>(type: T) {
226
209
  let events = this.#serviceEvents.get(type);
227
210
  if (events === undefined) {
228
211
  events = {
@@ -241,8 +224,8 @@ export class Environment {
241
224
  * {@link added} in the future if the service is added or replaced and/or {@link deleted} if the service is replaced
242
225
  * or deleted.
243
226
  */
244
- applyTo<T extends Environmental.Factory<any>>(
245
- type: T,
227
+ applyTo<T extends object>(
228
+ type: Environmental.ServiceType<T>,
246
229
  added?: (env: Environment, service: T) => MaybePromise<void>,
247
230
  deleted?: (env: Environment, service: T) => MaybePromise<void>,
248
231
  ) {
@@ -22,10 +22,25 @@ export namespace Environmental {
22
22
  construction?: Promise<any>;
23
23
  }
24
24
 
25
+ /**
26
+ * An object used for service identification.
27
+ *
28
+ * We use classes as the key for service registration. Classes serve as ideal keys because they are trivial to
29
+ * manage and allow us to manage services in a type-safe manner.
30
+ *
31
+ * Any class may be used as the service identifier; the only requirement is that a registered instance is a subclass
32
+ * of the {@link ServiceType}.
33
+ *
34
+ * Note that {@link Environment} only considers service available for the exact class under which they are
35
+ * registered. You cannot retrieve a service registered for a subclass of a {@link ServiceType} using the base
36
+ * class. You can however register the under both the base and derived {@link ServiceType}s.
37
+ */
38
+ export type ServiceType<T extends object = object> = abstract new (...args: any[]) => T;
39
+
25
40
  /**
26
41
  * A factory for a {@link Service}.
27
42
  *
28
- * A "factory" is just a class with a static {@link create} method that performs instantiation.
43
+ * A "factory" is a concrete {@link ServiceType} with a static {@link create} method that performs instantiation.
29
44
  */
30
45
  export interface Factory<T extends object = object> {
31
46
  new (...args: any[]): T;
@@ -42,7 +57,7 @@ export namespace Environmental {
42
57
  /**
43
58
  * Events related to service lifecycle.
44
59
  */
45
- export interface ServiceEvents<T extends abstract new (...args: any[]) => T> {
60
+ export interface ServiceEvents<T extends Environmental.ServiceType> {
46
61
  added: Observable<[instance: InstanceType<T>]>;
47
62
  deleted: Observable<[instance: InstanceType<T>]>;
48
63
  }
package/src/log/Logger.ts CHANGED
@@ -215,7 +215,7 @@ export class Logger {
215
215
  const dest = Logger.destinations[name];
216
216
 
217
217
  if (level < (dest.facilityLevels?.[this.#name] ?? dest.level)) {
218
- return;
218
+ continue;
219
219
  }
220
220
 
221
221
  if (!dest.context) {
@@ -12,6 +12,10 @@ export class NetworkError extends MatterError {}
12
12
 
13
13
  export class NoAddressAvailableError extends NetworkError {}
14
14
 
15
+ export class BindError extends NetworkError {}
16
+
17
+ export class AddressInUseError extends BindError {}
18
+
15
19
  export const STANDARD_MATTER_PORT = 5540;
16
20
 
17
21
  /**
@@ -84,6 +84,22 @@ export namespace ServerAddress {
84
84
  return Diagnostic.squash(...diagnostic);
85
85
  }
86
86
 
87
+ export function isEqual(a: ServerAddress, b: ServerAddress): boolean {
88
+ if (a.type !== b.type) {
89
+ return false;
90
+ }
91
+
92
+ if (a.type === "udp" && b.type === "udp") {
93
+ return a.ip === b.ip && a.port === b.port;
94
+ }
95
+
96
+ if (a.type === "ble" && b.type === "ble") {
97
+ return a.peripheralAddress === b.peripheralAddress;
98
+ }
99
+
100
+ return false;
101
+ }
102
+
87
103
  export function definitionOf(address: ServerAddress): Definition {
88
104
  return address;
89
105
  }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { AppAddress } from "#net/AppAddress.js";
8
+ import { Bytes } from "#util/Bytes.js";
9
+ import { MaybePromise } from "#util/Promises.js";
10
+
11
+ /**
12
+ * A platform-independent HTTP endpoint implementation.
13
+ *
14
+ * This provides a modern WinterTC-style interface with a focus on simplifying platform-specific implementations.
15
+ */
16
+ export interface HttpEndpoint {
17
+ /**
18
+ * Handler for normal HTTP requests.
19
+ */
20
+ http?: HttpEndpoint.HttpHandler;
21
+
22
+ /**
23
+ * Handler for WebSocket upgrade requests.
24
+ */
25
+ ws?: HttpEndpoint.WsHandler;
26
+
27
+ /**
28
+ * Release resources for the endpoint.
29
+ */
30
+ close(): Promise<void>;
31
+ }
32
+
33
+ export namespace HttpEndpoint {
34
+ /**
35
+ * HTTP request callback.
36
+ */
37
+ export type HttpHandler = (request: Request) => MaybePromise<void | Response>;
38
+
39
+ /**
40
+ * WebSocket request callback.
41
+ */
42
+ export type WsHandler = (request: Request, upgrade: () => Promise<WsConnection>) => MaybePromise<void>;
43
+
44
+ /**
45
+ * A WebSocket connection.
46
+ */
47
+ export interface WsConnection extends ReadableWritablePair<WsMessage, WsMessage> {}
48
+
49
+ /**
50
+ * Raw WebSocket message payload.
51
+ */
52
+ export type WsMessage = Bytes | string;
53
+
54
+ /**
55
+ * Configuration options.
56
+ */
57
+ export interface Options {
58
+ address: AppAddress.Definition;
59
+ }
60
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { HttpEndpoint } from "./HttpEndpoint.js";
8
+ import type { HttpService } from "./HttpService.js";
9
+
10
+ /**
11
+ * Environmental component that creates HTTP endpoints.
12
+ *
13
+ * This component creates a dedicated HTTP server. Use {@link HttpService} for shared access to HTTP endpoints.
14
+ */
15
+ export abstract class HttpEndpointFactory {
16
+ /**
17
+ * Indicates support for HTTP handlers.
18
+ */
19
+ supportsHttp = true;
20
+
21
+ /**
22
+ * Indicates support for WebSocket handlers.
23
+ */
24
+ supportsWs = true;
25
+
26
+ abstract create(options: HttpEndpoint.Options): Promise<HttpEndpoint>;
27
+ }
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Logger } from "#log/Logger.js";
8
+ import { MatterAggregateError } from "#MatterError.js";
9
+ import { HttpEndpoint } from "./HttpEndpoint.js";
10
+
11
+ const logger = Logger.get("HttpEndpointGroup");
12
+
13
+ /**
14
+ * A collection of HTTP endpoints that support the same set of handlers.
15
+ */
16
+ export class HttpEndpointGroup implements HttpEndpoint {
17
+ #endpoints: HttpEndpoint[];
18
+
19
+ constructor(endpoints: HttpEndpoint[]) {
20
+ this.#endpoints = endpoints;
21
+ }
22
+
23
+ set http(handler: HttpEndpoint.HttpHandler) {
24
+ for (const endpoint of this.#endpoints) {
25
+ endpoint.http = handler;
26
+ }
27
+ }
28
+
29
+ set ws(handler: HttpEndpoint.WsHandler) {
30
+ for (const endpoint of this.#endpoints) {
31
+ endpoint.ws = handler;
32
+ }
33
+ }
34
+
35
+ async close(): Promise<void> {
36
+ try {
37
+ await MatterAggregateError.allSettled(this.#endpoints.map(endpoint => endpoint.close()));
38
+ } catch (e) {
39
+ logger.error("Error closing HTTP endpoints", e);
40
+ }
41
+ this.#endpoints = [];
42
+ }
43
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Environment } from "#environment/Environment.js";
8
+ import { Environmental } from "#environment/Environmental.js";
9
+ import { ImplementationError } from "#MatterError.js";
10
+ import { AppAddress } from "#net/AppAddress.js";
11
+ import { HttpEndpoint } from "./HttpEndpoint.js";
12
+ import { HttpEndpointFactory } from "./HttpEndpointFactory.js";
13
+ import { HttpEndpointGroup } from "./HttpEndpointGroup.js";
14
+ import { HttpSharedEndpoint } from "./HttpSharedEndpoint.js";
15
+
16
+ /**
17
+ * An environmental service that manages shared access to a set of endpoints.
18
+ */
19
+ export class HttpService {
20
+ #factory: HttpEndpointFactory;
21
+ #endpoints = {} as Record<string, HttpSharedEndpoint>;
22
+
23
+ constructor(factory: HttpEndpointFactory) {
24
+ this.#factory = factory;
25
+ }
26
+
27
+ async create(...addresses: AppAddress.Definition[]) {
28
+ if (addresses.length === 1) {
29
+ return this.#forAddress(addresses[0]);
30
+ }
31
+
32
+ const endpoints = Array<HttpEndpoint>();
33
+
34
+ try {
35
+ for (const address of addresses) {
36
+ endpoints.push(await this.#forAddress(address));
37
+ }
38
+ } catch (e) {
39
+ await Promise.allSettled(endpoints.map(endpoint => endpoint.close()));
40
+ throw e;
41
+ }
42
+
43
+ return new HttpEndpointGroup(endpoints);
44
+ }
45
+
46
+ async #forAddress(address: AppAddress.Definition) {
47
+ const addr = AppAddress.for(address);
48
+ if (addr.appProtocol !== "http" && addr.appProtocol !== "ws") {
49
+ throw new ImplementationError(`Unsupported address ${addr} for HTTP endpoint`);
50
+ }
51
+
52
+ const key = JSON.stringify(addr.transport);
53
+ let endpoint = this.#endpoints[key];
54
+ if (endpoint) {
55
+ if (endpoint.isTls !== addr.isTls) {
56
+ const addrIs = addr.isTls ? "encrypted" : "unencrypted";
57
+ const endpointIs = endpoint.isTls ? "encrypted" : "unencrypted";
58
+ throw new ImplementationError(
59
+ `Service address ${addr} is ${addrIs} but existing endpoint is ${endpointIs}`,
60
+ );
61
+ }
62
+ } else {
63
+ endpoint = new HttpSharedEndpoint(addr.isTls, () => this.#factory.create({ address }));
64
+ this.#endpoints[key] = endpoint;
65
+ }
66
+
67
+ return await endpoint.use();
68
+ }
69
+
70
+ static [Environmental.create](env: Environment) {
71
+ const instance = new HttpService(env.get(HttpEndpointFactory));
72
+ env.set(HttpService, instance);
73
+ return instance;
74
+ }
75
+ }