diff --git a/packages/core-bridge/Cargo.lock b/packages/core-bridge/Cargo.lock index 91d020594..a3f0f9339 100644 --- a/packages/core-bridge/Cargo.lock +++ b/packages/core-bridge/Cargo.lock @@ -17,17 +17,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" -[[package]] -name = "aes" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" -dependencies = [ - "cfg-if", - "cipher", - "cpufeatures", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -170,15 +159,6 @@ version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - [[package]] name = "bridge-macros" version = "0.1.0" @@ -195,12 +175,6 @@ version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" -[[package]] -name = "byteorder" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" - [[package]] name = "bytes" version = "1.10.1" @@ -209,21 +183,11 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "bzip2" -version = "0.5.2" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49ecfb22d906f800d4fe833b6282cf4dc1c298f5057ca0b5445e5c209735ca47" +checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" dependencies = [ - "bzip2-sys", -] - -[[package]] -name = "bzip2-sys" -version = "0.1.13+1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "225bff33b2141874fe80d71e07d6eec4f85c5c216453dd96388240f96e1acc14" -dependencies = [ - "cc", - "pkg-config", + "libbz2-rs-sys", ] [[package]] @@ -259,22 +223,6 @@ dependencies = [ "serde", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - -[[package]] -name = "constant_time_eq" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" - [[package]] name = "convert_case" version = "0.6.0" @@ -300,30 +248,6 @@ version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crc" -version = "3.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" -dependencies = [ - "crc-catalog", -] - -[[package]] -name = "crc-catalog" -version = "2.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" - [[package]] name = "crc32fast" version = "1.5.0" @@ -357,16 +281,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "darling" version = "0.20.11" @@ -416,21 +330,6 @@ dependencies = [ "parking_lot_core", ] -[[package]] -name = "deflate64" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da692b8d1080ea3045efaab14434d40468c3d8657e42abddfffca87b428f4c1b" - -[[package]] -name = "deranged" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e" -dependencies = [ - "powerfmt", -] - [[package]] name = "derive_arbitrary" version = "1.4.2" @@ -494,17 +393,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", - "subtle", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -522,6 +410,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1435fa1053d8b2fbbe9be7e97eca7f33d37b28409959813daefc1446a14247f1" +[[package]] +name = "dyn-clone" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d0881ea181b1df73ff77ffaaf9c7544ecc11e82fba9b5f27b262a3c73a332555" + [[package]] name = "either" version = "1.15.0" @@ -617,6 +511,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a3d7db9596fecd151c5f638c0ee5d5bd487b6e0ea232e5dc96d5250f6f94b1d" dependencies = [ "crc32fast", + "libz-rs-sys", "miniz_oxide", ] @@ -753,16 +648,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "gethostname" version = "1.0.2" @@ -808,9 +693,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "governor" -version = "0.8.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" +checksum = "444405bbb1a762387aa22dd569429533b54a1d8759d35d3b64cb39b0293eaa19" dependencies = [ "cfg-if", "dashmap", @@ -818,7 +703,7 @@ dependencies = [ "futures-timer", "futures-util", "getrandom 0.3.3", - "no-std-compat", + "hashbrown 0.15.5", "nonzero_ext", "parking_lot", "portable-atomic", @@ -871,15 +756,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hmac" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest", -] - [[package]] name = "http" version = "1.3.1" @@ -928,13 +804,14 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "1.6.0" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ + "atomic-waker", "bytes", "futures-channel", - "futures-util", + "futures-core", "h2", "http", "http-body", @@ -942,6 +819,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", + "pin-utils", "smallvec", "tokio", "want", @@ -1124,15 +1002,6 @@ dependencies = [ "hashbrown 0.15.5", ] -[[package]] -name = "inout" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" -dependencies = [ - "generic-array", -] - [[package]] name = "instant" version = "0.1.13" @@ -1219,6 +1088,12 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +[[package]] +name = "libbz2-rs-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" + [[package]] name = "libc" version = "0.2.175" @@ -1246,6 +1121,15 @@ dependencies = [ "redox_syscall", ] +[[package]] +name = "libz-rs-sys" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" +dependencies = [ + "zlib-rs", +] + [[package]] name = "linkme" version = "0.3.33" @@ -1296,9 +1180,9 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lru" -version = "0.13.0" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" +checksum = "bfe949189f46fabb938b3a9a0be30fdd93fd8a09260da863399a8cf3db756ec8" dependencies = [ "hashbrown 0.15.5", ] @@ -1309,27 +1193,6 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "112b39cec0b298b6c1999fee3e31427f74f676e4cb9879ed1a121b43661a4154" -[[package]] -name = "lzma-rs" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297e814c836ae64db86b36cf2a557ba54368d03f6afcd7d947c266692f71115e" -dependencies = [ - "byteorder", - "crc", -] - -[[package]] -name = "lzma-sys" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - [[package]] name = "matchers" version = "0.2.0" @@ -1437,12 +1300,6 @@ dependencies = [ "syn", ] -[[package]] -name = "no-std-compat" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" - [[package]] name = "nonzero_ext" version = "0.3.0" @@ -1467,12 +1324,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "num-conv" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" - [[package]] name = "num-traits" version = "0.2.19" @@ -1482,6 +1333,25 @@ dependencies = [ "autocfg", ] +[[package]] +name = "objc2-core-foundation" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166" +dependencies = [ + "bitflags", +] + +[[package]] +name = "objc2-io-kit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71c1c64d6120e51cd86033f67176b1cb66780c2efe34dec55176f77befd93c0a" +dependencies = [ + "libc", + "objc2-core-foundation", +] + [[package]] name = "object" version = "0.36.7" @@ -1626,16 +1496,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest", - "hmac", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -1723,12 +1583,6 @@ dependencies = [ "zerovec", ] -[[package]] -name = "powerfmt" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" - [[package]] name = "ppv-lite86" version = "0.2.21" @@ -2376,17 +2230,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "sharded-slab" version = "0.1.7" @@ -2524,14 +2367,15 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.33.1" +version = "0.37.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" +checksum = "3bddd368fda2f82ead69c03d46d351987cfa0c2a57abfa37a017f3aa3e9bf69a" dependencies = [ - "core-foundation-sys", "libc", "memchr", "ntapi", + "objc2-core-foundation", + "objc2-io-kit", "windows", ] @@ -2570,6 +2414,7 @@ dependencies = [ "bytes", "derive_builder", "derive_more", + "dyn-clone", "futures-retry", "futures-util", "http", @@ -2768,25 +2613,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "time" -version = "0.3.41" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" -dependencies = [ - "deranged", - "num-conv", - "powerfmt", - "serde", - "time-core", -] - -[[package]] -name = "time-core" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" - [[package]] name = "tinystr" version = "0.8.1" @@ -3032,12 +2858,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc7d623258602320d5c55d1bc22793b57daff0ec7efc270ea7d55ce1d5f5471c" -[[package]] -name = "typenum" -version = "1.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" - [[package]] name = "typetag" version = "0.2.20" @@ -3278,31 +3098,55 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.57.0" +version = "0.61.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12342cb4d8e3b046f3d80effd474a7a02447231330ef77d71daa6fbc40681143" +checksum = "9babd3a767a4c1aef6900409f85f5d53ce2544ccdfaa86dad48c91782c6d6893" +dependencies = [ + "windows-collections", + "windows-core", + "windows-future", + "windows-link", + "windows-numerics", +] + +[[package]] +name = "windows-collections" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8" dependencies = [ "windows-core", - "windows-targets 0.52.6", ] [[package]] name = "windows-core" -version = "0.57.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" dependencies = [ "windows-implement", "windows-interface", + "windows-link", "windows-result", - "windows-targets 0.52.6", + "windows-strings", +] + +[[package]] +name = "windows-future" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e" +dependencies = [ + "windows-core", + "windows-link", + "windows-threading", ] [[package]] name = "windows-implement" -version = "0.57.0" +version = "0.60.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9107ddc059d5b6fbfbffdfa7a7fe3e22a226def0b2608f72e9d552763d3e1ad7" +checksum = "edb307e42a74fb6de9bf3a02d9712678b22399c87e6fa869d6dfcd8c1b7754e0" dependencies = [ "proc-macro2", "quote", @@ -3311,9 +3155,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.57.0" +version = "0.59.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29bee4b38ea3cde66011baa44dba677c432a78593e202392d1e9070cf2a7fca7" +checksum = "c0abd1ddbc6964ac14db11c7213d6532ef34bd9aa042c2e5935f59d7908b46a5" dependencies = [ "proc-macro2", "quote", @@ -3326,13 +3170,32 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-numerics" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1" +dependencies = [ + "windows-core", + "windows-link", +] + [[package]] name = "windows-result" -version = "0.1.2" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e383302e8ec8515204254685643de10811af0ed97ea37210dc26fb0032647f8" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-targets 0.52.6", + "windows-link", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link", ] [[package]] @@ -3395,6 +3258,15 @@ dependencies = [ "windows_x86_64_msvc 0.53.0", ] +[[package]] +name = "windows-threading" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6" +dependencies = [ + "windows-link", +] + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" @@ -3516,15 +3388,6 @@ dependencies = [ "rustix", ] -[[package]] -name = "xz2" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" -dependencies = [ - "lzma-sys", -] - [[package]] name = "yoke" version = "0.8.0" @@ -3595,20 +3458,6 @@ name = "zeroize" version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" -dependencies = [ - "zeroize_derive", -] - -[[package]] -name = "zeroize_derive" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] [[package]] name = "zerotrie" @@ -3645,34 +3494,26 @@ dependencies = [ [[package]] name = "zip" -version = "2.4.2" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fabe6324e908f85a1c52063ce7aa26b68dcb7eb6dbc83a2d148403c9bc3eba50" +checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" dependencies = [ - "aes", "arbitrary", "bzip2", - "constant_time_eq", "crc32fast", - "crossbeam-utils", - "deflate64", - "displaydoc", "flate2", - "getrandom 0.3.3", - "hmac", "indexmap", - "lzma-rs", "memchr", - "pbkdf2", - "sha1", - "thiserror 2.0.14", - "time", - "xz2", - "zeroize", "zopfli", "zstd", ] +[[package]] +name = "zlib-rs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" + [[package]] name = "zopfli" version = "0.8.2" diff --git a/packages/core-bridge/sdk-core b/packages/core-bridge/sdk-core index 871b320c8..de674173c 160000 --- a/packages/core-bridge/sdk-core +++ b/packages/core-bridge/sdk-core @@ -1 +1 @@ -Subproject commit 871b320c8f51d52cb69fcc31f9c4dcd47b9f3961 +Subproject commit de674173c664d42f85d0dee1ff3b2ac47e36d545 diff --git a/packages/core-bridge/src/client.rs b/packages/core-bridge/src/client.rs index 401dc4ec2..5791328cd 100644 --- a/packages/core-bridge/src/client.rs +++ b/packages/core-bridge/src/client.rs @@ -3,12 +3,12 @@ use std::time::Duration; use std::{collections::HashMap, sync::Arc}; use neon::prelude::*; -use tonic::metadata::MetadataKey; +use tonic::metadata::{BinaryMetadataValue, MetadataKey}; use temporal_sdk_core::{ClientOptions as CoreClientOptions, CoreRuntime, RetryClient}; use bridge_macros::{TryFromJs, js_function}; -use temporal_client::{ClientInitError, ConfiguredClient, TemporalServiceClientWithMetrics}; +use temporal_client::{ClientInitError, ConfiguredClient, TemporalServiceClient}; use crate::runtime::Runtime; use crate::{helpers::*, runtime::RuntimeExt as _}; @@ -38,7 +38,7 @@ pub fn init(cx: &mut neon::prelude::ModuleContext) -> neon::prelude::NeonResult< Ok(()) } -type CoreClient = RetryClient>; +type CoreClient = RetryClient>; pub struct Client { // These fields are pub because they are accessed from Worker::new @@ -61,6 +61,10 @@ pub fn client_new( let core_client = match res { Ok(core_client) => core_client, + Err(ClientInitError::InvalidHeaders(e)) => Err(BridgeError::TypeError { + message: format!("Invalid metadata key: {e}"), + field: None, + })?, Err(ClientInitError::SystemInfoCallError(e)) => Err(BridgeError::TransportError( format!("Failed to call GetSystemInfo: {e}"), ))?, @@ -84,13 +88,27 @@ pub fn client_new( #[js_function] pub fn client_update_headers( client: OpaqueInboundHandle, - headers: HashMap, + headers: HashMap, ) -> BridgeResult<()> { + let (ascii_headers, bin_headers) = config::partition_headers(Some(headers)); + client + .borrow()? + .core_client + .get_client() + .set_headers(ascii_headers.unwrap_or_default()) + .map_err(|err| BridgeError::TypeError { + message: format!("Invalid metadata key: {err}"), + field: None, + })?; client .borrow()? .core_client .get_client() - .set_headers(headers); + .set_binary_headers(bin_headers.unwrap_or_default()) + .map_err(|err| BridgeError::TypeError { + message: format!("Invalid metadata key: {err}"), + field: None, + })?; Ok(()) } @@ -122,10 +140,16 @@ pub struct RpcCall { pub rpc: String, pub req: Vec, pub retry: bool, - pub metadata: HashMap, + pub metadata: HashMap, pub timeout: Option, } +#[derive(Debug, Clone, TryFromJs)] +pub enum MetadataValue { + Ascii { value: String }, + Binary { value: Vec }, +} + /// Send a request to the Workflow Service using the provided Client #[js_function] pub fn client_send_workflow_service_request( @@ -576,16 +600,29 @@ fn rpc_req(call: RpcCall) -> BridgeResult { + req.metadata_mut().insert( + MetadataKey::from_str(k.as_str()).map_err(|err| BridgeError::TypeError { + field: None, + message: format!("Invalid metadata key: {err}"), + })?, + v.parse().map_err(|err| BridgeError::TypeError { + field: None, + message: format!("Invalid metadata value: {err}"), + })?, + ); + } + MetadataValue::Binary { value: v } => { + req.metadata_mut().insert_bin( + MetadataKey::from_str(k.as_str()).map_err(|err| BridgeError::TypeError { + field: None, + message: format!("Invalid metadata key: {err}"), + })?, + BinaryMetadataValue::from_bytes(&v), + ); + } + } } if let Some(timeout) = call.timeout { @@ -620,7 +657,7 @@ mod config { use bridge_macros::TryFromJs; - use crate::helpers::*; + use crate::{client::MetadataValue, helpers::*}; #[derive(Debug, Clone, TryFromJs)] pub(super) struct ClientOptions { @@ -629,7 +666,7 @@ mod config { client_version: String, tls: Option, http_connect_proxy: Option, - headers: Option>, + headers: Option>, api_key: Option, disable_error_code_metric_tags: bool, } @@ -669,13 +706,16 @@ mod config { builder.tls_cfg(tls.into()); } + let (ascii_headers, bin_headers) = partition_headers(self.headers); + let client_options = builder .target_url(self.target_url) .client_name(self.client_name) .client_version(self.client_version) // tls_cfg -- above .http_connect_proxy(self.http_connect_proxy.map(Into::into)) - .headers(self.headers) + .headers(ascii_headers) + .binary_headers(bin_headers) .api_key(self.api_key) .disable_error_code_metric_tags(self.disable_error_code_metric_tags) // identity -- skipped: will be set on worker @@ -711,4 +751,31 @@ mod config { } } } + + pub(super) fn partition_headers( + headers: Option>, + ) -> ( + Option>, + Option>>, + ) { + let Some(headers) = headers else { + return (None, None); + }; + let mut ascii_headers = HashMap::default(); + let mut bin_headers = HashMap::default(); + for (k, v) in headers { + match v { + MetadataValue::Ascii { value: v } => { + ascii_headers.insert(k, v); + } + MetadataValue::Binary { value: v } => { + bin_headers.insert(k, v); + } + } + } + ( + (!ascii_headers.is_empty()).then_some(ascii_headers), + (!bin_headers.is_empty()).then_some(bin_headers), + ) + } } diff --git a/packages/core-bridge/src/helpers/try_from_js.rs b/packages/core-bridge/src/helpers/try_from_js.rs index 764b2f58f..472ad2010 100644 --- a/packages/core-bridge/src/helpers/try_from_js.rs +++ b/packages/core-bridge/src/helpers/try_from_js.rs @@ -11,7 +11,7 @@ use neon::{ }; use temporal_sdk_core::Url; -use super::{BridgeError, BridgeResult}; +use super::{AppendFieldContext, BridgeError, BridgeResult}; /// Trait for Rust types that can be created from JavaScript values, possibly throwing an error. pub trait TryFromJs: Sized { @@ -175,8 +175,9 @@ impl TryFromJs for HashMap { let mut map = Self::new(); for key_handle in props { let key = key_handle.to_string(cx)?.value(cx); - let value = obj.get_value(cx, key_handle)?; - map.insert(key, T::try_from_js(cx, value)?); + let js_value = obj.get_value(cx, key_handle)?; + let value = T::try_from_js(cx, js_value).field(&key)?; + map.insert(key, value); } Ok(map) } diff --git a/packages/core-bridge/ts/native.ts b/packages/core-bridge/ts/native.ts index 2d4d33062..2ddd20a1c 100644 --- a/packages/core-bridge/ts/native.ts +++ b/packages/core-bridge/ts/native.ts @@ -100,7 +100,7 @@ export interface OtelMetricsExporterOptions { export declare function newClient(runtime: Runtime, clientOptions: ClientOptions): Promise; -export declare function clientUpdateHeaders(client: Client, headers: Record): void; +export declare function clientUpdateHeaders(client: Client, headers: Record): void; export declare function clientUpdateApiKey(client: Client, apiKey: string): void; @@ -124,7 +124,7 @@ export interface ClientOptions { clientVersion: string; tls: Option; httpConnectProxy: Option; - headers: Option>; + headers: Option>; apiKey: Option; disableErrorCodeMetricTags: boolean; } @@ -157,7 +157,7 @@ export interface RpcCall { rpc: string; req: Buffer; retry: boolean; - metadata: Record; + metadata: Record; timeout: Option; } @@ -191,6 +191,16 @@ export interface Worker { type: 'worker'; } +export type MetadataValue = + | { + type: 'ascii'; + value: string; + } + | { + type: 'binary'; + value: Buffer; + }; + export interface WorkerOptions { identity: string; buildId: string; diff --git a/packages/test/src/test-client-connection.ts b/packages/test/src/test-client-connection.ts index fd29534ec..7545c916a 100644 --- a/packages/test/src/test-client-connection.ts +++ b/packages/test/src/test-client-connection.ts @@ -60,6 +60,8 @@ async function bindLocalhostTls(server: grpc.Server): Promise { test('withMetadata / withDeadline / withAbortSignal set the CallContext for RPC call', async (t) => { let gotTestHeaders = false; + let gotStaticBinValue; + let gotOtherBinValue; let gotDeadline = false; const authTokens: string[] = []; const deadline = Date.now() + 10000; @@ -89,6 +91,8 @@ test('withMetadata / withDeadline / withAbortSignal set the CallContext for RPC ) { gotTestHeaders = true; } + gotStaticBinValue = call.metadata.get('staticKey-bin'); + gotOtherBinValue = call.metadata.get('otherKey-bin'); const receivedDeadline = call.getDeadline(); // For some reason the deadline the server gets is slightly different from the one we send in the client if (typeof receivedDeadline === 'number' && receivedDeadline >= deadline && receivedDeadline - deadline < 1000) { @@ -108,16 +112,18 @@ test('withMetadata / withDeadline / withAbortSignal set the CallContext for RPC const port = await bindLocalhost(server); const conn = await Connection.connect({ address: `127.0.0.1:${port}`, - metadata: { staticKey: 'set' }, + metadata: { staticKey: 'set', 'staticKey-bin': Buffer.from([0x00]) }, apiKey: 'test-token', }); await conn.withMetadata({ test: 'true' }, () => - conn.withMetadata({ otherKey: 'set' }, () => + conn.withMetadata({ otherKey: 'set', 'otherKey-bin': Buffer.from([0x01]) }, () => conn.withDeadline(deadline, () => conn.workflowService.registerNamespace({})) ) ); t.true(gotTestHeaders); t.true(gotDeadline); + t.deepEqual(gotStaticBinValue, [Buffer.from([0x00])]); + t.deepEqual(gotOtherBinValue, [Buffer.from([0x01])]); await conn.withApiKey('tt-2', () => conn.workflowService.startWorkflowExecution({})); conn.setApiKey('tt-3'); await conn.workflowService.startWorkflowExecution({}); diff --git a/packages/test/src/test-native-connection.ts b/packages/test/src/test-native-connection.ts index 532789e39..4eabf99ed 100644 --- a/packages/test/src/test-native-connection.ts +++ b/packages/test/src/test-native-connection.ts @@ -203,13 +203,18 @@ test('withMetadata and withDeadline propagate metadata and deadline', async (t) ); const connection = await NativeConnection.connect({ address: `127.0.0.1:${port}`, + metadata: { 'default-bin': Buffer.from([0x00]) }, }); await connection.withDeadline(Date.now() + 10_000, () => - connection.withMetadata({ test: 'true' }, () => connection.workflowService.getSystemInfo({})) + connection.withMetadata({ test: 'true', 'other-bin': Buffer.from([0x01]) }, () => + connection.workflowService.getSystemInfo({}) + ) ); t.is(requests.length, 2); t.is(requests[1].metadata.get('test').toString(), 'true'); + t.deepEqual(requests[1].metadata.get('default-bin'), [Buffer.from([0x00])]); + t.deepEqual(requests[1].metadata.get('other-bin'), [Buffer.from([0x01])]); t.true(typeof requests[1].deadline === 'number' && requests[1].deadline > 5_000); await connection.close(); server.forceShutdown(); @@ -434,3 +439,39 @@ test('can power workflow client calls', async (t) => { await env.teardown(); } }); + +test('setMetadata accepts binary headers', async (t) => { + const requests = new Array<{ metadata: grpc.Metadata; deadline: grpc.Deadline }>(); + const server = new grpc.Server(); + server.addService(workflowServiceProtoDescriptor.temporal.api.workflowservice.v1.WorkflowService.service, { + getSystemInfo( + call: grpc.ServerUnaryCall< + temporal.api.workflowservice.v1.IGetSystemInfoRequest, + temporal.api.workflowservice.v1.IGetSystemInfoResponse + >, + callback: grpc.sendUnaryData + ) { + requests.push({ metadata: call.metadata, deadline: call.getDeadline() }); + callback(null, {}); + }, + }); + + const port = await util.promisify(server.bindAsync.bind(server))( + 'localhost:0', + grpc.ServerCredentials.createInsecure() + ); + const connection = await NativeConnection.connect({ + address: `127.0.0.1:${port}`, + metadata: { 'start-ascii': 'a', 'start-bin': Buffer.from([0x00]) }, + }); + + await connection.setMetadata({ 'end-bin': Buffer.from([0x01]) }); + + await connection.workflowService.getSystemInfo({}); + t.is(requests.length, 2); + t.deepEqual(requests[1].metadata.get('start-bin'), []); + t.deepEqual(requests[1].metadata.get('start-ascii'), []); + t.deepEqual(requests[1].metadata.get('end-bin'), [Buffer.from([0x01])]); + await connection.close(); + server.forceShutdown(); +}); diff --git a/packages/worker/src/connection-options.ts b/packages/worker/src/connection-options.ts index e263e1d14..41bdb80b4 100644 --- a/packages/worker/src/connection-options.ts +++ b/packages/worker/src/connection-options.ts @@ -7,6 +7,7 @@ import { ProxyConfig, TLSConfig, } from '@temporalio/common/lib/internal-non-workflow'; +import type { Metadata } from '@temporalio/client'; import pkg from './pkg'; export { TLSConfig, ProxyConfig }; @@ -44,7 +45,7 @@ export interface NativeConnectionOptions { * * Set statically at connection time, can be replaced later using {@link NativeConnection.setMetadata}. */ - metadata?: Record; + metadata?: Metadata; /** * API key for Temporal. This becomes the "Authorization" HTTP header with "Bearer " prepended. @@ -102,13 +103,25 @@ export function toNativeClientOptions(options: NativeConnectionOptions): native. ); } + let headers: Record | null = null; + if (options.metadata) { + headers = {}; + for (const [key, value] of Object.entries(options.metadata)) { + if (typeof value === 'string') { + headers[key] = { type: 'ascii', value }; + } else { + headers[key] = { type: 'binary', value }; + } + } + } + return { targetUrl: tls ? `https://${address}` : `http://${address}`, clientName: 'temporal-typescript', clientVersion: pkg.version, tls, httpConnectProxy, - headers: options.metadata ?? null, + headers, apiKey: options.apiKey ?? null, disableErrorCodeMetricTags: options.disableErrorCodeMetricTags ?? false, }; diff --git a/packages/worker/src/connection.ts b/packages/worker/src/connection.ts index b69ced2ac..028706c34 100644 --- a/packages/worker/src/connection.ts +++ b/packages/worker/src/connection.ts @@ -126,8 +126,7 @@ export class NativeConnection implements ConnectionLike { // TODO: add support for abortSignal const ctx = this.callContextStorage.getStore() ?? {}; - const metadata = - ctx.metadata != null ? Object.fromEntries(Object.entries(ctx.metadata).map(([k, v]) => [k, v.toString()])) : {}; + const metadata = ctx.metadata != null ? tagMetadata(ctx.metadata) : {}; const req = { rpc: method.name, @@ -264,8 +263,8 @@ export class NativeConnection implements ConnectionLike { * * Use {@link NativeConnectionOptions.metadata} to set the initial metadata for client creation. */ - async setMetadata(metadata: Record): Promise { - native.clientUpdateHeaders(this.nativeClient, metadata); + async setMetadata(metadata: Metadata): Promise { + native.clientUpdateHeaders(this.nativeClient, tagMetadata(metadata)); } /** @@ -341,3 +340,12 @@ function getRelativeTimeout(deadline: grpc.Deadline) { return timeout; } } + +function tagMetadata(metadata: Metadata): Record { + return Object.fromEntries( + Object.entries(metadata).map(([k, value]) => [ + k, + typeof value === 'string' ? { type: 'ascii' as const, value } : { type: 'binary' as const, value }, + ]) + ); +}