@matter/general 0.11.0-alpha.0-20241005-e3e4e4a7a
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.
- package/LICENSE +201 -0
- package/README.md +3 -0
- package/dist/cjs/MatterError.d.ts +95 -0
- package/dist/cjs/MatterError.d.ts.map +1 -0
- package/dist/cjs/MatterError.js +177 -0
- package/dist/cjs/MatterError.js.map +6 -0
- package/dist/cjs/codec/Base64Codec.d.ts +23 -0
- package/dist/cjs/codec/Base64Codec.d.ts.map +1 -0
- package/dist/cjs/codec/Base64Codec.js +134 -0
- package/dist/cjs/codec/Base64Codec.js.map +6 -0
- package/dist/cjs/codec/DerCodec.d.ts +83 -0
- package/dist/cjs/codec/DerCodec.d.ts.map +1 -0
- package/dist/cjs/codec/DerCodec.js +286 -0
- package/dist/cjs/codec/DerCodec.js.map +6 -0
- package/dist/cjs/codec/DerTypes.d.ts +73 -0
- package/dist/cjs/codec/DerTypes.d.ts.map +1 -0
- package/dist/cjs/codec/DerTypes.js +132 -0
- package/dist/cjs/codec/DerTypes.js.map +6 -0
- package/dist/cjs/codec/DnsCodec.d.ts +86 -0
- package/dist/cjs/codec/DnsCodec.d.ts.map +1 -0
- package/dist/cjs/codec/DnsCodec.js +355 -0
- package/dist/cjs/codec/DnsCodec.js.map +6 -0
- package/dist/cjs/codec/index.d.ts +10 -0
- package/dist/cjs/codec/index.d.ts.map +1 -0
- package/dist/cjs/codec/index.js +27 -0
- package/dist/cjs/codec/index.js.map +6 -0
- package/dist/cjs/crypto/Crypto.d.ts +169 -0
- package/dist/cjs/crypto/Crypto.d.ts.map +1 -0
- package/dist/cjs/crypto/Crypto.js +103 -0
- package/dist/cjs/crypto/Crypto.js.map +6 -0
- package/dist/cjs/crypto/CryptoConstants.d.ts +19 -0
- package/dist/cjs/crypto/CryptoConstants.d.ts.map +1 -0
- package/dist/cjs/crypto/CryptoConstants.js +48 -0
- package/dist/cjs/crypto/CryptoConstants.js.map +6 -0
- package/dist/cjs/crypto/Key.d.ts +171 -0
- package/dist/cjs/crypto/Key.d.ts.map +1 -0
- package/dist/cjs/crypto/Key.js +356 -0
- package/dist/cjs/crypto/Key.js.map +6 -0
- package/dist/cjs/crypto/Spake2p.d.ts +40 -0
- package/dist/cjs/crypto/Spake2p.d.ts.map +1 -0
- package/dist/cjs/crypto/Spake2p.js +128 -0
- package/dist/cjs/crypto/Spake2p.js.map +6 -0
- package/dist/cjs/crypto/index.d.ts +10 -0
- package/dist/cjs/crypto/index.d.ts.map +1 -0
- package/dist/cjs/crypto/index.js +27 -0
- package/dist/cjs/crypto/index.js.map +6 -0
- package/dist/cjs/environment/Environment.d.ts +96 -0
- package/dist/cjs/environment/Environment.d.ts.map +1 -0
- package/dist/cjs/environment/Environment.js +199 -0
- package/dist/cjs/environment/Environment.js.map +6 -0
- package/dist/cjs/environment/Environmental.d.ts +52 -0
- package/dist/cjs/environment/Environmental.d.ts.map +1 -0
- package/dist/cjs/environment/Environmental.js +33 -0
- package/dist/cjs/environment/Environmental.js.map +6 -0
- package/dist/cjs/environment/RuntimeService.d.ts +107 -0
- package/dist/cjs/environment/RuntimeService.d.ts.map +1 -0
- package/dist/cjs/environment/RuntimeService.js +222 -0
- package/dist/cjs/environment/RuntimeService.js.map +6 -0
- package/dist/cjs/environment/VariableService.d.ts +58 -0
- package/dist/cjs/environment/VariableService.d.ts.map +1 -0
- package/dist/cjs/environment/VariableService.js +257 -0
- package/dist/cjs/environment/VariableService.js.map +6 -0
- package/dist/cjs/environment/index.d.ts +10 -0
- package/dist/cjs/environment/index.d.ts.map +1 -0
- package/dist/cjs/environment/index.js +27 -0
- package/dist/cjs/environment/index.js.map +6 -0
- package/dist/cjs/index.d.ts +17 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +34 -0
- package/dist/cjs/index.js.map +6 -0
- package/dist/cjs/log/Diagnostic.d.ts +140 -0
- package/dist/cjs/log/Diagnostic.d.ts.map +1 -0
- package/dist/cjs/log/Diagnostic.js +297 -0
- package/dist/cjs/log/Diagnostic.js.map +6 -0
- package/dist/cjs/log/DiagnosticSource.d.ts +16 -0
- package/dist/cjs/log/DiagnosticSource.d.ts.map +1 -0
- package/dist/cjs/log/DiagnosticSource.js +45 -0
- package/dist/cjs/log/DiagnosticSource.js.map +6 -0
- package/dist/cjs/log/LogFormat.d.ts +33 -0
- package/dist/cjs/log/LogFormat.d.ts.map +1 -0
- package/dist/cjs/log/LogFormat.js +503 -0
- package/dist/cjs/log/LogFormat.js.map +6 -0
- package/dist/cjs/log/LogLevel.d.ts +18 -0
- package/dist/cjs/log/LogLevel.d.ts.map +1 -0
- package/dist/cjs/log/LogLevel.js +57 -0
- package/dist/cjs/log/LogLevel.js.map +6 -0
- package/dist/cjs/log/Logger.d.ts +220 -0
- package/dist/cjs/log/Logger.d.ts.map +1 -0
- package/dist/cjs/log/Logger.js +401 -0
- package/dist/cjs/log/Logger.js.map +6 -0
- package/dist/cjs/log/index.d.ts +11 -0
- package/dist/cjs/log/index.d.ts.map +1 -0
- package/dist/cjs/log/index.js +28 -0
- package/dist/cjs/log/index.js.map +6 -0
- package/dist/cjs/math/ReedSolomon.d.ts +11 -0
- package/dist/cjs/math/ReedSolomon.d.ts.map +1 -0
- package/dist/cjs/math/ReedSolomon.js +109 -0
- package/dist/cjs/math/ReedSolomon.js.map +6 -0
- package/dist/cjs/math/Verhoeff.d.ts +17 -0
- package/dist/cjs/math/Verhoeff.d.ts.map +1 -0
- package/dist/cjs/math/Verhoeff.js +64 -0
- package/dist/cjs/math/Verhoeff.js.map +6 -0
- package/dist/cjs/math/index.d.ts +8 -0
- package/dist/cjs/math/index.d.ts.map +1 -0
- package/dist/cjs/math/index.js +25 -0
- package/dist/cjs/math/index.js.map +6 -0
- package/dist/cjs/net/Channel.d.ts +24 -0
- package/dist/cjs/net/Channel.d.ts.map +1 -0
- package/dist/cjs/net/Channel.js +35 -0
- package/dist/cjs/net/Channel.js.map +6 -0
- package/dist/cjs/net/NetInterface.d.ts +24 -0
- package/dist/cjs/net/NetInterface.d.ts.map +1 -0
- package/dist/cjs/net/NetInterface.js +42 -0
- package/dist/cjs/net/NetInterface.js.map +6 -0
- package/dist/cjs/net/Network.d.ts +54 -0
- package/dist/cjs/net/Network.d.ts.map +1 -0
- package/dist/cjs/net/Network.js +50 -0
- package/dist/cjs/net/Network.js.map +6 -0
- package/dist/cjs/net/ServerAddress.d.ts +17 -0
- package/dist/cjs/net/ServerAddress.d.ts.map +1 -0
- package/dist/cjs/net/ServerAddress.js +32 -0
- package/dist/cjs/net/ServerAddress.js.map +6 -0
- package/dist/cjs/net/TransportInterface.d.ts +40 -0
- package/dist/cjs/net/TransportInterface.d.ts.map +1 -0
- package/dist/cjs/net/TransportInterface.js +55 -0
- package/dist/cjs/net/TransportInterface.js.map +6 -0
- package/dist/cjs/net/UdpChannel.d.ts +25 -0
- package/dist/cjs/net/UdpChannel.d.ts.map +1 -0
- package/dist/cjs/net/UdpChannel.js +30 -0
- package/dist/cjs/net/UdpChannel.js.map +6 -0
- package/dist/cjs/net/UdpInterface.d.ts +35 -0
- package/dist/cjs/net/UdpInterface.d.ts.map +1 -0
- package/dist/cjs/net/UdpInterface.js +82 -0
- package/dist/cjs/net/UdpInterface.js.map +6 -0
- package/dist/cjs/net/UdpMulticastServer.d.ts +30 -0
- package/dist/cjs/net/UdpMulticastServer.d.ts.map +1 -0
- package/dist/cjs/net/UdpMulticastServer.js +133 -0
- package/dist/cjs/net/UdpMulticastServer.js.map +6 -0
- package/dist/cjs/net/index.d.ts +17 -0
- package/dist/cjs/net/index.d.ts.map +1 -0
- package/dist/cjs/net/index.js +34 -0
- package/dist/cjs/net/index.js.map +6 -0
- package/dist/cjs/net/mock/MockNetwork.d.ts +19 -0
- package/dist/cjs/net/mock/MockNetwork.d.ts.map +1 -0
- package/dist/cjs/net/mock/MockNetwork.js +56 -0
- package/dist/cjs/net/mock/MockNetwork.js.map +6 -0
- package/dist/cjs/net/mock/MockUdpChannel.d.ts +27 -0
- package/dist/cjs/net/mock/MockUdpChannel.d.ts.map +1 -0
- package/dist/cjs/net/mock/MockUdpChannel.js +76 -0
- package/dist/cjs/net/mock/MockUdpChannel.js.map +6 -0
- package/dist/cjs/net/mock/NetworkSimulator.d.ts +18 -0
- package/dist/cjs/net/mock/NetworkSimulator.d.ts.map +1 -0
- package/dist/cjs/net/mock/NetworkSimulator.js +73 -0
- package/dist/cjs/net/mock/NetworkSimulator.js.map +6 -0
- package/dist/cjs/package.json +6 -0
- package/dist/cjs/polyfills/disposable.d.ts +7 -0
- package/dist/cjs/polyfills/disposable.d.ts.map +1 -0
- package/dist/cjs/polyfills/disposable.js +19 -0
- package/dist/cjs/polyfills/disposable.js.map +6 -0
- package/dist/cjs/polyfills/index.d.ts +7 -0
- package/dist/cjs/polyfills/index.d.ts.map +1 -0
- package/dist/cjs/polyfills/index.js +8 -0
- package/dist/cjs/polyfills/index.js.map +6 -0
- package/dist/cjs/storage/Storage.d.ts +54 -0
- package/dist/cjs/storage/Storage.d.ts.map +1 -0
- package/dist/cjs/storage/Storage.js +38 -0
- package/dist/cjs/storage/Storage.js.map +6 -0
- package/dist/cjs/storage/StorageBackendMemory.d.ts +27 -0
- package/dist/cjs/storage/StorageBackendMemory.d.ts.map +1 -0
- package/dist/cjs/storage/StorageBackendMemory.js +131 -0
- package/dist/cjs/storage/StorageBackendMemory.js.map +6 -0
- package/dist/cjs/storage/StorageContext.d.ts +26 -0
- package/dist/cjs/storage/StorageContext.d.ts.map +1 -0
- package/dist/cjs/storage/StorageContext.js +117 -0
- package/dist/cjs/storage/StorageContext.js.map +6 -0
- package/dist/cjs/storage/StorageManager.d.ts +17 -0
- package/dist/cjs/storage/StorageManager.d.ts.map +1 -0
- package/dist/cjs/storage/StorageManager.js +59 -0
- package/dist/cjs/storage/StorageManager.js.map +6 -0
- package/dist/cjs/storage/StorageService.d.ts +35 -0
- package/dist/cjs/storage/StorageService.d.ts.map +1 -0
- package/dist/cjs/storage/StorageService.js +82 -0
- package/dist/cjs/storage/StorageService.js.map +6 -0
- package/dist/cjs/storage/StringifyTools.d.ts +16 -0
- package/dist/cjs/storage/StringifyTools.d.ts.map +1 -0
- package/dist/cjs/storage/StringifyTools.js +105 -0
- package/dist/cjs/storage/StringifyTools.js.map +6 -0
- package/dist/cjs/storage/index.d.ts +12 -0
- package/dist/cjs/storage/index.d.ts.map +1 -0
- package/dist/cjs/storage/index.js +29 -0
- package/dist/cjs/storage/index.js.map +6 -0
- package/dist/cjs/time/Time.d.ts +66 -0
- package/dist/cjs/time/Time.d.ts.map +1 -0
- package/dist/cjs/time/Time.js +137 -0
- package/dist/cjs/time/Time.js.map +6 -0
- package/dist/cjs/time/index.d.ts +7 -0
- package/dist/cjs/time/index.d.ts.map +1 -0
- package/dist/cjs/time/index.js +24 -0
- package/dist/cjs/time/index.js.map +6 -0
- package/dist/cjs/tsconfig.tsbuildinfo +1 -0
- package/dist/cjs/util/Array.d.ts +12 -0
- package/dist/cjs/util/Array.d.ts.map +1 -0
- package/dist/cjs/util/Array.js +24 -0
- package/dist/cjs/util/Array.js.map +6 -0
- package/dist/cjs/util/Bytes.d.ts +23 -0
- package/dist/cjs/util/Bytes.d.ts.map +1 -0
- package/dist/cjs/util/Bytes.js +95 -0
- package/dist/cjs/util/Bytes.js.map +6 -0
- package/dist/cjs/util/Cache.d.ts +33 -0
- package/dist/cjs/util/Cache.d.ts.map +1 -0
- package/dist/cjs/util/Cache.js +114 -0
- package/dist/cjs/util/Cache.js.map +6 -0
- package/dist/cjs/util/Construction.d.ts +182 -0
- package/dist/cjs/util/Construction.d.ts.map +1 -0
- package/dist/cjs/util/Construction.js +417 -0
- package/dist/cjs/util/Construction.js.map +6 -0
- package/dist/cjs/util/DataReadQueue.d.ts +17 -0
- package/dist/cjs/util/DataReadQueue.d.ts.map +1 -0
- package/dist/cjs/util/DataReadQueue.js +76 -0
- package/dist/cjs/util/DataReadQueue.js.map +6 -0
- package/dist/cjs/util/DataReader.d.ts +32 -0
- package/dist/cjs/util/DataReader.d.ts.map +1 -0
- package/dist/cjs/util/DataReader.js +101 -0
- package/dist/cjs/util/DataReader.js.map +6 -0
- package/dist/cjs/util/DataWriter.d.ts +26 -0
- package/dist/cjs/util/DataWriter.d.ts.map +1 -0
- package/dist/cjs/util/DataWriter.js +114 -0
- package/dist/cjs/util/DataWriter.js.map +6 -0
- package/dist/cjs/util/DeepCopy.d.ts +12 -0
- package/dist/cjs/util/DeepCopy.d.ts.map +1 -0
- package/dist/cjs/util/DeepCopy.js +58 -0
- package/dist/cjs/util/DeepCopy.js.map +6 -0
- package/dist/cjs/util/DeepEqual.d.ts +7 -0
- package/dist/cjs/util/DeepEqual.d.ts.map +1 -0
- package/dist/cjs/util/DeepEqual.js +55 -0
- package/dist/cjs/util/DeepEqual.js.map +6 -0
- package/dist/cjs/util/Error.d.ts +12 -0
- package/dist/cjs/util/Error.d.ts.map +1 -0
- package/dist/cjs/util/Error.js +41 -0
- package/dist/cjs/util/Error.js.map +6 -0
- package/dist/cjs/util/GeneratedClass.d.ts +62 -0
- package/dist/cjs/util/GeneratedClass.d.ts.map +1 -0
- package/dist/cjs/util/GeneratedClass.js +117 -0
- package/dist/cjs/util/GeneratedClass.js.map +6 -0
- package/dist/cjs/util/Introspection.d.ts +38 -0
- package/dist/cjs/util/Introspection.d.ts.map +1 -0
- package/dist/cjs/util/Introspection.js +85 -0
- package/dist/cjs/util/Introspection.js.map +6 -0
- package/dist/cjs/util/Ip.d.ts +8 -0
- package/dist/cjs/util/Ip.d.ts.map +1 -0
- package/dist/cjs/util/Ip.js +90 -0
- package/dist/cjs/util/Ip.js.map +6 -0
- package/dist/cjs/util/Lifecycle.d.ts +97 -0
- package/dist/cjs/util/Lifecycle.d.ts.map +1 -0
- package/dist/cjs/util/Lifecycle.js +89 -0
- package/dist/cjs/util/Lifecycle.js.map +6 -0
- package/dist/cjs/util/Multiplex.d.ts +14 -0
- package/dist/cjs/util/Multiplex.d.ts.map +1 -0
- package/dist/cjs/util/Multiplex.js +22 -0
- package/dist/cjs/util/Multiplex.js.map +6 -0
- package/dist/cjs/util/Mutex.d.ts +34 -0
- package/dist/cjs/util/Mutex.d.ts.map +1 -0
- package/dist/cjs/util/Mutex.js +105 -0
- package/dist/cjs/util/Mutex.js.map +6 -0
- package/dist/cjs/util/NamedHandler.d.ts +21 -0
- package/dist/cjs/util/NamedHandler.d.ts.map +1 -0
- package/dist/cjs/util/NamedHandler.js +54 -0
- package/dist/cjs/util/NamedHandler.js.map +6 -0
- package/dist/cjs/util/Number.d.ts +37 -0
- package/dist/cjs/util/Number.d.ts.map +1 -0
- package/dist/cjs/util/Number.js +97 -0
- package/dist/cjs/util/Number.js.map +6 -0
- package/dist/cjs/util/Observable.d.ts +197 -0
- package/dist/cjs/util/Observable.d.ts.map +1 -0
- package/dist/cjs/util/Observable.js +340 -0
- package/dist/cjs/util/Observable.js.map +6 -0
- package/dist/cjs/util/PromiseQueue.d.ts +25 -0
- package/dist/cjs/util/PromiseQueue.d.ts.map +1 -0
- package/dist/cjs/util/PromiseQueue.js +107 -0
- package/dist/cjs/util/PromiseQueue.js.map +6 -0
- package/dist/cjs/util/Promises.d.ts +68 -0
- package/dist/cjs/util/Promises.d.ts.map +1 -0
- package/dist/cjs/util/Promises.js +199 -0
- package/dist/cjs/util/Promises.js.map +6 -0
- package/dist/cjs/util/Set.d.ts +60 -0
- package/dist/cjs/util/Set.d.ts.map +1 -0
- package/dist/cjs/util/Set.js +145 -0
- package/dist/cjs/util/Set.js.map +6 -0
- package/dist/cjs/util/Singleton.d.ts +7 -0
- package/dist/cjs/util/Singleton.d.ts.map +1 -0
- package/dist/cjs/util/Singleton.js +36 -0
- package/dist/cjs/util/Singleton.js.map +6 -0
- package/dist/cjs/util/Stream.d.ts +16 -0
- package/dist/cjs/util/Stream.d.ts.map +1 -0
- package/dist/cjs/util/Stream.js +38 -0
- package/dist/cjs/util/Stream.js.map +6 -0
- package/dist/cjs/util/String.d.ts +39 -0
- package/dist/cjs/util/String.d.ts.map +1 -0
- package/dist/cjs/util/String.js +208 -0
- package/dist/cjs/util/String.js.map +6 -0
- package/dist/cjs/util/Type.d.ts +84 -0
- package/dist/cjs/util/Type.d.ts.map +1 -0
- package/dist/cjs/util/Type.js +52 -0
- package/dist/cjs/util/Type.js.map +6 -0
- package/dist/cjs/util/index.d.ts +30 -0
- package/dist/cjs/util/index.d.ts.map +1 -0
- package/dist/cjs/util/index.js +47 -0
- package/dist/cjs/util/index.js.map +6 -0
- package/dist/esm/MatterError.d.ts +95 -0
- package/dist/esm/MatterError.d.ts.map +1 -0
- package/dist/esm/MatterError.js +157 -0
- package/dist/esm/MatterError.js.map +6 -0
- package/dist/esm/codec/Base64Codec.d.ts +23 -0
- package/dist/esm/codec/Base64Codec.d.ts.map +1 -0
- package/dist/esm/codec/Base64Codec.js +114 -0
- package/dist/esm/codec/Base64Codec.js.map +6 -0
- package/dist/esm/codec/DerCodec.d.ts +83 -0
- package/dist/esm/codec/DerCodec.d.ts.map +1 -0
- package/dist/esm/codec/DerCodec.js +266 -0
- package/dist/esm/codec/DerCodec.js.map +6 -0
- package/dist/esm/codec/DerTypes.d.ts +73 -0
- package/dist/esm/codec/DerTypes.d.ts.map +1 -0
- package/dist/esm/codec/DerTypes.js +122 -0
- package/dist/esm/codec/DerTypes.js.map +6 -0
- package/dist/esm/codec/DnsCodec.d.ts +86 -0
- package/dist/esm/codec/DnsCodec.d.ts.map +1 -0
- package/dist/esm/codec/DnsCodec.js +335 -0
- package/dist/esm/codec/DnsCodec.js.map +6 -0
- package/dist/esm/codec/index.d.ts +10 -0
- package/dist/esm/codec/index.d.ts.map +1 -0
- package/dist/esm/codec/index.js +10 -0
- package/dist/esm/codec/index.js.map +6 -0
- package/dist/esm/crypto/Crypto.d.ts +169 -0
- package/dist/esm/crypto/Crypto.d.ts.map +1 -0
- package/dist/esm/crypto/Crypto.js +73 -0
- package/dist/esm/crypto/Crypto.js.map +6 -0
- package/dist/esm/crypto/CryptoConstants.d.ts +19 -0
- package/dist/esm/crypto/CryptoConstants.d.ts.map +1 -0
- package/dist/esm/crypto/CryptoConstants.js +28 -0
- package/dist/esm/crypto/CryptoConstants.js.map +6 -0
- package/dist/esm/crypto/Key.d.ts +171 -0
- package/dist/esm/crypto/Key.d.ts.map +1 -0
- package/dist/esm/crypto/Key.js +336 -0
- package/dist/esm/crypto/Key.js.map +6 -0
- package/dist/esm/crypto/Spake2p.d.ts +40 -0
- package/dist/esm/crypto/Spake2p.d.ts.map +1 -0
- package/dist/esm/crypto/Spake2p.js +108 -0
- package/dist/esm/crypto/Spake2p.js.map +6 -0
- package/dist/esm/crypto/index.d.ts +10 -0
- package/dist/esm/crypto/index.d.ts.map +1 -0
- package/dist/esm/crypto/index.js +10 -0
- package/dist/esm/crypto/index.js.map +6 -0
- package/dist/esm/environment/Environment.d.ts +96 -0
- package/dist/esm/environment/Environment.d.ts.map +1 -0
- package/dist/esm/environment/Environment.js +179 -0
- package/dist/esm/environment/Environment.js.map +6 -0
- package/dist/esm/environment/Environmental.d.ts +52 -0
- package/dist/esm/environment/Environmental.d.ts.map +1 -0
- package/dist/esm/environment/Environmental.js +13 -0
- package/dist/esm/environment/Environmental.js.map +6 -0
- package/dist/esm/environment/RuntimeService.d.ts +107 -0
- package/dist/esm/environment/RuntimeService.d.ts.map +1 -0
- package/dist/esm/environment/RuntimeService.js +202 -0
- package/dist/esm/environment/RuntimeService.js.map +6 -0
- package/dist/esm/environment/VariableService.d.ts +58 -0
- package/dist/esm/environment/VariableService.d.ts.map +1 -0
- package/dist/esm/environment/VariableService.js +237 -0
- package/dist/esm/environment/VariableService.js.map +6 -0
- package/dist/esm/environment/index.d.ts +10 -0
- package/dist/esm/environment/index.d.ts.map +1 -0
- package/dist/esm/environment/index.js +10 -0
- package/dist/esm/environment/index.js.map +6 -0
- package/dist/esm/index.d.ts +17 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +17 -0
- package/dist/esm/index.js.map +6 -0
- package/dist/esm/log/Diagnostic.d.ts +140 -0
- package/dist/esm/log/Diagnostic.d.ts.map +1 -0
- package/dist/esm/log/Diagnostic.js +277 -0
- package/dist/esm/log/Diagnostic.js.map +6 -0
- package/dist/esm/log/DiagnosticSource.d.ts +16 -0
- package/dist/esm/log/DiagnosticSource.d.ts.map +1 -0
- package/dist/esm/log/DiagnosticSource.js +25 -0
- package/dist/esm/log/DiagnosticSource.js.map +6 -0
- package/dist/esm/log/LogFormat.d.ts +33 -0
- package/dist/esm/log/LogFormat.d.ts.map +1 -0
- package/dist/esm/log/LogFormat.js +483 -0
- package/dist/esm/log/LogFormat.js.map +6 -0
- package/dist/esm/log/LogLevel.d.ts +18 -0
- package/dist/esm/log/LogLevel.d.ts.map +1 -0
- package/dist/esm/log/LogLevel.js +37 -0
- package/dist/esm/log/LogLevel.js.map +6 -0
- package/dist/esm/log/Logger.d.ts +220 -0
- package/dist/esm/log/Logger.d.ts.map +1 -0
- package/dist/esm/log/Logger.js +381 -0
- package/dist/esm/log/Logger.js.map +6 -0
- package/dist/esm/log/index.d.ts +11 -0
- package/dist/esm/log/index.d.ts.map +1 -0
- package/dist/esm/log/index.js +11 -0
- package/dist/esm/log/index.js.map +6 -0
- package/dist/esm/math/ReedSolomon.d.ts +11 -0
- package/dist/esm/math/ReedSolomon.d.ts.map +1 -0
- package/dist/esm/math/ReedSolomon.js +89 -0
- package/dist/esm/math/ReedSolomon.js.map +6 -0
- package/dist/esm/math/Verhoeff.d.ts +17 -0
- package/dist/esm/math/Verhoeff.d.ts.map +1 -0
- package/dist/esm/math/Verhoeff.js +44 -0
- package/dist/esm/math/Verhoeff.js.map +6 -0
- package/dist/esm/math/index.d.ts +8 -0
- package/dist/esm/math/index.d.ts.map +1 -0
- package/dist/esm/math/index.js +8 -0
- package/dist/esm/math/index.js.map +6 -0
- package/dist/esm/net/Channel.d.ts +24 -0
- package/dist/esm/net/Channel.d.ts.map +1 -0
- package/dist/esm/net/Channel.js +15 -0
- package/dist/esm/net/Channel.js.map +6 -0
- package/dist/esm/net/NetInterface.d.ts +24 -0
- package/dist/esm/net/NetInterface.d.ts.map +1 -0
- package/dist/esm/net/NetInterface.js +22 -0
- package/dist/esm/net/NetInterface.js.map +6 -0
- package/dist/esm/net/Network.d.ts +54 -0
- package/dist/esm/net/Network.d.ts.map +1 -0
- package/dist/esm/net/Network.js +30 -0
- package/dist/esm/net/Network.js.map +6 -0
- package/dist/esm/net/ServerAddress.d.ts +17 -0
- package/dist/esm/net/ServerAddress.d.ts.map +1 -0
- package/dist/esm/net/ServerAddress.js +12 -0
- package/dist/esm/net/ServerAddress.js.map +6 -0
- package/dist/esm/net/TransportInterface.d.ts +40 -0
- package/dist/esm/net/TransportInterface.d.ts.map +1 -0
- package/dist/esm/net/TransportInterface.js +35 -0
- package/dist/esm/net/TransportInterface.js.map +6 -0
- package/dist/esm/net/UdpChannel.d.ts +25 -0
- package/dist/esm/net/UdpChannel.d.ts.map +1 -0
- package/dist/esm/net/UdpChannel.js +10 -0
- package/dist/esm/net/UdpChannel.js.map +6 -0
- package/dist/esm/net/UdpInterface.d.ts +35 -0
- package/dist/esm/net/UdpInterface.d.ts.map +1 -0
- package/dist/esm/net/UdpInterface.js +62 -0
- package/dist/esm/net/UdpInterface.js.map +6 -0
- package/dist/esm/net/UdpMulticastServer.d.ts +30 -0
- package/dist/esm/net/UdpMulticastServer.d.ts.map +1 -0
- package/dist/esm/net/UdpMulticastServer.js +113 -0
- package/dist/esm/net/UdpMulticastServer.js.map +6 -0
- package/dist/esm/net/index.d.ts +17 -0
- package/dist/esm/net/index.d.ts.map +1 -0
- package/dist/esm/net/index.js +17 -0
- package/dist/esm/net/index.js.map +6 -0
- package/dist/esm/net/mock/MockNetwork.d.ts +19 -0
- package/dist/esm/net/mock/MockNetwork.d.ts.map +1 -0
- package/dist/esm/net/mock/MockNetwork.js +36 -0
- package/dist/esm/net/mock/MockNetwork.js.map +6 -0
- package/dist/esm/net/mock/MockUdpChannel.d.ts +27 -0
- package/dist/esm/net/mock/MockUdpChannel.d.ts.map +1 -0
- package/dist/esm/net/mock/MockUdpChannel.js +56 -0
- package/dist/esm/net/mock/MockUdpChannel.js.map +6 -0
- package/dist/esm/net/mock/NetworkSimulator.d.ts +18 -0
- package/dist/esm/net/mock/NetworkSimulator.d.ts.map +1 -0
- package/dist/esm/net/mock/NetworkSimulator.js +53 -0
- package/dist/esm/net/mock/NetworkSimulator.js.map +6 -0
- package/dist/esm/package.json +6 -0
- package/dist/esm/polyfills/disposable.d.ts +7 -0
- package/dist/esm/polyfills/disposable.d.ts.map +1 -0
- package/dist/esm/polyfills/disposable.js +18 -0
- package/dist/esm/polyfills/disposable.js.map +6 -0
- package/dist/esm/polyfills/index.d.ts +7 -0
- package/dist/esm/polyfills/index.d.ts.map +1 -0
- package/dist/esm/polyfills/index.js +7 -0
- package/dist/esm/polyfills/index.js.map +6 -0
- package/dist/esm/storage/Storage.d.ts +54 -0
- package/dist/esm/storage/Storage.d.ts.map +1 -0
- package/dist/esm/storage/Storage.js +18 -0
- package/dist/esm/storage/Storage.js.map +6 -0
- package/dist/esm/storage/StorageBackendMemory.d.ts +27 -0
- package/dist/esm/storage/StorageBackendMemory.d.ts.map +1 -0
- package/dist/esm/storage/StorageBackendMemory.js +111 -0
- package/dist/esm/storage/StorageBackendMemory.js.map +6 -0
- package/dist/esm/storage/StorageContext.d.ts +26 -0
- package/dist/esm/storage/StorageContext.d.ts.map +1 -0
- package/dist/esm/storage/StorageContext.js +97 -0
- package/dist/esm/storage/StorageContext.js.map +6 -0
- package/dist/esm/storage/StorageManager.d.ts +17 -0
- package/dist/esm/storage/StorageManager.d.ts.map +1 -0
- package/dist/esm/storage/StorageManager.js +39 -0
- package/dist/esm/storage/StorageManager.js.map +6 -0
- package/dist/esm/storage/StorageService.d.ts +35 -0
- package/dist/esm/storage/StorageService.d.ts.map +1 -0
- package/dist/esm/storage/StorageService.js +62 -0
- package/dist/esm/storage/StorageService.js.map +6 -0
- package/dist/esm/storage/StringifyTools.d.ts +16 -0
- package/dist/esm/storage/StringifyTools.d.ts.map +1 -0
- package/dist/esm/storage/StringifyTools.js +85 -0
- package/dist/esm/storage/StringifyTools.js.map +6 -0
- package/dist/esm/storage/index.d.ts +12 -0
- package/dist/esm/storage/index.d.ts.map +1 -0
- package/dist/esm/storage/index.js +12 -0
- package/dist/esm/storage/index.js.map +6 -0
- package/dist/esm/time/Time.d.ts +66 -0
- package/dist/esm/time/Time.d.ts.map +1 -0
- package/dist/esm/time/Time.js +117 -0
- package/dist/esm/time/Time.js.map +6 -0
- package/dist/esm/time/index.d.ts +7 -0
- package/dist/esm/time/index.d.ts.map +1 -0
- package/dist/esm/time/index.js +7 -0
- package/dist/esm/time/index.js.map +6 -0
- package/dist/esm/tsconfig.tsbuildinfo +1 -0
- package/dist/esm/util/Array.d.ts +12 -0
- package/dist/esm/util/Array.d.ts.map +1 -0
- package/dist/esm/util/Array.js +8 -0
- package/dist/esm/util/Array.js.map +6 -0
- package/dist/esm/util/Bytes.d.ts +23 -0
- package/dist/esm/util/Bytes.d.ts.map +1 -0
- package/dist/esm/util/Bytes.js +75 -0
- package/dist/esm/util/Bytes.js.map +6 -0
- package/dist/esm/util/Cache.d.ts +33 -0
- package/dist/esm/util/Cache.d.ts.map +1 -0
- package/dist/esm/util/Cache.js +94 -0
- package/dist/esm/util/Cache.js.map +6 -0
- package/dist/esm/util/Construction.d.ts +182 -0
- package/dist/esm/util/Construction.d.ts.map +1 -0
- package/dist/esm/util/Construction.js +397 -0
- package/dist/esm/util/Construction.js.map +6 -0
- package/dist/esm/util/DataReadQueue.d.ts +17 -0
- package/dist/esm/util/DataReadQueue.d.ts.map +1 -0
- package/dist/esm/util/DataReadQueue.js +56 -0
- package/dist/esm/util/DataReadQueue.js.map +6 -0
- package/dist/esm/util/DataReader.d.ts +32 -0
- package/dist/esm/util/DataReader.d.ts.map +1 -0
- package/dist/esm/util/DataReader.js +81 -0
- package/dist/esm/util/DataReader.js.map +6 -0
- package/dist/esm/util/DataWriter.d.ts +26 -0
- package/dist/esm/util/DataWriter.d.ts.map +1 -0
- package/dist/esm/util/DataWriter.js +94 -0
- package/dist/esm/util/DataWriter.js.map +6 -0
- package/dist/esm/util/DeepCopy.d.ts +12 -0
- package/dist/esm/util/DeepCopy.d.ts.map +1 -0
- package/dist/esm/util/DeepCopy.js +38 -0
- package/dist/esm/util/DeepCopy.js.map +6 -0
- package/dist/esm/util/DeepEqual.d.ts +7 -0
- package/dist/esm/util/DeepEqual.d.ts.map +1 -0
- package/dist/esm/util/DeepEqual.js +35 -0
- package/dist/esm/util/DeepEqual.js.map +6 -0
- package/dist/esm/util/Error.d.ts +12 -0
- package/dist/esm/util/Error.d.ts.map +1 -0
- package/dist/esm/util/Error.js +21 -0
- package/dist/esm/util/Error.js.map +6 -0
- package/dist/esm/util/GeneratedClass.d.ts +62 -0
- package/dist/esm/util/GeneratedClass.d.ts.map +1 -0
- package/dist/esm/util/GeneratedClass.js +97 -0
- package/dist/esm/util/GeneratedClass.js.map +6 -0
- package/dist/esm/util/Introspection.d.ts +38 -0
- package/dist/esm/util/Introspection.d.ts.map +1 -0
- package/dist/esm/util/Introspection.js +65 -0
- package/dist/esm/util/Introspection.js.map +6 -0
- package/dist/esm/util/Ip.d.ts +8 -0
- package/dist/esm/util/Ip.d.ts.map +1 -0
- package/dist/esm/util/Ip.js +70 -0
- package/dist/esm/util/Ip.js.map +6 -0
- package/dist/esm/util/Lifecycle.d.ts +97 -0
- package/dist/esm/util/Lifecycle.d.ts.map +1 -0
- package/dist/esm/util/Lifecycle.js +69 -0
- package/dist/esm/util/Lifecycle.js.map +6 -0
- package/dist/esm/util/Multiplex.d.ts +14 -0
- package/dist/esm/util/Multiplex.d.ts.map +1 -0
- package/dist/esm/util/Multiplex.js +6 -0
- package/dist/esm/util/Multiplex.js.map +6 -0
- package/dist/esm/util/Mutex.d.ts +34 -0
- package/dist/esm/util/Mutex.d.ts.map +1 -0
- package/dist/esm/util/Mutex.js +85 -0
- package/dist/esm/util/Mutex.js.map +6 -0
- package/dist/esm/util/NamedHandler.d.ts +21 -0
- package/dist/esm/util/NamedHandler.d.ts.map +1 -0
- package/dist/esm/util/NamedHandler.js +34 -0
- package/dist/esm/util/NamedHandler.js.map +6 -0
- package/dist/esm/util/Number.d.ts +37 -0
- package/dist/esm/util/Number.d.ts.map +1 -0
- package/dist/esm/util/Number.js +77 -0
- package/dist/esm/util/Number.js.map +6 -0
- package/dist/esm/util/Observable.d.ts +197 -0
- package/dist/esm/util/Observable.d.ts.map +1 -0
- package/dist/esm/util/Observable.js +320 -0
- package/dist/esm/util/Observable.js.map +6 -0
- package/dist/esm/util/PromiseQueue.d.ts +25 -0
- package/dist/esm/util/PromiseQueue.d.ts.map +1 -0
- package/dist/esm/util/PromiseQueue.js +87 -0
- package/dist/esm/util/PromiseQueue.js.map +6 -0
- package/dist/esm/util/Promises.d.ts +68 -0
- package/dist/esm/util/Promises.d.ts.map +1 -0
- package/dist/esm/util/Promises.js +179 -0
- package/dist/esm/util/Promises.js.map +6 -0
- package/dist/esm/util/Set.d.ts +60 -0
- package/dist/esm/util/Set.d.ts.map +1 -0
- package/dist/esm/util/Set.js +125 -0
- package/dist/esm/util/Set.js.map +6 -0
- package/dist/esm/util/Singleton.d.ts +7 -0
- package/dist/esm/util/Singleton.d.ts.map +1 -0
- package/dist/esm/util/Singleton.js +16 -0
- package/dist/esm/util/Singleton.js.map +6 -0
- package/dist/esm/util/Stream.d.ts +16 -0
- package/dist/esm/util/Stream.d.ts.map +1 -0
- package/dist/esm/util/Stream.js +18 -0
- package/dist/esm/util/Stream.js.map +6 -0
- package/dist/esm/util/String.d.ts +39 -0
- package/dist/esm/util/String.d.ts.map +1 -0
- package/dist/esm/util/String.js +188 -0
- package/dist/esm/util/String.js.map +6 -0
- package/dist/esm/util/Type.d.ts +84 -0
- package/dist/esm/util/Type.d.ts.map +1 -0
- package/dist/esm/util/Type.js +32 -0
- package/dist/esm/util/Type.js.map +6 -0
- package/dist/esm/util/index.d.ts +30 -0
- package/dist/esm/util/index.d.ts.map +1 -0
- package/dist/esm/util/index.js +30 -0
- package/dist/esm/util/index.js.map +6 -0
- package/package.json +76 -0
- package/src/MatterError.ts +205 -0
- package/src/codec/Base64Codec.ts +137 -0
- package/src/codec/DerCodec.ts +300 -0
- package/src/codec/DerTypes.ts +145 -0
- package/src/codec/DnsCodec.ts +393 -0
- package/src/codec/index.ts +10 -0
- package/src/crypto/Crypto.ts +136 -0
- package/src/crypto/CryptoConstants.ts +19 -0
- package/src/crypto/Key.ts +600 -0
- package/src/crypto/Spake2p.ts +128 -0
- package/src/crypto/index.ts +10 -0
- package/src/environment/Environment.ts +215 -0
- package/src/environment/Environmental.ts +60 -0
- package/src/environment/RuntimeService.ts +301 -0
- package/src/environment/VariableService.ts +308 -0
- package/src/environment/index.ts +10 -0
- package/src/index.ts +17 -0
- package/src/log/Diagnostic.ts +454 -0
- package/src/log/DiagnosticSource.ts +30 -0
- package/src/log/LogFormat.ts +646 -0
- package/src/log/LogLevel.ts +36 -0
- package/src/log/Logger.ts +474 -0
- package/src/log/index.ts +11 -0
- package/src/math/ReedSolomon.ts +100 -0
- package/src/math/Verhoeff.ts +47 -0
- package/src/math/index.ts +8 -0
- package/src/net/Channel.ts +30 -0
- package/src/net/NetInterface.ts +33 -0
- package/src/net/Network.ts +70 -0
- package/src/net/ServerAddress.ts +22 -0
- package/src/net/TransportInterface.ts +56 -0
- package/src/net/UdpChannel.ts +30 -0
- package/src/net/UdpInterface.ts +75 -0
- package/src/net/UdpMulticastServer.ts +138 -0
- package/src/net/index.ts +17 -0
- package/src/net/mock/MockNetwork.ts +42 -0
- package/src/net/mock/MockUdpChannel.ts +69 -0
- package/src/net/mock/NetworkSimulator.ts +63 -0
- package/src/polyfills/disposable.ts +24 -0
- package/src/polyfills/index.ts +7 -0
- package/src/storage/Storage.ts +61 -0
- package/src/storage/StorageBackendMemory.ts +131 -0
- package/src/storage/StorageContext.ts +111 -0
- package/src/storage/StorageManager.ts +39 -0
- package/src/storage/StorageService.ts +73 -0
- package/src/storage/StringifyTools.ts +107 -0
- package/src/storage/index.ts +12 -0
- package/src/time/Time.ts +179 -0
- package/src/time/index.ts +7 -0
- package/src/tsconfig.json +10 -0
- package/src/util/Array.ts +15 -0
- package/src/util/Bytes.ts +73 -0
- package/src/util/Cache.ts +111 -0
- package/src/util/Construction.ts +717 -0
- package/src/util/DataReadQueue.ts +55 -0
- package/src/util/DataReader.ts +100 -0
- package/src/util/DataWriter.ts +109 -0
- package/src/util/DeepCopy.ts +47 -0
- package/src/util/DeepEqual.ts +49 -0
- package/src/util/Error.ts +32 -0
- package/src/util/GeneratedClass.ts +204 -0
- package/src/util/Introspection.ts +93 -0
- package/src/util/Ip.ts +71 -0
- package/src/util/Lifecycle.ts +135 -0
- package/src/util/Multiplex.ts +14 -0
- package/src/util/Mutex.ts +100 -0
- package/src/util/NamedHandler.ts +52 -0
- package/src/util/Number.ts +71 -0
- package/src/util/Observable.ts +550 -0
- package/src/util/PromiseQueue.ts +102 -0
- package/src/util/Promises.ts +278 -0
- package/src/util/Set.ts +189 -0
- package/src/util/Singleton.ts +13 -0
- package/src/util/Stream.ts +19 -0
- package/src/util/String.ts +248 -0
- package/src/util/Type.ts +145 -0
- package/src/util/index.ts +30 -0
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { errorOf } from "./util/Error.js";
|
|
8
|
+
|
|
9
|
+
const inspect = Symbol.for("nodejs.util.inspect.custom");
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Error base class for all errors thrown by this library.
|
|
13
|
+
*/
|
|
14
|
+
export class MatterError extends Error {
|
|
15
|
+
/**
|
|
16
|
+
* Convert the error to formatted text.
|
|
17
|
+
*
|
|
18
|
+
* Matter encodes errors with modern JS features including {@link Error#cause} and {@link AggregateError#errors}
|
|
19
|
+
* subfields. You can use this function to ensure all error details are presented regardless of environment.
|
|
20
|
+
*/
|
|
21
|
+
format(format: "plain" | "ansi" | "html" = "plain", indents = 0) {
|
|
22
|
+
let formatterFor = MatterError.formatterFor;
|
|
23
|
+
if (typeof formatterFor !== "function") {
|
|
24
|
+
formatterFor = MatterError.defaultFormatterFactory;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
let formatter = formatterFor(format);
|
|
28
|
+
if (typeof formatter !== "function") {
|
|
29
|
+
formatter = fallbackFormatter;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let result = formatter(this, indents);
|
|
33
|
+
if (typeof result !== "string") {
|
|
34
|
+
result = `${result}`;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return result as string;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Node.js-style object inspection.
|
|
42
|
+
*
|
|
43
|
+
* Node's default inspection only prevents two levels of depth which may hide critical information. It's also
|
|
44
|
+
* considerably more verbose than native matter.js formatting. We therefore offer this custom implementation.
|
|
45
|
+
*
|
|
46
|
+
* Note that this conforms to Node's API but is not dependent on Node.
|
|
47
|
+
*/
|
|
48
|
+
[inspect](depth: number, inspectionOptions?: { colors?: boolean }) {
|
|
49
|
+
const formatterFor = MatterError.formatterFor;
|
|
50
|
+
if (typeof formatterFor !== "function") {
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const format = formatterFor(inspectionOptions?.colors ? "ansi" : "plain");
|
|
55
|
+
if (typeof format !== "function") {
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return format(this, depth);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Rethrow an error unless it is an instance of this class.
|
|
64
|
+
*/
|
|
65
|
+
static accept<T extends MatterError>(this: new (...args: any[]) => T, error: unknown): asserts error is T {
|
|
66
|
+
if (error instanceof this) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
throw error;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Rethrow an error if it is an instance of this class.
|
|
74
|
+
*/
|
|
75
|
+
static reject(error: unknown): void {
|
|
76
|
+
if (error instanceof this) {
|
|
77
|
+
throw error;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* The fallback formatter factory. This produces a limited plaintext formatter.
|
|
83
|
+
*/
|
|
84
|
+
static defaultFormatterFactory = () => fallbackFormatter;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* The error formatter factory. The default formatter is replaced by Matter.js in ./Format.ts.
|
|
88
|
+
*/
|
|
89
|
+
static formatterFor: (formatName: string) => (value: unknown, indents?: number) => unknown =
|
|
90
|
+
MatterError.defaultFormatterFactory;
|
|
91
|
+
|
|
92
|
+
// TODO - this is probably correct; MatterAggregateError should be typeof MatterError. Need to diagnose some test
|
|
93
|
+
// breakage before enabling though
|
|
94
|
+
// static [Symbol.hasInstance](instance: unknown) {
|
|
95
|
+
// if (instance instanceof MatterAggregateError) {
|
|
96
|
+
// return true;
|
|
97
|
+
// }
|
|
98
|
+
// return Error[Symbol.hasInstance](instance);
|
|
99
|
+
// }
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Error thrown when a Platform specific implementation was not added and so a provider (Network, Time, Crypto, etc)
|
|
104
|
+
* is not available.
|
|
105
|
+
*/
|
|
106
|
+
export class NoProviderError extends MatterError {}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Error thrown when an internal error occurs like unexpected cases or missing data that should be there. Please
|
|
110
|
+
* report such errors.
|
|
111
|
+
*/
|
|
112
|
+
export class InternalError extends MatterError {}
|
|
113
|
+
|
|
114
|
+
/** Error thrown when a feature is not implemented yet. Please report such errors. */
|
|
115
|
+
export class NotImplementedError extends InternalError {}
|
|
116
|
+
|
|
117
|
+
/** Error thrown when an unexpected case in the matter flow is encountered. Please report such errors. */
|
|
118
|
+
export class MatterFlowError extends MatterError {}
|
|
119
|
+
|
|
120
|
+
/** Error thrown when an unexpected data is encountered. Please report such errors. */
|
|
121
|
+
export class UnexpectedDataError extends MatterError {}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Error thrown if most likely an implementation error is detected. Please check and correct your implementation and
|
|
125
|
+
* provided data. if you are sure your code is correct please report the issue.
|
|
126
|
+
*/
|
|
127
|
+
export class ImplementationError extends MatterError {}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Thrown for write attempts against immutable data.
|
|
131
|
+
*/
|
|
132
|
+
export class ReadOnlyError extends ImplementationError {
|
|
133
|
+
constructor(message = "This view is read-only") {
|
|
134
|
+
super(message);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Thrown for errors that have multiple underlying causes.
|
|
140
|
+
*/
|
|
141
|
+
export class MatterAggregateError extends AggregateError {
|
|
142
|
+
constructor(causes: Iterable<unknown>, message?: string) {
|
|
143
|
+
causes = [...causes].map(errorOf);
|
|
144
|
+
super(causes, message);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
[inspect] = MatterError.prototype[inspect];
|
|
148
|
+
format = MatterError.prototype.format;
|
|
149
|
+
|
|
150
|
+
// TODO - see comment on MatterError. If that one is correct this is incorrect
|
|
151
|
+
static override [Symbol.hasInstance](instance: unknown) {
|
|
152
|
+
if (instance instanceof MatterError) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
return AggregateError[Symbol.hasInstance](instance);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* It's never reasonable to fail to present error information so we include this rudimentary fallback error formatter.
|
|
161
|
+
*/
|
|
162
|
+
function fallbackFormatter(value: unknown, indents = 0) {
|
|
163
|
+
if (value === undefined || value === null) {
|
|
164
|
+
return `${value}`;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function formatOne(value: unknown, indents: number, messagePrefix: string) {
|
|
168
|
+
const { message, stack, cause, errors } = value as {
|
|
169
|
+
message?: unknown;
|
|
170
|
+
stack?: unknown;
|
|
171
|
+
cause?: unknown;
|
|
172
|
+
errors?: unknown;
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
let indent;
|
|
176
|
+
if (typeof indents !== "number" || indents < 0) {
|
|
177
|
+
indent = "";
|
|
178
|
+
} else {
|
|
179
|
+
indent = " ".repeat(indents);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
const buffer = [`${indent}${messagePrefix}${message ?? "(unknown error)"}`];
|
|
183
|
+
|
|
184
|
+
if (stack !== undefined && stack !== null) {
|
|
185
|
+
const frames = stack.toString().split("\n");
|
|
186
|
+
frames.shift();
|
|
187
|
+
buffer.push(...frames.map(f => `${indent} ${f.trim()}`));
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (cause !== undefined) {
|
|
191
|
+
buffer.push(formatOne(cause, indents, "Caused by: "));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
if (typeof (errors as Iterable<unknown> | undefined)?.[Symbol.iterator] === "function") {
|
|
195
|
+
let causeNumber = 0;
|
|
196
|
+
for (const error of errors as Iterable<unknown>) {
|
|
197
|
+
buffer.push(formatOne(error, indents + 1, `Cause #${causeNumber++}: `));
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return buffer.join("\n");
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return formatOne(value, indents, "");
|
|
205
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
function cp(text: string) {
|
|
8
|
+
return text.codePointAt(0) ?? 0;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const A2B = <number[]>[];
|
|
12
|
+
const B2A = new Uint8Array(64);
|
|
13
|
+
const B2A_URL = new Uint8Array(64);
|
|
14
|
+
const PAD = cp("=");
|
|
15
|
+
|
|
16
|
+
{
|
|
17
|
+
let pos = 0;
|
|
18
|
+
|
|
19
|
+
function addRange(start: string, stop: string) {
|
|
20
|
+
const end = cp(stop) + 1;
|
|
21
|
+
for (let i = cp(start); i < end; i++) {
|
|
22
|
+
A2B[i] = pos;
|
|
23
|
+
B2A[pos++] = i;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
addRange("A", "Z");
|
|
27
|
+
addRange("a", "z");
|
|
28
|
+
addRange("0", "9");
|
|
29
|
+
addRange("+", "+");
|
|
30
|
+
addRange("/", "/");
|
|
31
|
+
|
|
32
|
+
// base64url
|
|
33
|
+
const slashValue = A2B[cp("/")];
|
|
34
|
+
const plusValue = A2B[cp("+")];
|
|
35
|
+
A2B[cp("_")] = slashValue;
|
|
36
|
+
A2B[cp("-")] = plusValue;
|
|
37
|
+
B2A_URL.set(B2A);
|
|
38
|
+
B2A_URL[slashValue] = cp("_");
|
|
39
|
+
B2A_URL[plusValue] = cp("-");
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export namespace Base64 {
|
|
43
|
+
/**
|
|
44
|
+
* Encodes base64.
|
|
45
|
+
*
|
|
46
|
+
* @param input an indexable sequence of bytes
|
|
47
|
+
* @param url set to true to encode as base46url
|
|
48
|
+
* @returns an encoded string
|
|
49
|
+
*/
|
|
50
|
+
export function encode(input: ArrayLike<number>, url = false) {
|
|
51
|
+
const dict = url ? B2A_URL : B2A;
|
|
52
|
+
let outLength = Math.trunc(input.length / 3) * 4;
|
|
53
|
+
if (url) {
|
|
54
|
+
const partial = input.length % 3;
|
|
55
|
+
if (partial) outLength += partial + 1;
|
|
56
|
+
} else {
|
|
57
|
+
outLength += input.length % 3 ? 4 : 0;
|
|
58
|
+
}
|
|
59
|
+
const out = new Uint8Array(outLength);
|
|
60
|
+
|
|
61
|
+
for (let inPos = 0, outPos = 0; outPos < outLength; ) {
|
|
62
|
+
const n = (input[inPos++] << 16) + ((input[inPos++] ?? 0) << 8) + (input[inPos++] ?? 0);
|
|
63
|
+
|
|
64
|
+
out[outPos++] = dict[n >>> 18];
|
|
65
|
+
out[outPos++] = dict[(n >>> 12) & 0o77];
|
|
66
|
+
|
|
67
|
+
if (inPos - input.length === 2) {
|
|
68
|
+
if (!url) out[outPos++] = PAD;
|
|
69
|
+
} else {
|
|
70
|
+
out[outPos++] = dict[(n >>> 6) & 0o77];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (inPos > input.length) {
|
|
74
|
+
if (!url) out[outPos++] = PAD;
|
|
75
|
+
} else {
|
|
76
|
+
out[outPos++] = dict[n & 0o77];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
return new TextDecoder("iso-8859-1").decode(out);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Decodes base64.
|
|
85
|
+
*
|
|
86
|
+
* @param input binary data encoded as a base64 or base64url string
|
|
87
|
+
* @returns decoded bytes in a ByteArray
|
|
88
|
+
*/
|
|
89
|
+
export function decode(input: string) {
|
|
90
|
+
if (!input.length) {
|
|
91
|
+
return new Uint8Array();
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
let inputLength = input.length;
|
|
95
|
+
while (input.codePointAt(inputLength - 1) === PAD) inputLength--;
|
|
96
|
+
|
|
97
|
+
let outLength = Math.trunc(inputLength / 4) * 3;
|
|
98
|
+
switch (inputLength % 4) {
|
|
99
|
+
case 3:
|
|
100
|
+
outLength += 2;
|
|
101
|
+
break;
|
|
102
|
+
case 2:
|
|
103
|
+
outLength += 1;
|
|
104
|
+
break;
|
|
105
|
+
case 1:
|
|
106
|
+
throw new Error("Invalid base-64 encoding");
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const out = new Uint8Array(outLength);
|
|
110
|
+
|
|
111
|
+
for (let inPos = 0, outPos = 0; ; ) {
|
|
112
|
+
function lookup() {
|
|
113
|
+
if (inPos >= inputLength) return 0;
|
|
114
|
+
const v = A2B[input.codePointAt(inPos++) ?? -1];
|
|
115
|
+
if (v === undefined) {
|
|
116
|
+
throw new Error("Invalid base-64 encoding");
|
|
117
|
+
}
|
|
118
|
+
return v;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const n = (lookup() << 18) + (lookup() << 12) + (lookup() << 6) + lookup();
|
|
122
|
+
out[outPos++] = n >>> 16;
|
|
123
|
+
if (outPos < outLength) {
|
|
124
|
+
out[outPos++] = (n >>> 8) & 0xff;
|
|
125
|
+
} else {
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
if (outPos < outLength) {
|
|
129
|
+
out[outPos++] = n & 0xff;
|
|
130
|
+
} else {
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return out;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2022-2024 Matter.js Authors
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { UnexpectedDataError } from "../MatterError.js";
|
|
7
|
+
import { Bytes, Endian } from "../util/Bytes.js";
|
|
8
|
+
import { DataReader } from "../util/DataReader.js";
|
|
9
|
+
import { toHex } from "../util/Number.js";
|
|
10
|
+
import { isObject } from "../util/Type.js";
|
|
11
|
+
|
|
12
|
+
export enum DerKey {
|
|
13
|
+
ObjectId = "_objectId",
|
|
14
|
+
TagId = "_tag",
|
|
15
|
+
Bytes = "_bytes",
|
|
16
|
+
Elements = "_elements",
|
|
17
|
+
BitsPadding = "_padding",
|
|
18
|
+
TypeOverride = "_type",
|
|
19
|
+
RawData = "_raw",
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export class DerError extends UnexpectedDataError {}
|
|
23
|
+
|
|
24
|
+
export enum DerType {
|
|
25
|
+
Boolean = 0x01,
|
|
26
|
+
Integer = 0x02,
|
|
27
|
+
BitString = 0x03,
|
|
28
|
+
OctetString = 0x04,
|
|
29
|
+
Null = 0x05,
|
|
30
|
+
ObjectIdentifier = 0x06,
|
|
31
|
+
UTF8String = 0x0c,
|
|
32
|
+
Sequence = 0x10,
|
|
33
|
+
Set = 0x11,
|
|
34
|
+
PrintableString = 0x13,
|
|
35
|
+
T16String = 0x14,
|
|
36
|
+
IA5String = 0x16,
|
|
37
|
+
UtcDate = 0x17,
|
|
38
|
+
GeneralizedTime = 0x18,
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const CONSTRUCTED = 0x20;
|
|
42
|
+
|
|
43
|
+
const enum DerClass {
|
|
44
|
+
Universal = 0x00,
|
|
45
|
+
Application = 0x40,
|
|
46
|
+
ContextSpecific = 0x80,
|
|
47
|
+
Private = 0xc0,
|
|
48
|
+
}
|
|
49
|
+
export const ObjectId = (objectId: string) => ({
|
|
50
|
+
[DerKey.TagId]: DerType.ObjectIdentifier as number,
|
|
51
|
+
[DerKey.Bytes]: Bytes.fromHex(objectId),
|
|
52
|
+
});
|
|
53
|
+
export const DerObject = (objectId: string, content: any = {}) => ({
|
|
54
|
+
[DerKey.ObjectId]: ObjectId(objectId),
|
|
55
|
+
...content,
|
|
56
|
+
});
|
|
57
|
+
export const BitByteArray = (data: Uint8Array, padding = 0) => ({
|
|
58
|
+
[DerKey.TagId]: DerType.BitString as number,
|
|
59
|
+
[DerKey.Bytes]: data,
|
|
60
|
+
[DerKey.BitsPadding]: padding,
|
|
61
|
+
});
|
|
62
|
+
export const ContextTagged = (tagId: number, value?: any) => ({
|
|
63
|
+
[DerKey.TagId]: tagId | DerClass.ContextSpecific | CONSTRUCTED,
|
|
64
|
+
[DerKey.Bytes]: value === undefined ? new Uint8Array(0) : DerCodec.encode(value),
|
|
65
|
+
});
|
|
66
|
+
export const ContextTaggedBytes = (tagId: number, value: Uint8Array) => ({
|
|
67
|
+
[DerKey.TagId]: tagId | DerClass.ContextSpecific,
|
|
68
|
+
[DerKey.Bytes]: value,
|
|
69
|
+
});
|
|
70
|
+
export const DatatypeOverride = (type: DerType, value: any) => ({
|
|
71
|
+
[DerKey.TypeOverride]: type,
|
|
72
|
+
[DerKey.RawData]: value,
|
|
73
|
+
});
|
|
74
|
+
export const RawBytes = (bytes: Uint8Array) => ({
|
|
75
|
+
[DerKey.Bytes]: bytes,
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export type DerNode = {
|
|
79
|
+
[DerKey.TagId]: number;
|
|
80
|
+
[DerKey.Bytes]: Uint8Array;
|
|
81
|
+
[DerKey.Elements]?: DerNode[];
|
|
82
|
+
[DerKey.BitsPadding]?: number;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
export class DerCodec {
|
|
86
|
+
static encode(value: any): Uint8Array {
|
|
87
|
+
if (Array.isArray(value)) {
|
|
88
|
+
return this.encodeArray(value);
|
|
89
|
+
} else if (value instanceof Uint8Array) {
|
|
90
|
+
return this.encodeOctetString(value);
|
|
91
|
+
} else if (value instanceof Date) {
|
|
92
|
+
return this.encodeDate(value);
|
|
93
|
+
} else if (typeof value === "string") {
|
|
94
|
+
return this.encodeString(value);
|
|
95
|
+
} else if (typeof value === "number" || typeof value === "bigint") {
|
|
96
|
+
return this.encodeInteger(value);
|
|
97
|
+
} else if (typeof value === "boolean") {
|
|
98
|
+
return this.encodeBoolean(value);
|
|
99
|
+
} else if (value === undefined) {
|
|
100
|
+
return new Uint8Array(0);
|
|
101
|
+
} else if (isObject(value)) {
|
|
102
|
+
if (value[DerKey.TagId] !== undefined) {
|
|
103
|
+
const { [DerKey.TagId]: tagId, [DerKey.BitsPadding]: bitsPadding, [DerKey.Bytes]: bytes } = value;
|
|
104
|
+
if (typeof tagId !== "number") {
|
|
105
|
+
throw new DerError("Tag ID is non-numeric");
|
|
106
|
+
}
|
|
107
|
+
if (bitsPadding !== undefined && typeof bitsPadding !== "number") {
|
|
108
|
+
throw new DerError("Bits padding is not a numeric byte value");
|
|
109
|
+
}
|
|
110
|
+
if (bytes === undefined || !ArrayBuffer.isView(bytes)) {
|
|
111
|
+
throw new DerError("DER bytes is not a byte array");
|
|
112
|
+
}
|
|
113
|
+
return this.encodeAsn1(
|
|
114
|
+
tagId,
|
|
115
|
+
bitsPadding === undefined
|
|
116
|
+
? (bytes as Uint8Array)
|
|
117
|
+
: Bytes.concat(Uint8Array.of(bitsPadding), bytes as Uint8Array),
|
|
118
|
+
);
|
|
119
|
+
} else if (value[DerKey.TypeOverride] !== undefined && value[DerKey.RawData] !== undefined) {
|
|
120
|
+
if (value[DerKey.TypeOverride] === DerType.Integer && value[DerKey.RawData] instanceof Uint8Array) {
|
|
121
|
+
return this.encodeInteger(value[DerKey.RawData]);
|
|
122
|
+
} else if (
|
|
123
|
+
value[DerKey.TypeOverride] === DerType.BitString &&
|
|
124
|
+
typeof value[DerKey.RawData] === "number"
|
|
125
|
+
) {
|
|
126
|
+
return this.encodeBitString(value[DerKey.RawData]);
|
|
127
|
+
} else if (
|
|
128
|
+
value[DerKey.TypeOverride] === DerType.PrintableString &&
|
|
129
|
+
typeof value[DerKey.RawData] === "string"
|
|
130
|
+
) {
|
|
131
|
+
return this.encodePrintableString(value[DerKey.RawData]);
|
|
132
|
+
} else if (
|
|
133
|
+
value[DerKey.TypeOverride] === DerType.IA5String &&
|
|
134
|
+
typeof value[DerKey.RawData] === "string"
|
|
135
|
+
) {
|
|
136
|
+
return this.encodeIA5String(value[DerKey.RawData]);
|
|
137
|
+
} else {
|
|
138
|
+
throw new UnexpectedDataError(`Unsupported override type ${value[DerKey.TypeOverride]}`);
|
|
139
|
+
}
|
|
140
|
+
} else if (
|
|
141
|
+
value[DerKey.Bytes] !== undefined &&
|
|
142
|
+
value[DerKey.Bytes] instanceof Uint8Array &&
|
|
143
|
+
Object.keys(value).length === 1
|
|
144
|
+
) {
|
|
145
|
+
// Raw Data
|
|
146
|
+
return value[DerKey.Bytes];
|
|
147
|
+
} else if (value[DerKey.TypeOverride] === undefined && value[DerKey.Bytes] === undefined) {
|
|
148
|
+
return this.encodeObject(value);
|
|
149
|
+
} else {
|
|
150
|
+
throw new UnexpectedDataError(`Unsupported object type ${typeof value}`);
|
|
151
|
+
}
|
|
152
|
+
} else {
|
|
153
|
+
throw new UnexpectedDataError(`Unsupported type ${typeof value}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private static encodeDate(date: Date) {
|
|
158
|
+
if (date.getFullYear() > 2049) {
|
|
159
|
+
// Dates 2050+ are encoded as GeneralizedTime. This includes the special Non Well Defined date 9999-12-31.
|
|
160
|
+
return this.encodeAsn1(
|
|
161
|
+
DerType.GeneralizedTime,
|
|
162
|
+
Bytes.fromString(
|
|
163
|
+
date
|
|
164
|
+
.toISOString()
|
|
165
|
+
.replace(/[-:.T]/g, "")
|
|
166
|
+
.slice(0, 14) + "Z",
|
|
167
|
+
),
|
|
168
|
+
);
|
|
169
|
+
} else
|
|
170
|
+
return this.encodeAsn1(
|
|
171
|
+
DerType.UtcDate,
|
|
172
|
+
Bytes.fromString(
|
|
173
|
+
date
|
|
174
|
+
.toISOString()
|
|
175
|
+
.replace(/[-:.T]/g, "")
|
|
176
|
+
.slice(2, 14) + "Z",
|
|
177
|
+
),
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
private static encodeBoolean(bool: boolean) {
|
|
182
|
+
return this.encodeAsn1(DerType.Boolean, Uint8Array.of(bool ? 0xff : 0));
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private static encodeArray(array: Array<any>) {
|
|
186
|
+
return this.encodeAsn1(DerType.Set | CONSTRUCTED, Bytes.concat(...array.map(element => this.encode(element))));
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private static encodeOctetString(value: Uint8Array) {
|
|
190
|
+
return this.encodeAsn1(DerType.OctetString, value);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
private static encodeObject(object: any) {
|
|
194
|
+
const attributes = new Array<Uint8Array>();
|
|
195
|
+
for (const key in object) {
|
|
196
|
+
attributes.push(this.encode(object[key]));
|
|
197
|
+
}
|
|
198
|
+
return this.encodeAsn1(DerType.Sequence | CONSTRUCTED, Bytes.concat(...attributes));
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
private static encodeString(value: string) {
|
|
202
|
+
return this.encodeAsn1(DerType.UTF8String, Bytes.fromString(value));
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
private static encodePrintableString(value: string) {
|
|
206
|
+
if (!/^[A-Za-z0-9 '()+,-./:=?]*$/g.test(value)) {
|
|
207
|
+
throw new UnexpectedDataError(`String ${value} is not a printable string.`);
|
|
208
|
+
}
|
|
209
|
+
return this.encodeAsn1(DerType.PrintableString, Bytes.fromString(value));
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
private static encodeIA5String(value: string) {
|
|
213
|
+
/*eslint-disable-next-line no-control-regex */
|
|
214
|
+
if (!/^[\x00-\x7F]*$/.test(value)) {
|
|
215
|
+
throw new UnexpectedDataError(`String ${value} is not an IA5 string.`);
|
|
216
|
+
}
|
|
217
|
+
return this.encodeAsn1(DerType.IA5String, Bytes.fromString(value));
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
private static encodeInteger(value: number | bigint | Uint8Array) {
|
|
221
|
+
const isByteArray = ArrayBuffer.isView(value);
|
|
222
|
+
let valueBytes: Uint8Array;
|
|
223
|
+
if (isByteArray) {
|
|
224
|
+
valueBytes = value;
|
|
225
|
+
} else {
|
|
226
|
+
valueBytes = Bytes.fromHex(toHex(value));
|
|
227
|
+
}
|
|
228
|
+
const byteArray = Bytes.concat(new Uint8Array(1), valueBytes);
|
|
229
|
+
const dataView = Bytes.dataViewOf(byteArray);
|
|
230
|
+
let start = 0;
|
|
231
|
+
while (true) {
|
|
232
|
+
if (dataView.getUint8(start) !== 0) break;
|
|
233
|
+
if (dataView.getUint8(start + 1) >= 0x80) break;
|
|
234
|
+
start++;
|
|
235
|
+
if (start === byteArray.length - 1) break;
|
|
236
|
+
}
|
|
237
|
+
return this.encodeAsn1(DerType.Integer, byteArray.slice(start));
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private static encodeBitString(value: number) {
|
|
241
|
+
const reversedBits = value.toString(2).padStart(8, "0");
|
|
242
|
+
const unusedBits = reversedBits.indexOf("1");
|
|
243
|
+
const bitByteArray = Uint8Array.of(parseInt(reversedBits.split("").reverse().join(""), 2));
|
|
244
|
+
return this.encode(BitByteArray(bitByteArray, unusedBits === -1 ? 8 : unusedBits));
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
private static encodeLengthBytes(value: number) {
|
|
248
|
+
const byteArray = new Uint8Array(5);
|
|
249
|
+
const dataView = Bytes.dataViewOf(byteArray);
|
|
250
|
+
dataView.setUint32(1, value);
|
|
251
|
+
let start = 0;
|
|
252
|
+
while (true) {
|
|
253
|
+
if (dataView.getUint8(start) !== 0) break;
|
|
254
|
+
start++;
|
|
255
|
+
if (start === 4) break;
|
|
256
|
+
}
|
|
257
|
+
const lengthLength = byteArray.length - start;
|
|
258
|
+
if (lengthLength > 1 || dataView.getUint8(start) >= 0x80) {
|
|
259
|
+
start--;
|
|
260
|
+
dataView.setUint8(start, 0x80 + lengthLength);
|
|
261
|
+
}
|
|
262
|
+
return byteArray.slice(start);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
private static encodeAsn1(tag: number, data: Uint8Array) {
|
|
266
|
+
return Bytes.concat(Uint8Array.of(tag), this.encodeLengthBytes(data.length), data);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
static decode(data: Uint8Array): DerNode {
|
|
270
|
+
return this.decodeRec(new DataReader(data, Endian.Big));
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
private static decodeRec(reader: DataReader<Endian.Big>): DerNode {
|
|
274
|
+
const { tag, bytes } = this.decodeAsn1(reader);
|
|
275
|
+
if (tag === DerType.BitString)
|
|
276
|
+
return { [DerKey.TagId]: tag, [DerKey.Bytes]: bytes.slice(1), [DerKey.BitsPadding]: bytes[0] };
|
|
277
|
+
if ((tag & CONSTRUCTED) === 0) return { [DerKey.TagId]: tag, [DerKey.Bytes]: bytes };
|
|
278
|
+
const elementsReader = new DataReader(bytes, Endian.Big);
|
|
279
|
+
const elements: DerNode[] = [];
|
|
280
|
+
while (elementsReader.getRemainingBytesCount() > 0) {
|
|
281
|
+
elements.push(this.decodeRec(elementsReader));
|
|
282
|
+
}
|
|
283
|
+
return { [DerKey.TagId]: tag, [DerKey.Bytes]: bytes, [DerKey.Elements]: elements };
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
private static decodeAsn1(reader: DataReader<Endian.Big>): { tag: number; bytes: Uint8Array } {
|
|
287
|
+
const tag = reader.readUInt8();
|
|
288
|
+
let length = reader.readUInt8();
|
|
289
|
+
if ((length & 0x80) !== 0) {
|
|
290
|
+
let lengthLength = length & 0x7f;
|
|
291
|
+
length = 0;
|
|
292
|
+
while (lengthLength > 0) {
|
|
293
|
+
length = (length << 8) + reader.readUInt8();
|
|
294
|
+
lengthLength--;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
const bytes = reader.readByteArray(length);
|
|
298
|
+
return { tag, bytes };
|
|
299
|
+
}
|
|
300
|
+
}
|