diff --git a/Cargo.lock b/Cargo.lock index ad9e837..15c5665 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,51 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "account_sdk" +version = "0.1.0" +source = "git+https://github.com/cartridge-gg/controller?rev=0b5c318#0b5c318f233c6a1af4f4e781c060c46dab97334e" +dependencies = [ + "anyhow", + "async-trait", + "auto_impl", + "base64 0.22.1", + "base64urlsafedata", + "cainome", + "coset", + "ecdsa", + "futures", + "gloo-net", + "hex", + "indexmap 2.2.6", + "js-sys", + "lazy_static", + "nom", + "num-traits 0.2.19", + "p256", + "primitive-types", + "reqwest", + "serde", + "serde_cbor_2", + "serde_json", + "serde_with 3.9.0", + "sha2", + "starknet 0.11.0", + "starknet-crypto 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-types-core", + "thiserror", + "tokio", + "toml", + "u256-literal", + "url", + "urlencoding", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test", + "web-sys", + "webauthn-rs-proto", +] + [[package]] name = "addr2line" version = "0.22.0" @@ -272,7 +317,7 @@ dependencies = [ "bitflags 1.3.2", "bytes", "futures-util", - "http", + "http 0.2.12", "http-body", "hyper", "itoa", @@ -302,7 +347,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http", + "http 0.2.12", "http-body", "mime", "rustversion", @@ -325,6 +370,12 @@ dependencies = [ "rustc-demangle", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.13.1" @@ -337,6 +388,28 @@ version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" +[[package]] +name = "base64" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "base64urlsafedata" +version = "0.5.0" +source = "git+https://github.com/cartridge-gg/webauthn-rs?rev=a6cea88#a6cea888b953382c6d0604bd08bbede195205140" +dependencies = [ + "base64 0.21.7", + "paste", + "serde", +] + [[package]] name = "bigdecimal" version = "0.3.1" @@ -433,6 +506,89 @@ dependencies = [ "serde", ] +[[package]] +name = "cainome" +version = "0.2.3" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" +dependencies = [ + "anyhow", + "async-trait", + "cainome-cairo-serde", + "cainome-parser", + "cainome-rs", + "cainome-rs-macro", + "camino", + "clap", + "clap_complete", + "convert_case 0.6.0", + "serde", + "serde_json", + "starknet 0.11.0", + "starknet-types-core", + "thiserror", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "cainome-cairo-serde" +version = "0.1.0" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" +dependencies = [ + "serde", + "starknet 0.11.0", + "thiserror", +] + +[[package]] +name = "cainome-parser" +version = "0.1.0" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" +dependencies = [ + "convert_case 0.6.0", + "quote", + "serde_json", + "starknet 0.11.0", + "syn 2.0.66", + "thiserror", +] + +[[package]] +name = "cainome-rs" +version = "0.1.0" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" +dependencies = [ + "anyhow", + "cainome-cairo-serde", + "cainome-parser", + "camino", + "prettyplease", + "proc-macro2", + "quote", + "serde_json", + "starknet 0.11.0", + "syn 2.0.66", + "thiserror", +] + +[[package]] +name = "cainome-rs-macro" +version = "0.1.0" +source = "git+https://github.com/cartridge-gg/cainome?rev=fb91215#fb9121566c6b4ba864984fbac2819725d17b3f74" +dependencies = [ + "anyhow", + "cainome-cairo-serde", + "cainome-parser", + "cainome-rs", + "proc-macro2", + "quote", + "serde_json", + "starknet 0.11.0", + "syn 2.0.66", + "thiserror", +] + [[package]] name = "cairo-felt" version = "0.9.1" @@ -898,6 +1054,15 @@ dependencies = [ "thiserror-no-std", ] +[[package]] +name = "camino" +version = "1.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0ec6b951b160caa93cc0c7b209e5a3bff7aae9062213451ac99493cd844c239" +dependencies = [ + "serde", +] + [[package]] name = "cc" version = "1.0.99" @@ -935,6 +1100,33 @@ dependencies = [ "windows-targets 0.52.5", ] +[[package]] +name = "ciborium" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42e69ffd6f0917f5c029256a24d0161db17cea3997d185db0d35926308770f0e" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05afea1e0a06c9be33d539b876f1ce3692f4afea2cb41f740e7743225ed1c757" + +[[package]] +name = "ciborium-ll" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57663b653d948a338bfb3eeba9bb2fd5fcfaecb9e199e87e1eda4d9e8b240fd9" +dependencies = [ + "ciborium-io", + "half 2.4.1", +] + [[package]] name = "cipher" version = "0.4.4" @@ -967,6 +1159,15 @@ dependencies = [ "strsim", ] +[[package]] +name = "clap_complete" +version = "4.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b4be9c4c4b1f30b78d8a750e0822b6a6102d97e62061c583a6c1dea2dfb33ae" +dependencies = [ + "clap", +] + [[package]] name = "clap_derive" version = "4.5.5" @@ -1037,6 +1238,16 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "console_error_panic_hook" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" +dependencies = [ + "cfg-if", + "wasm-bindgen", +] + [[package]] name = "const-fnv1a-hash" version = "1.1.0" @@ -1056,6 +1267,12 @@ dependencies = [ "serde", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "const_format" version = "0.2.32" @@ -1107,6 +1324,16 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +[[package]] +name = "coset" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8cc80f631f8307b887faca24dcc3abc427cd0367f6eb6188f6e8f5b7ad8fb" +dependencies = [ + "ciborium", + "ciborium-io", +] + [[package]] name = "cpufeatures" version = "0.2.12" @@ -1163,6 +1390,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ "generic-array", + "rand_core", "subtle", "zeroize", ] @@ -1231,6 +1459,17 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + [[package]] name = "deranged" version = "0.3.11" @@ -1285,6 +1524,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", + "const-oid", "crypto-common", "subtle", ] @@ -1348,12 +1588,46 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + [[package]] name = "either" version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pem-rfc7468", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "ena" version = "0.14.3" @@ -1462,6 +1736,16 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core", + "subtle", +] + [[package]] name = "fixed-hash" version = "0.8.0" @@ -1511,6 +1795,21 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + [[package]] name = "futures-channel" version = "0.3.30" @@ -1518,6 +1817,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", + "futures-sink", ] [[package]] @@ -1526,6 +1826,34 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-macro" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "futures-sink" version = "0.3.30" @@ -1544,10 +1872,16 @@ version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ + "futures-channel", "futures-core", + "futures-io", + "futures-macro", + "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", + "slab", ] [[package]] @@ -1580,6 +1914,7 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", + "zeroize", ] [[package]] @@ -1601,6 +1936,40 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +[[package]] +name = "gloo-net" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06f627b1a58ca3d42b45d6104bf1e1a03799df472df00988b6ba21accc10580" +dependencies = [ + "futures-channel", + "futures-core", + "futures-sink", + "gloo-utils", + "http 1.1.0", + "js-sys", + "pin-project", + "serde", + "serde_json", + "thiserror", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "gloo-utils" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" +dependencies = [ + "js-sys", + "serde", + "serde_json", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "good_lp" version = "1.8.1" @@ -1669,6 +2038,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + [[package]] name = "h2" version = "0.3.26" @@ -1680,7 +2060,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.12", "indexmap 2.2.6", "slab", "tokio", @@ -1688,6 +2068,22 @@ dependencies = [ "tracing", ] +[[package]] +name = "half" +version = "1.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" + +[[package]] +name = "half" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +dependencies = [ + "cfg-if", + "crunchy", +] + [[package]] name = "hashbrown" version = "0.12.3" @@ -1776,6 +2172,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -1783,7 +2190,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", "pin-project-lite", ] @@ -1822,7 +2229,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "httparse", "httpdate", @@ -1842,7 +2249,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", + "http 0.2.12", "hyper", "rustls", "tokio", @@ -2201,7 +2608,7 @@ dependencies = [ "rayon", "serde", "serde_json", - "serde_with", + "serde_with 2.3.3", "starknet 0.10.0", "starknet-crypto 0.6.2", "starknet_api", @@ -2233,7 +2640,7 @@ dependencies = [ "petgraph", "pico-args", "regex", - "regex-syntax", + "regex-syntax 0.8.4", "string_cache", "term", "tiny-keccak", @@ -2247,7 +2654,7 @@ version = "0.20.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" dependencies = [ - "regex-automata", + "regex-automata 0.4.7", ] [[package]] @@ -2359,6 +2766,15 @@ dependencies = [ "libc", ] +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + [[package]] name = "matchit" version = "0.7.3" @@ -2478,6 +2894,16 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + [[package]] name = "num-bigint" version = "0.4.5" @@ -2607,6 +3033,24 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + [[package]] name = "parity-scale-codec" version = "3.6.12" @@ -2702,6 +3146,15 @@ dependencies = [ "digest", ] +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -2765,6 +3218,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "powerfmt" version = "0.2.0" @@ -2783,6 +3246,25 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +[[package]] +name = "prettyplease" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f12335488a2f3b0a83b14edad48dca9879ce89b2edd10e80237e4e852dd645e" +dependencies = [ + "proc-macro2", + "syn 2.0.66", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "primitive-types" version = "0.12.2" @@ -2951,8 +3433,17 @@ checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", - "regex-automata", - "regex-syntax", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", ] [[package]] @@ -2963,9 +3454,15 @@ checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", - "regex-syntax", + "regex-syntax 0.8.4", ] +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + [[package]] name = "regex-syntax" version = "0.8.4" @@ -2990,7 +3487,7 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "hyper", "hyper-rustls", @@ -3239,6 +3736,12 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -3267,6 +3770,20 @@ dependencies = [ "untrusted", ] +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "semver" version = "1.0.23" @@ -3282,6 +3799,16 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "serde_cbor_2" +version = "0.12.0-dev" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b46d75f449e01f1eddbe9b00f432d616fbbd899b809c837d0fbc380496a0dd55" +dependencies = [ + "half 1.8.3", + "serde", +] + [[package]] name = "serde_derive" version = "1.0.203" @@ -3369,7 +3896,25 @@ dependencies = [ "indexmap 1.9.3", "serde", "serde_json", - "serde_with_macros", + "serde_with_macros 2.3.3", + "time", +] + +[[package]] +name = "serde_with" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.6", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros 3.9.0", "time", ] @@ -3385,6 +3930,18 @@ dependencies = [ "syn 2.0.66", ] +[[package]] +name = "serde_with_macros" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "sha2" version = "0.10.8" @@ -3406,6 +3963,15 @@ dependencies = [ "keccak", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + [[package]] name = "shell-words" version = "1.1.0" @@ -3430,6 +3996,16 @@ dependencies = [ "libc", ] +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + [[package]] name = "siphasher" version = "0.3.11" @@ -3449,6 +4025,7 @@ dependencies = [ name = "slot" version = "0.8.0" dependencies = [ + "account_sdk", "anyhow", "axum", "dirs", @@ -3457,7 +4034,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "serde_with", + "serde_with 3.9.0", "starknet 0.11.0", "tempfile", "thiserror", @@ -3530,6 +4107,16 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + [[package]] name = "sprs" version = "0.7.1" @@ -3566,13 +4153,12 @@ dependencies = [ [[package]] name = "starknet" version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e633a772f59214c296d5037c95c36b72792c9360323818da2b625c7b4ec4b49" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "starknet-accounts 0.10.0", "starknet-contract 0.10.0", "starknet-core 0.11.1", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "starknet-macros 0.2.0", "starknet-providers 0.11.0", "starknet-signers 0.9.0", @@ -3595,13 +4181,12 @@ dependencies = [ [[package]] name = "starknet-accounts" version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee8a6b588a22c7e79f5d8d4e33413387db63a8beb98be8610138541794cc0a5" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "async-trait", "auto_impl", "starknet-core 0.11.1", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "starknet-providers 0.11.0", "starknet-signers 0.9.0", "thiserror", @@ -3615,7 +4200,7 @@ checksum = "cb3b73d437b4d62241612d13fce612602de6684c149cccf696e76a20757e2156" dependencies = [ "serde", "serde_json", - "serde_with", + "serde_with 2.3.3", "starknet-accounts 0.9.0", "starknet-core 0.10.0", "starknet-providers 0.10.0", @@ -3625,12 +4210,11 @@ dependencies = [ [[package]] name = "starknet-contract" version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5f91344f1e0b81873b6dc235c50ae4d084c6ea4dd4a1e3e27ad895803adb610" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "serde", "serde_json", - "serde_with", + "serde_with 3.9.0", "starknet-accounts 0.10.0", "starknet-core 0.11.1", "starknet-providers 0.11.0", @@ -3649,7 +4233,7 @@ dependencies = [ "serde", "serde_json", "serde_json_pythonic", - "serde_with", + "serde_with 2.3.3", "sha3", "starknet-crypto 0.6.2", "starknet-ff", @@ -3658,7 +4242,7 @@ dependencies = [ [[package]] name = "starknet-core" version = "0.11.1" -source = "git+https://github.com/kariy/starknet-rs?branch=dojo-patch#a8ed922690258ca218c80154007aa446ad03929c" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "base64 0.21.7", "crypto-bigint", @@ -3667,9 +4251,9 @@ dependencies = [ "serde", "serde_json", "serde_json_pythonic", - "serde_with", + "serde_with 3.9.0", "sha3", - "starknet-crypto 0.7.0", + "starknet-crypto 0.7.1 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "starknet-types-core", ] @@ -3715,8 +4299,9 @@ dependencies = [ [[package]] name = "starknet-crypto" -version = "0.7.0" -source = "git+https://github.com/kariy/starknet-rs?branch=dojo-patch#a8ed922690258ca218c80154007aa446ad03929c" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff2a821ad8d98c6c3e4d0e5097f3fe6e2ed120ada9d32be87cd1330c7923a2f0" dependencies = [ "crypto-bigint", "hex", @@ -3726,8 +4311,8 @@ dependencies = [ "num-traits 0.2.19", "rfc6979", "sha2", - "starknet-crypto-codegen 0.4.0 (git+https://github.com/kariy/starknet-rs?branch=dojo-patch)", - "starknet-curve 0.5.0 (git+https://github.com/kariy/starknet-rs?branch=dojo-patch)", + "starknet-crypto-codegen 0.4.0", + "starknet-curve 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", "starknet-types-core", "zeroize", ] @@ -3735,8 +4320,7 @@ dependencies = [ [[package]] name = "starknet-crypto" version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2a821ad8d98c6c3e4d0e5097f3fe6e2ed120ada9d32be87cd1330c7923a2f0" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "crypto-bigint", "hex", @@ -3746,8 +4330,7 @@ dependencies = [ "num-traits 0.2.19", "rfc6979", "sha2", - "starknet-crypto-codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "starknet-curve 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "starknet-curve 0.5.0 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "starknet-types-core", "zeroize", ] @@ -3774,16 +4357,6 @@ dependencies = [ "syn 2.0.66", ] -[[package]] -name = "starknet-crypto-codegen" -version = "0.4.0" -source = "git+https://github.com/kariy/starknet-rs?branch=dojo-patch#a8ed922690258ca218c80154007aa446ad03929c" -dependencies = [ - "starknet-curve 0.5.0 (git+https://github.com/kariy/starknet-rs?branch=dojo-patch)", - "starknet-types-core", - "syn 2.0.66", -] - [[package]] name = "starknet-curve" version = "0.3.0" @@ -3814,7 +4387,7 @@ dependencies = [ [[package]] name = "starknet-curve" version = "0.5.0" -source = "git+https://github.com/kariy/starknet-rs?branch=dojo-patch#a8ed922690258ca218c80154007aa446ad03929c" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "starknet-types-core", ] @@ -3847,8 +4420,7 @@ dependencies = [ [[package]] name = "starknet-macros" version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4fe4f8d615329410578cbedcdbaa4a36c7f28f68c3f3ac56006cfbdaeaa2b41" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "starknet-core 0.11.1", "syn 2.0.66", @@ -3868,7 +4440,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "serde_with", + "serde_with 2.3.3", "starknet-core 0.10.0", "thiserror", "url", @@ -3877,8 +4449,7 @@ dependencies = [ [[package]] name = "starknet-providers" version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c85e0a0f4563ae95dfeae14ea0f0c70610efc0ec2462505c64eff5765e7b97" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "async-trait", "auto_impl", @@ -3889,7 +4460,7 @@ dependencies = [ "reqwest", "serde", "serde_json", - "serde_with", + "serde_with 3.9.0", "starknet-core 0.11.1", "thiserror", "url", @@ -3914,8 +4485,7 @@ dependencies = [ [[package]] name = "starknet-signers" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c17da2139119dbe3aacf1d5d4338798a5c489d17f424916ceb9d2efd83554f87" +source = "git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694#2ddc69479d326ed154df438d22f2d720fbba746e" dependencies = [ "async-trait", "auto_impl", @@ -3924,15 +4494,14 @@ dependencies = [ "getrandom", "rand", "starknet-core 0.11.1", - "starknet-crypto 0.7.1", + "starknet-crypto 0.7.1 (git+https://github.com/xJonathanLEI/starknet-rs?rev=2ddc694)", "thiserror", ] [[package]] name = "starknet-types-core" version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6bacf0ba19bc721e518bc4bf389ff13daa8a7c5db5fd320600473b8aa9fcbd" +source = "git+https://github.com/starknet-io/types-rs?rev=f98f048#f98f048efa776f1f8da81a19f337a9b8c2f4b8f7" dependencies = [ "lambdaworks-crypto", "lambdaworks-math", @@ -4169,6 +4738,16 @@ dependencies = [ "thiserror-impl-no-std", ] +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + [[package]] name = "time" version = "0.3.36" @@ -4343,7 +4922,7 @@ dependencies = [ "bytes", "futures-core", "futures-util", - "http", + "http 0.2.12", "http-body", "http-range-header", "pin-project-lite", @@ -4394,6 +4973,49 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", ] [[package]] @@ -4408,6 +5030,16 @@ version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" +[[package]] +name = "u256-literal" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c39a1ed842845c7cdbcf413a186dba1fb3cf8b13753c21e5572bf64aadec4778" +dependencies = [ + "primitive-types", + "syn 1.0.109", +] + [[package]] name = "uint" version = "0.9.5" @@ -4483,6 +5115,7 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] [[package]] @@ -4628,6 +5261,31 @@ version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +[[package]] +name = "wasm-bindgen-test" +version = "0.3.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bf62a58e0780af3e852044583deee40983e5886da43a271dd772379987667b" +dependencies = [ + "console_error_panic_hook", + "js-sys", + "scoped-tls", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.66", +] + [[package]] name = "web-sys" version = "0.3.69" @@ -4638,6 +5296,18 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "webauthn-rs-proto" +version = "0.5.0" +source = "git+https://github.com/cartridge-gg/webauthn-rs?rev=a6cea88#a6cea888b953382c6d0604bd08bbede195205140" +dependencies = [ + "base64 0.21.7", + "base64urlsafedata", + "serde", + "serde_json", + "url", +] + [[package]] name = "webbrowser" version = "0.8.15" diff --git a/Cargo.toml b/Cargo.toml index 549c0cb..781428d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,12 +23,10 @@ thiserror = "1.0.32" url = "2.2.2" rand = "0.8.4" +# Must be synced across all downstream crates starknet = "0.11.0" starknet-types-core = "~0.1.4" [patch.crates-io] -# Remove this patch once the following PR is merged: -# -# To enable std feature on `starknet-types-core`. -# To re-export the entire `felt` module from `starknet-types-core`. -starknet-core = { git = "https://github.com/kariy/starknet-rs", branch = "dojo-patch" } +starknet = { git = "https://github.com/xJonathanLEI/starknet-rs", rev = "2ddc694" } +starknet-types-core = { git = "https://github.com/starknet-io/types-rs", rev = "f98f048" } diff --git a/slot/Cargo.toml b/slot/Cargo.toml index cd4c801..a2c2032 100644 --- a/slot/Cargo.toml +++ b/slot/Cargo.toml @@ -11,8 +11,8 @@ axum.workspace = true dirs = "5" graphql_client.workspace = true reqwest = { version = "0.11.20", default-features = false, features = [ - "rustls-tls", - "json", + "rustls-tls", + "json", ] } serde.workspace = true serde_json.workspace = true @@ -26,4 +26,7 @@ starknet.workspace = true url.workspace = true tempfile = "3.10.1" hyper.workspace = true -serde_with = "2.3" +serde_with = "3.9.0" + +# Must be synced across Dojo +account_sdk = { git = "https://github.com/cartridge-gg/controller", rev = "0b5c318" } diff --git a/slot/src/session.rs b/slot/src/session.rs index 3b533c8..f80b02a 100644 --- a/slot/src/session.rs +++ b/slot/src/session.rs @@ -1,6 +1,7 @@ use std::path::Path; use std::{fs, path::PathBuf}; +use account_sdk::storage::SessionMetadata; use anyhow::Context; use axum::response::{IntoResponse, Response}; use axum::{extract::State, routing::post, Json, Router}; @@ -29,25 +30,6 @@ pub struct Policy { pub method: String, } -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct SessionDetails { - /// The expiration date of the session. - // TODO(kariy): change this to u64 - pub expires_at: String, - /// The session's policies. - pub policies: Vec, - pub credentials: SessionCredentials, -} - -#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct SessionCredentials { - /// The signing key of the session. - pub private_key: Felt, - pub authorization: Vec, -} - /// Retrieves the session for the given chain id of the currently authenticated user. /// Returns `None` if no session can be found for the chain id. /// @@ -55,7 +37,7 @@ pub struct SessionCredentials { /// /// This function will return an error if there is no authenticated user. /// -pub fn get(chain: Felt) -> Result, Error> { +pub fn get(chain: Felt) -> Result, Error> { get_at(utils::config_dir(), chain) } @@ -65,7 +47,7 @@ pub fn get(chain: Felt) -> Result, Error> { /// /// This function will return an error if there is no authenticated user. /// -pub fn store(chain: Felt, session: &SessionDetails) -> Result { +pub fn store(chain: Felt, session: &SessionMetadata) -> Result { store_at(utils::config_dir(), chain, session) } @@ -81,7 +63,7 @@ pub fn store(chain: Felt, session: &SessionDetails) -> Result { /// /// This function will return an error if there is no authenticated user. /// -pub async fn create(rpc_url: U, policies: &[Policy]) -> Result +pub async fn create(rpc_url: U, policies: &[Policy]) -> Result where U: Into, { @@ -92,7 +74,7 @@ where /// Get the session token of the chain id `chain` for the currently authenticated user. It will /// use `config_dir` as the root path to look for the session file. -fn get_at

(config_dir: P, chain: Felt) -> Result, Error> +fn get_at

(config_dir: P, chain: Felt) -> Result, Error> where P: AsRef, { @@ -113,7 +95,7 @@ where /// Stores the session token of the chain id `chain` for the currently authenticated user. It will /// use `config_dir` as the root path to store the session file. -fn store_at

(config_dir: P, chain: Felt, session: &SessionDetails) -> Result +fn store_at

(config_dir: P, chain: Felt, session: &SessionMetadata) -> Result where P: AsRef, { @@ -149,7 +131,7 @@ pub async fn create_user_session( username: &str, rpc_url: U, policies: &[Policy], -) -> Result +) -> Result where U: Into, { @@ -164,12 +146,12 @@ fn open_session_creation_page( username: &str, rpc_url: &str, policies: &[Policy], -) -> anyhow::Result> { +) -> anyhow::Result> { let params = prepare_query_params(username, rpc_url, policies)?; let host = vars::get_cartridge_keychain_url(); let url = format!("{host}{SESSION_CREATION_PATH}?{params}"); - let (tx, rx) = channel::(1); + let (tx, rx) = channel::(1); let server = callback_server(tx)?; // get the callback server url @@ -222,16 +204,18 @@ impl IntoResponse for CallbackError { } /// Create the callback server that will receive the session token from the browser. -fn callback_server(result_sender: Sender) -> anyhow::Result { - type HandlerState = State<(Sender, Sender<()>)>; +fn callback_server(result_sender: Sender) -> anyhow::Result { + type HandlerState = State<(Sender, Sender<()>)>; // Request handler for the /callback endpoint. - let handler = |state: HandlerState, json: Json| async move { + let handler = |state: HandlerState, json: Json| async move { info!("Received session token from the browser."); let State((res_sender, shutdown_sender)) = state; let Json(session) = json; + println!("response: {session:?}"); + // Parse the session token from the json payload. res_sender .send(session) @@ -270,8 +254,9 @@ mod tests { use crate::account::{Account, AccountCredentials}; use crate::credential::{AccessToken, Credentials}; use crate::error::Error::Unauthorized; - use crate::session::{get_at, get_user_relative_file_path, store_at, SessionDetails}; + use crate::session::{get_at, get_user_relative_file_path, store_at}; use crate::utils; + use account_sdk::storage::SessionMetadata; use starknet::{core::types::Felt, macros::felt}; use std::ffi::OsStr; use std::path::{Component, Path}; @@ -339,7 +324,7 @@ mod tests { let username = authenticate(&config_dir); let chain = felt!("0x999"); - let expected = SessionDetails::default(); + let expected = SessionMetadata::default(); let path = store_at(&config_dir, chain, &expected).unwrap(); let user_path = get_user_relative_file_path(username, chain); @@ -354,7 +339,7 @@ mod tests { let config_dir = utils::config_dir(); let chain = felt!("0x999"); - let session = SessionDetails::default(); + let session = SessionMetadata::default(); let err = store_at(config_dir, chain, &session).unwrap_err(); assert!(err.to_string().contains("No credentials found")) @@ -362,7 +347,7 @@ mod tests { #[tokio::test] async fn test_callback_server() { - let (tx, mut rx) = channel::(1); + let (tx, mut rx) = channel::(1); let server = super::callback_server(tx).expect("failed to create server"); // get the callback url @@ -373,7 +358,7 @@ mod tests { tokio::spawn(server.start()); // call the callback url - let session = SessionDetails::default(); + let session = SessionMetadata::default(); let res = reqwest::Client::new() .post(url) .json(&session)